Electronique > Réalisations > Affichage / Mesure > Compteur horaire 001

Dernière mise à jour : 02/06/2013

Présentation

Le compteur horaire présenté ici permet de comptabiliser et d'afficher le nombre d'heures de fonctionnement d'un appareil électrique. Il dispose de deux compteurs distincts, un compteur "fractionné" et un compteur "cumul", comme c'est le cas pour les compteurs kilométrique des voitures. Les deux valeurs de comptage sont indépendantes et peuvent être remise à zéro de façon individuelle, mais "moins facilement" pour la valeur "cumul", pour laquelle un reset inopiné serait sans doute plus embêtant. Les valeurs des deux compteurs sont affichées en alternance, toutes les trois secondes. L'activation du comptage est réalisée sur une commande "un fil" ou "deux fils". Dans le premier cas (mode un fil), le compteur est activé tant que l'entrée de commande présente un état logique haut; dans le second cas (mode deux fils), le compteur démarre sur une impulsion délivrée sur une entrée, et s'arrête sur une autre impulsion délivrée sur une autre entrée. La réalisation s'appuie sur un microcontrôleur de type PIC 16F628A, avec très peu de composants autour. Le nombre d'heures max pouvant être comptées et affichées est de 999999, ce qui correspond grosso-modo à 41666 jours, soit plus de cent ans. Entre nous soit dit, il n'est pas impossible que le compteur en lui-même tombe en panne avant que ne soit affiché le nombre 999999... Il est également possible d'afficher en mode HHHH:MM au lieu d'afficher en mode HHHHHH, si le nombre d'heures à afficher peut être limité à 9999 et que le nombre de minutes en cours doit être connu (dans ce mode, la vérification du bon fonctionnement prend moins de temps).

Caractéristiques principales
- Entrée START, pour démarrage depuis zéro ou pour reprise sur pause.
- Entrée PAUSE pour arrêt avec mémorisation valeur en cours.
- Entrée MR (Memory Reset) pour remise à zéro générale.
- Entrée LT (Light Test) pour test affichage
- Double affichage : affichage alterné (toutes les trois secondes) entre durée totale cumulée et durée partielle, toutes deux pouvant être mise à zéro individuellement.

Avertissement

J'ai conçu ce compteur à la demande d'un internaute et me suis contenté d'en simuler le fonctionnement, je n'ai pas réalisé de prototype. Au jour d'aujourd'hui (juin 2013) deux personnes l'ont réalisé, la première m'a fait des retours mitigés (fonctionnement instable) et la seconde m'a fait un retour positif. Comme je n'ai pas le temps de tester ce montage de façon poussée (sur le long terme), je fourni le code source, que vous pouvez utiliser tel quel ou modifier à votre guise (oui, oui avez le droit de l'améliorer si vous le jugez utile).

Schéma

Le schéma est fort similaire à celui du chronomètre 001, et celà est normal puisqu'il en est dérivé.

compteur_horaire_001

Tiens, quelqu'un a éteint le compteur pendant que j'écrivais...

Activation comptage
Le schéma montre deux commandes séparées pour activer ou désactiver le comptage (START et PAUSE), mais il y a aussi la possibilité de travailler avec un seul fil de commande (START). Cela permet au compteur de tourner seulement quand un appareil auquel il est raccordé, est alimenté (chaudière ou tourne-disque vinyl par exemple). Le mode "1 fil" ou "2 fils" est défini de façon automatique dans la seconde qui suit la mise sous tension du compteur, selon l'état logique de l'entrée PAUSE. Si durant la seconde de démarrage l'entrée PAUSE est à l'état bas (contact SW2 fermé) alors le mode "1 fil" est sélectionné. Si durant la seconde de démarrage l'entrée PAUSE est à l'état haut (contact SW2 ouvert) alors le mode "2 fils" est sélectionné. Le mode sélectionné est affiché brièvement sur l'afficheur le plus à droite après la première seconde de démarrage et donc juste après l'analyse de l'état logique de l'entrée PAUSE. Affichage du chiffre "1" pour le mode "1 fil" et affichage du chiffre "2" pour le mode "2 fils".
Mode "1 fil"
Ce mode fonctionne avec une unique commande de type continue, le compteur ne tourne que si l'entrée START est connectée à la masse (contact SW1 fermé). Dès que l'entrée START repasse à l'état logique haut (contact SW1 ouvert), le comptage est stoppé. Dans ce mode, l'entrée PAUSE est ignorée après la seconde de démarrage, mais il faut la laisser à l'état logique haut pour que suite à une coupure secteur le logiciel reparte bien sur le mode "1 fil".
Mode "2 fils"
Ce mode fonctionne avec des commandes de type impulsionnelles (momentanées) : l'entrée START doit être portée à la masse pendant au moins 200 ms pour que le compteur soit activé, et l'entrée STOP doit être portée à la masse pendant au moins 200 ms pour que le compteur soit arrêté. Si les deux poussoirs START et STOP sont activés en même temps, c'est l'entrée STOP qui a la priorité.

Remise à zéro des compteurs
- Reset compteur "fractionné" : appuyer brièvement sur SW3 / MR
- Reset compteur "cumul" : appuyer au moins trois secondes sur SW3 / MR

Fonctionnement général
Le PIC est programmé pour délivrer en interne un top toutes les secondes (voir détails au paragraphe suivant). Si le chronomètre est démarré (appui sur la touche SW1 / START ou commande via un transistor à collecteur ouvert par exemple), les interruptions incrémentent un compteur et l'affichage est mis à jour. Si le chronomètre est en mode pause (appui sur le poussoir SW2 / PAUSE ou relachement entrée SW1 / START selon mode commande utilisé), le compteur ne reçoit plus rien mais conserve sa valeur en cours, qui reste affichée. Un nouvel appui sur SW1 / START redémarre le comptage là où il était arrêté, si le mode de commande se fait en "2 fils". Em node "1 fil", le comptage redémarre sur fermeture contact SW1 / START. L'appui sur le bouton SW3 / MR (RAZ) remet le compteur à zéro, tel qu'indiqué ci-avant (distinction entre appui court et appui long pour savoir quel compteur remettre à zéro). Un appui sur le poussoir SW4 / LT (Light Test) permet de vérifier le bon fonctionnement de l'ensemble des segments de tous les afficheurs, en les allumant tous à la fois. Si le mode "Test Lampes" est activé durant un comptage, ce dernier n'est pas affecté et tourne toujours en tache de fond.

Fonctionnement au niveau interruptions
Le PIC est programmé pour être "interrompu" dans sa tâche principale d'affichage, toutes les 50 ms. Ces interruptions sont comptabilisées et au bout de 20, une variable "nombre de secondes" est incrémentée de une unitée si le compteur horaire est en mode actif (démarré par SW1). Au bout de 60 secondes, une variable "nombre de minutes" est incrémentée de une unitée, et au bout de 60 minutes, une variable "nombre d'heures" est incrémentée de une unitée. A cet instant, la valeur à afficher est mise à jour et on se rend compte que le compteur fonctionne (c'est long d'attendre une heure devant les afficheurs pour voir si tout va bien, je peux en parler).

Sauvegarde sur coupures secteur
Chaque minute, le nombre d'heures et le nombre de minutes sont mémorisée en EEProm, et ces valeurs sont relues au redémarrage du PIC lors de sa mise sous tension. Cette fonction de sauvegarde permet de limiter la casse en cas de coupure secteur, et de conserver un affichage du nombre d'heures écoulées (comptées) relativement précis. Effectuer une sauvegarde toutes les secondes serait inutile et poserait un problème avec la durée de vie de l'EEProm, dont le nombre de cycles d'écritures est limité en théorie à 1000000 (un million de fois). Le faire toutes les minutes est à la limite permis, mais la durée de vie théorique est alors de 16000 heures, soit 700 jours environ (environ 2 ans). Si vous acceptez l'idée de perdre en précision de comptage lors des coupures secteur, vous pouvez modifier le code source (fourni) pour que la sauvegarde ne soit effectuée qu'une seule fois par heure. Dans ce cas, la durée de vie de l'EEProm est multipliée par soixante, et si le nombre de coupures secteur est de deux fois par an, la perte de précision est au maximum de deux heures / an, le pourcentage d'erreur étant évidement lié à la durée d'utilisation réelle du montage alimenté. Une amélioration possible du montage serait de détecter la coupure secteur et de n'effectuer la sauvegarde en EEProm que dans ce cas, mais il faudrait alors libérer une des entrées utilisées pour disposer de la "commande sauvegarde" (c'est l'idée que j'ai adoptée pour mon indicateur niveau liquide 003). Eventuellement, l'entrée LT (test lampes) pourrait être sacrifiée pour cette nouvelle fonction.

Affichage
L'affichage est de type multipléxé, les afficheurs sont allumés les uns après les autres, ce qui permet d'économiser de l'énergie et de limiter le nombre de fils de câblage. Pour plus de détails, merci de vous reporter à la page Affichage et multiplexage. La fréquence de raffraichissement est de l'ordre de 30 Hz pour chaque afficheur (environ 200 Hz pour les six), ce qui permet de ne pas voir les segments scintiller trop. Le décodage des segments est effectué de façon matériel, avec un CI TTL décodeur BCD / 7 segments de type SN7447. Cela permet d'économiser 3 fils de commande au niveau du PIC (4 fils nécessaires au lieu de 7), mais en contrepartie les chiffres 6 et 9 ne sont pas dessinés avec leur queue (barre du dessus pour le chiffre 6 et barre du dessous pour le chiffre 9). Ce n'est pas très grave, mais j'espère que les puristes ne vont pas défiler dans la rue pour demander qu'on leur restitue la queue manquante.

Choix dy type d'horloge
Contrairement au chronomètre 001, l'horloge de base fait usage d'un quartz 4 MHz pour une bonne stabilité dans le temps. Ce quartz est associé à deux condensateurs pour permettre l'entrée et le maintient de l'oscillation, un des deux condensateurs est ajustable pour permettre un ajustage précis de la fréquence d'oscillation à 4,000000 MHz. Si vous ne possédez pas de fréquencemètre pour procéder à cet ajustage, ce n'est pas grave, vous pouvez placer le condensateur ajustable en position médiane ou le remplacer par un condensateur fixe de 22 pF. La précision sera peut-être un peu moins bonne, mais ce ne sera pas pire que la précision offerte par une montre électronique avec son quartz 32,768 KHz sortie de l'usine sans ajustage...

Prototypes

Deux exemplaires réalisés, un par Eric et l'autre par Gérard.

Prototype de Eric
Réalisé sur circuit imprimé.

compteur_horaire_001_proto_ex_001a compteur_horaire_001_proto_ex_001b compteur_horaire_001_proto_ex_001c

Beau circuit, bravo Eric !

Prototype de Gérard
Circuit assemblé sur plaque d'expérimentation, fonctionnel.

compteur_horaire_001_proto_ga_001a compteur_horaire_001_proto_ga_001b compteur_horaire_001_proto_ga_001c

Déjà 45 heures écoulées depuis la mise sous tension (pour la deuxième photo) et 10 heures et 4 minutes pour la troisième photo (essai des deux versions HHHHHH et HHHH:MM). Nombre de fils impressionnant, vous ne trouvez pas ? Moi, je suis admiratif.

Logiciel

Code source (format MikroPascal Pro V3.80) et fichier binaire compilé *.hex disponible dans l'archive suivante.
Fichiers disponibles pour tests, montage non réalisé ni testé par mes soins !
Remarque : le code fourni permet de disposer de deux versions d'affichages : HHHH:MM (9999 heure et 59 minutes au max) ou HHHHHH (999999 heures au max). Un seul et même fichier compilé ne permet pas (pour le moment en tout cas) de disposer des deux modes d'affichage. Vous devez flasher dans le PIC celui qui vous convient (il y a deux fichiers hex déjà compilés et le code est documenté pour cette partie précise).
Fichier "electronique_compteur_horaire_001_hhhhhh.hex" pour affichage HHHHHH
Fichier "electronique_compteur_horaire_001_hhhhmm.hex" pour affichage HHHH:MM
Compteur horaire 001 - 16F628A (13/06/2010)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé.

Historique

02/06/2013
- Ajout photos proto de Gérard A., que je remercie pour ses retours positifs.
13/06/2010
- Ajout version avec affichage minutes.