Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Debounce software interrupt esterno

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[31] Re: Debounce software interrupt esterno

Messaggioda Foto Utentestefanopc » 31 ago 2022, 15:50

In effetti la macchina a stati mi sembra sia rappresentabile più intuitivamente con questa simbologia.
20220831_154306.jpg

Questo è un disegno dei primi anni '80 che rappresenta la procedura di allineamento trama di un multiplatore Pcm 140 Mbit/s.
Amichevolmente è definito pallogramma.
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
11,4k 5 9 13
Master EY
Master EY
 
Messaggi: 4702
Iscritto il: 4 ago 2020, 9:11

2
voti

[32] Re: Debounce software interrupt esterno

Messaggioda Foto UtentePietroBaima » 31 ago 2022, 16:22

Oggi quando si fa un diagramma a stati in campo professionale è richiesto di disegnarlo secondo lo standard UML

Esempio
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
88,9k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12031
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[33] Re: Debounce software interrupt esterno

Messaggioda Foto Utentelucaking » 31 ago 2022, 17:13

GioArca67 ha scritto:L'array tabT raccoglie lo stato (fase) futuro per ogni possibile stato presente, riga, ed ogni possibile ingresso, colonna.

Grazie per l' aiuto, ma credo di essere ancora lontano, dovro studiarmi la macchina a stati e la rappresentazione con la matrice.

Piuttosto Foto UtenteGioArca67, ho capito perche delay() in un ISR non funziona, anche se non ho capito perché senza, le letture fossero falsate e usandolo il tutto funzionava apparentemente bene.
Va beh, non sono così presuntuoso da voler capire tutto, :mrgreen: me ne farò una ragione. :mrgreen:
Per ora, ho "risolto" usando delayMicroseconds(), che invece, a quanto ho capito dovrebbe funzionare correttamente entro certi tempi.
Resta il fatto che c' è un delay all' interno di una ISR che non è il massimo, ma un minimo di ritardo prima di leggere lo stato dei pin mi serve e in altro modo non sono stato in grado di farlo. :oops:
Avatar utente
Foto Utentelucaking
1.568 3 5 8
Expert
Expert
 
Messaggi: 1369
Iscritto il: 29 mag 2015, 14:28

0
voti

[34] Re: Debounce software interrupt esterno

Messaggioda Foto UtenteEtemenanki » 31 ago 2022, 17:25

Io avevo sempre letto che all'interno delle ISR bisognava mettere il meno possibile, credo (ma non ne sono sicuro) perche' mentre e' in una ISR alcune cose non funzionano, per cui meno ci rimane e meglio e' .

Per curiosita' , avevi poi provato con il debounce hardware a vedere se il problema si risolveva (che cosi non dovevi usare nesun delay da nessuna parte), o lo hai scartato a prescindere ?

Chiedo perche' le poche volte che ho usato encoder, con la soluzione hardware non mi ha mai dato problemi.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
7.669 3 6 10
Master
Master
 
Messaggi: 4805
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[35] Re: Debounce software interrupt esterno

Messaggioda Foto Utentelucaking » 31 ago 2022, 18:32

Etemenanki ha scritto:Per curiosita' , avevi poi provato con il debounce hardware a vedere se il problema si risolveva (che cosi non dovevi usare nesun delay da nessuna parte), o lo hai scartato a prescindere ?

Chiedo perche' le poche volte che ho usato encoder, con la soluzione hardware non mi ha mai dato problemi.
Al momento no, ma come dicevo in [9], altre volte si, proprio con questo tipo di encoder ee ero riuscito discretamente.
Come dicevo, ho voluto provare via software come si diceva nella discussione di cui si parla in [7] [8] [9].

Etemenanki ha scritto:Io avevo sempre letto che all'interno delle ISR bisognava mettere il meno possibile, credo (ma non ne sono sicuro) perche' mentre e' in una ISR alcune cose non funzionano, per cui meno ci rimane e meglio e' .

In effetti lo sapevo anch' io, ma quello è un problema che deriva dalla mia incapacità di scrivere del codice decente, non dal fatto di usare gli interrupt e di fare il debounce via software. :mrgreen:
Comunque sia, per i tempi in gioco, mi pare che funzioni decentemente anche così, senza perdere scatti o prendere rimbalzi.
Avatar utente
Foto Utentelucaking
1.568 3 5 8
Expert
Expert
 
Messaggi: 1369
Iscritto il: 29 mag 2015, 14:28

0
voti

[36] Re: Debounce software interrupt esterno

Messaggioda Foto UtenteGioArca67 » 31 ago 2022, 18:59

lucaking ha scritto:Per ora, ho "risolto" usando delayMicroseconds(), che invece, a quanto ho capito dovrebbe funzionare correttamente entro certi tempi.
Resta il fatto che c' è un delay all' interno di una ISR che non è il massimo, ma un minimo di ritardo prima di leggere lo stato dei pin mi serve e in altro modo non sono stato in grado di farlo. :oops:


Nell'ISR metti solo alcuni flag o incrementi delle variabili, poi leggi tutto nel loop in un if attivato dal flag impostato nell'ISR
Avatar utente
Foto UtenteGioArca67
3.799 4 5 9
Master
Master
 
Messaggi: 3714
Iscritto il: 12 mar 2021, 9:36

0
voti

[37] Re: Debounce software interrupt esterno

Messaggioda Foto UtentePietroBaima » 1 set 2022, 1:19

Etemenanki ha scritto:Io avevo sempre letto che all'interno delle ISR bisognava mettere il meno possibile, credo (ma non ne sono sicuro) perche' mentre e' in una ISR alcune cose non funzionano, per cui meno ci rimane e meglio e' .

Certo, meno roba metti nei service di interrupt e meglio è, anche solo per una questione di efficienza di codice.
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
88,9k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12031
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[38] Re: Debounce software interrupt esterno

Messaggioda Foto UtenteWALTERmwp » 1 set 2022, 1:28

lucaking ha scritto:(...) Per ora, ho "risolto" usando delayMicroseconds(), che invece, a quanto ho capito dovrebbe funzionare correttamente entro certi tempi.
Resta il fatto che c' è un delay all' interno di una ISR che non è il massimo, ma un minimo di ritardo prima di leggere lo stato dei pin mi serve e in altro modo non sono stato in grado di farlo. :oops:
no, ti è stato ripetuto più volte: togli quei ritardi dalla routine, altrimenti diviene inutile il ricorso stesso all'interrupt.
Cosa fare in alternativa è stato scritto: nella ISR modifichi una variabile, fuori dalla ISR(cioè nel loop) ne controlli il valore ed in funzione del test agisci di conseguenza, il che dovrebbe comportare l'attivazione di una temporizzazione(per il debounce ...), magari tramite interrupt.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,5k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8763
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[39] Re: Debounce software interrupt esterno

Messaggioda Foto UtenteGioArca67 » 1 set 2022, 7:54

Nessun codice che ho visto per la decodifica di un encoder in quadratura mette un ritardo nell'ISR. Se a te serve c'è qualcos'altro che non va.
Avatar utente
Foto UtenteGioArca67
3.799 4 5 9
Master
Master
 
Messaggi: 3714
Iscritto il: 12 mar 2021, 9:36

1
voti

[40] Re: Debounce software interrupt esterno

Messaggioda Foto UtenteGioArca67 » 1 set 2022, 7:58

WALTERmwp ha scritto:Cosa fare in alternativa è stato scritto: nella ISR modifichi una variabile, fuori dalla ISR (cioè nel loop)

Anche se l'ho indicato sopra mi piace pochissimo nel caso in esame.
Ok solo per eventi radi e loop abbastanza veloce, altrimenti diventa un polling.
Avatar utente
Foto UtenteGioArca67
3.799 4 5 9
Master
Master
 
Messaggi: 3714
Iscritto il: 12 mar 2021, 9:36

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti