«

»

Set 07

Stampa Articolo

RTC DS3231 per arduino

L’RTC DS3231 per arduino è un integrato RTC che mi è stato consigliato da un Maker sempre attento alle novità offerte dal mercato: Alberto

RTC DS3231 per arduino

Come sai Arduino non possiede un RTC ( Real Time Clock ) che possa consentirti di tener sotto controllo l’orario.

Nell’orologio neopixel ho simulato il tracorrere dei secondi, minuti ed ore sapendo che non sarà mai preciso, si è trattato solo di una simiulazione.

Nei miei precedenti progetti ho sempre utilizzato un altro RTC il DS1307 puoi leggere qualche alrticolo:

Nei diversi esperimenti ho verificato che tale tipo di RTC perde qualche secondo ogni giorno e cumulato nei mesi diventa uno scarto considerevole che può avere delle implicazioni importanti nel funzionamento del progetto stesso, pensa ad esempio ad un DataLogger se ogni mese perdi qualche minuto al termine di un monitoraggio su lungo periodo ( 3-6 mesi ) ti troverai dati non concordi con il reale orario di raccolta.

L’imprecisione del DS1307 non è legata al chip stesso, piuttosto al quarzo esterno di cui tale integrato necessita per tener sincronizzato il clock interno. Se il quarzo “perde colpi” l’ora non è più fedele.

L’RTC DS3231 per arduino possiede la caratteristica di essere molto preciso, come riportato nel datasheet del produttore in quanto:

The DS3231 is a low-cost, extremely accurate I2C real-time clock (RTC) with an integrated temperature compensated crystal oscillator (TCXO) and crystal.

possiede al suo interno un oscillatore con temperatura controllata ed una sonda di temperatura che utilizza per compensare la frequenza di oscillazione.

Collega l’RTC DS3231 per arduino

I collegamenti elettrici dell’RTC DS3231 per arduino sono molto semplici in quanto il modulo è alimentato a 3,3v e comunica con arduino mediante I2C quindi attraverso i pin SDA ed SCL

RTC DS3231 arduino pin

ho utilizzato i fili di colore giallo e verde per la comunicazione I2C.

Libreria DS3231

Come già per il DS1307 anche per l’RTC DS3231 per arduino è necessaria una libreria, cercando nel web trovi diverse librerie utili tra le quali ho provato questa:

JChristensen DS3231 DS3232RTC

anche se si chiama DS3232 è valida sia per il DS3232 sia per il DS3231. Puoi provare uno degli esempi: TimeRTC

Al primo tentativo di compilazione potresti imbatterti nel medesimo errore in cui mi sono imbattuto io:

RTC DS3231 arduino error library

la necessità di aggiungere la libreria Time.h a quelle installate nel tuo IDE, seguendo il link consigliato dall’autore la trovi qui, una volta installata la compilazione dello sketch dovrebbe procedere correttamente.

Apri il monitor seriale per verificare la data e l’ora restituita dal tuo RTC DS3231 per arduino.

Al primo collegamento l’orario riportato era errato: 01Jan2000 00:00:01, devi impostare l’orario per sincronizzarlo con l’ora corrente.

Tra gli esempi di JChristensen trovi un utilissimo esempio SetSerial.ino che ti permette di impostare l’orario dell’RTC DS3231 per arduino mediante connessione seriale.

Invia questo esempio sul tuo arduino, apri il monitor seriale e dovresti ottenere una schermata simile:

RTC DS3231 arduino set serial

nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:

RTC DS3231 arduino time setting

in questo momento il tuo RTC DS3231 è impostato con la data e l’ora che hai deciso di impostare.

Nota che nella prima schermata del monitor seriale dopo alcune linee viene restituita la temperatura, questo perché lo sketch prevede di recuperare la temperatura dal sensore installato sul modulo e di restituirtela ogni minuto.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/rtc-ds3231-per-arduino.html

68 comments

2 pings

Vai al modulo dei commenti

  1. Antonio

    …si, si verissimo! nei casi da me analizzati il DS1307 mi anticipa mediamente di 15 sec. al giorno! Ottima l’idea del DS3231.

    1. Mauro Alfieri

      Ciao Antonio,
      si il DS1307è un buon prodotto a patto di accettare la perdita elevata di secondi sui cicli giornalieri.

  2. Stefano

    non capisco perchè ma non mi mantiene l’ora impostata pur avendo la batteria inserita, inoltre anche la temperatura rilevata e’ sballata (0 gradi) idee ?

    1. Mauro Alfieri

      Ciao Stefano,
      potrebbe essere danneggiato ?

  3. Ettore

    Buona sera, ho riscontrato problemi di compatibilità con libreria time e la libreria ds3231 come risolvere il conflitto?
    Grazie saluti
    Ettore

    1. Mauro Alfieri

      Ciao Ettore,
      senza conoscere il conflitto posso solo suggerirti di trovare un’altra libreria che non presenti conflitti o di modificarti le libreria se ne sei capace.

  4. Alessio

    Ciao.grazie per tutti gli aiuti 😀

    non riesco a settare l’ora e la data! non riesco a capire come modificarla.grazie

    1. Mauro Alfieri

      Ciao Alessio,
      hai letto l’articolo e compreso? tra le due schermate relative al monitor seriale è scritto chiaramente, oltre che nei commenti dello sketch, il formato in cui lo sketch si attende la data e l’ora: yyyy,mm,dd,hh,mm,ss

  5. luigi

    Buongiorno Mauro,
    ho provato a settare il nuovo orario e mi riporta i dati corretti (RTC set to: 06May2016 11:41:45
    06May2016 11:41:45
    06May2016 11:41:46
    06May2016 11:41:47 )
    ma quando riavvio la connessione seriale mi ritorna al settaggio originale (06May2016 11:42:27
    RTC Sync FAIL!
    01Jan1970 00:00:01
    01Jan1970 00:00:02

    cosa posso fare?

    grazie

    Luigi

    1. luigi

      risolto, avevo invertito i cavi sda scl.

      grazie
      Luigi

      1. Mauro Alfieri

        Bene Luigi,
        ti ho appena risposto.

    2. Mauro Alfieri

      Ciao Luigi,
      il messaggio “RTC Sync FAIL!” mi dice che non stai veramente comunicando con il chip RTC, probabilmente hai solo impostato i valori corretti nella memoria genuino, ma il tuo DS3231 è mal collegato.

  6. lino grieco

    mauro!!!!!
    sempre lino…..ho problemi ad impostare data e ora!!!
    ho seguito la guida….l’errore che mi dà è quando trova nella verifica dello
    sketch arduino mega 2560 in mio possesso….
    che faccio?

    1. Mauro Alfieri

      Ciao Lino,
      se non mi dici l’errore è impossibile che io riesca ad aiutarti. Solitamente gli errori in fase di compilazione sono chiari, prova ad inviarmelo insieme alla versione del tuo IDE e delle librerie che stai utilizzando.

  7. lino grieco

    scusami mauro…forse ero un pò stanco….ho provato oggi e funziona..
    l’unica cosa che il mio pc segna le 15:45 e l’ora viene impostata quando apro il monitor seriale
    alle 15:15….per quanto riguarda la data ok

    1. Mauro Alfieri

      Ciao Lino,
      la differenza di orario potrebbe dipendere da un errato setting captato dall’IDE al momento della compilazione.
      Prova ad impostare tu il valore orario e verifica che il setting avvenga correttamente.

      Dimmi poi come è andata.

      1. lino grieco

        niente da fare…..stamattina mi portava un ora rispetto al pc di almeno 30 minuti indietro…la data ok

        vado nel serial monitor, inserisco in alto data ed ora faccio invia ma non succede nulla

        1. Mauro Alfieri

          Ciao Lino,
          hai provato altre librerie?

  8. lino grieco

    cmq mauro…sei un grande…..ho riletto il post e mi mancava la libreria streaming.h nel file di esempio setserial.

    ho seguito alla lettera tutto e va una bomba…..

    domanda: una volta settata la data e l’ora……dopo aver staccato tutto rimane in memoria nel DS3231 grazie alla batteria al litio incorporata?

    1. Mauro Alfieri

      Ciao Lino,
      ti ringrazio per i complimenti.
      Mi spiace solo che tu abbia perso tanto tempo per capire che il problema era una libreria come ti avevo suggerito già nei primi commenti, a volte basta leggere con attenzione anche le risposte per risolvere prima.

      1. lino grieco

        caro mauro….adesso ho bisogno di altre informazioni riguardo al DS3231.
        sto lavorando su un progetto che consiste nel far partire degli attuatori(pompa acqua, areatori, motoriduttori) legati ad una scheda relè grazie alla lettura di sensori di temperatura ed umidità che tu ben conosci….

        per ora riesco a far girare il tutto ogni volta che lancio il mio sketch o quando questo è già caricato su arduino mega2560 con alimentazione esterna….

        quello che voglio fare adesso è legare il funzionamento di questi attuatori all’ora e alla data che arduino mi legge grazie al DS3231.

        quello che intendo fare è trattare l’ora e la data come due variabili e far funzionare i miei attuatori ogni tre ore o addirittura dopo due giorni a partire da un certo momento x……..mi puoi dare delle dritte?

        1. Mauro Alfieri

          Ciao Lino,
          leggi come funziona la centralina di irrigazione; dovrai adattare il codice al DS3132 in quanto scritta per il DS1307.

  9. lino grieco

    grazie…inizio a studiarmela e poi torno a stressarti…

    grazie ancora

  10. Erik

    ciao a tutti, ogni volta che cerco qualche sito su come usare o impostare certe schede con arduino capito sempre su questo blog molto utile, al momento lo trovo molto più utile del forum ufficiale, ho un problemino, ho provato varie librerie per utilizzare il DS3231RTC e fin’ora solo uno mi ha dato risultati senza sorta di errori, purtroppo nn è questo pubblicato nn sono mai riuscito a risolvere il problema del Time.h riportato in alto e dal pc del lavoro nn riesco a trovare quello che ho usato io per poterlo linkare, ma suppongo che i comandi per utilizzarlo siano sempre gli stessi, ho impostato la data e l’ora ma nn capisco come inizializzare la scheda, per impostare ad una certa ora l’attivazione o la disattivazione di un relè, inoltre al posto del monitor seriale ho impostato un lcd in I2C dove quando carico lo sketch mi mostra la data e ora + la temperatura ma l’unica cosa che si aggiorna automaticamente è la temperatura, l’orario rimane fisso (solo su lcd) se resetto la scheda o ricompilo la scheda allora si aggiorna. Mi potete aiutare? Nel caso stasera quando sono a casa posto il codice come l’ho scritto io così è più utile.

    1. Mauro Alfieri

      Ciao Erik,
      non so se possa aiutarti ma per la memorizzazione di un allarme è una cosa che penso non sia possibile con il solo RTC; dovrai scrivere del codice arduino che valuti la data e l’ora e porti HIGH un pin a cui è connesso il relè.
      Sul secondo problema sei certo che la lettura dell’orario sia corretta? nel monitor seriale vedi scorrere il tempo?

  11. Michelangelo

    ciao mauro, scusa il disturbo, ho collegato rtc d3231 all’arduino e quando carico il codice e apro il monitor seriale mi dice:
    RTC Sync FAIL!
    01Jan1970 00:00:01
    e cosi fa ogni volta che riapro il monitor… cosa posso fare??

    1. Mauro Alfieri

      Ciao Michelangelo,
      hai provato a verificare che i collegamenti siano corretti e che l’indirizzo i2c sia quello del tuo modulo?
      Se non conosci l’indirizzo del modulo puoi verificarlo sulla documentazione del produttore o venditore da cui hai acquistato l’RTC3231

      1. Michelangelo

        I collegamenti sono corretti, può essere che la batteria sia scarica?
        Cmq non so cosa sia “l’indirizzo I2C”, se magari potresti spiegarmelo te ne sarei grato; ho acquistato il modulo su internet e mi è arrivato senza niente

        1. Mauro Alfieri

          Ciao Michelangelo,
          trovi degli articoli in cui ho descritto non solo di cosa si tratta ma anche come reperirlo se non lo possiedi.
          In generale evito di acquistare componenti su siti che non rilasciano adeguata documentazione perché spesso risultano inutilizzabili.

      2. Michelangelo

        Ho provato a fare uno scanner dell’indirizzo i2c attraverso uno sketch: 0x57. Ora cosa devo fare?
        (scusa ma non me ne intendo molto di programmazione in c/c++ in quanto il mio campo è Java)

        1. Mauro Alfieri

          Ciao Michelangelo,
          hai letto il mio commento linea per linea a questo articolo? Dovrei aver scritto dove viene indicato l’indirizzo I2C.
          Se qualche passaggio non ti è chiaro della mia spiegazione chiedi pure attraverso i commenti.

  12. Erik

    Ciao Mauro, ho ripreso a mano il progetto per sistemarlo un po’, ho visto subito che l’orario nn corrisponde, cioè quando l’avevo impostato quest’estate andava bene ora segna un’ora avanti, avevo anche eliminato la parte che mi faceva vedere la data e l’ora via seriale ho rispristinato e nella riga della seriale ho provato a rinserire la data e l’ora ma nn prende più i nuovi dati, se aggiungo un pulsante posso ottenere il medesimo risultato? sono un po’ scarso in programmazione aiutami almeno a capire (avrei preferito via seriale ma se nn funziona)… il settaggio via seriale funziona solo da nuovo o se cambio batteria?

    1. Mauro Alfieri

      Ciao Erik,
      hai controllato che lo sketch sia quello che ho pubblicato io?
      Se via seriale vedi il dato che passa, allo stesso modo dovrai poter eseguire le modifiche.
      Se qualcosa non funziona puoi aggiungerti delle righe di Serial.println() per capire cosa gli stai passando, non dovresti avere difficoltà se hai compreso come funziona lo sketch.

      1. Erik

        ciao, ne avevo provati diversi, perché ognuno mi dava un problema, del tipo il tuo ma anche quello più aggiornato che ho trovato il setserial mi da errore sulla libreria schematic, allora avevo usato timertc che dava un errore sulla parte del Time.h ho aperto la libreria e ho fatto le giuste correzioni per poter lanciare lo sketch, una volta avviato ho aperto la seriale e ho impostato l’orario, questo un paio di mesi fa, settembre – ottobre prima del cambio dell’ora, dopo ho aggiunto il progetto dell’rtc a quello che già avevo fatto e ho tolto le parti che riguardano il seriale per permettere la visualizzazione su lcd, se rimetto la visualizzazione sul seriale vedo le prime 2 cifre dei minuti che invio al lcd poi vedo l’orario completo e poi la data, ti faccio un esempio di quello che vedo

        :13 01:13:40 17:12:2016

        sul seriale al momento visualizzo la data e l’ora in questo modo e nn riesco a cambiare l’ora per passare dall’ora legale a quella solare e viceversa

        1. Erik

          quando parlo dello sketch setserial ho sbagliato a scrivere, volevo riferirmi al streaming.h e invece ho scritto schematic, nel momento che scrivevo mi son sbagliato

          1. Mauro Alfieri

            OK

        2. Mauro Alfieri

          Ciao Erik,
          se ho compreso bene il problema hai dovuto modificare la librerai per consentire l’impostazione dell’ora?
          Nel mio caso non è stato necessario.
          Prova a rimettere le modifiche e lasciale permanenti in modo che tu possa eseguire il cambio dell’ora ogni volta che lo desideri o programma una routine di cambio ora calcolato sulla base dell’algoritmo usato per il cambio dell’ora in tutti gli apparati dotati di RTC e sprovvisti di connessione verso un Ntp server.

          1. Erik

            ci ho provato ma nn riesco… che stress 😛 pensavo di aggiungere 2 pulsanti uno per aumentare e uno per diminuire l’ora manualmente, ma sinceramente nn saprei come fare :S

            tipo nn so:

            button up
            if button up true + hour()

            l’ho buttata giù cosi perché sto uscendo, immagino che ci sia molto più da scrivere 😛

          2. Mauro Alfieri

            Ciao Erik,
            il concetto mi sembra buono.

  13. lorenzo

    Ciao io uso un arduino nano su cui i pin analogici A4 e A5 sono fuori asse, sono spostati verso il centro della scheda e non è comodo saldarli per usarli su breadboard.
    Ho cercato dove modificare le linee di codice perchè uso A2 e A3 e non riesco a trovarle. puoi aiutarmi ? 🙂
    il risultato quando collego il tutto mi da:

    “Unable to sync with the RTC
    0:00:00 0 0 1970
    0:00:01 1 1 1970”

    complimenti per il blog !!

    1. lorenzo

      Stavo leggendo ” DS3232RTC_h ” e mi chiedevo se non dovessi modificare qualcuna di queste parti:

      //DS3232 I2C Address
      #define RTC_ADDR 0x68

      //DS3232 Register Addresses

      //Alarm mask bits

      ….

      //Control register bits

      ….

      1. Mauro Alfieri

        Ciao Lorenzo,
        dipende da quale indirizzo possiede la tua scheda.
        Sul blog troverai degli esempi per esplorare gli indirizzi I2C.
        Leggi, comprendi e prova gli sketch per trovare le tue impostazioni.

    2. Mauro Alfieri

      Ciao Lorenzo,
      iniziamo a dire che devi usare i pin SDA ed SCL e no puoi usare dei pin a caso sulla board.
      Sull’arduino Nano ( se cerchi un pinout sul web ) dovrebbero corrispondere a D2 e D3, controlla, e non sono decentrati.

      Sei certo del modello di scheda che stai utilizzando ?

      1. lorenzo

        [[ link rimosso in automatico ]]

        Ciao Mauro questa è esattamente la board che ho io, su G immagini si vede come cercando “arduino pro mini” si trovino delle board anche molto diverse tra loro, non solo per la disposizione dei pin ma anche per il numero.
        qui sotto il pinout dove si vede che il pin digitale 18 e il 19 sono decentrati 😉

        [[ link rimosso in automatico ]]

        1. Mauro Alfieri

          Ciao Lorenzo,
          a parte la regola che hai violato inserendo link a siti non autorizzati, vedi fondo di ogni articolo, non ricordo quale sia il tuo dubbio.
          Si la Pro Mini ha i pin A4 ed A5 ( alias 18 e 19 ) su una fila interna rispetto a tutti gli altri pin di input/output

          1. lorenzo

            Ciao Mauro, la regola dove è scritta ?
            ho letto quella di non incollare sketch e non l’ho fatto, ma la regola dei “siti non autorizzati” non l’ho mai vista sul tuo sito.
            cmq la mia domanda era quella se si potessero cambiare i pin di arduino a cui collegare la RTC, ma hai già risposto prima 😉

          2. Mauro Alfieri

            Ciao Lorenzo,
            è una regola dettata dalla netiquette dei blog, ma hai ragione è meglio scriverla, la aggiungerò.

  14. Fabrizio

    risolto grazie

    1. Mauro Alfieri

      Ciao Fabrizio, sono contento .. se ti va scrivici come.

  15. giancarlo

    ciao, da quello che so il DS3231 ha anche una piccola “rom” per memorizzare degli alarm, sai se esistono librerie che la supportano e permettono di impostare questi alarm?
    sto progettando una sveglia e mi farebbe davvero comodo

    1. Mauro Alfieri

      Ciao Giancarlo,
      no purtroppo non so se le librerie per arduino supportino la gestione della rom interna del DS3231.
      Se ne conosci le specifiche puoi proporre all’autore della libreria ufficiale una estensione scritta magari a 4 mani.
      Se ti serve solo per memorizzare degli allarmi puoi usare la EEPROM di arduno, considerando il fatto che ne avrai almeno uno nel tuo progetto.

      1. Riccardo

        Noi sul forum di Arduino abbiamo scritto questo codice funzionante su DS3231 senza usare librerie:

        #include
        byte ore; /* ore correnti */
        byte minuti; /* minuti correnti */
        byte secondi; /* secondi correnti */
        byte error; /* errore al RTC */
        byte HOURS; /* variabile BCD ore */
        byte MINUTES; /* variabile BCD minuti */
        byte SECONDS; /* variabile BCD secondi */

        byte BCDbin(byte n){return ((n >> 4) * 10) + (n & 0x0F);} /* converte BCD in binario */
        byte binBCD(byte n){return ((n / 10) << 4) | (n % 10);} /* converte binario in BCD */

        void leggiRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        if (Wire.endTransmission()){
        error = 1; /* errore di connessione */
        return;
        }
        Wire.requestFrom(0x68, 3); /* tre registri da leggere */
        if (Wire.available() != 3){
        error = 2; /* errore di ricezione */
        return;
        }
        HOURS = Wire.read(); /* leggi ore RTC */
        MINUTES = Wire.read(); /* leggi minuti RTC */
        SECONDS = Wire.read(); /* leggi secondi RTC */
        error = 0; /* azzera variabile errore RTC */
        }

        void impostaRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        Wire.write(SECONDS); /* imposta secondi RTC */
        Wire.write(MINUTES); /* imposta minuti RTC */
        Wire.write(HOURS); /* imposta ore RTC */
        Wire.endTransmission(); /* fine trasmissione */
        }

        void setup() {
        Serial.begin(9600);
        Wire.begin(); /* inizializza bus i2c */
        ore = 23;
        minuti = 59;
        HOURS = binBCD(ore);
        MINUTES = binBCD(minuti);
        impostaRTC(); /* imposta RTC alle 23:58 */

        }

        voi loop() {
        leggiRTC();
        ore = BCDbin(HOURS);
        minuti = BCDbin(MINUTES);
        secondi = BCDbin(SECONDS);
        Serial.print(ore, minuti, secondi);
        }

        Questo codice imposta l'orario a 23:59 ogni volta che Arduino si accende. Per evitare questo basta cancellare le righe di impostazione dalla sezione setup() con un secondo caricamento dello sketch modificato.
        La cosa interessante è che con questo sketch noi abbiamo scritto "a mano" il registro per le ore, i minuti e i secondi. Da quello che ho capito vedendo i datasheet dovrebbero esserci anche dei registri per l'allarme, ma non abbiamo ancora provato ad usarli. Comunque puntando a quei registri teoricamente dovrebbe essere possibile impostare l'orario dall'allarme. Però facendo tutto quanto a mano. Comunque preferisco questo ad utilizzare la libreria. Ho capito molto di più il funzionamento ed ho l'impressione di avere pieno controllo su quello che faccio.

  16. Boris

    Ciao Mauro.
    Innanzitutto, vorrei farti i miei complimenti per il Blog.
    Sto facendo una stazione metro de esterno con tutti i sensori per gas nel aria MQ e DHT11 e ho pensato di mettere un Trasmettitore 433mhz per inviare tutti i dati al interno e fin qui tutto ok:
    Pero adesso mi sono imbattuto in un piccolo problemino, speravo mi potessi dare una mano.
    Sto cercando di collegare Arduino NANO sullo schermo 3.5′ e ho messo anche Ricevitore 433mhz e i pin bastano.
    Pero, mettendo lo schermo mi si occupano i pin Analogici da A0-A4.
    Adesso questo mi crea il problema se voglio mettere pure un RTC con I2C perche come spieghi tu servono A4 e A5 dei pin Analogici.
    Arduino nano ne ha fino A7.
    Per di più anche Digitali sono occupati dal D2 a D9

    Grazie e buona giornata a tutti!

    1. Mauro Alfieri

      Ciao Boris,
      controlla sullo schema e le caratteristiche dell’arduino nano se i pin SDA ed SCL siano corrispondenti ad A4 ed A5, poi valuta se puoi liberarli collegando i pin del display ad altri rimasti liberi.

  17. Giuseppe

    salve a tutti,
    ho un modulo 3231 montato con uno schift register 74hc595 e display LCD.
    Il tutto funziona, ma come mai ogni 10 ore circa il modulo sfasa l’ora di circa 1 minuto e 30 secondi indietro?
    Grazie a tutti e buona Pasquetta.
    Giuseppe

    1. Mauro Alfieri

      Ciao Giuseppe,
      che questo tipo di modulo abbia una perdita è comprensibile, la tua mi sembra eccessiva.
      Lascio il commento on-line perché altri, più esperti, possano darti maggiori spiegazioni.

  18. Valerio

    Salve,

    ho un DS3231 AT24C32 IIC collegato ad Arduino UNo secondo questo schema: SCL-> pin4, SDA-> pin5. Uso un IDE su mac versione 1.6.9 e ho scaricato le librerie DS3232RTC e Time come da vostro suggerimento.
    Ho caricato lo sketch TimeRTC.ino ma ricevo questo errore:
    chmod: Unable to change file mode on /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Read-only file system
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Permission denied
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: exec: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: cannot execute: Undefined error: 0

    e nella finestra seriale la data è fissa su Sun 00.00.2000 — 00:00:0

    Cosa sbaglio? Ti rignrazio se vorrai aiutarmi 🙂

    Valerio

    1. Mauro Alfieri

      Ciao Valerio,
      l’errore non è relativo allo sketch o alle librerie, sembra più un problema di filesystem: “chmod: Unable to change file mode on ” e a seguire “Read-only file system” che mi fa pensare tu possa avere qualche problema sul mac o con l’installazione dell’IDE.
      Prova ad aggiornare l’IDE alla 1.8.2 e installare le librerie solo da Library Manager

  19. Lasagni Mirco

    Dov’è la riga a cui fai riferimento dicendo
    nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:
    Io non ho capito dov’è la riga inserita/modificata da te

    1. Mauro Alfieri

      Ciao Mirco,
      nell’immagine del monitor seriale, la riga che devi inviare è yyyy,mm,dd,hh,mm,ss come puoi leggere e serve a configurare la data e ora corrente.

  20. FAA

    Ciao Mauro
    Complimenti e grazie per le informazioni che condividi sul sito sto passandolo al setaccio 🙂
    Ho due problemi con la scheda ds3231: non mi legge la temperatura (t:0.00) secondo se levo la batteria (nuova) non mantiene l’ora…
    Hai suggerimenti grazie

    1. Mauro Alfieri

      Ciao FAA,
      puoi provare a togliere la batteria, se alimentato non perderai l’ora ma dubito cambi qualcosa.
      Se vuoi resettare il DS3231 completamente togli la batteria e l’alimentazione .. perderai tutte le impostazioni ma potresti risolvere.

  21. FAA

    Grazie Mauro
    Già provato ma nulla.. si resetta sempre.. provo a ordinarne un altro;
    Nel frattempo smanetterò con rs485
    🙂

    1. Mauro Alfieri

      Ciao FAA,
      potrebbe essere difettoso.

  22. Pietro

    Ciao, ottimo tutorial… una domanda: come posso programmare gli allarmi interno del modulo rtv ad ogni ora?
    In modo da farli inviare un impulso?

    1. Mauro Alfieri

      Ciao Pietro,
      puoi leggere e comprendere qualche sketch tipo la centralina di irrigazione per capire come su utilizza il comando if in queste situazioni.

  23. Giorgio

    Ciao. Seguo sempre con molto interesse i tuoi progetti, complimenti.
    Volevo sapere se con il modulo DS3231 non sia possibile creare un cronometro con approssimazione al centesimo di secondo, ed in caso affermativo se si possa avere qualche sketch di esempio.
    Ho già provato ad usare la funzione millis(), ma non va bene nel mio caso, in quanto serve una buona precisione.
    Grazie.

    Giorgio

    1. Mauro Alfieri

      Ciao Giorgio,
      non penso che questo modulo supporti tale precisione o informazione.

  1. RTC DS3231 - Mauro Alfieri Elettronica Domotica Robotica 3D

    […] « RTC DS3231 per arduino […]

  2. Neopixel watch RTC DS3231 - Mauro Alfieri Elettronica Makes

    […] RTC DS3231 […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>