RTC-DS1302

De FunLab Documentation
Révision datée du 20 avril 2017 à 15:08 par WikiAdmin (discussion | contributions) (Page créée avec « 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... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

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

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

  1. 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!