dimanche 29 mai 2011

Qu’est-ce qu’une PIC ?


1.2 Qu’est-ce qu’une PIC ?

            Une PIC n’est rien d’autre qu’un microcontrôleur, c’est à dire une unité de traitement de l’information de type microprocesseur à laquelle on a ajouté des périphériques internes permettant de réaliser des montages sans nécessiter l’ajout de composants externes.

La dénomination PIC est sous copyright de Microchip, donc les autres fabricants ont été dans l’impossibilité d’utiliser ce terme pour leur propre microcontrôleur.

            Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou encore composant à jeu d’instructions réduit. Pourquoi ? Et bien, sachez que plus on réduit le nombre d’instructions, plus facile et plus rapide en est le décodage, et plus vite le composant fonctionne.

 Toutes les PICs Mid-Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc des très grandes vitesses, et les instructions sont de plus très rapidement assimilées.

Figure 1 : Brochage du PIC 16F84.




1.3 Présentation du microcontrôleur PIC16F84

            Le circuit n’est certes pas le plus complet ni le plus performant de la famille mais il permet déjà de réaliser de nombreuses applications et, surtout, il dispose d’une mémoire de programme de type EEPROM c’est-à-dire programmable et effaçable électriquement jusqu’à mille fois. C’est donc le circuit idéal pour faire des exercices car toutes les erreurs sont permises sans coûter un sou !

            Le PIC 16F84, dont le brochage est indiqué figure 1, est présenté en boîtier 18 pattes ; pattes dont nous allons examiner tour à tour le rôle afin de comprendre son schéma de mise en oeuvre.

1.3.1 L’alimentation

            Comme tout circuit intégré qui se respecte, un microcontrôleur a besoin d’être alimenté et c’est le rôle dévolu à VSS, qui est la patte de masse, et à VDD qui est l’alimentation positive. Pour les 16F84 en versions XT, RC et LP (voir ci-dessous) cette alimentation peut varier de 4 volts à 6 volts alors que pour les versions HS (idem) elle doit rester comprise entre 4,5 et 5,5 volts. Il existe aussi des versions L (16LF84) qui peuvent fonctionner de 2 volts à 6 volts mais elles sont moins répandues que les versions classiques.
            Les circuits PIC étant réalisés en technologie CMOS, ils consomment fort peu et les valeurs typiques auxquelles il faut s’attendre pour notre 16F84 sont ainsi les suivantes :

- moins de 2 mA alimenté sous 5 volts avec une horloge (voir ci-dessous) à 4 MHz;
- moins de 15 µA alimenté sous 2 volts avec une horloge à 32 kHz.

             Lorsqu’il est alimenté sous 5 volts, les lignes d’entrées/sorties du PIC peuvent être considérées comme compatibles TTL alors qu’elles sont compatibles des circuits logiques CMOS sur toute leur plage de tension d’alimentation. Concrètement, cela signifie que vous pouvez raccorder directement à ces lignes des circuits logiques de la série CMOS 4000 sans aucun problème.
L’alimentation d’un PIC 16F84 ne nécessite pas de précaution particulière, surtout vu la faible consommation du circuit mais, comme pour tout circuit logique rapide, il faut tout de même veiller à la découpler. Cela doit être fait au plus près du boîtier, avec un condensateur céramique de bonne qualité de 10 nF environ, comme cela est rappelé figure 2.


1.3.2 L’horloge

             L’horloge est un élément essentiel dans un microcontrôleur ou microprocesseur car c’est elle qui rythme fonctionnement de toute la logique interne et qui cadence donc l’exécution des instructions du programme. Selon les circuits, leur type ou leur technologie, la fréquence de l’horloge visible de l’extérieur, sous forme d’un quartz par exemple, n’a parfois qu’un lointain rapport avec celle réellement utilisée en interne.

             L’horloge fournie à la PIC est prédivisée par 4 au niveau de celle-ci. C’est cette base de temps qui donne le temps d’un cycle. Si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000 de cycles/seconde, or, comme la pic exécute pratiquement 1 instruction par cycle, hormis les sauts, cela vous donne une puissance de l’ordre de 1MIPS (1 Million d’Instructions Par Seconde). Pensez que les pics peuvent monter à 40MHz (la série 18Fxx). C’est donc une vitesse de traitement assez remarquable pour un circuit en technologie CMOS.
             Cette horloge utilise les pattes OSC1 et OSC2 du boîtier (voir figure 1) et peut être réalisée de diverses façons. La plus classique fait appel à un quartz ou à un résonateur céramique, ce qui est un peu moins coûteux et à peine moins stable. Le schéma à utiliser est alors celui de la figure 3, sachant que l’horloge interne fonctionne à une fréquence égale au quart de celle du quartz ou du résonateur. En fait, les PIC 16F84 comme la majorité des autres circuits de cette famille, considèrent trois modes de fonctionnement différents de cet oscillateur à quartz :


- le mode LP pour Low Power qui est utilisable avec des fréquences allant de 32 kHz à 200 kHz environ ;
- le mode XT pour XTal qui est le mode standard lorsque l’on fonctionne avec un quartz et qui correspond à des fréquences de 100 kHz à 4 MHz environ ;
- le mode HS pour High Speed qui est destiné au quartz de fréquences les plus élevées ; typiquement de 4Mhz à 10 MHz.

            Lorsque le programme exécuté ne nécessite aucune notion de temps précise, on peut aussi utiliser avec le 16F84 un oscillateur à circuit R-C, qui présente l’intérêt d’être très économique. Son schéma est alors celui de la figure 4 sur lequel sont indiquées les valeurs limites des composants passifs à utiliser.
            Le tableau 1 précise, quant à lui, les fréquences obtenues pour diverses valeurs des composants passifs ainsi que la variation de fréquence typique que l’on peut rencontrer d’un boîtier à un autre. Cette variation est sans importance lorsque le programme n’utilise pas la vitesse d’exécution des instructions pour mesurer un temps de façon précise.

1.3.3 Le circuit de reset

             Le « reset », ou la réinitialisation en bon français, est une opération essentielle dans un microcontrôleur ou microprocesseur. Ce reset a pour effet de positionner dans un état déterminé et connu un certain nombre de registres et d’éléments internes mais aussi et surtout, il a pour fonction principale de charger le contenu du PC (voir notre précédent numéro si nécessaire) avec l’adresse de la première instruction exécutable du programme, déclenchant ainsi l’exécution de ce dernier. C’est pour cela que, lorsque votre PC (celui qui est sur votre bureau, pas celui qui est dans un PIC !) est vraiment « planté », l’action sur le poussoir de reset de la face avant lui permet toujours de redémarrer correctement.



              Sur une application à microcontrôleur « normale », le reset ne doit en principe être réalisé qu’une seule fois, lors de la mise sous tension de l’application. En effet, si son programme ne comporte pas d’erreur ou « bug », il n’y a ensuite aucune raison valable de faire à nouveau un reset.
              De ce fait, la majorité des circuits PIC - et le 16F84 est dans ce cas – dispose d’une circuiterie interne de reset automatique à la mise sous tension ; ce que l’on appelle en anglais POR pour Power On Reset. Si ce seul reset vous suffit, le schéma à utiliser pour le mettre en oeuvre est indiqué figure 5. La patte MCLR barre est reliée à l’alimentation, directement ou via une résistance de quelques kΩ. Il est difficile d’imaginer un schéma plus simple. Il existe cependant deux situations dans lesquelles ce schéma est insuffisant: lorsque la vitesse de croissance de la tension d’alimentation est trop faible ou lorsque l’on souhaite disposer d’une possibilité de reset manuel, avec un bouton poussoir par exemple.
              Il faut en effet garder présent à l’esprit que, pour que le circuit de reset interne à la mise sous tension fonctionne correctement, la tension d’alimentation VDD doit progresser plus vite que 0,05 volt par ms. C’est tout de même le cas dans la majorité des situations. Lorsque ce reset interne ne suffit pas, le schéma à adopter est alors celui de la figure 6. La résistance R doit être inférieure à 40 kΩ afin que le courant entrant par la patte MCLR barre ne génère pas une trop forte chute de tension. La résistance R1, quant à elle, doit être comprise entre 100 Ω et 1 kΩ afin de limiter le courant de décharge de C dans la patte MCLR barre lors d’un claquage électrostatique.
              La diode D enfin (1N 914, 1N4148 ou similaire) permet au condensateur C de se décharger ailleurs que dans la patte MCLR barre lorsque l’alimentation est coupée. La valeur de C dépend évidemment de la vitesse de reset désirée. Hormis dans quelques cas particuliers, une valeur de 0,1 µF à 1 µF convient généralement.

1.3.4 Les entrées/sorties

             L’intérêt d’un microcontrôleur réside tout à la fois dans le nombre d’entrées/ sorties disponibles mais aussi dans leur souplesse de programmation. Ainsi, certaines lignes peuvent n’être que des entrées, d’autres que des sorties et d’autres encore, les plus intéressantes, être des entrées ou des sorties au rythme du bon vouloir d’un programme interne.
             Le nombre d’entrées/sorties, quant à lui, dépend, bien sûr, de la puce du microcontrôleur elle-même mais aussi, et dans une large mesure, du type de boîtier dans lequel il est contenu. Notre PIC 16F84, avec son boîtier 18 pattes, n’offre ainsi que 13 pattes pour les entrées/sorties une fois enlevées les pattes utilisées par l’alimentation, l’horloge et le reset. Ces entrées/sorties sont organisées de la façon suivante :
- 5 lignes constituent ce que l’on appelle le Port A et sont repérées RA0 à RA4 ;
- 8 lignes constituent ce que l’on appelle le Port B et sont repérées RB0 à RB7.



             Toutes les lignes de ces ports sont des entrées/sorties dont le sens de fonctionnement (entrée ou sortie) est défini individuellement par logiciel en positionnant des bits dans un registre approprié. Cela signifie qu’à un instant donné, dans un programme, vous pouvez très bien programmer RA2 en entrée et RB6 en sortie et, quelques instructions plus tard, faire le contraire.
              L’intérêt d’une telle manoeuvre ne vous semble peut-être pas évident et pourtant il l’est, comme nous le verrons ultérieurement dans cette série, pour s’interfacer avec un clavier ou bien encore pour connecter un clavier et des afficheurs sur les mêmes pattes par exemple. Remarquez également, en examinant le brochage de la figure 1, que la ligne RA4 est partagée avec une ligne appelée T0CKI. Cette patte peut en effet également servir d’entrée d’horloge au TIMER0 interne dans certaines applications.
              En effet, afin de simplifier la mise en oeuvre du 16F84, ces sorties sont à fort courant afin de pouvoir piloter directement des LED sans nécessiter de transistor amplificateur.
              Chaque sortie peut ainsi débiter 20 mA lorsqu’elle est au niveau logique haut et absorber 25 mA lorsqu’elle est au niveau logique bas.

1.3.5 Les mémoires

             Bien qu’elles ne soient ni visibles ni accessibles directement via les pattes externes du boîtier, on ne peut pas présenter un microcontrôleur sans parler de ses mémoires internes. En général, elles sont au nombre de deux, la mémoire morte (ROM ou PROM) ou mémoire de programme et la mémoire vive (RAM) ou mémoire de données. Dans le cas du 16F84, une mémoire de données supplémentaire est présente sous forme d’EEPROM afin de stocker de manière permanente des informations lorsque l’alimentation du circuit est coupée. Une telle mémoire est utile, lorsque l’on emploie le microcontrôleur dans un téléviseur ou un magnétoscope par exemple, car elle conserve les paramètres des canaux reçus, des réglages préférentiels, etc.
              Dans le cas du 16F84 la mémoire de programme a une taille de 1 K mots de 14 bits c’est-à-dire de… 1 024 mots de 14 bits. Elle est réalisée en technologie EEPROM Flash, c’est-à-dire qu’elle peut être programmée et effacée électriquement. La mémoire de données classique a une taille de 68 mots de 8 bits réellement disponibles pour l’utilisateur. La mémoire EEPROM de données, quant à elle, contient 64 mots de 8 bits et se trouve dans un espace d’adressage différent de celui des deux autres mémoires du circuit.

1 commentaire:

 
contrat creative commons