Logiciels > Programmation PIC > Bases > MP > Configuration oscillateur

Dernière mise à jour : 09/01/2011

Présentation

Pour pouvoir fonctionner (tourner) correctement, le programme logiciel implanté dans le PIC dans être lu "ligne par ligne". Cette lecture se fait de façon séquentielle et les actions menées répondent aux souhaits de celui qui a écrit le programme. La lecture du code est cadencée par un oscillateur appelé aussi horloge, qui n'est ni plus ni moins qu'un générateur de signaux rectangulaires délivrant en alternance des signaux logiques haut et bas. Sans signal d'horloge, le logiciel du PIC ne peut pas être exécuté. Il faut donc impérativement spécifier un mode d'horloge qui indique quelle est la source du signal d'horloge, interne ou externe au PIC. Certains PIC intègrent une horloge interne, d'autre non. On peut utiliser un signal d'horloge externe venant d'un oscillateur monté à part. On peut mettre en place un quartz ou un résonnateur céramique quand on ne dispose pas de source d'horloge externe. Pour les cas où la précision temporelle (stabilité d'horloge) n'est pas critique du tout, on peut même se contenter d'un simple couple RC (résistance et condensateur). Parmi tous les choix possibles, quelle solution adopter ?

Des pattes à tout faire

Nous l'avons vu à la page Configuration minimale, la plupart des broches d'un PIC peuvent jouer plusieurs rôles. Le PIC dispose de broches spécialement dédiées à l'horloge de cadencement et ces broches, si elles ne sont pas correctement configurées, ne vont certes pas faciliter le bon fonctionnement du système. La première chose à comprendre est qu'il existe plusieurs façons de faire et que si on dit au PIC qu'il doit travailler de telle ou telle façon, il faut que tout soit conforme à ce qui est spécifié. Ainsi, si on spécifie dans les paramètres de configuration que l'on veut travailler avec un quartz externe, il faut bien mettre en place un quartz externe. C'est bête à dire mais ce genre d'erreur arrive plus fréquement qu'on peut le penser. Pas forcement parce qu'on fait l'erreur de spécifier le mauvais mode, mais souvent parce que le mode spécifié par défaut ne correspond pas à ce qu'on souhaite et qu'on oublie de vérifier.

Repérage des broches dédiées oscillateur
Avant de dire que telle ou telle patte doit se comporter de telle ou telle sorte, il faut déjà repérer celles qui sont concernées par la fonction d'horloge. En général c'est très simple car ces broches portent un nom de type OSC1 et/ou OSC2 (OSC comme oscillateur). Pour les PIC 12F629, 12F675, 16F628A et 18F2420, le repérage est immédiat.

pic_tuto_base_config_osc_001a

Dans le cas des 12F629 et 12F675, les broches 2 et 3 sont celles qui vont bien. Pour le 12F675, on se rend compte que la broche OSC2 peut jouer un rôle supplémentaire qui est "Entrée analogique AN3", rôle que ne peut jouer le 12F629 qui n'intègre pas de convertisseur analogique / numérique. Il n'est pas impossible que des points supplémentaires de vérification doivent être portés sur le 12F675... Pour les deux autres exemples de PIC, le repérage est aussi vite fait : broches 16 et 15 pour le 16F628A et broches 9 et 10 pour le 18F2420. Voilà une chose de faite.

Différents modes d'oscillateur

Il existe plusieurs modes de fonctionnement d'oscillateur, que nous allons maintenant passer en revue. A noter que tous ces modes ne sont pas forcement disponibles sur tous les types de PIC.

Mode LP - Low Power crystal / resonator
Ce mode oscillateur se base sur l'utilisation d'un résonateur céramique ou d'un quartz externe "basse fréquence" raccordé entre les deux broches OSC1 et OSC2. Ce mode convient pour des fréquences d'horloge comprises entre quelques kHz (typiquement 32 kHz) et 200 kHz environ.

pic_tuto_base_config_osc_001ba

C'est le mode idéal quand les fonctions logicielles à assurer ne réclament pas une grande puissance ou vitesse de traitement car la consommation propre au PIC lui-même est très réduite, de l'ordre de quelques dizaines de uA. Il faut savoir en effet que la consommation du PIC augmente proportionnellement avec sa fréquence de fonctionnement, comme c'est le cas avec tous les circuits logiques. Pour ce mode de fonctionnement, la valeur recommandée pour les deux condensateurs C1 et C2 dépend du PIC et du quartz, mais on peut dire que les valeurs standards se situent entre 15 pF et 100 pF. Avec un quartz de 32 kHz, Microchip recommande ainsi une valeur comprise entre 68 pF et 100 pF pour le 16F84 et une valeur comprise entre 15 pF et 30 pF pour le 16F628A. Pour 200 kHz, le même fabricant Microchip une valeur comprise entre 15 pF et 30 pF pour le 16F84 et une valeur comprise entre 1,5 pF et 15 pF pour le 16F628A. Une valeur plus élevée assure une plus grande stabilité mais conduit à un temps de démarrage un poil plus long. Les deux broches OSC1 et OSC2 étant monopolisées pour la fonction d'oscillateur avec quartz externe, elles ne peuvent pas être utilisées en tant qu'entrées ou sorties logiques.

Mode XT - Crystal / resonator
Ce mode oscillateur se base sur l'utilisation d'un résonateur céramique ou d'un quartz externe de "fréquence moyenne" raccordé entre les deux broches OSC1 et OSC2. Ce mode convient pour des fréquences d'horloge comprises entre 100 kHz et 4 MHz environ. La consommation du PIC grimpe à quelque mA. D'un point de vue raccordement physique on se retrouve dans le même cas qu'avec le mode LP. Pour certains types de quartz, il peut être nécessaire d'ajouter une résistance limitant la valeur du courant le traversant, comme le montre le schéma suivant.

pic_tuto_base_config_osc_001bb

Il n'existe pas vraiment de règle générale concernant la valeur à donner à cette résistance additionnelle, et il faudrait en théorie se documenter auprès du fabricant du quartz pour savoir exactement quoi mettre. Dans la plupart des schémas cette résistance est omise et la plupart du temps ça fonctionne sans. Mais si pour votre application l'oscillateur a du mal à démarrer, ajouter cette fameuse résistance est la première chose à tenter (après avoir bien sûr vérifié le mode oscillateur et l'état de MCLR au niveau du PIC). Les deux broches OSC1 et OSC2 étant monopolisées pour la fonction d'oscillateur avec quartz externe, elles ne peuvent pas être utilisées en tant qu'entrées ou sorties logiques.

Mode HS - High Speed crystal / resonator
Ce mode oscillateur se base sur l'utilisation d'un résonateur céramique ou d'un quartz externe de "fréquence élevée" raccordé entre les deux broches OSC1 et OSC2. Ce mode convient pour des fréquences d'horloge comprises entre 4 MHz et 20 MHz environ. La consommation du PIC est d'environ 10 mA (c'est un ordre de grandeur, certains PIC consomment moins à ces fréquences élevées). D'un point de vue connection physique, on reste sur les mêmes schémas que précédement (avec ou sans résistance additionnelle), seule la configuration logicielle est modifié.

pic_tuto_base_config_osc_001bc

Les deux broches OSC1 et OSC2 sont dans ce cas encore monopolisées pour la fonction d'oscillateur avec quartz externe et ne peuvent pas être utilisées en tant qu'entrées ou sorties logiques.
Avertissement : une même référence de PIC peut être spécifiée pour une fréquence d'horloge maximale de 4 MHz (par exemple 16F84/04) ou pour une fréquence d'horloge maximale de 20 MHz (par exemple 16F84/20). Il va de soi que le PIC version 4 MHz ne fonctionnera pas plus haut en fréquence en choisissant le mode oscillateur "HS".

Mode RC - External Resistor Capacitor
Ici point de quartz ni de résonateur céramique, on utilise un simple couple résistance / condensateur. Ce type de configuration plutôt économique se prête bien aux montages où la vitesse d'exécution du logiciel n'est pas très élevée. Elle ne convient pas pour des montages où il est fait usage de routines mettant en oeuvre des durées de retards (delay) bien spécifiques tels qu'appareils de mesure, horloges, chronomètres ou minuteurs. 

pic_tuto_base_config_osc_001bd

On pourrait bien se demander en quoi l'ajout d'une résistance et d'un condensateur peut avoir d'intéressant par rapport à l'emploi d'un oscillateur interne (quand il existe, voir chapitre suivant) qui ne requiert aucun composant externe. La réponse est assez simple : on peut faire varier la fréquence d'horloge très facilement, en remplaçant R1 par un potentiomètre monté en série avec une résistance (résistance fixe de 3,3 kO avec potentiomètre de 100 kO). Autre avantage : la consommation du PIC reste faible si on reste à des fréquences de cadencement modestes (inférieure à 1 MHz). En revanche, et il s'agit d'un point à ne pas oublier, la précision dans le temps est moindre, mais cela ne pose absolument aucun soucis pour bien des applications. Pour les inconditionnels des formules, voici celle qui définie la fréquence d'oscillation théorique en fonction des valeurs de R1 et C1 :
F = 1 / (R1 * C1)
Pour ceux qui attendent des exemples sans devoir sortir la calculatrice, voici quelques exemples de valeurs à adopter pour R1 et C1 :
- La valeur de R1 doit être comprise entre 3,3 kO et 100 kO (on préfèrera même une valeur min de 4,7 kO)
- La valeur de C1 doit être comprise entre 20 pF et 220 pF
- Si R1 = 3,3 kO et C1 = 20 pF, alors freq = 4,7 MHz environ (en théorie 15 MHz)
- Si R1 = 3,3 kO et C1 = 200 pF, alors freq = 500 kHz environ (en théorie 1,5 MHz)
- Si R1 = 10 kO et C1 = 300 pF, alors freq = 270 kHz environ (en théorie 330 kHz)
- Si R1 = 100 kO et C1 = 300 pF, alors freq = 27 kHz environ (en théorie 33 kHz)
La seule broche OSC1 est monopolisée pour la fonction d'oscillateur et on peut utiliser la broche OSC2 pour d'autres usages. Il est possible d'utiliser la broche OSC2 comme ligne d'entrée / sortie standard, ou de ressortir le signal d'horloge de base divisé par 4 (une fréquence d'horloge de 1 MHz au niveau de la broche OSC1 se traduirait par un signal sortant sur OSC2 de 250 kHz).

Mode INTOSC - Internal Oscillator
Ce mode permet d'utiliser l'oscillateur interne quand il existe, ce qui est le cas par exemple dans le 16F628A et dans le 12F675, mais pas dans le 16F84 qui est de toute façon obsolète. Parfois, on a le choix entre plusieurs fréquences de fonctionnement avec un même oscillateur interne, éventuellement au travers d'un diviseur de fréquence interne appelé prescaller. On doit dans ce cas choisir la fréquence de fonctionnement désirée parmi celles disponibles. Le 16F628A propose ainsi deux valeurs de fréquences internes qui sont de 4 MHz et de 37 KHz, soit environ cent fois moins rapide pour la seconde, qui permet une consommation générale plus faible. Le document constructeur (datasheet) précise qu'il s'agit d'une "horloge interne à deux vitesses" (two-speed internal oscillator). Le 16F88 propose quand à lui deux valeurs de base qui sont 31,25 KHz (période 32 us) et 8 MHz. L'horloge cadencée à 31,25 kHz est de type RC et possède donc la précision qui va avec. Celle de 8 MHz peut être divisée plusieurs fois par deux en interne (avec le prescaller) pour obtenir au final une fréquence de 4 MHz, 2 MHz, 1 MHz, 500 kHz, 250 kHz ou 125 KHz. Dans tous les cas, l'avantage d'utiliser l'horloge interne est de libérer les broches OSC1 et OSC2 qui peuvent alors jouer le rôles d'entrées / sorties logiques.
Remarque : l'oscillateur interne est souvent noté "oscillateur interne de précision" par le fabricant Microchip, mais la précision reste toute relative et inférieure à celle offerte par un quartz externe ou autre horloge externe de précision. Elle dépend de la tension d'alimentation (facilement stabilisable) et de la température ambiante (pas toujours prévisible). Pour des chiffres précis concernant les variations potentielles de fréquence, il faut se reporter aux document technique du fabricant.

Mode EC - External Clock
Dans ce mode il est fait usage d'un signal d'horloge externe, provenant par exemple d'un oscillateur intégré ou d'un oscillateur construit autour de portes logiques. L'utilisation d'un oscillateur externe peut être justifié quand on veut une grande stabilité d'horloge (utilisation d'un TCXO par exemple) ou quand on veut cadencer plusieurs PICs en même temps avec une seule et même horloge de référence. Dans ce mode, le signal d'horloge externe doit être appliqué sur la broche OSC1 qui fait alors office d'entrée. La broche OSC2 peut être utilisée comme broche de sortie d'horloge avec un signal cadancé à F/4 ou être utilisée comme broche d'entrée / sortie logique. Le mode de fonctionnement choisi pour la broche OSC2 doit être spécifiée au moment de programmer le PIC, avec les autres paramètres de configuration d'horloge.

Astuces diverses

En se balladant sur le net, on trouve parfois de sacrées astuces. Et le PIC étant un composant très utilisé, il n'est pas surprenant de lire des tas de choses à son sujet.

Remplacement quartz par bobine
Certains auteurs remplacent le quartz par une bobine en association avec les deux condensateurs qui vont à la masse. La fréquence d'oscillation serait donnée par la formule suivante :
Freq = 1 / (6,28 * sqrt(L * C))
où sqrt signifie "racine carrée de" et C correspond à l'équivalent série des deux condensateurs

Remplacement quartz par résonateur céramique
C'est bien sûr possible puisque le fabricant en parle dans ses documents techniques (datasheet). Le résonateur céramique est parfois un peu boudé car on considère que sa stabilité est insuffisante. Or la précision d'un tel composant est de l'ordre de 0,5%, ce qui est nettement supérieur à la tolérance d'un condensateur ou même d'une résistance. De plus, ce type de composant coûte nettement moins cher qu'un quartz et certains intègrent les deux condensateurs. Pour ma part je dispose de plusieurs résonateurs céramiques mais n'en ai jamais utilisé avec les PIC. Pourquoi ? Par ce que mes montages sont soient "critiques" d'un point de vue temporel et dans ce cas j'utilise un quartz ou un oscillateur externe intégré, soit ils ne présentent aucune criticité vis à vis du temps et dans ce cas j'utilise l'oscillateur interne ou un réseau RC externe.

Connection des condensateurs au +Valim
Pour certains PIC (notamment ceux à 18 broches), les broches OSC1 et OSC2 se situent physiquement plus près d'une broche VDD (+Alim) que d'une broche VSS (masse). Sachant qu'en régime dynamique le pôle positif d'alimentation est "relié" à la masse, on pourrait fort bien penser que l'on peut relier les deux condensateurs accompagant le quartz non pas à la masse, mais vers le +Alim. Certains auteurs le font et déclarent que tout fonctionne de la même façon. Pour ma part je n'ai pas encore essayé.

Overclocking
Vous connaissez peut-être la pratique qui consiste à faire travailler un processeur avec une fréquence bien supérieure à celle supposée maximale et spécifiée par le fabricant. Cela s'appelle l'overclocking et est très répendu dans le monde de l'informatique avec les processeurs de carte mère ou de carte graphique. On rencontre la même pratique dans le monde des microcontrôleurs. Pourquoi ? Parce qu'on part du principe que la valeur maximale de cadencement d'horloge spécifiée par le fabricant est garantie. Et que si elle est garantie c'est que le composant est vraiment capable d'y aller sans soucis. Et que de fait on peut encore aller un peu plus loin. Il n'est pas rare de lire que tel auteur a réussi à faire fonctionner un PIC à 25 MHz alors que la fréquence max spécifiée est de 20 MHz. Il ne s'agit évidement pas d'une bonne pratique car on s'expose alors à un risque d'instabilité important et le composant, si on le pousse un peu trop, peut griller par surchauffe. Mais rien ne vous interdit d'expérimenter (si personne le l'avait fait, on parlerait en suppositions et non en faits).