Programmer les microcontr�leurs AVR avec GCC, libc 1.0.4
ArticleCategory: [Choose a category, do not translate this]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or
http://homepage]
original in en Guido
Socher
en to fr Iznogood
AboutTheAuthor:[A small biography about the author]
Guido aime Linux car c'est r�ellement un bon syst�me pour d�velopper
son propre mat�riel.
Abstract:[Here you write a little summary]
Le microcontr�leur RISC 8 bits AVR d'Atmel est un microcontr�leur tr�s
commun. Ce microcontr�leur est un circuit avec une EEPROM, une Ram, un
convertisseur Analogique vers Num�rique, beaucoup d'entr�es/sorties
num�riques, des compteurs, un UART pour les communications RS232 et
bien d'autres choses.
Le meilleur est n�anmoins qu'un environnement complet de programmation
est disponible sous Linux: Vous pouvez programmer ce microcontr�leur en
C en utilisant GCC.
J'ai d�j� �crit un article
en Mars 2000 sur le m�me sujet. Beaucoup de choses ont chang� dans le
d�veloppement d'avr-libc et le microcontr�leur AT90S4433 utilis� en
2002 n'est plus fabriqu� par Atmel. Cet article est donc une mise �
jour de celui de Mars 2002. Je vais utiliser libc-1.0.4 et le
microcontr�leur ATmega8.
Cet article n'est qu'une introduction et dans une prochaine s�rie
d'articles, nous construirons des circuits int�ressants mais bas� cette
fois sur l'ATmega8.
ArticleIllustration:[This is the title picture for your article]
ArticleBody:[The article body]
Introduction
Plusieurs personnes ont �t� int�ress�es dans la programmation d'un
microcontr�leur, article �crit en 2002. N�anmoins la premi�re �tape
pour installer l'environnement de d�veloppement et son lancement est le
plus difficile. Si quelque chose ne fonctionne pas correctement, alors
vous n'avez aucune aide pour conna�tre l'origine du d�faut. Est-ce le
c�ble de programmation? Est-ce le circuit qui est en cause? Une
installation incorrecte? Un port parall�le d�sactiv� dans le bios? Les
modules de noyau pour ppdev mal compil�s? Il peut y avoir un tas de
raisons pour que les choses aillent mal.
Pour rendre l'entr�e dans le monde excitant des microcontr�leurs plus
facile, shop.tuxgraphics.org
vous offre maintenant un CD bootable avec un manuel et le mat�riel de
programmation. Tout ce dont vous avez besoin est de d�marrer depuis le
CD et tout est configur�, pr�t � fonctionner. Aucune installation
logicielle n'est n�cessaire et rien n'est modifi� sur votre ordinateur.
J'utilise moi aussi ce CD depuis longtemps car les circuits que je
construis survivent � plusieurs g�n�rations de noyaux et
d'installations de logiciels sur mon PC. Si, plus tard, je veux mettre
� jour quelques logiciels de microcontr�leurs, je n'ai alors pas � me
demander si le fonctionnement de mon environnement de d�veloppement sur
mon Linux est encore fonctionnel. Je d�marre simplement depuis le CD et
tout est pr�t � fonctionner.
Ind�pendement de ce CD, je vais expliquer l'installation de
l'environnement de d�veloppement GCC avr dans les paragraphes suivants.
Si vous avez le CD de tuxgraphics continuez alors avec le chapitre "Un
petit projet de test".
Installation logicielle: Ce dont vous avez besoin
Pour utiliser l'environnement de d�veloppement GNU C, vous avez
besoin des logiciels suivants:
binutils-2.15.tar.bz2 |
Disponibles depuis:
ftp://ftp.gnu.org/gnu/binutils/
ou tout miroir. I.e:
ftp://gatekeeper.dec.com/pub/GNU/binutils/ |
gcc-core-3.4.2.tar.bz2 |
Disponible depuis: ftp://ftp.gnu.org/gnu/gcc/
ou tout miroir. I.e:
ftp://gatekeeper.dec.com/pub/GNU/gcc/ |
avr-libc-1.0.4.tar.bz2.tar |
La biblioth�que C pour AVR est disponible depuis:
http://savannah.nongnu.org/projects/avr-libc/ |
uisp-20040311.tar.bz2 |
Le logiciel de programmation AVR est disponible depuis:
http://savannah.nongnu.org/projects/uisp |
Nous allons installer tous les programmes sur /usr/local/avr. Cela
permet de garder le programme s�par� de votre compilateur C Linux.
Cr�ez ce r�pertoire avec la commande:
mkdir /usr/local/avr
Vous pouvez d�j� l'ajouter � votre PATH:
mkdir /usr/local/avr/bin
export PATH=/usr/local/avr/bin:${PATH}
Installation logicielle de: GNU binutils
Le paquet binutils fournit tous les utilitaires bas niveau n�cessaires
pour construire les fichiers objets. J'ai inclus un assembleur AVR
(avr-as), un linker (avr-ld), des outils de traitement de biblioth�ques
(avr-ranlib, avr-ar), les programmes pour g�n�rer les fichiers objets
chargeables dans l'EEPROM du microcontr�leur (avr-objcopy), un
d�sassembleur (avr-objdump) et des utilitaires tels que avr-strip et
avr-size.
Lancez les commandes suivantes pour construire et installer les
binutils :
tar jxvf binutils-2.15.tar.bz2
cd binutils-2.15/
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls
make
# comme root:
make install
Ajoutez la ligne /usr/local/avr/lib au fichier /etc/ld.so.conf et
lancez la commande /sbin/ldconfig pour reconstruire le cache linker.
Installation logicielle: AVR gcc
avr-gcc sera notre compilateur C.
Lancez la commande suivante pour le construire et l'installer:
tar jxvf gcc-core-3.4.2.tar.bz2
cd gcc-3.4.2
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c
make
# comme root:
make install
Installation logicielle: La biblioth�que C AVR
La biblioth�que C est maintenant assez stable compar�e � celle que j'ai
pr�sent� en Mars 2002.
Lancez la commande suivante pour la construire et l'installer:
tar jxvf avr-libc-1.0.4.tar.bz2.tar
cd avr-libc-1.0.4
PREFIX=/usr/local/avr
export PREFIX
sh -x ./doconf
./domake
cd build
#comme root:
make install
Installation logicielle: Le Programmateur
Le logiciel du Programmateur charge le code objet sp�cialement pr�par�
dans l'EEPROM de notre microcontr�leur.
Le programmateur uisp pour Linux est tr�s bon. Il peut �tre utilis�
directement depuis un Makefile. Vous avez simplement � ajouter une
r�gle "make load", ce qui vous permet de compiler et charger le
logiciel en une passe.
uisp est install� comme suit:
tar jxvf uisp-20040311.tar.bz2.tar
cd uisp-20040311
./configure --prefix=/usr/local/avr
make
# comme root:
make install
Un petit projet de test
Nous allons d�buter avec un petit circuit de test que vous pourrez
�tendre plus tard.
Ce circuit peut aussi �tre utilis� comme un simple environnement de
test pour du logiciel plus complexe. Vous pouvez facilement tester le
logiciel charg� et lier des capteurs ou un �quipement de mesure.
Notre programme de test, pr�sent� ici, ne fera que clignoter une LED.
Mat�riel n�cessaire
![[test circuit]](../../common/images2/article352/avrm8ledtest_circuit.jpg)
Vous avez besoin des composants list�s dans la table ci-dessous. Bien
qu'il soit un microcontr�leur commun, il peut ne pas �tre disponible
dans la boutique du coin mais il le sera chez des distributeurs
d'�lectronique plus gros comme www.conrad.de (allemagne),
www.selectronic.fr (france), digikey.com (US, CA), etc...
Vous pouvez aussi obtenir le kit complet ou seulement le
microcontr�leur sur shop.tuxgraphics.org
1 x ATmega8 version DIP, processeur Atmel 8 bit Avr risc. |
1 x 28 broches 7.5mm support de CI
Le support 28 broches est un peu plus difficile � obtenir. Ces supports
28 broches sont souvent � 14mm de large mais nous avons besoin d'un
support � 7.5mm. |
1 x r�sistance 10K (code couleur: marron,noir,orange)
1 x r�sistance 1K (code couleur: marron,noir, rouge)
1 x condensateur �lectrolytique 10uF
Quelques c�bles
1 x LED
une plaque pr�-perc�e
|
Ce qui suit est n�cessaire pour le programmateur (ce
n'est pas n�cessaire si vous avez le "kit de programmation AVR Linux de
tuxgraphics):
1 x connecteur DB25 � brancher sur le port parall�le.
Tout type de connecteur/support � 5 broches pour le programmateur. Je
recommande l'utilisation de connecteurs tulipes (similaires aux
supports de circuits) et d'en d�tacher 5 broches.
1 x r�sistance 220 Ohms (code couleur: rouge, rouge, marron)
3 x r�sistance 470 Ohms (code couleur: jaune, violet, marron)
|
En plus des composants ci-dessus, vous avez besoin d'une alimentation
DC de 5V �lectroniquement stabilis�e ou vous pouvez utiliser une pile
de 4.5V comme alimentation.
Vous avez probablement remarqu� que nous n'avons pas besoin de quartz.
C'est parce que l'ATmega8 poss�de maintenant un oscillateur int�gr�.
Cet oscillateur peut �tre utilis� lorsque la gestion du temps n'est pas
vitale. Si vous voulez n�anmoins construire un �quipement de mesure
pr�cis ou si vous souhaitez utiliser l'interface UART/RS232 alors, vous
avez besoin d'un quartz. Le type d'oscillateur utilis� peut �tre d�fini
par les bits fusibles que vous pouvez modifier avec le programmateur.
Par d�faut (configuration d'usine), l'oscillateur d'1Mhz est actif.
Fabriquer le mat�riel du programmateur
Les microcontr�leurs AVR permettent la programmation in situ (ISP). ![[Linux AVR programmer]](../../common/images2/article352/avr_programmer.jpg)
Cela signifie que vous n'avez pas besoin de retirer le microcontr�leur
de la carte pour le programmer. Vous verrez que vous pouvez obtenir
diff�rents mat�riels de programmation pour 50-150 Euro. N�anmoins, avec
Linux, il est aussi possible de fabriquer un programmateur tr�s simple
qui fait le travail. Vous avez besoin d'un port parall�le libre sur
votre ordinateur et du c�ble suivant.
Notez que c'est un programmateur am�lior� compar� � celui pr�sent� dans
l'article de Mars 2002. Nous pla�ons les r�sistances de protection dans
le programmateur. Cela permettra de pr�server un peu d'espace et des
composants sur la carte. Le c�blage pour le c�ble de programmation doit
�tre comme suit:
broche sur pcb |
broche sur AVR |
r�sistance de protection |
broche sur port parall�le |
5 |
Reset (1) |
-- |
Init (16) |
4 |
MOSI (17) |
470 Ohms |
D0 (2) |
3 |
MISO (18) |
220 Ohms |
Busy (11) |
2 |
SCK (19) |
470 Ohms |
Strobe (1) |
1 |
GND |
-- |
GND (18) |
Le c�ble ne doit pas faire plus de 70cm.
Les r�sistances de protection peuvent �tre plac�es dans le connecteur
comme montr� sur l'image � droite.
�crire des programmes
L'ATmega8 peut �tre programm� en C pur avec l'aide de gcc. La
connaissance de l'assembleur AVR peut �tre utile mais n'est pas
n�cessaire.
La libc AVR est fournie avec avr-libc-user-manual-1.0.4.pdf
(1139921 octets) qui documente toutes les fonctions disponibles en
C. Sur le site d'Atmel (www.atmel.com,
allez dans: avr products -> 8 bit risc-> Datasheets), vous pouvez
y t�l�charger la documentation technique compl�te. Elle d�crit tous les
registres et comment utiliser le CPU.
Une chose � garder en m�moire lors de l'utilisation d'un
microcontr�leur est qu'il ne poss�de que peu d'octets en m�moire vive.
Cela signifie que vous ne devez pas d�clarer de grandes structures de
donn�es ou des cha�nes de caract�re. Votre programme ne doit pas
utiliser des fonctions avec beaucoup de niveaux d'imbrications ou de
r�cursions.
Rien de mieux qu'un peu de pratique � la place des grandes th�ories.
Nous allons �crire un programme qui fait clignoter notre LED avec un
intervalle de 0.5 secondes. Pas tr�s utile mais tr�s bon pour d�buter.
avr-libc a beaucoup chang�. Avant, vous positionniez un bit sur un port
avec sbi et vous l'effaciez avec cbi. Ces fonctions sont maintenant
obsol�tes. Je pr�sente d'abord la "bonne vieille m�thode":
/* defines for future compatibility */
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void main(void)
{
/* INITIALIZE */
/* enable PC5 as output */
sbi(DDRC,PC5);
/* BLINK, BLINK ... */
while (1) {
/* led on, pin=0 */
cbi(PORTC,PC5);
delay_ms(500);
/* set output to 5V, LED off */
sbi(PORTC,PC5);
delay_ms(500);
}
}
L'exemple suivant fait exactement la m�me chose mais utilise la
nouvelle syntaxe:
void main(void)
{
/* INITIALIZE */
/* enable PC5 as output */
DDRC|= _BV(PC5);
/* BLINK, BLINK ... */
/* PC5 is 5 (see file include/avr/iom8.h) and _BV(PC5) is 00100000 */
while (1) {
/* led on, pin=0 */
PORTC&= ~_BV(PC5);
delay_ms(500);
/* set output to 5V, LED off */
PORTC|= _BV(PC5);
delay_ms(500);
}
}
Le petit bout de code ci-dessus montre comme il est facile d'�crire un
programme. Vous voyez seulement le programme principal, la fonction
delay_ms est incluse dans le listing
complet (avrm8ledtest.c). Pour utiliser la broche PC5 comme sortie,
vous avez besoin d'initialiser le bit PC5 dans le registre de direction
de donn�es pour le port C (DDRC). Apr�s ceci, vous pouvez mettre PC5 �
0V avec la fonction cbi(PORTC,PC5) (clear bit PC5) ou � 5V avec
sbi(PORTC,PC5) (set bit PC5). La valeur de "PC5" est d�finie dans
iom8.h qui est incluse par io.h. Vous n'avez pas � vous en inqui�ter.
Si vous avez d�j� �crit des programmes pour multi-utilisateurs / des
syst�mes multi-t�ches tels que Linux, vous savez qu'il ne faut jamais
programmer une boucle sans fin non bloqu�e. Cela serait une perte de
temps CPU et cela ralentirait de beaucoup le syst�me. Dans le cas de
l'AVR, c'est diff�rent. Nous n'avons pas plusieurs t�ches et il n'y a
pas d'autre programme. Il n'y a m�me pas de syst�me d'exploitation. Il
est consid�r� comme normal d'occuper des boucles ind�finiment.
Compiler et charger
Avant de d�marrer, assurez-vous que /usr/local/avr/bin est dans le
PATH. Si n�cessaire, �ditez votre .bash_profile ou .tcshrc et ajoutez:
export PATH=/usr/local/avr/bin:${PATH} (pour bash)
setenv PATH /usr/local/atmel/bin:${PATH} (pour tcsh)
Nous utilisons le port parall�le et uisp pour programmer l'AVR. Uisp
utilise l'interface ppdev du noyau. Vous devez donc avoir les modules
de noyau suivants charg�s:
# /sbin/lsmod
parport_pc
ppdev
parport
Contr�lez avec la commande /sbin/lsmod qu'ils sont charg�s et si ce
n'est pas le cas, chargez-les (comme root) avec:
modprobe parport
modprobe parport_pc
modprobe ppdev
Une bonne id�e est d'ex�cuter ces commandes automatiquement au
d�marrage. Vous pouvez les ajouter comme un script rc (i.e. pour Redhat
/etc/rc.d/rc.local).
Pour utiliser l'interface ppdev comme utilisateur normal, root doit
vous donner l'acc�s en �criture en lan�ant la commande suivante une
fois
chmod 666 /dev/parport0
Assurez-vous aussi qu'aucun d�mon d'impression ne fonctionne sur le
port parall�le. Si vous en avez un qui tourne, arr�tez-le avant de
connecter le c�ble de programmation. Maintenant, tout est pr�t pour
compiler et programmer notre microcontr�leur.
Le paquet pour notre programme de test, (avrm8ledtest-0.1.tar.gz)
inclut un make file. Tout ce que vous avez � faire est de saisir:
make
make load
Cela compilera et chargera le logiciel. Je ne vais pas entrer dans les
d�tails de toutes les commandes. Vous pouvez les voir dans le Makefile
et elles sont toujours identiques. Je ne peux pas toutes me les
rappeler. J'ai juste besoin de savoir utiliser "make load". Si vous
voulez �crire un programme diff�rent, remplacez alors toutes les
occurences de avrm8ledtest dans le Makefile avec le nom de votre
programme.
Quelques binutils int�ressants
Quelques binutils sont plus int�ressant que le processus de compilation
actuel.
Ces utilitaires n'ont n�anmoins pas beaucoup chang� depuis Mars 2002.
Jetez un coup d'oeil au chapitre "Quelques "binutils" int�ressants" sur
l'article231
de Mars 2002.
Id�es et suggestions
L'ATmega8 est compatible � l'AT90S4433 pour la plupart des
utilisations. Vous devez programmer les bits fusible pour utiliser
l'oscillateur externe et les circuits pr�c�demment pr�sent�s devraient
fonctionner avec quelques changements mineurs. Malheureusement, je n'ai
pas encore le temps de re-tester tous les circuits pour l'ATmega8. Si
vous voulez la s�curit�, utilisez l'AT90S4433 pour les vieux articles.
Si vous n'avez pas peur de trouver et r�gler des probl�mes, tentez
alors l'ATmega8 avec les vieux articles/circuits.
Vous avez ici une liste des pr�c�dents articles sur des circuits:
Notez que le programmateur pr�sent� ici inclus d�j� les r�sistances de
protection qui ont �t� plac�es sur la carte dans les pr�c�dents
articles avec des circuits. Pour utiliser le nouveau programmateur avec
les anciennes cartes, vous avez simplement � remplacer les r�sistances
de protection sur la carte avec des fils.
R�f�rences