PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD ][ (ehemals "AVR-Einsteiger steigt in AVR ein"



Goblin
20.10.2005, 12:43
Hallo

Ich bin meinen PICs untreu geworden und hab mir mal nen ATMEGA8 besorgt. Schnell nen Parallelport-Progger zusammengesteckt und die Grundschaltung:

http://img459.imageshack.us/img459/3327/testaufbau5mn.jpg

Das Testprog aus dem Einsteiger-Artikel hier im Artikel-Forum hat beim ersten Versuch gefunzt. Nun hab ich nen Display drangehängt und mir Bascom runtergeladen (Was ich mittlerweile für ein Geschenk der Götter halte :) ) Da hab ich dann eingestellt (in den Configs) an welchen Pins mein LCD hängt und so.. Und dann einfach



$regfile = "m8def.dat"
$crystal = 16000000
'$baud = 9600

Lcd "hello world"


geht aber nicht. Wundern tut mich: Muss ich das LCD nicht initialisieren? Hab keinen Befehl dafür gefunden.

Dann wollte ich noch ne RS232-Verbindung herstellen. An welchen Pin muss ich den Ein/Ausgang meiner MAX232-Schaltung anschließen? Sind die vorgegeben? Weil die Syntax des Print-Befehls (der is doch für rs232, oder?) enthält ja keine Pinbezeichnung. Hat jemand nen Code, der von der RS232 liest und auf das LCD schreibt?

x-ryder
20.10.2005, 13:14
erstens: GLÜCKWUNSCH zum avr, und GLÜCKWUNSCH zu bascom ^^
zweitens: wird auf dem lcd irgendwas angezeigt, und passiert überhaupt was mitm lcd? ausserdem versuchs doch mal mit cls vor dem "lcd"-befehl, das selektiert den ram, wie isses mit der kontrastspannung?

PicNick
20.10.2005, 13:40
Muss man LCDINIT machen ?

bergowitch
20.10.2005, 13:57
Unter optionen => display kannst du in Bascom die Pins einstellen, die mit dem AVR verbunden sind und auch bascom mitteilen um welches display es sich handelt also z.b. 16x2
das kannst du aber auch im programm selbst machen - da müsstest du aber mal in der bascom-hilfe nachschlagen...
ich finde ersteren weg einfacher.
Gruß Stefan

x-ryder
20.10.2005, 14:14
hat er doch schon längst, erst lesen, dann schreiben...

bergowitch
20.10.2005, 14:27
Da hast du recht - sorry. aber produktiv war deine Anmerkung auch nicht...
Egal ich habe nochmal kurz nachgeschlagen:
Ich hatte auch mal mit einem Display Probleme. Achte auf den Typ den du hast. Zwei sind anders im handling (aus der Help Datei):
When you have a 16 * 2 display, you don't have to use this statement.
The 16 * 1a is special. It is used for 2 * 8 displays that have the address of line 2, starting at location &H8.
The 20*4A is also special. It uses the addresses &H00, &H20, &H40 and &H60 for the 4 lines. It will also set a special function register.
ansonsten glaube ich nicht, das du initlcd brauchst es sei denn du willst das diplay neu initialisieren - beim ersten mal gehts automatisch.
Gruß
Stefan

x-ryder
20.10.2005, 14:30
sorry, aber ich hab ja schon oben geschrieben was ich meinen würde, aber mal was anderes: schick mir mal deine pins, mit denen du das display ansteuerst, dann schick ich dir nen programmcode-schnipsel mit den einstellungen, und einer ausgabe

Goblin
20.10.2005, 16:06
ok, ich steuere das 20x4-display (das im überigen im nicht angesteuerten zustand schwarze blöcke zeigt, kontrast also ok) mit den pins c0-c5 an (E-C5, RS-C4, DB(7..4)-C(3..0). Das hab ich in den Optionen auch eingestellt, genauso wie den Displaytyp (20x4).

cls werd ich gerad mal testen. CLS! schluchz* das is ja wie in alten qbasic-zeiten *träneverkneif* :)

edit: cls bringt nix. kann es vielleicht an den *ehrfurcht* *flüster* fuse-bits liegen? (nicht hauen, hab nich die geringste ahnung. ich mein nur, vielleicht benutzt er den internen oszi und deswegen funzt die ansteuerung nicht, da ich ja den osc mit 16 mhz definiert hat, der interne aber nur 1mhz hat.

hrei
20.10.2005, 16:51
(nicht hauen, hab nich die geringste ahnung. ich mein nur, vielleicht benutzt er den internen oszi und deswegen funzt die ansteuerung nicht, da ich ja den osc mit 16 mhz definiert hat, der interne aber nur 1mhz hat.

Bei falscher Taktangabe kann da nichts funktionieren. Die meisten, auf präzises Timing angewiesenen Prozesse greifen auf den Crystal-Eintrag zurück, um die richtigen Werte zu errechnen.

Versuche es mit

$crystal = 1000000

oder hänge einen externen 16MHz Quarz ran (ja, da musst Du die Fuses verstellen).

Grüße
Henrik

Goblin
20.10.2005, 17:04
ähm ja ich hab schon längst nen 16er quarz dran...

bergowitch
20.10.2005, 17:15
aber wenn die fusebits nicht gesetzt sind hilft der quarz nicht...

Goblin
20.10.2005, 17:21
und wie soll ich die deiner meinung nach setzen? ;)

ich hab schon rumprobiert und bin auf folgende config gekommen, die allerdings nicht funzt. liegt daran, dass ich keine ahnung hab, was ich da mache:

http://img456.imageshack.us/img456/9209/fusebitz4eg.jpg

x-ryder
20.10.2005, 17:25
Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portc.5 , Rs = Portc.4 , Db7 = Portc.3 , Db6 = Portc.2 , Db5 = Portc.1 , Db4 = Portc.0
Config Lcdbus = 4
Config Lcdmode = Port
Cls

das gib mal oben ein, vor allem anderem (nur noch die regfile und die quarzeinstellung davor)

und bei den fusebits musste A987 auf 1111 setzen (müsste was von external stehen)

Martin

bergowitch
20.10.2005, 19:20
schau mal hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=849
dort ist es ganz gut beschrieben. Und auch eine Grafik die deiner leider nicht entspricht ist dort angegeben
Gruß Stefan

ShadowPhoenix
20.10.2005, 20:34
Genau, wie x-ryder schon sagte. Definiere Softwareseitig.
Den Bus und Port aber in den Compilereinstellungen, Bascom scheint irgendwie Probleme damit zu haben. (Demo-Version?)
Hier der Code:



$regfile = "m8def.dat"
$crystal = 16000000

Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portc.5 , Rs = Portc.4 , Db7 = Portc.3 , Db6 = Portc.2 , Db5 = Portc.1 , Db4 = Portc.0

initlcd
cursor off
Cls

do
upperline
lcd "Test"
waitms 1000
cls
loop



Achja, zu den Fusebits:
(Externer Quarzoszillator)

http://www.mikrocontroller.net/images/atmega8-nachher.png

hrei
20.10.2005, 20:49
Genau, wie x-ryder schon sagte. Definiere Softwareseitig.
Den Bus und Port aber in den Compilereinstellungen, Bascom scheint irgendwie Probleme damit zu haben. (Demo-Version?)

damit hat Bascom weder in der Demo- noch in der Vollversion irgendwelche Schwierigkeiten. In der aktuellen Version lassen sich sämtliche Einstellungen das LCD betreffend sowohl in den Optionen als auch im Programm selbst vornehmen, wobei die Compileranweisungen im Programm immer Vorrang haben.

Für Demoprogramme empfehle ich selbst, die Einstellungen im Programm vorzunehmen. Dann sieht man sie wenigstens.

Grüße
Henrik

Goblin
23.10.2005, 17:41
hallo!

also meine rs232-kommunikation läuft nun recht gut. mein max232 war nicht mit masse verbunden #-o . das lcd läuft allerdings immer noch nicht. ich habs an verschiedenen ports ausprobiert. aber es will einfach nicht. die kabel sind mehrmals von mehreren leuten gecheckt worden und korrekt verbunden. am kontrast liegts auch nicht. was kanns sonst noch sein? das display ist ok. hier die bascom-datei zum runterladen (http://wwwhomes.uni-bielefeld.de/jhartmann2/vbeiner/lcd-test.bas). ich weiss nicht weiter...

ShadowPhoenix
23.10.2005, 17:56
Du hast in deinem Code zum downloaden schon wieder vergessen:

initlcd
cursor off
Cls

Hat bei mir geholfen...

hrei
23.10.2005, 18:09
Oh Mann,

jeder Dritte der dumm fragt oder dumme Antworten gibt, wird erschossen. Zwei waren heute schon da ](*,) .

Ne, im Ernst:

bei dem Code.....


'Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.5 , Db7 = Portb.4 , Db6 = Portb.3 , Db5 = Portb.2 , Db4 = Portb.1

Config Lcdbus = 4
Print "Config Lcdbus = 4 "
Wait 1
Config Lcdmode = Port
Print "Config Lcdmode = Port"
Wait 1
Cls
Print "cls"


hilft kein CLS oder LCDINIT.

Sofort ins Auge springt, daß dem LCD ein Portmodus aufgezwungen wird, obwohl es im Pinmodus betrieben wird. Bitte, bitte - das Kapitel LCD wird in der Hilfe bezogen auf Standardtext-Lcds so ausführlich und unmissverständlich behandelt, daß man da wirklich nur nachlesen muss und die Beispiele ausprobieren muss.

Fehler in der Verdrahtung sind auch dann nicht ausgeschlossen, wenn 100 "Leute" sich das angesehen haben.

Grüße
Henrik, der das nicht so grimmig meint, wie es klingt

darwin.nuernberg
23.10.2005, 18:11
Hallo,
ich fasse mal mein Erfahrungen zum Thema LCD und BASCOM zusammen, egal bo diese hier schon angesprochen wurden.

1. Ist alles eingeschaltet
2. Hast du genug Strom (Wirklich 5V) Messen nicht raten.
3. Spass beiseite
4. Contrastspannung erst mal auf MASSE!
5a. FUESBITS kontrollieren (JTAG abschalten) oder besser wirklich nur Ports ohne zweitfunktion verwenden
5b. Konflikt mit anderer Portfunktion (Portd.0 und Portd.1 sind für RS232) oder TWI = I2C = I²C Port (nachschlagen wo SCL, SDA sind)
5c. ISP Programieradapter könnte auch quer schiessen (also abklemmen)
6. CONFIG LCDPIN richtig eingestellt (wirklich jede Leitung vom Kontakt des LCD zu AVR kontrollieren)
7 keine Unterbrechungen oder WaKo vorhanden?
8. Checken ob der AVR auch wirklich arbeitet (LED an einen Port und ein Blinksignal ausgeben)
9. INITLCD wird automatisch bei Reset ausgeführt und muss nicht explizit ausgeführt werden (aber macht auf keinen Fall was wenn er trozdem ausgeführt wird (mach ich immer)
10. CLS ist doch schön praktisch
11. Richtiges Datenblatt des LCD (ähnlich aussehenden LCD können dennoch unterschiedlich beschaltet sein) Typenbezeichnung genau beachten
12. Achte auf die Zählweise (ich hatte schon LCD'S welche erst vom 3. Pin aus mit 1 begannen, die beiden anderen waren fürs Backlight)
13. nicht konfus werden, alles schön schritt für schritt (auf Pappier abhaken) ruhig bleiben, dicht denken oder meinen sondern wissen (also messen=Wissen)
14. eines nach dem anderen
15. DAS LCD nicht im Compiler sondern im Quelltext (Compilerdirektiven) definieren (siehe CODE)

Config Lcd = 16 * 2 ' oder wie Dein LCD aufgebaut ist
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
INITLCD
CLS
LOCATE 1,1
LCD "Hallo Welt"
LOCATE 2,1
LCD "Da bin ich"


16 Hast Du 4 Datenleitungen oder 8 Datenleitungen angeschlossen (vier reichen den Rest offen lassen oder besser auf HI legen)

Das LCD wird nicht mit Print sondern mit LCD angesprochen
Print gibt auf RS232 aus (siehe Code)

Dann muss das Ding doch laufen (wenn es nicht kaputt ist)

Goblin
23.10.2005, 18:14
Remarks

The LCD display is initialized automatic at start up when LCD statements are used by your code.
If fore some reason you would like to initialize it again you can use the INITLCD statement.

habs versucht, hat aber ned geholfen. leider... :(

Goblin
23.10.2005, 18:16
Sofort ins Auge springt, daß dem LCD ein Portmodus aufgezwungen wird, obwohl es im Pinmodus betrieben wird. Bitte, bitte - das Kapitel LCD wird in der Hilfe bezogen auf Standardtext-Lcds so ausführlich und unmissverständlich behandelt, daß man da wirklich nur nachlesen muss und die Beispiele ausprobieren muss.

danke für deine grimmige hilfe ;) ich hab in der hilfedatei nur von "bus"-und "port"-modus gelesen...

edit: Config Lcdmode = Pin hat im überigen nicht geholfen....

Goblin
23.10.2005, 18:34
Hallo,
ich fasse mal mein Erfahrungen zum Thema LCD und BASCOM zusammen, egal bo diese hier schon angesprochen wurden.

1. Ist alles eingeschaltet

ja

2. Hast du genug Strom (Wirklich 5V) Messen nicht raten.

gemessen. ok

3. Spass beiseite

ok

4. Contrastspannung erst mal auf MASSE!

kontrast stimmt

5a. FUESBITS kontrollieren (JTAG abschalten) oder besser wirklich nur
Ports ohne zweitfunktion verwenden

port ohne zweitfunktion wurde ausprobiert (port c) und jtag ist abgeschaltet

5b. Konflikt mit anderer Portfunktion (Portd.0 und Portd.1 sind für RS232) oder TWI = I2C = I²C Port (nachschlagen wo SCL, SDA sind)

siehe oben

5c. ISP Programieradapter könnte auch quer schiessen (also abklemmen)

getestet: hilft nicht

6. CONFIG LCDPIN richtig eingestellt (wirklich jede Leitung vom Kontakt des LCD zu AVR kontrollieren)

ok

7 keine Unterbrechungen oder WaKo vorhanden?

ok

8. Checken ob der AVR auch wirklich arbeitet (LED an einen Port und ein Blinksignal ausgeben)

serielle übertragung funzt

9. INITLCD wird automatisch bei Reset ausgeführt und muss nicht explizit ausgeführt werden (aber macht auf keinen Fall was wenn er trozdem ausgeführt wird (mach ich immer)

ausprobiert

10. CLS ist doch schön praktisch

ausprobiert

11. Richtiges Datenblatt des LCD (ähnlich aussehenden LCD können dennoch unterschiedlich beschaltet sein) Typenbezeichnung genau beachten

hab ich

12. Achte auf die Zählweise (ich hatte schon LCD'S welche erst vom 3. Pin aus mit 1 begannen, die beiden anderen waren fürs Backlight)

steht alles im db

13. nicht konfus werden, alles schön schritt für schritt (auf Pappier abhaken) ruhig bleiben, dicht denken oder meinen sondern wissen (also messen=Wissen)

...

14. eines nach dem anderen

...

15. DAS LCD nicht im Compiler sondern im Quelltext (Compilerdirektiven) definieren (siehe CODE)

Config Lcd = 16 * 2 ' oder wie Dein LCD aufgebaut ist
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
INITLCD
CLS
LOCATE 1,1
LCD "Hallo Welt"
LOCATE 2,1
LCD "Da bin ich"


hab ich probiert

16 Hast Du 4 Datenleitungen oder 8 Datenleitungen angeschlossen (vier reichen den Rest offen lassen oder besser auf HI legen)

liegen ned auf high, sind unbelegt. lcd wird über 4 bit angesteuert. beim pic hats genau so gefunzt.

Das LCD wird nicht mit Print sondern mit LCD angesprochen
Print gibt auf RS232 aus (siehe Code)

das "print" ist auch für rs232 (siehe code)

Dann muss das Ding doch laufen (wenn es nicht kaputt ist)

darwin.nuernberg
23.10.2005, 18:48
UND WAS IST JETZT?

WENN

Alles richtig angeschlossen,
keine defekten Bauteile vorhanden,
alle Spannungen und Signale korrekt und
das Programm auch Stimmt,

DANN SOLLTE ES DOCH FUNKTIONIEREN...

Schaust Du auch auf das LCD welches angeschlossen ist oder auf das andere (in der Verpackung) ?



PS: Im Zweifel liegt der Fehler immer zwischen den Kopfhörern

darwin.nuernberg
23.10.2005, 18:54
Wenn Du einen Aufbau mit PIC hast der einmal funktioniert hat,
dann schliesse das LCD doch noch einmal daran an.

Dann bist Du Dir sicher, ob das LCD in Ordnung ist oder nicht.

x-ryder
23.10.2005, 19:43
hallo? ich hab auchn lcd im pinmodus, der mode muss aber bei port liegen...

hrei
23.10.2005, 19:57
hallo? ich hab auchn lcd im pinmodus, der mode muss aber bei port liegen...

Nein, der Modus muss nicht bei Port liegen, genauer gesagt er darf es nicht, wenn die Anschlüsse über verschiedene Ports verstreut sind. Nur wenn die Konventionen für den Portmodus eingehalten werden (siehe dazu die erläuternden Texte in den LIBs), geht auch das, oft durch Zufall.

Im Falle des Fragestellers ist es aber schwierig bis unmöglich hier nun noch aus der Ferne Hilfe zu leisten.

Henrik

x-ryder
23.10.2005, 20:00
meine güte, glaub es mir, es ist erprobt, die configuration habe ich mal von einem elektronikfachhandel übernommen, die das schon seit 10 jahren mit avrs machen, die werden es wohl wissen oder?

ausserdem isses doch nur auf einem port

hrei
23.10.2005, 20:09
meine güte, glaub es mir, es ist erprobt, die configuration habe ich mal von einem elektronikfachhandel übernommen, die das schon seit 10 jahren mit avrs machen, die werden es wohl wissen oder?


Ich ziehe es in diesem Falle vor, den Statements von MCS in den LIBs und in der Hilfe zu "glauben", zumal die in dieser Beziehung tatsächlich auch von mir erprobt und wenigsten 100%tig zuverlässig sind. Da hier schon soviel Konfusion bezüglich der tatsächlich vom Fragesteller genutzen Belegung herrscht, gehe ich da lieber auf Nummer sicher.

BTW: Ich kenne eine Reihe von Einzelpersonen und Firmen, die Dinge schon seit mehr 10 Jahren machen. Richtiger werden sie dadurch nicht.

Henrik

Goblin
24.10.2005, 07:22
ruhig leute. ich hab port-und pinmodus schon ausprobiert, wobei teils die pins über mehrere ports verstreut waren (wie bei der aktuellen konfig) oder auch nur am reinen port

@darwin: die pic-schaltung hab ich leider nicht mehr..

Goblin
24.10.2005, 17:47
Also, aufgepasst!

Ich hab nochmal alles genauer dokumentiert (auch wenn ich euch damit langsam auf die ..... (Big Brother PicNick was here) gehe). Also mal von vorn:

Ich habe dieses LCD

http://wwwhomes.uni-bielefeld.de/jhartmann2/lcd_kontrast_am_display.jpg

schon mal korrekt mit Spannung versorgt. Sieht man ja. Der Kontrast stimmt, die beiden jeweils oberen Zeilen (Das LCD hat für je 2 Zeilen 1 Controller) zeigen Blöcke an, die unteren nicht. Das gehört so.

Hier sieht man, wie die Anschlüsse belegt sind

http://wwwhomes.uni-bielefeld.de/jhartmann2/lcd_pinning_am_display.jpg

(vergleiche Datenblatt des Displays (http://wwwhomes.uni-bielefeld.de/jhartmann2/4x20lcdvalo.pdf)) Das bunte ist das Datenkabel, das schwarz/weiße das Versorgungs-und Kontrastkabel. Die Belegung des bunten ist wie folgt:


Pin 4, RS: Braun
Pin 6, EN: Rot
Pin 11, DB4: Orange
Pin 12, DB5: Gelb
Pin 13, DB6: Grün
Pin 14, DB7: Blau


Das Datenkabel ist an eine Steckerleiste gelötet (Alle Lötstellen sind geprüft) und ins Steckbrett an Port C gesteckt:

http://wwwhomes.uni-bielefeld.de/jhartmann2/lcd_anschluss_an_avr.jpg

Der Quellcode sieht wie folgt aus:



$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600
Config Portc = Output
Config Portd = Output
Config Portb = Output

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1

Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portc.1 , Rs = Portc.0 , Db7 = Portc.5 , Db6 = Portc.4 , Db5 = Portc.3 , Db4 = Portc.2
Config Lcdmode = Port ' LCDmode = Pin wurde auch mit negativem Resultat getestet
Config Lcdbus = 4
Initlcd
Wait 1
Cls

Lcd "hello world"


BasCom-Version 1.11.7.7

Die Grundlegenden Programmeinstellungen stimmen, ebenso die PonyProg-Einstellungen. Das sehe ich daran, dass wenn ich etwas über die serielle Schnittstelle an den Rechner schicke dies auch korrekt ankommt.

Aber ums komplett zu machen hier noch die Fusebits (PonyProg 2.05 Beta)

http://wwwhomes.uni-bielefeld.de/jhartmann2/lcd_fusebits.JPG

Der interne Oszillator wird benutzt. Den Externen hab ich auch gar nicht angeschlossen.

Fazit: Der AVR läuft korrekt, sichtbar an der RS232-Kommunikation. Das LCD ist korrekt versorgt, sichtbar an den Balken und dem Kontrast. Der Goblin ist total genervt und dreht bald durch.

HILFEEEEE!!!

hrei
24.10.2005, 18:07
Hallo!

Öhmm... ja. Sieht richtig aus.

Was ich allerdings nicht erkennen kann: Hast Du R/W (am LCD Pin 5) auf GND gelegt? Wenn der in der Luft hängt, geht gar nix.

Edit: Außerdem hast Du Pin 3 des LCD (Kontrastspannung) überhaupt nicht angeschlossen. Auch wenn der Kontrast vermeinlich stimmt, gut ist das nicht. Spendiere dem Ding noch ein Poti. Mittelanzapfung an Pin3, die beiden anderen einer an + 5V, der ander an GND.
Nochmal edit: Ne, das ist es nicht das Poti ist ja da und die Leitung auch. ist bloß schlecht zu sehen. Bleibt noch das fettgedruckte.

Grüße
Henrik

Goblin
24.10.2005, 18:21
Aber natürlich, sorry dass ich vergaß, es zu erwähnen:

http://wwwhomes.uni-bielefeld.de/jhartmann2/display_pin_5.jpg

Ja, hab ich!

Und das mit dem Kontrast kannst du auf dem Bild auch erkennen: Der Anschluss ist unterm Display (durchkontaktieren wollte/konnte ich ned), das graue Kabel. Schwarz ist Masse und Weiß +5V. Und nen Poti ist dran. (Sieht man im Hintergrund auf dem Steckbrett)

Goblin
24.10.2005, 19:56
Da fällt euch nix mehr zu ein, was? Hab ich jetzt gewonnen??? *verwirrt*

hrei
24.10.2005, 20:12
Da fällt euch nix mehr zu ein, was? Hab ich jetzt gewonnen??? *verwirrt*

Nein, dazu fällt zumindest mir nichts mehr ein. Deine Verdrahtung ist nach dem was aus den Bildern und der Beschreibung ersichtlich ist, korrekt.

Wie ich in einem vorigen Posting erwähnte, ist es schwierig bis unmöglich Dir hier aus der Ferne zu helfen. Immer wenn ich die Mess-Spitzen meines Multimeters auf den Bildschirm halte, kommt nur Unsinn.

Ich kann Dir lediglich versichern, daß ich selbst mit vielem Schwierigkeiten mit Bascom hatte und habe, mit der einfachen Anbindung eines LCD aber noch nie. Ähnlich dürfte es hunderten von anderen Anwendern gehen. Insofern hast Du leider nicht gewonnen.

Grüße
Henrik

pebisoft
24.10.2005, 20:17
....drangehängt und mir Bascom runtergeladen (Was ich mittlerweile für ein Geschenk der Götter halte.....
.....Wundern tut mich: Muss ich das LCD nicht initialisieren? Hab keinen Befehl dafür gefunden......
......Dann wollte ich noch ne RS232-Verbindung herstellen. An welchen Pin muss ich den Ein/Ausgang meiner MAX232-Schaltung anschließen? Sind die vorgegeben? Weil die Syntax des Print-Befehls (der is doch für rs232, oder?) enthält ja keine Pinbezeichnung. Hat jemand nen Code, der von der RS232 liest und auf das LCD schreibt?.....

das geschenk der götter ist ein schwere aufgabe oder...
du solltest das programm erst beurteilen, wenn du es beurteilen kannst.
du wirst es noch kennenlernen....und verfluchen, es ist ein schei... programm.
progge mit winavr-c oder fastavr-basic.
mfg pebisoft

Goblin
24.10.2005, 20:45
tja pebi, mein lieber freund, auch du konntest mir leider nicht aus meiner not helfen. obwohl dein erster beitrag ja zugegeben sehr produktiv war. ich möchte dich im überigen endlich mal auf

... und edit hinweisen...

wie dem auch sei, dein programm hat auch nicht funktioniert...


ROFLMAO! dann lösch den ersten beitrag doch auch bitte! :)

hrei
24.10.2005, 20:48
das geschenk der götter ist ein schwere aufgabe oder...
du solltest das programm erst beurteilen, wenn du es beurteilen kannst.
du wirst es noch kennenlernen....und verfluchen, es ist ein schei...

Nur weil Du mit etwas nicht zurecht kommst, muss es ja nun noch lange nicht schlecht sein. Deine unfundierte Anti-Bascom Kampagne ist nicht mehr witzig.

Henrik

pebisoft
24.10.2005, 21:03
....wie dem auch sei, dein programm hat auch nicht funktioniert...

schade...dann fummelt weiter in euren sumpf von bascom.
ich hoffe ihr habt erfolg als anfänger oder ihr proggt in winavr-c oder fastavr-basic, ist erste sahne.
mfg pebisoft

pebisoft
24.10.2005, 21:08
...Nur weil Du mit etwas nicht zurecht kommst, muss es ja nun noch lange nicht schlecht sein. Deine unfundierte Anti-Bascom Kampagne ist nicht mehr witzig....

wer kommt schon mit bascom zurecht. ist unschlüssig in den entscheidungen, lässt den anwender im dunkeln wenn es um den durchblick in der hex-datei geht und... und...
oder hat einer von euch jemals das programm im avr-studio durchgescheckt und den grössenwahn in der programmstruktur erkannt.
ich glaube nicht, das eure kenntnisse soweit entwickelt sind.
mfg pebisoft

Goblin
24.10.2005, 21:27
*murmel* einfach ignorieren..... einfach iiiignorieeeeren */murmel*

24.10.2005, 21:49
Hallo

Kannst du denn an den Pins von Portc eine Spannung messen. Spannung an AVCC korrekt ? Kabelbruch ?

Ansonsten einfach mal ein kleines Testprogramm schreiben und jeden PIN einzel prüfen bis zum Display, ist ja nicht der Aufwand.

MFG
Dieter

pebisoft
24.10.2005, 21:50
es ist eine feststellung, das bascom unvollkommen ist.
der starke avr-fan hat nach einigen wochen keinerlei möglichkeiten mehr, den avr damit auszureizen, weil alles nur eine vorgebene stupide eingabe von basicworten sind die man im nachhinein nicht mehr beeinflussen kann wie bei winavr-c und fastavr-basic (erzeugt 100% asm-code für den assembler des entwicklerproduktes > avr-studio) .
durch bascom verliert der avr seinen inneren reiz und das ist schade.
mfg pebisoft

Goblin
24.10.2005, 21:54
ich hab jetzt ein zweites display getestet, von dem ich weiss, dass es funktioniert. negativ. ich werde wohl mal alle pins einzeln testen, das wird das beste sein.

hrei
24.10.2005, 22:42
ich hab jetzt ein zweites display getestet, von dem ich weiss, dass es funktioniert. negativ. ich werde wohl mal alle pins einzeln testen, das wird das beste sein.

Ich fürchte, das ist der letzte verbleibende und erfolgversprechende Weg. Irgendwo hängt es nun mit Sicherheit an der Harware. Viel Glück!

Grüße
Henrik

Goblin
25.10.2005, 07:50
so, also ich hab 6 leds an den port gehängt (PC0..5) auf masse gehängt (ja, ich weiss, auf +5V kann ich mehr leistung hängen) und ein lauflicht geproggt, was VOR dem eigentlichen LCD-Prog abläuft. Hier der Code:


$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600
'Config Portc = Output
'Config Portd = Output
'Config Portb = Output
Portc = 00000000
Wait 1
Portc.0 = 1
Wait 1
Portc.1 = 1
Wait 1
Portc.2 = 1
Wait 1
Portc.3 = 1
Wait 1
Portc.4 = 1
Wait 1
Portc.5 = 1
Wait 1

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1

Config Lcd = 16 * 2
Config Lcdpin = Pin , E = Portc.1 , Rs = Portc.0 , Db7 = Portc.5 , Db6 = Portc.4 , Db5 = Portc.3 , Db4 = Portc.2
Config Lcdmode = Port ' LCDmode = Pin wurde auch mit negativem Resultat getestet
Config Lcdbus = 4
Initlcd
Wait 1
Cls

Lcd "hello world"

Die LEDS (bzw natürlich der controller) machen nun folgendes:

nach start des Programms blitzen ein paar von ihnen kurz auf. ich denke das ist die stelle wo das lcd initialisiert wird. dann leuchten alle mit 1 sec. verzögerunge dazwischen hintereinander auf. wenn alle an sind gehen später (ca 1 sec später) alle aus bis auf die an c3 und 4. . dann gehen eine sec später alle wieder an und verlöschen nach 10 sec flackernd. dann wird das prog neu gestartet.

fusebitz:

http://wwwhomes.uni-bielefeld.de/jhartmann2/lcd_fusebits.JPG

wie gehabt...

was hab ich an den bits falsch eingestellt?

PicNick
25.10.2005, 09:52
ICh hab mir dein Programm mal angesehen, wegen der Interpretaion deiner LED:


L_0x0026:
LDI r24,0x5F
OUT SPL,r24 ; Stack
LDI YL,0x20
LDI ZL,0xB8
MOV r4,ZL ; Frame
LDI r24,0x04
OUT SPH,r24 ; Stack
LDI YH,0x04 ; Softstack
LDI ZH,0x03 ; Softstack
MOV r5,ZH ; Frame
;-----------------------------------------------------------------
; clear SRAM
LDI ZL,0xFE
LDI ZH,0x03
LDI XL,0x60
LDI XH,0x00
CLR r24
L_0x0044:
ST X+,r24
SBIW ZL,0x0001
BRNE L_0x0044 ; clear SRAM
;-----------------------------------------------------------------
LDI r24,0x06
OUT UBRRL,r24 ; $BAUD
LDI r24,0x00
OUT UBRRH,r24 ; $BAUD
LDI r24,0x18
OUT UCSRB,r24
;-----------------------------------------------------------------
RCALL L_0x00D4 ; INITLCD
;-----------------------------------------------------------------
CLR r6 ; clear ERR
;-----------------------------------------------------------------
;
;-----------------------------------------------------------------
LDI r24,0x00
OUT PORTC,r24 ; Portc = 00000000
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC0 ; portc.0 = 1
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC1
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC2
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC3
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC4
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
SBI PORTC,PC5
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
; Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1
;-----------------------------------------------------------------
LDI r24,0x87 ; URSEL
OUT UBRRH,r24
;-----------------------------------------------------------------
RCALL L_0x00D4 ; INITLCD
;-----------------------------------------------------------------
LDI ZL,0x01
LDI ZH,0x00
RCALL L_0x00C2 ; WAIT 1
;-----------------------------------------------------------------
RCALL L_0x00B8 ; CLS
;-----------------------------------------------------------------
LDI ZL,0xEA
LDI ZH,0x01
RCALL L_0x00AC ; LCD "hello wordl"
;-----------------------------------------------------------------
; END
;-----------------------------------------------------------------
CLI
L_0x00AA:
RJMP L_0x00AA ; loop
;----------------------------------------------------------------

Jetzt seh' ich mir nochmal genauer das LCD-Zeugs an, erwarte allerdings keine Weisheiten.

Omit
25.10.2005, 10:03
Schreib einfach mal unter das Lcd "hello world"
Waitms 5000 und mach ne schleife in das Programm sonst kann das ganze doch nicht funzen! Denkt doch mal selbst drüber nach! Probieren geht über studieren!

Achso dein FUSEbits problem.... unter artikel hier im Forum steht wie man die Bits setzt. https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=849

Hoffe du hast den Atmel nich schon kaputt geflasht...!

Achso uns hier mal nen ganz einfaches TUT für Bascom:

http://staff.ltam.lu/feljc/Documents/AVR_HowTo.doc

anschauen lohnt!

Mfg Timo

Goblin
25.10.2005, 13:20
@ picnick: was wolltest du mir mit dem assemblercode sagen? :)

@ omit: was bringt mir ne schleife? ich meine warum sollte das lcd nicht ihne schleife funzen? das hat afaik nen ram, in das geschrieben wird und der text bleibt so lange, bis es nen neuen gibt oder der saft abgedreht wird.

fusebits: ja, die seite kenn ich schon auswendig... muss noch mal ein wenig mit den fb's experimentieren. sag mal bitte was ich AUF KEINEN FALL tun darf. (den reset-pin nicht als i/o-pin einstellen weiss ich. sonst ists vorbei mit isp).

das howto: habs gesaugt und werds mal anschauen! danke!

pebisoft
25.10.2005, 13:36
es gibt 4-zeilen-lcd, die 2 controller drauf haben und die dann einzeln aktiviert werden müssen.
mfg pebisoft

hrei
25.10.2005, 13:45
es gibt 4-zeilen-lcd, die 2 controller drauf haben und die dann einzeln aktiviert werden müssen.
mfg pebisoft

Ja, die haben dann aber auch zwei E Pins. Ist hier nicht der Fall.

Henrik

PicNick
25.10.2005, 14:02
Bitte kontrolliert mich, aber ich glaube, das LCD über nimmt die daten an der falling edge von E, BasCom geht aber von rising aus
Wenn das wahr ist, kannst du einen Inverter dazwischen tun ?

Goblin
25.10.2005, 14:08
ja, kann ich später mal probieren. nen einfachs cmos NAND sollte ja reichen

PicNick
25.10.2005, 14:14
Nochmal nachgeschaut, nun bin ich vollkommen verwirrt. Ich glaub, das war Blödsinn. Aber egal, schlimmer kann's nicht werden.

Goblin
25.10.2005, 14:18
ja, stimmt. gefunzt hats nicht. aber nette idee! ich könnte mich auch mal in einen eimer kernseife stellen, die zeile
'bubbidiblub in den quelltext einfügen und britney spears dazu hören. vielleicht gehts dann? :)

PicNick
25.10.2005, 14:21
Entschuldige, tut mir leid :oops:
Letzter Versuch für's Erste: haben beide den gleichen GND ?

Goblin
25.10.2005, 14:22
ja! :) sorry, wollt dich ned bashen, weiss es doch selber ned besser! :)

25.10.2005, 14:31
Hallo

Verpass dem AVR mal Stützkondesatoren 100 nF an VCC & AVCC, jeweils nach Masse.

Nächster Schritt. Stelle das LCD Display "von hand ein". ist ja auch nicht die große Sache. Schmeiß alle LCD Befehle raus.

MFG
Dieter

Goblin
25.10.2005, 16:16
was meinst du mit "von hand einstellen"? die bitmuster am port quasi selber erstellen? das kann's doch auch ned sein.... das dauert doch ewig und 3 tage

Omit
25.10.2005, 16:30
Also du stellst die Fusebits genauso ein wie auf dem Bild.
Wenn du das gemacht hast dan kompilierst du diesen Code.
Dan schreibst du ihn in dein Avr. Und wenn es dan nicht geht liegt es entweder daran das du die Ports falsch hast oder es falsch verkabelt hast.
http://www.mikrocontroller.net/tutorial/lcd
genau nach diesem schema und nicht anders.
Und dan funzt das Display mit diesem Code.


'$LCD1
$crystal = ???????? 'Das is das einzige was du noch einstellen musst.
Config Lcd = 16 * 2
Config Lcdpin = Pin , E = Portc.1 , Rs = Portc.0 , Db7 = Portc.5 , Db6 = Portc.4 , Db5 = Portc.3 , Db4 = Portc.2
Config Lcd = 20 * 2 ' Ist das die richtige größe?????????????

Cls ' CLS = Clear and Reset LCD-Display!
Cursor Blink ' CURSOR blinkt!

Lcd "Hello world!" ' erste Zeile!
Locate 2 , 1 ' Cursor auf 2 Zeile, erstes Zeichen!
Lcd "LCD-Test"
End


mfg Timo

hrei
25.10.2005, 16:53
@Omit

so langsam reißt mir hier der Gedulsfaden. Das haben wir doch schon alles durchgekaut bis zum Erbrechen. Da wir (fast alle) hier wissen, daß diese Metthode zum Erfolg führt und Goblin nach anfänglicher Forenkonfusion ja auch, soweit sich das aus der Ferne beurteilen läßt. ganz brav umgesetzt hat, bleibt nur noch anzunehmen, daß es hier ein Fehlerteufelchen gibt, daß sich nicht per "Ratschlag" auschalten läßt.

Mein letzter Rat ist: Alles auseinander rupfen, einmal um den Block spazieren gehen und dann ausgeruht mit einer Minimalkonfiguration neu zusammenstöpseln. Hat bei mir bisweilen in solchen Situationen geholfen.

Viele Grüße
Henrik

Omit
25.10.2005, 17:26
@hrei
Mhh... wende meinst...!
Manchen leuten kann mans nicht oft genug sagen.
Und wenn man von so einem wie dir für hilfe angeblafft wird (siehe oben),
dan sieh zu wie du dir alleine hilfst falls du mal nen problem haben solltest.

Ich haben fertig.

Goblin
25.10.2005, 18:51
also ich glaub ich gebs dann erstmal auf. kommt mir zwar alles komisch vor aber was solls. vielleicht liegts ja am steckbrett... whatever. ich bau mir sowieso irgendwann wenn mein gesichtsbräuner endlich da is ne experimentierplatine und dann wird das prob entweder verschwunden sein oder immer noch da sein. und letzteres is mir dann auch egal! :)

danke für eure hilfe und einigen für ihr verständnis. hab ehrlich alle eure tipps und ratschläeg befolgt. leider isses nix geworden.

Goblin
11.12.2005, 12:14
So, ich bin wieder am Ball. Ich hab das Experimentierboard so weit fertig, der Atmega lässt sich brav brennen und so. (Auch meinen alten verfuseten hab ich per quarzoszi wieder hinbekommen). Nur das LCD macht immernoch die gleichen Mucken. Kann mal einer von euch nen LCD durchmessen. Interessieren würd mich der Widerstand zwischen RS und DB 4 - DB 7 und zwischen E und DB 4 - 7. Weil da bei mir IMHO einige Anomalitäten sind.... Ich mess da teilweise nen nicht gerade hohen Widerstand..