[RISOLTO]Dubbio su collegamento pulsanti

Buongiorno so che è un argomento trito e ritrito ... Però mi piacerebbe capire bene (senza scopiazzare in giro)

Allora ho letto e riletto un sacco di tutorial ma ognuno con un differente tipo di collegamento alcuni utilizzano le resistenze interne di Arduino (che vorrei evitare) altri utilizzano una sola resistenza da 10 KOhm sul pin digitale altri ancora utilizzano 2 resistenze una da 330Ohm sul pin digitale e da 10KOhm sul pin GND in pull DOWN o sul 5.5V in pull UP ... Ora sinceramente sono un po' confuso ....

Io utilizzerei l'ultimo esempio con 2 resistenze (da 330 e 10K) ...

Ora la domanda mi sorge spontanea ... A cosa è dovuta questa differenza di utilizzo delle resistenze?

grazie

... prima di darti una risposta, spiegami cosa vuoi fare e poi vediamo che resistenze ti occorrono.

Guglielmo

P.S.: Internet è pieno zeppo di schemi sbagliati e di bojate quindi ... non farci troppo affidamento ...

Ho visto ora che ho invertito le pull UP e DOWN ... sistemato...

Devo mettere 5 pulsantini che mi comandano 2 motorini CC

Vorrei utilizzare 5 ingressi digitali differenti, potrei utilizzare un solo analogico ma avendo a disposizione pin preferirei utilizzarli separatamente

Una parte di schema me la ero preparata e la allego (resistenze da 10KOhm) ma mi accorgo che ho ancora troppi dubbi a riguardo ... a mio parere dovrei mettere anche delle resistenze che vanno ai pin digitali appunto da 330 Ohm sul digitale e 10KOhm sul pin GND

sinceramente questo Collegare un pulsante ad Arduino | McMajan mi sembra il più corretto sia come spiegazione che come schema ... Le metteri in pull DOWN

Grazie

Per carità ... mai lette delle BOJATE così grandi ... quello non sa manco come funziona il ATmega328P ...

Ti riporto una frase tra tutte che dimostra tutta la sua ignoranza :

... Ma quando premiamo il pulsante cosa succede? In teoria i 5V “raggiungeranno” il nostro ingresso che diventerà un 1, ossia “ingresso attivato – HIGH” ossia esattamente ciò che volevamo fare. Questo è verissimo ma c’è un piccolo particolare che abbiamo trascurato, infatti non abbiamo fatto nulla per limitare la corrente ad un massimo di 40mA, motivo per cui il pin di ingresso potrà andare ad assorbire molta più corrente andando a friggersi in modo definitivo. Per limitare la corrente dobbiamo usare per forza una resistenza, diciamo di almeno 250 Ohm in modo che possano passare un massimo di 20mA (ricordiamo che è buona norma non superare la metà del massimo consentito) ...

... i pin in ingresso sono ad alta impedenza e NON assorbono praticamente nulla !!!

Quel valore è il massimo che il pin può erogare ... ovvero, se ci si attacca un "carico" (es. un LED) occorre limitare la corrente assorbita dal carico per NON bruciare il pin.
Quello non sa nemmeno di che parla.

Guglielmo

Il discorso di mettere una resistenza in serie al bottone è ben altro ...

... non ci sarebbe alcun problema a tenere, ad esempio il pin a LOW con una pull-down e a tirare direttamente il pin ad HIGH collegandolo direttamente al +5V. Però ... se un domani carichi un altro programma (... magari per fare delle prove) e usi quel pin come OUTPUT può capitare che, magari mentre il programma fa su quel pin una digitalWrite(pin, LOW) (ovvero lo collega a massa), tu, inavvertitamente pigi il bottone e lo colleghi al +5V ... creando un bel corto tra massa e +5V !

Quindi, volendo essere previdenti e stare sicuri per ogni evenienza, una resistenza in serie ad un pin limita la corrente massima che esso può erogare, anche in caso di corti accidentali.

Ti consiglio questa simpatica lettura ... 10 modi per distruggere un Arduino :slight_smile:

Guglielmo

P.S.: L'articolo è del nostro moderatore Leo ... se il tuo antivirus ti indica qualche problema su quella pagina, sappi che è un falso positivo e che puoi tranquillamente aprirla.

Bene.... Non ho capito nulla :frowning: :frowning: :o :o :confused: :confused:

Ho letto ora velocemente quindi chiedo scusa se magari sparo una cavolata poi questa sera rileggo... ma lal primo step (quello che a mio parere è il mio caso) dice di utilizzare una resistenza da 220Ohm al GND praticamente ... Ma io in rete trovo solo resistenze da 10KOhm al GND che è una differenza abissale....

corretto quindi il mio schema precedente(ma con resistenze più basse)?

Grazie

roppo, tocca che leggi con attenzione o non riesci a seguire i discorsi !

Parliamo di DUE resistenze che hanno DUE SCOPI totalmente diversi ....

1. resistenza di pull-up (verso il +5V) o di pull-down (verso GND) serve per portare il pin in INPUT che ha un'alta impedenza e che NON deve mai essere lasciato flottante, ad uno stato ben preciso (pull-up = HIGH, pull-down = LOW) quando il bottone NON è premuto. Questa resistenza va bene di un valore da 2.2 KΩ a 10 KΩ ... quindi ... metti quella che hai disponibile purché tra questi valori.

2. resistenza per limitare la corrente in OUTPUT, e proteggere da corti circuiti un pin usato come OUTPUT ... circa 220Ω rammentando sempre che : ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Questo è quanto ... altre cose sono bojate.

Guglielmo

Esempio di collegamento di un bottone sul pin 9 con resistenza di pull-up (va bene qualsiasi valore da 2.2 KΩ a 10 ) :

... quando il bottone NON è premuto il pin è tenuto HIGH dalla resistenza, quando il bottone è premuto il pin è portato a LOW.

Guglielmo

gpb01:
roppo, tocca che leggi con attenzione o non riesci a seguire i discorsi !

Vero chiedo perdono ma essendo all'inizio devo leggere almeno 5 volte per capire...

Quindi ... e scusa se magari sono insistente ... ma voglio verificare se ho capito la "lezione" per quanto riguarda il tuo schema il pin sarà sempre HIGH e se leggo la pressione metto un LOW mentre se invertissi il collegamento (rosso al posto del nero) avrei sempre il pin a LOW e leggo la pressione del tasto con HIGH

Bene... domandone finale ( visto che sto partendo parto bene togliendomi ogni dubbio)

quale dei 2 sistemi è meglio utilizzare? cioè in base a quale criterio si può decidere quale dei 2 pull UP/DOWN

Grazie 1000

gpb01:
1. resistenza di pull-up (verso il +5V) o di pull-down (verso GND) serve per portare il pin in INPUT che ha un'alta impedenza e che NON deve mai essere lasciato flottante, ad uno stato ben preciso (pull-up = HIGH, pull-down = LOW) quando il bottone NON è premuto.

Come dice Guglielmo, dipende da te se vuoi lavorare in logica positiva o negativa. Di solito preferisco la logica positiva, ovvero normalmente un tasto non premuto per me è low, quando lo premo -> high

La seconda resistenza per eventuali problemi di corto è un di più, non strettamente necessaria, soprattutto se il circuito è "definitivo".

Un bel problema per i bottoni invece è il debounce (potremmo dire "falsi contatti"), prova a cercare nel forum, ne abbiamo già parlato.

OK grazie a tutti ora l'argomento mi sembra meno complicato :slight_smile:

Guarda comunque che non ci sono motivi particolari per cui evitare i pull-up interni...

SukkoPera:
Guarda comunque che non ci sono motivi particolari per cui evitare i pull-up interni...

Difatti io preferisco la versione normalmente HIGH con il bottone a LOW ... proprio per poter usare le pull-up interne :wink:

Ma questo, data l'attuale preparazione di roppo, è uno step successivo ... ::slight_smile:

Guglielmo

Il problema è che lui sembra scartare questa soluzione a priori, non ho capito perché! :o

gpb01:
...cut..

Ma questo, data l'attuale preparazione di roppo, è uno step successivo ... ::slight_smile:

Guglielmo

Ti quoto :slight_smile:

SukkoPera:
Il problema è che lui sembra scartare questa soluzione a priori, non ho capito perché! :o

La scarto per dei motivi alquanto semplici
Il primo è una certa insucurezza visto che sono anche un po' sbadato e questo posso risolverlo con ma il collegamento deve esse pull UP e non pull DOWN mi paere di aver capito

pinMode(pin, INPUT_PULLUP);

il secondo è che ho letto in internet (che poi alcune fonti si sono rilevate farlocche appunto) che

Dal sito sopra

Resistenza pullup interna

A dirla tutta Arduino ci permette di semplificare le cose eliminando tutte le resistenze. Ma come? Se configurate il pin scelto che nel nostro caso era l’8, dopo aver configurato il pin come INPUT con pinMode(8, INPUT); possiamo usare digitalWrite(8, HIGH); per attivare la resistenza di pullup interna di Arduino di 20kΩ (la documentazione ufficiale riporta 20-50kΩ senza specificare meglio). Ciò può semplificare la struttura del nostro circuito, MA, se fate un errore nella programmazione, il pin non sarà protetto dalla resistenza per cui un errore di programmazione può portare a dei guasti, cosa che sicuramente non desideriamo

A questo punto però quanto scritto sopra da me nel code risolve la situazione

grazie

Innanzitutto è meglio appunto fare:

pinMode(pin, INPUT_PULLUP);

invece di:

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);

Se ne guadagna in portabilità e chiarezza del codice.

È vero che in questo modo il pulsante funziona "al contrario" (HIGH normalmente, LOW quando premuto), ma è una cosa tranquillamente gestibile, mentre il resto del discorso mi sembra un po' la solita pippa mentale, ma probabilmente per chi non ha mai smanettato con l'elettronica sembra più ragionevole. Vedrai che man mano che i tuoi progetti si complicheranno, cercherai anche tu di risparmiarti tutto quanto possibile :).

Grazie ancora questa sera (tremolante :slight_smile: ) proverò

metto lo schema così per essere più sicuro ... :o

Chiedo scusa se sono insistente ma è solo una questione di insicurezza personale essendo il mio primissimo collegamento

...Allegato rimosso... :confused:

roppo ... ok che è il tuo primo collegamento ... ma bisogna che "ragioni su quello che fai" ...
... non vedi che appena schiacci un pulsante crei un corto circuito tra il +5V e il GND ? ? ? :o

Mai a poi mai fare un collegamento come quello ...
... riguarda quello che avevo messo io nell'altra pagina ... il +5V andava alla resistenza che serviva a tenere il pin HIGH ovvero era una pull-up ESTERNA.

Se usi le pull-up INTERNE (INPUT_PULLUP) il collegamento con i +5V NON serve più (... e assolutamente MAI come lo hai fatto tu) visto che il pin viene tenuto normalmente HIGH dalla pull-up interna !!!

Guglielmo

Questo è lo schema nel caso usi una pull-up ESTERNA :

Se la usi INTERNA (nelle MCU dove esiste questa possibilità) ... semplicemente essa si sposta all'interno, e quindi fuori resta SOLO il bottone !!!

Chiaro ? ? ?

Guglielmo

Chiedo scusa :frowning: :frowning: ma ho letto talmente tanti siti per collegare 2 pulsanti ed ho confusione quindi ok ora ci sono ... se riesco tolgo l'immagine sopra