Pages: 1 ... 69 70 [71] 72   Go Down
Author Topic: swRTC  (Read 70247 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10437
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

con la deltaT dovresti poter correggere il tutto

assolutamente no!!! ilnumero di clock è di 8MHz +- un fattore random dato da temperatura, qualità delsegnale, delle connessioni, interferenze esterne etc... Il deltaT è una pezza per "il grosso", ma di certo non sufficiente.
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si, ma senza taratura ?
con la deltaT dovresti poter correggere il tutto

L'oscillatore interno degli AVR è di tipo RC, non può essere ne preciso e tantomeno stabile, anche se c'è un registro che permette di "tararlo" in modo da ottenere circa 8.000 MHz ad una certa temperatura è comunque soggetto a sensibili fluttuazioni di frequenza, in parte random, in parte dovute a parametri fisici come la tensione di alimentazione e la temperatura.
Per farla breve, l'oscillatore RC interno non va bene per applicazioni che richiedono temporizzazioni molto precise come un orologio.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L'oscillatore interno è quanto di peggio possa esistere  smiley-twist
E' un RC ma è anche dato per un errore astronomico: +/- 10%!
(datasheet pag. 309, par. 29.4).

PS:
ieri ho lavorato alla swRTC modificata. Tra poco la pubblico. Essa permette di attivare il modulo RTC con quarzo esterno con una semplice define da inserire nello sketch prima dell'inclusione della libreria. Sta poi alla libreria impostare i registri per usare l'RTC interno. Che, ricordo, non sta per Real-Time Clock ma per Real-Time Counter (solo il SAM3X dell'Arduino DUE ha un vero Real-Time Clock). E' comunque un modulo che è molto più preciso, come dimostra il mio progetto Micrologio.
Non cambiate canale  smiley-wink
Logged


0
Online Online
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensavo meno peggio  smiley
Thanks
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensavo meno peggio  smiley

Sei un ottimista inguaribile smiley
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

swRTC 1.2.0
aggiunto il supporto al modulo RTC (Real-Time Counter) presente su alcuni microcontrollori (Atmega88/168/328, Atmega8, Atmega344/644/1284, Atmega1280/2560/2561).

Ricordo che link è nel 1° post di questo thread.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grande leo!! mitico!!
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L'uso è banalissimo. Basta mettere un
Code:
#define USE_INTERNAL_RTC
proprio prima dell'inclusione della libreria, in questo modo il compilatore aggiusta il codice della lib in modo da usare il modulo, senza interventi nei file del sorgente. La lib fa un check anche per verificare l'effettiva presenza del modulo.

PS: ho notato che ancora non ho inserito il supporto alla Leonardo ed al suo Atmega32U4, provvederò al più presto.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi è venuta un'idea...se usassi un quarzo da 16 mhz impostando il timer 2 asincrono su quel quarzo, tenendo l'atmega con il clock interno a 8 mhz?? Teoricamente con una frequenza di oscillazione superiore dovrebbero esserci meno errori, ma può funzionare a velocità superiore a quella di clock??
Logged

0
Online Online
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No
Con oscillo interno l unico quarzo gestibile è quello da 32kHz
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
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ovviamente modificando il codice... tipo...

Quote
...altro codice...

//disabilito tutti gli interrupt
   TIMSK2 &= ~(1<<TOIE2);
   TIMSK2 &= ~((1<<OCIE2A) | (1<<OCIE2B));

//modo asincrono, quarzo esterno
   ASSR |= (1<<AS2);

// imposto il prescaler per  16 Mhz
        TCCR2B |= (1<<CS22);
        TCCR2B &= ~((1<<CS21) | (1<<CS20));
        prescaler = 64.0;

//il timer incrementa con un overflow
   TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
   TCCR2B &= ~(1<<WGM22);

//valore iniziale del counter
starter = 256 - (int)((float)F_CPU * 0.001 / prescaler);

...altro codice...



in questo modo elimino tutti gli "if" e aggiro la dipendenza dal clock interno, ma viene mpostato "manualmente" per utilizzare una fonte esterna di clock, pur avendo settato i fuses per lavorare con clock interno...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non credo funzioni perché in modalità asincrona il micro viene impostato per lavorare proprio con un quarzo da 32 kHz.
Per clock differenti devi impostare i fuse correttamente, sono quelli che poi impostano il micro per poter gestire la fonte di clock sui pin XTAL1 e 2.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah già è vero...dimenticavo...c'è scritto sul datasheet!! Invece un'altra idea...mettere su un pin il segnale a 2 Hz che deriva da un CD4060 quarzato a 32768 Hz. Un segnale da 2 Hz è facile da gestire, non credo ci siano problemi...qualcosa tipo:

Quote
digitalRead(Pin)
if ((statoPin) != (riferimento))
    {
       riferimento++;
            if (riferimento == 2)
                 {riferimento=0;
                   SecondsX++;
                  }
    }



potrebbe essere un'idea?
« Last Edit: May 11, 2013, 11:28:37 am by lupo3000 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Questa idea è praticabile, la uso nel mio Led Clock  smiley-razz

Alcune cose:
1) Perché 2 secondi? Usa direttamente il segnale da 1 secondo.  smiley-wink
2) io ci attacco un interrupt, così sono sicuro di non perdere un colpo;
3) che senso ha usare la swRTC se hai un RTC esterno?  smiley-yell
Logged


0
Online Online
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Infatti  smiley
Se vuoi mettere componenti esterni allora prendi un rtc da pochi euro ed hai anche la batteria tamponata per 5anni  smiley
Logged

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

Pages: 1 ... 69 70 [71] 72   Go Up
Jump to: