I2C-LCD-Problem

Gast #2759252
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.
#2759271
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
Gast #2759286
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.
Gast #2761538
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...
Gast #2762092
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.

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