Pages: [1]   Go Down
Author Topic: RTC e azioni programmate  (Read 812 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,

avrei la necessità di far eseguire ad arduino dei comandi ad un determinato orario, per questo l'ho dotato di RTC. Il mio intento sarebbe quello di far comportare arduino come un timer impostando degli intervalli di tempo o delle ore specifiche.

Es.
-ogni 15min pin 10 HIGH per 5min
-alle ore 20:35 pin 10 HIGH fino alle 22:35
-......

non riesco a farmi uno scenario,mentalmente, di come poter gestire queste informazioni per arrivare allo scopo....avevo pensato ad un if per l'esempio  delle 20:35, ma non posso applicarlo anche per il primo esempio. La funzione millis() non la posso usare perche volevo evitare che un reset del dispositivo facesse ripartire da capo il contatore.

.....mi date una mano.....la soluzione credo si semplicissima, ma giuro al momento non riesco a farmi venire in mente niente  smiley-grin

GRAZIE
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3259
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bhe intanto hai una eeprom se non vuoi impegnare troppo la ram,
ti crei delle celle dove ci sono scritte le informazioni che ti servono, n° del pin, HH, MM, On,Off, ripetizione ogni x, Lu,Ma,Me,Gio,Ven... con un solo byte, ce ne stanno veramente tante, se poi applichi una logica al raccoglimento dei dati il programma è più semplice di quanto credi
Cos'è un acquario anche il tuo?
« Last Edit: January 22, 2013, 04:01:19 pm by pablos » Logged

no comment

Offline Offline
Jr. Member
**
Karma: 0
Posts: 97
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi mi sembra di capire che cmq devo fargli fare cicli di verifica dei dati della eeprom e se se si verifica eseguire..... ma al di là di occupare memoria è piu o meno uguale che controllare i dati provenienti dall RTC con rtc.getTimeStr()

o forse sto solo guardando nella direzione sbagliata......mi sembra un po macchinoso

ma non esiste niente tipo demone  'atd' di linux ??
Logged

Offline Offline
Full Member
***
Karma: 4
Posts: 148
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ).

se poi vuoi che questo accade ogni 15 minuti fai il confronto anche per quando sono le ore x e 30/45 e 00 minuti.

pero' a questo punto io ci vedo meglio un 555 in astabile che ti costa meno di un micro 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

@andrea:
scusa ma esistono librerie che trasformano i dati in qualcosa di "umano" come ad esempio ore e minuti  smiley-wink

@tronicman:
se vuoi schedulare piccoli lavori in background perché non dai un'occhiata alla mia libreria leOS/leOS2? Serve proprio a questo.
Puoi mettere un task che, ogni tot esegua un compito in automatico.
Logged


Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esiste  anche la libreria Timealarms "amica" della libreria Time smiley-wink
https://code.google.com/p/arduino-time/source/browse/#svn%2Ftrunk%2FTimeAlarms
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ).
Non è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101.
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

esiste  anche la libreria Timealarms "amica" della libreria Time smiley-wink
https://code.google.com/p/arduino-time/source/browse/#svn%2Ftrunk%2FTimeAlarms
Tu quoque, BrainBooster, fili mi!
 smiley-yell
Anche tu, BrainBooster, figlio mio, mi tradisci suggerendo le lib degli angli?  smiley-lol
Logged


Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll-sweat sorry, mi è venuto automatico vedendo che usava un rtc HW  smiley-lol
Logged

Offline Offline
Full Member
***
Karma: 4
Posts: 148
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ).
Non è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101.

e già, me ne sono dimenticato  smiley-red
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 è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101.
Codifica BCD
Logged


Pages: [1]   Go Up
Jump to: