Pagina 4 di 5

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 15:50
da stefanopc
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

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 16:22
da PietroBaima
Oggi quando si fa un diagramma a stati in campo professionale è richiesto di disegnarlo secondo lo standard UML

Esempio

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 17:13
da lucaking
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:

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 17:25
da Etemenanki
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.

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 18:32
da lucaking
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.

Re: Debounce software interrupt esterno

MessaggioInviato: 31 ago 2022, 18:59
da GioArca67
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

Re: Debounce software interrupt esterno

MessaggioInviato: 1 set 2022, 1:19
da PietroBaima
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.

Re: Debounce software interrupt esterno

MessaggioInviato: 1 set 2022, 1:28
da WALTERmwp
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

Re: Debounce software interrupt esterno

MessaggioInviato: 1 set 2022, 7:54
da GioArca67
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.

Re: Debounce software interrupt esterno

MessaggioInviato: 1 set 2022, 7:58
da GioArca67
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.