Tricka90 ha scritto:Mi interessa sapere, in particolare, se la precisione può dipendere anche dai carichi che vengono alimentati
Questo non credo fortunatamente. Non vedo forti nessi tra questo e il segnale di clock
Nota poi che se un clock ha anche una deriva di 100ppm, passati 40 minuti, dovresti avere, al massimo, 0.25 secondi di differenza.... fatti i calcoli.
Quindi nel tuo test c'è qualcosa di strano.
piuttosto che le alimentazioni dei carichi, penso sia piu' determinante il codice che si scrive.
Ad esempio puo' essere importante come hai implementato quelle temporizzazioni nel tuo test
Se infatti hai scritto qualcosa tipo:
- Codice: Seleziona tutto
loop{
SetPinAlto();
sleep(50ms);
SetPinBasso();
sleep(9950ms);
}
Allora potresti aver introdotto da codice un problema...
Infatti le funzioni SetPinAlto/Basso non sono istantanee, e a lungo andare l'effetto si fa' sentire.
In effetti anche la funzione sleep non è perfettamente istantanea probabilmente, quindi anche quella puo' introdrre un ritardo.
Se tu ad esempio facessi lampeggiare il LED, con questo codice, una volta ogni 2 minuti (invece che ogni 10 sec) credo che dopo 40 min la deriva non sarebbe poi tanto accentuata (dato che hai perso meno tempo complesivamente in operazioni superflue)
Come ti ha detto
edgar sarebbe meglio usare un interrupt
Quindi appena ti arriva il segnale di "tempo scaduto" come prima cosa devi riattivare l'interrupt successivo, e solo a quel punto puoi perdere tempo a settare il pin (alto o basso).... in questo modo le operazioni superflue non influiscono sulla tua analisi del tempo.
Se tu potessi attivare un interrupt ciciclo automaticamente ogni 10 sec sarebbe il massimo, infatti anche invocare una interrupt non è poi cosi' gratis (servono sempre qualche ciclo di clock per eseguirla). Chiaramente poi la gestione del lampeggio da 50ms te la dovresti fare in autonomia a parte.
[Dipende molto dall'ambiente sul quale stai scrivendo il tuo codice, studiati i dettagli magari]