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
voidlcdinit()
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
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)?
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?
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...
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.
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 ?
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.
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)
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.