Affichage_Atrylec_com

Vous n'êtes pas seuls dans l'Univers !

Transistor_100

La programmation des PIC18F - Page 2

Spécial ZanX' à « NonoxX » !

La programmation des PIC18F - Configurer l'horloge sur le PIC18F4550.

Je veux remonter ! | Liste

1) Présentation

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.

Je veux remonter ! | Liste

2) Les horloges système du PIC18F4550

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.

Capture_MPLAB_5

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.

Je veux remonter ! | Liste

3) Oscillateur externe

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.

Capture_MPLAB_6

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.

Je veux remonter ! | Liste

4) Oscillateur interne

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.

Capture_PIC18F4550_1

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.

Je veux remonter ! | Liste

5) Oscillateur externe et USB

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.

Capture_PIC18F4550_2

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.

Je veux remonter ! | Liste

6) L'oscillateur secondaire

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

Votre pseudo :

Votre commentaire :

Je veux remonter !