Projet à microcontrôleur PIC 16F876A Horloge, calendrier et

Transcription

Projet à microcontrôleur PIC 16F876A Horloge, calendrier et
Projet à microcontrôleur PIC 16F876A
Horloge, calendrier et thermomètre
numérique
http://fabrice.sincere.pagespersoorange.fr/cm_electronique/projet_pic/RTC_DS1631/RTC_DS1631_I2C.htm
•
•
•
•
•
•
•
•
•
•
•
Affichage sur un module LCD alphanumérique
o de la date (format dd jj/mm/aaaa)
o de l'heure (format hh:mm)
o de la température (résolution 0,5 °C)
Mise en oeuvre du bus I2C
1- Présentation
2- Schéma électrique de la carte
3- Présentation de bus I2C
4- Présentation du DS1307 (Real Time Clock)
5- Présentation du DS1631 / DS1731
6- Principe de fonctionnement d'un afficheur LCD
alphanumérique
7- Principe de fonctionnement de la carte
8- Liste du matériel
9- Code source du microcontrôleur PIC 16F876A
•
1- Présentation
Il s'agit d'une horloge / calendrier / thermomètre numérique, avec affichage sur un
module LCD alphanumérique.
Deux boutons poussoirs permettent le réglage de l'heure et de la date.
Une pile de sauvegarde (en option) permet de conserver la date et l'heure en cas de
coupure de l'alimentation principale.
La date et l'heure sont ainsi restaurées à la reprise de fonctionnement de
l'alimentation principale.
•
2- Schéma électrique de la carte
N.B. Si vous n'utilisez pas de pile de sauvegarde, il faut relier la broche 3 (VBAT)
du DS1307 directement à la masse.
•
3- Présentation de bus I2C
•
4- Présentation du DS1307 (Real Time Clock)
Le circuit Dallas DS1307 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
Plus plus d'informations sur l'utilisation du DS1307 avec le bus I2C
En option, on peut brancher une pile de sauvegarde entre la broche 3 et la masse.
Avec une pile au lithium 3 V / 48 mAh, la date et l'heure sont conservées pendant
plus de 10 ans en l'absence de l'alimentation principale (interrupteur SW3 en
position OFF).
•
5- Présentation du DS1631 / DS1731 (thermomètre
numérique)
Le capteur de température DS1631 (Dallas Semiconductor) fait parti de la famille
des capteurs "intelligents" : sur la même puce, il y a un capteur de température
classique associé à une électronique d'interface (convertisseur analogique numérique, contrôleur avec son jeu d'instructions, EEPROM, port série synchrone :
bus I2C).
Le DS1631 est un thermomètre numérique : plage de mesure - 55,0 °C à + 125,0° C
avec une résolution que l'on peut choisir de 9 bits (0,5 °C) à 12 bits (0,0625 °C).
La température est fournie sous la forme d'un nombre binaire en complément à
deux.
La durée de la conversion dépend de la résolution : 93,75 ms avec 9 bits, 750 ms
avec 12 bits.
Le DS1631 s'interface avec un bus I2C (broches SDA et SCL), en configuration
esclave :
•
•
Le DS1631 travaille en Fast mode (fréquence d'horloge f SCL de 400 kHz)
L'adresse I2C (7 bits) du DS1631 est : 1 0 0 1 A2 A1 A0
o A2, A1 et A0 correspondent aux niveaux logiques appliqués à ces 3
entrées
o On peut donc connecter jusqu'à 8 boîtiers DS1631 sur un bus I2C
La différence entre le DS1631 et le DS1731 se fait uniquement sur la précision de
la mesure (à ne pas confondre avec la résolution !) :
•
•
0,5 °C dans la plage 0 °C à +70 °C pour le DS1631
1 °C dans la plage -10 °C à +85 °C pour le DS1731
•
6- Principe de fonctionnement d'un afficheur LCD
alphanumérique
•
7- Principe de fonctionnement de la carte
7-1- Initialisation
A la mise sous tension, le microcontrôleur 16F876A configure :
•
•
•
•
son module MSSP en mode I2C maître, et la fréquence
d'horloge (f SCL) à 100 kHz (mode standard du DS1307)
l'horloge temps réel DS1307 :
o en mode 24 heures (00 à 23 heures)
o avec la fréquence du signal de sortie SQW/OUT (broche
7) à 1,000 000 Hz
le thermomètre numérique DS1631 / DS1731 :
o commande Access Config :
ƒ résolution 9 bits (0,5 °C)
ƒ conversion en continu
o puis commande Start Convert T :
ƒ lancement de la conversion en continu (avec
période d'échantillonnage de la température de
93,75 ms)
le module LCD alphanumérique (instruction Set Function pour
une utilisation en mode d'interface 4 bits)
Le module Timer1 (16 bits) du microcontrôleur 16F876A est activé, ce qui donne
lieu à une interruption toutes les 105 ms environ (104,858 ms exactement).
La broche 7 (sortie SQW/OUT) du DS1307 est reliée à l'entrée RB0/INT du PIC
16F876A.
L'interruption RB0/INT est activée, ce qui provoque une interruption toutes les
1000,000 ms.
7-2- Réglage de l'heure et de la date
A la première utilisation, l'affichage à la mise sous tension est :
Di 01/01/2000
00:00 +xxx,x °C
Deux boutons poussoirs ont été prévus pour le réglage de l'heure et de la date.
A chaque interruption du Timer1 (toutes les 105 ms environ), la routine de
l'interruption du Timer1 teste l'état du bouton poussoir SELECTION et du bouton
poussoir REGLAGE.
La routine de l'interruption du Timer1 gère également toutes les étapes du réglage
de l'heure et de la date :
On entre dans le mode réglage en appuyant sur le bouton poussoir SELECTION.
Les deux lettres Di se mettent alors à clignoter.
Il faut ensuite appuyer sur le bouton poussoir REGLAGE pour faire défiler le jour
(1ère étape) :
Lu -> Ma -> Me -> Je -> Ve -> Sa -> Di ...
On valide en appuyant sur le bouton poussoir SELECTION, et on passe
automatiquement au réglage du chiffre des dizaines du numéro de jour (2ème
étape) :
0 -> 1 -> 2 -> 3 -> 0 ...
On finit par le réglage du chiffre des unités des minutes (11 ème étape).
On valide avec le bouton poussoir SELECTION, et on retourne alors au mode de
fonctionnement normal.
7-3- Fonctionnement normal
Toutes les 1000,000 ms la routine de l'interruption RB0/INT est appelée :
Le PIC 16F876A lit l'heure et la date courante dans le DS1307, la communication
se fait par le bus I2C :
Dans cet exemple de chronogramme, il est 9 heures 56 minutes 6 secondes, le
mardi 20 mai 2008.
Le PIC 16F876A lit la température dans le DS1631 / DS1731 (commande Read
Temperature), la communication se fait par le bus I2C :
Dans cet exemple de chronogramme, il fait + 28,0 °C :
00011100 0(0000000) = +56 <=> +28,0 °C
Le PIC 16F876A met ensuite l'affichage du module LCD à jour.
•
8- Liste du matériel
o
1 programmateur pour flasher le programme du microcontrôleur PIC
16F876A
o
1 afficheur LCD alphanumérique 2 x 16 à interface parallèle
1 résistance 8,2 k
2 résistance 4,7 k
1 résistance 10 k
1 potentiomètre 2,2 k (réglage du contraste de l'afficheur)
1 horloge temps réel RTC DS1307 (boîtier PDIP)
ƒ Remarque : Vous pouvez demander des échantillons gratuits
chez Dallas :-)
1 thermomètre numérique DS1631 ou DS1731 (boîtier PDIP)
o
o
o
o
o
o
Remarque : Vous pouvez demander des échantillons gratuits
chez Dallas :-)
1 microcontrôleur PIC 16F876A (boîtier PDIP)
ƒ Remarque : Vous pouvez demander des échantillons gratuits
chez Microchip :-)
1 quartz 20 MHz
1 quartz 32,768 kHz
1 condensateur électrochimique de 100 µF (filtrage)
1 condensateur électrochimique de 10 µF (filtrage)
6 condensateurs de 100 nF (filtrage)
2 condensateurs de 22 pF
1 source d'alimentation continue +12 V (ou une pile de 9 V)
1 régulateur 7805 (boîtier TO220)
2 boutons poussoirs (ouverts au repos)
1 interrupteur marche / arrêt
1 pile de sauvegarde (3 volts)
ƒ
o
o
o
o
o
o
o
o
o
o
o
o
•
9- Code source du PIC 16F876A
Le code source a été écrit en langage assembleur avec l'environnement de
développement gratuit MPLAB IDE de Microchip.
o
o
Télécharger le code source en assembleur (.asm)
Télécharger le code objet (.HEX)
(C) Fabrice Sincère ; Révision 01

Documents pareils

le bus i2c pour les mémoires

le bus i2c pour les mémoires Dans cet exemple, les bits A0, A1 et A2 sont à 0. L'adresse fixe des mémoires est 1010 de A7 à A3 soit 1010 0000(B) ou A0(H)

Plus en détail

Bus I2C

Bus I2C 1) Pour initier le dialogue, le maître crée une condition Start. 2) Le maître envoie l'adresse de l'esclave (1101000) suivi du bit 1 (bit Write). 3) L'esclave répond (accusé de réception : bit ACKn...

Plus en détail