Atmega32 + LCD von Pollin TC1602A-08

Gast #709990
Lesenswert?

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
Angehängte Dateien:
Gast #710012
Lesenswert?

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...
Gast #712738
Lesenswert?

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
Angehängte Dateien:
#717727
Lesenswert?

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...
Gast #717854
Lesenswert?

>Ich habe auch die wartezeiten verändert.[...]
1
delay50us:                              ; 50us Pause
2
           ldi  temp1, ( XTAL * 50 / 3 ) / 1000000
3
;                                   ^^^
4
;                      Du muss auch die Rechnung anpasssen...
5
; also fuer Jedes 'NOP' dass du einbaust, musst du die 3 um eins erhoehen
6
delay50us_:
7
;...
Es steht doch im Tut. woher die Rechung kommt, oder?

hth. Jörg
Gast #724471
Lesenswert?

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?
Gast #725618
Lesenswert?

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
Angehängte Dateien:
Gast #726388
Lesenswert?

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!!!
Gast #1561658
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren