Les modules RTC permettent d'ajouter une notion de temps à vos réalisations.Leurs mises en oeuvre est simple.

Nous allons aborder 2 modules , le DS1302 et DS1307. Naïvement j'avais commander ces 2 modules pensant pouvoir les interchanger entre mes différents montages.C'était sans savoir que le DS1302 fonctionne avec un bus SPI(Serial Peripheral Interface) et le DS1307 avec un bus I2C(Inter-Integrated Circuit).La est toute la difference et la mise en oeuvre ainsi que le cablage diffère.

 

IMG 0004  IMG 0005 
Module DS 1307(Bus I2C)

IMG 0001

Module DS 1302(Bus SPI)
  • Module DS3231

Je rajoute un module qui est le DS3231(fonctionne en BUS I2C).L'avantage de ce module est de pouvoir gérer 2 alarmes programmable.

 

Lien pour la librairie : Lien Officiel - Téléchargement local

L'installation de la librairie est classique pour arduino

  • Code pour mettre à l'heure le module :

#include <Wire.h>
#include "DS3231.h"

RTClib RTC;
DS3231 Puce;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    Puce.setYear(19);//définir l'année
    Puce.setMonth(06);//définir le mois
    Puce.setDate(02);//définir la date du mois
    Puce.setMinute(37);//définir les minutes
    Puce.setHour(22);//définir l'heure
    Puce.setSecond(49);//définir les secondes
   
}

void loop () {


    delay(1000);
 
    DateTime now = RTC.now();   
    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
}

  • Configuration de l'alarme 1

Ce programme permet de de programmer le RTC DS3231 pour générer l'alarme1 toutes les minutes lorsque les secondes affiche 5.La sortie SQW du RTC passe à l'état bas lors de l'alarme.Cela  eteinds la led 13 de l'arduino.

#include <Wire.h>
#include "DS3231.h"

RTClib RTC;
DS3231 Puce;
int val;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    pinMode(12, INPUT);
    pinMode(13, OUTPUT);
    
}

void loop () {
    delay(1000);
    val = digitalRead(12);   // read the input pin
    Serial.print("Valeur :");
    Serial.println(val);
    digitalWrite(13, val);  // sets the LED to the button's value
   
    DateTime now = RTC.now();
    Serial.print(now.day(), DEC);  
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
     //Puce.setA1Time(0, 0, 0, 5, 0xE, false, false, false);//alarme toutes les minutes à 5 secondes
     Puce.setA1Time(0, 0, 0, 0, 0xC, false, false, false); //alarme toutes les heures a 0 minutes 0 secondes
     Puce.turnOnAlarm(1);
     Serial.println("Alarm 1:");
     Serial.println(Puce.checkAlarmEnabled(1));
     Serial.println(Puce.checkIfAlarm(1));

}

  • Explication setA1Time

setA1Time(byte A1Day, byte A1Hour, byte A1Minute, byte A1Second, byte AlarmBits, bool A1Dy, bool A1h12, bool A1PM);

byte AlarmBits sets the behavior of the alarms:    
Dy A1M4 A1M3 A1M2 A1M1 Rate
X 1 1 1 1 Once per second
X 1 1 1 0 Alarm when seconds match
X 1 1 0 0 Alarm when min, sec match
X 1 0 0 0 Alarm when hour, min, sec match
0 0 0 0 0 Alarm when date, h, m, s match
1 0 0 0 0 Alarm when DoW, h, m, s match

bool A1Dy :A1Dy true signifie l'alarm sera on A1Day = Day of Week (jours de la semaine 1 à 7)
               A1Dy false signifie l'alarm sera on A1Day = Date of month(date du mois)

bool A1h12 : 12/24h mode. True est 12h, false est 24h.

bool A1PM : Affiche le flag  AM/PM (true)/N'affiche pas le flag AM/PM(false)