Ich habe darüber nachgedacht, ein Modul für ein Entwicklungsboard zu erstellen, das ich vor einigen Tagen erstellt habe und das spi / i2c-Schnittstellen enthält.
Das Problem ist, dass ich keine Pull-up-Widerstände in die MCU-Pins auf der Hauptplatine aufgenommen habe und überlegte, sie in die Module aufzunehmen, um sie "allgemeiner" zu gestalten, damit jeder Benutzer sie verwenden kann, ohne zusätzliche Widerstände hinzufügen zu müssen das Prototyp-Board.
Aber dann stand ich vor dem nächsten Problem. Wenn ich die Pull-up-Widerstände in die zusätzlichen Module einbaue und beispielsweise zwei oder mehr Module an denselben Bus anschließe, werden diese Widerstände parallel geschaltet, sodass der Widerstand abfällt und ihre Funktion nicht erfüllt.
Aber wenn ich die Pull-up-Widerstände zur Hauptplatine hinzufüge, habe ich diese Pins in der MCU immer so aktiv niedrig.
Die Hauptfrage lautet also:
Wie können mehrere Module an denselben Bus angeschlossen werden, auf denen jeweils Pull-up-Widerstände vorhanden sind, die jedoch nicht parallel geschaltet werden, wenn Sie mehr als ein Modul haben? Ist das möglich?
Oder ist die beste Lösung hier, die Pullup-Widerstände in der MCU zu aktivieren und sie nicht in die Module aufzunehmen?
Vielen Dank.-
Antworten:
Ich gehe davon aus, dass die Gesamtlänge jedes Ihrer Busse unter 1 Meter liegt, was typisch für I 2 C und SPI ist. Auch die Buskapazität liegt innerhalb der Spezifikation.
Es sollte nur einen (1) Satz Pull-up-Widerstände geben. Daher ist der beste Platz für sie auf der Hauptplatine. Setzen Sie die Klimmzüge nicht auf die Module.
Wenn Sie in einigen Fällen Pull-up haben möchten und in anderen Fällen nicht.
edit: Ehrlich gesagt denke ich, dass es ein Fehler ist, dass Sparkfun Klimmzüge an I 2 C-Slave-Modulen anbringt . Leider erkennt nicht jeder, der Module kauft, dass übermäßiges Pull-up ein Problem sein kann. Es wäre schöner, wenn die Controller-Karten (anstelle der Slave-Peripherie-Karten) Klimmzüge mit Lötbrücken hätten. Oh ... Warte ... Arduino trägt keine (optionalen) Klimmzüge (obwohl es vielleicht sollte). Lassen Sie uns also überall Klimmzüge schleppen. Einfachere anfängliche Out-of-the-Box-Erfahrung. Fügen Sie jedoch einige Slave-Module hinzu, und der Bus funktioniert nicht mehr.
Update (Mai 2015):
- Verwandte Diskussion in Kommentaren in einem anderen Thread.
- In den letzten Modulen hat SparkFun begonnen, Löt-Blob-Jumper zwischen Vcc und den I 2 C-Pull-up-Widerständen hinzuzufügen ( Beispiel ). Dadurch können die Klimmzüge leichter getrennt werden.
Update (Dezember 2015):
Ähnliche Fragen zur Fehlerbehebung bei I 2 C mit mehreren Modulen tauchen immer wieder in Message Boards auf. Versuch einer erweiterten allgemeinen Antwort.
quelle
Eine Möglichkeit besteht darin, SIL- oder DIL-Widerstandspakete zu verwenden und diese in Sockel an jedem Modul einzubauen. Wenn Sie ein System mit mehreren Modulen erstellen, ziehen Sie diese aus jedem Modul mit Ausnahme des letzten heraus. Dies spart ein wenig Platz auf dem Board über Jumpern.
Zu den Variationen dieses Themas können FET-Schalter zum Anschließen oder Trennen der Widerstände gehören, die von einem einzelnen Jumper gesteuert werden, oder ein Ersatzstift am Stecker (sodass die Widerstände automatisch getrennt werden, wenn ein anderes Modul eingesteckt wird).
quelle