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 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 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
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.





