DS1307

De Sam's Projects.
Aller à : Navigation, rechercher

Le circuit Dallas DS1307 (Datasheet) est une horloge temps réel (Real Time Clock), qui fournit secondes, minutes, heures, jours, dates, mois et années.

Le Dallas DS1307 est associé (entre les broches 1 et 2) à un quartz d’horlogerie de fréquence nominale 32,768 kHz.

Les années bissextiles sont prises en compte (jusqu’en 2100).

Le DS1307 s’interface avec un bus I2C, en configuration esclave :

Le DS1307 travaille dans le mode standard (fréquence d’horloge f SCL de 100 kHz)

L’adresse I2C (7 bits) du DS1307 est : 1 1 0 1 0 0 0

J’utilise un Arduino Mega pour l’initialiser via les ports I2C.

Sommaire

Composants

  • Une plateforme Arduino
  • Un DS1307 (un DS1337 devrait faire l’affaire)
  • Un Cristal 32.768kHz
  • Une LED
  • Une Résistance (entre 10K et 33K)
  • Une batterie de 3V (pile bouton, battery holder,…)
  • Des fils

Schéma

DS1307.jpg

Téléchargements

  • Dossier
    • Clock_DS1307.pde (copier dans "Arduino/)
    • Librairie DS1307 (copier dans Arduino/libraries/

Programme

Clock_DS1307.pde

Clock_DS1307.c

/*
Clock_DS1307.pde
Real Time Clock DS1307 avec Arduino Mega
*/
 
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
 
int rtc[7];
 
void Set_Square_Wave(int rate){  // set the square wave output on pin 7 of the DS1307 chip
  rate = rate + 144;                         // add 0x90 (dec 144) to rate
  Wire.beginTransmission(0x68);              // write the control register
  Wire.send(0x07);                           // register address 07H)
  Wire.send(rate);                           // 90H=1Hz, 91H=4kHz, 92H=8kHz, 93H=32kHz
  Wire.endTransmission();
} 
 
void setup()
{
  Serial.begin(9600);
 
// Decommenter la partie suivante et mettez vos valeurs pour initialiser l'horloge
/*
  RTC.stop();
  RTC.set(DS1307_SEC,0);    // Secondes
  RTC.set(DS1307_MIN,59);   // Minutes
  RTC.set(DS1307_HR,20);    // Heures
  RTC.set(DS1307_DOW,4);    // Jour de la semaine
  RTC.set(DS1307_DATE,23);  // Jour du mois
  RTC.set(DS1307_MTH,12);   // Mois
  RTC.set(DS1307_YR,10);    // Annee
  RTC.start();
*/
 
  // Mettre une resistance de pull up entre pin 7 et Vbat
  // 0=1hz, 1=4KHz, 2=8KHz, 3=32KHz
  Set_Square_Wave(0); // 1Hz
 
}
 
void loop()
{
  RTC.get(rtc,true);
 
  for(int i=0; i<7; i++)
  {
    Serial.print(rtc[i]);
    Serial.print(" ");
  }
  Serial.println();
 
  delay(1000);
 
}

Normalement après avoir charger le programme et lancer l’interface serial, la led devrait se mettre à clignoter chaque seconde.

Outils personnels
Espaces de noms

Variantes
Actions
Farfouillage
Liens divers
Boîte à outils