Pulldown su pin input.

Arduino Uno.
Ide 0.23

Vorrei mettere un puldown sui piedini che uso in input.

Leggo che “A pin may also be configured as an INPUT with pinMode, and subsequently made HIGH with digitalWrite, this will set the internal 20K pullup resistors”

Ma a me serve l’ esatto contrario.

CIAO

All'interno del micro esiste solo la possibilità di attivare le pull-up, se ti servono pull-down devi prevederle fisicamente all'esterno.

acik: Ma a me serve l' esatto contrario.

Come ti hanno già spiegato il micro prevede solo delle pull up integrate, i casi sono due o metti esternamente delle pull down oppure inverti la logica di lettura dell'ingresso digitale e usi le pull up integrate.

Perchè devi proprio collegarli in pulldown?

Qui sotto un esempio di collegamento in pull-down su un dip-switch 8pin (che poi ho modificato in pull-up così mi risparmio 8 resistenze, lo spazio sul pcb ed ho solo invertito la logica dello sketch che lo legge):

GS88: Perchè devi proprio collegarli in pulldown?

Perche' secondo me' e' un sano esercizio Nella pratica comune attuale degli impianti di automazione si usa il negativo come comune ( Input ed Output ) connesso pure a terra Creando quindi un impianto FULL PNP Il vantaggio consiste che infili il puntale negativo del tester su qualsiasi presa di negativo/massa e col puntale positivo testi ingressi ed uscite senza dover pensare come infilare i suddetti puntali Almeno questo e' il mio pensiero :D

Anche perche' scrivere if not per identificare qualcosa che esiste ....

brunol949:

GS88: Perchè devi proprio collegarli in pulldown?

Perche' secondo me' e' un sano esercizio Nella pratica comune attuale degli impianti di automazione si usa il negativo come comune ( Input ed Output ) connesso pure a terra Creando quindi un impianto FULL PNP Il vantaggio consiste che infili il puntale negativo del tester su qualsiasi presa di negativo/massa e col puntale positivo testi ingressi ed uscite senza dover pensare come infilare i suddetti puntali Almeno questo e' il mio pensiero :D

Non vedo il problema del puntale che devi spostare. Basta sapere cosa misuri e dove misuri.

brunol949: Anche perche' scrivere if not per identificare qualcosa che esiste ....

È un problema che Ti fa Tu, ma in realtá non é un problema.

Ciao Uwe

uwefed: Non vedo il problema del puntale che devi spostare. Basta sapere cosa misuri e dove misuri.

Infatti non si deve spostare nulla, è solo una questione di sapere cosa misuri e cosa attendi dalla misura.

brunol949: È un problema che Ti fa Tu, ma in realtá non é un problema.

Concordo, sono pippe mentali :D

brunol949: Anche perche' scrivere if not per identificare qualcosa che esiste ....

boh. Io scrivo if(pinA == LOW) oppure if(pinA == HIGH) e non mi cambia praticamente nulla.

menniti: All'interno del micro esiste solo la possibilità di attivare le pull-up, se ti servono pull-down devi prevederle fisicamente all'esterno.

Ringrazio per le risposte. Il mio dubbio arriva dopo aver visto questo: http://arduinotut.blogspot.com/2010/12/orologio.html

e dopo essermi letto il tutorial della libreria button: "void pulldown() Changes the Button mode to a pulldown configuration"

Servirà solo a specificare come è configurato il bottone, non ad abilitarla.

Probabilmente esiste anche un metodo pullup. Dico probabilmente, non conosco la libreria.

EDIT dalla doc della libreria:

void pullup() Changes the Button mode to a pullup configuration

void pulldown() Changes the Button mode to a pulldown configuration

Come è stato detto, l'Atmega ha resistenze interne solo di pull-up. La libreria è stata scritta da uno degli sviluppatori del software per le schede Wiring per cui probabilmente queste forse hanno dei chip che supportano anche tali resistenze, non lo so. Sta di fatto che per togliersi i dubbi, basta aprire la libreria ed andare a vedere le funzioni incriminate. Vedrete che la pulldown non fa niente:

|| Set pin HIGH as default
*/
void Button::pullup(void){
    mode=PULLUP;
    digitalWrite(pin,HIGH);
}

/*
|| Set pin LOW as default
*/
void Button::pulldown(void){
    mode=PULLDOWN;
    //digitalWrite(pin,LOW);
}

digitalWrite(pin, LOW) è commentato per cui non è funzionante. Ciò perché sull'Arduino esiste solo la modalità interna pullup.

Qui è diversa e non è nemmeno commentata la digitalWrite per il pulldown.

Comunque non fa altro che modificare la logica di lettura del bottone.

/*
|| @description
|| | Prepare logic for a pullup button.
|| | If mode is internal set pin HIGH as default
|| #
*/
void Button::pullup(uint8_t buttonMode)
{
    mode=BUTTON_PULLUP;
  if (buttonMode == BUTTON_PULLUP_INTERNAL) 
  {
      digitalWrite(pin,HIGH);
  }
}

/*
|| @description
|| | Set pin LOW as default
|| #
*/
void Button::pulldown(void)
{
    mode=BUTTON_PULLDOWN;
}

Non è commentata perché non c'è nessun digitalWrite da commentare.... :cold_sweat:

void Button::pulldown(void)
{
    mode=BUTTON_PULLDOWN;
}

Comunque non fa altro che modificare la logica di lettura del bottone.

Secondariamente. Cmq, NON attiva nessuna pull-down interna perché non c'è. Ma, dico io, ma ti serve proprio questa libreria? Siccome mi pareva che tu la usassi perché volevi mettere una pull-down, e visto che ti è stato detto che le pull-down interne non ci sono e che quindi devi usare quella esterna, a che ti serve questa libreria? ;) Metti una R da 10K verso massa sulla linea in ingresso al pin e poi leggi il pulsantino con un if verso HIGH. Tutto qui.

Si leo è chiaro che non c'è nessuna digitalWrite da commentare... :grin:

Probabilmente rispetto al codice che hai postato tu avendola portata su Arduino han proprio tolto anche la riga commentata proprio perchè non c'è alcuna pulldown.

La documentazione definisce:

void pullup() Changes the Button mode to a pullup configuration

void pulldown() Changes the Button mode to a pulldown configuration

Quindi non è altro, come ho detto, che una modifica alla logica di lettura del bottone.

In ultimo, non devi chiedere a me se mi serve o no la libreria. La libreria è saltata fuori perchè l'esempio di acik la utilizzava e quindi lui, vedendo pulldown è stato portato a credere certe cose. Per quanto riguarda me non conoscevo nemmeno l'esistenza di tale libreria.

Ah, sì. Era acik che chiedeva la cosa. Cmq neanch'io la conoscevo, né ne vedo un'utilità :stuck_out_tongue_closed_eyes: