Programmer un atmel avec AVR Studio
Prerequis
- Un programmateur pour atmel. tuto ici
- AVR-GCC, make, avrdude installés sur la machine
- AVR Studio : Télécharger
- Savoir compiler en C
Pourquoi ?
Si vous achetez un atmel, qui ne coute qu'environ 3€, vous pouvez le programmer aussi bien qu'un arduino, et c'est plus facile à integrer dans un montageBien qu'il soit possible de transformer l'atmel en arduino pour pouvoir directement s'en servir avec la lib arduino,
C'est plus interessant de savoir directement travailler la puce au corps ;)
Comme nous avons déjà des arduinos, et que nous voulons garder la possibilité de coder sur l'arduino pour ensuite l'utiliser sur des puces atmel, nous avons crée une library avec toute les fonctions de base et nous n'utilisons plus les fonctions arduino.
Comment ?
Voici les étapes pour configurer un projet dans AVR Studio:
Choix du compilateur

Choix de la puce à programmer

Rajout de notre librarie (ici, le
source)

Rajout de notre librarie (ici, le
header)

Code de base d'un projet qui contient notre
librairie
Programmation
Le principe general d'appel d'un port est le suivant:Chaque patte de l'atmel fait parti d'un adressage 8 bits, donc 8 pattes sont regroupées en 1 port, par exemple DDRA pour le port A
Chaque port possède un registre d'entrée et un registre de sortie, en entrée c'est PINA, en sortie PORTA.
Il faut enfin sa position sur le port (de 0 à 8).
Comment trouver toute ces infos ? grâce au datasheet qui a du vous être fourni avec votre atmel ou trouvable sur le site d'atmel.
Exemple de datasheet pour un atmega16: datasheet
PinMode
Il fau d'abord initialiser le port de donnée (voir schema) METTRE SCHEMA ICIDDRB = 0xFF;
DigitalRead
PORTB = 0xff; // Force le port a 1 DDRB = 0; // indique que le portB est en entrée (adapter le masque selon vos i/o) valeur = PINB; // Lecture du portB if((valeur & mask) == 0) // Recuperation de la valeur du pin grace a un & entre le masque et le port
DigitalWrite
PORTB &= ~(1<<PB0); // 1 PORTB |= 1<<PB0; // 0
AnalogWrite
TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00); DDRB|=(1<<PB3); OCR0=INT entre 0 et 255;
Delay
_delay_ms(INT); // delay en millisecondes _delay_us( INT ); // delay en microsecondes
Conclusion
Grace a l'utilisation de la puce usb de l'arduino, on est capable de programmer des atmel sans cout supplementaire, il ne reste plus qu'a faire des circuits qui utilisent ces atmels ;)Au boulot! :D