<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

 

La Programmation des pics
par Bigonoff
Premiere partie - pic 16f84 - Révision 6

Téléchargement des fichiers originels ici
Publié le 20/04/2002

3. Composition et fonctionnement des PICs

Index coursIndex du cours
Chapitre précédent2. Les systèmes de numérotation
Chapitre suivant4. Organisation des instructions

 

3. Composition et fonctionnement des PICs

Enfin quelque chose de plus intéressant. Nous allons maintenant nous pencher sur un PIC, et en particulier sur le 16F84. Rassurez-vous, tout ce que nous verrons sur le 16F84 pourra être directement utilisé sur les 16F876, qui ne sont rien d’autre que des 16F84 améliorés. Chaque PIC dispose des fonctionnalités des modèles inférieurs, augmentées de nouvelles fonctions.

Tout d’abord, vous devez télécharger le datasheet du 16F84 [ NDLR : datasheet ici ] , car c’est un document que nous allons utiliser dans le reste de ces petites leçons. Je vous conseille vivement de l’imprimer, car vous en aurez toujours besoin quand vous vous lancerez dans la réalisation de vos propres programmes.

Ces datasheets sont mes livres de chevet. J’ai trouvé plus judicieux de travailler par la pratique et de commenter, plutôt que de traduire "bêtement"   les datasheets en question.

3.1 Qu’est-ce qu’un PIC ?

Un 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ôleurs.

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.

Vous aurez deviné qu'on trouve sur le marché 2 familles opposées, les RISC et les CISC (Complex Instructions Construction Set). Chez les CISC, on diminue la vitesse de traitement, mais les instructions sont plus complexes, plus puissantes, et donc plus nombreuses. Il s'agit donc d'un choix de stratégie.

Tous 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. L'exécution en un seul cycle est typique des composants RISC.

L’horloge fournie au 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 le 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 à 20MHz. C’est donc une vitesse de traitement plus qu’honorable.

3.2 Les différentes familles des PICs

La famille des PICs est subdivisée à l'heure actuelle en 3 grandes familles : La famille Base-Line, qui utilise des mots d’instructions (nous verrons ce que c’est) de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie les 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits.

Nous nous limiterons dans cet ouvrage à la famille Mid-Range, sachant que si vous avez tout compris, vous passerez très facilement à une autre famille, et même à un autre microcontrôleur.

Notez dès à présent que le datasheet du 16F84 n’est qu’une petite partie de la documentation complète. Pour obtenir la documentation complète, vous ajoutez encore plus de 600 pages en téléchargeant chez Microchip les datasheets pour la gamme Mid-Range.

Cependant, la documentation de base suffit pour 99,9% des applications, et, de plus, les datasheets Mid-Range sont disponibles sous la forme d’un fichier par chapitre. J’ai pour ma part presque tout imprimé, mais je vous conseille plutôt d’aller les chercher le jour où vous en aurez besoin.

3.3 Identification d’un PIC

Pour identifier un PIC, vous utiliserez simplement son numéro. Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC Mid-Range. Vient ensuite parfois une lettre L : Celle-ci indique que le PIC peut fonctionner avec une plage de tension beaucoup plus tolérante.

Ensuite, vous trouvez :

  • C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
  • CR pour indiquer une mémoire de type ROM
  • Ou F pour indiquer une mémoire de type FLASH.

Notez à ce niveau que seule une mémoire FLASH ou EEPROM est susceptible d’être effacée, donc n’espérez pas reprogrammer vos PICs de type CR. Pour les versions C, voyez le datasheet. Le 16C84 peut être reprogrammé, il s'agit d'une mémoire eeprom. Le 12C508, par exemple, possède une mémoire programme EPROM, donc effaçable uniquement par exposition aux ultraviolets. Donc, l'effacement nécessite une fenêtre transparente sur le chip, qui est une version spéciale développement, et non la version couramment rencontrée.

Un composant qu'on ne peut reprogrammer est appelé O.T.P. pour One Time Programming : composant à programmation unique.

Puis vous constatez que les derniers chiffres identifient précisément le PIC. (84)

Finalement vous verrez sur les boîtiers le suffixe " -XX " dans lequel XX représente la fréquence d’horloge maximale que le PIC peut recevoir. Par exemple –04 pour un 4MHz.

Donc, un 16F84-04 est un PIC Mid-Range (16) donc la mémoire programme est de type FLASH (F) donc réinscriptible de type 84 et capable d’accepter une fréquence d’horloge de 4MHz.

Une dernière indication que vous trouverez est le type de boîtier. Nous utiliserons pour nos expérience le boîtier PDIP, qui est un boîtier DIL 18 broches, avec un écartement entre les rangées de 0.3’’ (étroit). La version 4MHz sera amplement suffisante.

Notez dès à présent que les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge peut être abaissée jusqu'à l’arrêt complet sans perte de données et sans dysfonctionnement. Une version –10 peut donc toujours être employée sans problème en lieu et place d’une –04. Pas l’inverse, naturellement.

Ceci par opposition aux composants DYNAMIQUES (comme les microprocesseurs de votre ordinateur), donc la fréquence d’horloge doit rester dans des limites précises. N’essayez donc pas de faire tourner votre PIII/500 à 166MHz, car c’est un composant dynamique.

Donc, si vous voulez passer commande pour le PIC que nous allons utiliser dans le reste de cet ouvrage, demandez donc un PIC16F84-04 en boîtier PDIP .

3.4 Organisation du 16F84

La mémoire du 16F84 est divisée en 3 parties. Page 4 du datasheet, vous trouverez la table 1-1 qui donne un aperçu de la famille 16F8X. Les numéros de pages peuvent varier en fonction des mises à jour de Microchip. Vous devrez peut-être chercher un peu, ou alors utilisez le datasheet que je fournis avec le cours.

Pour ceux qui veulent tout comprendre, la figure 3-1 de la page 8 montre l’organisation interne d’une 16F84.

3.4.1 La mémoire programme

La mémoire programme est constituée de 1K mots de 14 bits. C’est dans cette zone que vous allez écrire votre programme. Ceci explique pourquoi vos fichiers sur PC font 2Kbytes.

En effet, il faut 2 octets pour coder 14 bits. Ceci explique également pourquoi, lorsque vous lisez un PIC vierge, vous allez lire des 0x3FFF. Cela donne en binaire B’11111111111111’, soit 14 bits. J’expliquerais plus loin d’où proviennent ces fameux 14 bits.

Notez à ce point qu’une instruction est codée sur 1 mot. Donc, 1K donne 1 bon millier d’instructions possibles (c’est déjà pas si mal). Quand vous en serez à écrire des programmes de 1K, vous serez sans aucun doute autonome pour vos applications.

3.4.2 La mémoire eeprom

La mémoire eeprom (Electrical Erasable Programmable Read Only Memory), est constituée de 64 octets que vous pouvez lire et écrire depuis votre programme. Ces octets sont conservés après une coupure de courant et sont très utiles pour conserver des paramètres semi-permanents. Leur utilisation implique une procédure spéciale que nous verrons par la suite, car ce n’est pas de la RAM, mais bien une ROM de type spécial. Il est donc plus rapide de la lire que d’y écrire. Si vous programmez souvent des eeproms (2416) vous aurez constaté déjà ce phénomène.

3.4.3 La mémoire Ram

La mémoire RAM est celle que nous allons sans cesse utiliser. Toutes les données qui y sont stockées sont perdues lors d’une coupure de courant. La mémoire RAM est organisée en 2 banques pour le 16F84. La RAM est subdivisée de plus en deux parties. Dans chacune des banques nous allons trouver des " cases mémoires spéciales " appelées REGISTRES SPECIAUX et des cases mémoires " libres " dont vous pouvez vous servir à votre guise.

Pour le cas du 16F84, vous disposerez de 68 octets libres. L’organisation de la RAM est montrée dans le tableau 4-2 page 13. Vous voyez la séparation verticale en 2 banques, et tout en bas vous voyez deux banques de 68 octets de RAM.

Malheureusement, l’indication " mapped in bank 0) vous indique qu’accéder à ces 68 octets depuis la banque 0 ou la banque 1 donne en fait accès à la même case mémoire.

Vous voyez dans la partie supérieure le nom de tous les registres spéciaux utilisés dans le PIC. Nous les verrons tous, rassurez-vous.

Chaque registre provoque un fonctionnement spécial du PIC ou la mise en service d’une fonction particulière. Vous remarquerez enfin que certains registres sont identiques dans les 2 banques (FSR par exemple). Cela signifie qu’y accéder depuis la banque 0 ou 1 ne fait pas de différence.

Remarquez que la banque 0 utilise les adresses de 0x00 à 0x7F, la banque 1 allant de 0x80 à 0xFF. Les zones en grisé sont des emplacements non utilisés (et non utilisables). L’emplacement 0x00 est un emplacement auquel on ne peut pas accéder.

Pour la grande majorité des registres, chaque bit a une fonction spéciale. Page 14, tableau 4-1, vous trouverez les noms des bits utilisés dans ces registres.

 

Index cours
Index du cours
Chapitre précédent
2. Les systèmes de numérotation
Chapitre suivant
4. Organisation des instructions

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_cours03.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail