arduino orario da dove

Arduino riesce leggermente meno peggio con raspberry.

ho suggerito possa andare per te, puoi anche rimettere l'orologio ogni 10 min ma mi pare non abbia molto senso.

--
- Se scegli la pillola blu la tua vita 

- E se scelgo quella rossa?
Reply to
Archaeopteryx
Loading thread data ...

Il 02/04/2021 09:28, Gab ha scritto:

Sono 5 i secondi in 24 ore il che significa 2.5 minuti al mese e quindi

30 minuti all'anno. Inaccettabile! Che delusione questo rtc. E che delusione anche l' IDE di arduino. Possibile che non sia possibile

Grazie a tutti e Ciao Gab

--

https://www.avast.com/antivirus
Reply to
Gab

Il 02/04/21 21:31, Gab ha scritto:

I nostri tornelli aziendali se perdono il contatto con i server sbagliano piu` del doppio :)

Bisognerebbe vedere come si comporta con la procedura di calibrazione.

Che c'entra l'IDE poverino. L'RTC si aggiorna tramite una trasmissione su bus i2c, e questa la puo` fare solo Arduino eseguendo un apposito programma (questo si caricato tramite l'IDE).

Certo che si, ma deve essere una parte del tuo programma a prevedere e fare questo. E deve esserci un apposito programma su PC che trasmetta l'orario di sistema.

O al limite anche il semplice monitor seriale attraverso cui immettere una stringa tipo #2030*, che il programma su Arduino dovra` ricevere e interpretare per andare a regolare l'RTC.

Immagino che l' "inizio" a cui ti riferisci sia il momento della compilazione, in cui viene rilevato l'orario di sistema del PC.

Reply to
Claudio_F

Il 02/04/2021 21:31, Gab ha scritto:

Se devi misurare una temperatura, allora non c'e' nente di male a perdere i secondi/minuti per strada Ora sai che le prossime schede rtc che prenderai, dovrai dare un'occhiata al datasheet chip rtc prima di prenderle

Reply to
RobertoA

Il 03/04/21 08:51, RobertoA ha scritto:

Questa scheda sarebbe stata comoda perche' in un pezzo unico ha SD + RTC. Se la procedura di calibrazione fine non e` sufficiente, credo che l'unica sia tagliare le piste del bus i2c (o dissaldare l'RTC presente) e collegare al suo posto un DS3231, alla fine sono solo quattro filetti.

Reply to
Claudio_F

Il 03/04/2021 08:50, Claudio_F ha scritto:

Ho l'impressione che non esista proprio il programma. Ho esaminato

aggiornare l'ora. Per aggiornare intendo che elimini l'ora presente nella memoria del rtc e vi riscriva quella attuale prelevata dal PC. Se tu me lo trovi tale sketch e che funzioni ti faccio un monumento.

Sembra che non sia ancora stato inventato sto programma :-)

Mi sembra di aver capito che tu sei un esperto in materia. Magari tu

No, per inizio intendevo la prima volta che metti in funzione lo shield.

con una routine da IDE.

rtc.calibrate(PCF8523_TwoHours, 0); // Un-comment to cancel previous calibration rtc.calibrate(PCF8523_OneMinute, offset);

ma fa parte sempre di un artifizio, non di un aggiornamento vero e proprio. Infatti devi tu dirgli di quanto deve anticipare/posticipare l'ora. Ciao, grazie Gab

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/2021 08:51, RobertoA ha scritto:

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/2021 09:39, Claudio_F ha scritto:

A questo punto conviene lasciar perdere la PCF8523 e acquistare una

40na d'anni fa che usava le nixie, ve lo ricordate? dovrei ancora averlo in soffitta da qualche parte. Ciao Gab
--

https://www.avast.com/antivirus
Reply to
Gab

Il 31/03/2021 15:00, Gab ha scritto:

ricevitore DCF77? E con questo correggere l'orario nel RTC? Fabio

Reply to
Fabio

Il 03/04/21 11:08, Gab ha scritto:

Come immaginavo, e` l'ora della compilazione sul PC.

Per impostare a mano inviando una stringa di 20 caratteri dal serial monitor del tipo:

*HH:MM G/GG/MM/20AA*

dove la prima G e` il giorno della settimana 0..6

potresti provare questo, non testato anche perche` non ho quell'RTC (i secondi vengono azzerati all'invio):

#include #define RTC_ADDR 0x68 // indirizzo i2c

//************************************************ // LEVEL 3 //************************************************

byte binBCD(byte n) { return ((n / 10) 23 || min_>59 || gios>6 || gio31 || mes12 || ann>99) { Serial.println("ORA/DATA NON VALIDE"); return; }

impostaPCF8523(ore, min_, gios, gio, mes, ann); Serial.println("ORA IMPOSTATA CORRETTAMENTE"); }

//------------------------------------------------

char* leggiStringa(Stream &stream) { const uint16_t MAXBUF = 64; static uint8_t buf[MAXBUF+1]; // + '\0' static uint16_t i = 0; while (stream.available()) { char c = stream.read(); if ('\r' == c) continue; if ('\n' == c) { buf[i] = '\0'; i = 0; return buf; } else { buf[i] = c; i += i < MAXBUF; } } return NULL; }

//************************************************ // LEVEL 0 //************************************************

void setup() { Wire.begin(); Serial.begin(9600); }

//------------------------------------------------

void loop() { char* stringa = leggiStringa(Serial); if (NULL != stringa) elaboraStringa(stringa); }

Reply to
Claudio_F

Il 03/04/21 15:28, Fabio ha scritto:

Tutto (o quasi) si puo`, va valutata la complessita` in relazione a: 1) le caratteristiche del progetto, 2) le conoscenze dell'utente.

Scrivere la macchina a stati, con le relative necessita` stringenti di temporizzazione, per decodificare il DCF77 e` Nmila volte piu` complesso di fare un aggiornamento manuale con pulsanti/encoder/PC. E questo sempre che il segnale nella specifica situazione sia ricevibile.

E' molto piu` semplice leggere il tempo dai satelliti GPS ;)

Reply to
Claudio_F

Il 03/04/2021 15:46, Claudio_F ha scritto:

CUT SKETCH

Molto bello ed elaborato lo sketch, lo provo senz'altro ma....

Io intendo che lo sketch deve prima annullare l'ora presente in memoria poi deve prelevare l'ora dal PC o altro e inserirla nell'orologio. E' questo quello che uno si aspetta da un IDE che si rispetti. Non devo essere io a impostare l'ora. In questo modo sei sicuro di avere una sincronizzazione perfetta. Infatti, quando dai corrente per la prima volta allo shield e fai partire il programma del tipo come quello che ho postato, lo fa!!!! preleva l'ora non so da dove e la inserisce

tutto e ripartire da zero...niente da fare.

Ciao Gab

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/2021 17:59, Gab ha scritto:

Gab

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/21 17:59, Gab ha scritto:

Forse ti aspetti dall'IDE cose che non gli competono. Lui deve compilare il sorgente e trasferire il codice oggetto sulla scheda Arduino (o altro) di turno. Stop.

usarla come gli pare, ad esempio per impostare un RTC a quella e solo quella specifica data/ora (ed e` quello che viene fatto dal codice che hai postato).

Ma non e` compito dell'IDE operare sulle periferiche qualsiasi che uno potrebbe attaccare al micro.

Di fatto anche quella prima impostazione e` "anomala", un escamotage in piu`, ma le vie "normali" sono:

-ricevere una stringa da PC (tipo col mio sketch)

-ricevere una stringa da ricevitore GPS

-regolare tramite pulsanti/encoder/display

-ricevere l'ora da server NTP se collegati in rete

-ricevere l'ora da altre fonti radio tipo DCF77

In tutti questi casi e` sempre il programma in esecuzione su Arduino che alla fine regola l'RTC, mai qualcosa di esterno.

Reply to
Claudio_F

vita col compilatore, sei tu che devi scrivere tutto quello che vuoi che il programma faccia :D

Tipicamente il tuo applicativo si deve connettere a qualcosa che conosca l'ora esatta e con il valore, eventualmente convertito, chiamare le funzioni che settano l'orologio.

--
- Se scegli la pillola blu la tua vita 

- E se scelgo quella rossa?
Reply to
Archaeopteryx

"Gab" ha scritto nel messaggio news: snipped-for-privacy@mid.individual.net...

preleva

su questo ho dei seri dubbi. l'ora inserita da quella riga e' quella di compilazione, come gia' detto da Claudio, poi il programma viene scaricato sul micro, poi avviene il reset e poi viene caricato nel RTC. sicuramente passano un po di secondi, e quindi l'ora del RTC parte sempre in ritardo.

ecco qui la prova:

#include "RTClib.h"

void setup() { Serial.begin(115200); DateTime now = DateTime(F(__DATE__), F(__TIME__)); String msg = String(now.day())+"/"+ String(now.month())+"/"+ String(now.year())+" "+ String(now.hour())+":"+ String(now.minute())+":"+ String(now.second()); Serial.println(msg); }

void loop() { }

il cui output e' questo (abilitando l'orario nel serial monitor):

19:00:08.270 -> 3/4/2021 19:0:0

otto secondi di ritardo

tu come hai misurato la precisione del tuo rtc ?

Reply to
alfio

Il 03/04/2021 18:32, Archaeopteryx ha scritto:

funzioni che settano l'orologio dopo aver prelevato l'ora attuale da qualche server? Io non sono in grado di scriverlo e dopo tante ricerche non ne ho visto nemmeno uno in giro. Grazie Ciao

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/2021 18:22, Claudio_F ha scritto:

Chiedo scusa. Quando ho scritto IDE non intendevo il compilatore di per se ma il linguaggio che compone lo sketch. Chiedo scusa anche all'IDE.

ottenere quello che cerco. Grazie Claudio Gab

--

https://www.avast.com/antivirus
Reply to
Gab

Il 03/04/2021 19:03, alfio ha scritto:

Aggiungendo nel monitor l'ora PC e confrontandola con quella dell'rtc

in 48 ore circa rispetto al confronto di partenza della prova (che anche

questo anticipo/ritardo con una semplice routine che ripeta l' operarzione iniziale di prelievo dell'orario? A me sembra molto strano che non si possa fare. Vedo dai dati che mi hai trascritto che anche tu quando hai lanciato lo sketch hai rilevato l'ora esatta+8sec e anche la

Nossignore, qualunque sketch tu lanci l'anticipo/ritardo viene mantenuto

non riesco a farmi capire. Grazie comunque a tutti, sinceramente, vi sono sempre grato per la vostra partecipazione ai miei dubbi. Gab

--

https://www.avast.com/antivirus
Reply to
Gab

"Gab" ha scritto nel messaggio news: snipped-for-privacy@mid.individual.net...

rimediare a

operarzione

ti hanno gia' spiegato che questa riga rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); non legge l'ora attuale __DATE__ e __TIME__ sono 2 valori costanti che il compilatore pone uguali alla data e ora di compilazione se la ripeti nel loop, ottieni sempre la stessa ora, cioe' quella di compilazione.

per avere l'ora esatta durante l'esecuzione dello sketch , il tuo Arduino deve comunicare con qualcuno che gliela dica, e le cose si complicano, per esempio per avere l'ora esatta direttamente da internet, ti serve uno shield ethernet o wifi, per avere l'ora esatta da usb ti serve un programma sul pc che dialoghi con il tuo Arduino. ma tutto questo te lo hanno gia' detto, cosi' come ti hanno detto una possibile soluzione alternativa. per esempio puoi usare le righe di codice dette da Claudio_F per impostare l'ora esatta una tantum manualmente dal serial monitor e quello che ti ha detto Elio Fabri, la calibrazione:

formatting link

quindi con il codice di Claudio parti con l'ora corretta, e con il codice di Elio metti a posto la deriva temporale

Reply to
alfio

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.