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?
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.
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.