STM32 I2C Probleme mit PCF8574

#4942493
Lesenswert?

Hallo,

Ich versuche heute schon den ganzen Tag einen PCF8574 IO-Expander über 
I2C mit einem STM32F103C8 anzusprechen, doch leider ohne Erfolg. 
Vielleicht hat hier jemand einen Rat.

Ich rufe nur die pcf8574_i2c_init() und dann die Funktion pcf8574_read() 
auf (siehe Code im Anhang).

Das Problem liegt in der Funktion pcf8574_i2c_address_direction in der 
Abfrage "while (!I2C_CheckEvent(PCF8574_I2Cx, 
I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));", aus der der MC nicht mehr 
heraus kommt. Offensichtlich scheint da die I2C_CheckEvent() immer einen 
ERROR zu liefern (lastevent steht immer bei 0x30400).

Und laut Oszi bekomm ich auch nichts zurück vom PCF8574, den ich jetzt 
auch schon mal getauscht habe. Alle Adress-Pins sind mit Ground 
verbunden und das müsste laut Datenblatt die Adresse 0x20 ergeben.

Jemand eine Idee?
Angehängte Dateien:
#4942556
Lesenswert?

Stimmt, ich verwende die Adresse 0x20, die in den Funktionen 
pcf8574_write() bzw pcf8574_read() um eine Stelle nach links geschiftet 
wird. Darin wird die Funktion pcf8574_i2c_address_direction() werwendet, 
die wiederum die CMSIS Funktion I2C_Send7bitAddress() aufruft, die genau 
das LSB Bit auf eins oder null setzt, abhängig davon ob gesendet oder 
empfangen wird ... das sollte also passen.
#4972038
Lesenswert?

So, ich hab die Kommunikation prinzipiell hinbekommen doch leider bleibt 
die "Stop Condition" nach einem Schreibzugriff (bzw. nach dem ersten 
Lesen danach) aus und die Kommunikation steht.

- Ich kann beliebig oft die IOs vom PCF8574 lesen. (Bild 1)

- Das mach ich so lange bis das LSB low ist. (Bild 2)

- Daraufhin schreibe ich auf die IOs mit dem höchstwertigen Bit nicht 
gesetzt. Auf dem IO ist eine LED angeschlossen, die sich dadurch auch 
ein schaltet. (Bild 3)

- Danach werden wieder die IOs gelesen. Doch leider bleibt SDA auf low 
und damit wird die "Stop Condition" nicht erkannt und die Kommunikation 
steht. (Bild 4)

Jemand eine Idee?
Angehängte Dateien:

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