Installer et configurer un environnement de developpement avr-gcc pour microcontroleurs Atmel AVR

De Wiki de la communauté Mandriva.


Installation et configuration des différents outils logiciels comme avr-gc sur Mandriva Linux 2010.1 ou supérieur pour développer, compiler et tester des programmes pour microcontroleurs Atmel AVR ou simuler ces microcontroleurs Atmel AVR qui sont utilisé entre autres sur les modules en Open Source Arduino.

Sommaire

Introduction

Le but de cet article est d'expliquer où trouver et comment installer un ensemble de logiciels (compilateur: avr-gcc et simulateur: simavr) nécessaire au développement, à la compilation de programmes, et à la simulation de ces derniers sur microcontroleurs Atmel AVR qui sont utilisé entre autres sur les modules en Open Source Arduino sur Mandriva Linux. Un module Arduino regroupe sur la meme carte eléctronique : un microcontrooleur, une connexion USB ou série pour la programmation, un port d'alimentation électrique, une horloge pour microcontroleur, des ports d'entrée/sortie numérique et analogique. L'installation de l'environnement pour Arduino fera l'objet d'un chapitre dans cet article ou d'un article à part dans ce wiki

Installation des prérequis pour le dévelopement

Pour développer en assembleur, langage C ou C++ sur Atmel AVR, il est nécessaire d'installer les logiciels GNU suivants via le Mandriva Control Center ou la commande en ligne urpmi :

Avant tout les métapaquetages pour le développement en C et C++ :

  • task-c-devel - Metapackage for C development​ 
  • task-c++-devel - Metapackage for C++ development​
  • task-x11 - Méta-paquetage pour X.org X11​  

puis

  • avr-libc : The C Runtime Library for AVR Microcontrollers (headers *.h et librairies statiques *.a)
  • avra : An AVR assembler​
  • avrdude : Software for programming Atmel AVR Microcontroller​ 
  • cross-avr-binutils - Utilitaires de développement binaire de GNU​ pour AVR
  • cross-avr-gcc - Collection de compilateurs de GNU​ pour développer en langage C
  • cross-avr-gcc-c++ - Support C++ pour gcc​
  • cross-avr-gcc-cpp - Le préprocesseur C
  • tavrasm - A AVR assembler​

Note: Le nom des paquetages des compilateurs GCC pour Atmel AVR s'appellent habituellement avr-gcc comme chez Fedora, or chez Mandriva ils ont été renommés en cross-avr-gcc.

Installation d'un simulateur de microcontroleur Atmel AVR

simavr

Installation de simavr

Afin de faciliter le développement, nous allons installer simavr qui est logiciel qui simule différents types de microcontroleur Atmel AVR d'apres les instructions données sur cette page.

1) Installez les prérequis pour le développement indiqués plus haut et qui sont les outils GNU GCC.
2) Installer les paquetages nécessaires à la compilation du simulateur via le Mandriva Control Center ou la commande en ligne urpmi:

  • libelfutils-devel - Development libraries to handle compiled objects​
  • libelfutils-static-devel - Static libraries for development with libelfutils​ 
  • libmesaglut3 - Fichiers pour Mesa (gluts libs)​ 
  • libmesaglut3-devel - Development files for glut libs
  • git-core - Global Information Tracker​ (récupération des sources de simavr)
  • socat - Multipurpose relay​ (nécessaire pour simuler les modules Arduino avec le simulateur)

3) Créer un répertoire pour accueillir les sources de simavr :

cd 
mkdir simavr
cd simavr

4) récupération des sources :

git clone git://gitorious.org/simavr/simavr.git simavr-git

5) Modification du fichier Makefile.common du code source pour adapter le réprtoire des entetes *.h et *.a à Mandriva Linux

cd simavr-git
vim Makefile.common (ou avec un autre editeur de texte Makefile.common)

Remplacer la ligne

#AVR_ROOT := /usr/lib/avr

par

AVR_ROOT := /usr/avr

6) Lancer la compilation :

make

7) Lorsque la compilation est terminée, lancez la commande suivante afin de tester l'émulateur :

./simavr/run_avr tests/atmega88_example.axf

vous devrez avoir une sortie à l'écran comme celle-ci :

AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
Loaded 1752 .text
Loaded 114 .data
Loaded 4 .eeprom
Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
atmega88 init
avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
Creating VCD trace file 'gtkwave_trace.vcd'
Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
Read from eeprom 0xcafef00d -- should be 0xcafef00d..
simavr: sleeping with interrupts off, quitting gracefully            ​ 

Dans ce cas, l'émulateur simavr fonctionne.

Test du futur émulateur Arduino de simavr

Les instructions données pour configurer et lancer ce futur émulateur Arduino de simavr sont données sur cette page.

Ce programme permettra d'émuler un arduino. A l'heure actuelle, il charge le chargeur de démattage (bootloader), puis attend ensuite sur son "port série" (un socket UDP sur le port 4321) jusqu'à ce que quelqu'un le programme... ou finalement la temporisation arrive à expiration et il exécute alors l'application précédente qui était programmée. Actuellement pour le programmer, vous avez besoin de "socat" pour créer un pont entre avrdude et simavr.

Attention les opérations ci-dessous doivent être réalisées rapidement sous peine de fin de temporisation.

1) Lancement du pont par socat entre avrdude et simavr :

[user@localhost simavr]$ socat -d -d PTY UDP:localhost:4321 &                                                                                                                                                    
[1] 27598                                                                                                                                                                                                          
[webadm@localhost simavr]$ 
2010/10/03 15:50:08 socat[27598] N PTY is /dev/pts/2                                                                                                                                    
2010/10/03 15:50:08 socat[27598] N opening connection to AF=2 127.0.0.1:4321                                                                                                                                       
2010/10/03 15:50:08 socat[27598] N successfully connected from local address AF=2 127.0.0.1:45618                                                                                                                  
2010/10/03 15:50:08 socat[27598] N starting data transfer loop with FDs [3,3] and [5,5]

Appuyez sur la touche Entrée.
Note : ATTENTION, notez que le périphérique utilisé pour PTY est /dev/pts/2 (nécessaire plus tard)
Note : le & à la fin de la ligne sert à lancer la commande en arrière-pla pour rfécupérer la console et lance d'autres commandes.

2) Une fois que ce pont est en place, lancez simduino:

cd examples/board_simduino
[user@localhost board_simduino]$ ./simduino &
[2] 28491
[user@localhost board_simduino]$ Starting atmega328 - flashend 7fff ramend 08ff e2end 03ff
atmega328 init
read_ihex_file: ./ATmegaBOOT_168_atmega328.ihex, unsupported check type 03
Booloader 7800: 1950
uart_udp_init bridge on port 4321
UART-0 configured to 0010 = 58823 baud

Une fenêtre graphique X avec le titre Glut apparait.
Revenez dans la console et appuyez sur la touche Entrée.

3) Dès que c'est fait, vous avez 60 secondes pour programmer l'Atmel virtuel (voir ci-dessous). Récupérer la valeur de PTY indiquée en 1) et donnez la apres le paramètre -P

[user@localhost board_simduino]$ avrdude -p m328p -c arduino -P /dev/pts/2 -U flash:w:atmega328p_dummy_blinky.hex &
[3] 30240
[user@localhost board_simduino]$ ioctl("TIOCMGET"): Invalid argument
ioctl("TIOCMGET"): Invalid argument
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
        To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "atmega328p_dummy_blinky.hex"
avrdude: input file atmega328p_dummy_blinky.hex auto detected as Intel Hex
avrdude: writing flash (454 bytes):
Writing |                                                    | 0% 0.00sErasing page 0000 (128)
Writing page 0000 (128)
Writing | ##############                                     | 28% 0.04sErasing page 0001 (128)
Writing page 0001 (128)
Writing | ############################                       | 56% 0.08sErasing page 0002 (128)
Writing page 0002 (128)
Writing | ##########################################         | 84% 0.11sErasing page 0003 (128)
Writing page 0003 (128)
Writing | ################################################## | 100% 0.14s
avrdude: 454 bytes of flash written
avrdude: verifying flash memory against atmega328p_dummy_blinky.hex:
avrdude: load data flash data from input file atmega328p_dummy_blinky.hex:
avrdude: input file atmega328p_dummy_blinky.hex auto detected as Intel Hex
avrdude: input file atmega328p_dummy_blinky.hex contains 454 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.11s
avrdude: verifying ...
avrdude: 454 bytes of flash verified
avrdude: safemode: Fuses OK
ioctl("TIOCMGET"): Invalid argument
avrdude done.  Thank you.
simavr: sleeping with interrupts off, quitting gracefully
2010/10/03 16:04:28 socat[30230] E read(5, 0x9e93ff0, 8192): Connection refused
2010/10/03 16:04:28 socat[30230] N exit(1

simduino vous a montré que :

   Erasing page 0000 (128)
   Writing page 0000 (128)
   Erasing page 0001 (128)
   Writing page 0001 (128)
   Erasing page 0002 (128)
   Writing page 0002 (128)
   Erasing page 0003 (128)
   Writing page 0003 (128)

Et puis ensuite saute vers le programme qui a été programmé. L'exemple ne fait pas quelque chose d'utile, c'est un espace réservé ...

Note : il existe pour ce simulateur, un exemple de rampe à leds, de temporisation (timer) à LEDs.

GNU AVR Simulator

Il existe un simulateur pour AVR appelé GNU AVR Simulator à l'adresse suivante avr.sourceforge.net mais il n'est plus mis à jour depuis 2003 et il n'est pas possible de le compiler avec openmotif 2.3.2 disponible sur Mandriva Linux. captures d'écran

Simulavr: an AVR simulator

Il existe un autre simulateur pour AVR appelé Simulavr à l'adresse suivante savannah.nongnu.org/projects/simulavr/ mais sa dernière mise à jour en 0.1.2.6 date de Mars 2009.

Vmlab via Wine

Vmlab est le meilleur simulateur gratuit disponible pour Atmel AVR. L'ensemble de ces caractériques est décrites sur cette page. Il est à noiter qu'en fonctionnant avec Wine, certaines de ces fonctions comme l'aide ne fonctionneront pas et d'autres fonctionnalités comme des problèmes d'affichage de polices,fenêtres et icones décrites sur cette page.

1) Installez d'abord l'émulateur Wine pour les programme MS Windiows. (Version 1.2.0 avec la 2010.1)

2) Téléchargez Vmlab (fichier Insall_VMLAB315.exe) sur la page http://www.amctools.com/download.htm

3) Lancez installation de Vmlab via la commande suivante :

wine Install_VMLAB315.exe

puis répondez aux questions lors de l'installation en laissant la plupart des paramètres par défaut.Pensez à cocher la case pour Lancer Vmlab à la fin de l'installation.

4) Configurez Vmab suivant les instructions ci-dessous données sur cette page :

"To use VMLAB together with the native Unix AVR toolchain, In menu Project-> New project, select Any 3rd party high level language generating COFF as the toolchain in the project file, but no optional build command. Compile the job externally, then run Project -> Build in VMLAB (or key F9), in order to make VMLAB prepare the project for simulation. Note that the external toolchain must produce both, an Intel Hex file containing the contents of the device's flash ROM and the COFF file for symbolic debugging information."

Note: astuce pour Making a COFF out of an ELF binary is not supported by avr-gcc (avr-objcopy) by default so you need to look for the "cdk-avr-binutils" for your linux distribution.

Installation de l'environnement de développement pour Arduino

Il existe des paquetages RPM créer par la communauté italienne de Mandriva Linux mais qui ne sont pas à jour et posent des problèmes de dépendances. Si vous êtes intéressé, voir ce lien Arduino packet for Mandriva 2010.

Nous allons donc installer l'ensemble des éléments nécessaire au fonctionnement de l'environnement de développement en Java pour Arduino suivant la procédure ci-dessous :

1) Si ce n'est pas déjà fait, installez tous les paquetages du chapitre "Installation des prérequis pour le dévelopement" de cet article.

2)Installer le Sun Java JRE 1.6 Verifier que les packages Java suivant sont installés (ici en version 1.6.0_21):

  • java-1.6.0-sun
  • java-1.6.0-sun-alsa
  • java-1.6.0-sun-fonts
  • java-1.6.0-sun-jdbc
  • java-1.6.0-sun-plugin
  • java-access-bridge

Afin d'éviter des conflits et incompatibilités avec le Java JRE 1.6 de Sun, vérifiez que les paquetages java-1.6.0-openjdk et gcj sont désinstallés sur votre PC. Le SDK est incompatible avec java-1.6.0-openjdk et gcj.

3) Installez les paquetages rxtx qui permettent les communications en série et en parallèle avec le Java Development Toolkit (JDK) :

  • rxtx - serial and parallel I/O libraries supporting Sun's CommAPI​
  • librxtx2.1 - Libraries for rxtx​

et uucp - L'utilitaire uucp de GNU pour copier des fichiers entre systèmes​ puis avec le compte root, mettez les droits comme celà :

groupadd lock
chown :lock /var/lock
chmod g+w /var/lock
usermod -a -G uucp lock -l LOGIN_USER où LOGIN_USER est le login de votre compte utilisateur Linux.                                             

4) Sur la page http://www.arduino.cc/en/Main/Software du site Arduino, téléchargez la dernière version du logiciel Arduino pour Linux. Ou directement via ce lien.

5) Allez dans le répertoire où vous avez mis l'archive du logiciel Arduino et décompresser le.

tar xzvf arduino-0021.tgz

6) Lancez le logiciel :

cd arduino-0021
./arduino

Note : si vous avez au lancement, dans la console, un message d'erreur du type ci-dessous, il faudra lancer arduino en root pour mettre la communication avec la carte ou module Arduino:

check_group_uucp(): error testing lock file creation Error details:Permission non accordéecheck_lock_status: No permission to create lock file.
please see: How can I use Lock Files with rxtx? in INSTALL

7) Une fenetre avec une page blanche doit apparaitre.

8) Utilisez le tutoriel en français sur le site www.mon-club-elec.fr pour vous familiariser avec le logiciel.

Voir aussi