Vous êtes sur la page 1sur 24

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ?

Les pi`ges ` viter e ae Conclusion

Programmation en C Pour avr 8 bits


Jrmy Cheynet INTech ee Yann Sionneau MiNET
www.club-intech.fr clubcode.minet.net intlab.minet.net github.com/leroilion/avr www.slideshare.net/leroilion34

14 octobre 2010

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Les outils de programmation Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer Hello world ! Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer Cest bien, mais comment je peux faire un VRAI programme ? Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau Tu me vois, tu me vois plus A vous de jouer Les pi`ges ` viter e ae
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer

Les outils de programmation Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer Hello world ! Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer Cest bien, mais comment je peux faire un VRAI programme ? Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau Tu me vois, tu me vois plus A vous de jouer Les pi`ges ` viter e ae
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer

Les dirents outils e avr-gcc (pour la compilation) avr-objcopy (pour crer le chier hex) e avrdude (pour asher)

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer

avr-gcc avr-gcc -Wall -mmcu=atmega328p -DF CPU=16000000 -c myle1.c avr-gcc -Wall -mmcu=atmega328p -DF CPU=16000000 -c myle2.c avr-gcc -Wall -mmcu=atmega328p -DF CPU=16000000 myle1.o myle2.o -o myappli avr-objcopy avr-objcopy -O ihex -R .eeprom myappli main.hex avrdude sudo avrdude -P /dev/ttyUSB0 -c stk500v1 -p m328p -b 57600 -D -U ash :w :main.hex
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer

Tlcharger les sources ee http ://github.com/leroilion/avr Et tlcharger dans les exemples le code blink.c ee Compiler les sources avr-gcc -Wall -mmcu=atmega328p -O2 -DF CPU=16000000 blink.c -o blink.out Crer le chier hexadcimal e e avr-objcopy -O ihex -R .eeprom blink.out blink.hex Flasher larduino sudo avrdude -P /dev/ttyUSB0 -c stk500v1 -p m328p -b 57600 -D -U ash :w :blink.hex sudo avrdude -c usbtiny -p m328p -U ash :w :blink.hex
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

Les outils de programmation Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer Hello world ! Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer Cest bien, mais comment je peux faire un VRAI programme ? Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau Tu me vois, tu me vois plus A vous de jouer Les pi`ges ` viter e ae
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

3 registres Le registre DDRx Registre de conguration du port Le registre PORTx Registre de sortie du port Le registre PINx Registre de lecture du port

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

Ecrire un 1 logique myport |= ( 1 << mybit ) ; #ifndef sbi #dene sbi(port,bit) (port) |= (1 << (bit)) #endif Ecrire un 0 logique myport &= ( 1 << mybit ) ; #ifndef cbi #dene cbi(port,bit) (port) &= (1 << (bit)) #endif

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

Conguration en sortie du port DDRB |= ( 1 << PORTB5 ) ; Ecriture sur un port PORTB |= ( 1 << PORTB5 ) ; //Pour mettre le bit 5 du port B `1 a PORTB &= ( 1 << PORTB5 ) ; //Pour mettre ` 0 a

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

Conguration du port en entre e DDRx &= ( 1 << PORTxN ) ; Lecture du port PORTx |= ( 1 << PORTxN ) ; //Pour activer le pullup PORTx &= ( 1 << PORTxN ) ; //Pour dsactiver le pullup e uint8 t etat = ( PINx & ( 1 << PINxN )) ;

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer

Objectif : Faire un programme qui claire une LED si un bouton est pouss. e e Dtails techniques : e Utiliser le PORTB5 en sortie (PORTB7 pour arduino mega), et le PORTB0 en entre. e Attention Ne pas oublier le int main() dans le chier principal. Penser ` rajouter linclude standard io.h a

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

#include <avr/io.h> int main( void ) { DDRB |= ( 1 << PORTB5 ); DDRB &= ~( 1 << PORTB0 ); PORTB |= ( 1 << PORTB0 ); while(42) { if( (PINB & ( 1 << PORTB0 )) ) PORTB |= ( 1 << PORTB5 ); else PORTB &= ~( 1 << PORTB5 ); } return 0; } 

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

Les outils de programmation Quels sont les outils dont je dispose ? Exemple dutilisation A vous de jouer Hello world ! Structure dun port Ecrire un 1 ou un 0 Je te parle Tu me parles A vous de jouer Cest bien, mais comment je peux faire un VRAI programme ? Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau Tu me vois, tu me vois plus A vous de jouer Les pi`ges ` viter e ae
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

Cest un octet en mmoire e qui permet de congurer le microcontrleur. o SREG AVR Status Register I (bit 7) Global interrupt enable T (bit 6) Copy storage H (bit 5) Half carry S (bit 4) Sign bit V (bit 3) Overow bit N (bit 2) Negative bit Z (bit 1) Zero bit C (bit 0) Carry
Jrmy Cheynet INTech Yann Sionneau MiNET ee Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

Objectif : Faire un programme qui fait clignoter une led en utilisant le TIMER1 sur 16 bits. Pour cela, on fera : On activera les interruptions doverow du TIMER1 On fera compter le TIMER1 pour avoir une interruption toutes les secondes. On regardera ltat de la PIN associe ` la LED pour le e e a changer.

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

http ://github.com/leroilion/avr TCCR1A TCCR1B (page 132 134) Mode normal (WGMx = 0 ), Source dhorloge (CSx = 101), Pas de comparaison (COMx = 0) TCNT1H TCNT1L (page 136) Incrmentation toute les 64s e

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

http ://github.com/leroilion/avr TCCR1A TCCR1B (page 132 134) Mode normal (WGMx = 0 ), Source dhorloge (CSx = 101), Pas de comparaison (COMx = 0) TCNT1H TCNT1L (page 136) Incrmentation toute les 64s = Compter jusqu` 15625 e a

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

http ://github.com/leroilion/avr TCCR1A TCCR1B (page 132 134) Mode normal (WGMx = 0 ), Source dhorloge (CSx = 101), Pas de comparaison (COMx = 0) TCNT1H TCNT1L (page 136) Incrmentation toute les 64s = Compter jusqu` 15625 = e a Mettre 49910 = 65535 - 15625 dans TCNT. TIMSK1 (page 137) Activer linterruption doverow

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

http ://github.com/leroilion/avr TCCR1A TCCR1B (page 132 134) Mode normal (WGMx = 0 ), Source dhorloge (CSx = 101), Pas de comparaison (COMx = 0) TCNT1H TCNT1L (page 136) Incrmentation toute les 64s = Compter jusqu` 15625 = e a Mettre 49910 = 65535 - 15625 dans TCNT. TIMSK1 (page 137) Activer linterruption doverow = Activer TOIE1

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

1 2 3 4 5 6 7 8 9

#include <avr/io.h> #include <avr/interrupt.h> ... TCCR1A = 0bxxxxxx00; TCCR1B = 0bxxx00101; TIMSK1 |= ( 1 << TOIE1 ); ... ISR( TIMER1_OVF_vect) { ... 

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Quest-ce quun registe ? Le l rouge Le datasheet : LA bible du programmateur bas niveau A vous de jouer

Objectif : Faire un programme qui permet de contrler la luminosit dune o e LED en utilisant le PWM. Dtails techniques : e Utiliser le port B5 pour la sortie de la LED (PORTB7 pour arduino mega). Utiliser le TIMER de votre choix en mode PWM Attention Ne pas oublier linclude <avr/interrupt.h> Penser ` grer TOUS les vecteurs dinterruption a e

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Traps Economiser la mmoire (probl`me de la pile) e e Faire attention avec les oat, les . et les double Economiser la puissance de calcul (calcul en 8 bits) Faire attention ` loverow a Rajouter loption volatile devant les variables

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr

Les outils de programmation Hello world ! Cest bien, mais comment je peux faire un VRAI programme ? Les pi`ges ` viter e ae Conclusion

Nous avons vu : Les outils de programmation Ce quest un registre, et comment le congurer ` laide du a datasheet Lutilisation des interruptions Des exemples simple : http ://github.com/leroilion/avr Bibliographie : Microcontrleurs AVR : des ATtiny aux ATmega de Christian o Tavernier

Jrmy Cheynet INTech Yann Sionneau MiNET ee

Introduction au C avr