La RTC Board de Comfile est composée d'un DS1302, d'un quartz (32.768kHz), d'un petit condensateur et d'un condensateur de sauvegarde (5.5V-0.10F).
Voir le datasheet du DS1302.
Ce composant permet continuer à faire fonctionner l'horloge lors d'une mise hors tension.
Dans mon cas, le condensateur de sauvegarde était déchargé. J'ai du le recharger manuellement avec l'alimentation de l'Arduino.
Branchement
Le branchement avec l'Arduino est très simple :
- Arduino : RTC Board
- 5V : 5V
- GND : GND
- 10 : RST
- 11 : I/O
- 12 : CLK
Pour communiquer avec le DS1302, j'ai utilisé la librairie de Henning Karlsen, téléchargeable sur son site.
Programme
#include <DS1302.h>
// Init the DS1302
DS1302 rtc(10, 11, 12);
// Init a Time-data structure
Time t;
void setup()
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);
// Setup Serial connection
Serial.begin(9600);
// The following lines can be commented out to use the values already stored in the DS1302
rtc.setDOW(SUNDAY);
rtc.setTime(12, 10, 0);
rtc.setDate(4, 3, 2012);
}
void loop()
{
t = rtc.getTime();
Serial.print(t.date, DEC);
Serial.print("/");
Serial.print(t.mon, DEC);
Serial.print("/");
Serial.print(t.year, DEC);
Serial.print(" ");
Serial.print(t.hour, DEC);
Serial.print(":");
Serial.print(t.min, DEC);
Serial.print(":");
Serial.print(t.sec, DEC);
Serial.println();
delay (1000);
}
Amélioration du thermostat
Pour inclure la RTC Board dans mon montage de thermostat existant, j'ai simplement eu à raccorder les 5 sorties de la carte avec l'Arduino Mini.
Ensuite, dans le programme, la partie lecture/écriture de l'heure sur l'EEPROM est inutile. Je l'ai donc remplacé par une simple lecture de l'heure.
Pour permettre le rechargement de la pile de sauvegarde, il faut utiliser la fonction setTCR et désactiver la protection en écriture.
Extrait du programme
void setup() {
lcd.begin(16, 2);
if(debug) {
Serial.begin(9600);
}
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
// Lecture de l'heure sur le DS1302
rtc.halt(false);
rtc.writeProtect(false);
Time t = rtc.getTime();
rtc.setTCR(TCR_D1R2K);
secondes = t.sec;
minutes = t.min;
heures = t.hour;
jours = t.dow - 1;
calculerOptimisationHoraires();
dureeChauffage = EEPROMReadInt(6);
}
Aucun commentaire:
Enregistrer un commentaire