Ich habe da ein Problem mit I2C via Optokoppler(OK). Konkret möchte ich über OK mit einem MCP23017 quatschen. Dem MCP "Daten" schicken funktioniert auch, was nicht klappt ist der Weg vom MCP zum Mikrocontroller. Ohne die OK funktioniert alles wie erwartet. Wenn ich die Signale (vgl. Screenshots) richtig interpretieren dann bekomme ich das NACK nicht zurück. Ich weiß nur nicht warum? Die Schaltung basiert auf die AN4 von Vishay (Optical Isolator for I2C Bus System), statt der dort beschriebenen VOH-Optokoppler verwende ich lediglich die Optokoppler HCPL-2611. Ganz offensichtlich geht lediglich der SDA-Pfad vom MCP zum Mikrocontroller nicht aber ich steig noch nicht dahinter warum. Kann jemand vielleicht erkennen wo der Hase im Pfeffer begraben ist?
I2C_Optokoppler.png ist der Schaltplan wie die Schaltung auf dem Steckbrett aufgebaut ist. OKs, Widerstände, Kapazitäten und Dioden dimensioniert wie im Schaltplan angegeben.
Die Oszilogramme zeigen jeweils SDA, gemessen am MCP. Es wurde hier stets das Register 0x14 gesetzt bzw. gelesen, zuvor wurde Register 0x00 auf 254 gesetzt:
Setzen_uC.BMP zeigt das Oszilogram beim Setzen wenn der MCP direkt am Mikrocontroller hängt
Lesen_uC.BMP zeigt das Oszilogram beim Lesen wenn der MCP direkt am Mikrocontroller hängt. (Ich bekomme auch den Erwartungswert!)
Setzen_OK.BMP zeigt das Oszilogram beim Setzen wenn der MCP am Optokoppler hängt
Lesen_OK.BMP zeigt das Oszilogram beim Lesen wenn der MCP am Optokoppler hängt, ich bekomme einen I2C-Fehler, und zwar dass kein NACK kam (was man auch im Oszilogram sieht, das NACK fehlt).
Wie gesagt, das Setzen funktioniert. Ich kann, wie hier im Beispiel angegeben, gezielt GPA0 wie gewünscht auf High oder Low setzen. Mir fehlt aber das Lesen des MCPs da ich später nicht nur den MCP setzen will sondern auch Portpins auf ihren Zustand auslesen möchte.





