Vous êtes sur la page 1sur 3

Programmation de microcontrleur ATMEL en C Tutorial pour le programme WINAVR

Introduction
Le programme WINAVR est un programme qui permet d'crire un programme en C et de le compiler pour crer les fichiers pour programmer le microcontrleur (avec Ponyprog) ou pour le debuggage avec AVR Studio. Ce programme peut tre tlcharg sur le site de robopoly ou l'adresse http://sourceforge.net/projects/winavr/ Pour pouvoir utiliser ce tutorial, il faut dj savoir utiliser AVR Studio et Ponyprog. Ce tutorial est trs succinct, un tutorial plus complet (en anglais) se trouve sur le site de robopoly. Plusieurs sources d'information sont aussi installes avec le programme et leurs raccourcis crs, qui sont aussi trs utiles. Il suffit de lancer le programmers notepad (abrg pn) pour commencer.

Utilisation du Makefile
Un makefile est un fichier sans extension qui est utilis par le compilateur pour savoir les oprations qu'il doit effectuer. Le programme WINAVR a besoin d'un tel fichier pour pouvoir compiler. Un fichier tout fait se trouve dans le rpertoire Winavr/sample . Il faut donc copier ce fichier dans le rpertoire o les autres fichiers du futur programme seront placs (extensions .c .h par exemple). Ouvrir ce nouveau fichier makefile dans le programmers notepad, puis changer: Le type de microcontrleur # MCU name MCU = atmega8535 Le nom du fichier source contenant la fonction main (par exemple test.c), mais sans extension! # Target file name (without extension). TARGET = test

Un premier programme
Crer un fichier source en slectionnant File->New->C/C++. Puis crire le programme suivant: #include <avr/io.h> #include <avr/delay.h> void main (void) { unsigned char counter; //set PORTB for output DRB = 0xFF; while (1) { //set PORTB.2 high PORTB |= 1<<2; //wait (10 * 120000) cycles = wait 1200000 cycles counter = 0; 1

while (counter != 5) { //wait (30000 x 4) cycles = wait 120000 cycles _delay_loop_2(30000); counter++; } //set PORTB.2 low PORTB &= ~(1<<2); //wait (10 * 120000) cycles = wait 1200000 cycles counter = 0; while (counter != 5) { //wait (30000 x 4) cycles = wait 120000 cycles _delay_loop_2(30000); counter++; } } return 1; } Sauvegarde ce fichier dans le mme rpertoire que le nouveau Makefile. Ce programme contient des fautes pour pouvoir utiliser les mcanismes de correction du code. Ce programme va servir faire clignoter la LED sur le PRISME. Les deux premires lignes incluent des fichiers .h qui se trouvent dans le rpertoire WINAVR/avr/include. Le compilateur arrive les trouver. Le fichier avr/io.h dfinis les registres tels que DDRB, PORTB (les registres pour les entres/sorties, ou input/output en anglais, abrg io). Le fichier avr/delay.h contient des fonctions pour crer des dlais dans le programme (le programme attend un certain temps avant de continuer). Cela permettra de voir la LED clignoter. La prochaine ligne intressante est la ligne o devrait tre crit DDRB = 0xFF; (laisser la faute pour l'instant). En mettant tous les bits 1, le port est configur en sortie. La suite du programme sert faire clignoter la LED. Plus d'information ce sujet peut tre trouv dans le fichier de tutorial en anglais. Maintenant, essayer de compiler le programme avec Tools->Make All. Tout d'abord, un warning s'affiche, mais pas besoin de s'en occuper: test1.c:9: warning: return type of `main' is not `int' Puis, si l'erreur n'a pas t corrige, la premire erreur est test.c:7: error: `DRB' undeclared (first use in this function) Double-click sur cette ligne amne directement la ligne o se trouve l'erreur. Remplacer DRB = 0xFF; Par DDRB = 0xFF; Puis utiliser nouveau Make all. Cette fois, le programme compile sans erreur. Plusieurs nouveaux fichiers ont t crs, dont le fichier l'extension .hex, qui sert programmer le microcontrleur avec Ponyprog. Une fois programm, la LED doit clignoter.

Debuggage avec AVR Studio


WIN AVR peut aussi crer des fichiers pour debugger avec AVR Studio. Ce sont des fichiers Extcoff. Le programme crit auparavant contient de gros dlais, qui ne sont pas trs adapts 2

pour dbugger. On va donc crer un nouveau fichier, test1.c. Auparavant, crer un nouveau rpertoire pour ce projet, et copier le makefile dans ce rpertoire (attention le configurer juste, voir plus haut). Puis crire dans le fichier test1.c le code suivant: #include <avr/io.h> void main (void) { //set PORTB for output DDRB = 0xFF; while (1) { //set PORTB.2 high PORTB |= 1<<2; //set PORTB.2 low PORTB &= ~(1<<2); } return 1; } Ce programme fait la mme chose que les prcdents, mais sans les dlais. Il faut maintenant rajouter une commande dans le Programmers Notepad. Utiliser le menu Tools->Options, puis choisir Tools, ensuite Add. Remplir les champs comme suit: Name: Command: Folder: Parameters: Shortcut: Save: This tool will modify....: Capture output? Clear output buffer? Use built-in parser: Make Extcoff make %d extcoff Aucun None No Use the main output window No Yes

Une fois cr, utiliser ce nouvel outil: Tools->Make Extcoff; le programme va crer plusieurs fichiers, dont test1.cof. Ouvrir ce fichier avec AVR Studio, et slectionner le bon microcontrleur (ATmega8535). Ouvrir la fentre Workspace si ce n'est dj fait avec View>Workspace. Dans cette fentre ouvrir I/O ATmega8525, puis ouvrir PORTB. Ensuite, utiliser la commande Step Into (F11) pour faire tourner le programme pas pas, et voir le PORTB.2 changer de valeur.

Plus d'infos
Plus d'infos peuvent tre trouves dans le tutorial en anglais sur le site de robopoly. De plus, toute la documentation se trouve sous c:\WinAVR\doc. La doc la plus utile (un raccourci est cr l'installation) est l'avr-libc qui se trouve sous (C:\WinAVR\doc\avr - libc\avr - libc user - manual\index.html ). Sur internet, le lien http://winavr.sourceforge.net contient des news et de liens. L'adresse http://www.nongnu.org/avr - libc contient les dernires infos concernant la librairie C.