DS1302 e interrupt...impossibile?

Buonasera a tutti cari "arduinisti"...:smiley:
Premetto che non so se questo quesito vada meglio in hardware, ma bene o male afferisce a entrambe le sezioni...quindi lo metto qui.
Posseggo un modulino DS1302, il classico modulo RTC economico :http://goo.gl/bhr37t

Il mio quesito è legato alla mia necessità per il progettino che sto realizzando. Si tratta di un irrigatore automatico, e ho necessità di far attivare l'irrigatore a un orario prestabilito, facciamo per esempio le 7 di mattina. Bene. Di funzionare il modulino funziona alla grande, e se con una richiesta mi faccio stampare l'ora va molto bene. Il problema è che a me servirebbe come interrupt, mandando a dormire arduino tutta la notte per poi svegliarlo alle 7 e fargli fare i vari check e infine irrigare per poi riaddormentarsi.
Ora, ho cercato un sacco e non trovo nessuna informazione circa la possibilità di usare tale modulo in interrupt, pur tuttavia ricordando che quando lo presi nella descrizione il venditore cinese alludeva anche a questa funzione....mi prendeva in giro? Ricordo male?

I più esperti sanno chiarirmi se è impossibile usare tale modulo come interrupt o sanno suggerirmi eventualmente come fare, se è possibile invece usarlo?

Visto che senza questa funzione il progetto va a farsi benedire, potrei anche prendere un'altro RTC, questo comunque funziona e lo userei per altro...ma quale?
La funzione di interrupt è, chiaramente, l'unica funzione utile...non mi serve EEPROM o altro...cercando nel forum ho trovato questo PCF8563, dite che vada bene?

Grazie a tutti coloro che interverranno!!

Il DS1307 non possiede uscite fatta eccezione per l'uscita Square Wave che può essere programmata per fornire un clock a 1Hz oppure 4, 8 e 32 kHz.

Il segnale di cui parli dovrebbe servire ad Arduino per "risvegliarsi".

Il PCF8563, simile al DS1307, possiede la funzione allarme che consente di portare a livello logico 0 il pin INT una volta programmato, ma (stranamente) su alcuni moduli commerciali questo pin non è accessibile, anche se è sempre possibile saldare un filo direttamente sull'integrato.

Consiglio anch'io il PCF8563, proprio per via dell'uscita /INT che possiede, col quale si può svegliare la MCU ad un ben preciso orario.

Alternativamente, se non si può cambiare il DS1302, si potrebbe pensare di mettere la MCU in sleep e di svegliarla col segnale di clock con frequenza di 1 Hz. Nel ciclo principale controlli l'orario, se non è quello giusto, rimetti il chip a nanna. Sicuramente il consumo è maggiore rispetto al caso precedente, ma puoi comunque risparmiare qualcosa.

Ultima cosa, se parliamo di ARDUINO io intendo la scheda: il risparmio energetico, ricorda, vale solo per la MCU, tutto il resto dell'elettronica della scheda continua a lavorare e consumar corrente. Dovresti pensare ad un circuito con un Atmega328 in standalone.

cyberhs:
Il DS1307 non possiede uscite fatta eccezione per l'uscita Square Wave che può essere programmata per fornire un clock a 1Hz oppure 4, 8 e 32 kHz.

Il segnale di cui parli dovrebbe servire ad Arduino per "risvegliarsi".

Il PCF8563, simile al DS1307, possiede la funzione allarme che consente di portare a livello logico 0 il pin INT una volta programmato, ma (stranamente) su alcuni moduli commerciali questo pin non è accessibile, anche se è sempre possibile saldare un filo direttamente sull'integrato.

era quello che immaginavo, ma volevo qualche parere in più per sentirmelo confermare ancora...

a sto punto credo mi orienterò sul PCF8563, però non prendo il modulo già fatto, ma solo l'intgrato..guardando online varie guidine fatte apposta, è semplicissimo collegarlo all'arduino e non c'è bisogno di un intero modulo apposta..basta un clock da 32.768khz e un paio di resistenze e eventualmente dei diodi per l'alimentazione di riserva...nulla di complesso.

leo72:
Consiglio anch'io il PCF8563, proprio per via dell'uscita /INT che possiede, col quale si può svegliare la MCU ad un ben preciso orario.

Alternativamente, se non si può cambiare il DS1302, si potrebbe pensare di mettere la MCU in sleep e di svegliarla col segnale di clock con frequenza di 1 Hz. Nel ciclo principale controlli l'orario, se non è quello giusto, rimetti il chip a nanna. Sicuramente il consumo è maggiore rispetto al caso precedente, ma puoi comunque risparmiare qualcosa.

Ultima cosa, se parliamo di ARDUINO io intendo la scheda: il risparmio energetico, ricorda, vale solo per la MCU, tutto il resto dell'elettronica della scheda continua a lavorare e consumar corrente. Dovresti pensare ad un circuito con un Atmega328 in standalone.

Leo grazie dell'intervento...come dicevo, se posso recuperare il ds1302 è bene, altrimenti non fa nulla, prendo il PCF8563 e amen. Il ds1302 mi funziona bene e lo userò altrove, non è un problema.
Avevo pensato anche io sinceramente alla funzione del risveglio col clock a 1Hz, ma mi sembrava un voler "girare intorno al problema", cioè la mancanza dell'interrupt. E allora visto che se si devono fare, si fanno bene, ho deciso direttamente di provare sto PCF8563, motivo in più per scoprire un componente che non conoscevo.

Per quanto riguarda l'arduino, ti assicuro che consuma pochissimo. Parliamo di Arduino pro mini. Togliendo i led, e il piccolo regolatore interno (fornisco già tensione io a 5V puliti), e sopratutto usando la mitica libreria Narcoleptic, scendo sotto 1mA di consumo o quasi, testato...Inoltre il consumo non è poi, volendo, un problemone visto che comunque il tutto sarà attaccato 24h/24 alla presa di casa mediante piccolo switch 220v-5v. Il mio volere che arduino passi da assonnato a sveglio al momento giusto era per non "sprecare" corrente per niente tenendolo sempre sveglio.
Visto che ci siamo, approfitto per togliermi un dubbio....
Per avere l'alimentazione per l'arduino userò uno di quei piccoli trasformatorini che si usano ora per caricare i cellulari. 220V-5V e 1A, secondo te tenendolo attaccato 24h/24 ha molto "spreco" in termini di dissipazione propria? non lo trovo mai caldo quindi penso che come dissipazione come calore non sia un granchè...

Io nei miei progettini in cui necessito di un RTC uso esclusivamente il PCF8563, vai tranquillo :slight_smile:

giorgio90:
Per quanto riguarda l'arduino, ti assicuro che consuma pochissimo. Parliamo di Arduino pro mini. Togliendo i led, e il piccolo regolatore interno (fornisco già tensione io a 5V puliti), e sopratutto usando la mitica libreria Narcoleptic, scendo sotto 1mA di consumo o quasi, testato...

Ciao, mi spiegheresti come hai rimosso il led e tagliato il regolatore di tensioen ? hai una foto o un link per farmi capire a modo ( voglio farlo anche io ma visto gli spazi ridottissimi nel Mini non voglio sbagliare, grazie! )

leo72:
Io nei miei progettini in cui necessito di un RTC uso esclusivamente il PCF8563, vai tranquillo :slight_smile:

grazie leo...riguardo al parere circa l'assorbimento del piccolo trasformatorino cosa ne pensi?
Visto che usi spesso il PCF8563 hai qualche libreria da consigliarmi, qualche link utile? Ho cercato in rete ma è molto meno "famoso" di quanto mi aspettavo...praticamente il 99% delle guide usa solo i classici RTC ds1307 o ds1302... :cry:

gazza_mo:
Ciao, mi spiegheresti come hai rimosso il led e tagliato il regolatore di tensioen ? hai una foto o un link per farmi capire a modo ( voglio farlo anche io ma visto gli spazi ridottissimi nel Mini non voglio sbagliare, grazie! )

Allora, per quanto riguarda i led mi è bastato utilizzare un piccolo cutter, con la punta della lama basta forzare sulle saldature del led SMD e quello si stacca. Per il regolatore invece va fatta un'incisione sulla pista che porta al regolatore stesso, tuttavia l'unico pro mini su cui l'ho fatta è un clone (l'ho fatta li per non rischiare di rovinare per la prima volta uno buono), quindi è molto probabile che la disposizione dei componenti e delle piste è diversa. Se ti interessa questo metodo abbastanza brutale di abbassare i consumi cerca sul forum e ci dovrebbero essere delle discussioni dove ci sono anche delle foto dettagliate. :wink:

Per "tagliare" il regolatore incisione col cutter o qualcosa tipo dremel ?
Per il led allora provo come mi hai detto e al massimo se vedo che non viene scaldo un po' saldatura.

gazza_mo:
Per "tagliare" il regolatore incisione col cutter o qualcosa tipo dremel ?
Per il led allora provo come mi hai detto e al massimo se vedo che non viene scaldo un po' saldatura.

a me è bastato un cutter, l'importante è creare una valida disconnessione tra le parti della pista, in modo da interrompere ciò che scorre in essa...ovviamente con un dremel sarebbe facilissimo sbagliare di un millimetro e "segare" praticamente la scheda...quindi non te lo consiglio...
TI consiglio tuttavia di fare queste operazioni su una scheda destinata a un progetto "finito" (parolone). Senza led, infatti, non potrai accorgerti ad occhio quando la scheda è in funzione, senza regolatore non potrai usare altre fonti che non siano i 5V.
Io, ad esempio, ho fatto queste modifiche come ultima cosa nella realizzazione di un precedente progetto, in modo che durante la fase di "prototipazione" vera avevo i led e tutto, in modo da essere comunque aiutato...e alla fine ho asportato tutto per abbassare i consumi di ancora un pochino...

buon consiglio quello di usarla solo come scheda per progetto finito.
Cmq con questi accorgimenti e lo sleepmode la durata della batteria dovrebbe aumentare di un bel po' !

giorgio90:
grazie leo...riguardo al parere circa l'assorbimento del piccolo trasformatorino cosa ne pensi?

Attento che quelli sono caricabatterie e non alimentatori. A parte questo, quelli di ultima generazione hanno consumi in fase di non carica molto molto bassi, sono "green" anche loro ormai.

Visto che usi spesso il PCF8563 hai qualche libreria da consigliarmi, qualche link utile? Ho cercato in rete ma è molto meno "famoso" di quanto mi aspettavo...praticamente il 99% delle guide usa solo i classici RTC ds1307 o ds1302... :cry:

A mente mi pare questa:
http://playground.arduino.cc/Main/RTC-PCF8563

leo72:
Attento che quelli sono caricabatterie e non alimentatori. A parte questo, quelli di ultima generazione hanno consumi in fase di non carica molto molto bassi, sono "green" anche loro ormai.
A mente mi pare questa:
Arduino Playground - HomePage

Mmmm, l'alimentatorino a cui mi riferivo è di quelli che hanno il trasformatore 220V-5V (quelli che in poche parole hanno il maschio a 220 e poi come femmina la porta USB, utilizzabili come presa di carica USB generica), non credo abbia all'interno un chip di carica in quanto essendo "universale" è fatto per dare i 5V in continua, senza staccare dopo un tot tempo o arrivata tot carica. L'ho provato già con un laser, acceso 24h/24 e non ha mai ceduto, quindi suppongo si limiti a trasformare 220->5 e AC->DC.

Per la libreria ti ringrazio, me la studio per bene, e vedo come implementarla per la funzione di interrupt con tutto il resto...:smiley:

Devi impostare un allarme. Una volta fatto questo, l'RTC al momento esatto manderà il segnale sul relativo pin. Non dovrai fare altro che collegare questo pin ad un pin di un interrupt hardware del chippino (INT0 o INT1) e preparare la relativa ruotine. Ricordati che prima di rimettere in sleep l'Atmega dovrai rispedire all'RTC l'orario dell'allarme successivo. Facile,no? :wink:

leo72:
Devi impostare un allarme. Una volta fatto questo, l'RTC al momento esatto manderà il segnale sul relativo pin. Non dovrai fare altro che collegare questo pin ad un pin di un interrupt hardware del chippino (INT0 o INT1) e preparare la relativa ruotine. Ricordati che prima di rimettere in sleep l'Atmega dovrai rispedire all'RTC l'orario dell'allarme successivo. Facile,no? :wink:

leo72:
Devi impostare un allarme. Una volta fatto questo, l'RTC al momento esatto manderà il segnale sul relativo pin. Non dovrai fare altro che collegare questo pin ad un pin di un interrupt hardware del chippino (INT0 o INT1) e preparare la relativa ruotine. Ricordati che prima di rimettere in sleep l'Atmega dovrai rispedire all'RTC l'orario dell'allarme successivo. Facile,no? :wink:

ah ecco, questa cosa mi era sfuggita.
Riferendoci a un esempio realistico, considerando che io ho necessità che il risveglio della bella addormentata avvenga ogni mattina alle 7, devo scrivere il codice affinchè prima di riaddormentarsi lui rimetta la sveglia alle 7 della mattina dopo, giusto?
Io invece, molto più banalmente probabilmente, avevo pensato a qualcosa tipo "metti la sveglia tutti i giorni alle 7 di mattina, credendo fosse sufficiente usare le 07,00 am come trigger e non un preciso giorno, preciso mese, ecc...
Riprendendo un esempio della libreria suggerita in questo thread, avevo in mente una cosa del genere...:
(riporto uno spezzone dell'esempio)

/* setup int on pin 3 of arduino */
  attachInterrupt(1, blink, FALLING);
  /* clear out all the registers */
  rtc.initClock();
  /* set a time to start with.
   * day, weekday, month, century, year */
  rtc.setDate(14, 6, 3, 0, 10);
  /* hr, min, sec */
  rtc.setTime(1, 15, 40);
  /* alarm pin goes low when match occurs
   * this triggers the interrupt routine
   * min, hr, day, weekday
   * 99 = no alarm value to be set
   */
  rtc.setAlarm(99, 07, 99, 99);

sarebbe corretta come cosa?
Oppure il tuo intendere "Ricordati che prima di rimettere in sleep l'Atmega dovrai rispedire all'RTC l'orario dell'allarme successivo" era riferito al fatto che una volta scattato l'allarme questo viene "pulito" e devo rimetterlo anche se è lo stesso valore?

Se l'orario è lo stesso ogni giorno, puoi attivare un allarme giornaliero e quello scatta sempre. Quindi sì, puoi evitare di settare il nuovo orario. Però va comunque tolto il segnale sul pin agendo su un bit dell'RTC. Controlla per bene il datasheet perché sto andando a mente e non ricordo il registro

leo72:
Se l'orario è lo stesso ogni giorno, puoi attivare un allarme giornaliero e quello scatta sempre. Quindi sì, puoi evitare di settare il nuovo orario. Però va comunque tolto il segnale sul pin agendo su un bit dell'RTC. Controlla per bene il datasheet perché sto andando a mente e non ricordo il registro

Si, quello si...ho buttato un'occhio mooolto veloce alla libreria e mi pare di aver individuato come intervenire.
Grazie mille per tutti i consigli !!