Forum: Mikrocontroller und Digitale Elektronik STM32 I2C Probleme mit PCF8574


von Markus M. (mmax)


Angehängte Dateien:

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?

von eagle user (Gast)


Lesenswert?

Nach meinem Datenblatt solltest du die Adresse 0x41 (zum lesen bzw. 0x40 
zum schreiben) probieren. Das ist deine 0x20, aber um das R/W-Bit nach 
links verschoben.

von Markus M. (mmax)


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.

: Bearbeitet durch User
von Markus M. (mmax)


Angehängte Dateien:

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?

von Markus M. (mmax)


Angehängte Dateien:

Lesenswert?

Niemand eine Idee?

Hier nochmal die selbe Kommunikationsfolge am Oszi

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.