Qual è la differenza tra INPUT e INPUT_PULLUP?


24

Su più recenti Arduino, si può impostare pinMode ad 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 all'alimentazione internamente) a cui è possibile accedere. Se si preferisce utilizzare questi invece di resistori pull-down esterni, è possibile utilizzare l'argomento INPUT_PULLUP in pinMode (). Ciò inverte efficacemente il comportamento, dove ALTO significa che il sensore è spento e BASSO significa che il sensore è acceso.

Sono piuttosto sicuro che invertire il comportamento non è l'unica cosa che fa, però.

Cosa fa INPUT_PULLUP? Cosa lo differenzia INPUTe come si decide quale utilizzare?


INPUT_PULLUP è stato aggiunto con IDE 1.0.1. Non importa quale scheda Arduino usi, supportano tutti i PULLUP.
Baldacchino,

Risposte:


23

L'impostazione predefinita è INPUTche imposta il pin come INPUT. Se il pin è totalmente disconnesso, leggerà casualmente HIGHe LOW. Se lo colleghi a + 5 V o 0 V, leggerà ovviamente HIGHo LOW.

All'interno dell'Arduino sono presenti resistori pullup con un valore di circa 50k-ohm. Questi resistori possono essere opzionalmente collegati internamente mediante INPUT_PULLUP. Questo è funzionalmente (ed elettricamente) equivalente al collegamento di una resistenza da 50k ohm tra il pin e + 5V, l'unica differenza è che non richiede componenti esterni e che è possibile accenderlo e spegnerlo nel software durante l'esecuzione del programma.

Quindi perché pull-up e non pull-down? Probabilmente ci sono diverse ragioni per questo, ma quando si collegano pulsanti o interruttori o qualsiasi cosa "normalmente aperta", è sufficiente collegarli a terra, non è necessario eseguire + 5V su di essi. Dal momento che la maggior parte delle schede verrà progettata con grandi colate di terra per motivi di schermatura, tuttavia, legare a terra è praticamente ragioni.

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-up. Devi solo ricordare che HIGHè "aperto" ed LOWè "chiuso".


Upvote. Cordiali saluti, secondo la documentazione i pull-up interni sono 20K, non che fa molta differenza da 50K. arduino.cc/it/Tutorial/DigitalPins
SDsolar il

9

Si noti che prima di 1.0.1, è possibile attivare i pullup utilizzando digitalWrite(). E puoi ancora.

Il codice:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Questa è una distinzione importante perché INPUT_PULLUPovviamente accende la resistenza di pull-up. Tuttavia, meno ovvio, è che a partire dalla 1.0.1, la semplice chiamata INPUTforza 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.

Perno mobile 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 su Pull-Ups (nota che l'ho realizzato prima che INPUT_PULLUP fosse aggiunto alla libreria Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo


Molto intelligente. Grazie per aver scritto questo. Upvote.
SDsolar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.