Retrouvez cet article dans : Linux Magazine 90
GPUTILS GNU PIC Utilities
GPUtils est une collection d’outils pour les PIC qui est constituée d’un assembleur, d’un linker et d’un simulateur. La lecture de l’article de Denis Bodor de Linux Magazine n°73 de juin 2005 vous en apprendra un peu plus sur l’utilisation de ces outils en assembleur. Le but de cet article étant la programmation en C, nous nous contenterons d’installer GPUtils pour permettre l’assemblage et l’édition de liens des fichiers assembleur générés par SDCC, ainsi que pour configurer et installer le bootloader. GPUtils a été installé sur une MANDRIVA 2006 avec les paquets RPM de la version 0.13.0. Une fois GPUtils installé, en mode console, tapez      [mandon@(none) Desktop]$ gpasm -v gpasm-0.13.0 beta
SDCCÂ : Small Device C Compiler
SDCC est un compilateur C ANSI libre et multi-cible. Il permet non seulement l’écriture de programmes pour les PIC de Microchip, mais également pour une foule de microprocesseurs plus exotiques les uns que les autres. Outre la célèbre série des 8051 d’INTEL, il permet de développer sur Z80, MOTOROLA 68HC08 et DALLAS. SDCC a été écrit par Sandeep Dutta sous licence GPL. Le code a été transféré sur SourceForge en 1999 permettant à tous les développeurs et utilisateurs d’accéder au code source. SDCC est en perpétuel développement et on ne peut douter d’une constante amélioration de son efficacité. Il est à noter que le développement de SDCC pour AVR et GBZ80 est abandonné. Raphaël NEIDER est responsable du développement de SDCC sur PIC, outre la correction des bugs et l’optimisation du portage sur PIC16, il a réalisé une partie du portage sur PIC14 (série 16FXXX). Nous avons écrit quelques applications sur 16F88 qui s’avèrent stables et efficaces. L’installation de SDCC a été réalisée sur MANDRIVA 2006 sans problème particulier à partir du paquetage RPM de la version 2.6.0. Des paquets DEBIAN sont également disponibles, à défaut pour les autres distributions, un fichier TAR compressé est utilisable. À noter que nous avons également utilisé ce compilateur sous CYGWIN sans problème. Une fois SDCC installé, en ouvrant une console terminal, tapez[mandon@(none) Desktop]$ sdcc SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.6.0 #4 309 (Sep 29 2006) (UNIX) Usage : sdcc [options] filenameNous allons d’ores et déjà tester son fonctionnement. Pour cela, ouvrez un éditeur de texte et recopiez le source en C ci-dessous :
#define __18F458
#include <pic18F458.h>
#pragma stack 0x200 100
unsigned int i;
void main(void) {
TRISB = 0;
while(1) {
PORTBbits.RB7=1;
for (i=1;i<10000;i++);
PORTBbits.RB7=0;
for (i=1;i<10000;i++);
}
}
Après avoir créé un dossier projet, enregistrez le fichierwarning: processor mismatch in "/usr/bin/../share/sdcc/lib/pic16/crt0i.o" message: using default linker script "/usr/share/gputils/lkr/18f458.lkr" warning: processor mismatch in "pic18f458.o"Malgré ces messages d’avertissement, SDCC a compilé, assemblé et linké notre programme. Si l’on analyse le dossier, on va trouver
      /usr/share/sdcc/include/pic16De la même façon, si vous avez décidé de travailler avec des PIC14, vous pourrez analyser les fichiers d’en-tête dans le dossier :
      /usr/share/sdcc/include/picNous allons maintenant étudier d’un peu plus près ce qui se passe lors de la compilation. Pour cela, nous allons ajouter à la ligne de commande l’option
      sdcc -V -mpic16 -p18F458 test.cLe résultat est le suivant :
[mandon@(none) programme 1]$ sdcc -V -mpic16 -p18F458 test.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -Dpic18f458
-D__18f458 -DSTACK_MODEL_SMALL -obj-ext=.o
-DSDCC_MODEL_SMALL -DSDCC=260 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16"
-I"/usr/share/sdcc/include/pic16" "test.c"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL
-Dpic18f458 -D__18F458 -DSTACK_MODEL_SMALL
-c "test.asm" -o "test.o"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16"
-I"/usr/share/sdcc/lib/pic16" -o test test.o crt0i.o pic18f458.lib libsdcc.lib
warning: processor mismatch in
"/usr/bin/../share/sdcc/lib/pic16/crt0i.o"
message: using default linker script
"/usr/share/gputils/lkr/18f458.lkr"
warning: processor mismatch in "pic18f458.o"
On voit en première ligne que SDCC est appelé et on retrouve le chemin des fichiers inclus. Le résultat est un fichier assembleurTransférer le programme dans le microcontrôleur
Il reste maintenant à transférer ce programme- d’un programme à installer dans le microcontrôleur ;
- d’un programme à installer dans le PC assurant la communication.
Tiny Downloader
Nous allons maintenant choisir le bootloader destiné à notre microcontrôleur. Il existe de nombreux programmes assurant cette fonction. Leurs caractéristiques sont relativement proches. Toutefois, on peut apprécier la qualité d’un bootloader selon les critères suivants :- la taille du code résidant dans le PIC ;
- la disponibilité du programme PC dans différents environnements.
      http://www.etc.ugal.ro/cchiculita/software/picbootloader.htmAprès avoir décompressé et enregistré le programme dans votre dossier personnel, vous obtiendrez l’arborescence suivante :
tinybldWin.exe info picsource 16f 18f 1ds other test bankswitch.inc icdtypes.inc spbrgselect.inc Tinybld16_logic.wmf Tinybld18_logic.wmfLe dossier
1: radix DEC 2: LIST P=16F88, F=INHX8M ; change also: Configure->SelectDevice from Mplab 3:xtal EQU 8000000 ; you may also want to change: _HS_OSC _XT_OSC 4:baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200 5: ; The above 3 lines can be changed and buid a bootloader for the desired frequency (and PIC type) 6: 7: ;****************************************************************** 8: ;Tiny Bootloader 16FxxxA series Size=100words 9: ;claudiu.chiculita@ugal.ro 10: ;http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm 11: ;****************************************************************** 12: 13: #include "../icdpictypes.inc" ;takes care of: #include "p16fxxxA.inc", ;max_flash, IdTypePIC 14: #include "../spbrgselect.inc" 15: #include "../bankswitch.inc" 16: #define first_address max_flash-100 ; 100 word in size 17: 18: ;CP CCPMX DEBUG WRT1 WRT0 CPD ;LVP BOREN MCLRE FOSC2 PWRTEN ;WDTEN FOSC1 FOSC0 19: ;1=off 0? 1=off off=1 1 1 0=off 1=on ;1=on 1 0=on 0=off 0 0 20: __CONFIG _CONFIG1, _INTRC_IO & _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & 21: _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF 22: __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFFLes lignes 2,3,4 et 18 à 22 permettent de spécifier les différentes options du processeur que nous allons utiliser. Dans notre cas, le processeur est un 16F88. Cette spécification est à la ligne 2 :
LIST P=16F88, F=INHX8MLa fréquence de l’oscillateur choisie est de 8 Mhz :
xtal EQU 8000000et la vitesse de communication avec le downloader de 19200 bauds :
baud EQU 19200Les bits de configuration sont ensuite définis. Notre application va fonctionner avec l’oscillateur interne du 16F88, sans watchdog et avec un reset externe. Cette spécification est visible à la ligne 20. Les différentes possibilités de configuration du 16F88 peuvent être trouvées dans la documentation Microchip du 16F88, leur illustration est définie par deux mots de configuration dans la mémoire flash
27:errpercent EQU AbsResult*100/baud 28: if (errpercent > 4) 29: ERROR "big error in baudrate:" 30: endif 31: if (errpercent >= 2) 32: MESSG "baudrate not exact:" 33: endifSauvegardez ensuite le fichier en conservant le nom d’origine. Il s’agit maintenant d’adapter le fichier
1: radix DEC 2: LIST P=16F88, F=INHX8M ; change also: Configure->SelectDevice from Mplab 3:xtal EQU 8000000 ; you may also want to change: _HS_OSC _XT_OSC 4:baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200 5: ; The above 3 lines can be changed ; and buid a bootloader for the desired ;frequency (and PIC type) 6: 7: ;***************************************************** 8: ;Tiny Bootloader 16FxxxA series Size=100words 9: ;claudiu.chiculita@ugal.ro 10: ;http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm 11: ;***************************************************** 12: 13: #include "../icdpictypes.inc" ;takes care of: #include ;"p16fxxxA.inc", max_flash, IdTypePIC 14: #include "../spbrgselect.inc" 15: #include "../bankswitch.inc" 16:#define first_address max_flash-100 ; 100 word in size 17: 18: ;CP CCPMX DEBUG WRT1 WRT0 CPD ; LVP BOREN MCLRE FOSC2 PWRTEN ;WDTEN FOSC1 FOSC0 19: ;1=off 0? 1=off off=1 1 1 0=off ;1=on 1=on 1 0=on 0=off 0 0 20: __CONFIG _CONFIG1, _INTRC_IO & _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & 21: _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF 22: __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFFLa modification est à effectuer à la ligne 16. Dans certains cas, cette directive a la forme :
 #define prima_adresa max_flash-100 ; 100 word in sizeNous n’avons plus maintenant qu’à assembler le programme avec GPASM. Pour cela, ouvrez une fenêtre console, allez dans le dossier
gpasm tinybld16F88_i8MHz\ __19200.asm
 picprog --erase --burn --device=pic16f88 --input tinybld16F88_i8MHz\ __19200.hex --pic /dev/ttyS0Le résultat sera le suivant :
Picprog version 1.8.3, Copyright © 2006 Jaakko Hyvatti <Jaakko.Hyvatti@iki.fi> Picprog comes with ABSOLUTELY NO WARRANTY; for details type `picprog --warranty’. This is free software, and you are welcome to redistribute it under certain conditions; type `picprog --copying’ for details. Device pic16f88, program memory: 4096, data memory: 256. Erased and removed code protection. Burning program memory, 102 locations, burning data memory, 0 locations, burning id words, 0 locations, burning fuses, 2 locations, done.

Tiny Downloader
Nous en sommes au stade où la moitié seulement du travail est fait. Il s’agit maintenant d’installer le downloader sur votre machine. Le downloader que nous vous proposons a été écrit en Python avec l’extension PySerial qui permet l’utilisation des ports série sous Linux. Ce programme peut être téléchargé à l’adresse suivante : www.pictec.org. L’interface TK a été utilisée, cette interface proposée en standard dans les différentes versions de Python lui assure une portabilité maximum. Seul le composant PySerial devra être installé. Ce dernier peut être téléchargé à l’adresse suivante : http://pyserial.sourceforge.net. Tiny Downloader reconnaît les ports série de votre machine, et ce, quel que soit l’OS que vous utilisez. La version que vous allez utiliser est la version 1.2. Elle est appelée à évoluer dans les prochains jours (semaines, mois... années !!) selon ma disponibilité et mes besoins... Nous allons maintenant étudier la façon de raccorder notre 16F88 à notre PC et le câblage minimum pour faire quelques essais.La platine d’essais
Pour faire nos essais, nous allons devoir disposer des éléments suivants :- un PIC 16F88 ;
- une résistance de 470 ohms ;
- une LEDÂ ;
- une résistance de 10 kohms ;
- un condensateur chimique de 10 µF ;
- un poussoir ;
- une alimentation 5V continu ;
- un convertisseur RS232/TTL.


Le programme adapté au 16f88
Nous allons maintenant reprendre le programme étudié précédemment et l’adapter au 16F88.#define __16F88
#include <pic16f88.h>
int i;
void main(void) {
TRISB = 0;
while(1) {
PORTB=PORTB|1;
for (i=1;i<10000;i++);
PORTB=PORTB&254;
for (i=1;i<10000;i++);
}
}
Compilez ensuite ce programme : message: using default linker script "/usr/share/gputils/lkr/16f88.lkr"Ce message vous indique que le linker a utilisé le fichier par défaut. Dans le dossier de votre application, vous allez trouver maintenant le fichier
Le transfert du programme
Après avoir enregistré le downloader Python dans un dossier, passez en mode console et tapez :
Conclusion
Cet article nous a permis de mettre en œuvre les différents outils nécessaires au développement d’applications en langage C sur les PIC. Après sa lecture, nous disposons de tous les logiciels permettant de compiler, d’assembler et de transférer des programmes dans ces microcontrôleurs. Reste maintenant à améliorer cette base et à réaliser des applications concrètes et utiles. Dans notre prochain article, nous verrons comment utilliser Scite non seulement comme éditeur de texte, mais également comme environnement de développement pour les PIC. Cette présentation sera suivie par la description de la réalisation d’une carte d’entrées/sorties communicante, le coté hardware étant réalisé autour d’un PIC 16F88 programmé en langage C avec SDCC, le logiciel de commande, lui, étant programmé en Python avec le composant PySerial. Liens- SDCC : http://sdcc.sourceforge.net/
- GPUTILSÂ : http://gputils.sourceforge.net/
- Tiny Bootloader: http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
- Le site de l’auteur : http://www.pictec.org
L’auteur
Jean-Pierre MANDON est ingénieur en électronique et travaille sur les microcontrôleurs depuis 1986. Il a réalisé ses premières applications en assembleur sur INTEL 8031. Il travaille sur les microcontrôleurs Microchip depuis 1995, d’abord en assembleur, puis en langage C depuis 2000. Passionné des systèmes de communications et de programmation réseau, il a commencé l’interfaçage de carte réseau ISA avec des PIC en 1999. Ce projet, PicoIP, a évolué aujourd’hui vers le pilotage de carte PCMCIA et compact flash wifi à l’aide de processeurs de la série 18FXXX. Outre ses travaux sur les systèmes communicants, il dirige depuis 1993 un atelier expérimental de robotique et d’étude comportementale à l’école d’art d’Aix-en-Provence et a participé à la réalisation de nombreuses expériences artistiques. L’atelier est spécialisé dans l’interfaçage d’œuvres artistiques interactives. L’esprit open source qui a toujours animé les projets qu’il a menés l’a poussé à orienter de façon plus nette ses travaux vers Linux et la communauté des développeurs. Il a créé cette année un atelier Linux à l’école d’art d’Aix-en-Provence destiné à encourager l’utilisation de logiciels open source dans le domaine artistique. LAOS, le laboratoire de l’Open Source, est destiné à diffuser, auprès des étudiants des écoles d’arts, des cours et des initiations à des logiciels comme The Gimp, Blender ou Pure Data et de contribuer au développement d’applications open source. Le premier projet de cet atelier est le portage d’Arduino sur PIC. Arduino est un concept de monocarte pour le pilotage d’installations artistiques. Liens- www.ecole-art-aix.fr
- http://atelierloeil.free.fr
- www.pictec.org
 Retrouvez cet article dans : Linux Magazine 90





Donnez votre avis
Vous devez avoir ouvert une session pour écrire un commentaire.