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
- Voto positivo. Cordiali saluti, secondo la documentazione i pull-up interni sono 20K, non che faccia molta differenza da 50K. arduino.cc/en/Tutorial/DigitalPins
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.