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.
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.
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.
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é.
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.
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).