Professional Documents
Culture Documents
Illustration par le
Atmega328
Tamou NASSER
tamounasser@gmail.com
Bibliographie:
www.atmel.com
Plan
Prsentation gnrale
Elments constitutifs du microcontrleur ATMEGA 328
Programmation en langage assembleur
Les Ports dE/S
Les Interruptions
Les Timers
Le Convertisseur Analogique/Digital
Programmation en langage C (la carte ARDUINO)
Prsentation gnrale
DEFINITION
C' est une systme informatique de type circuit intgr, gnralement
utilis pour contrler un dispositif physique.
Comme
un
microprocesseur,
un
microcontrleur
excute
Du -processeur au -contrleur
Unit de
contrle
Unit
arithmtique
et logique
Instructions
Donnes
Mmoire
centrale
(ou principale)
Rsultats
Unit dchange
= processeur
= contrleur
Du -processeur au -contrleur
Familles de microcontrleurs
la famille Atmel AT91 , Atmel AVR ;
le C167 de Siemens;
lIntel 8085 , Intel 8051
la famille Motorolla 68HC11, 68HC08 , 68HC12 ;
la famille des PIC de Microchip ;
la famille des ST6, ST7, ST10, STR7, STR9 de
STMicroelectronics ;
la famille ADuC d'Analog Devices ;
la famille MSP430 de Texas Instruments ;
la famille LPC21xx ARM7-TDMI de Philips ;
10
La famille AVR
AVR (Advanced Virtual RISC) : terme utilis par Atmel pour dsigner
le cur du processeur et la famille de microcontrleurs RISC partir de
1996.
Caractris par :
- Architecture RISC
- Architecture Harvard :
- Structure en Pipe Line
11
CISC
>200 instructions
Format variable
Vitesse typique :
1 instruction dure
3-10 cycles
Avantages
Dveloppement
plus simple
Trs rpandu
Inconvnients
Puce plus grosse, plus complique
volutions limites
Plusieurs cycles
par instruction
12
Architecture
Architecture de Von Neumann :
Une mmoire pour le programme et les
donnes.
Double utilisation des BUS donnes et
dadresses.
Architecture Harvard :
mmoires programme et donnes
distinctes,
bus programme et donnes distincts,
transfre simultan des instructions
excuter et des donnes.
modle plus rapide que Von Neumann
Le gain en performance est obtenu au
dtriment de la complexit interne de la
structure
13
14
Applications
Mdical
Electrocardiograph (ECG)
Mcatronique,
15
16
17
18
19
20
21
22
23
24
Description matrielle
Rfrence: ATMEGA 328P (plusieurs packages)
AT = Le composant est cr par ATMEL
Mega = Le composant fait partie de la srie des,
megaAVR.
328 = Le composant possde 32 Ko de mmoire
flash, et un CPU 8 bits.
25
Description matrielle
26
Description matrielle
27
Instruction
Fetch and
Decode
ALU
28
29
30
EX :
ADD R4, R10
(R4) + (R10)
R4
31
32
Le Plan Mmoire
Trois types de mmoire sont utiliss dans la srie ATMEGA, la mmoire programme
FLASH, la mmoire de donne SRAM et la mmoire morte de type EEPROM.
In-System
Memory
Reprogrammable
Flash
Program
33
Le Plan Mmoire
SRAM Data Memory
The lower 2303 data memory locations address both the Register File, the I/O memory,
Extended I/O memory, and the internal data SRAM. The first 32 locations address the
Register File, the next 64 location the standard I/O memory, then 160 locations of
Extended I/O memory, and the next 2K locations address the internal data SRAM
34
Le Plan Mmoire
La Mmoire EEPROM
L'EEPROM est une mmoire programmable et effaable lectriquement.
La particularit de cette mmoire et de pouvoir garder les informations
stockes longtemps mme hors tension. L'ATMEGA328 contient 1024
octets de donnes dans la mmoire EEPROM. Elle est organise comme
un espace de donn spar, dans lequel des octets simples peuvent tre
lus et crits. L'EEPROM a une endurance d'au moins 100,000 cycles
dcriture/effacement.
35
Programmation en langage
assembleur
36
Modes dadressage
Adressage de registres
Adressage direct registre: selon le code opration:
37
Modes dadressage
Adressage dune Entre/Sortie
Adressage direct dune Entre/Sortie:
La valeur de A dsigne ladresse: 6 bits
64 adresses
38
Modes dadressage
Adressage de la mmoire de donnes
Adressage direct:
linstruction est code sur 32 bits dont les 16 bits
de poids faible correspondent ladresse dune
case de la mmoire de donnes.
39
Modes dadressage
Adressage de la mmoire de donnes
Adressage indirect: ladresse est stocke dans un
registre (X,Y,Z).
40
Modes dadressage
Adressage de la mmoire de programmes
Adressage de la mmoire de programmes:
41
Modes dadressage
Adressage direct de la mmoire de programme
JMP, CALL Direct Program Memory Addressing
42
Modes dadressage
Adressage direct de la mmoire de programme
IJMP, ICALL Indirect program memory addressing
43
Modes dadressage
Adressage relatif de la mmoire de programme
RJMP, RCALL Relative program memory addressing
44
Le jeu dinstructions
Arithmetic Instructions
45
Le jeu dinstructions
Logical Instructions
46
Le jeu dinstructions
Jump and Call Instructions
47
Le jeu dinstructions
Skip and Branch Instructions
48
Le jeu dinstructions
Skip and Branch
49
Le jeu dinstructions
Move, Load
50
Le jeu dinstructions
Store
51
Le jeu dinstructions
52
Le jeu dinstructions
Move, I/O, Push/Pop
53
Le jeu dinstructions
Shift and Bit Instructions
54
Le jeu dinstructions
Bit Instructions
55
56
57
58
Protection I/O
Contre les surtensions (>VCC)
Contre la tension
inverse
59
60
61
62
63
Exemple de programmation
Lexemple qui suit permet de configurer le port B avec les 4 bits de poids faible en sortie
avec les deux derniers bits 0&1 ltat haut (1).
Aprs initialisation du port, un temps dattente est positionn pour la synchronisation et
une lecture du port est ralise.
64
65
66
//Variable Temporaire
//Port B en sortie
//Tout les pins du PortB 0
//Dbut du dlai 4*25ms = 100ms
//Fin du dlai de 100ms
//Tout les pins du PortB 0
//dlai 4*25ms = 100ms
67
B
B
B
B
B
B
B
B
68
69
70
71
72
73
74
char valeur;
void main(void)
{
DDRB=0x00;
PORTB=0x00;
DDRD=0xFF;
PORTD=0x00;
valeur=PINB;
PORTD=valeur;
}
75
76
78
79
80
81
82
INTERRUPTIONS
Une interruption est un signal demandant au processeur de suspendre
temporairement lexcution du programme courant afin deffectuer des
oprations particulires.
Intrt: Ce mcanisme permet dimplmenter une raction une sollicitation
offrant un dlai de rponse trs bref,
programme de faon indpendante du code en cours dexcution.
Les interruptions peuvent tre dclenches soit par un composant extrieur au
processeur:
changement de valeur logique une entre dsigne
soit par le processeur lui-mme:
chance dune temporisation,
interruption logicielle,
...
83
INTERRUPTIONS
Mcanismes de traitement dune interruption :
Lors dune interruption le processeur excute la squence suivante :
- le bit I du registre dtat (SREG) est mis 0 (inhibition des autres sources
dinterruption)
- lexcution du programme en cours est interrompue
- le contenu du PC est sauvegard dans la pile
- le PC est charg avec la valeur de ladresse dinterruption
- linstruction de saut ladresse de traitement de linterruption est excute
- le programme de traitement dIT est excut
- la fin du programme, linstruction RETI restaure le contenu du PC
- le bit I du registre dtat (SREG) est mis 1 (validation des autres sources
dinterruption).
Remarque : lors dune interruption, le processeur ne sauvegarde pas le
contexte (tat des registres de travail et registre dtat SREG). Il est donc
important de sauvegarder au moins le registre dtat en dbut du sousprogramme dinterruption et de le restituer la fin en utilisant les instructions
PUSH et POP.
84
INTERRUPTIONS
Sources d'interruption exploitables sur ATMega328
Il existe deux types dinterruptions :
- les interruptions externes (broches du circuit INT0, INT1 )
- les interruptions internes provoques par les priphriques intgrs.
85
INTERRUPTIONS
86
INTERRUPTIONS
Relation entre broches et les interruptions
externe pour ATMega 328
NB :
Les interruptions restent fonctionnelles
mme si les pins INT0, INT1 ou PCINT 0
23sont configures en sortie.
87
INTERRUPTIONS
Interruptions Externes
Il s'agit d'interruptions lies a des niveaux ou des changements dtats de
broches du microcontrleur
Les broches impliques doivent tre configures en entre .
Broches INT0 (PD2)/INT1(PD3) : configurables pour dclencher les
interruptions (n 2 et 3) sur niveau 0, front ngatif ou positif.
La cause d'interruption est choisie par le registre EICRA
88
INTERRUPTIONS
89
INTERRUPTIONS
90
INTERRUPTIONS
91
INTERRUPTIONS
92
INTERRUPTIONS
Exercice
Programme qui utilise linterruption INT0 comme suit : Chaque
fois que lentre PD2 passe de 1 0, la LED branche sur RB5
clignote 4 fois au rythme de la seconde
93
INTERRUPTIONS
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h> // _delay_ms
ISR(INT0_vect) {
PORTB^=1<<PORTB5;
_delay_ms(100); }
int main(void)
{
MCUCR &=~1<<PUD;
DDRD &= ~1<<PORTD0; //int0 sur PD2
DDRD |= 1<<PORTD0; //int0 sur PD2
PORTD |= 1<<PORTD0; //pullup on
DDRB |=1<<PORTB5;
DDRB |=1<<PORTB1;
PORTB &= ~1<<PORTB5;
PORTB &= ~1<<PORTB1;
EIMSK = 1<<INT0; //enable int0
sei(); //enable interrupts
while(1)
{PORTB^=1<<PORTB1;
_delay_ms(200);
} }
94
INTERRUPTIONS
Pin Change Interrupt"
Broches PCINT0 PCINT23 : configurables
pour dclencher des interruptions (n 4,5 et 6)
sur des changements dtat ("Pin Change") des
broches (configures en entre DDRx.n=1).
Les broches sont spares en 3 sous-groupes,
il y a une source d'interruption par sousgroupe, et pour chaque broche on peut activer
ou non le systeme Pin Change Interrupt
L'interruption PCI2 (IT n6) a lieu sur
changement de l'une des broches PCINT23.16
l'interruption PCI1 (IT n5) sur les
changements dtat de PCINT14..8,
l'interruption PCI0 (ITn4) a lieu sur les
changements d'etat des broches PCINT7..0.
Les registres PCMSK2, PCMSK1 and
PCMSK0 contrlent quelles broches peuvent
conduire (ou non) a une interruption de type
"pin change".
95
INTERRUPTIONS
96
INTERRUPTIONS
97
INTERRUPTIONS
EXERCICE 2
Programme qui fait inverser ltat de la LED branche sur RB1
chaque fois quil y a changement sur PC5(PCINT13) qui conduit
linterruption PCI1
98
Timers/Counters de ATMega328
Les microcontrleurs AVR disposent de modules de temporisation/comptage
internes, fonctionnant pour certains avec des registres de comptage sur 8 bits, et pour
d'autres sur 16 bits.
Ils peuvent tre utiliss pour gnrer des temporisations prcises, compter des
vnements, mesurer des priodes ou frquences de signaux, gnrer des signaux
PWM pour le contrle en vitesse de moteurs courant continu par exemple
Fonction Temporisateur : lorsque l'on compte des "ticks" de l'horloge qui cadence
le microcontrleur, on mesure du temps.
Fonction Compteur : lorsque l'on compte des fronts sur une entre de comptage
(broches T0 ou T1), on utilise alors la fonction "compteur" du module.
Gnration de signaux priodiques : les modules Timers/Counters sont assez
complexes et chacun de ces modules peut gnrer deux signaux PWM dont le rapport
cyclique est facilement modifiable.
99
Timer/Counter0
Le Timer/Compteur0 est un compteur 8 bits avec les particularits principales :
Remise 0 du compteur sur Comparaison (Rechargement Automatique)
Deux fonctions de comparaison et de gnration de signaux PWM
Gnrateur de Modulation de Phase en Largeur d'Impulsion (PWM)
Interruption sur Dbordent et Comparaison (TOV0, OCF0A, et OCF0B).
Gnrateur de Frquence
Compteur d'vnement Externe
100
Timer/Counter0
Le Timers/Compteur0 reoit son horloge de puis la sortie dun pr-diviseur interne ,
programmable sur plusieurs taux, travaillant partir de lhorloge systme.
Il peut galement fonctionner partir dune source dhorloge externe applique la
patte TO du microcontrleur
101
Timer/Counter0
102
Timer/Counter0
Le Timer0 sans PWM
Voici la vue le synoptique simplifi du Timers/Compteur 8 bits sans mode PWM.
103
Timer/Counter0
104
Timer/Counter0
Le registre TIMSK
TOIE0
Le registre TIFR
TOV0
105
Timer/Counter0
Le Timer0 avec PWM
Voici la vue le synoptique simplifi du Timers/Compteur 8 bits avec mode PWM.
106
Timer/Counter0
Fonctionnement du Timer/Compteur0
Le coeur du Timer0 est le registre de comptage sur 8bits appel TCNT0
Le contenu de ce compteur peut tre compar au contenu de deux registres appels
OCR0A et OCR0B
Le choix de la source dhorloge clkT0 peut tre lhorloge interne, via le pr diviseur, une
horloge externe sur la broche T0 (PB0) ou inactif quand aucune source d'horloge n'est
choisie.
Le registre de commande TCCR0 permet de choisir parmis les 4 modes de
fonctionnement.
La demande dinterruption est visible dans le registre TIFR0.
Toutes les interruptions sont individuellement masques dans TIMSK0
Le Gnrateur de Forme d'onde emploi les bits COM01x et COM00x pour dfinir l'tat
dOC0x.
107
Timer/Counter0
Sous-ensemble de comptage
La partie ddie au comptage est organise comme indiqu ci-dessous
108
Timer/Counter0
Unit de comptage
Le registre TCNT0 est sous le controle dun bloc logique qui lui transmet son
horloge, le remettre zero ou bien encore changer son sens de fonctionnement
Ce bloc reoit galement deux informations manant des units de comparaison:
- TOP : qui signale que le registre TCNT0 a atteint la valeur max quon lui a
assign dans la squence de comptage.
- BOTTOM : indique que le registre TCNT0 est arriv 0
Lorsque le registre TCNT0 dborde, le bit TOV0 est positionn, ce qui peut gnrer
une interruption si le timer y a t autoris
109
Timer/Counter0
Units de comparaison du timer0
Le Timer0 contient deux units de comparaison qui sont organises comme indiqu
la figure ci-dessous
110
Timer/Counter0
Units de comparaison du timer0
Le comparateur compare en permanence le contenu du registre TCNT0 avec un
des registres de comparaison OCR0A et OCR0B et signale une galit au moyen du
bit OCF0A ou OCF0B qui peut gnrer une interruption sil y a t autoris .
Cette information est galement envoy au gnrateur de signaux qui, en accord
ave les informations TOP et BOTTOM et la programmation des bits WGM02
WGM01 et des bits COM0x1 et COM0x0, agit en consquence sur la patte de
sortie OC0X
111
Timer/Counter0
Modes de fonctionnement
1- Mode Normal
Le mode normal est le mode de fonctionnement le plus simple (WGM01:0 0). Dans
ce mode le comptage est toujours incrmental sans remise 0 manuel du compteur.
Il passe par le maximal $FF en dbordant, le drapeau TOV0 est mis 1, puis le
compteur repart au dbut $00., combin avec linterruption de dbordement du Timer,
le drapeau TOV0 peut tre remis 0 automatiquement.
Une nouvelle valeur peut tre crite n'importe quand dans le registre TCNT0.
Le Timer combin avec lunit de comparaison OCR0x peut tre employe pour
produire une interruption de comparaison lorsque le contenu du registre TCNT0 est
gal lun des registres de comparaison OCR0x.
L'utilisation de cette possibilit nest pas recommande pour la production de forme
d'onde, puisque cela occupera trop de temps CPU, le mode suivant est prfrable pour
cela.
112
Timer/Counter0
1- Mode remise zro sur comparaison russie
CTC mode (Clear Timer on Compare match)
Le mode CTC (WGM02:0 =0x02), le registre OCR0A est employ pour dfinir la
rsolution du compteur.
Le compteur est incrmente et quant la valeur est gale OCR0A, le compteur est
remis $00 et le drapeau OCF0A est mis 1 pour dclencher une ventuelle interruption.
L'OCR0A dfinit la valeur suprieure pour le compteur donc sa rsolution.
Ce mode peut tre utilis pour gnrer des signaux de frquence programmable sous
rserve de configurer les bits COM0x1 et COM0x0 de faon faire changer dtat la
sortie OC0A sur chaque comparaison russie.
113
Timer/Counter0
1- Mode remise zro sur comparaison russie
CTC mode (Clear Timer on Compare match)
Le drapeau OCF0A est automatiquement remis 0 lors de lexcution de linterruption.
Ce mode permet de mieux contrler la frquence produite.
La frquence maximum que peut produire le Timer0 est fonction de la formule suivante :
Avec :
N le rapport du pr-diviseur (1, 8, 64, 256 ou 1024) ,
Fclk_I/O tant la frquence dhorloge du quartz.
114
Timer/Counter0
2- Mode PWM rapide
115
Timer/Counter0
2- Mode PWM rapide
The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches TOP. If
the interrupt is enabled, the interrupt handler routine can be used for updating the
compare value.
116
Timer/Counter0
2- Mode PWM rapide
117
Timer/Counter0
3- Mode PWM correct en phase
118
Timer/Counter0
Register Description
TC0 Control Register A (TCCR0A)
119
Timer/Counter0
Register Description
TC0 Control Register A (TCCR0A)
120
Timer/Counter0
TC0 Control Register A (TCCR0A)
Compare output mode, Non-PWM
121
Timer/Counter0
TC0 Control Register A (TCCR0A
122
Timer/Counter0
123
Timer/Counter0
TC0 Control Register B : TCCR0B
124
Timer/Counter0
Bits 2:0 CS0[2:0]: Clock Select 0 [n = 0..2]
Ces bits servent dfinir la source dhorloge utilise par le Timer0 conformment
aux indications du tableau suivant
125
Timer/Counter0
Les interruptions relatives ce Timer sont gres au moyen de deux registres ,
un registre de masque dinterruption TIMSK0
Et un registre de drapeaux TIFR0.
Ces registres sont organiss comme suit :
TC0 Interrupt Mask Register TIMSK0
126
Timer/Counter0
TC0 Interrupt Flag Register TIFR0
Timer/Counter0
Trois autres registres 8 bits accessible en lecture et en criture sont aussi prsents dans
ce Timer :
-Le registre de comptage TCNT0
-Le registre de comparaison A (OCR0A)
- Le registre de comparaison B (OCR0B)
128
Timer/Counter0
Exercice 1 : Timer0
Donner le programme C qui utilise le Mode CTC pour raliser un signal de priode 4ms
sur le bit OC0A. La frquence du quartz sera de 16Mhz.
Exercice 2 :
Modifier le programme suivant pour raliser un clignotement du Hertz sur une Led
connecte sur le bit b4 du PORTB
1- Quelle la frquence relle de lxecution du code de linterruption
2- Raliser les modifications du code sans changer les valeurs du prescaler et du registre
OCR0A
129
Timer/Counter0
130
Timer/Counter0
Exercice 3
Le timer 0 possde des blocs de comptage et de comparaison de 8 bits. Sa frquence
de travail dpend de la frquence du microcontrleur FCK = 1 MHz et du diviseur
Prescaler
PVal = 1024. On se propose dactiver la broche PB5 en mode Toggle (basculement)
chaque interruption de fin de comptage : MaxValue (timer overflow). La dure du
timer overfloW est note TOV.
1- Exprimer la relation entre TOV , FCK, Pval et MaxValue.
2- Exprimer la frquence Fout du signal gnr sur la broche PB5.
3- Prciser les valeurs CS00 , CS01 et CS02 pour avoir un prescaler de 1024.
4- Calculer les valeurs pour assurer une frquence de sortie Fout = 10Hz ;
5- Donner le code de configuration pour :
Configurer la broche B5 en sortie
Activer les interruptions
Commander PB5 en mode toggle
Exercice 4: PWM
Produire un signal PWM sur la sortie PD6 (OC0A) avec un rapport cyclique de 7/8 .
Le signal dhorloge du circuit est FCPU = 1MHz.
131
Timer/Counter0
132
133
134
135
Caractristiques
136
137
138
digitalWrite(pin, value)
Sets pin value to LOW or HIGH (0 or 1)
Writes 1 bit in the PORTx register
Analog output
analogWrite(pin, value): value is 0 255
Generates a PWM output on digital pin (3, 5, 6, 9, 10, 11)
@490Hz frequency
140
141
142
143
144
145
Blink Program
146
Rfrences de programmation
Fonctions de base
Ces deux fonctions sont
obligatoires dans tout
programme en langage Arduino
:
void setup()
void loop()
Structures de contrle
if
if...else
for
switch case
while
do... while
break
continue
return
goto
Syntaxe de base
; (point virgule)
{} (accolades)
/ / (commentaire sur
une
ligne)
/* * / (commentaire sur
plusieurs lignes)
#define
#include
Oprateurs
arithmtiques
= (galit)
+ (addition)
- (soustraction)
* (multiplication)
/ (division)
% (modulo)
Oprateurs de
comparaison
== (gal )
!= (diffrent de)
< (infrieur )
> (suprieur )
<= (infrieur ou gal )
>= (suprieur ou gal )
Oprateurs
boolens
&& (ET boolen)
| | (OU boolen)
! (NON boolen)
147
* pointeur
& pointeur
Syntaxe de base
Oprateurs composs
++ (incrmentation)
-- (dcrmentation)
(
revoir)
+= (addition
compose)
-= (soustraction
compose)
*= (multiplication
compose)
/= (division
compose)
&= (ET bit bit
compos)
|= (OU bit bit
148
compos)
Variables et constantes
Constantes prdfinies
Structures de contrle
149
Fonctions
Entres/Sorties
Numriques
Temps
Trigonomtrie
sin (rad)
cos (rad)
tan (rad)
Entres analogiques
Math
int analogRead(broche)
analogReference (type)
min (x, y)
max (x, y)
abs (x)
constrain (x, a, b)
map (valeur, toLow,
fromHigh, toLow,
toHigh)
pow (base, exposant)
sq (x)
sqr t(x)
lowByte ()
highByte ()
bitRead ()
bitWrite ()
bitSe t()
bitClear ()
bi t()
Sorties "analogiques"
analogWrite (broche, valeur) - PWM
Entres/Sorties
Avances
tone ()
noTone ()
shiftOu t(broche,BrocheHorloge,
OrdreBit, valeur)
unsigned long
pulseIn(broche, valeur)
Communication: Seria l
Bits et Octets
Interruptions Externes
attachInterrup t(interruption, fonction,
mode)
detachInterrup t(interruption)
Nombres alatoires:
Interruptions
randomSeed (seed)
long random(max)
long random(min, max)
interrupts ()
noInterrupts ()
150
151
152
153
154
155
156
157
158
159
160
161
163
164
166
167
168
169
170
171
172
173
174de
UBRR11:0 USART Baud Rate Register Valeur permettant de slectionner la frquence
cadencement de l'USART.
175
176
177
178
180
181