Salve a tutti.
Sono nuovo nel forum (ma ho già fatto alcuni progetti arduino abbastanza basic) e spero di essere nella sezione adeguata.
Spiego brevemente cosa dovrebbe fare il programma: prende in input da seriale vari dati su un evento (una occultazione asteroidale) e calcola quando far brillare un LED. Utilizza il segnale PPS (Pulse Per Second) dal modulo GPS (Neo-6m con un'antenna esterna), oltre che la geolocalizzazione, per sincronizzarsi in modo estremamente accurato al tempo universale. Quando il flash si accende come da previsione oppure viene acceso manualmente (sempre da seriale) o lampeggia ogni secondo, stampa il tempo esatto. Il fine è quello di limitare il più possibile qualsiasi delay per avere l'UTC più accurato possibile (nei limiti dell'hardware).
Facendo vari test, il problema sembra risiedere nell'interrupt con il PPS ma non riesco a capire dove. Allego sia il programma completo che il log. Nel log si vede come i timestamps del seriale e quelli del programma alcune volte non coincidono. Inoltre ho notato che togliendo il pin del PPS, questo problema scompare, ma col passare del tempo il flash ha un drift rispetto al PPS (blinking visibile dal modulo gps) forse dovuto al drift del clock del microcontrollore.
Come ho già detto ho fatto pochi progetti con arduino e non ho molta esperienza, specialmente con i registri dei timer utilizzati in questo codice (che potrebbero essere anche loro un problema tipo con l'interrupt?).
Ringrazio in anticipo per l'aiuto!
Flasher_issue_log.txt (5,6 KB)
Flasher.txt (18,0 KB)