Débutez avec le PIC16F84 sur GNU/Linux

Gazette Linux n°079 — juin 2002

Sébastien Marbrier

Adaptation française 

Prénom Nom du relecteur

Relecture de la version française 

Article paru dans le n°079 de la Gazette Linux de juin 2002.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

2. Le PIC16F84 en bref
3. Matériels nécessaires
4. Logiciels nécessaires
Bonjour le monde !!!

Il fut un temps où il était nécessaire de démarrer un système d'exploitation Microsoft dès qu'il s'agissait de toucher un peu au matériel. Mais c'est désormais une époque révolue — des outils libres sont disponibles pour les principaux micro-contrôleurs du marché — qu'il s'agisse des PIC du Microchip, de l'Intel 8051™, du Motorola 68HC05™, des AVR™ d'Atmel, et bien d'autres. Je décrirai dans ce document comment débuter avec le PIC 16F84™ sous Linux.

2. Le PIC16F84 en bref

PIC est l'abréviation de Peripheral Interface Controller ou Contrôleur d'Interface de Périphérique. Le 16F64™ est le micro-contrôleur de milieu de gamme qui convient le mieux à un novice. Ces micro-contrôleurs sont peu coûteux et répondent à tous les usages grâce à ses nombreuses interfaces — 1024 octets (14 bits de longueur) de mémoire programme, 68 octets de RAM et 64 octets d'EEPROM (cela vous semble insuffisant ? En fait, c'est plus qu'il n'en faut). Le 16F84™ est dans un boîtier 18 broches et dispose de 13 broches d'entrées/sorties numériques. A l'intérieur de la puce, sont présents un temporisateur et un contrôleur d'interruption. En plus de cela, il permet la programmation in-situ en mode série. D'autres documentations sont disponibles sur le site officiel de MicroChip.

3. Matériels nécessaires

Afin d'écrire le code machine dans le PIC, il faut un programmateur. Une large variété de circuit de programmation est disponible sur le réseau, du plus simple au plus complexe. Le plus utilisé d'entre eux est le programmateur de PIC de David Tait. Ce circuit est simple et facile à monter. Il est nécessaire de posséder une alimentation délivrant au moins 15V continus afin d'utiliser correctement le circuit.

4. Logiciels nécessaires

4.1 Programmateur

pp (Pic programmateur) est un logiciel issu du projet GNU pour écrire sur le PIC, il fonctionne avec le circuit décrit plus haut. C'est également l'œuvre de David Tait. Il peut être téléchargé depuis le site PIC archive. pp supporte une large gamme de matériels en plus du circuit précédent. La mémoire programme du PIC ne supporte que 1000 cycles d'écriture. pp est très efficace et rapide car il n'écrase que les portions dont le code diffère de celui à transférer. Si le code est identique, il ne ré-écrit pas le code en mémoire.

Utilisation du programmateur de PIC

Après la compilation du binaire de pp, les étapes suivantes sont :

  1. Relier le matériel au port parallèle.

  2. Mettre le circuit sous tension

  3. Se connecter en tant que root

  4. Saisir export PPSETUP=3 afin d'indiquer à pp que le programmateur de circuit PIC classique est utilisé

Maintenant tapez la commande pp. Si tout ce passe bien et que le matériel fonctionne alors pp affiche un message Matériel détecté OK. Il affiche également les options qui peuvent être passées à pp au cours de l'écriture. Dans le cas contraire, il passe en mode débogage, ce qui est utile pour vérifier le matériel.

Si tout va bien, nous pouvons procéder à l'écriture du code machine dans le PIC.

Utilisation de l'assembleur PIC GNU

L'assembleur PIC GNU génère les code machine pour les instructions assembleur en entrées. Après l'assemblage, il génère le code machine au format Intel HEX. Ce code de sortie peut être donné directement en entrée à pp.

gpasm peut être téléchargé depuis le site gputils qui contient de nombreux logiciels pour la famille PIC.

Bonjour le monde !!!

Nous allons écrite notre premier premier programme pour faire clignoter un groupe de (disons 8) diodes électroluminescentes (DEL). Les DELs sont reliées aux 8 broches de PORTB. Nous devons donc les configurer en tant que broches de sorties. Une fois PORTB configuré en port de sortie, nous pouvons envoyer des 1 et des 0 dans les 8 bits de PORTB (qui correspondent aux 8 DELs) avec une temporisation entre chaque.

Utilisez votre éditeur favori (tel que vi ou EMacs) pour écrire le code assembleur. La première ligne du code doit indiquer le micro-contrôleur utilisé (si vous utilisez GPASM). Nous pouvons à présent écrire notre code. Le code pour faire clignoter les DELs est le suivant : version texte

 list p=16f84            ;Précise le micro-contrôleur utilisé.
 f      equ     1
 porta          equ     0x5             ;Indique l'adresse de chaque port
 portb          equ     0x6             ;
 Delay_i        equ     0xc             ;Le premier octet de RAM disponible.
 Long_Delay_i   equ 0xd
 tmp            equ     0xe

        goto Main
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;
 ; Sous-routine générant une tempo de 1 ms avec une horloge de 4Mhz pour le PIC.
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Delay
        movlw 0xff
        movwf Delay_i
 L1     nop
        decfsz Delay_i, f
        goto L1
        return
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;
 ;      Sous-routine générant une tempo de 1 seconde ( environ ).
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Long_Delay
        movwf tmp
        movlw 0xff
        movwf Long_Delay_i
 L2     call Delay
        decfsz Long_Delay_i, f
        goto L2
        movf tmp,w
        return
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;
 ;Le code ci-dessous configure tous les ports en tant que sortie.
 ;Pour configurer une port en tant qu'entrée, il faut mettre à 1 
 ;le correspondant dans le registre TRIS.
 ;Exemple: pour utiliser la broche portb0-3 en entrée et toutes les 
 ;autres en sortie, utilisez les instructions
 ;
 ;      movlw 0x0
 ;      tris porta
 ;      movlw 0x0F
 ;      tris portb
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Main
        movlw 0x0
        tris porta
        tris portb

        movlw 0xff
        movwf portb
 L3
        call Long_Delay         ;Clignotement avec temporisation de 1s.
        comf portb,f            ;complément portb
        goto L3

        end
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Sauvez le fichier avec l'extension .s. Le code peut être assemblé en saisissant la commande gpasm filename.s. En l'absence d'erreur, le code d'erreur sera dans le fichier filename.hex. A présent, tapez les commandes suivantes pour écrire le code.

$ export PPSETUP=3
$ pp -xp filename.hex

L'option -x indique que l'oscillateur à quartz du circuit est utilisé et -p indique que nous voulons activer la temporisation du mise en route du PIC. Les autres options habituelles sont :

-e --- pour efface la mémoire programme et la mémoire EEPROM -w --- pour activer la temporisation du chien du garde -v --- pour vérifier le code.

La figure ci-dessous montre le matériel requis pour exécuter le programme [circuit.jpg]

Alors qu'attendez-vous ? Commencez à bidouiller avec les PIC ;-)

Jerry Sebastian

Je suis étudiant en dernière année de formation en Électronique et Communication à l'Université Publique d'Ingénierie, Thrissur, Kerala, Inde.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.