Vous n'êtes pas seuls dans l'Univers !
[
]
La programmation des PIC18F - Configurer l'horloge sur le PIC18F4550.
Comme la grande majorité des systèmes
numériques à l’heure actuelle, les
microcontrôleurs sont des composants synchrones,
c’est-à-dire que toutes les opérations
y sont synchronisées par une horloge commune. Dans le cas
d’un microcontrôleur, le nombre
d’instructions par seconde exécutées
par le processeur est directement proportionnel à la
fréquence de l’horloge. Ainsi il est logique de
penser que l’idéal est d’utiliser
l’horloge la plus élevée possible, car
les performances seront ainsi maximisées. Ce raisonnement
est juste, mais maladroit, car une autre chose qui est directement
proportionnelle à la fréquence
d’horloge est la consommation électrique du
composant.
Dans le PIC18F4550, en plus d’une horloge système,
qui cadencera le coeur du microcontrôleur, on peut aussi
avoir à fournir une horloge à certains
périphériques tels que le contrôleur
USB ou les Timers. Dans ce cours il ne sera question en
détail que de l’horloge principale.
Le PIC18F4550 peut utiliser 4 types d’horloge comme horloge système:
Le choix de l’oscillateur se fait par des registres
particuliers, les registres de configuration. Ces registres ont la
particularité de ne pouvoir être écrits
que lors de la programmation. Pour les régler on peut soit
utiliser la directive « #pragma config », soit un
menu bien pratique de MPLAB.
Justement ce menu, pour y accéder, il suffit
d’aller dans « Configuration » puis
« Configuration Bits… ». Commencez par
décocher « Configuration Bits Set In Code
», afin d’avoir accès aux configurations
par ce menu.
Vous vous retrouvez alors face à une assez vaste liste de
réglages… Mais comment savoir quoi mettre ? La
réponse est simple : comme toujours, TOUT se trouve dans le
datasheet ! Cherchez-y le diagramme des horloges (« Clock
Diagram », figure 2-1, page 24).
Nous allons voir comment nous y retrouver grâce à
quelques exemples concrets.
Nous allons commencer par un cas très simple, et
très utilisé. Nous allons cadencer notre
microcontrôleur à une fréquence de 4MHz
avec un quartz de 4MHz.
Pour un quartz de 4 MHz, nous l’avons vu, nous avons le
choix, le mode XT ou le mode HS conviennent. J’ai
l’habitude d’utiliser le mode XT avec un quartz de
4 MHz, mais cela ne fonctionnera ni mieux, ni moins bien
qu’en HS.
Dans MPLAB, ouvrez la fenêtre « Configuration Bits
…», mettez en surbrillance la ligne FOSC
(« Oscillator Selection Bits ») et, dans la liste
déroulante à droite, choisissez XT.
Sur le diagramme des horloges on peut lire que dans les modes XT, HS,
EC et ECIO, le signal d’horloge passe par un diviseur
configurable par les bits de configuration nommés CPUDIV.
Dans la liste des bits de configuration dans MPLAB, il y a une ligne
CPUDIV, choisissez y donc le mode « Primary Oscillator Src :
/1 », puisque nous ne voulons pas diviser notre horloge.
C’est aussi simple que cela, vous avez terminé la
configuration de votre oscillateur.
Nous cherchons pour notre application à minimiser les
coûts, de plus c’est une application dans laquelle
la précision des mesures de temps n’est pas
critique. L’horloge interne semble alors tout à
fait indiquée. De plus, une étude
préalable a montré qu’une
fréquence de 1MHz convenait parfaitement pour les
performances que nous cherchons, tout en limitant la consommation
d’énergie.
Nous allons tout d’abord sélectionner comme
horloge système l’oscillateur interne. Malheur !
Dans la liste déroulante de la fenêtre de
configuration il y a 4 choix possibles, tous commençant par
« Internal Oscillator ». La raison est simple :
dans le PIC18F4550, il y a un module USB qui doit pouvoir fonctionner
avec une horloge de 48 MHz. La fréquence de
l’oscillateur interne est au maximum de 8 MHz, et il
n’y a pas de multiplicateur de fréquence qui y
soit connecté. Il faut donc une autre horloge pour
l’USB, nécessairement XT, HS ou EC.
C’est pour cela qu’il y a plusieurs
possibilités. Nous n’utilisons pas l’USB
dans notre application, on peut donc mettre n’importe
laquelle de ces options.
Maintenant, il faut choisir la fréquence de fonctionnement,
nous avons choisis 1 MHz. INTOSC a en réalité une
fréquence fixe de 8 MHz, mais possède un diviseur
à sa sortie. Il nous faut donc diviser cette
fréquence par 8. Le diagramme des horloges nous indique que
cette division est paramétrable par les bits 4 à
6 du registre OSCCON. Le registre OSCCON n’est pas un
registre de configuration, c’est le seul de ce chapitre
d’ailleurs. Ainsi, il faut le modifier dans votre programme,
et non dans la fenêtre « Configuration
Bits… ». C’est d’ailleurs
impossible.
On va donc placer OSCCON<6 :4> à la valeur
binaire 100, en tout début de notre fonction «
main ». Il semble en effet logique de configurer
l’horloge en premier. Il est toutefois possible de changer
d’horloge principale en cours de programme, mais dans des cas
un peu particuliers, notamment lorsqu’il est
nécessaire d’optimiser au maximum la consommation
d’énergie.
Et c’est tout ! Votre PIC fonctionne maintenant sur son
oscillateur interne, à une fréquence de 1 MHz.
Maintenant nous allons sortir la grosse artillerie ! Surtout ne vous
effrayez pas, ce n’est pas parce que c’est une
utilisation un peu plus poussée des oscillateurs du
PIC18F4550, que c’est beaucoup plus compliqué.
Nous avons besoin, pour une application, d’une assez grande
puissance de calcul. Une fréquence de 32 MHz est
adaptée. Notre application utilisera le bus USB, et ce
composant a besoin d’une horloge à 48 MHz pour
fonctionner correctement. En plus de tout cela, notre fabricant de
quartz favori s’est engagé à nous faire
une remise très intéressante, mais uniquement sur
un modèle de quartz fonctionnant à 8 MHz.
Nous disposons un quartz de 8 MHz, c’est donc l’un
des modes HS qu’il faudra utiliser. En plus de cela, nous
devrons multiplier cette fréquence avec la PLL pour obtenir
les fréquences que nous désirons pour le
système et pour l’USB. Nous configurons donc FOSC
sur HSPLL dans MPLAB. FOSC commande les deux multiplexeurs
notés en vert ci-dessus.
Sur notre diagramme des horloges, on voit qu’avant
d’entrer dans la PLL, notre signal d’horloge passe
par un diviseur (orange). En effet, il est nécessaire
d’attaquer la PLL avec un signal de 4 MHz. Notre quartz
fonctionnant à 8 MHz, il va falloir diviser cette
fréquence par 2. Le diagramme toujours nous indique que
cette division est paramétrée par les bits de
configuration PLLDIV. Dans MPLAB nous plaçons alors le
PLLDIV sur « Divide By 2 ».
Nous allons d’abord terminer de configurer
l’horloge de l’USB. On voit que notre signal passe
par un premier multiplexeur (jaune). En effet, si nous avions eu
à disposition un quartz de 48 MHz, nous aurions pu cadencer
le périphérique USB directement avec (fichu
fabriquant !).
Notre horloge passe ensuite par un second multiplexeur (bleu) qui
permet de choisir comme horloge de l’USB, soit ce que nous
avons paramétré jusqu’à
présent à 48 MHz, pour l’USB pleine
vitesse (« Full Speed »), soit à 6 MHz
pour l’USB basse vitesse (« Low Speed »).
Dans MPLAB nous plaçons donc FSEN sur « USB clock
source comes from the 96 MHz PLL divided by 2 ».
Notre horloge pour l’USB est configurée. Passons
à l’horloge système. En
réalité, nous l’avons
déjà presque entièrement
configuré en sélectionnant HSPLL pour FOSC. En
sortie de la PLL le signal a une fréquence de 96 MHz. Nous
désirons une horloge CPU de 32 MHz, il va falloir diviser la
fréquence du signal de sortie de la PLL par 3
grâce au diviseur violet. On place alors CPUDIV dans MPLAB
sur « 96 MHz PLL Src : /3 ». Vous l’avez
peut-être remarqué, lorsque nous avons
configuré l’horloge externe dans sa configuration
simple dans un paragraphe précédent, nous avons
déjà utilisé CPUDIV pour commander un
autre diviseur. Il est en fait impossible que les deux soient
utilisés simultanément, parce que les sorties de
ces deux diviseurs sont connectées aux entrées du
petit multiplexeur commandé par FOSC, cela ne pose donc pas
de problème.
Ca y est enfin ! Vous pouvez lever les bras au ciel ou aller boire un
coup avec des amis pour fêter ça (bien
qu’ils risquent de ne pas trouver cela formidable). Vous avez
réussi à configurer l’horloge du
PIC18F4550 dans l’un de ses modes les plus tordus.
Le PIC18F4550 permet d’utiliser un deuxième oscillateur externe, dit secondaire. Vous pouvez également l’utiliser comme horloge système (CPU) via le registre OSCCON (je vous invite à lire le datasheet pour plus d’informations). Cependant l’oscillateur secondaire ne peut être utilisé qu’avec un quartz d’horloger, d’une fréquence de 32768 Hz. En général il est plutôt utilisé pour mesurer précisément des temps à l’aide d’un périphérique particulier, un compteur, le timer1 dans le cas du PIC18F4550. En effet, si on divise par 215 cette horloge, on obtient un signal de fréquence la seconde, et c’est très pratique et très utilisé.
Commentaires (0)
Ajouter un commentaire