Ich verwende Arduino Ethernet mit PoE- und Arduino Uno- Boards. In den letzten Tagen habe ich einen funktionierenden I2C-Bus mithilfe der Wire
Bibliothek implementiert, und alles schien fast zu funktionieren: Die beiden Boards kommunizierten korrekt, außer in einigen Fällen.
Bis gestern hat der I2C-Bus funktioniert, jetzt nicht mehr. Ich habe die physische Position von Kabeln oder Skizzencodes nicht geändert: Ich habe nur den PC gestartet, um die Platinen mit Strom zu versorgen , und die Kommunikation über den I2C-Bus funktioniert einfach nicht mehr. Dann, nach ein bisschen und einigem "Zurücksetzen" / "Skizze erneut hochladen" (Anmerkung: Ich habe keinen Skizzencode geändert), fing es wieder an zu funktionieren.
Es ist nicht das erste Mal, dass diese Situation auftritt, und ich habe Probleme, das genaue Problem zu erkennen.
Was könnte das Problem sein?
Es klingt, als wäre es direkt am Rande der Arbeit; Alle möglichen winzigen Effekte wie EM-Rauschen vom Computer, Kapazität des menschlichen Körpers und Temperatur bringen es von "funktioniert" zu "funktioniert nicht".
Die allgemeine Lösung besteht darin, den I2C zu verlangsamen oder gründlicher abzuschirmen.
Wenn Sie glauben, dass I2C nicht funktioniert, konvertieren Sie die I2C-SCL- und Daten-SDA-Leitungen als GPIO und bringen Sie den Bus in einen bekannten Zustand, indem Sie eine Sequenz wie angegeben durch den Bus senden. Das Verfahren ist wie folgt:
I2C mit Pull-up-Widerständen kann pingelig sein. Versuchen Sie, die Pull-up-Werte zu reduzieren, um das Signal zu bereinigen. Oder noch besser (wirklich viel besser) fügen Sie dem Bus einen aktiven Abschlusswiderstand wie den LTC4311 hinzu.
Scott Seidmann
Craig