Élaboration du programme |
III - Élaboration du programme sous Flowcode
1) Dans un premier temps nous allons configurer le DS1307 afin que sa sortie S_OUT génère un signal carré de fréquence 1 Hz.
Pour ce faire comme le montre le tableau (voir doc constructeur)
RS1 |
RS0 |
SQW/OUT OUTPUT |
SQWE |
OUT |
0 |
0 |
1Hz |
1 |
X |
0 |
1 |
4.096 kHz |
1 |
X |
1 |
0 |
8.192 kHz |
1 |
X |
1 |
1 |
32.768 kHz |
1 |
X |
X |
X |
0 |
0 |
0 |
X |
X |
1 |
0 |
1 |
il faut écrire dans le registre de contrôle ( CONTROL REGISTER ) qui se situe à l'adresse 0x07 la valeur 0b00010000
BIT 7 |
BIT 6 |
BIT 5 |
BIT 4 |
BIT 3 |
BIT 2 |
BIT 1 |
BIT 0 |
OUT |
0 |
0 |
SQWE |
0 |
0 |
RS1 |
RS0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
Dans Flowcode nous aurons besoin du Composant " I2C Master " catégorie " Comms " dans " Boite Outils Composants "
Élaboration d'une procédure (Macros Utilisateur) nommé WriteRam permettant d'écrire une donnée 8bits dans un registre de la RAM du DS1307.
Rappel : l'adresse I2C 8bits en écriture du DS1307 est 0xD0 (0b11010000)
Figure 4. Data Write—Slave Receiver Mode |
Le programme principal |
En simulation sous Proteus on vérifie que le signal sur S_OUT est bien de 1 Hz
2) Maintenant nous allons utiliser ce signal (S_OUT) pour déclencher une interruption qui nous permettra d"afficher l'heure toutes les secondes.
- l'interruption choisie sera l'interruption INT0 (PD2) , le signal S_OUT sera donc relié à la broche IO2
Vérification par la simulation sous Proteus
3) Le moment est venu d'afficher le temps qui passe
Ajouter dans le Panneau tableau de bord 2D un afficheur LCD Avec, pour respecter le câblage, les Propriétés suivantes → |
Avant d'afficher l'heure il faut créer une Routine (macro) réalisant la lecture des Secondes (Secs), des Minutes (Mins) et des Heures (Hours). Cette procédure doit donc, comme le montre le tableau ci-dessous, lire consécutivement les Adresses 0x00, 0x01 et 0x02 des registres du DS1307
ADDRESS |
BIT 7 |
BIT 6 |
BIT 5 |
BIT 4 |
BIT 3 |
BIT 2 |
BIT 1 |
BIT 0 |
FUNCTION |
RANGE |
00h |
CH |
10 Seconds |
Seconds |
Seconds |
00–59 |
|||||
01h |
0 |
10 Minutes |
Minutes |
Minutes |
00–59 |
|||||
02h |
0 |
0 → 24h |
10 Hour |
Hours |
Hours |
00–23 |
||||
1 → 12h |
AM / PM |
10 Hour |
1–12 + AM/PM |
Pour élaborer cette procédure, qui sera nommée ReadTime, on utilise le diagramme de la Figure 6 du datasheet
Figure 6. Data Read (Write Pointer, Then Read)—Slave Receive and Transmit |
Procédure d'affichage de l'heure, nommée DisplayTime, sur la deuxième ligne de l'afficheur.
4) Affichage de la date
Avant d'afficher la date, il faut créer une Routine (macro) réalisant la lecture du Jour de la semaine (Day), du Jour (Date), du Mois (Month) et de l'Année (Year). Cette procédure doit donc, comme le montre le tableau ci-dessous, lire consécutivement les Adresses 0x03, 0x04 , 0x05 et 0x06 des registres du DS1307
ADDRESS |
BIT 7 |
BIT 6 |
BIT 5 |
BIT 4 |
BIT 3 |
BIT 2 |
BIT 1 |
BIT 0 |
FUNCTION |
RANGE |
|
|
|
|
|
|
|||||
03h |
0 |
0 |
0 |
0 |
0 |
DAY |
Day |
01–07 |
||
04h |
0 |
0 |
10 Date |
Date |
Date |
01–31 |
||||
05h |
0 |
0 |
0 |
10 Month |
Month |
Month |
01–12 |
|||
06h |
10 Year |
Year |
Year |
00–99 |
||||||
|
|
|
|
|
|
|
|
|
|
|
Pour élaborer cette procédure, qui sera nommée ReadDate, on utilise une nouvelle fois le diagramme de la Figure 6.
Procédure d'affichage de la date, nommée DisplayDate, sur la première ligne de l'afficheur.
Créé avec HelpNDoc Personal Edition: Écrire des livres électroniques ePub pour l'iPad