LCD Ansteuerung Atmega32

Gast #4172968
Lesenswert?

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

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

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
#4173171
Lesenswert?

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
Angehängte Dateien:
(Firma: matzetronics) #4173469
Lesenswert?

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" :-)
Gast #4173988
Lesenswert?

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

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

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