Go Down

Topic: swRTC (Read 84387 times) previous topic - next topic

leo72


magari, ci metterei subito la firma  :)


E perché? A me è piaciuto un sacco vivere gli anni '80.

Testato

sotto questo aspetto certo, era solo per perdere un po' di anni.
la schiena fa male, la vista scende ...
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

PaoloP

Sul tuo sito è disponibile la 1.1.2 ma qui nel primo post "solo" la 1.0.5.
Potresti aggiornarlo?

Grazie.  :smiley-mr-green:

leo72

Ho tolto l'allegato perché non mi ricordo mai di aggiornare il pacchetto qui.
Ho deciso di mettere un link alla pagina del mio sito dove mantengo la libreria, come ho già fatto con le altre librerie che ho pubblicato qui sul sito, in modo che l'interessato possa scaricarsi sempre la versione più aggiornata.


lupo3000

Buonasera a tutti!! Ho modificato il swRTC di leo72 (GRANDE!!) per adattarlo a un quarzo da 32768 hz, quello da orologio. Il tutto funziona abbastanza bene, sta girando su ATMega328 in stand alone (clock a 8 MHz) con bootloader Arduino UNO. Praticamente ho costruito un orologio con sveglia. C'è solo una cosa che non riesco a capire: ho tolto il quarzo da una radio-sveglia che funzionava perfettamente, sempre precisa, e l'ho messo nel progetto...mi sfalsa di 4/5 secondi al giorno!! O.o ok, non è molto...ma non è un problema di quarzo, dato che prima non avevo problemi...mi sa che il nostro caro ATmega non è proprio precisissimo nel contare gli interrupt...o almeno credo, è l'unica spiegazione...
Allego il swRTC modificato per chi fosse interessato...

lesto

allega anche lo schema che hai usato! leggere un quarzo non è una cosa facile...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lupo3000

questo è lo schema... ho semplicemente settato gli interrupt sul swRTC_32768 e poi ho richiamato le funzioni delle libreria (rtc.getSeconds(), rtc.getMinutes()...ecc.)...
Non metto in dubbio che lo schema avrebbe potuto essere più snello...ho iniziato da poco e faccio ancora parecchi casini! XD

leo72

Hai anticipato ciò a cui sto lavorando con interruzioni. Avevo già messo in cantiere la swRTC2 proprio con la modifica di cui parli tu, ma l'ho lasciata a metà prima per il Led Clock e poi per la libreria per l'Arduino DUE.
Ecco uno screenshot del codice:

leo72


mi sfalsa di 4/5 secondi al giorno!!

E ti lamenti? E' una differenza accettabilissima  ;)

leo72

@lupo3000:
mi sembra che tu abbia preso il codice di setup del timer 2 del mio Micrologio e lo abbia ricopiato pari pari nel metodo setTimer della swRTC, vero?  ;)
Ci sono i miei commenti precisi come li ho scritti nello sketch del Micrologio  :P

lupo3000

esatto!! :P Ci ho provato!! XD

lupo3000



mi sfalsa di 4/5 secondi al giorno!!

E ti lamenti? E' una differenza accettabilissima  ;)


no no, infatti non mi lamento affatto...solo che non capisco perché con lo STESSO cristallo ci sia una differenza...non me lo spiego...
e poi non posso fare la correzione tramite "delta" dato che ho un interrupt ogni secondo, e non millisecondo...

dovrei fare una correzione software del tipo

Quote

if (rtc.getHours()==1 && rtc.getMinutes==0 && rtc.getSeconds()==0)
{  h=1;
   m=0;
   s=5;}
rtc.setTime(h, m , s)


in questo modo alla 01:00:00 di ogni notte me lo sposta a 01:00:05

leo72


esatto!! :P Ci ho provato!! XD

La swRTC2 sarà più sofisticata, permettendo di scegliere se usare il cristallo esterno da 32 kHz in tutti quei micro dotati del modulo Real-Time Counter come l'Atmega168/328.
In questo modo non si dovrà "spippolare" con copia-e-incolla sul codice ma tramite una semplice impostazione si potrà istruire il codice, che gestirà il setup del timer.

leo72


no no, infatti non mi lamento affatto...solo che non capisco perché con lo STESSO cristallo ci sia una differenza...non me lo spiego...

Ma tu stai usando il modulo Real-Time Counter di un microcontrollore, non un Real-Time Clock.
Ci sono anche altri interrupt su un microcontrollore che possono arrivare in concomitanza con l'overflow del timer 2 ed accavallarsi, per cui una piccolissima, infinitesima, differenza ogni secondo, sommata per 86400 secondi al giorno, alla fine dà un piccolo scostamento.

Go Up