Ci sono due modi per estrarre i pin in Arduino: utilizzando una resistenza interna ed esterna. Mi chiedo quando dovrei usare un resistore esterno invece di INPUT_PULLUP.
Commenti
- Dalla mia esperienza lunica differenza è " pullup / pulldown esterno è più facile da sostituire " e forse anche " semplicemente guardando il circuito puoi vedere lesterno resistore così è ' più facile da capire il design dopo pochi mesi "
Risposta
È possibile utilizzare il resistore interno o esterno nella normale applicazione.
Ciascun metodo presenta i propri vantaggi:
Resistenza interna
- Vantaggi: flessibile da modificare cambiando il codice
- Pro: riduzione delle dimensioni del PCB
- Pro: riduzione dei costi (molto piccolo)
- Contro: potrebbe rendere lMCU caldo
Resistore esterno
- Pr os: Riduci il calore per MCU
- Contro: non è facile da sostituire quando è integrato PCB
- Contro: aumenta la dimensione del PCB
Inoltre , Le resistenze pull-up e pull-down non vengono utilizzate solo per la porta INPUT ma anche per la porta OUTPUT. Nel caso della porta OUTPUT. Il resistore esterno ha un altro vantaggio: flessibilità nel collegamento di dispositivi con diverse tensioni di I / O. Ad esempio, nellhardware I2C vedi I2C a livello hardware .
NOTA: per quanto ne so, al momento della scrittura, Arduino la libreria NON supporta INPUT_PULLDOWN
Commenti
- 1. Il calore generato dal pullup interno è trascurabile. 2. Alcune schede (non quelle basate su AVR) hanno
INPUT_PULLDOWN
.
Risposta
“Contro: potrebbe surriscaldare lMCU”
Non lo farà. P = V ^ 2 / R, quindi 5 * 5 / 20.000 = 1,25 mW, che non renderà il processore caldo. Anche girare tutti gli 80 in un Mega2560 e tirarli tutti in basso dissiperà solo 0,1 W.
“NOTA: Per quanto ne so, al momento della scrittura, la libreria Arduino NON supporta INPUT_PULLDOWN” Ovvero perché la famiglia di dispositivi Atmega328P, “1284,” 2560, ecc. non dispone di resistori pulldown interni. Solo pullup. Vedere la sezione 14 delle loro schede tecniche, “Porte I / O”.
Questo pullup è generalmente insufficiente per il pullup I2C, il fronte di salita creato dal pullup interno da 20K a 50K è molto lento. Sono necessari 4.7K esterni fino a circa 2.2K (dipende da quanti dispositivi I2C sono collegati). E le specifiche del bus I2C dicono che dovrebbero essere alla fine del bus, non lorigine del bus (che generalmente è il processore).
Se hai un cavo lungo proveniente da un pulsante o interruttore, quello è generalmente un buon momento per utilizzare un pullup esterno per garantire buoni livelli di commutazione tra alto e basso.
Answer
Il “Arduino Language “(cioè la funzione pinMode()
) conosce solo INPUT_PULLUP.
Quindi hai bisogno di resistori esterni per i resistori PULLDOWN.
I segnali di OUTPUT non sono flottanti, quindi il termine resistore PULLUP / PULLDOWN non si applica realmente qui.
Inoltre, il valore di un resistore pullup interno non è regolabile. Se quel valore (20 .. 50k) non è appropriato (I²C necessita di qualcosa di meno di 10k) è necessaria una resistenza esterna.
Commenti
- Come ho scritto in un commento alla risposta precedente, alcuni core Arduino lo fanno supporto
INPUT_PULLDOWN
.