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
Oje kann mir keiner helfen? Kennt sich keiner mit dem Thema gut aus oder hatte schonmal das gleiche Problem?
Hallo Leute leider läuft das Display immer noch nicht hat einer noch eine Idee oder einen Tipp?
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...
>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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.