Go Down

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

leo72

Ecco la versione 0.2.

Novità:

  • 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

reizel

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)

testato

Anche io ho solo 8A a disposizione, appena posso faccio le prove.
Dopo approfondiamo i test sui mA assorbiti in sleep, su 8A e 328P
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

@reizel:
ricontrollo.


leo72

#49
Sep 28, 2011, 02:49 pm Last Edit: Sep 28, 2011, 02:53 pm by leo72 Reason: 1
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.

EDIT: questi sono buoni

reizel

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

ho sostituito quei 2 file e ora ho questo errore

leo72

#51
Sep 28, 2011, 03:11 pm Last Edit: Sep 28, 2011, 03:19 pm by leo72 Reason: 1
Mi passi per favore il profilo per l'Atmega8 che hai nel file boards.txt?
Io sto andando a "naso" per le prove  :P


Trovato.

reizel

Code: [Select]
##############################################################
atmega.name=Atmega8A standalone (w/ Arduino as ISP) 1MHz
atmega.upload.protocol=stk500
atmega.upload.maximum_size=8192
atmega.upload.speed=19200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xe1
atmega.bootloader.high_fuses=0xdf
atmega.bootloader.path=atmega
atmega.bootloader.file=ATmegaBOOT.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega8
atmega.build.f_cpu=1000000L
atmega.build.core=arduino


e' quello che mi avete fatto mettere in riferimento a questa discussione http://arduino.cc/forum/index.php/topic,68232.msg502769.html#msg502769
su come usare gli atmega8a

ho caricat il blink e funziona correttamente, con il tempo giusto di 1 sec

leo72

OK. Prova ora con questo .cpp. A me non da errori di compilazione adesso. Va solo testato.

gioscarab

Ciao Leo, davvero complimenti. Che bel lavoro  :smiley-mr-green:
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?

reizel

ora e' tutto perfetto, caricato sull'8a e messo in standalone col tuo swRTC

ottimo lavoro! ^_^

leo72


Ciao Leo, davvero complimenti. Che bel lavoro  :smiley-mr-green:
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....  :smiley-roll-blue:

testato


Ciao Leo, davvero complimenti. Che bel lavoro  :smiley-mr-green:
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.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

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....  :smiley-yell: :smiley-yell:

lestofante

Quote
Il registro degli anni andrà in overflow nel 16383


lo chiameranno l'epoc bug :)
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

Go Up