Forum: Mikrocontroller und Digitale Elektronik LCD Init läuft nicht


von Steve (Gast)


Lesenswert?

Hallo zusammen
hier ein altbekanntes problem: ich habe mir ein 4x40 lcd von pollin 
gekauft dass ich jetzt gerne auch ansteuern würde nur leider funzt es 
nicht. es sind alle 8 datenleitungen angeschlossen das heißt ich würde 
es auch gerne im 8-bit modus betreiben. das ist mein init code :
1
void lcdinit()
2
{
3
  clearbyte();
4
  
5
  
6
  _delay_ms(15);
7
  lcdsend(COMMAND,0x30,1);  // 8 Bit modus starten
8
  
9
  _delay_ms(5);
10
  lcdsend(COMMAND,0x30,1);
11
  
12
  _delay_us(100);
13
  lcdsend(COMMAND,0x30,1);
14
  
15
  lcdsend(COMMAND,0x30,1);  // 8 Bit Interface
16
  lcdsend(COMMAND,0x08,1);  // Display aus
17
  lcdsend(COMMAND,0x01,1);  // Display clear
18
  lcdsend(COMMAND,0x06,1);  // Entry mode - kein shift
19
  lcdsend(COMMAND,0x0F,1);  // Display an, Kursor an, blinkender Kursor an
20
  
21
}
lcdsend sendet das zweite übertragene byte zum display, COMMAND setzt RS 
auf 0 . die 1 gibt die zeile ( enable leitung ) an. sieht jemand ob ich 
irgendeinen schritt in der initialisierung vergesse ?
Vielen dank für eure antworten

p.s. ich habe schon diverse tutorials dazu gelesen und viel ausprobiert

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Steve schrieb:
> leider funzt es nicht.
Was funzt nicht?

> es sind alle 8 datenleitungen angeschlossen
Und was sonst noch?

> lcdsend sendet das zweite übertragene byte zum display, COMMAND setzt RS
> auf 0 . die 1 gibt die zeile ( enable leitung ) an.
Und: kommt das alles dann auch auf den richtigen Leitungen an? Kannst du 
das messen (Oszi)?

von Teo D. (teoderix)


Lesenswert?

DaS was, als erstes ins Auge sticht, sind die 15mS, das sollten schon 
150mS sein!

von spess53 (Gast)


Lesenswert?

Hi

>DaS was, als erstes ins Auge sticht, sind die 15mS, das sollten schon
>150mS sein!

Nö. Der Original HD44780 fordert 15ms.

MfG Spess

von Teo D. (teoderix)


Lesenswert?

Steve schrieb:
1
> void lcdinit()
2
> {
3
>   clearbyte();
4
> 
5
> 
6
>   _delay_ms(20);
7
>   lcdsend(COMMAND,0x30,1);  // 8 Bit modus starten
8
> 
9
>   _delay_ms(10);
10
>   lcdsend(COMMAND,0x30,1);
11
> 
12
>   _delay_us(150);
13
>   lcdsend(COMMAND,0x30,1);
14
>   lcdsend(COMMAND,0x20,1);
15
>
16
>   lcdsend(COMMAND,0x30,1);  // 8 Bit Interface
17
>   lcdsend(COMMAND,0x08,1);  // Display aus
18
>   lcdsend(COMMAND,0x01,1);  // Display clear
19
>   lcdsend(COMMAND,0x06,1);  // Entry mode - kein shift
20
>   lcdsend(COMMAND,0x0F,1);  // Display an, Kursor an, blinkender Kursor 
21
> an
22
> 
23
> }

Ohne Gewähr!

PS:
Spesschen hat natürlich wiedermal recht :)

von Bernd N (Gast)


Lesenswert?

8 BIT Mode ist 0x38

von Teo D. (teoderix)


Lesenswert?

Ohhhh man,

nicht mein Tag Heute.

Vergiss den Blödsinn den ich da geschrieben habe!

von Steve (Gast)


Lesenswert?

sonst sind die versorgungsspannung ( 5v ) , die kontrastspannung ,die 
beiden enable leitungen ,rs und rw angeschlossen. rw liegt fest auf 
masse.

das display ist folgendes : 
http://www.pollin.de/shop/dt/MTcwOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_NAN_YA_LMMK5T028E2_4x40_blau.html

was mich auch wundert ist dass es im eingeschalteten zustand eher grün 
gelblich ist und im ausgeschlteten zustand normal blau,wie auf den 
bildern zu sehen

von Karl H. (kbuchegg)


Lesenswert?

Steve schrieb:

> was mich auch wundert ist dass es im eingeschalteten zustand eher grün
> gelblich ist und im ausgeschlteten zustand normal blau,wie auf den
> bildern zu sehen

wieviel Strom jagst du durch die Hintergrundbeleuchtung?

von Steve (Gast)


Lesenswert?

ich verwende keinen vorwiderstand so wie im datenblatt angegeben

von spess53 (Gast)


Lesenswert?

Hi

Hinweis

Beitrag "Re: LCD Init läuft nicht"

beachtet?

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Steve schrieb:
> ich verwende keinen vorwiderstand so wie im datenblatt angegeben
Welches Datenblatt verwendest du?
In dem vom Pollin steht 5Vdc bei 5 Ohm Vorwiderstand. Das sollten dann 
200mA sein. Und nur dieser Strom ist WICHTIG...

von Karl H. (kbuchegg)


Lesenswert?

Steve schrieb:
> ich verwende keinen vorwiderstand so wie im datenblatt angegeben

Ähm.
Im Datenblatt ist aber einer angegeben. Siehe Grafik im Abschnitt 7. Rbl 
ist in den Tabellen als 5 Ohm angegeben, so dass sich 200mA einstellen. 
In der Praxis wird man mit dem Strom auch tiefer gehen können. Die 
Maximalangabe ist des öfteren schon so hell, dass man Augenkrebs davon 
bekommt.

von Steve (Gast)


Lesenswert?

ich habe alles versucht und jetzt nochmal die basics gecheckt und da 
habe ich erfahren dass mein controller wohl nicht das macht was ich will 
wenn ich z.B. rs auf 0 setzen möchte. rs ist am pin C2 was auch 
gleichzeitug TCK ist angeschlossen . kann es sein dass die funktion 
dadurch beeinträchtigt wird ?

von Steve (Gast)


Lesenswert?

kann das am jtag liegen ?

von Karl H. (kbuchegg)


Lesenswert?

Steve schrieb:
> kann das am jtag liegen ?

Kann alles sein.
Hat denn dein unbekannter Controller JTAG?

Hinweis:
Du kannst und du darfst so ein LCD beliebig langsam ansteuern. Diese LCD 
sind nur darauf empflindlich, wenn sie zu schnell angesteuert werden. 
Wenn du aber zwischen den Pegelwechsel auf den einzelnen Leitungen 
jeweils eine halbe Stunde Delay einbaust, dann juckt das zwar das 
Display nicht, als Mensch ist man allerdings dann in der Lage auch mit 
den allereinfachsten Messmöglichkeiten festzustellen, ob alle Leitungen 
die Pegel einnehmen, die sie auch einnehmen sollen.

von Steve (Gast)


Lesenswert?

jetzt hatte ich das erste erfolgserlebnis :-)
das display lässt sich definitv initialisieren und der komplette port c 
macht das was er tun soll ( nachdem ich das JTAG bit gelöscht habe )
nächste frage : kann ich den kursor einfach mit dem befehl 
lcdsend(COMMAND,0x00,1) an die erste stelle im display setzen und dann 
mit lcdsend(DATA,0x41,1) ein 'A' darstellen ? (noch funktioniert das 
nicht)

von Led Fritz (Gast)


Lesenswert?

Ich würde für bessere Lesbarkeit generell erstmal mit shift Operationen 
arbeiten und wenn du ein Char übertragen willst direkt die Ziffer 
ausschreiben und keinen Zahlencode.

Beispiel LCD_Data('A');  das macht das gleiche, nur ist es viel lesbarer 
und im Datenblatt steht für gewöhnlich der Code um den Cursor zu setzen.

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.