Hallo liebes Board, ich sitze vor dem Problem, dass ich den LCD (standart HD44780, 2 Zeilen a 16 Zeichen) einfach nicht angesteuert bekomme. Ich habe die Software Bibliothek aus diesem Forum und noch 2 andere probiert und es hat einfach nichts funktioniert. F_CPU stimmt, Leitungen sind alle korrekt verbunden (bestimmt 20 mal geprüft) und ich sehe immer nur den Zustand, dass die obere Zeile "schwarz" und die untere "weiß" ist. Kontrast habe ich auch über ein Poti eingestellt. Kurz: Ich bin mit meinem Latein ab Ende :D. Falls ihr noch Ideen habt würde ich mich wirklich riesig freuen! Viele Grüße, Lukas
Bist du sicher das der Mega32 läuft? LED parallel blinken lassen. Schaltung zeigen, Programm zeigen.
Lukas schrieb: > F_CPU stimmt Läuft der µC auch tatsächlich mit genau dieser Taktfrequenz? Zur Sicherheit kannst Du das ja mit einem LED-Blinkprogramm mit der "delay"-Funktion testen. Ansonsten: Schaltplan und Programm zeigen! Gruß Dietrich
Lade mal bitte: Deinen "kompletten" Code Eine Anschlussbelegung Ein Bild von deiner "gesamten" Verkabelung hoch.
Also Taktfrequenz vom Atmega stimmt auch, hab in den Fuses 1 Megahertz eingestellt und der Programmcode entspricht genau den beiden Datein (.c und .h) und dem LCD Beispiel1. https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung Die Kabelfarben sind leider etwas verwirrend aber wenn ich am LCD die Pins durchgehe bekomme ich: Pin1 VSS --> GND Pin2 VDD --> VTG (5V) Pin3 V0 --> Hängt am Poti (gemessen 1,4V) Pin3 RS --> PD4 Pin4 RW --> GND Pin5 E (Enable) --> PD5 Pin6-Pin9 (D0-D3) --> nicht angeschlossen Pin10 Anode --> (5V) Pin11 Kathode --> GND
die Datenleitungen sind natürlich auch angeschlossen: D4 --> PD0 D5 --> PD1 D6 --> PD2 D7 --> PD3
Lukas schrieb: > hab in den Fuses 1 Megahertz eingestellt Hast Du auch getestet, ob diese Einstellung auch wirklich 1MHz bewirkt? Daher die Empfehlung: Test mit Blinkprogramm mit delay() und schauen, ob die Zeit etwa stimmt. Gruß Dietrich
Lukas schrieb: > Pin3 V0 --> Hängt am Poti (gemessen 1,4V) > Pin3 RS --> PD4 Da ist was falsch: 2x Pin3 > Pin6-Pin9 (D0-D3) --> nicht angeschlossen Bei mit ist D0..D3 an Pin7...Pin10 Und D4...D7 an Pin11...PIN14 > Pin10 Anode --> (5V) > Pin11 Kathode --> GND Das ist bei mir Pin15 und Pin16. Und wo ist der Vorwiderstand für die LEDs, oder ist der eingebaut? Gruß Dietrich
falls es hilf hier ein kleiner Auszug wie ich das Teil mal mit einem Attiny26 angesteuert habe. Ich habe einfach nur aufs Busyflag gewartet und dann die Befehle rausgeschickt, habe nicht auf die vorgegebenen Zeiten geachtet wie es das Datenblatt vorgibt. Hast du an die internen Pullups gedacht vielleicht kommen die dir in die Quere. Die einzelnen Unterprogramme erwähne ich nicht da es hier haupsaächlich um die Ansteuerung eines Latches geht womit ich meine Pins noch anderweitig nutzen konnte. Anbei noch ein Auszug aus dem Datenblatt für die Initialisierung in den 4bit-Mode. Bei meinem Controller funktionierte das Busyflag aber hingegen zu diesem Hitachi Datenblatt.
1 | rcall busy |
2 | rcall Mode8bit2line |
3 | rcall busy |
4 | rcall CursorOff |
5 | rcall busy |
6 | rcall CursorDirectionRight |
7 | rcall busy |
8 | rcall ClearLCD |
Thomas O. schrieb: > Bei meinem Controller funktionierte > das Busyflag aber hingegen zu diesem Hitachi Datenblatt. Evtl. sitzt bei dir ein KS0066 drauf, der etwas anders reagiert als der originale HD44780. Bei dem Hitachi sollte man sich wirklich nicht aufs Busybit verlassen, zumal man dann zwingend R/W verdrahten muss, was ohne Busybit fest auf W (Masse) liegen kann (wer will schon vom Display was lesen). Wer sein LCD nur benutzen will, sollte die Library von Peter Fleury nehmen. http://homepage.hispeed.ch/peterfleury/avr-software.html#libs Dabei muss man nur auf die richtige Verdrahtung und auf die Einstellungen in lcd.h achten. Wer mit dem LCD rumspielen möchte, sollte wirklich die Prozedur des Hitachi Datenblattes impementieren, da der alte Controller etwas zickig ist. Unter anderem gilt hier zur Einstellung des 4-bit Modus: "Ich sags dreimal und dann ist es wahr" :-)
:
Bearbeitet durch User
Hi, bei mir hatte das LCD am Mega32 mal ein Problem wegen der JTAG-Schnittstelle. Fuse den AVR neu und deaktiviere JTAG, dann könnte es gehen.
Hi >bei mir hatte das LCD am Mega32 mal ein Problem wegen der >JTAG-Schnittstelle. >Fuse den AVR neu und deaktiviere JTAG, dann könnte es gehen. Wird für PortD nicht viel bringen. MfG Spess
Danke schonmal für die vielen Antworten! :) @Dietrich L & Hubert G. Hab gerade mal ne LED dran gehängt und sie im Sekundentakt blinken lassen: Alles soweit in Ordnung. Bei den Pins hab ich mich verzehlt, der zweite Pin3 --> Pin4, Pin4 --> Pin5 etc. Vorwiderstand für die Beleuchtung ist intern verbaut (wurde jedenfalls nichts heiß und auch kein Spannungseinbruch) @Matthias Sch: Die Softwarebibliothek hatte ich auch schon benutzt, aber die hat leider auch nicht funktioniert. @Jonas Wühr: Jtag dürfte bei mir eigentlich kein Problem sein, konnte ja auch ne Led zum blinken bringen und der LCD ist ja eigentlich nichts anderes nur in cool :D Ich hab gerade nochmal probiert die Datenleitungen D0-D3 auf Masse zu ziehen aber auch das hat nichts gebracht. Ist echt wie verhext mit dem Ding
oder in der Software das JTAG Disable Bit setzen oder wie beim PC eine kleine Startverzögerung F12=Setup Taste X = JTAG enable
Nimm doch mal PA.. oder PC.. als Display-Port. Ich kenne mich mit dem STK500 nicht aus, aber ggf. stört die Verbindung zum Pegel-Wandler Richtung serieller Port von PD0 / PD1 (RXD/TXD).
Hast du mal in das Datenblatt des LCD gesehen, welche maximalen Anstiegszeiten für die Signale toleriert werden? Dein Drahtverhau wird nicht gerade mit steilen Flanken glänzen.
Hallo, ganz oft liegt es am Timing der allerersten Init-Sequenzen. Hier mal ganz grob die Reihenfolge als Pseudo-Code: nach Reset: DELAY_MS (5); HD44780_INIT_CMD (HD44780_CMD_FUNC); DELAY_MS (5); HD44780_WRITE_CMD (HD44780_CMD_FUNC); DELAY_MS (5); HD44780_WRITE_CMD (HD44780_CMD_FUNC); HD44780_WRITE_CMD (HD44780_CMD_CTRL); HD44780_WRITE_CMD (HD44780_CMD_CLEAR); DELAY_MS (1.52); HD44780_WRITE_CMD (HD44780_CMD_ENTRY); Gegebenenfalls die Delays anpassen (vergrößern)... wobei so ungefähr folgende Makros helfen (soll nur die Logik verdeutlichen): #define HD44780_WRITE_4(v) { HD44780_RW_0 (); \ HD44780_E_1 (); \ OUTPORT_BIT (HD44780_D7, ((v) >> 3) & 0x01); \ OUTPORT_BIT (HD44780_D6, ((v) >> 2) & 0x01); \ OUTPORT_BIT (HD44780_D5, ((v) >> 1) & 0x01); \ OUTPORT_BIT (HD44780_D4, (v) & 0x01); \ HD44780_E_0 (); \ HD44780_RW_1 (); \ DELAY_US (37); \ } #define HD44780_WRITE(v) { HD44780_WRITE_4 (HIGH_NIBBLE ((v))); \ HD44780_WRITE_4 (LOW_NIBBLE ((v))); \ } #define HD44780_WRITE_CMD(v) { HD44780_RS_0 (); \ HD44780_WRITE ((v)); \ HD44780_RS_1 (); \ } #define HD44780_INIT_CMD(v) { HD44780_RS_0 (); \ HD44780_WRITE_4 ((v) >> 4); \ HD44780_RS_1 (); \ } #define HD44780_WRITE_DATA(v) { HD44780_WRITE ((v)); } Check das mal mal...
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.