Ciao scusate ma non trovo ben descritto la precisione di delay, dovrei fare un ciclo di un ora acceso e un ora spento il tutto al infinito e mi domandavo inserendo delay(3600); se manteneva una precisione a lungo andare.
Grazie mille
Ciao scusate ma non trovo ben descritto la precisione di delay, dovrei fare un ciclo di un ora acceso e un ora spento il tutto al infinito e mi domandavo inserendo delay(3600); se manteneva una precisione a lungo andare.
Grazie mille
Intanto 3600 sono millisecondi, perche' quelle funzioni accettano il dato in millisecondi, non secondi ... poi la precisione e' abbastanza schifosa (:D), nel senso che dipende dal quarzo o peggio dall'oscillatore RC interno, e ti troveresti a poter perdere o guadagnare anche diversi secondi l'ora, per cui se il ciclo deve continuare all'infinito, presto sarebbe piuttosto fuori orario ...
Per una precisione decente, puoi usare un RTC come il DS3231 ad esempio, che incorpora un quarzo termostatato, oppure usare un clock esterno costruendo una piccola unita' termostatata per un'oscillatore standard commerciale, magari da 1MHz seguito da un divisore per 1000 per avere un clock stabile ad 1Hz, ma comunque scegli di fare, sempre sorgente esterna di clock sarebbe ...
si scusa hai ragione dei 3600(3600*1000).. ok farò così con un modulo rtc. era per usare arduino il piu semplicemente possibile per dei intervalli. grazie mille
cncduino:
Ciao scusate ma non trovo ben descritto la precisione di delay, dovrei fare un ciclo di un ora acceso e un ora spento il tutto al infinito e mi domandavo inserendo delay(3600); se manteneva una precisione a lungo andare.
La precisione reale dipende da diversi fattori, prima di tutto il tipo di clock del processore, solitamente su Arduino è un risonatore ceramico con una tolleranza del 0.5% nella migliore delle ipotesi, poi conta anche la temperatura perché fa variare la frequenza del risonatore/quarzo e le eventuali operazioni atomiche (interrupt sospesi) eseguite dal codice che possono far perdere dei conteggi alla millis.
Per farla breve, su un Arduino classico devi aspettarti un errore di circa 20 secondi ogni ora, l'errore è cumulativo e sempre dello stesso segno, quindi a seconda della scheda può essere sempre positivo o sempre negativo con piccole variazioni, qualche secondo, in funzione della temperatura.
Su un Arduino dotato di quarzo le cose vanno molto meglio, l'errore massimo è di circa 0.3 secondi ogni ora con quarzi di pessima qualità, tipo quelli che trovi sulle schede cineseria, con quarzi di buona qualità scendi a circa 0.06 secondi ogni ora, al netto delle fluttuazioni dovute alla temperatura.