RTC-DS1302
Ce module RTC (Real Time Clock) à base de DS1302 est équipé d'une pile (CR2032) lui permettant de compter le nombre de "tic" émis par le quartz 32...., même lorsque que celui ci est débranché. C'est le même principe que le système équipant les cartes mères depuis l'aube de l'informatique, lui permettant de garder en mémoire l'heure et la date, même lorsque celui-ci est éteint ou coupé de toutes sources de courant.
http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
Sommaire
code test
description
Ce code va lire la valeur dans la RAM du module RTC pour le transformer en quelque chose de compréhensible afin de l'envoyer via Serial. Utilisez le moniteur de l'IDE Arduino pour voir le résultat!
librairies
Cette fois vous devrez installer Time et DS1302 dans votre dossier de librairies
- include <Streaming.h> //http://arduiniana.org/libraries/streaming/
Lire la date avec un Arduino
RTCds1302test.ino
/*
DS1302 RTC module test by Tuxun
-CE/RST RTC pin D3(3)
-IO/DAT RTC pin D4(4)
-CLK RTC pin D5(5)
Under PUBLIC DOMAIN!
*/
//RTC part
//time from http://www.pjrc.com/teensy/arduino_libraries/Time.zip
#include <Time.h>
//DS1302 from http://playground.arduino.cc/uploads/Main/DS1302RTC.zip
#include <DS1302RTC.h>
// Set RTC pins: CE, IO,CLK
DS1302RTC RTC(3, 4, 5);
// Optional connection for RTC module: -1 to disable
#define DS1302_GND_PIN -1
#define DS1302_VCC_PIN -1
void setup()
{
//initial welcome :)
Serial.begin(9600);
Serial.println("DS1302 TEST PROGRAM");
Serial.println();
// Activate RTC module
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);
digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);
Serial.println("RTC module activated");
Serial.println();
delay(500);
//check that it is activated
if (RTC.haltRTC()) {
Serial.println("The DS1302 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
}
if (!RTC.writeEN()) {
Serial.println("The DS1302 is write protected. This normal.");
Serial.println();
}
delay(5000);
}
void loop()
{
Serial.println("\n");
//DS1302 timestamp structure
tmElements_t tm;
//Serial.print("UNIX Time: ");
//Serial.print(RTC.get());
if (! RTC.read(tm)) {
Serial.print(" Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.print(", DoW = ");
Serial.print(tm.Wday);
Serial.println();
} else {
Serial.println("DS1302 read error! Please check the circuitry.");
Serial.println();
delay(9000);
}
// Wait one second before repeating :)
delay (1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10)
Serial.write('0');
Serial.print(number);
}
Régler la date/l'heure sur la bestiole
Quand vous avez copié le dossier DS1302RTC dans "librairies", n'avez vous rien remarqué? Des exemples d'utilisation de cette librairie sont inclus avec celle-ci, alors plutot qu'un long code, je vous propose de tester l'exemple DS1302RTC->SetSerial.
N'oubliez pas de changer dans le code ouvert la valeur correspondante à la pin où votre module RTC est cablé puis téléversez et enfin réglez la date, toujours via le moniteur série.
A bientard!