ATMEGA8-16PU

« On ne connaît que les choses que l’on apprivoise. » Le petit prince – Antoine de Saint-Exupéry 1900-1944.

J’ai en réserve plusieurs projets à base de microcontrôleurs en lien avec l’émission-réception. Je relate dans cet article les étapes qui me permettent de dresser un atelier complet de développement et de faire mes premiers pas avec les microcontrôleurs AVR.

De ce premier contact avec AVR, les premiers mots qui me viennent à l’esprit sont: facilité, ouverture, gratuité. Facilité de mise en oeuvre, monde ouvert disposant d’une vaste bibliothèque de programmes et de nombreux outils open-source de développement gratuits dans différents langages. Un espace immense à explorer.

1. L’ oeuf ou la poule

Mon objectif est d’obtenir un atelier de développement complet à un coût très faible. De mon expérience avec les microcontrôleurs PIC, j’ en ai tiré que l’élément  critique de la chaîne était le programmateur et son logiciel associé. La programmation in-situ (In-System Programming ou ISP) facilite la mise au point des circuits. Le port USB s’impose comme un standard et remplace les autres ports externes de nos PC. Réaliser son programmateur, l’acheter? Les programmateurs ISP USB légers, bon marché, faciles à réaliser comme l’ USBtinyISP ou l’ USBasp sont conçus autour d’un microcontrôleur et d’un programme embarqué. Il me faudrait d’abord câbler un petit programmateur sur port parallèle pour télécharger le firmware dans le microcontrôleur du futur programmateur. Un coup d’oeil sur Ebay me fait opter pour l’achat. L’USBtinyISP avec un câble USB, et un cable ISP est disponible pour moins de 10 euros frais de port inclus.

Photo 1 - USBtinyISP

Photo 1 – USBtinyISP

2. Caractéristiques de l’ USBtinyISP

La photo 1 ci-contre montre ce petit programmateur qui se présente sous la forme d’un circuit de 27mm x 57 mm, construit autour du microcontrôleur AVR ATTINY2313A-PU. Son entrée est un connecteur USB (USB type B dans mon cas). En sortie, 2 connecteurs ISP , l’un de 6 broches, l’autre de 10. Un strap permet le choisir l’alimentation du circuit à programmer soit par le port USB, soit par une alimentation extérieure. Le strap est en place pour l’alimentation par le port USB. Le modèle Pocket AVR Programmer vendu par sparkfun et le modèle USBtinyISP AVR Programmer Kit vendu par adafruit industries sont les mêmes. Voici un schéma de l’ USBtinyISP dont il existe plusieurs variantes.

Remarque: la suite de l’article traite uniquement de  l’installation que j’ai réalisée sur Windows 7 64 bits.

3. Installation du driver de l’ USBtinyISP

C’est l’installation du driver qui m’a donné le plus de soucis. Quand on reçoit ce genre de circuit acheté sur Ebay, il est livré en général sans documentation ni aucun CD contenant les drivers. Il faut soit même chercher et croiser les doigts. Après plusieurs tentatives infructueuses, en fouillant le net j’ai trouvé une solution.

Ne pas brancher le programmateur tant que le driver n’est pas installé.

Etape 1 : télécharger et préparer le driver.

Télécharger les pilotes, le décompresser pour obtenir le répertoire pocketprog-driver.
Télécharger la dernière version des pilotes libusb-win32 depuis sourceforge, celle que j’ai téléchargée est la 1.2.6.0 du 17/01/2012, décompresser, pour obtenir le répertoire libusb-win32-bin-1.2.6.0.
Aller dans le répertoire libusb-win32-bin-1.2.6.0/bin/amd64.
Dans ce répertoire il y a 2 fichiers  libusb0.dll et libusb0.sys,
Renommer ces fichiers respectivement libusb0_x64.dll et libusb0_x64.sys.
Copier ces 2 fichiers dans le répertoire  pocketprog-driver, ils remplacent les 2 fichiers existants.

Photo 2 - Ajout du driver

Photo 2 – Ajout du driver

Etape 2 : installer le driver.

Ouvrir le menu Démarrer.
Clic droit sur Ordinateur.
Dans le menu, choisir Gérer.
Dans la fenêtre qui vient de s’ouvrir, colonne de gauche, cliquer sur gestionnaire de périphériques, vous obtenez dans la colonne du milieu un répertoire portant le nom de votre ordinateur avec  dessous la liste de tous les périphériques.
Clic droit en haut sur le nom de votre ordinateur, dans le petit menu qui vient de s’ouvrir cliquer sur Ajouter un matériel d’ancienne génération.
La fenêtre de l’assistant Ajout de nouveau matériel s’ouvre, cliquer sur suivant.
Dans la fenêtre qui vient de s’ouvrir choisir l’installation manuelle,
Une liste de matériel s’affiche, n’en sélectionner aucun, cliquer sur suivant,
Dans la fenêtre qui vient de s’ouvrir, cliquer sur le bouton installation à partir d’un disque.
Dans la fenêtre qui vient de s’ouvrir, sélectionner dans le répertoire  pocketprog-driver le fichier pocketprog.inf et cliquer sur OK.
Window vous prévient que le pilote n’est pas signé, continuer.
Dans la fenêtre suivante, cliquer sur suivant.
Un nouveau message d’avertissement de windows qui vous prévient que le pilote n’est pas signé, passer outre et continuer l’installation.
Une dernière fenêtre s’affiche qui indique que le pilote  AVR Pocket Programmer a été installé.
Cliquer sur Terminer.

Etape 3 : vérifier.

Dans la liste des périphériques on trouve maintenant une ligne LibUSB-Win32 Devices.
En cliquant dessus, s’affiche dessous la ligne AVR Pocket Programmer.
Clic droit sur cette ligne donne l’état du périphérique.

 4. Installation de WinAVR

WinAVR est un atelier complet de développement sous Windows regroupant tous les outils indispensables à la programmation C et assembleur, éditeur, débogueur, librairies. Il comprend aussi l’interface de programmation AVRdude qui permet le flashage du microcontrôleur en cours de programmation.
Télécharger la dernière version ici. La version que j’ai installée est la 2010-01-20. Suivre la procédure d’installation. Elle est rapide et sans problème.

Photo 3 - AVRdude options

Photo 3 – AVRdude options

5. Connexion de l’ USBtinyISP

Connecter le programmateur au PC à l’aide du câble USB,
Ne pas connecter pour l’ instant le cable ISP.
La LED verte du programmateur s’allume, le programmateur est alimenté.
Ouvrir une fenêtre d’invite de commande de façon suivante : dans le menu Démarrer, cliquer sur Tous les programmes, sur Accessoires, puis sur Invite de commandes.
Vérifier que AVRdude répond.
Dans la fenêtre  invite de commandes, taper avrdude.
Si tout va bien il répond en donnant la liste des options comme le montre la photo 3 ci-contre.
Vérifier que le programmateur communique avec le PC.
Dans la fenêtre  invite de commandes, taper
avrdude -c usbtiny -p m8
La petite LED rouge du programmateur cligne une fois.
La photo 4 ci-dessous montre le message qu’il faut obtenir. Cela indique que la connexion est bien établie mais que le dispositif, ici m8, pour ATMEGA8 n’est pas connecté. Normal puisqu’ aucun microcontrôleur à programmer n’est connecté à la ligne ISP. Bien entendu si vous compter utiliser un autre microcontrôleur, changer simplement le paramètre de l’option -p. La liste des dispositifs est donnée dans la documentation de avrdude. Mais le message obtenu sera le même.

Photo 4 - AVRdude -c usbtiny -p m8

Photo 4 – AVRdude -c usbtiny -p m8

6. Connexion de l’ USBtinyISP au dispositif à programmer

On se reportera utilement à la note AVR910 qui décrit le connecteur ISP.
Pour le test j’ai utilisé un ATMEGA8-16PU. Il s’agit de savoir si notre programmateur peut communiquer avec notre dispositif à programmer. Aucune alimentation n’est nécessaire, le dispositif à programmer est alimenté par le port USB via le programmateur. Aucun autre composant n’est utilisé. Pour ce faire :
Le programmateur reste connecté au PC via le port USB,
Sur une plaque d’essai, insérer le microcontrôleur,
Connecter le câble ISP 6 broches au programmateur,
Connecter l’autre extrémité du câble ISP au dispositif, les 6 lignes RST, VCC, GND, MOSI, MISO,  SCK, aux bornes de l’ATMEGA8 respectivement (1), (7), (8), (17), (18), (19) .
Pour avoir une connexion solide du connecteur ISP à la plaque d’essai, j’ai réalisé un petit adaptateur avec une chute de plaque veroboard et 4 morceaux de 3 pins de barrette sécable, 2 x 3 pins qui s’enfichent sur la prise ISP, 2 x3 pins qui s’enfichent sur la plaque d’essai, photo 5 ci-dessous.
Dans la fenêtre  invite de commandes, taper
avrdude -c usbtiny -p m8
La petite LED rouge du programmateur cligne une fois.
La photo 6 montre le message qu’il faut obtenir. Il indique que la connexion est bien établie.

Photo 5 - Connecteur ISP

Photo 5 – Connecteur ISP

Photo 6 - Flash

Photo 6 – Flash

7. Test de programmation

Il consiste à faire clignoter une LED. La fréquence de clignotement peut être modifiée en appuyant sur un bouton poussoir.

7.1. Matériel

Autour du microcontrôleur sont ajoutés 4 composants:
PORT B0, Une résistance de 330 ohms en série avec une LED dont la cathode est à la masse.
PORT B1, un bouton poussoir qui met le PORT à la masse quand on le presse.
En parallèle sur le bouton poussoir une capacité de 100 nF pour l’effet anti rebond.

Photo 7 - Dispositif de test de programmation

Photo 7 – Dispositif de test de programmation

7.2. Logiciel

Dans le répertoire WinAVR-20100110 cliquer sur Programmers Notepad
En haut dans la barre du menu, dans la liste déroulante choisir C/C++ .

Photo 8 - Programmation: choix du langage

Photo 8 – Programmation: choix du langage

Editer le programme

Vous trouverez en téléchargement le programme qui a servi aux tests. Il y en a aussi de multiples exemples du même genre sur le net. Si vous utilisez d’autres ports, il suffit de modifier le token-string de la macro define. (#define identifier token-string)
Dans votre répertoire de travail créer le répertoire LEDblink.
Enregistrer le programme en lui donnant le nom main.c .

Photo 9 - Programmation: éditer le programme

Photo 9 – Programmation: éditer le programme

Générer le MakeFile

Retourner dans le répertoire WinAVR-20100110 cliquer sur Mfile
Dans le menu de la fenêtre qui vient de s’ ouvrir, cliquer sur Makefile, puis sur MCU type, puis sur Atmega, et enfin choisir dans la liste atmega8.

Photo 10 - Programmation: générer le Makefile atmega8

Photo 10 – Programmation: générer le Makefile atmega8

De la même façon,  dans le menu cliquer sur Makefile, puis sur Port,  et enfin choisir dans la liste usb.

Photo 11 - Programmation: générer le Makefile port usb

Photo 11 – Programmation: générer le Makefile port usb

Toujours  dans le menu cliquer sur Makefile, puis Enable Editing of Makefile .
Dans le menu cliquer sur Makefile, puis sur Programmer,  cliquer sur le programmateur qui est déjà coché stk500v2, une ligne allumée en jaune s’affiche,  remplacer dans la ligne stk500v2 par usbtiny. Il faut faire comme cela parce que usbtiny n’est pas encore prévu dans la liste. Nous verrons au paragraphe suivant comment l’ajouter automatiquement.
Dans le menu cliquer sur File, puis sur Save as, sélectionner le répertoire LEDblink, ne pas changer le nom Makefile, cliquer sur Enregistrer.

Photo 12 - Programmation: générer le Makefile programmer usbtiny

Photo 12 – Programmation: générer le Makefile programmer usbtiny

8. mfile le générateur de Makefile pour AVR GCC

WinAVR est livré avec mfile.tcl un générateur de fichier Makefile. mfile.tcl est écrit en langage de script Tcl (Tool Command Language). WinAVR est fourni avec les outils Tcl et Tk qui interprètent ce fichier. mfile.tcl s’appuie sur le template makefile_template.
Puisque je vais travailler avec le même programmateur qui n’y est pas actuellement prévu, je vais modifier mfile.tcl pour l’y ajouter ainsi que les valeurs par défaut de makefile_template.
Pour ce faire, aller dans le répertoire WinAVR-2010110/mfile.
Dans ce répertoire se trouve les fichiers makefile_template et mfile.tcl. Commençons d’abord par faire une copie de sécurité de ces 2 fichiers.

8.1. Modifier mfile.tcl

Avec votre éditeur préféré, Notepad++ aller à  la ligne 711 dans la boucle foreach p ajouter usbtiny dans la liste déroulante. Sauvegarder.

Photo 13 - modification de mfile.tcl

Photo 13 – modification de mfile.tcl

8.2. Modifier makefile_template

Toujours avec votre éditeur préféré, Notepad++ aller à  la ligne 277 AVRDUDE_PROGRAMMER remplacer stk500v2 par usbtiny.
Aller à la ligne 280 AVRDUDE_PORT = com1
Mettre cette ligne en commentaire # AVRDUDE_PORT = com1
Sous cette ligne ajouter AVRDUDE_PORT = usb
Vous pouvez, si vous le souhaitez, y ajouter des commentaires comme je l’ai fait.
Sauvegarder.

Photo 14 - modification de makefile_template

Photo 14 – modification de makefile_template

Download  Télécharger tous les fichiers.

Références

SparkFun Electronics
NewbieHack.com
AVR910: In-System Programming
megaAVR Microcontrollers – Atmel Corporation
Tcl (Tool Command Language)

Index des articles de la catégorie microcontroleur