Salve, forse se n'è discusso ampiamente sul forum ma non ho trovato molto a riguardo.
So che la funzione antirimbalzo si può realizzare via software "facilmente" ed ho visto vari schemi che spiegano come risolvere il rimbalzo usando un condensatore da 100nf, però mi chiedevo il condensatore può essere usato anche collegando il pulsante con la sola resistenza di pull up? ed inoltre con la carica del condensatore quanto dura la pressione del pulsante? Nel senso qual'è il tempo minimo che deve trascorrere tra 2 pressioni affinché Arduino le legga correttamente?
Dipende dal pulsante, per quelli a membrana possono bastare 100ms, mentre per quelli 'più meccanici' (a lamelle) il tempo è più lungo, forse attorno ai 300.
Se vuoi una soluzione software ti passo la mia libreria, è molto semplice da usare, puoi anche NON usare la resistenza di pull-up dato che è interna al micro-controllore.
arduino-libreria-anti-rimbalzo (gestisce anche il doppio tocco, pressione, e una specie di multi-task)
La carica del condensatore è legata alla resistenza che colleghi, la formula è Secondi_di_carica=R*C.
Userei una soluzione software, costa 0, si fa prima, ed è più facile
Io invece userei la soluzione HW ... molto più affidabile ed utilizzabile anche con gli interrupt, dove invece quella SW è inutilizzabile.
Guarda l'allegato ...
Guglielmo
P.S.: Per favore non parliamo di costi ... due resistenze ed un condensatore ...
P.P.S.: Ovviamente va bene per pulsati, se devi fare il debounce di altre cose a media velocità (decine di chiusure al secondo), ci sono altre tecniche o dei chip dedicati (... e discretamente costosi).
TheTrigger:
Userei una soluzione software, costa 0, si fa prima, ed è più facile
Con questa frase ti tirerai addosso tutte le ire degli hardwaristi che diranno la solita cosa utilizzando la soluzione RC aggiungendo però che scarichi il lavoro dal micro
[Edit]
manco ho fatto a tenpo a scriverlo che è arrivato @gpb01 avverando la mia "profezia"! ;D ;D ;D
[/Edit]
@fabpolli: hahahahahahaha
... no, dai, non si tratta di essere hardwaristi o softwaristi ... si tratta che non sempre la tecnica SW è utilizzabile (... come dicevo con gli interrupt) e che comunque, come evidenziavi tu, impegna la MCU in cose che si possono fare con 3 componenti esterni
Poi, ci mancherebbe, se, ad esempio, devi solo gestire il bottone di un orologio per rimetterlo ... va bene anche la tecnica SW ...
Guglielmo
In tutti i casi il flip flop SR rimane sempre il miglior antirimbalzo del mondo, però richiede due porte NAND e uno switch a doppio contatto.
TheTrigger:
Dipende dal pulsante, per quelli a membrana possono bastare 100ms, mentre per quelli 'più meccanici' (a lamelle) il tempo è più lungo, forse attorno ai 300.Se vuoi una soluzione software ti passo la mia libreria, è molto semplice da usare, puoi anche NON usare la resistenza di pull-up dato che è interna al micro-controllore.
arduino-libreria-anti-rimbalzo (gestisce anche il doppio tocco, pressione, e una specie di multi-task)
La carica del condensatore è legata alla resistenza che colleghi, la formula è Secondi_di_carica=R*C.
Userei una soluzione software, costa 0, si fa prima, ed è più facile
Grazie mille ora la provo, però ho aperto il post per capire meglio la soluzione software, sto valutando un po' le potenzialità di Arduino.
Guglielmo ma nello schema tutti i collegamenti usano il collegamento con 5v, io solitamente usando la resistenza pull up collego gnd ad un capo e pin input da un altro capo del pulsante, è possibile inserire il condensatore in questo senza "appesantire" il circuito?
@Astro: Difatti era quello a cui mi riferivo
gpb01:
... ci sono altre tecniche o dei chip dedicati (... e discretamente costosi).
Guglielmo
@fabpolli: ahahah
Con questa mi scagiono: La soluzione migliore è quella che più si adatta al progetto!
anto30:
Guglielmo ma nello schema tutti i collegamenti usano il collegamento con 5v, io solitamente usando la resistenza pull up collego gnd ad un capo e pin input da un altro capo del pulsante, è possibile inserire il condensatore in questo senza "appesantire" il circuito?
SI, in serie all'ingresso una R da 100Ω ed tra il pin e la massa un condensatore da un 22nF (... a crescere a secondo dei rimbalzi)
Guglielmo
TheTrigger:
Con questa mi scagiono: La soluzione migliore è quella che più si adatta al progetto!
Vero
Guglielmo
gpb01:
@Astro: Difatti era quello a cui mi riferivo
Guglielmo
astrobeed:
In tutti i casi il flip flop SR rimane sempre il miglior antirimbalzo del mondo, però richiede due porte NAND e uno switch a doppio contatto.
Come funziona astro? Con che integrato dovrei farlo?
gpb01:
SI, in serie all'ingresso una R da 100Ω ed tra il pin e la massa un condensatore da un 22nF (... a crescere a secondo dei rimbalzi)Guglielmo
Grazie mille Guglielmo ora provo e vi faccio sapere.
Mi scuso se vi riempio di domande ma sto cercando di studiare e comprende il più possibile sia su Arduino che su l'elettronica in generale.
Qualunque integrato che contiene almeno due porte NAND ... tipo 74HC00 (... ne contiene 4) ... con le quali costruisci due flip-flop di tipo S/R (... cerca su Google "flip flop s r nand").
Guglielmo
P.S.: Secondo me sarebbe più utile che ti comprassi un testo come il Millman-Halkias e, con calma, ti studiassi quello
@TheTrigger e @gpb01 : Super d'accordo con le vostre risposte, in base al rpogetto e alle conoscenze si utilizzano le solouzioni che si ritengono migliori, magari non lo sono in assoluto ma in quel momento sono sicuramente le migliori!
Bello ogni tanto vedere che si riesce a sviscerare un problema con risposte anche scherzose senza che le persone si sentano toccate nel vivo e partano con flame infiniti!
Ho provato oggi l'antirimbalzo usando una resistenza da 220ohm in serie sull'input Arduino ed un condensatore tra input e Massa.
Il rimbalzo scompare, però già con la resistenza da 220ohm senza collegare il condensatore il rimbalzo del pulsante si attenua notevolmente ed è appena lievemente percepibile se premo il pulsante rapidamente altrimenti non si nota nulla. È normale?