Dernière mise à jour :
18/12/2011
Présentation
Ce
temporisateur,
qui permet une durée de temporisation comprise entre 100
millisecondes et 56 heures, est le premier que je conçois
à partir d'un microcontrôleur de la famille PIC (un 16F628A pour
ne rien vous cacher).
Jusqu'à présent, tous les
temporisateurs que j'avais réalisés étaient
plutôt de type "analogiques" et basés sur la charge d'un
condensateur ou sur le comptage d'impulsions issues d'un oscillateur.
En réalité, le temporisateur que voici est lui aussi
basé sur le comptage d'impulsions issues d'un oscillateur; la
différence réside d'une part dans le fait qu'on ne voit
pas l'oscillateur car il est intégré dans le PIC, et
d'autre part que la durée de la temporisation est plus
précise et plus simple à programmer. En contrepartie (on
ne peut pas tout avoir), il faut programmer un composant...
Schéma
Seule la partie "commande" est montrée sur ce schéma. Il
faut encore y ajouter la section "puissance" qui correspond à
votre besoin (transistor, relais, optotriac, etc). Mais avouez tout de
même qu'il n'y a pas grand chose...
L'oscillateur de référence
On ne le voit pas, car on exploite l'oscillateur 4 MHz
intégré au PIC. L'avantage de cette approche est qu'on
n'a besoin d'aucun composant externe (ni résistance, ni
condensateur, ni quartz) pour assurer la fonction d'horloge interne du
PIC. En contrepartie, la fréquence d'oscillation ne peut pas
être ajustée très précisement, et on n'a
aucun recours si la fréquence d'oscillation n'est pas pile poil
de 4,000000 MHz. Mais soyons un peu sérieux, a-t-on vraiment
besoin d'une si grande précision ici ? Il ne s'agit que d'un
simple temporisateur, et non d'un oscillateur de
référence servant à calibrer d'autres appareils.
La précision de l'oscillateur interne est largement suffisante
pour notre cas. A titre de vérification, un signal de
contrôle de fréquence 5 Hz est disponible en sortie RA4,
qui est pour rappel, une sortie en drain ouvert et nécessite
donc une résistance de rappel vers le +5 V (c'est la raison de
la présence de R1). La led D1, avec sa résistance
série R2, est facultative mais permet de voir rapidement si le
système fonctionne, puisque sa fréquence de clignotement
est visible. Si vous souhaitez vérifier la précision de
cette fréquence de 5 Hz, mesurez plutôt la période
qui sépare deux fronts montant, ou adoptez une fenêtre de
mesure de plus d'une seconde sur votre fréquencemètre.
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 en route de l'appareil et le moment
où la sortie principale Out1 change d'état. Cette
durée est déterminée par le positionnement de
cavaliers (straps) au
nombre de 10 : un bloc de 2 cavaliers pour définir la
durée de la base
de temps, et un bloc de 8 cavaliers pour définir le nombre
d'impulsions
de la base de temps au bout duquel la sortie sera activée (ou
désactivée, comme on le verra plus loin). La
durée minimale de la temporisation nominale est de 100 ms (en
réalité 0 ms, mais là, pas grand interêt je
pense), et sa durée maximale
est de 7 heures. Une version plus récente de ce temporisateur et dotée d'une base de temps de 1 ms est proposée à la page
Temporisateur 006b.
Les différentes sorties
Vous pouvez noter qu'il y a quatre sorties (Out1 à Out4) et non
une
seule. La durée de la temporisation nominale est valable
pour la sortie principale Out1. La sortie Out2 s'active après
une durée
égale à deux fois la durée de la temporisation
nominale, la sortie Out3 s'active
après une durée égale à quatre fois sa
durée, et la sortie Out4
s'active après une durée égale à huit fois
sa durée. Ainsi, si la
temporisation nominale est de 1 minute, la sortie Out3 s'active au
bout de 4 minutes et la sortie Out4 s'active au bout de 8 minutes. Pour
une durée nominale de 7 heures sur la sortie principale Out1,
cela donne une durée de temporisation de plus de 56 heures sur
la sortie Out4, ce qui fait plus de deux jours ! Je
trouvais bête en effet de laisser des pattes libres sur le
circuit intégré,
et ai donc décidé de leur donner un petit rôle.
Configuration de la base de temps
La base de temps initiale correspond au temps qui sépare deux
impulsions d'horloge. Quand je dis impulsions d'horloge, je parle de
celles qui sont prises en compte par le compteur du temporisateur
(fréquence faible), et non de celles qui cadencent le programme
du PIC (fréquence élevée). 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 = 100 ms
Cavaliers RA6/JP1 = 0 et
RA7/JP2 = 0
Avec cette base de temps TB0, la durée de la temporisation peut être
fixée :
- pour la sortie Out1 : entre 100 ms et 25.5 s, par pas de 100 ms
- pour la sortie Out2 : entre 200 ms et 51.0 s, par pas de 200 ms
- pour la sortie Out3 : entre 400 ms et 1 min 42 s, par pas de 400 ms
- pour la sortie Out4 : entre 800 ms et 3 min 24 s, par pas de 800 ms
TB1 - Base de temps = 1 s
Cavaliers RA6/JP1 = 1 et RA7/JP2 = 0
Avec cette base de temps TB1, la durée de la temporisation peut être
fixée :
- pour la sortie Out1 : entre 1 s et 4 min 15 s, par pas de 1 s
- pour la sortie Out2 : entre 2 s et 8 min 30 s, par pas de 2 s
- pour la sortie Out3 : entre 4 s et 17 min, par pas de 4 s
- pour la sortie Out4 : entre 8 s et 34 min, par pas de 8 s
TB2 - Base de temps = 10 s
Cavaliers RA6/JP1 = 0 et RA7/JP2 = 1
Avec cette base de temps TB2, la durée de la temporisation peut être
fixée :
- pour la sortie Out1 : entre 10 s et 42 min 30 s, par pas de 10 s
- pour la sortie Out2 : entre 20 s et 1 h 25 min, par pas de 20 s
- pour la sortie Out3 : entre 40 s et 2 h 50 min, par pas de 40 s
- pour la sortie Out4 : entre 1 min 20 s et 5 h 40 min, par pas de 1
min 20 s
TB3 - Base de temps = 100 s
Cavaliers RA6/JP1 = 1 et RA7/JP2 = 1
Avec cette base de temps TB3, la durée de la temporisation peut être
fixée :
- pour la sortie Out1 : entre 1 min 40 s et 7 h 05 min, par pas de 1
min 40 s
- pour la sortie Out2 : entre 3 min 20 s et 14 h 10 min, par pas de 3
min 20 s
- pour la sortie Out3 : entre 6 min 40 s et 28 h 20 min, par pas de 6
min 40 s
- pour la sortie Out4 : entre 13 min 20 s et 56 h 40 min, par pas de 13
min 20 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 / 100 ms, au temps T0
(démarrage) le compteur vaut 0. Au bout de 100 ms, le compteur
vaut 1, au bout de 200 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 7 secondes avec la base de temps TB0 / 100 ms, le
nombre d'arrivée du compteur devra être de
7 / 0.1 = 70
En configurant les huit cavaliers SW1 du port B du PIC sur la valeur
décimale 70, vous obtiendrez donc une temporisation de 7
secondes avec la base de temps TB0 / 100 ms. Et vous obtiendrez une
temporisation de 70 secondes avec la base de temps TB1 / 1 s. Ou encore
une temporisation de 700 secondes avec la base de temps TB2 / 10 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 100 s, alors la
temporisation se terminera au bout de 3600 s, soit une heure.
Simple, non ? Oui, mais comment configurer une valeur décimale
avec des cavaliers (ou microswitches) codés en binaire ? Simple
là aussi, il suffit d'attribuer un nombre à chaque
cavalier, de la façon suivante :
- Cavalier N° 1 (borne RB0) = valeur 1
- Cavalier N° 2 (borne RB1) = valeur 2
- Cavalier N° 3 (borne RB2) = valeur 4
- Cavalier N° 4 (borne RB3) = valeur 8
- Cavalier N° 5 (borne RB4) = valeur 16
- Cavalier N° 6 (borne RB5) = valeur 32
- Cavalier N° 7 (borne RB6) = valeur 64
- Cavalier N° 8 (borne RB7) = valeur 128
Sachant cela, il vous reste à trouver les cavaliers dont les
valeurs additionnées donnent la valeur recherchée, en
partant du cavalier représentant la valeur la plus grande.
Exemple avec la valeur de 70 citée ci-avant. D'office, on voit
que le cavalier N° 8 ne peut entrer dans le jeu puisque si on le
sélectionne, la valeur sera au moins égale à 128,
donc bien trop grande par rapport à 70. Le cavalier N° 7 en
revanche doit être sélectionné, car sa valeur de 64
est inférieur à 70. Mais si on ne sélectionne que
ce cavalier N° 7, la valeur obtenue (64) est trop petite. On
continue avec le cavalier N° 6 : ce dernier à une valeur de
32, et si on l'ajoute à la valeur actuelle de 64, on
dépasse 70. Le cavalier N° 6 doit donc être
rejeté. Procédons de même pour les cavaliers
restants : les valeurs 16 (cavalier N° 5) et 8 (cavalier N° 4)
ne peuvent être ajoutées car elles donneraient elles aussi
une somme supérieure à 70. En revanche, le cavalier
N° 3 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 cavalier N° 2. En résumé, il faut activer
les cavaliers N° 7 (valeur 64), N° 3 (valeur 4) et N°2
(valeur 2) pour obtenir la valeur décimale 70.
Ah, j'allais oublier un détail qui a son importance... Quand je
parle d'activation des cavaliers, il faut en fait comprendre activation
des entrées du port B 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 cavaliers N° 1 à N° 8. Le terme "activer
un cavalier", 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 les débutants, et c'est pourquoi je l'adopte
parfois.
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 doivent avoir les sorties Out1 à Out4 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
Je n'ai pas réalisé moi-même de prototype, mais Vincent l'a fait pour moi et je l'en remercie.
Il a utilisé ce temporisateur en association avec un
clône du compresseur de dynamique SSL de Gyraf Audio, et pour ce faire lui a adjoint deux relais électromécaniques.
Circuit imprimé
Non réalisé, vue 3D uniquement là pour donner un aperçu des composants utilisés.
Fichier binaire compilé et code source
Code source (format MikroPascal Pro V3.80) et fichier binaire compilé *.hex
disponible dans l'archive suivante.
Temporisateur 006a - 16F628 - (25/07/2010)
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
18/12/2011- Ajout photos prototype de Vincent.
25/07/2010- Portage du code de MP V8.3 vers MP Pro V3.80