Hallo, ich habe ein 16x2 Display von Reichelt (LCD162C) am ATMega1280 angeschlossen. Das Board funktioniert soweit einwandfrei und meine Programme mit dem avr-gcc laufen ebenfalls. Nun hab ich an Port C das Display so angeschlossen (ich möchte den 4 Bit Modus nutzen): 1 Vss GND 2 Vcc 5V 3 Vee Abgriff von Poti (an VCC und GND) 4 RS PC0 am AVR 5 RW GND 6 E PC2 am AVR 7 DB0 GND 8 DB1 GND 9 DB2 GND 10 DB3 GND 11 DB4 PC4 am AVR 12 DB5 PC5 am AVR 13 DB6 PC6 am AVR 14 DB7 PC7 am AVR Wenn ich Atmel plus Display einschalte, erscheint auf dem Display eine Zeile schwarz (d.h. die einzelnen Textfelder). Trotz etlicher Versuche ist es mir aber noch nicht gelungen, irgendein Zeichen auszugeben. Ich hab es auch schon mit der bekannten LCD Lib versucht. Dazu habe ich noch RW and PC1 angeschlossen und in der Lib die entsprechenden Defines angepasst(IOMode 1, LCD_CONTROLLER_KS0073 0, XTAL 16000000, usw) lcd_initialize läuft durch, bei lcd_clrscr bleibt das Programm aber beim Sync-Wait hängen, ich bekomme also scheinbar auch kein ACK vom Display. Hat jemand einen Tipp, was ich hier falsch mache oder ein kurzes Stück C Code, mit dem ich irgendeine Reaktion aus dem Display rauskitzeln kann? Ist an der Anschaltung irgendwas buggi? Hab leider auch kein Ossi hier. Vielen Dank im voraus! Christian
1. Bist du sicher, dass alle pin laufen ? (Sind Ausgänge, Toggle geht). 2. Wie steht die Init aus ?, es ist richtig ? 3. Vor initializierung habst du etwa 30 ms gewartet ? Such andere lib, vielleicht geht.
Du kannst auch keine Rückmeldung vom Display bekommen, denn die Schreibleitung (RW) ist auch auf Masse gelegt. Zwei Möglichkeiten: Entweder die Schreibleitung an einen Portpin legen und steuern und D0-D3 vom Display von Masse trennen oder D0-D3 vom Display von Masse trennen und das Ganze nicht über Rückmeldung machen sondern schlicht lange genug warten. Die Zeiten stehen im HD44780- oder KS0066-Datenblatt. Da sollte sich auch der Ablauf der Init-Sequenz finden. Warum D0-D3 offen lassen? Weil dort PullUp-Widerstände drin sind, das erhöht den Stromverbrauch. Und wird auf Lesen geschaltet, gibt es sonst Bruch. Gruss Jadeclaw.
Hallo, ja, aber ich hatte oben auch geschrieben, dass ich für die Lib R/W auf PC1 gelegt hatte, da die Lib dies benötigt. Trotzdem bleibt das Teil dort hängen. Hast Du eine Idee, was dort noch falsch sein kann? Ist denn die Anschaltung grundsätzlich erstmal so korrekt? Ich hab jetzt nochmal R/W an PC1 gehängt, D0-D3 frei gelassen, der Rest wie gehabt. Nun bekomme ich immerhin alle Felder des Displays schwarz. Dafür hängt der Code aber jetzt im lct_init und kommt nicht mehr raus. Ich warte nach dem Einschalten auch noch rund 500ms, bevor ich init aufrufe. Grüße, Christian
Alle pixel sind schwarz? Das ist an sich schon mal positiv, denn das LCD tut folglich irgendwas, ich würde sogar fast sagen, dass das Ding initialisiert hat. Schonmal die Kontrastspannung verändert? Daran könnte es auch liegen, dass alles schwarz st. Ansonsten einfach immer mal 0.5ms-1ms nach jedem Befehl warten. Wenn's dann geht, funzt zumindest mal das LCD und der Code stimmt größtenteils auch. Wen es dann immer noch nicht geht, mal die Verbindung µC-LCD durchtesten (Lötbrücken usw.) MfG Andreas
Hallo, ich hab den Eindruck, das es irgendwas mit dem Timing zu tun hat. Wenn das Ding (Atmel und Display) einschalte oder neu die SW einspiele, bekomm ich unterschiedliches Verhalten. Dabei passiert folgendes: a) erste Zeile Schwarz, bleibt hängen b) Display leer, dann blinkt der Cursor an 1. Stelle, danach füllt sich das Display von links nach recht und über beide Zeilen komplett schwarz auf. a)passiert sehr oft, b) passiert seltener, häufiger dann, wenn ich nicht neu einschalte sondern nur die SW über den ISP einspiele. Es scheint sich da schon was zu tun. Ich mess nochmal die Verbindungen alle durch. Noch irgendwelche Ideen? Kann ich in der LCD Lib irgendwelche Defines falsch gemacht haben? Wie kann das Teil eigentlich im lcd_init hängen bleiben? Grüße, Christian
Hallo Christian, ich hatte bei meinen LCD-Versuchen (ATmega8, 4x27 Display von Pollin) ähnliche Symtome. Mein Fehler war, dass mein ATmega8 mit 4MHz lief (Quarz) und ich davon ausgegangen bin, dass der mit 16MHz getaktet wird. Entsprechend war in der make-Datei und in den C-Sourcen 16Mhz als Konstante für div. Berechnungen (z. B. Initialisierung Display) eingetragen. Folge war, dass die Initialisierung des Displays nicht korrekt durchgeführt wurde und das Display nichts vernünftiges anzeigte. Nachdem ich meinen Fehler erkannt und korrigiert hatte, lief das Teil auf Anhieb. Hoffe, das hilft weiter... Gruss Christoph
> Wie kann das Teil eigentlich > im lcd_init hängen bleiben? Eigentlich nur, indem es den Status der Busy-Leitung liest. War da nicht was mit der Datenrichtungsumschaltung bei neueren ARs?
Hallo Christoph, danke, aber das ist es auch nicht. Der Takt ist 16 MHz (hab auch nochmal auf den Quarz gesehen, das ist korrekt). XTAL habe ich als 16000000 definiert. Die Initialisierung scheint manchmal tatsächlich auch zu gehen. Gelegentlich ist das Display leer, der Cursor steht auf (0,0) und blinkt munter vor sich hin, hängt dann aber irgendwo in den letzten 4 Anweisungen von lcd_init und kommt nicht zurück. Das wiederrum liegt scheinbar daran, dass kein ACK zurück kommt. Das Grundsätzlich kein ACK kommt, kann eigentlich auch nicht sein, da vorher bereits synchronisiert und auf das ready bit gewartet wird. Grüße, Christian
Sollte man nicht die D0-D3 benutzen ? Den Busy kannste Vergessen. Das ist nicht noetig. Besser mit einem Timer die Zeiten einhalten. Die Zeile 1 beginnt bei 0x00, die Zeile 2 bei 0x40 O.
ENTSCHULDIGUNG!!! :-) Alles zurück, es geht! Hab leider einfach 3 Pins vertauscht, da ich von oben draufgeschaut, aber von unten gelötet habe peinlich. hat nur 4 Stunden gedauert, bis ich das gemerkt habe! Danke trotzdem für die Hilfe! Grüße, Christian
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.