Bonjour,
Je me suis demandé comment programmer directement un microcontroleur Atmel sans avoir à passer par Arduino et son bootloader. J’ai travaillé sur un AT328p-pu (vraiment celui qui se trouve sur un arduino)
Je me suis donc acheté sur ebay une petite clé usb asp pour rien avec frais de port offert. Autant dire qu’ils sont quand même balaise pour faire de l’électronique aussi peu chère…
Cette clé usb est basée sur http://www.fischl.de/usbasp/ où vous retrouverez le schéma de cablage.
En plus de cette clé vous aurez besoin de:
1x ATMEGA328P-PU
1x Crystal 16 MHz
2x 22pF
2x 10Kohm 1% 1/4W resistor (one for reset, one for input switch)
1x 300ohm 1% 1/4W resistor (limitation of current of LED)
1x LED
1x L7805CV (+5Vdc regulator) pour l’alimentation en 5v
2x 100uF (Filter capacitor) pour l’alimentation en 5V
Au passage voici le pinout du microcontroleur
Pour la connection attention c’est compliqué… le MISO au MISO, le MOSI au MOSI, 5V au 5v, le GND au GND et le /RST au /RST…
Donc ensuite, sur votre ordinateur, sur votre os linux préféré, ici, archlinux (mais sa doit être similaire sur d’autres distributions)
Installez les applications qui vont bien
pacman -S avr-gcc avr-binutils avr-gdb avr-libc avrdude
Pour faciliter la suite vous pouvez installer « sudo »
pacman -S sudo
vous devrez modifier le fichier /etc/sudoers en décommentant %wheel ALL=(ALL) ALL
Voilà après ce sera plus simple. Donc ensuite, on va essayer avec un programme super simple blink de la led 13.
Voilà un exemple de code « blink.c »
#include <avr/io.h> #include <util/delay.h> enum { BLINK_DELAY_MS = 1000, }; int main (void) { /* set pin 5 of PORTB for output*/ DDRB |= _BV(DDB5); while(1) { /* set pin 5 high to turn led on */ PORTB |= _BV(PORTB5); _delay_ms(BLINK_DELAY_MS); /* set pin 5 low to turn led off */ PORTB &= ~_BV(PORTB5); _delay_ms(BLINK_DELAY_MS); } return 0; }
Pour compiler:
avr-gcc -mmcu=atmega328p -Wall -Os -o blink.elf blink.c
Ensuite:
avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex
Pour uploader:
avrdude -p m328p -c usbasp -e -U flash:w:blink.hex
Voici quelques commandes supplémentaires pour le fun:
pour dumper la flash
avrdude -c usbasp -p m328p -U flash:r:blinkdump.hex:i
pour dumper l’eeprom:
avrdude -c usbasp -p m328p -U eeprom:r:eedump.hex:i
lire les fusibles:
avrdude -c usbasp -p m328p -U lfuse:r:-:h -U hfuse:r:-:h
Au passage un lien pour calculer les fusibles
http://www.engbedded.com/fusecalc/
Maintenant que le microcontroleur est programmé il faut vérifier si notre programme fonctionne.
Pour mettez en place un oscillateur et une led comme suit:
Puis il n’y a plus qu’à alimenter votre microcontroleur +5v et GND. Et voilà!!!
Maintenant vous pouvez développer vos propres applications en C, dumper, uploader,…
So enjoy!