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.
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
>Im Standalone-Betrieb passiert >rein gar nichts bzw. keine Pin-Pegeländerung am PCA8574. Wie bitte? Noch mal besser erklären.
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.
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...
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.