Dernière mise à jour :
23/06/2019
Présentation
Voici enfin la version du décompteur 002 avec horloge
stabilisée par quartz externe ! Vous êtes plusieurs à me l'avoir
réclamé et je me devais d'avancer un peu sur le sujet. Les deux
versions précédentes (
décompteur
002a et
décompteur
002b)
utilisaient l'oscillateur interne d'un PIC 16F628A et
la précision temporelle n'était pas toujours au rendez-vous. Le
minuteur présenté ici reprend les fonctions du décompteurs 002b et est
toujours cadencé à la
seconde ou à la minute, avec un point de départ qui 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). L'affichage se fait sur quatre digits, HH:MM ou
MM:SS.Pour changer un peu, j'ai laissé de côté le 16F628A au profit
d'un 16F88 (la raison principale en sera donnée plus loin). Et comme
après évolution il restait une broche de libre sur le PIC, je me suis
dit que c'était le moment d'ajouter une fonction...
Schéma (002c)
On retrouve l'
affichage
multiplexé de son ancètre, pas de raison d'en changer. Cette
fois le montage est articulé autour d'un PIC 16F88.
Décompteur 002c
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.
Différences par rapport au décompteur / minuteur 002b
Les lignes de
code logiciel du PIC écrites pour ce décompteur 002c sont dans leur
globalité les mêmes que celles écrites pour le décompteur 002b. Les
différences résident dans les points suivants :
- Fréquence d'horloge et mode oscillateur : désormais quartz
externe 8
MHz. Les paramètres du prédiviseur du Timer1 ont été adaptés pour
conserver un débordement du Timer1 toutes les 100 ms.
- Les broches
OSC1 et OSC2 qui étaient auparavant occupées pour les lignes F et G des
afficheurs ont été libérées pour permettre le raccord d'un quartz
externe.
- Les lignes F et G des afficheurs ont été décalées
sur les lignes RB4 et RB5 du PIC, qui étaient auparavant utilisées pour
les deux boutons poussoir "Plus" et "Moins".
- Les quatre boutons
poussoir sont désormais réunis via une résistance individuelle
sur
une même entrées du PIC configurée en entrée analogique (RA5). C'est la
seule solution que j'ai trouvée pour disposer d'assez de broches sans
passer à une taille physique de PIC supérieure à celle du 16F628A. Les
quatre résistances en série avec les poussoirs ont des valeurs
différentes et permettent d'envoyer au PIC une tension différente selon
le poussoir enfoncé :
. l'appui sur SW1 "Start / Stop" provoque l'apparition d'une tension
voisine de 4,0 V sur l'entrée RA5 du PIC
. l'appui sur SW2 "Select" provoque l'apparition d'une tension voisine
de 3,0 V sur l'entrée RA5 du PIC
. l'appui sur SW3 "Plus" provoque l'apparition d'une tension voisine de
2,0 V sur l'entrée RA5 du PIC
. l'appui sur SW4 "Moins" provoque l'apparition d'une tension voisine
de 1,0 V sur l'entrée RA5 du PIC
. quand aucun bouton poussoir n'est enfoncé, la tension sur RA5 est
quasi-nulle (proche de 0 V).
- Comme le 16F628A ne dispose pas de CAN (convertisseur
analogique /
numérique), je me suis rabattu sur le PIC qui lui ressemblait
le
plus et qui possédait un CAN. D'où le choix d'un 16F88.
- La broche
RA5 ayant été libérée elle aussi et comme elle ne servait plus à rien,
une nouvelle fonction de bouclage (loop) se l'est approprié :
.
quand la broche RA5 est à 0, le minuteur fonctionne comme auparavant et
la minuterie s'arrête de décompter quand le décompte arrive à
0.
. quand la broche RA5 est à 1, le minuteur redémarre automatiquement
quand le décompte arrive à 0.
Cette
broche RA5 devra impérativement être reliée à la masse ou au +5 V selon
votre préférence, il ne faut pas la laisser en l'air. Le cavalier JP1
(JP pour Jumper) doit donc être impérativement mis en place, soit côté
masse soit côté +5 V.
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
temporisation
1
- 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 normal
Appuyer
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
temps
Pour
cette réalisation, on n'utilise pas l'oscillateur interne mais un
quartz externe de 8 MHz pour stabiliser au mieux la fréquence
d'oscillation de l'horloge principale. Si une plus grande précision est
requise, vous devez utilisez un oscillateur amélioré type TCXO
(oscillateur à quartz compensé en température). La configuration du PIC
devra dans ce cas être modifiée pour n'utiliser que la seule broche
d'entrée d'horloge externe.
Utilisation de la sortie Out
La sortie Out se fait sur la ligne RB7 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 à RA4 et RB4 à RB5,
chaque sortie alimentant de
façon individuelle un segment (segment A à G). Les
afficheurs à
LED
sept segments utilisés ici sont de type Anode Commune (AC en français
ou CA en anglais), vous pouvez choisir le modèle de votre choix, par
exemple D350PA ou TDSR5150 qui ont le même brochage que celui indiqué
ci-après.
Prototypes / réalisations
De mon côté, réalisé pour une application particulière : une
bombe constituée de quelques batons de dynamite et d'un
minuteur
pour déclanchement retardé, le tout posé dans une malette pour les
besoins d'un film. Le décompteur est vrai mais le reste est évidement
factice ;-)
Ca fait un peu carton-patte mais je n'avais ni les
moyens ni le temps de faire mieux. Trois feuilles de papier carton
rouge coupées en deux pour un total de six batons, un peu de fil
électrique blanc et un peu de fil noir rigide pour la mèche, et du
papier essuie-tout pour bloquer
le fil dans le tube, avec de la colle pour que ça tienne un minimum.
Comme
on peut le voir sur les trois photos centrales précédentes, le fil
électrique ne
peut pas sortir si on tire dessus, grâce à un noeud. On peut bien sûr
pousser le fil vers l'intérieur mais vu sa longueur, il faudrait
vraiment le vouloir pour gâcher le plaisir. Vint ensuite la fabrication
du boitier électronique décompteur, alimenté par pile (mais testé avec
alim secteur) et câblé sur une
plaque d'expérimentation à pastilles.
Les
quatre boutons poussoir pour programmation et pour démarrage du
décompte sont bien alignés sur la partie droite du circuit imprimé. Il
s'agit de poussoirs à souder sur CI et c'est pourquoi je les ai soudés.
Pas vraiment question de ranger le circuit dans un boitier, ça fait
plus "artisanal" en laissant tel quel. Le résultat final
est celui
rendu par les photos qui suivent, qui montrent que l'ensemble a été
testé avec des afficheurs rouges et avec des afficheurs bleus (ces
derniers étant bien plus lumineux).
Je
n'ai finalement pas gardé la longueur initiale des fils blancs, qui
étaient trop souples et refusaient de rester boudinés. Après les avoir
coupés, j'ai soudé dessus du fil noir rigide pour donner un côté un peu
plus "standard" et reconnaissable à l'ensemble. Ca fait peur si on ne
sait pas d'où ça vient, n'est-ce pas ?
Vidéo de démonstration
Petite vidéo sans fioriture pour voir le montage en action. Je n'y
montre
pas comment l'engin se programme, c'est indiqué avant.
http://www.youtube.com/watch?v=HPGSWv-Jdko
Cela a-t-il bien marché du premier coup ?
Hi, hi... j'en rigole encore.
- J'ai terminé ma maquette sur CI à pastilles et j'ai mis
sous tension.
Les afficheurs se sont bien allumés mais de façon très curieuse... en
fait ils affichaient n'importe quoi. Comme les quatres afficheurs
s'illuminaient, je me suis dit que le multiplexage fonctionnait et que
donc le PIC "tournait" bien. J'ai retiré le composant
programmable
de son support et l'ai porté sur ma platine de développement pour
décortiquer le problème de plus près. Et là miracle tout fonctionnait
parfaitement, comme lors de mes premiers tests. Je me gratte la tête en
me disant "nom d'un bonhomme" en ayant pleinement conscience que
j'aurais pu dire autre chose, et je commence à chercher les différences
entre les deux maquettes. La seule différence que je voyais concernait
les afficheurs sept segments. Mais comme ils s'allumaient, j'ai écarté
l'hypothèse qu'ils pouvaient être en cause. Après une heure de
recherche infructueuses et une bonne nuit de sommeil, j'ai repris les
deux maquettes en main. Mais pas moyen de voir d'où venait le problème.
Je regarde à nouveau les afficheurs (identiques physiquement) et
m'apperçois alors qu'ils n'ont pas la même référence. Tiens donc, me
serais-je trompé et aurais-je mis des afficheurs à cathode commune au
lieu d'afficheurs à anode commune ? Impossible voyons, puisqu'ils
s'allument bien. Si j'avais mis les mauvais, ils resteraient forcement
éteints. Tout de même pris d'un doute, je retire un des quatre
afficheurs de son support et le teste avec mon alim de labo. Bingo,
j'avais mis des afficheurs à cathode commune sur la dernière maquette !
Mais comment diable peuvent-ils donc s'allumer ? Je revérifie mon
câblage (vous savez, celui que j'avais vérifié plusieurs fois
la
veille) et trouve mon erreur. Le collecteur des quatre transistors
étaient reliés à la masse et non au +5 V. Et oui, j'envoyais des
signaux "négatifs" aux cathodes commune et ça fonctionnait donc, à
l'envers puisque les sorties du PIC qui attaquaient les segments
agissaient lorsqu'ils passaient à l'état haut et non à l'état bas.
C'est ce qu'on appelle le cas de "double panne" : on pense qu'il n'y a
qu'un problème et on s'égare comme un rien. Surtout quand les deux
problèmes "s'auto-annulent" en partie.
- Autre problème rencontré
sur une maquette et pas sur l'autre : l'appui sur les boutons poussoirs
conduisait parfois à d'étranges comportements, parfois un blocage
complet du système. La mise en marche ou l'arrêt du décompte
fonctionnait toujours bien, mais dès qu'on rentrait dans le mode de
programmation pour spécifier l'heure de départ ou le mode d'affichage,
pouf... Je me suis rendu compte que cela venait de la qualité des
boutons poussoirs : avec les boutons poussoirs pros montés sur la
maquette "bombe", aucun soucis. Mais avec les poussoirs grand public à
50 centimes câblés sur l'autre maquette volante, pas terrible. Problème
résolu en ajoutant un condensateur de 100 nF sur l'entrée analogique
RB6/AN5 du PIC (schéma mis à jour).
Réalisation de Eric D.
Et une nouvelle réalisation,
cette fois avec quelques CMS ! La retrouverons-nous bientôt clonée et
en vente sur un site "lointain" ?
Typon (PCB) proposé par Eric (format Sprint Layout 6)
Réalisation de Ludovic L.
Merci à lui pour ses retours et la photo !
Prototype de Jean-Paul
Sur plaque sans soudure - breadboard ou planche à pain comme disent "les autres" ;-)
Commentaire de Jean-Paul :
Ce
montage fonctionne très bien, après avoir ajouté sur la ligne
d'alimentation de la paque sans soudure, un condensateur de 100 uF.
Sans ce condensateur, le fonctionnement était erratique.Réalisation de David L.
Sur plaque d'expérimentation avec soudure, comme pour le mien ;)
Amusant à faire, les liaisons sous le circuit, n'est-ce pas ?
Réalisation de Alain
Jolie mise en boîte ! J'aime beaucoup !
Il faut absolument que j'apprenne à faire de belles choses comme ça... mes circuits m'en seront reconnaissant.
Circuit imprimé
Non réalisé.
Logiciel du PIC
Fichier compilé pour PIC (binaire *.hex) et codes sources complets
(mikroPascal Pro V3.80)
Décompteur
002c - 16F88 - version à quatre afficheurs (21/11/2010)
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.
Historique
23/06/2019
- Ajout photo réalisation et typon (PCB) de Eric D..
29/01/2017
- Ajout photos des réalisations de David et Alain.
22/02/2015
- Ajout photo et commentaire de Jean-Paul pour son prototype de décompteur 002c réalisé sur plaque sans soudure.
16/10/2011
- Ajout précisions concernant les types d'afficheurs à LED sept
segments utilisables.
- Ajout vidéo YouTube.
15/05/2011
-
Ajout d'un condensateur de 100 nF sur l'entrée
analogique RB6/AN5
du PIC pour éviter les disfonctionnements avec des boutons poussoir de
basse qualité produisant plein de rebonds. J'avais bien prévu le coup
des rebonds au niveau logiciel (délai de 100 ms), mais ça ne suffisait
pas.