@lesto:
sì, penso di inserire una compensazione, un po' come il 29° giorno degli anni bisestili per compensare la differenza fra l'anno solare di 365,25 giorni e quello civile di 365 giorni, che comporta l'aggiunta di 1 giorno ogni 4 anni (0,25*4=1)
introdotto il supporto ai micro Attiny25745/85 (funzionante)
introdotto il supporto al micro Atmega8A (da testare!)
A causa del presunto bug nel Tiny core, sugli Attinyx5 ho dovuto utilizzare il timer 0 al posto del secondo timer. Questo significa la perdita delle funzioni temporali di Arduino delay() e millis(). Per ovviare a questo problema, ho introdotto (solo per gli Attinyx5) una nuova funzione, milliseconds(), che restituisce il numero di millisecondi dall'avvio dell'RTC. Ci sono alcune differenze rispetto a millis() di Arduino:
la funzione inizia a contare i millisecondi dall'avvio dell'RTC (startRTC), e non dall'avvio/reset del micro
se si ferma l'RTC (stopRTC), il conteggio si blocca ma non viene azzerato. Facendo ripartire l'RTC, il conteggio riparte dal valore precedente
Chiedo a chi ha l'Atmega8A (reizel) di testare la lib e di dirmi cosa c'è che non va.
PS:
aggiunto un secondo sketch di esempio per provare la funzione milliseconds() sugli Attiny
leo ho caricato lo sketch con la nuova libreria su un at8a, sai, avevo messo un lcd 16x2 per leggere l'ora, il caricamento e' tutto ok, quindi mi appare l'ora ma non avanzano i secondi, rimane fisso a 12:0:0 che e' l'ora di partenza nello sketch, per qualsiasi prova lascio tutto montato (il mio e' un at8a con fuse per 1MHz)
Prova sostituendo i file allegati a quelli della cartella /swRTC e poi fammi sapere. Forse mi ero dimenticato di attivare il supporto per gli Atmega8 nella funzione startRTC.
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:107:15: error: missing expression between '(' and ')'
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp: In member function 'void swRTC::startRTC()':
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:223: error: 'TIMSK2' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp: In member function 'void swRTC::stopRTC()':
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:234: error: 'TIMSK2' was not declared in this scope
Ciao Leo, davvero complimenti. Che bel lavoro
Non mi ricordo ma ho letto da qualche parte che ogni tot giorni cmq c'è un riavvio dei timers e quindi perdita dei dati per gli MCU ATtiny e ATmega, è vero?
gbm:
Ciao Leo, davvero complimenti. Che bel lavoro
Non mi ricordo ma ho letto da qualche parte che ogni tot giorni cmq c'è un riavvio dei timers e quindi perdita dei dati per gli MCU ATtiny e ATmega, è vero?
Il discorso vale con determinati codici usando la normale funzione millis() di Arduino. Ma la mia libreria è esente da questo bug.
@reizel:
sono contento. Adesso sto lavorando sui Tiny84 ma anche qui è duretta.... hanno 2 timer come i Tiny85 ma diversi da quelli di quest'ultimo.... bast....
gbm:
Ciao Leo, davvero complimenti. Che bel lavoro
Non mi ricordo ma ho letto da qualche parte che ogni tot giorni cmq c'è un riavvio dei timers e quindi perdita dei dati per gli MCU ATtiny e ATmega, è vero?
Il problema non e' sui timers, e nemmeno nella libreria di leo, ne' tantomeno nella funzione millis() stessa, ma sulla variabile che va a contenere i millisecondi, non essendo infinita prima o poi va in overflow.
Usando una unsigned long si arriva a 49 giorni.
RIbadisco che la mia libreria non ha questo bug dato che funziona come un RTC hardware, aggiornando i registri in maniera tale e quale ad un DS1307 per capirsi.
PS:
ad esser sinceri, anche la swRTC soffre di overflow. Il registro degli anni andrà in overflow nel 16383....
provando questo swRTC su un atmega8a standalone (quindi senza quarzi esterni) vedo che perde oltre 30 secondi in 20 minuti, insomma oltre 30 minuti al giorno, quindi direi che serve che l'atmega abbia un quarzo esterno e mai quello interno.
io lo usero' con il classico quarzo da 16MHz che lo rende preciso :.
Oggi ho lavorato un po' alla libreria. Ho integrato il supporto ai Tinyx4 (24/44/84), all'Atmega644 ed agli Atmega640/1280/2560 (quelli delle Arduino MEGA/MEGA2560 per intendersi).
Stasera faccio delle verifiche e poi pubblico la lib aggiornata.