Seltsames I2C-Verhalten: Manchmal funktioniert es, manchmal nicht

Ich verwende Arduino Ethernet mit PoE- und Arduino Uno- Boards. In den letzten Tagen habe ich einen funktionierenden I2C-Bus mithilfe der WireBibliothek 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?

Könnte alles sein, von physischer Verkabelung über Softwareprobleme bis hin zu EM-Problemen. Dies kann ziemlich schwierig zu bestimmen sein. Ich würde mit einem Oszilloskop beginnen, um den I2C-Bus zu betrachten und zu sehen, wie die Signale aussehen
Wie hat es vorher ohne Strom vom PC funktioniert?

Antworten (3)

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.

Wo kann ich mehr über mögliche allgemeine EM-Geräusche für Arduino-Boards erfahren? Wenn ich zum Beispiel meine Arduino-Boards physisch in eine wasserdichte Verpackung stecke und im strömenden Regen stehe, werden diese Arduino-Boards einige EM-Geräusche haben?
Ich bin mir nicht sicher, was Regen damit zu tun hat – die übliche Quelle sind andere elektrische Geräte . Schalter, Leuchtstoffröhren, Elektrowerkzeuge und Mobiltelefone sind die üblichen Verdächtigen.
Ich habe "Regen" erwähnt, weil ich glaube, dass auch das Umgebungsklima (in diesem Fall als Beispiel insbesondere Umweltbedingungen wie "strömender Regen") EM-Geräusche erzeugen kann. Aus diesem Grund habe ich gefragt: "Wo kann ich mehr über mögliche allgemeine EM-Geräusche für Arduino-Boards erfahren?".
Mit anderen Worten: Wie stark sind die Arduino-Boards (in diesem Fall in Bezug auf die Tolerierung von EM-Rauschen)?
Ich habe gerade eine neue Frage gestellt: Wie stark sind die Arduino-Boards?
Regen kann anscheinend ein Problem für Flugzeuge sein: emcuk.co.uk/awareness/Pages/InterferenceExamples/… obwohl ich nicht glaube, dass es ein Problem für Elektronik ist, die geerdet ist.
Der einzige Weg, um zu beweisen, dass etwas EM-resistent ist, besteht darin, es entweder (1) zu testen oder (2) Beweise dafür zu finden, dass jemand anderes es getestet hat; Dies sollte mit der CE-Zertifizierung für das Board zusammenhängen, aber diese Informationen scheinen im Internet nicht ohne Weiteres verfügbar zu sein.

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:

  1. Der Master versucht, eine logische 1 auf der SDA-Leitung zu bestätigen
  2. Der Master sieht immer noch eine logische 0 und erzeugt dann einen Taktimpuls auf SCL (1-0-1-Übergang)
  3. Meister prüft SDA. Wenn SDA = 0, gehe zu Schritt 2; wenn SDA = 1, gehe zu Schritt 4
  4. Generieren Sie einen STOP

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.

Eh, eine aktive Terminierung für I2C? Ich bin mir nicht sicher, ob ich das auf Anhieb empfehlen würde, wenn wir nicht einmal wissen, wie die Signale aussehen. Ich finde es lustig, dass LT 15,8k als Pullup in ihr Diagramm eingefügt hat. Warum so ein schwacher Klimmzug? Natürlich sieht der LT-Teil besser aus ...