-
AutorePost
-
21 Novembre 2020 alle 16:36 #9825
gvsoft
PartecipanteCari E.A.
sono di nuovo a chiedervi aiuto: io con l’elettronica analogica faccio a pugni. Di solito certi problemi riesco a risolverli via software.
Allora: ho la necessità di utiizzare gli interrupt di Arduino per generare un certo tipo di casualità. La routine di IRQ viene innescata a seguito della pressione di un pulsante in pull-up che chiude a massa quando premuto. Ma un semplice pulsante crea una serie di rimbalzi (ovvio !!) che producono l’effetto di innescare più volte la routine di interrupt vanificando l’effetto casualità che vorrei creare. Provare per credere: Un contatore nella routine di interrupt conta quante volte viene innescata: 3,5,6,7 volte. Occorre creare quindi un sistema di DEBOUNCING HARDWARE in modo che la stessa routine venga innescata solo UNA VOLTA per ogni pressione del pulsante. Dopo l’innesco disabilito gli interrupt di arduino per poi riattivarli completato l’evento).
Ho cercato nel web circuiti antirimbalzo ma a parte quelli CHE NON FUNZIONANO PROPRIO (o sono solo teorici) ne ho trovato uno che utilizza il classico FLIP/FLOP con un deviatore che porta massa in molto alternato i due ingressi del flil/flop. Il sistema funziona ma non è ancora affidabile: viene rilevato un conteggio pari a 1 innesco ma non sempre come dimostra quanto segue:IRQ_1 count: 2 (Dopo ogni innesco della routine di interrupt gli IRQ di arduino vengono disabilitati e riabilitati quando deve riprendere il ciclo)
IRQ Enable
Attesa da IRQ
IRQ_1 count: 1
IRQ Enable
Attesa da IRQ
IRQ_1 count: 3Mi occorre quindi un sistema di debouncing HW affidabile altrimenti la casualità che mi serve nel mio progetto va a farsi benedire !!!.
Mi potete dare qualche suggerimento ??
Grazie
gvsoft21 Novembre 2020 alle 17:39 #9827Amilcare
Amministratore del forumvedi sorgente fidocadJ Zoom fidocad sorgente FidoCad :
[FIDOCAD]
FJC B 0.5
MC 135 95 0 0 680
MC 210 95 0 0 680
MC 185 100 1 0 170
MC 200 100 1 0 080
MC 165 95 0 0 200
MC 130 60 3 0 010
MC 130 105 0 0 750
MC 185 125 0 0 040
MC 130 70 1 0 080
LI 130 60 130 70 0
LI 130 80 130 105 0
LI 135 95 130 95 0
LI 155 95 165 95 0
LI 180 95 210 95 0
LI 185 95 185 100 0
LI 200 95 200 100 0
LI 185 110 185 125 0
LI 200 110 200 125 0
LI 200 125 130 125 0
LI 130 125 130 120 0
SA 185 95 0
SA 200 95 0
SA 185 125 0
LI 90 65 95 65 0
LI 95 65 95 90 0
LI 95 90 100 90 0
LI 100 90 100 65 0
LI 100 65 110 65 0
LI 235 75 250 75 0
LI 250 75 250 85 0
LI 250 85 250 90 0
LI 250 90 275 90 0
LI 275 90 275 75 0
LI 275 75 290 75 0
LI 230 95 235 95 0
LI 250 60 275 60 0
FCJ 3 0 3 2 0 0
TY 260 50 5 5 0 1 0 * T
TY 205 105 5 5 0 1 0 * Rt
TY 170 105 5 5 0 1 0 * Ct
TY 220 120 5 5 0 1 0 * T= 0.8Rt*Ct (SECONDI)
TY 135 65 5 5 0 1 0 * Pull-up
SA 130 95 0Questa è la più sicura e semplice che conosco in quanto è il diodo stesso ad impedire che avvengano inneschi indesiderati.
Inizialmente Ct è stato scaricato da Rt e la uscita finale è ad uno come se il circuito non fosse presente.
Alla pressione del pulsante il condensatore attraverso il diodo si carica immediatamente e rimane in quella condizione fino a che non si rilascia il pulsante. Eventuali rimbalzi vengono ignorati perchè il diodo impedisce al condensatore di scaricarsi.
Dopo un tempo determinato dalla formula T=0.8Ct*Rt (in secondi), il condensatore si scarica e lo stato di uscita da zero ritorna ad uno fino alla prossima pressione del pulsante21 Novembre 2020 alle 18:17 #9829Picmicro675
PartecipanteIl semplice 555 è l’opzione più spiccia. Ovviamente se il rilevamento del ingresso è considerato valido, si mette Arduino a controllare il 555 sul reset, in modo che non ripeta l’innesco fino al momento successivo programmato.
vedi sorgente fidocadJ Zoom fidocad sorgente FidoCad :
[FIDOCAD]
MC 120 45 0 0 ihram.ma09
MC 80 35 2 0 000
MC 80 85 2 0 000
MC 130 30 3 0 010
LI 130 30 130 40 0
LI 115 50 110 50 0
LI 110 50 110 70 0
LI 110 70 115 70 0
MC 130 100 0 0 040
MC 110 110 0 0 040
MC 110 40 0 0 115
LI 110 40 130 40 0
SA 130 40 0
MC 110 100 0 0 180
LI 110 70 110 100 0
SA 110 70 0
LI 115 90 115 85 0
LI 115 85 90 85 0
LI 90 85 90 50 0
MC 90 40 0 0 115
LI 110 40 90 40 0
MC 90 85 1 0 180
SA 90 85 0
LI 80 35 145 35 0
LI 145 35 145 35 0
LI 145 35 145 40 0
MC 170 60 0 0 000
LI 160 60 170 60 0
TY 60 25 4 3 0 0 0 * CTRL Arduino
TY 60 75 4 3 0 0 0 * TastoAltrimenti si può fare con un CD4011
vedi sorgente fidocadJ Zoom fidocad sorgente FidoCad :
MC 65 45 0 0 700
MC 115 50 0 0 700
MC 115 85 0 0 700
LI 90 50 115 50 0
LI 140 55 140 65 0
LI 140 65 115 80 0
LI 115 80 115 85 0
LI 115 60 115 65 0
LI 115 65 140 80 0
LI 140 80 140 90 0
MC 140 90 0 0 115
MC 140 100 0 0 180
MC 140 110 0 0 040
LI 140 100 115 100 0
LI 115 100 115 95 0
MC 50 45 2 0 000
MC 50 55 2 0 000
LI 50 45 65 45 0
LI 50 55 65 55 0
TY 35 35 4 3 0 0 0 * Abilitazione Arduino
TY 35 60 4 3 0 0 0 * Tasto
MC 50 90 0 0 700
MC 50 105 0 0 040
LI 50 90 50 105 0
SA 50 100 0
SA 140 90 0
TY 145 95 4 3 0 0 0 * Resistenza da sperimentareScusate ma alcune parti delle librerie fidocad non sono rapprensentabili, solo con il programma si potrà incollare il sorgente e vedere bene.
21 Novembre 2020 alle 20:10 #9831Amilcare
Amministratore del forumHo pensato ad una ulteriore semplificazione ma la cosa è solo teorica ed andrebbe sperimentato nei valori di R e C per la migliore tempistica di anti rimbalzo
vedi sorgente fidocadJ Zoom fidocad sorgente FidoCad :
[FIDOCAD]
FJC B 0.5
TY 175 80 4 4 0 1 0 * 2N7000
MC 175 100 0 0 445
MC 165 105 1 0 170
MC 150 105 1 0 080
MC 150 80 0 0 750
MC 205 70 1 0 080
LI 150 95 150 105 0
LI 150 100 175 100 0
LI 165 100 165 105 0
LI 150 115 150 130 0
LI 150 130 195 130 0
LI 195 130 195 105 0
LI 165 115 165 130 0
LI 195 95 205 95 0
LI 205 95 205 80 0
LI 205 95 225 95 0
LI 205 70 205 65 0
LI 205 65 150 65 0
LI 150 65 150 80 0
LI 175 65 175 55 0
SA 175 65 0
SA 165 100 0
SA 150 100 0
SA 165 130 0
SA 205 95 0
TY 140 105 5 5 0 1 0 * R
TY 170 110 5 5 0 1 0 * C
TY 220 95 5 5 0 1 0 * Y
TY 210 70 4 4 0 1 0 * PULL-UP
MC 175 55 3 0 01021 Novembre 2020 alle 20:14 #9833Amilcare
Amministratore del forum22 Novembre 2020 alle 10:41 #9836Just4Fun
PartecipanteQuesto è lo schema per il debouncing che normalmente uso:
Ovviamente devi usare come ingresso delle porte con trigger (aggiungerei degli esempi di circuiti ma non è possibile inserire più di 2 link/immagini esterne).
Trovi qui la trattazione teorica.
22 Novembre 2020 alle 11:45 #9840gvsoft
PartecipanteRagazzi, Vi ringrazio siete stati cortesi e solleciti… adesso vedrò cosa fare… grazie ancora
Salutissimi
gvsoft -
AutorePost
- Devi essere connesso per rispondere a questo topic.