Go Down

Topic: RTC (Read 6795 times) previous topic - next topic

maniiu

#15
May 27, 2013, 03:56 pm Last Edit: May 27, 2013, 03:57 pm by maniiu Reason: 1
Bruciato Arduino!!!
:smiley-fat: :smiley-fat: :smiley-fat:
Il led sul pin 13 sempre acceso, il pc non riconosce la connessione usb...credo di poterla incorniciare...
Qualcosa ho sbagliato.. inoltre mi ero accorto (prima di rompere tutto) che lo schema sopra non andava bene (emettitore collegato a +5V invece che a terra)..
Avrò fatto qualche corto...
Ho ordinato un'altra scheda.. ma prima di rompere anche questa, sareste tanto gentili da darmim il vostro giudizio sullo schema (che riallego corretto)..

Grazie

zoomx

Ehhmmm lo schema non mi sembra chiaro in quanto le linee 12 e 5 v mi sembrano sovrapposte.

maniiu

ahah
si hai ragione.. ma non avevo spazio.. considera i contatti sempre alla fine delle linee:
se la linea rossa finisce sul 5V è connesso ai 5v se finisce sui 12V è connessa ai 12V.
Di fatto ai 12V non è collegato nulla nello schema sopra..

cyberhs

Quote
Ma mi trovo che l'RTC perde costantemente una decina di secondi al giorno, che in sei mesi fa circa mezzora....
Tra le altre cose il collegamento è stato difficile.. (a volte andava a volte no..)


Potresti provare a modificare il valore dei condensatori (dovrebbero essere i condensatori C1 e C2).

Il datasheet del 1307 parla di una precisione relativa di 1 minuto/mese (2 s/giorno):

Quote
The frequency accuracy of a crystal-based oscillator circuit is mainly dependent upon the accuracy of the
crystal and the accuracy of the match between the crystal and the oscillator capacitive load. If the
capacitive load is less than the crystal was designed for, the oscillator runs fast. If the capacitive load is
greater than what the crystal was designed for, the oscillator runs slow.


Quindi per rimediare ad errori nell'accoppiamento (l'orologio va avanti, vero?) occorre aumentare la capacità di carico già presente nell'IC.

Questo si traduce nel mettere due condensatori in parallelo a quelli già presenti con un capo a massa e l'altro sui due capi del quarzo (il più vicino possibile a quarzo stesso).

Direi che 10 pF (o meno) possono andare bene: se fossero troppi (l'orologio rimane indietro) diminuisci a 4,7 pF.


leo72

Scusa cyberhs, ma il DS1307 non necessita di condensatori esterni.
Anche sul datasheet il circuito tipo non li prevede. Dici che servono comunque?

cyberhs

Caro Leo,

ho appena "litigato" con un schedino RTC con DS1307.

Prima 8.5 secondi in avanti dopo 24h, dopo aver inserito due condensatori da 22pf in parallelo a quelli già esistenti, solo 1 sec in 24 h

Naturalmente ogni circuito andrebbe tarato singolarmente.

E' vero quello che dici, ma dimentichi che i condensatori esistenti all'interno dell'IC sono stati progettati per un quarzo ideale.

Ti allego le note applicative che spiegano bene la cosa.

maniiu

Interessante senza dubbio!
Ma viste le conoscenze e abilità per me è senza ombra di dubbio più agevole lavorare via software..
Rimango dell'idea di usare il tastino che poi mi permette comunque di fare altre cose.

Stasera arriva il secondo arduino, mi arrischierò a provare lo schema che ho postato ieri (fermatemi!) spero di non uccidere anche lui.

Ciao e grazie

zoomx

@cyberhs

Grazie per il documento!

Ne aggiungo un altro
"Improved timekeeping accuracy with PCF8563 using external temperature sensor"
http://www.nxp.com/documents/application_note/AN10652.pdf

Anche se parla di un altro chip penso che le tecniche adottate possano essere implementate anche con altri chip.

leo72

Intanto grazie ad entrambi per i documenti. Li guarderò con attenzione.

Personalmente quando mi serve un RTC esterno (e non posso usare il modulo Real-Time Counter dell'Atmega328) utilizzo sempre il PCF8563, che preferisco al DS1307. In questi giorni sto però lavorando ad una cosa che prevede un DS1307 e noto che questo chip fà spesso le bizze, alle volte non riesco ad inizializzarlo all'avvio. Siccome non uso i C esterni, adesso provo mettendoceli.

zoomx

Anche io ho preso dei PCF8563, mi interessa la caratteristica dell'allarme, così mando l'Arduino a dormire e lo faccio svegliare dal PCF8563. Però deve ancora arrivare.

BaBBuino

Io ho risolto con un modulo DCF77, che riceve un segnale orario da Monaco di Baviera e mi corregge lo stesso RTC che hai tu. L'orologio da cui proviene il segnale è un Clock Atomico, con precisione del secondo ogni 100.000 anni. Immagino poss anadarti bene come precisione...

Lo trovi a 9e su Ebay.

zoomx

Si, conosco da tempo il DCF77, ma nell'applicazione che ho in mente ci sarà, almeno una volta al giorno, una comunicazione con un PC o via modem o via rete per cui ne approfitterò per sincronizzare l'orologio con il PC o con un servizio NTP.

L'opzione del DCF77, per me, è alternativa anche al classico GPS in quanto il DCF77 lo puoi ricevere anche al chiuso o comunque con il cielo ingombro.

maniiu

#27
Jun 03, 2013, 09:22 am Last Edit: Jun 03, 2013, 09:55 am by maniiu Reason: 1
Rieccomi!! Vi sono mancato? :-)
Ritorno al tema originale del post.. l' RTC....
Ho finito, il progetto:
con due bottoni gestisco un menu sull'lcd, che mi permette di
- modificare l'ora
- modificare l'orario di avvio della pompa per l'irrigazione
- fare un avvio veloce dell'irrigazione

Il problema è ancora sull'orario.
Ho fatto fatica a capire come impostare l'orario dell'RTC, (come vorrei fare dal menu) sembra che nella libreria RTClib, non esista un comando che esegua questa funzione, e bisognerebbe pertanto scrivere linee di codice per commutare numeri decimali in BCD (non ho capito come si fa) e in qualche modo inviarli all'rtc.. Ma forse ho capito male...

Sembra invece che la libreria time()  utilizzata assieme ad rtclib, mi permetta di commutare un'orario nella codifica linux e poi impostarlo con rtc.now()=datetime(xx,yy,zz,kk,jj,..)

Ma qui viene il bello..
Di fatto sembra che l'RTC si blocchi quando stacco la corrente... o meglio ancora, quando riattacco la corrente lei prende il valore di orario dato durante la compilazione dello sketch.. oppure, in base all'uso o meno di rtc.now(date, time), parte da zero..

Altra cosa strana.. Se apro il monitor seriale, l'lcd si spegne per un paio di secondi, e quando si riaccende l'orario che mi mostra è sincronizzato al computer..

Rtc rotto?Altre idee?
Grazie
manu

nid69ita


Di fatto sembra che l'RTC si blocchi quando stacco la corrente... o meglio ancora, quando riattacco la corrente lei prende il valore di orario dato durante la compilazione dello sketch.. oppure, in base all'uso o meno di rtc.now(date, time), parte da zero..


Beh dipende da come hai fatto il programma. Quando Arduino riparte, riesegue anche il codice che hai nella setup()
Dovresti postare lo sketch per poter controllare, almeno la setup().
my name is IGOR, not AIGOR

leo72


Il problema è ancora sull'orario.
Ho fatto fatica a capire come impostare l'orario dell'RTC, (come vorrei fare dal menu) sembra che nella libreria RTClib, non esista un comando che esegua questa funzione, e bisognerebbe pertanto scrivere linee di codice per commutare numeri decimali in BCD (non ho capito come si fa) e in qualche modo inviarli all'rtc.. Ma forse ho capito male...

Se parliamo della RTClib di Adafruit, ha la funzione RTC.adjust() che serve per impostare l'orario. Per passarglielo in formato "commestibile", devi usare la funzione DateTime che trasforma l'orario e la data in un formato accettabile.
Code: [Select]
RTC.adjust(DateTime(anno, mese, giorno, ore, minuti, secondi));
Hai guardato gli esempi?

Quote

Di fatto sembra che l'RTC si blocchi quando stacco la corrente... o meglio ancora, quando riattacco la corrente lei prende il valore di orario dato durante la compilazione dello sketch.. oppure, in base all'uso o meno di rtc.now(date, time), parte da zero..

Ti ha già risposto nid69.

Quote

Altra cosa strana.. Se apro il monitor seriale, l'lcd si spegne per un paio di secondi, e quando si riaccende l'orario che mi mostra è sincronizzato al computer..

E' normale, visto che l'apertura del monitor seriale dell'IDE resetta l'Arduino.

Go Up