Calcolare il tempo tra due eventi

luchinho:
la variabile che uso per il numero di passi è diversa

Questa variabile in quale codice la vediamo?


Considera che, per come sono strutturati i codici precedenti, il loop deve obbligatoriamente girare almeno alla stessa velocità di arrivo degli interrupt (in sostanza non deve contenere niente che lo faccia ritardare più di 1ms), e questo mi sembra vanificare un po' l'uso degli interrupt...

Un interrupt è un evento asincrono che accade in un momento qualsiasi, indipendente dal tempo o dalla logica del resto del programma.

A cosa serve qui l'interrupt? A identificare il momento in cui compare un fronte di salita, in quel momento esatto va letto il tempo (con micros, che ha un errore di +/-4µs).

Chi deve calcolare la differenza? Se il loop fosse sempre abbastanza veloce "da stare dietro agli interrupt" allora potrebbe farlo lui assieme a tutte le altre cose che servono (ma allora non servirebbe usare gli interrupt), altrimenti anche le altre operazioni vanno nella ISR.

Quindi:

  • Rilevamento fronte
  • Lettura tempo attuale
  • Lettura secondo ingresso
  • Eventuale calcolo tempo trascorso (+ event.inserim in array)
  • Eventuale incremento numero passi

Con 1000 fronti al secondo non dovrebbe esserci alcun problema, l'atmega è in grado di eseguire quanto sopra almeno 20mila volte al secondo se non di più.

Rimane però da pensare cosa deve succedere "al primo giro", ovvero quando da senso antiorario si riparte in senso orario, perché la prima differenza di tempo sarà necessariamente sbagliata (servono almeno due fronti in senso orario per calcolare la prima differenza valida).