Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: 1 2 [3] 4 5 ... 72   Go Down
Author Topic: swRTC  (Read 81862 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-twist
Logged


Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Da provare...
Scusa perche' forse mi sono perso un po' nei post: sacrifico PWM 10 e 11 e ottengo un RTC preciso?
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì. Però devi avere un buon quarzo esterno. Bisogna verificare la precisione del risuonatore dell'Arduino UNO, se cioè nel lungo periodo sfalsa di molto il calcolo del tempo.

Perdi il PWM su 10/11 perché la swRTC usa il timer2/INT2, che gestisce il PWM su quei pin.
Logged


Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai avuto occasione di testare su 2009 e diecimila?
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho le schede.

PS:
stavo cercando di fare il porting della libreria sui Tiny ma ho riscontrato un bug nel core Tiny.
In pratica il bug sembra affliggere la dichiarazione della funzione della gestione dell'interrupt.
ISR(TIMER1_OVF_vect)

genera questo errore nel terminale dell'IDE di Arduino:
Code:
core.a(wiring.c.o): In function 'init':
/home/percorso/alla/cartella/Arduino/arduino-tiny-022/hardware/tiny/cores/tiny/wiring.c:234: multiple definition of '__vector_4'
sketch_sep27b.cpp.o:sketch_sep27b.cpp:36: first defined here
In pratica sembra che la definizio dell'interrupt gli dia noia. __vector_4 è il vettore interrupt nella interrupt table da usare per un interrupt di overflow sul timer 1 ($0004).

Alla riga 234 del file tiny/wiring.c c'è solo la funzione per attivare gli interrupt (sei):
Code:
void init(void)
{
  // this needs to be called before setup() or some functions won't work there
  sei();

Bah... indagherò un altro po'.
Logged


Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho la diecimila e la 2009 (ma non ho la UNO) dovrei testarlo...
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se potessi verificarlo te ne  sarei grato.
Logged


Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se potessi verificarlo te ne  sarei grato.
Dovrei proprio farlo, anche per smettere di farmi deprimere dal multicoso, come forse sai  smiley-neutral
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

leo, stavo provando a caricare uno sketch con il tuo swrtc su un atmega8a standalone, non ci riesco, al 99,9% son impedito io, ma dal log degli errori mi segna tutti riferimenti alla libreria, e' incompatibile con l'at8a? visto che lo avevo volevo usarlo... tanto per sapere

C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp: In member function 'void swRTC::setTimer()':
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:62: error: 'TIMSK2' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:63: error: 'OCIE2A' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:63: error: 'OCIE2B' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:67: error: 'TCCR2A' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:68: error: 'TCCR2B' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:68: error: 'WGM22' was not declared in this scope
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:169: 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:176: error: 'TIMSK2' was not declared in this scope
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6071
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Test ?
Testato, la uno perde piu di due sec al giorno sul mio nixie.
Testero' standalone con quarzo.
i quarzi vengono venduti con la tolleranza dichiarata, per esigenze piu toste esistono i quarzi termocompensati.
Leo ma quando mi dici di questa libreria ? Ho rischiato di perderla smiley

La metto a lavoro, ricordi che ti chiesi  fare i mesi ?

due domande
- e' difficile modificarla per supportare i 20mhz ?
- in modalità sleep, michele, il micro continua ad andare a 16mhz, altrimenti sbaglierebbe l'orario ?
- se in sleep non sbaglia lOrario quanti mA consuma piu o meno?
- dobbiamo calcolare quanto regge una batteria tipo la cr2032
- anche io devo usarla sugli 8A
« Last Edit: September 27, 2011, 05:37:13 pm by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


- anche io devo usarla sugli 8A

io ho provato ma credo ci siano differenze tra un 8A e un 328P che solo un astrobeed riuscirebbe a spiegare smiley

io per il futuro mi prendo 328 e basta, l'euro e mezzo risparmiato per un 8A non vale i maggiori problemi

forse c'e' un ritardo sul giorno ma a me non interessa, a me servono le 24h e se vedo che stara troppo gli do un reset al momento giusto e son apposto smiley-evil
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Gli Atmega8 sono diversi dagli Atmega 48/88/168/328. Per ora non sono supportati. Cambiano i registri interni e va adattata la libreria. Non è un grosso problema. Però ora stavo lavorando sui Tiny85, questi sì che sono difficili...

PS:
i 20 MHz, come i 12 MHz, hanno il problema che non sono potenze di 2 come i clock a 1, 4, 8, 16. Per cui il contatore dovrebbe essere inizializzato con un valore decimale affinché torni il calcolo di 1000 colpi di clock = 1 secondo. Ma ovviamente non si può fare perché il contatore accetta solo valori da 0 a 255. Stavo studiando il modo di inserire una correzione affinché i conti tornassero.

Code:
in modalità sleep, michele, il micro continua ad andare a 16mhz, altrimenti sbaglierebbe l'orario ?
il clock è asincrono, cioè quello che incrementa il timer è slegato da quello della CPU per cui se metti in una delle modalità che ho illustrato che tengono il timer2 attivo, anche se la CPU si ferma l'orologio (dovrebbe) continua(re) ad andare (ancora da verificare, ma oggi sono stato fuori casa quasi tutto il giorno per cui non ho potuto fare molte prove).
Logged


0
Offline Offline
Shannon Member
****
Karma: 138
Posts: 10555
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

stavo cercando di fare il porting della libreria sui Tiny ma ho riscontrato un bug nel core Tiny.
In pratica il bug sembra affliggere la dichiarazione della funzione della gestione dell'interrupt.
ISR(TIMER1_OVF_vect)

prova a scrivere l'equivalente in assembly

leo, stavo provando a caricare uno sketch con il tuo swrtc su un atmega8a standalone, non ci riesco, al 99,9% son impedito io, ma dal log degli errori mi segna tutti riferimenti alla libreria, e' incompatibile con l'at8a? visto che lo avevo volevo usarlo... tanto per sapere

C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp: In member function 'void swRTC::setTimer()':
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:62: error: 'TIMSK2' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:63: error: 'OCIE2A' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:63: error: 'OCIE2B' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:67: error: 'TCCR2A' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:68: error: 'TCCR2B' was not declared in this scope
C:\Users\reizel\Downloads\arduino-0022\libraries\swRTC\swRTC.cpp:68: error: 'WGM22' was not declared in this scope
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:169: 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:176: error: 'TIMSK2' was not declared in this scope

i registri dell'atmega8 NON corrispondono con quelli del 128 e 328, se non erro ci sono dei documenti che spiegavano come passare dell'8 al 128: non devi fare altro che seguirli al contrario. O cercare i registri equivalenti a partire dal datasheet

Quote
i 20 MHz, come i 12 MHz, hanno il problema che non sono potenze di 2 come i clock a 1, 4, 8, 16. Per cui il contatore dovrebbe essere inizializzato con un valore decimale affinché torni il calcolo di 1000 colpi di clock = 1 secondo. Ma ovviamente non si può fare perché il contatore accetta solo valori da 0 a 255. Stavo studiando il modo di inserire una correzione affinché i conti tornassero.
se usi i secondi come float (o meglio ancora metti in piedi un sistema a virgola fissa che non perde precisione) ce la puoi fare.
direi che una variabile conta i clock, sapendo che non equivalgono al secondo, ma che ogni X valori equivalgono a Y secondi. Quindi i secondi sono approssimati in base a X, e si "riaggiustano" ogni Y. In questo modo hai dei valori sbagliati rispetto all'ora attuale(di microsecondi), ma l'errore non si accumula col tempo
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto ho segnalato il bug del TIMER1_OVF perché secondo me c'è qualcosa che non va nel core Tiny.
http://code.google.com/p/arduino-tiny/issues/detail?id=18

Oggi vedo di integrare gli Atmega8.

@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)
Logged


Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

leo, quando integri gli atmega8 poi provo io la libreria caricandola su un 8a smiley-kitty

Logged

Pages: 1 2 [3] 4 5 ... 72   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: