Go Down

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

leo72

Ho provato e fatto dei test, tempo addietro, perché sulla carta l'uso del timer 2 permette di mettere in sleep il micro. Quindi avevo combinato lo sleep alla gestione temporale:

1) messa in sleep del micro
2) uscita dallo sleep per overflow del timer 2
3) aggiornamento temporale dell'RTC
4) rimessa in sleep del micro

Il problema però è che la procedura per uscire dallo sleep richiede del tempo: questo tempo di per sé non è molto, ma il problema è che si somma ed alla fine arriva ad incidere in maniera molto significativa sulla libreria.
Considera che abbiamo 1000 overflow al secondo, ed ogni volta devi rifare tutta la trafila su indicata.

A suo tempo non misurai fisicamente il ritardo ma ti posso garantire che era ben visibile anche ad occhio nudo con il semplice test del blink del led dell'esempio allegato alla libreria.

Testato

Leo
sul numero di questo mese di Firmware hanno pubblicato un swRTC con un pic
e' visibile anche online qui, chissa' se l'autore conosce il tuo lavoro  :)
http://www.nxtbook.fr/newpress/inwaredizioni/Firmware-2012-02_73/index.php?ap=1#/44/OnePage
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

Io non riesco a leggerlo...  :smiley-roll-sweat:

Testato

oggi nemmeno a me, avranno problemi sul server.
cmq se ci fai caso c'e' un menu' nascosto, appare quando metti il mouse in alto, proprio ad inizio pagina. si apre un bottone SOLO TESTO.
A me in questo modo fa leggere l'articolo, tanto di immagini non c'era niente di importante
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Michele Menniti


oggi nemmeno a me, avranno problemi sul server.
cmq se ci fai caso c'e' un menu' nascosto, appare quando metti il mouse in alto, proprio ad inizio pagina. si apre un bottone SOLO TESTO.
A me in questo modo fa leggere l'articolo, tanto di immagini non c'era niente di importante

Fino a pagina 31-32 fa vedere tutto, testo, immagini e perfino la pubblicità  :smiley-yell:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Testato

ho riprovato, ed a me non fa vedere nessuna pagina,
cmq questo link e' solo a scopo promozionale, probabilmente memorizzano l'indirizzo ip e poi non fanno piu' vedere dopo tot pagine.
pero' leo non essendoci mai entrato dovrebbe riuscirci.
Riconfermo cmq che a livello testuale e' ancora tutto accessibile per me
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

Io non ho visto nulla neanche la prima volta.

leo72


ma sopratutto quella rivista non era fallita ? da me' da 1 anno che non si vede piu' nelle edicole nel raggio di 50Km da dove abito

E' solo digitale, ormai.

DanielaES

Leo, tu che sei esperto di orologi software, hai mica una formula pronta e testata per il passaggio dall'ora legale a quella solare e viceversa?
Valore di partenza ricevuto da un server NTP: unix time.
Al quale aggiungo un 3600 s per UTC(IT).
Adesso cercavo qualcosa del tipo:
If ( Blabla ) { aggiungi altri 3600s }.
Suggerimenti?

PaoloP

Nella libreria indicata nel mio post: http://arduino.cc/forum/index.php/topic,94104.msg710718.html#msg710718
C'è già la funzione ora legale.
Si tratta di estrarla e implementarla nella libreria standard o come funzione a se.

Code: [Select]
// check if current time is european summer time
uint8_t DS1307new::isMEZSummerTime(void)
{
  uint32_t current_time, summer_start, winter_start;
  current_time = time2000;
 
  // calculate start of summer time
  fillByYMD(year, 3, 30);
  fillByHMS(2,0,0);
  fillByCDN(RTC.cdn - RTC.dow); // sunday before
  summer_start = time2000;
 
  // calculate start of winter
  fillByYMD(year, 10, 31);
  fillByHMS(3,0,0);
  fillByCDN(RTC.cdn - RTC.dow); // sunday before
  winter_start = time2000;
 
  // restore time
  fillByTime2000(current_time);
 
  // return result
  if ( summer_start <= current_time && current_time < winter_start )
    return 1;
  return 0; 
}


Praticamente è tutto nell'ultimo if.
Se la data corrente e dopo l'ultima domenica di marzo alle 2.00 e prima dell'ultima domenica di ottobre alle 3.00 allora c'è l'ora legale.

leo72

Avevo fatto una versione con l'ora legale per Testato, mi pareva di averla pubblicata qualche pagina addietro.
Era beta ma doveva funzionare, per lo meno per le prove che avevo fatto io.

leo72

Ecco, ho ritrovato il post dove la trovate allegata:
http://arduino.cc/forum/index.php/topic,73496.msg614955.html#msg614955

DanielaES

Sono in giro quindi non ho ancora avuto modo di vedere il codice di Leo.
Mentre il codice postato da Paolo è quantomeno criptico...
Come calcola la domenica del mese lo sa solo lui :p
Stasera mi guardo bene i listati di entrambe le librerie ma possibile che non esista una formula standar gia fatta, senza doverla estrarre da qualche parte o scriversela da soli?
Non è tanto questione di complessità quanto di testing.
Se qualcosa non va me ne accorgo solo tra mesi quando è gia tutto inscatolato :)

Testato

Ma non esistono server NTP che forniscono l'ora legale ?
sarebbe un bel servizio da dare, si potrebbe creare un server dove l'utente si sceglie il suo paese, tipo Italia, e fornisse una stringa da usare nel micro che includesse gia' la correzione per l'ora legale italia
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed


Ma non esistono server NTP che forniscono l'ora legale ?


Per quanto ne so io i server NTP forniscono esclusivamente l'orario UTC, per ovvi motivi di internazionalità, poi è a cura dell'utilizzatore finale aggiungere l'offset per la sua zona temporale e l'eventuale daylight.

Go Up