martedì 24 gennaio 2012

Resistenze di pull up

Nell'esempio precedente abbiamo cambiato lo stato di un pin di digital input collegandolo a GND piuttosto che a 5V.
Un metodo più semplice è quello di utilizzare un pulsante per variare lo stato di un pin. Prima di questo però dobbiamo introdurre un nuovo concetto: le resistenze di pullup

Resistenze di pull up

Gli ingressi dell'arduino sono ad alta impedenza ovvero richiedono (assorbono) una corrente minima per cambiarne lo stato.
Questo è molto vantaggioso e ci permette di gestire facilmente i dispositivi da collegare agli ingressi, ma presenta anche un inconveniente: essendo così sensibili gli ingressi lasciati liberi (non collegati) presentano valori casuali causati dai rumori di fondo e non un valore LOW come potremmo erroneamente pensare.



Nello schema sopra riportato con pulsante premuto avremo un valore HIGH sul pin di ingresso, mentre con circuito aperto avremo valori in ingresso oscillanti.
Per questa ragione dobbiamo far si che il nostro pin sia sempre connesso o a 5V o a 0V.
Potremmo ovviare il problema connettendo il circuito aperto a terra:




Ma in questo caso il problema nasce quando chiudiamo il circuito che causa un bel cortocircuito con conseguente danneggiamento del nostro arduino.



Per fare questo possiamo utilizzare il seguente schema:



Nello schema abbiamo introdotto una resistenza da 10K chiamata resistenza di pull up.
Fintatochè il pulsante non è premuto il pin rimane stato HIGH; la corrente che fluisce è bassa per via della resistenza, ma data l'alta impedenza degli ingressi è sufficiente a mantenere alto lo stato.
Quando premiamo il pulsante la corrente fluisce verso massa e la tensione prossima a 0V porta il pin in stato LOW. In questo caso non abbiamo corto circuito poichè la resistenza limita la corrente ( I = V/R=5V/10.000ohm= 5mA)

L'obiettivo raggiunto utilizzando una resistenza di pull up è quello di togliere le fluttuazioni al pin di input; Il compito della resistenza di pull up è i ridurre la corrente che attraversa il circuito.

Solitamente per i circuiti di pull up si utilizzano resistenze da 10K, ma se vogliamo possiamo utilizzare resistenze da 47K o superiori.

Utilizzando una resistenza di pull up avremmo uno stato HIGH con il circuito aperto (pulsante non premuto) e LOW con circuito chiuso (pulsante premuto). Questo può inizialmente creare un po' di confusione, ma è solo una convenzione.

Resistenza di pull up interna
E' possibile attivare una resistenza di pull up interna all'Atmega con l'istruzione
 
pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors
 

In questo modo viene attivata sul pin in ingresso una resistenza di pull up pari a  30K.
Rispetto alle resitenze di pullup reali quelle software hanno il limite di avere un valore fisso che in certi casi potrebbe non essere adeguato

Resistenze di pull down
In maniera analoga alle resistenze di pull up possiamo utilizzare resistenze di pull down. In questo caso il circuito aperto porterà il pin in stato LOW e il circuito chiuso in stato HIGH.








Riferimenti

http://www.seattlerobotics.org/encoder/mar97/basics.html
http://www.thebox.myzen.co.uk/Tutorial/Inputs.html
http://www.ladyada.net/learn/arduino/lesson5.html
http://arduino.cc/en/Tutorial/Button

7 commenti:

  1. Articolo interessante, volevo chiederti se metto più pulsanti, posso usare una sola resistenza di pull up?

    RispondiElimina
  2. Quando premiamo il pulsante la corrente fluisce verso massa e la tensione prossima a 0V porta il pin in stato LOW. In questo caso non abbiamo corto circuito poichè la resistenza limita la corrente ( I = V/R=5V/10.000ohm= 5mA)

    Qua l'intensità è di 0,5mA

    RispondiElimina
  3. Quando premiamo il pulsante la corrente fluisce verso massa e la tensione prossima a 0V porta il pin in stato LOW. In questo caso non abbiamo corto circuito poichè la resistenza limita la corrente ( I = V/R=5V/10.000ohm= 5mA)

    Qua l'intensità è di 0,5mA

    RispondiElimina
  4. Dei tanti articoli sull'argomento sei stato l'unico ad essere sufficientemente chiaro sulla importanza e sull'uso di queste resistenze: sopratutto sul motivo per cui utilizzarle; ricapitolo e magari mi correggi se sbaglio: un ingresso digitale è estremamente sensibile dunque va collegato alla sorgente di segnale quando questo c'è o a terra quando il segnale non c'è: ovviamente non si può collegare direttamente il pin a terra per evitare corticircuiti e dunque si deve usare una resistenza. Grazie di cuore!

    RispondiElimina