Forum: Mikrocontroller und Digitale Elektronik LCD Ansteuerung Atmega32


von Lukas (Gast)


Angehängte Dateien:

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

von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

...falsches Foto, habs nochmal mit einem anderen Display versucht

von Hubert G. (hubertg)


Lesenswert?

Bist du sicher das der Mega32 läuft?
LED parallel blinken lassen.
Schaltung zeigen, Programm zeigen.

von Dietrich L. (dietrichl)


Lesenswert?

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

von Michael D. (etzen_michi)


Lesenswert?

Lade mal bitte:

Deinen "kompletten" Code
Eine Anschlussbelegung
Ein Bild von deiner "gesamten" Verkabelung

hoch.

von Lukas (Gast)


Angehängte Dateien:

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

von Lukas (Gast)


Lesenswert?

die Datenleitungen sind natürlich auch angeschlossen:

D4 --> PD0
D5 --> PD1
D6 --> PD2
D7 --> PD3

von Dietrich L. (dietrichl)


Lesenswert?

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

von Dietrich L. (dietrichl)


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

von Thomas (kosmos)


Angehängte Dateien:

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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" :-)

: Bearbeitet durch User
von Jonas Wühr (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Lukas (Gast)


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

von Thomas (kosmos)


Lesenswert?

oder in der Software das JTAG Disable Bit setzen oder wie beim PC eine 
kleine Startverzögerung F12=Setup
Taste X = JTAG enable

von Dieter F. (Gast)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von Uwe (Gast)


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

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.