Dernière mise à jour :
06/12/2009
Présentation
Le schéma présenté ci-après concerne un décompteur horaire (minuterie)
cadencé à la
seconde ou à la minute, dont le
point de départ peut être fixée à une valeur quelconque entre 00'01" et
59'59" (en mode minutes / secondes) ou entre 00h00' et 99h59' (en mode
heures / minutes). Il s'agit d'une version matériellement simplifiée du
Décompteur / minuteur 002a, avec affichage sur quatre digits au lieu de six, HH:MM ou MM:SS au lieu de HH:MM:SS.
Avertissements
Ce
montage a été simulé avec succès sous
Proteus, puis testé assez rapidement via une maquette (voir
paragraphe Proto). Son fonctionnement est validé pour les
fonctions principales, mais je ne l'ai pas testé sur de grandes
périodes. Je mets à disposition le code source et le
fichier binaire
compilé du PIC, mais ne peux garantir le parfait fonctionnement
du
système en toute circonstance. Si vous le réalisez et que
vous constatez le moindre disfonctionnement, merci de me le signaler
pour en faire profiter les autres.
Retour de ggbecool
:
J'ai réalisé ce décompteur. Pour l'heure il n'est
pas exploitable car
la précision horaire n'est pas excellente, on constate un
écart de 4 secondes au bout de 15 minutes. L'utilisation d'un
quartz externe
en lieu et place de l'oscillateur interne devrait normalement
résoudre
le problème.
Ma réponse
: Déjà, merci pour le retour d'info. La modification avec quartz externe est désormais faite, voir page
Décompteur / minuteur 002c.
Schéma (002b)
Par rapport au
Décompteur / minuteur 002a, on doit le nombre plus réduit de composants au fait qu'ici l'
affichage est multiplexé. Le montage est articulé autour d'un composant
programmable de type PIC 16F628A, entouré de bien peu de composants,
même
en comptant les quatre afficheurs sept segments et les boutons
poussoir de programmation.
Décompteur 002b
Fonctionnement général
Lors
de la mise sous tension, le décompteur / minuteur affiche la
dernière
durée programmée par l'utilisateur. S'il s'agit de la
première mise
sous tension, la temporisation est réglée par
défaut à 3 minutes, avec affichage de type MM:SS, et donc
03:00
(brossage dentaire ou oeuf à la coque). L'appui sur le bouton
poussoir
SW1 (Start / Stop) permet de démarrer la temporisation, et
à partir de
cet instant l'affichage se décrémente de une
unité toutes les
secondes. Un nouvel appui sur le même bouton poussoir SW1
provoque
l'arrêt du décompte. Un autre appui sur
SW1 repositionne le compteur à sa valeur programmée, et
un appui supplémentaire relance le décompte.
Procédure de programmation des paramètres utilisateurs
La modification des paramètres utilisateur
s'effectue avec les boutons poussoirs SW2 (Select), SW3 (Plus) et SW4
(Moins). SW2 permet de
basculer entre le mode de programmation de la durée de la
temporisation, et le mode normal d'utilisation, c'est à dire de
décompte. SW3 et SW4 permettent respectivement d'augmenter ou de
diminuer le nombre en cours de sélection (heures, minutes ou secondes)
ou de modifier un paramètre (mode d'affichage et mode de sortie).
Remarque : durant la
phase de programmation de la durée de temporisation, le décompte
ne peut pas être ammorcé par appui sur SW1 (Start).
En
mode normal, les quatres afficheurs montrent le temps en cours, que le
décompte soit actif ou non. Dans ce mode, ne peuvent être affichés que
des chiffres compris entre 0 et 9.
En mode programmation, le
premier afficheur montre un chiffre correspondant à un code "Paramètre", le second afficheur
montre un trait d'union, et les deux afficheurs suivant montrent la
valeur du paramètre en cours d'ajustage.
Code Paramètre | Mode | Exemple d'affichage | Valeurs possibles |
<rien> | Normal | | 00:00 à 59:59 si mode affichage MM:SS 00:00 à 99:59 si mode affichage HH:MM |
1- | Programmation Mode affichage | | MS pour mode affichage MM:SS HM pour mode affichage HH:MM |
2- | Programmation Mode sortie | | 0 : Activation sortie au terme de la minuterie 1 : activation sortie pendant durée minuterie |
3- | Programmation Heures | | 00 à 99 |
4- | Programmation Minutes | | 00 à 59 |
5- | Programmation Secondes | | 00 à 59 |
Les
valeurs spécifiées sont automatiquement
sauvegardées en EEProm et sont rappelés à la mise
sous tension suivante.
Réglage du mode d'affichage (HH:MM ou MM:SS)1 - A partir du
mode normal (tous afficheurs allumés normalement), appuyer une fois sur
SW2 (Select). Le premier afficheur affiche "1", qui est le code du
paramètre "Mode affichage", le second afficheur affiche un trait
d'union, et les troisième et quatrième afficheurs montre le mode
d'affichage en cours : "MS" pour MM:SS, ou "HM" pour HH:MM. Modifier le
mode d'affichage si nécessaire avec les boutons SW3
(Plus) ou SW4 (Moins).
Remarque
: comme on utilise ici des afficheurs sept segments, les lettres ne
sont pas forcement très reconnaissables : la lettre M est représentée
par un "pont" et la lettre S équivaut au chiffre 5, seul la lettre H
est vraiment un H. Mais le principal est qu'on arrive à s'y retrouver ;-)
Réglage du mode de sortie
Deux modes de fonctionnement sont possibles, avec au repos (décompteur
inactif), une sortie toujours désactivée (exemple d'utilisation de
cette
sortie, un peu plus loin).
Mode 0 : la sortie reste
désactivée au démarrage de la temporisation, et
n'est activée qu'à la fin du décompte (affichage
00:00).
Mode 1 : la sortie est
activée au démarrage de la temporisation, et est
désactivée à la fin du décompte (affichage
00:00).
Le choix du mode s'effectue grâce aux boutons poussoir SW2
(Select), SW3 (Plus) et SW4 (Moins), selon la procédure suivante
:
1 - A partir du mode normal
(tous afficheurs allumés normalement), appuyer deux fois sur SW2 (au premier
appui, l'affichage montre le format d'affichage, HHMM ou MMSS). Le premier afficheur affiche "2", qui est le code du
paramètre "Mode sortie", les second et troisième afficheurs affichent un trait
d'union, et le quatrième afficheur montre le mode de sortie en cours (chiffre 0 ou 1).
2 - Appuyer sur les boutons SW3 (Plus) et SW4 (Moins) pour passer dans le mode désiré (0 ou 1).
Remarque :
durant la programmation du mode d'activation de la sortie, le
décompte ne peut pas être ammorcé par appui sur SW1
(Start).
Réglage de la durée de temporisation1
- Appuyer autant de fois qu'il le faut sur SW2 (Select) pour que les
deux premiers afficheurs affichent "3-" (code Paramètre Heures).
2 - Appuyer sur les boutons SW3 (Plus) et SW4 (Moins) pour incrémenter ou décrémenter le nombre des heures.
3 - Appuyer une fois sur SW2 (Select) pour que les deux premiers afficheurs affichent "4-" (code Paramètre Minutes).
4
- Appuyer sur les boutons SW3 (Plus) et SW4 (Moins) pour
incrémenter ou décrémenter le nombre des minutes.
5 - Appuyer une fois sur SW2 (Select) pour que les deux premiers afficheurs affichent "5-" (code Paramètre Secondes).
6 -
Appuyer sur les boutons SW3 (Plus) et SW4 (Moins) pour
incrémenter ou décrémenter le nombre des secondes.
Retour au mode normalAppuyer
autant de fois qu'il le faut sur SW2 (Select) jusqu'à ce que
l'affichage montre 4 chiffres (plus de trait d'union sur le deuxième
afficheur).
Mode de décomptage
La
base de temps utilisée pour le décomptage est de une
seconde quand
l'affichage est de type MM:SS ou de une
minute quand l'affichage est de type HH:MM, et dépend de la
configuration spécifiée par l'utilisateur, dont la
procédure de réglage a été donnée
ci-avant.
Base de temps
Afin de disposer d'une très bonne précision sur les
secondes, il est fait usage d'une interruption du timer 1 et non de la
simple fonction Delay_ms(1000), insuffisement précise pour
une programmation sur longue durée. Comme il est impossible
d'avoir une base de temps de précisement une seconde directement
avec le compteur 16 bits du timer 1, la fréquence de
répétition des interruptions est fixée à 10
Hz, c'est à dire que l'on a droit à une interruption
toutes les 100 ms. Chacune de ces interruptions incrémente un
compteur additionnel (une simple variable ajoutée dans le code)
qui est remise à zéro toutes les dix interruptions (en mode d'affichage
MM:SS) ou toutes les 600 interruptions (en mode d'affichage HH:MM),
afin
de constituer la base de temps de une seconde ou de une minute voulue.
Cela complique un
tout petit peu le code mais garantit une bonne précision sur
long terme.
Stabilité de la base de tempsPour
cette réalisation, j'ai choisi de faire fonctionner
l'oscillateur
interne de 4 MHz (INTOSC FAST), ce qui permet de se passer d'un quartz
externe additionnel et surtout de libérer les deux broches
d'entrée / sortie RA6 et RA7. La précision n'est certes
pas aussi bonne que
celle d'un quartz externe, et peut fluctuer légèrement en
fonction de
la tension d'alimentation et de la température ambiante.
J'ai fait ce choix (discutable pour certains) simplement pour disposer
d'assez de lignes de ports et éviter des circuits intégrés additionnels.
Pour ce
qui est de la tension d'alim, pas de soucis majeur si on utilise un
régulateur
de tension +5 V du style LM7805 ou 78L05 (version 100 mA max en boitier
plastique TO92).
Utilisation de la sortie Out
La sortie Out se fait sur le port RA7 du PIC, capable d'absorber ou de débiter un courant maximal de 25
mA. Vous pouvez y raccorder un relais basse consommation (max 20 mA)
avec une diode en parallèle sur la bobine, un relais "normal" avec un transistor intermédiaire, un opto-triac si
l'appareil commandé s'alimente sur le secteur 230 V, ou mettre
tout simplement un petit
buzzer électromécanique
- ou électronique avec oscillateur intégré - si un
avertisseur sonore suffit.
Section Affichage
La
partie supérieure laisse apparaître les quatre afficheurs
permettant de
visualiser le temps programmé ou restant. Du fait du faible
nombre de
pattes disponibles sur le PIC, et pour réduire la consommation
électrique globale, il est fait appel au
multiplexage temporel.
Les
afficheurs sont allumés à tour de rôle à
grande vitesse, et c'est la
persistance rétinienne qui nous fait croire que tous sont
allumés en
même temps. La mise en service de chaque afficheur, de type
anode
commune, est réalisée par les transistors Q1 à Q4,
eux-même commandées
par les sorties RB0 à RB3 du PIC. Les valeurs affichées
en elles-mêmes
dépendent de l'état des sorties RA0 à RA7 (en
excluant la borne RA5 qui ne peut qu'être une entrée),
chaque sortie alimentant de
façon individuelle un segment (segment A à G).
Prototype
Réalisé avec ma platine EasyPic4 et quelques composants
annexes montés sur une platine d'expérimentation sans
soudure.
Vous aurez peut-être reconnu mon
module d'affichage à quatre afficheurs multiplexés,
dont je me sers désormais régulièrement. Les
chiffres semblent ne pas s'éclairer beaucoup sur la photo, c'est
vrai que ce n'est pas de la haute luminosité, il s'agit de vieux
afficheurs de luminosité 1 mcd, avec en plus des
résistances de limitation de série fixées ici
à 300 ohms (que l'on peut descendre sans soucis à 150 ou
220 ohms). Alors forcement, avec le multiplexage par-dessus...
Choisissez de préférence des modèles d'afficheurs
5 mcd ou plus pour 10 mA, bien que cela n'ait rien d'obligatoire.
Remarque : à la
première mise sous tension, le segment "E" des quatre afficheurs
restait toujours allumé. Je ne comprenais pas très bien
car la sortie qui pilote ce segment est la sortie RA4 du PIC, qui est
de type collecteur ouvert. Quand cette sortie est inactive, elle est
à l'état haute impédance et non à
zéro volt. Le segment "E" devrait donc être éteint
quand la sortie RA4 est inactive. J'ai résolu ce petit
problème en ajoutant une résistance de 2K2 entre la
sortie RA4 et le +5 V, en déduisant qu'un "zéro volt
suffisant" arrivait à atteindre le segment. C'est un
comportement que j'aurais tout à fait compris s'il
s'était agit de commander un circuit logique, mais ce n'est pas
le cas ici (on pilote un segment d'afficheur, donc une led). Pas grave,
ça fonctionne comme ça.
Circuit imprimé
Non réalisé.
Logiciel du PIC
Fichier compilé pour PIC (binaire *.hex) et codes sources complets
(mikroPascal Pro V2.50)
Décompteur 002b - 16F628A - version à quatre afficheurs (06/12/2009)
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.