Electronique > Réalisations > Temporisateur 006b

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.

temporisateur_006b_pcb_3d_a

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.

temporisateur_006b

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.

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.