Ich möchte an einem Arduino Pro Mini 5V den I2C Port nutzen. Nun hat das Board zwei freie Pads hinten für I2C Widerstände. Wie gross müssen diese beim Pro Mini sein? Auch 4.7k?
Wenn ich ein OLED Display noch nutze, wären dann 10k besser, weil das OLED Display standardmässig schon 10k drauf hat?
Du solltest alle Module prüfen, die an den I2C Bus angeschlossen werden sollen.
Wenn weitere Module auch die Pullups drauf haben, brauchst du def. keine weiteren.
Ansonsten sind 10k ok. Wobei auch 4k7 kannst du verwenden. Aber eben nur wenn keine weiteren Pullups vorhanden sind.
Dann wären es ca. 1.65k? Ist das nicht ein bisschen wenig?
Nebenbei, ist das beim Mega dann auch so, dass man die internen Pullups berücksichtigen sollte? Macht nicht so viel aus, aber dann wären bei einem Mega, einem Uno und eine Display ja 10k plus interne 20-50k, 10k vom Display = 4k gerade i.O. wenn die Kabellänge unter 50cm bleibt?
So ist's wohl.
Bedenke: Der R soll der Kapazität der Leitung und der erforderlichen Flankensteilheit entsprechen.
Bei Deinen 70cm ist es nicht sooo problematisch - Der obere und untere R ist da eher soweit auseinander, das es sich nicht lohnt nachzurechnen
Das mit 10K geht. 5 K tun es wohl auch. Und sobald Du noch was dran baust, was einen eigenen R mitbringt, ist das eh Makulatur. Passt schon...
Der I²C-Bus kann mit verschiedenen Frequenzen betrieben werden. Je nach verwendeter Bibliothek wird diese Frequenz auch verändert. Generell lohnt ein Blick auf diesen Umstand, besonders natürlich bei größeren Entfernungen. PullUp-Widerstände und Busfrequenz müssen gemeinsam betrachtet werden.
Das ist einfach ein I2C Scanner, oder? Der scannt nach verfügbaren Adressen die am I2C Bus erkannt werden können. Wie kann mir das bei den Widerständen/Kabellängen helfen?
der Scanner hilft einem in sofern das man überhaupt erstmal grob weiß das der Bus funktioniert und alle Devices erkannt werden oder eben auch nicht und es keinen Adresssalat gibt.
Das mit den Pullups ist eine leicht komplexere Geschichte. Wenn man die Standardeinstellung von 100kHz belässt, kann man 10k für die Pullup locker verwenden. Ich rede vom Gesamtwiderstand aller vorhandenen Pullups. Es weiß ja niemand wo alles bei jemanden noch irgendwo Pullups verbaut sind. Das muss derjenige immer selbst wissen oder nachmessen.
Ein guter Kompromiss für alles als Zielwert sollten 4,7k sein. Damit erreicht man in der Regel schon einmal ordentliche Pegel. Damit sind auch 400kHz mit leichter Abweichung kein Problem falls man das nutzen möchte, hängt auch immer vom Device ab ob es die Frequenz unterstützt. Und wie ich selbst feststellen durfte verhält sich der Takt vom Master sowieso dynamisch. Extrembsp. Man stellt 800kHz ein und hat 4,7k Pullups. Der Bus funktioniert. Misst man jedoch nach taktet er deutlich langsamer. Grund ist das die Flanken verschliffen und nicht steil genug sind. Und das alles auf und innerhalb eines Boards mit onboard Devices und ohne weiteren externe Devices. Der Master taktet nämlich nicht sturr drauflos sondern guckt nach den Schwellwerten. Möchte damit sagen, wer wirklich einen schnelleren Bus benötigt muss nachmessen und die Pullups anpassen. Da werden dann Werte um die 2,2k erforderlich. Wer noch höher takten möchte kommt dann ganz schnell in Regionen von 1,5k. Das hängt alles vom Controller ab was er für Einstellungen bietet und ob das die Devices überhaupt können. 100kHz bis 400kHz sind in der Regel Standard was alle Devices können sollten.
Wer immer nur Standard fährt interessiert das alles nicht und muss nur dafür sorgen das der Pullupwert nicht zu groß und nicht zu klein ist. Da ist zwischen 4,7k und 10k alles erlaubt. Nur die Kabellänge sollte man im Auge behalten. Ich weiß aus dem Forum das auch 1 Meter hier und da funktioniert, aber dafür ist I2C nie gedacht gewesen. Das kann und wird auch irgendwie funktionieren. Nur sollte man sich nicht wundern wenn Datenmüll übertragen wird. Die Fehlersuche ist dann nämlich schwierig, weil das ACK meistens durchkommt und man dennoch dumm dasteht. Man müßte dann mit Logikanalyzer und Oszi auf Fehlersuche gehen. Dafür gibts I2C Portexpander die das Problem mit der Kabellänge entschärfen.
Wegen der Position der Pullups. Nach Möglichkeit am letzten Devices vom Bus. Das hat dann etwas von einer Terminierung. Es macht keinen Sinn die Pullups am Master zu platzieren und dann 1 Meter Kabel mit vielleicht noch offenen Enden. Will man maximal flexibel sein entfernt man alle Pullups von allen Devices und baut sich einen externen Terminator. Gab es früher am SCSI Bus wer den noch kennt. Dann kann man die Device bunt mischen je nach Bedarf und klemmt die Pullups immer ans Kabelende bzw. am letzten Device an. Oder man sucht sich ein bestimmtes "letztes" Device zum Abschluss aus und entfernt die Pullups auf allen anderen. Einfach mal in Ruhe überlegen.
Diese Library sagt er ist nur für den Master, damit dieser Blockaden überbrückt. Im Beispielsketch wird die Lib mit I2C.h aufgerufen. Hat diese schon jemand verwendet?
Wird da beim Master dann diese Lib mit I2C.h und beim Slave die normale Wire.h eingefügt? Befehle sind dann beim Master I2C.write(.....) und beim Slave normal mit Wire?
Der Scanner kann Dir eine Information geben, welche Frequenzen Dein OLED grundsätzlich akzeptiert, denn nicht jede Hardware kann jede Frequenz verarbeiten. Wire verwendet meines Wissens beim ProMini 100 kHz, das sollte immer funktionieren. Bibliotheken wie U8g2, verändern diese Frequenz beispielsweise auf 400 kHz. Bei kurzen Kabeln ist das kein Problem, bei längeren dann eben doch. Eventuell mußt Du auf 100 kHz zurückgehen.
Die anderen Aspekte sind in #12 ausführlich beschrieben.