Qual è ' la differenza tra INPUT e INPUT_PULLUP?

Su Arduino più recenti, è possibile impostare pinMode su uno dei tre stati: OUTPUT, INPUT e INPUT_PULLUP.

Questa pagina dice:

Il chip Atmega su Arduino ha resistori pull-up interni (resistori che si collegano allalimentazione internamente) a cui puoi accedere. Se preferisci usarli invece di resistori pull-down esterni, puoi usare largomento INPUT_PULLUP in pinMode (). Questo effettivamente inverte il comportamento, dove ALTO significa che il sensore è spento e BASSO significa che il sensore è acceso.

Sono piuttosto sicuro che invertire il comportamento non è lunica cosa che fa, però.

Che cosa fa INPUT_PULLUP? Cosa lo rende diverso da INPUT e come si decide quale usare?

Commenti

  • INPUT_PULLUP è stato aggiunto con IDE 1.0.1. È irrilevante quale scheda Arduino utilizzi, supportano tutti i PULLUP.

Risposta

Limpostazione predefinita è INPUT che imposta il pin come INPUT. Se il pin è completamente scollegato, leggerà in modo casuale HIGH e LOW. Se lo leghi a + 5V o 0V, ovviamente leggerà HIGH o LOW.

Interno ad Arduino, il chip Atmega ha resistenze interne di pullup con un valore di circa 20k ohm. (Vedere la documentazione dei DigitalPins per maggiori dettagli). Questi resistori possono essere facoltativamente collegati internamente utilizzando INPUT_PULLUP. Questo è funzionalmente (ed elettricamente) equivalente al collegamento di una resistenza da ~ 20k ohm tra il pin e + 5V, lunica differenza è che non richiede componenti esterni e puoi accenderlo e spegnerlo nel software durante lesecuzione del tuo programma. / p>

Allora perché pull-up e non pull-down? Probabilmente ci sono diversi motivi per questo, ma quando si collegano pulsanti o interruttori o qualsiasi cosa “normalmente aperta”, è sufficiente collegarli a terra, non è necessario far funzionare + 5V verso di essi. Poiché la maggior parte delle schede saranno progettato con grandi colate di terra per motivi di schermatura in ogni caso, il collegamento a terra è praticamente un motivo.

Alcuni circuiti integrati più caratterizzati come i chip ARM hanno sia pull up che pull down, ma la linea AVR a 8 bit viene fornita solo con pull -ups. Devi solo ricordare che HIGH è “aperto” e LOW è “chiuso”.

Commenti

Risposta

Nota che la precedente alla 1.0.1, potresti attivare i pullup utilizzando digitalWrite(). E puoi ancora farlo.

Il codice:

Questa è una distinzione importante perché INPUT_PULLUP ovviamente attiva la resistenza di pull-up. Tuttavia, meno ovvio, è che a partire dalla 1.0.1, semplicemente chiamando INPUT si forza la disattivazione del pull-up. (In precedenza, lo stato del pull-up è rimasto lo stesso).

Per vedere come funziona un pin con e senza pull-up, guarda i seguenti video.

Pin flottante su un oscilloscopio: http://www.youtube.com/watch?v=dBIBFLYCjMM

Con pull-up abilitato: http://www.youtube.com/watch?v=SAIw7LLVl-U

Video tutorial completo sui pull-up (nota che lho creato prima che INPUT_PULLUP fosse aggiunto alla libreria Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo

Commenti

  • Molto intelligente. Grazie per aver scritto questo. Voto positivo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *