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é.
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é.
Beau circuit, bravo Eric !
Prototype de Gérard
Circuit assemblé sur plaque d'expérimentation, fonctionnel.
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.