Condensatore in parallelo al pulsante

Salve ragazzi,
presento il problema:
nella sezione Loop ho questo pezzo di codice:

if (digitalRead(PinPulsante)){
    isEnableSensori= !isEnableSensori;

    if (isEnableSensori) digitalWrite(PinLED, HIGH);
    else digitalWrite(PinLED, LOW);
  }

il problema è che siccome non c'è il delay nella funzione loop non riesce a leggere il dato correttamente perché io sto spingendo il pulsante per 1s però lui sarà passato già x volte su digitalRead in 1 sec quindi io ho inserito un condensatore in parallelo di 100uF però a volte funziona a volte no, cioè magari per 3-4 volte se schiaccio il pulsante mi si accende il led (come potete vedere dal codice) altre volte se schiaccio il pulsante mi si accende e subito dopo mi si spegne come se avessi premuto 2 volte di seguito, ma ciò non è vero. A questo punto capisco che devo cambiare condensatore oppure schema potrete gentilmente aiutarmi e dirmi come sarebbe giusto mettere il pulsante oppure cambiare il condensatore ?

Io non ho capito niente di quello che hai detto ... sorry, tipo

il problema è che siccome non c'è il delay nella funzione loop non riesce a leggere il dato correttamente perché io sto spingendo il pulsante per 1s

che tipo di pulsante chiedi? uno switch? una volta accendi e una volta spegni? perchè in questo caso serve una variabile che memorizzi lo stato dell'output

isEnableSensori che cos'è?

Il condensatore è senz'altro un aiuto come antirimbalzo, ma non è definitivo un piccolo delay ti ci vuole sempre a meno che non usi un serio antirimbalzo hardware fatto con operazionali o porte AND-OR

Ultimamente ho imparato che in caso di interruzione dell'utente con uno o più pulsanti switch il valore di relay migliore è di 250 o 200!

Andrea

drego85:
in caso di interruzione dell'utente con uno o più pulsanti switch il valore di relay migliore è di 250 o 200!

Andrea

Sta sera ho problemi di comprendonio :grin: :smiley: :smiley:

Se intendevi dire che il tempo migliore di debounce è di 250-200 .... è del tutto relativo, io ho i debounce con delay forzato = a 0 con condensatore in parallelo e funziona egregiamente, dipende anche dalla lunghezza e complessità del programma, il programma stesso in loop fa da debounce. Se usiamo un micro che gestisce solo un pulsante o si fa un debounce hardware o un debounce software un po' più complicato ma si fa (sacrificando più memoria).
-Puoi racchiudere la lettura degli input dentro a un millis()
-Puoi usare un delay()
-Puoi sfruttare la complessità del programma quindi il tempo di loop con un delay più piccolo

  • o farlo hardware se non vuoi perdere tempo e memoria

anche il tipo di pulsante usato fa la differenza :wink:

trigghera l’ azione al cambio di stato del tastierino.

Ciao Uwe

Buongiorno ragazzi,

Scusatemi se non sono stato troppo esplicito, quindi vi mostro l'immagine di come io abbia collegato il pulsante, la resistenza e di 10 KOhm, poi in parallelo al pulsante io ho aggiunto un condensatore di 100uF.

Aspetta ... se come dici nel post hai inserito un condensatore da 100uF IN PARALLELO al pulsante, la cosa non ha senso ... primo, non e' il modo corretto per usare un condensatore come antibounce, secondo, se la resistenza di pull ti carica il condensatore al massimo, quando lo chiudi con il pulsante lo cortocircuiti sul contatto del pulsante stesso, che di certo non gradisce (si strina, e potrebbe addirittura incolarsi o fondersi :P)

Per usare un condensatore come antirimbalzo, devi collegarlo fra l'ingresso e la massa, con una resistenza da, tipo, 100 ohm in serie al pulsante ...

dal tuo disegno sembra che usi un pulsante che chiude al positivo con una resistenza da 10K a amssa come pulldown ... metti il condensatore fra il pin di ingresso e il positivo (se usi un'elettrolitico, il negativo va al pin di ingresso ovviamente), ed una resistenza da 100 ohm fra il pulsante ed il positivo ... inoltre non usare 100uF, e' esagerato, qualsiasi valore fra 100nF ed 1uF e' piu che sufficente come antirimbalzo (e ti consiglio di usare un'altro pulsante, se quello ha gia preso un po di botte con i 100uF, non so in che stato saranno i suoi contatti ormai :wink: )

Aspetta ... se come dici nel post hai inserito un condensatore da 100uF IN PARALLELO al pulsante, la cosa non ha senso ... primo, non e' il modo corretto per usare un condensatore come antibounce

perchè no alcuni schemi riportano un circuito RC con C in parallelo, a casa mia funziona :slight_smile:

http://www.ikalogic.com/de-bouncing-circuits/

http://www.edsim51.com/8051Notes/interfacing.html
http://hades.mech.northwestern.edu/index.php/Switch_Debouncing
http://www.all-electric.com/schematic/debounce.htm

http://www.ece.utep.edu/courses/web3376/debouncing.html

Pablos, non e’ che non funzioni, e’ che 100 microfarad caricati a 5V, e scaricati brutalmente sul contatto di un pulsantino per segnali, al pulsante non e’ che gli facciano poi cosi bene, specie se ripetuti parecchie volte :stuck_out_tongue: :smiley:

Se ci metti 100nF ok, se ci metti 100uF, o metti in serie la resistenza al condensatore, o al pulsante … oppure dopo un po ti ritrovi con i contatti del pulsante incollati in corto :wink:

Etemenanki:
Per usare un condensatore come antirimbalzo, devi collegarlo fra l'ingresso e la massa, con una resistenza da, tipo, 100 ohm in serie al pulsante ...

dal tuo disegno sembra che usi un pulsante che chiude al positivo con una resistenza da 10K a amssa come pulldown ... metti il condensatore fra il pin di ingresso e il positivo (se usi un'elettrolitico, il negativo va al pin di ingresso ovviamente), ed una resistenza da 100 ohm fra il pulsante ed il positivo ... inoltre non usare 100uF, e' esagerato, qualsiasi valore fra 100nF ed 1uF e' piu che sufficente come antirimbalzo (e ti consiglio di usare un'altro pulsante, se quello ha gia preso un po di botte con i 100uF, non so in che stato saranno i suoi contatti ormai :wink: )

Ho provato a realizzare ciò, purtroppo senza risultato penso di aver sbagliato collegamenti, io ho a disposizione i seguenti componenti:

Resistenza 220 ohm
Resistenza 560 ohm
Resistenza 1 kilohm
Resistenza 4.7 kilohm
Resistenza 10 kilohm
Resistenza 1 megohm
Resistenza 10 megohm
Transistor [BC547]
Mosfet transistors [IRF520]
Condensatore 100nF
Condensatore 100uF
Condensatore 100pF
e ovviamente il pulsante. potresti spiegarmi come realizzare il circuito anti-rimbalzo ?

Grazie,

potresti spiegarmi come realizzare il circuito anti-rimbalzo ?

nel reply 8 hai 8 link che mostrano come collegarlo e i parametri dei componenti, cosa ti serve ancora ? qualcuno che venga a casa tua a montare i pezzi?
Leggi e mettiti al lavoro ]:smiley: le informazioni di cui avevi bisogno le hai avute
Perdona i toni, ma certe volte siete proprio pigri, non vi degnate nemmeno di leggere, c’è anche google che non è poco :slight_smile:

ciao