LCD Init läuft nicht

Gast #3785624
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
Moderator (Firma: Titel) Persönliche Seite #3785646
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)?
#3785700
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 :)
Gast #3785765
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
#3785801
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.
#3785858
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.
Gast #3785875
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)

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