Forum: Mikrocontroller und Digitale Elektronik Atmega32 + LCD von Pollin TC1602A-08


von Achim Turan (Gast)


Angehängte Dateien:

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

von Micha (Gast)


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...

von Achim Turan (Gast)


Angehängte Dateien:

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

von Achim Turan (Gast)


Lesenswert?

Oje kann mir keiner helfen? Kennt sich keiner mit dem Thema gut aus oder 
hatte schonmal das gleiche Problem?

von Wisler E. (wisler) Benutzerseite


Lesenswert?

Hallo Leute leider läuft das Display immer noch nicht hat einer noch 
eine Idee oder einen Tipp?

von Niels H. (monarch35)


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...

von Jörg X. (Gast)


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

von Wisler E. (wisler) Benutzerseite


Lesenswert?

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

von Otto (Gast)


Lesenswert?

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

von Tobias Hunner (Gast)


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?

von Marvin M. (Gast)


Lesenswert?

PORTC ? Klingelingeling
Wie siehts aus mit den JTAG-Fuses?

von Tobias Hunner (Gast)


Angehängte Dateien:

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

von Niels H. (monarch35)


Lesenswert?

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.

von Tobias Hunner (Gast)


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!!!

von Wisler E. (wisler) Benutzerseite


Lesenswert?

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

von hugi (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.