Découvrir Uno R3

Découvrir Uno R3

Module DS1302

Associer une horloge à la carte Uno R3

Module DS1302

 

 

Montage

 Il est très simple, il suffit de relier comme indiqué ci-dessous les trois fils de communication de la DS1302 :

  • DS1302 patte CE (ou RST)            -> Arduino Digital 2
  • DS1302 patte DATA (données)    -> Arduino Digital 3
  • DS1302 patte CLK (horloge)        -> Arduino Digital 4

Il faut bien sûr par ailleurs relier les masses (GND) et les alimentations (VCC) de l’Arduino et du DS1302.

 

Code

Nous allons écrire un programme permettant d’initialiser la date et l’heure puis de lire en continu ensuite la date et l’heure pour affichage dans la console série.

 

 

Pour ce programme, le plus simple est de s’appuyer sur une bibliothèque existante comme par exemple celle de Henning Karlsen utilisée dans cet article. Cette bibliothèque qui s’appelle DS1302 est disponible à l’adresse:

http://www.rinkydinkelectronics.com/library.php?id=5

 

Elle doit être téléchargée puis décompressée dans votre répertoire libraries, par exemple dans mon cas le répertoire C:\Users\PARAPLUIE\Documents\Arduino\libraries

 

 

 

J’ai ensuite modifié le fichier DS1302.cpp pour franciser les noms des mois qui sont en anglais dans le code de la bibliothèque.

 

 

 

Il faut ensuite relancer l’IDE Arduino pour prendre en compte cette nouvelle bibliothèque.

 

 

Le programme utilisé ci-dessous s’inspire de celui de Henning Karlsen :

 

 Ce programme reconfigure l'horloge à chaque réinitialisation .

 

 

 

 

 

 

// Nom script : phm_ds1302_serial_hard 
// Creation : Le 03 06 2016
// Description : Initialisation date/heure puis boucle affichage
// Inspiré du script suivant :
// DS1302_Serial_Hard (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// Les connections suivantes doivent être effectuées DS1302.
// DS1302 patte RST  -> Arduino Digital 2
// DS1302 patte DATA -> Arduino Digital 3
// DS1302 patte CLK  -> Arduino Digital 4

#include <DS1302.h>

// Init DS1302
DS1302 rtc(2, 3, 4);

// Init structure Time-data
Time t;

void setup()
{
  // Positionnement horloge a run-mode et desactive protection en ecriture
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Init connection serie
  Serial.begin(9600);

  // Initialisation de l'horloge
  // A mettre a jour avec les bones valeurs pour initialiser l horloge RTC DS1302
  rtc.setDOW(FRIDAY);        // Jour a FRIDAY
  rtc.setTime(19, 10, 0);    // Heure a 19:10:00 (format sur 24 heure)
  rtc.setDate(3, 6, 2016);   // Date  au 3 juin 2016
}

void loop()
{
  // recup donnees DS1302
  t = rtc.getTime();
  
  // Ecriture date sur console serie
  Serial.print("Jour : ");
  Serial.print(t.date, DEC);
  Serial.print(" - Mois : ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" - Annee : ");
  Serial.print(t.year, DEC);
  Serial.println(" -");
  
  // Ecriture heure sur console serie
  Serial.print("C est le ");
  Serial.print(t.dow, DEC);
  Serial.print(" ieme jour de la semaine (avec lundi le premier), et il est ");
  Serial.print(t.hour, DEC);
  Serial.print(" heures, ");
  Serial.print(t.min, DEC);
  Serial.print(" minutes ");
  Serial.print(t.sec, DEC);
  Serial.println(" secondes.");

  // Affichage d un separateur
  Serial.println("------------------------------------------");
  
  // Attente d une seconde avant lecture suivante :)
  delay (1000);
}

 

 

 Résultats

 

Les résultats obtenus dans la console série sont les suivants :

 

 Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 0 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 1 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 2 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 3 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 4 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 5 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 6 secondes.

——————————————

Jour : 3 – Mois : Juin – Annee : 2016 –

C est le 5 ieme jour de la semaine (avec lundi le premier), et il est 19 heures, 10 minutes 7 secondes.

——————————————

 

 

Origine de l'info:   https://phmarduino.wordpress.com/2016/06/03/ajouter-une-horloge-a-vos-montages/

 

 

 

 

.

 

 Modifications personnelles du programme .

 

Après avoir intégré l'heure de référence dans le module DS1302 avec le programme ci-dessus, je vous invite à conserver cette heure de référence en supprimant une partie du programme comme ci-dessous .

 

 

 

 

// Nom script : phm_ds1302_serial_hard 
// Creation : Le 03 06 2016
// Description : Initialisation date/heure puis boucle affichage
// Inspiré du script suivant :
// DS1302_Serial_Hard (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// Les connections suivantes doivent être effectuées DS1302.
// DS1302 patte RST  -> Arduino Digital 2
// DS1302 patte DATA -> Arduino Digital 3
// DS1302 patte CLK  -> Arduino Digital 4

#include <DS1302.h>

// Init DS1302
DS1302 rtc(2, 3, 4);

// Init structure Time-data
Time t;

void setup()
{
// Init connection serie
  Serial.begin(9600);
}

void loop()
{
  // recup donnees DS1302
  t = rtc.getTime();
  
  // Ecriture date sur console serie
  Serial.print("Jour : ");
  Serial.print(t.date, DEC);
  Serial.print(" - Mois : ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" - Annee : ");
  Serial.print(t.year, DEC);
  Serial.println(" -");
  
  // Ecriture heure sur console serie
  Serial.print("C est le ");
  Serial.print(t.dow, DEC);
  Serial.print(" ieme jour de la semaine (avec lundi le premier), et il est ");
  Serial.print(t.hour, DEC);
  Serial.print(" heures, ");
  Serial.print(t.min, DEC);
  Serial.print(" minutes ");
  Serial.print(t.sec, DEC);
  Serial.println(" secondes.");

  // Affichage d un separateur
  Serial.println("------------------------------------------");
  
  // Attente d une seconde avant lecture suivante :)
  delay (1000);
}

__________

 

Vous pouvez intervenir sur la nature de cet article en laissant un commentaire.

 



16/11/2019
0 Poster un commentaire

A découvrir aussi


Ces blogs de Informatique & Internet pourraient vous intéresser