Forum: Mikrocontroller und Digitale Elektronik I2C-LCD-Problem


von Thomas (Gast)


Lesenswert?

Hallo Leute,

ich versuche gerade ein LCD (44780 Kompatibel von Pollin)) über 
I2C(PCA8574) anzusteuern. Vorher habe ich das Display über 7 Pins (4 bit 
Modus) betrieben, was auch einwandfrei geht. Aus reiner Neugierde will 
ich das Display mittels eines I2C Expanders PCA8574 ansteuern.

Nun zum Problem:
Ich kann das Display mit 100 bzw. 400 KHz Busgeschwindigkeit im 
Debugging Modus einwandfrei ansteuern. Im Standalone-Betrieb passiert 
rein gar nichts bzw. keine Pin-Pegeländerung am PCA8574. Ich habe nach 
jeder Befehlszeile eine Pause von 1 Sekunde eingebaut, um irgendwelche 
Timing-Probleme zu verhindern. Aber das Problem besteht immer noch. Weil 
ich keine Fehlermeldung wie Ack, Bus bekomme, bin ich etwas ratlos.

von Bernhard S. (b_spitzer)


Lesenswert?

der PCA8574 hat eine Portstruktur wie die 8051, also Pull-Up-Widerstände 
und einen Transistor, der gegen Masse schaltet. Wenn Du auf die 
Datenleitungen 1-Pegel legst, dann kannst Du den Status sehr wohl 
auslesen.

Ansonsten ist das LCD über I2C eigentlich kaum schwieriger, als 
parallel. Ich habe allerdings einen PCA9555 (16Bit 
Portexpander)verwendet, weil noch 5 Navigationstaster dabei sein. Da 
habe ich mir den Luxus gegönnt und verwende das Display im 8-Bit Modus.

tschuessle
Bernhard

von holger (Gast)


Lesenswert?

>Im Standalone-Betrieb passiert
>rein gar nichts bzw. keine Pin-Pegeländerung am PCA8574.

Wie bitte? Noch mal besser erklären.

von Thomas (Gast)


Lesenswert?

Der I2C Expander PCA8574 hat die Pins P0 bis P7 ( P0 = RS / P1 = RW / P2 
= E / P3 = Backlight on/Off / P4 = DB4... P7 = DB7). Die Pins können 
durch das Senden eines Bytes (LSB = P0, MSB =P7) die jeweiligen Pins auf 
high oder low Pegel gesetzt werden. Im Debugging Modus setzt der 
Expander die Pins, nur im Standalone Betrieb nicht. Und da ich keine 
Fehlermeldung wie NAck oder Buserror bekomme, müsste der Expander die 
Befehle erhalten haben und dementsprechend die Pins auf high oder low 
setzen. Tut er aber nicht.

von Das_Warzenschwein (Gast)


Lesenswert?

der unterschied zwischen wanzenmodus und alleinbetrieb ist, dass 
praktisch alle register ausgelesen werden. ich würde also alle i2c 
status register nach jeder i2c befehlszeile auslesen. guck einfach in 
dein handbuch rein, in dem die ereignisabfolge genau beschrieben wird...

Lang lebe die Biene Maya!!!!!!!!!!!!!!!!!!!!!einseinseins...

von Thomas (Gast)


Lesenswert?

@Das_Warzenschwein

Danke für deinen Tipp! Das Auslesen des Status Registers in der while 
Schleife war die Lösung, d.h. nach bestimmten Events muss das Register 
ausgelesen werden, z.B. Start Bit in der while-Schleife überprüfen. Im 
Handbuch steht das nicht explizit, aber wurde empfohlen... darauf muss 
man erst kommen.

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.