Dernière mise à jour :
13/04/2014
Présentation
Ce
temporisateur permet une durée de temporisation comprise entre 1
millisecondes et 1000 secondes, il est un peu le complément de mon
temporisateur 006a qui est construit sur un principe très similaire.
Comparé à son prédécesseur, celui-ci dispose de plages de réglage plus "fines" :
- plage 1 ms à 1023 ms par pas de 1 ms
- plage 10 ms à 10,23 s par pas de 10 ms
- plage 100 ms à 102,3 s par pas de 100 ms
- plage 1 s à 1023 s par pas de 1 s
Schéma
La différence principale avec le temporisateur 006a se situe au
niveau de la programmation de la durée de temporisation. On utilise ici
10 microswitches au lieu de 8, ce qui permet de bénéficier de 1023 pas
de réglage au lieu de 256.
En contrepartie, puisqu'il en faut bien une, on ne dispose que d'une seule sortie. Et je pense que ça ne fera pas de mal.
L'oscillateur de référence
Là encore on utilise l'oscillateur 4 MHz
interne du PIC. Ni quartz ni résonnateur céramique externe donc. On me
questionnait encore récemment sur la précision des horloges
interne des PIC. On sait que leur stabilité est moindre que celle d'un
oscillateur à quartz, mais en pratique, qu'en est-il réellement ? La
feuille de caractéristiques du constructeur Microchip indique pour
le 16F628A, une précision de +0/-2% sur la plage d'utilisation
autorisée (-40 à +125°C). L'écart de fréquence entre valeur attendue et
valeur réelle est moindre quand le PIC est alimenté en 3,3 V. Avec une
alimentation de +5 V, l'écart est plus grand, mais la valeur annoncée
ne dépasse jamais -2%.
Durée de la temporisation
La durée de la
temporisation nominale correspond à l'espace de temps qui
sépare le moment de la mise sous tension du PIC et le moment
où la sortie principale Out1 change d'état. Cette
durée est déterminée par le positionnement des 10 microswitches (SW1)
et de deux cavaliers (JP1 et JP2). Les deux cavaliers permettent
de définir la
durée de la base
de temps (1 ms, 10 ms, 100 ms ou 1s) et les 10 microswitches permettent
de définir le nombre
d'impulsions
de la base de temps au bout duquel la sortie sera activée (ou
désactivée). La
durée minimale de la temporisation nominale est de 1 ms (en
réalité 1,1 ms) et sa durée maximale
est de 1023 secondes (17 minutes).
Configuration de la base de temps
La base de temps initiale correspond au temps qui sépare deux
impulsions d'horloge. Les impulsions d'horloge dont il est question ici sont
celles qui sont prises en compte par le compteur du temporisateur
(fréquence faible, 1 Hz à 1 kHz), et non de celles qui cadencent le programme
du PIC (fréquence élevée, 1 MHz). Ces impulsions sont
comptées dès la
mise sous tension du système, et quand leur nombre correspond
à une valeur bien précise (déterminée par
l'utilisateur), la sortie principale du temporisateur change
d'état. Il existe quatre valeurs possibles de base de temps (TB0
à TB3, TB pour TimeBase), celle sélectionnée parmi
les quatre dépend de la position des cavaliers cablés sur
les entrées RA6 et RA7 du PIC.
- TB0 - Base de temps = 1
ms - Cavaliers
RA6/JP1 = 0 et
RA7/JP2 = 0 - durée de temporisation entre 1 ms et 1024 ms
- TB1 - Base de temps = 10 ms - Cavaliers RA6/JP1 = 1 et RA7/JP2 = 0 - durée de la temporisation entre 10 ms et 10,24 s
- TB2 - Base de temps = 100 ms - Cavaliers RA6/JP1 = 0 et RA7/JP2 = 1 - durée de la temporisation entre 100 ms et 102,4 s
- TB3 - Base de temps = 1
s - Cavaliers RA6/JP1 = 1 et RA7/JP2 = 1 - durée de la temporisation entre 1 s et 1024 s
Configuration du compteur d'impulsions
Là, il faut savoir
lire
en binaire ;-)
La
configuration du compteur d'impulsions permet de spécifier le
nombre
d'unité de temps de la base de temps TBx, au bout duquel la
temporisation est terminée. Le principe de fonctionnement est
très simple. Le compteur du temporisateur démarre avec la
valeur 0 et s'incrémente d'une unité à chaque fois
que le temps correspondant à la base de temps TBx
spécifiée est écoulé. Par exemple, si la
base de temps spécifiée est TB0 / 1 ms, au temps T0
(démarrage) le compteur vaut 0. Au bout de 1 ms, le compteur
vaut 1, au bout de 2 ms le compteur vaut 2, etc. Pour
spécifier la durée de la temporisation, il suffit donc de
diviser le temps total désiré par la valeur de la base de
temps. Si vous voulez par exemple obtenir une durée de
temporisation de 15,3 s avec la base de temps TB2 / 100 ms, le
nombre d'arrivée du compteur devra être de
15,3 / 0.1 = 153
En configurant les dix cavaliers SW1 sur la valeur
décimale 153, vous obtiendrez donc une temporisation de 15,3
secondes avec la base de temps TB2 / 100 ms. Et vous obtiendrez une
temporisation de 153 secondes avec la même configuration des switches mais avec la base de temps TB3 / 1 s.
Exemple 1 :
si le diviseur est
configuré sur 5 et que la base de temps est 100 ms, alors la
temporisation se terminera au bout de 500 ms.
Exemple 2 :
si le diviseur est
configuré sur 120 et que la base de temps est 1 s, alors la
temporisation se terminera au bout de 120 s, soit 2 minutes.
Exemple 3 :
si le diviseur est
configuré sur 36 et que la base de temps est 10 ms, alors la
temporisation se terminera au bout de 360 ms.
Simple, non ? Oui, mais comment configurer une valeur décimale
avec des microswitches codés en binaire ? Simple
là aussi, il suffit d'attribuer un nombre à chacun, de la façon suivante :
- Switch N° 1 (borne RA2) = valeur 256
- Switch N° 2 (borne RA3) = valeur 512
- Switch N° 3 (borne RB0) = valeur 1
- Switch N° 4 (borne RB1) = valeur 2
- Switch N° 5 (borne RB2) = valeur 4
- Switch N° 6 (borne RB3) = valeur 8
- Switch N° 7 (borne RB4) = valeur 16
- Switch N° 8 (borne RB5) = valeur 32
- Switch N° 9 (borne RB6) = valeur 64
- Switch N° 10 (borne RB7) = valeur 128
Sachant cela, il vous reste à trouver les switches dont les
valeurs additionnées donnent la valeur recherchée, en
partant du switch qui représente la valeur la plus grande.
Exemple avec la valeur de 70. D'office, on voit
que les switches N° 8, 9 et 10 ne peuvent entrer dans le jeu puisque si on les
sélectionne, la valeur sera au moins égale à 128,
donc bien trop grande par rapport à 70. Le switch N° 9 en
revanche doit être sélectionné, car sa valeur de 64
est inférieur à 70. Mais si on ne sélectionne que
ce switch N° 9, la valeur obtenue (64) est trop petite. On
continue avec le switch N° 8 : ce dernier à une valeur de
32, et si on l'ajoute à la valeur actuelle de 64, on
dépasse 70. Le switch N° 8 doit donc être
rejeté. Procédons de même pour les switches
restants : les valeurs 16 (switch N° 7) et 8 (switch N° 6)
ne peuvent être ajoutées car elles donneraient elles aussi
une somme supérieure à 70. En revanche, le switch
N° 5 doit être sélectionné car l'ajout de sa
valeur de 4 à la valeur actuelle de 64 donne un résultat
de 68, qui reste inférieur à 70. A ce stade, pas besoin
d'aller chercher midi à quatorze heure, on voit bien qu'il
manque 2 à la valeur 68 pour obtenir 70. On doit donc aussi
activer le switch N° 4. En résumé, il faut activer
les switches N° 9 (valeur 64), N° 5 (valeur 4) et N°4
(valeur 2) pour obtenir la valeur décimale 70. Petit détail qui pourrait vous rendre fou si je n'en parlais pas : quand je
parle d'activation des switches, il faut en fait comprendre activation
des entrées du PIC. La raison en est simple : pour
économiser huit résistances externes, j'utilise les
résistances de rappel au +5 V intégrées sur chaque
entrées du port B (pullup). Ce qui signifie que si on ne branche
rien sur ces entrées, elles sont lues comme ayant un état
logique haut. Pour donner à ces entrées un état
logique bas, il faut les relier à la masse, et c'est ce que
permettent les switches N° 3 à N° 10. Le terme "activer
un switch", dans le cas présent, correspond donc à son
retrait (position OFF) pour permettre à l'entrée
correspondante du PIC de voir son entrée monter à
l'état logique haut. Bien sûr, cette façon de faire
est redoutable pour ceux qui débutent et c'est pourquoi j'adore l'utiliser.
Remarque :
il est tout à
fait possible d'inverser l'état logique de chaque entrée
de façon logicielle (dans le programme du PIC), pour obtenir une
"activation" des entrées du PIC avec la mise en place des
cavaliers (position ON). Cela aurait sans doute plu à certains,
mais en même temps, il faut lire à l'envers sur les
entrées du PIC, une tension nulle correspondant alors à
une entrée activée. A chacun sa méthode, n'est-ce
pas ?
Configuration de l'état logique de départ et d'arrivée
Par le biais du cavalier JP3, il est possible de définir
l'état logique que doit avoir la sortie principale Out pendant la
durée de la temporisation et à la fin de celle-ci. Cette
fonction permet donc de disposer de sortie actives
pendant un certain
temps, ou de sorties actives
au
bout d'un certain temps. Pour des
raisons de "sécurité", la broche RA5, qui définit
l'état logique initial, est uniquement lue au démarrage du système, et
tout
changement de son statut en cours de route est ignoré.
Si RA5/JP3 = 0 : état logique bas au départ et état logique haut à la
fin de la temporisation
Si RA5/JP3 = 1 : état logique haut au départ et état logique bas à la
fin de la temporisation
Prototype
Réalisé sur platine EasyPic 7.
Circuit imprimé
Non réalisé, vue 3D uniquement là pour aperçu général.
Fichier binaire compilé et code source
Code source (format MikroPascal Pro V6.x) et fichier binaire compilé
*.hex
disponible dans l'archive suivante.
Temporisateur 006b - 16F628 - (13/04/2014)
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.
Corrections et remarques diverses
13/04/2014
- Première mise à disposition.