Vai al contenuto
PLC Forum


Modifica Tasto Con Debounce


Jago

Messaggi consigliati

Ciao a tutti, avrei bisogno di un vostro parere. Ho costruito uno shield per Arduino. Ho due tasti che mandano a livello alto due ingressi di Interrupt. La loro funzione è molto semplice, serve a passare da una videata all'altra su un LCD. Ho notato che a volte la pressione del tasto produce un salto nei comandi. Vorrei mettere un Debounce hardware a questi due tasti senza stravolgere tutto (con Trigger Schmitt ecc) per evitare di rifare la scheda. Forse basta un condensatore e una resistenza? Ma come?

Vi allego lo schema dove ho evidenziato la zona su cui intervenire.

Vi ringrazio dei consigli. Bye

https://drive.google.com/file/d/0BxddEF_i_qGGUzg2UDZWX2RkWGs/view?usp=sharing

Link al commento
Condividi su altri siti


Puoi farlo anche sw ?

(Parere personale non leggere lo stato dei tasti sotto interrupt)

Ma visto che lo fai potresti disabilitare l'interrupt appena leggi tasto premuto e riabilitarlo dopo tempo solo dopo aver cancellato il pending bit dell'interrupt

Link al commento
Condividi su altri siti

per confermare il tasto e' sufficiente leggerlo un certo numero di volte (non a ciclo stretto, altrimenti viene una schifezza) e confermare quando la lettura e' stabile per un certo numero di letture CONSECUTIVE. I pulsanti possono avere rimbalzi anche per 3-10mS, tanto per capirci....

Poi, mettere un RC non offende nessuno, con una costante di tempo di 10-30mS ma obbligatoriamente devi aggiungere un trigger

Link al commento
Condividi su altri siti

Si sta molto prima a mettere 100mS di antibump a livello software che a fare qualsiasi cosa hardware, secondo me.

Ma non mi sbilancio oltre perché finora ho programmato solo con LDMicro :)

Link al commento
Condividi su altri siti

Alcune considerazioni generali.

  • I resistori in serie all'ingresso non servono.
  • Gli ingressi ad interruzione si usano per eventi molto più rapidi d quelli generati dalla pressione di un pulsante.
  • Solitamente con arduino i tasti si gestiscono da un ingresso analogico. Si realizzau partitore con resistori tutti uguali. ed i pulsanti selezionano una tensione dal partitore. Se leggi uno dei tanti tutorials su arduino, questo è uno dei primi esercizi proposti.

Avendo usato un ingresso ad interrupt non necessiti di alcun debouncing Hw o Sw. E' sufficiente riabbilitare quell'interrupt solo dopo aver servito la funzione scatenata dall'evento.

Se proprio vuoi fare un antirimbalzo Hw, basta che tu metta un condensatore da 0.33µF in parallelo al pulsante.

Link al commento
Condividi su altri siti

Grazie a tutti per i consigli. Proverò a eliminare la resistenza in serie e a mettere un condensatore in parallelo al pulsante come ha detto Livio. Magari è più che sufficiente, senza dover intervenire con altro codice. Vi farò sapere...

Bye

Link al commento
Condividi su altri siti

Perfetto, ho fatto la modifica suggerita da Livio aggiungendo un condensatore da 470nF (da 330 non l'avevo sottomano) e funziona molto meglio… anzi non cicca un colpo. Ho lasciato però le resistenze in serie...

Il tutto senza appesantire il codice.

Grazie

Link al commento
Condividi su altri siti

Ho lasciato però le resistenze in serie...

Quelle le dovevi togliere, perchè peggiorano l'immunità ai disturbi, perchè realizzano un partiore con il resitore che è in ingresso (nella scheda)

Link al commento
Condividi su altri siti

di Livio mi fido ciecamente...

Ti ringrazio per la stima, ma fai male, bisogna sempre essere critici. :smile:

Anche a me capita di scrivere cose errate per distrazione o per ingoranza. :(

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...