Es gibt zwei Möglichkeiten, die Pins in Arduino zu ziehen – den internen und den externen Widerstand. Ich frage mich, wann ich einen externen Widerstand anstelle von INPUT_PULLUP verwenden sollte.
Kommentare
- Nach meiner Erfahrung ist der einzige Unterschied " externes Pullup / Pulldown ist einfacher zu ersetzen " und möglicherweise auch ", indem Sie nur die Schaltung betrachten, in der Sie das externe sehen können Widerstand, damit ' das Design nach einigen Monaten leichter zu verstehen ist "
Antwort
Bei normaler Anwendung können Sie entweder den internen oder den externen Widerstand verwenden.
Jede Methode hat ihre eigenen Vorteile:
Interner Widerstand
- Vorteile: Flexibel zu ändern durch Ändern des Codes
- Vorteile: Reduzierung der Leiterplattengröße
- Vorteile: Reduzierung der Kosten (sehr gering)
- Nachteile: Dies kann die MCU heiß machen.
Externer Widerstand
- Pr os: Reduzieren Sie die Wärme für MCUs.
- Nachteile: Nicht einfach zu ersetzen, wenn die Leiterplatte eingebaut ist.
- Nachteile: Erhöhen Sie die Leiterplattengröße
Außerdem Pull-up- und Pull-down-Widerstände werden nicht nur für den INPUT-Port, sondern auch für den OUTPUT-Port verwendet. Im Fall des OUTPUT-Ports. Der externe Widerstand hat einen weiteren Vorteil: Flexibilität beim Anschluss von Geräten mit unterschiedlichen E / A-Spannungen. Beispiel: In I2C-Hardware siehe I2C auf Hardwareebene .
HINWEIS: Soweit ich weiß, zum Zeitpunkt des Schreibens Arduino Bibliothek unterstützt NICHT INPUT_PULLDOWN
Kommentare
- 1. Die durch den internen Pullup erzeugte Wärme ist vernachlässigbar. 2. Einige Boards (nicht die AVR-basierten) haben
INPUT_PULLDOWN
.
Antwort
„Nachteile: Es kann MCU heiß machen“
Es wird nicht. P = V ^ 2 / R, also 5 * 5 / 20.000 = 1,25 mW, wodurch der Prozessor nicht heiß wird. Selbst wenn Sie alle 80 in einem Mega2560 drehen und alle niedrig ziehen, werden nur 0,1 W verbraucht.
„HINWEIS: Soweit ich weiß, unterstützt die Arduino-Bibliothek zum Zeitpunkt des Schreibens NICHT INPUT_PULLDOWN.“ weil die Gerätefamilie Atmega328P, „1284“, „2560 usw.“ keine internen Pulldown-Widerstände hat. Nur Klimmzug. Siehe Abschnitt 14 ihrer Datenblätter, „E / A-Ports“.
Dieses Pullup reicht im Allgemeinen nicht für das I2C-Pullup aus. Die durch das interne Pullup von 20K bis 50K erzeugte ansteigende Flanke ist sehr langsam. Externe 4,7 KB bis ca. 2,2 KB (abhängig von der Anzahl der angeschlossenen I2C-Geräte) werden benötigt. Und die I2C-Busspezifikation besagt, dass sie sich am Ende des Busses befinden sollten, nicht am Ursprung des Busses (der im Allgemeinen der Prozessor ist).
Wenn Sie einen langen Draht haben, der von einer Taste oder einem Schalter kommt, ist dies der Fall Im Allgemeinen ist ein guter Zeitpunkt, um ein externes Pullup zu verwenden, um eine gute Umschaltung zwischen hoch und niedrig sicherzustellen.
Antwort
Das „Arduino“ Die Sprache „(dh die Funktion pinMode()
) kennt nur INPUT_PULLUP.
Sie benötigen also externe Widerstände für PULLDOWN-Widerstände.
OUTPUT-Signale schweben nicht, daher gilt der Begriff PULLUP / PULLDOWN-Widerstand dort nicht wirklich.
Außerdem ist der Wert eines internen Pullup-Widerstands nicht einstellbar. Wenn dieser Wert (20 .. 50k) nicht geeignet ist (I²C benötigt weniger als 10k), ist ein externer Widerstand erforderlich.
Kommentare
- Wie ich in einem Kommentar zur vorherigen Antwort geschrieben habe, tun dies einige Arduino-Kerne unterstütze
INPUT_PULLDOWN
.