Forum: Mikrocontroller und Digitale Elektronik Sorry aber mal wieder ein LCD162 therad


von Matthias P. (Firma: privat) (sogge)


Angehängte Dateien:

Lesenswert?

Hi Leute,
hab wirklich schon den ganzen Tag das Forum durchstöbert aber nichts 
gefunden das mir hilft.

Ich hab ein XMC1100 Entwicklungskid von Infinion (muss leider das 
verwenden da der Prof das so will)
Ich möchte das LCD162C CB CB erstmal im 8Bit modus betreiben da aktuell 
noch soviele Pins frei sind.. später wenns mal läuft könnte evtl auch 
auf 4Bit umgestellt werden.

Ich habs folgender maßen angeschlossen und die pins so inital.

P0_9_set_mode(OUTPUT_PP_GP);  //Display Enable  PP = Push PULL mode
P0_12_set_mode(OUTPUT_PP_GP);  //Display Datamode
P1_2_set_mode(OUTPUT_PP_GP);  //Display Data0 set
P1_3_set_mode(OUTPUT_PP_GP);  //Display Data1 set
P1_4_set_mode(OUTPUT_PP_GP);  //Display Data2 set
P0_0_set_mode(OUTPUT_PP_GP);  //Display Data3 set
P0_1_set_mode(OUTPUT_PP_GP);  //Display Data4 set
P0_2_set_mode(OUTPUT_PP_GP);  //Display Data5 set
P0_3_set_mode(OUTPUT_PP_GP);  //Display Data6 set
P0_4_set_mode(OUTPUT_PP_GP);  //Display Data7 set

den RW pin habe ich auf GND gelegt (vorerst)

dann erstmal alle Pins auf Low gezogen und danach die Init sequenz 
abgefahren wie im datasheet beschrieben.
Leider passiert nichts :(
Es sind nur die 16 Schwarzen kästchen in der 1sten reihe zu sehen wie 
beim anschalten.
Ich hab aber erlich gesagt keinen plan an was es liegt.
Am timing? Kein plan ich steppe sogar durch und das müsst ja wohl zeit 
genung sein für das Display.
Ich bin auch schon jede mögliche Init durchgelaufen die ich gefundne 
habe
(3mal softreset, 1mal softreset usw.)

im Anhang hab ich mal mein C file evtl hat ja wer ne idee was schief 
läuft.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

> P1_2_set_mode(OUTPUT_PP_GP); //Display Data0 set
> P1_3_set_mode(OUTPUT_PP_GP); //Display Data1 set
> P1_4_set_mode(OUTPUT_PP_GP); //Display Data2 set
> P0_0_set_mode(OUTPUT_PP_GP); //Display Data3 set
> P0_1_set_mode(OUTPUT_PP_GP); //Display Data4 set
> P0_2_set_mode(OUTPUT_PP_GP); //Display Data5 set
> P0_3_set_mode(OUTPUT_PP_GP); //Display Data6 set
> P0_4_set_mode(OUTPUT_PP_GP); //Display Data7 set

Welcher Teufel hat dich denn da geritten?

Du kannst dir das Leben unendlich einfacher machen, wenn du die 8 
Datenleitungen vom LCD (die ja ein Byte übertragen) auch so anschliesst, 
dass du ein auszugebendes Byte auch genau so auf einen Ausgangsport 
legen kannst, ohne erst vorher eine Bit-Umschaufel-Orgie veranstalten zu 
müssen.
Wenn du keinen kompletten 8-Bit Port mehr frei hast, dann sieh 
wenigstens zu, dass du eine möglichst hohe 1zu1 Korrespondenz hast.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

> Kein plan ich steppe sogar durch und das müsst ja wohl zeit genung sein für das 
Display.

Würde ich auch so sehen.

Steppe nochmal durch aber diesmal kontrollierst du direkt am LCD mit 
einem Voltmeter (oder einer LED) ob die Pins auch tatsächlich die Pegel 
haben, die sie haben sollen.

Nach jedem Programmschritt in main() an dem sich irgendeine der 
LCD-Leitungen verändert, kontrollierst du das.

(Hintergrund: ich traue deinem Belegungschaos nicht. Da schleichen sich 
viel zu leicht Fehler beim Strippenziehen ein)

: Bearbeitet durch User
von Matthias P. (Firma: privat) (sogge)


Lesenswert?

Karl Heinz schrieb:
>> P1_2_set_mode(OUTPUT_PP_GP); //Display Data0 set
>> P1_3_set_mode(OUTPUT_PP_GP); //Display Data1 set
>> P1_4_set_mode(OUTPUT_PP_GP); //Display Data2 set
>> P0_0_set_mode(OUTPUT_PP_GP); //Display Data3 set
>> P0_1_set_mode(OUTPUT_PP_GP); //Display Data4 set
>> P0_2_set_mode(OUTPUT_PP_GP); //Display Data5 set
>> P0_3_set_mode(OUTPUT_PP_GP); //Display Data6 set
>> P0_4_set_mode(OUTPUT_PP_GP); //Display Data7 set
>
> Welcher Teufel hat dich denn da geritten?
>
> Du kannst dir das Leben unendlich einfacher machen, wenn du die 8
> Datenleitungen vom LCD (die ja ein Byte übertragen) auch so anschliesst,
> dass du ein auszugebendes Byte auch genau so auf einen Ausgangsport
> legen kannst, ohne erst vorher eine Bit-Umschaufel-Orgie veranstalten zu
> müssen.
> Wenn du keinen kompletten 8-Bit Port mehr frei hast, dann sieh
> wenigstens zu, dass du eine möglichst hohe 1zu1 Korrespondenz hast.


Genau das is das Problem ich hab eben leider kein kompletten Port über, 
das liegt an der bescheuerten Aufteilung des Boards wie man aus dem Bild 
entnehmen kann.
Aber wegen Geschwindigkeit ist es eigentlich egal ob mans umschaufeln 
muss oder nicht das das Display nur alle 10 Sekunden aktuallisiert wird.

Ich bin auch schon mal durchgegangen und habs durchgemessen leider immer 
mit dem gleichen Ergebnis das es eigentlich stimmen müsste :).
An den Pins liegt beim jeweiligen High Pegel 5V an.

Aber die Initsequenz stimmt so weit oda?
Da irgendwie im Displaydatenblatt was anders steht als im verwendeten 
Displaycontroller Blatt (KS0070B).
Wann und Wo muss der Enablepin genau gesetzt werden? das steht auch 
nicht wirklich drin?

Die Spannungsversorgung (5V) muss bei der Init dauheraft anliegen oda?
Das VO  hab ich auf Masse gelegt und die Beleuchtung ist erstmals nicht 
angeschlossen (wurde aber auch schon mit angeschlossen probiert).

Ich bin echt am verzweifeln... kann es sein das es Kaputt ist??

Hoffe irgendwer hat noch nen Tipp oder ne Idee

von Karl H. (kbuchegg)


Lesenswert?

Matthias P. schrieb:

> Genau das is das Problem ich hab eben leider kein kompletten Port über,
> das liegt an der bescheuerten Aufteilung des Boards wie man aus dem Bild
> entnehmen kann.

Mag sein.
Du hast aber zb
>>> P0_0_set_mode(OUTPUT_PP_GP); //Display Data3 set
>>> P0_1_set_mode(OUTPUT_PP_GP); //Display Data4 set
>>> P0_2_set_mode(OUTPUT_PP_GP); //Display Data5 set
>>> P0_3_set_mode(OUTPUT_PP_GP); //Display Data6 set
>>> P0_4_set_mode(OUTPUT_PP_GP); //Display Data7 set

P0_0 bis P0_4 alle frei. Und was machst du? Du legst sie auf die LCD 
Bits 3 bis 7, anstatt korrespondierend auf 0 bis 4

> Aber wegen Geschwindigkeit ist es eigentlich egal ob mans umschaufeln
> muss oder nicht das das Display nur alle 10 Sekunden aktuallisiert wird.

Mir gehst nicht um Geschwindigkeit. Mir gehts um Fehleranfälligkeit. 
Denn bei derartigen 'welches BIt muss ich beackern, damit am Endgerät 
der Pin xy sich ändert' macht man schnell mal Fehler.

Hatte ich auch alles schon mal. Dachte auch: alles kein Problem, kann 
ich alles in Software wieder ausbüglen.

Aber wenn du das alles kontrolliert hast, dann muss das auch stimmen.


> Ich bin auch schon mal durchgegangen und habs durchgemessen leider immer
> mit dem gleichen Ergebnis das es eigentlich stimmen müsste :).
> An den Pins liegt beim jeweiligen High Pegel 5V an.
>
> Aber die Initsequenz stimmt so weit oda?

Die Initsequenz ist in Ordnung.
Sobald du das Byte mit dem Wert 0x30 auf die Datenleitungen raustaktest, 
müssten das LCD die angezeigten Balken abschalten und in den normalen 8 
Bit Modus gehen.

> Wann und Wo muss der Enablepin genau gesetzt werden? das steht auch
> nicht wirklich drin?

Ist ganz einfach.

Erst müssen die 8 Datenpins mit den Werten versorgt werden. Und 
natürlich RS auch richtig stehen.

Danach geht Enable einmal auf High und wieder zurück auf Low.

Ist ja auch logisch. Mit Enable sagst du der Gegenstelle: Jetzt gilts. 
Die Werte die jetzt an den Datenleitungen anliegen sind gültig.

> Die Spannungsversorgung (5V) muss bei der Init dauheraft anliegen oda?

Die SPannungsversorgung muss sowieso immer dauerhaft anliegen.

> Das VO  hab ich auf Masse gelegt

VO?
Wer oder was ist VO

Meinst du die Kontrastspannung?
Das kannst du leicht kontrollieren. Wenn das LCD normale 
Versorgungsspannung kriegt und nicht initialisiert wird, dann zeigt es 
eine Reihe Balken an. Diese Balken dienen dazu, damit du den Kontrast 
einstellen kannst. Normalerweise hat man ja ein Poti für die 
Kontrastspannung. An dem dreht man so lange, bis man die Balken gut und 
scharf sieht.
UNd dann geht die Programmierarbeit los. Dadurch das man den Kontrast 
vorher schon eingestellt hat, hat man jetzt auch die Sicherheit, dass 
man auch tatsächlich etwas sehen müsste, wenn man was ausgibt. Denn - 
der Kontrast wurde ja anhand der Balken schon eingestellt.

> und die Beleuchtung ist erstmals nicht
> angeschlossen (wurde aber auch schon mit angeschlossen probiert).

Die Beleuchtung hat damit überhaupt nichts zu tun. Die Beleuchtung ist 
einfach nur eine LED hinter dem Glas.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Wenn du 100% sicher bist, dass die Verkabelung stimmt, dann ist ein 
nicht funktionierendes LCD meistens eine Frage des Timings.

Der µC ist zu schnell oder das LCD wird überhaupt nach dem Anlegen der 
Versorungsspannung zu früh angesprochen und dann ist es mit seiner 
eigenen INitialisierung noch nicht fertig.

von Matthias P. (Firma: privat) (sogge)


Lesenswert?

Ok Merci für die Hilfe schon mal Karl Heinz.
Da mit den Ports 0-4 haste recht das werde ich mal ändern.

Wegen Kontrast usw stimmt alles, wollte nur sichergehen das ich da 
nichts durcheinander gebracht habe :)

Ich versuchs am WE nochmal bin mir aber zu 90% sicher das die Pins bzw. 
die Datenbits richtig gesetzt waren :(.
Wegen dem Timing wie gesagt bin komplett durchgesteppt was ja für die 
wartezeit ausreicht!

Aber danke schon mal!
Ich meld mich am WE evtl nochmal wenns immer noch nicht klappt :)

Wenn irgend jemand noch einen anderen Tipp hat bitte einfach Posten 
DANKE

von Dave C. (dave_chappelle)


Lesenswert?

Ich würde von Anfang an auf 4-Bit Mode setzten, da hast du auch einen 
"ganzen" halben Port über.

von Matthias P. (Firma: privat) (sogge)


Lesenswert?

Servus
Wollte nur ein Update geben.
Also es Funktioniert jetzt :)
war wohl daran gelegen, dass der RS Pin nicht sauber auf LOW gezogen 
wurde ... frag mich nicht warum, nach dem ich ihn auf GND gesetzt habe 
gings.
Ach ja und ich hab auch auf 4 Bit umgestellt is ja eigentlich unnötig da 
8Pins zu verbraten (hab natürlich jetzt P0.0 -> P0.3 verwendet ;)).

PS Danke für die Hilfe Karl Heinz auch wenns mich ned wirklich weiter 
gebracht hat :( egal etz läufts :-P

von Matthias P. (Firma: privat) (sogge)


Lesenswert?

Ach ja kann geschlossen werden :)

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.