Programmateur pour µC Atmel
Tout comme les PICs, il faut un programmateur pour transférer les fichiers HEX issu de la compilation du code source vers les microcontrôleurs Atmel ATMega et ATTiny. Je vous présente ci-dessous deux réalisations de programmateur.
Programmateur sur port parallèle
C’est le programmateur le plus économique qui soit. Si vous n’avez pas peur de griller votre port parallèle ou votre µC Atmel, vous pouvez vous contenter d’un “vulgaire” câble parallèle et de quelques résistances.
Cependant il me semble plus prudent de mettre un circuit tampon entre votre port parallèle et votre µC. C’est la réalisation que je vous propose. Le schéma n’est pas de moi, vous pouvez le trouver un peu partout sur internet (en particulier chez Christian Tavernier). J’en ai juste fait un routage personnel. Il se présente de la manière suivante:
Les documents de fabrication sont disponibles en fin d’article. Vous remarquerez que le routage présenté ci-dessus est légèrement différent de la réalisation car il a été retravaillé à posteriori. Les traits rouge sur l’implantation indiquent les “straps” à câbler. Une fois que vous avez réalisé votre programmateur, il faut le tester avec un logiciel de programmation et un câble DB25 mâle-mâle. Pour ma part j’utilise le logiciel AVRDude tant sous Microsoft Windows que sous GNU/Linux Debian. Cependant bien que ce programmateur soit trés économique il a tendance à disparaitre car le port parallèle disparait des PCs. Encore une fois il faut changer de port et s’orienter vers l’USB.
Programmateur sur port USB
Une fois de plus, vous trouverez la solution en furetant sur Internet. Pour ma part, j’ai choisi d’utiliser le programmateur USBASP. Vous trouverez différent routage sur ce site. Cependant pour ma part j’ai réalisé le routage de Jean-Luc Padiolleau. Il faudra suivre la procédure décrite sur son site pour réaliser ce programmateur et ensuite programmer le firmware avec le programmateur sur port parallèle (oui c’est le serpent qui se mord la queue). Le programmateur se présente de la manière suivante:
Vous pouvez trouver sur E-Bay ce programmateur en CMS à un prix très raisonnable (environ 18 euros frais de port compris avec un câble USB).
Programmation avec AVRDude
Pour programmer le firmware dans le programmateur USB, j’utilise le programmateur sur port parallèle. Cette programmation se fera sous GNU/Linux Debian Lenny en ligne de commande. Téléchargez le dernier firmware sur le site de l’auteur. La dernière version au moment de l’écriture de l’article est celle du 28/02/2009. Décompressez-le puis allez dans le sous répertoire “bin/firmware”. Là vous trouverez un firmware pour un Atmel ATMega 48 et un autre pour un ATMega8. Réalisez alors le câblage comme dans l’image ci-dessous:
Connectez le câble parallèle DB25 mâle sur le port parallèle du PC et sur le connecteur DB25 femelle du programmateur (à droite sur la photo). Connectez un câble USB sur un port USB libre coté PC et sur l’entrée du programmateur USB pour alimenter le tout en 5V (à gauche sur la photo). Le cavalier rouge du haut est fermé et sert à alimenter le programmateur sur port parallèle : la diode doit s’allumer sur celui-ci. Le cavalier rouge du milieu doit être fermé pour permettre la programmation de l’ATMega 8.
Il faut savoir si le programmateur sur port parallèle trouve l’ATMega 8 du programmateur USB. Dans un terminal, tapez la commande suivante :
1 2 3 4 5 6 | olivier@leonard:~/usbasp.2009-02-28/bin/firmware$ sudo avrdude -P /dev/parport0 -c stk200 -p m8 -i 100 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.07s avrdude: Device signature = 0x1e9307 avrdude: safemode: Fuses OK avrdude done. Thank you. |
Avrdude cherche un programmateur de type parallèle (-c stk200) sur le premier port parallèle (-P /dev/parport0), le microcontrôleur utilisé est de type ATMega8 (-p m8) et enfin on ralentit un peu la vitesse de programmation si vous avez un PC récent (-i 100). Maintenant que il faut programmer l’ATMega8 avec le firmware usbasp avec les bons fusibles (activation de l’oscillateur externe). Vous tapez donc la ligne suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | olivier@leonard:~/usbasp.2009-02-28/bin/firmware$ sudo avrdude -P /dev/parport0 -c stk200 -p m8 -i 500 -U flash:w:usbasp.atmega8.2009-02-28.hex -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.18s avrdude: Device signature = 0x1e9307 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 "usbasp.atmega8.2009-02-28.hex" avrdude: input file usbasp.atmega8.2009-02-28.hex auto detected as Intel Hex avrdude: writing flash (3826 bytes): Writing | ################################################## | 100% 515.73s avrdude: 3826 bytes of flash written avrdude: verifying flash memory against usbasp.atmega8.2009-02-28.hex: avrdude: load data flash data from input file usbasp.atmega8.2009-02-28.hex: avrdude: input file usbasp.atmega8.2009-02-28.hex auto detected as Intel Hex avrdude: input file usbasp.atmega8.2009-02-28.hex contains 3826 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 490.64s avrdude: verifying ... avrdude: 3826 bytes of flash verified avrdude: reading input file "0xC9" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.15s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xC9: avrdude: load data hfuse data from input file 0xC9: avrdude: input file 0xC9 contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.15s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xEF" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.14s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xEF: avrdude: load data lfuse data from input file 0xEF: avrdude: input file 0xEF contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.15s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: safemode: Fuses OK avrdude done. Thank you. |
Vous pouvez alors débrancher le cable USB, la nappe 10 fils coté programmateur parallèle, ouvrir les deux cavaliers rouges puis rebranchez le cable USB. La del rouge du programmateur USB doit s’allumer. Pour vérifier que le programmateur a bien été reconnu, il faut regarder les messages du noyau:
1 2 3 4 5 | olivier@leonard:~$ sudo dmesg|tail -n 5 [82649.848342] usb 2-1: New USB device found, idVendor=16c0, idProduct=05dc [82649.848352] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [82649.848359] usb 2-1: Product: USBasp [82649.848364] usb 2-1: Manufacturer: www.fischl.de |
Vous pouvez alors programmer vos montages avec une ligne du style:
1 | olivier@leonard:~$ sudo avrdude -c usbasp -p m8 -U flash:w:test.hex |
Bonne programmation à tous…




