Hallo Leute, ich habe ein Problem bei dem AVR Tutorial von
Mikrocontroller.net. Ich komme einfach bei der LCD Lektion nicht weiter.
Ich verwende ein Atmega32 mit dem Atmel Evaluationboard 2.0 von Pollin.
Ich habe mir das Zusatzboard gekauft und versuche mit dem Board schon
seit Tagen das LCD TC1602A-08 zum laufen zu bekommen. Leider ohne Erfolg
es sind nur die Balken zu sehen.
Bei XTAL kann ich auch keine 16000000 angeben, mit der ja der Atmega32
arbeitet. Der Assembler meldet mir hier eine Fehlermeldung mit out of
Range. Dies ist für mich auch logisch.
1. Wie muss ich den Code ändern?
2. Stimmt der Code so, wie ich ihn hochgeladen habe? Habe im Tutorial
gelesen, dass man mit nop und der zahlen die Zeit auf die CPU anpassen
kann. Verstehe leider aber noch nicht so ganz was da gemeint ist. Bin
halt einfach ein blutiger Anfänger. Vielleicht könnte mir nochmal einer
die Rechnung erklären.
3. Oder ist das Display kaputt?
Ich hoffe ihr könnte mir helfen. Ich möchte gerne weiter an diesem
tollen Tutorial arbeiten.
Danke für eure Geduld und Antworten
Das mit den Balken ist schon mal gut, das Display ist nicht kaput :-)
Wie siehts mit dem Kontrast aus, eventuell must Du ja hier nur was
drehen.
Ohne dass ich Assembler kann, wenn Du eine falsche Frequenz XTAL nutzt,
kann die Initalisierung des Displays nicht richtig lauf, d.h. das
Display wird nicht funktionieren. Da wird eine bestimmte Zeit gewartet.
Man weiss wie lange ein bestimmter Befehl braucht (z.B. NOP 1 Takt). Bei
8 Mhz also 1/8000000 Sekunden. Ist der Takt aber 16 Mhz, so wartet man
"nur" 1/16000000 Sekunden, also um die Hälfte zu kurz! Hast du denn
überhaupt einen 16 Mhz-Quarz, sind die Fuses richtig eingestellt
(eventl. läuft der µC mit internem Takt 1Mhz?). Eventuell stelle den µC
per Fuse auf 8Mhz, sollte für das LCD genau genug laufen.
Weiterhin kenne ich das AddOn nicht, aber kontrollier noch mal, ob Du im
Programm den richtigen Port nutzt. Je nach µC liegen auf den Pins vom
Pollinboard verschiedene Ports und so wie es ausschaut, kann man auf dem
AddOn mit einer Menge Jumpern rumspielen...
So ich hab nochmal alles geprüft und die Fusebits so wie sie auf dem
Bild zu sehen sind eingestellt. Ich hoffe es waren die richtigen
einstellungen um den ATmega32 mit 16mhz zu betreiben. Ich habe auch die
wartezeiten verändert.(siehe unten)
delay50us: ; 50us Pause
ldi temp1, ( XTAL * 50 / 3 ) / 1000000
delay50us_:
dec temp1
nop
nop
nop
brne delay50us_
ret ; wieder zurück
; Längere Pause für manche Befehle
delay5ms: ; 5ms Pause
ldi temp1, ( XTAL * 10 / 607 ) / 1000
WGLOOP0: ldi temp2, $C9
WGLOOP1: dec temp2
brne WGLOOP1
dec temp1
brne WGLOOP0
ret ; wieder zurück
Heute habe ich versucht den ATmega32 mit dem intern oszilator auf 8mhz
einzustellen. (CKSEL3..0 0100) Leider auch ohne erfolg. Was mache ich
falsch komme so in dem Tutorial einfach nicht weiter. Oder soll ich mal
ein anderes LCD kaufen?
Danke für eure Hilfe
Das der XTAL-Wert stimmt ist ziemlich wichtig, sonst stimmt das Timing
der Daten nicht, die zum Display geschickt werden.
Ich würde mal schauen, ob du dein Entwicklerboard auf 8MHz runter
getaktet bekommst. Das wäre wohl für dich die etwas einfachere
Alternative als den Code anzupassen...
Habe auch schon die 8mhz variante versucht leider ohne erfolg.
Ja steht schon im Tutorial drin nur habe ich es einfach nicht richtig
verstanden.
Habe auch schon den Code mit dem Programm hapsim simuliert und da
funktioniert der code einwandfrei.
Kann es sein, dass das pollin display andere timings hat?
Danke an euch alle
Hallo Achim,
prüfe mal die Hardware und miss das Timing mit dem Scope nach.....
lass mal eine LED blinken - evtl. stürzt der Mega zwischendurch ab.....
Gruss Otto
Hallo zusammen,
verzweifle auch gerade mit dem gleichen Display von Pollin!
Hab den Quellcode von der LCD-Lektion (GCC - 4Bit-Ansteuerung) kopiert
und es klappt einfach nicht, das Display was ausgeben zu lassen!
Meine (erfolglose) Fehlersuche:
Der uC hängt sich nicht auf, da ich mit einer LED den Zustand anzeigen
lasse.
Port ist richtig konfiguriert (bei mir PortC)
RW-Pin ist gegen Ground (Schreiben)
Wer hat das Display schon mal zum Laufen gebracht?
Hallo Marvin,
so sehen meine Fusebits aus!
OK OK, ich sollte noch mal im Datenblatt nachsehen, was ich da
einstellen sollte! gh
Guter Tipp, Danke. Ist mir ja fast peinlich, dass ich da noch nicht
drangedacht habe!
Chau, Tobias
Wenn dein Kontroller (welcher auch immer) ein JTAG-Interface hat, das
mit auf PortC hängt, wäre es ratsam, die Fuse JTAGEN zu programmieren
(0=aus=low also ausschalten).
Bitte nicht wundern, wenn dann natürlich das Proggen/ Debugging über
JTAG nicht mehr funktioniert.
Jaja,
die Fuse-Bits. Kaum stellt man die richtig ein, schon funktioniert's!
Mein Display zeigt den Starttext (nach Initialisierung) richtig an.
Jetzt aber der nächste Schritt:
Wenn ich irgend einen anderen Befehl auf das Display schicke, dann zeigt
es nur wieder einen schwarzen Balken an??? gh
Also bei Funktion LCD_Clear() und/oder LCD_String("Test Test") streikt
es sofort wieder?
Was ist da passiert?
Bin mal wieder ratlos!!!
HI Tobias,
was für ein µC benutzt du? Mein Display will immer noch nicht
funktionieren!
Du benutzt den C Code oder?
Arbeitest du schon länger mit AVRs?
Gruss Achim
Hallo,
ist zwar ein alter Thread, aber falls es jemandem hilft:
ich hatte auch das Problem, dass nur ein schwarzer Balken zu sehen war.
Ich hatte R/W zuerst offen gelassen, aber dieser muss auf GND liegen.
Heißt, wenn man z. B. wie ich ein Evaluation Board hat und R/W mit am
Atmega hängt, dann muss der Pin als Ausgang gewählt und auf 0 gesetzt
werden. Die Codebeispiele, die hier so herumgeistern, machen das
natürlich nicht, weil R/W normalerweise sowieso auf GND liegt.