É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 

1Hz 

4.096 kHz 

8.192 kHz 

32.768 kHz 


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

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