Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
1,04 MB
Nội dung
La programmation des ATMEL AVR JUILLOT Guillaume septembre 2003 Table des mati` eres Introduction I Les I.1 I.2 I.3 I.4 I.5 I.6 I.7 I.8 I.9 microcontrˆ oleurs AVR pour les nuls Qu’est-ce qu’un microcontrˆ oleur ? Les entr´ees/sorties d’un microcontrˆoleur Timers/Counters et g´en´eration de PWM Convertisseurs analogique/num´erique Communication s´erie USART Comparateur analogique Watchdog Timer Modes d’´economie d’´energie Interruptions internes et externes 5 7 8 II La programmation des microcontrˆ oleurs en C II.1 D´ebuter avec Imagecraft II.2 La s´eparation de code en plusieurs fichiers et quelques fonctions II.2.1 La d´efinition de fonctions utiles `a l’aide de #define II.2.2 Rajouter un fichier ` a un projet II.3 Les interruptions avec ImageCraft AVR II.4 L’assembleur dans un programme en C II.5 Quelques compl´ements sur le compilateur ICC AVR utiles 11 11 13 14 14 15 16 16 III La simulation des progammes III.1 Premiers pas avec AVR Studio III.2 Workspace III.3 Programme en cours III.4 Contrˆ ole du d´eroulement III.5 Choix de la vue III.6 Output view 19 19 20 21 21 22 22 IV L’impl´ ementation r´ eelle sur le microcontrˆ oleur IV.1 L’alimentation IV.2 L’horloge IV.3 Le port de programmation IV.4 Comment impl´ementer notre programme dans le microcontrˆoleur 23 23 23 24 26 Le mot de la fin 29 A Sch´ ema de l’ATmega128 31 B Conversion hexad´ ecimal/binaire/d´ ecimal B.0.1 Convention d’´ecriture 33 33 ` TABLE DES MATIERES C Aide ` a la programmation C.1 Type de donn´ees C.2 Gestion des entr´ees/sorties C.3 Interruptions externes C.4 Timer/Counter0 (8 bits) C.5 Timer/Counter2 (8 bits) C.6 Timer/Counter1 et (16 bits) C.7 Interruptions pour Timers/Counters C.8 G´en´eration de PWM sur OC0 (8 bits) C.9 G´en´eration de PWM sur OC2 (8 bits) C.10 PWM sur OC1A, OC1B, OC1C, OC3A, OC3B et OC3C (de `a 10 bits) C.11 USART 35 35 35 35 36 36 37 37 37 38 38 39 Adresses Internet utiles 41 Index 43 Introduction Ce document a ´et´e ´ecrit dans le cadre de la coupe 2003 de robotique e=M6 Il a pour but de vous pr´esenter toutes les phases de d´eveloppement d’un projet sur les microcontrˆoleurs de la famille AVR de chez ATMEL Cette pr´esentation est d´ecompos´ee en quatre parties La premi`ere sera une description aussi compl`ete que possible des possibilit´es qu’offrent les microcontrˆoleurs choisis Suivront les rudiments de la programmation en C et en assembleur, `a l’aide du compilateur Imagecraft Un aspect important est la simulation du programme, qui se fera `a l’aide de AVR Studio dans la troisi`eme partie du pr´esent document Je terminerai en pr´esentant la mise en pratique du programme en l’impl´ementant sur le microcontrˆ oleur Les exemples donn´es seront valables pour un ATmega128 Il est possible qu’ils ne soient plus valables pour un autre microcontrˆ oleur Dans tous les cas il est vivement recommand´ e d’avoir une datasheet compl` ete de l’ATmega128 sous les yeux pour mieux pouvoir suivre les exemples Utilisez ´egalement la datasheet d’un autre microcontrˆoleur si vous souhaitez adapt´e les exemples au microcontrˆ oleur de votre choix INTRODUCTION Chapitre I Les microcontrˆ oleurs AVR pour les nuls Les microcontrˆ oleurs de la famille AVR d’ATMEL poss`edent de nombreuses caract´eristiques diff´erentes, aussi bien en termes de vitesse, m´emoire, nombre d’entr´es/sorties mais aussi au niveau des fonctions particuli`eres qui sont disponibles Il conviendra donc de choisir le microcontrˆoleur en fonction de l’utilisation qui est ` a faire - par exemple, il est conseill´e d’´eviter d’utiliser un ATmega128 si l’on ne cherche qu’` a g´en´erer un PWM1 I.1 Qu’est-ce qu’un microcontrˆ oleur ? Un microcontrˆ oleur est compos´e d’un microprocesseur, de m´emoire ROM pour stocker le programme et d’une m´emoire RAM volatile pour conserver les r´esultats interm´ediaires lors de l’ex´ecution du programme Mais les microcontrˆ oleurs poss`edent des avantages incomparables pour l’informatique embarqu´ee par rapport aux microprocesseurs Ce sont d’abord les broches qui peuvent servirent d’entr´ees/sorties mais surtout toutes les fonctions p´eriph´eriques En effet, selon le microcontrˆoleur consid´er´e, on peut trouver : – plusieurs Timers/Counters – G´en´eration de signaux PWM – Nombreux convertisseurs analogiques/num´eriques – Communication s´erie USART – Comparateur analogique – Watchdog Timer – Oscillateur RC interne – Modes d’´economies d’´energie – Interruptions internes et externes I.2 Les entr´ ees/sorties d’un microcontrˆ oleur La plupart des pattes d’un microcontrˆoleur peuvent servir soit d’entr´ees, soit de sorties, et ce choix peut changer ` a tout instant comme le veut le d´eveloppeur Les entr´ees/sorties sont regroup´ees par huit et le groupement de huit pattes ainsi form´e est appel´e port et se voit attribu´e une lettre Par exemple, les broches 44 `a 51 forment le port A PWM = Pulse Width Modulation, c’est un signal rectangulaire caract´ eris´ e par le rapport cyclique (tempshaut /tempsbas ), c’est-` a-dire avec un temps a ` diff´ erent du temps ` a ˆ CHAPITRE I LES MICROCONTROLEURS AVR POUR LES NULS Chaque patte est ensuite num´erot´ee selon sa position au sein de ce port Par exemple, la broche 46 est appel´ee PA52 Trois registres3 servent `a g´erer les entr´ees/sorties : – DDRx4 : indique quelles sont les pattes consid´er´ees comme des entr´ees et celles consid´er´ees comme des sorties Si le ni`eme bit de DDRx (not´e DDxn) est `a 1, alors la ni`eme patte du port x (not´ee Pxn) est consid´er´e comme une sortie Si DDxn est `a 0, alors Pxn est consid´er´ee comme une entr´ee – PORTx : la valeur du ni`eme bit de PORTx (not´e PORTxn) d´efinit la valeur de sortie de Pxn Si PORTxn=1, alors Pxn=+Vcc, si PORTxn=0, alors Pxn=Gnd – PINx : la valeur du ni`eme bit de PINx (not´e PINxn) est la valeur qui est appliqu´ee `a l’entr´ee du microcontrˆ oleur Par exemple, si on applique +Vcc `a Pxn, alors PINxn=1 La plupart des pattes poss`edent des fonctions p´eriph´eriques qui inhibent l’utilisation en tant qu’entr´ees/sorties Si l’on utilise les fonctions p´eriph´eriques, il ne faut en aucun cas modifier les bits DDRxn, PORTxn et PINxn correspondants I.3 Timers/Counters et g´ en´ eration de PWM Les Timers/Counters, not´es TCNTn o` u n est le num´ero Timer/Counter, sont des compteurs cadenc´es selon une certaine fr´equence d´efinie Lorsqu’il atteint son maximum (MAX5 ), il passe `a et recommence ` a compter Ce passage de MAX `a peut s’accompagner d’une interruption interne (cf Interruptions internes et externes en page 9) ` ces Timers/Counters se rajoutent un comparateur dont on peut d´efinir le seuil `a l’aide du A registre OCRn Lorsque le TCNTn atteint la valeur de OCRn, alors la patte OCn change de valeur, passant de ` a ou de ` a selon la configuration puis retournant `a la valeur initiale lorsque TCNTn passe de MAX ` a Ces Timers/Counters peuvent donc avoir plusieurs utilisations D’abord, le programmeur peut savoir le temps ´ecoul´e depuis qu’il a lanc´e le Timer/Counter Ou encore, l’interruption de passage de MAX ` a peut ˆetre utilis´ee pour temporisation, et commencer ou arrˆeter un programme au bout d’un certain temps La derni`ere utilisation, tr`es utile en robotique pour la commande de servomoteurs, est la g´en´eration de signaux PWM En effet, si la patte OCn change de valeur lorsque le TCNTn atteint la valeur du comparateur OCRn, on obtient sur OCn un signal alternativement `a puis ` a avec des dur´ee ` a et ` a r´eglables On a bien OCn qui est un signal PWM dont on peut d´efinir le rapport cyclique en mettant la bonne valeur dans OCRn Plusieurs registres sont utilis´es pour configurer les Timers/Counters : TCCRn, OCRn, ASSR, TIMSK et TIFR Leurs configurations sont compliqu´ees, il convient de se reporter aux chapitres correspondants de la datasheet La valeur du Timer/Counter, accessible via le registre TCNTn, peut ˆetre modifi´ee `a tout instant afin de r´einitialiser ma s´equence `a partir ` noter que la d’une certaine valeur, apr`es avoir atteint MAX, le compteur recommencera `a A fr´equence de comptage peut ˆetre un sous-multiple de la fr´equence du microcontrˆoleur ou encore ˆetre impos´ee par une horloge externe connect´ee `a une patte du microcontrˆoleur Certains compteurs fonctionnent sur 16 bits Ils pr´esentent plusieurs avantages : ils peuvent compter plus loin donc plus longtemps ; lors d’une utilisation pour g´en´erer du PWM, la r´esolution est plus ´elev´ee ; et surtout ils poss`edent deux comparateurs dont les seuils peuvent ˆetre r´egl´es diff´erement, ce qui permet d’obtenir sur les pattes OCnA et OCnB deux signaux PWM de mˆeme fr´equence mais de rapport cyclique diff´erent `a l’aide d’un seul Timer/Counter Dans le Les plus perspicaces auront remarqu´ e que l’ordre des num´ eros sur le port A est invers´ e par rapport aux num´ eros des pattes En r´ ealit´ e, cela d´ epend du port, certains sont dans le bon sens, d’autres non Voir dans la datasheet Un registre est une variable interne de huit bits, utilis´ ee pour d´ efinir le comportement du microcontrˆ oleur ou pour savoir dans quel ´ etat il se trouve x repr´ esente la lettre du port, par exemple DDRA ou DDRB pour un compteur sur m bits, alors MAX = 2m − ´ I.4 CONVERTISSEURS ANALOGIQUE/NUMERIQUE cas de Timer/Counter sur 16 bits, le registre TCNTn se d´ecompose en deux registres TCNTnL et TCNTnH tandis que OCRn se d´ecompose en OCRnAL et OCRnAH pour le premier comparateur et OCRnBL, OCRnBH pour le deuxi`eme comparateur I.4 Convertisseurs analogique/num´ erique Le monde r´eel ´etant continu, c’est-`a-dire analogique, tandis que les microcontrˆoleurs fonctionnent en num´erique, il faut bien avoir une interface entre les deux : le convertisseur analogique/num´erique6 Son fonctionnement est simple `a comprendre : `a intervalles de temps r´eguliers, la tension analogique est mesur´ee puis arrondie afin de pouvoir ˆetre convertie en num´erique La conversion est donc d’autant plus fid`ele que le nombre de bits du codage est ´elev´e et est inversement proportionnelle ` a la plage de tension analogique en entr´ee Les microcontrˆoleurs de la famille AVR poss`edent des convertisseurs embarqu´es donc il n’est pas n´ecessaire d’en concevoir ou d’en acheter Par exemple, l’ATmega128 poss`ede un CAN fonctionnant sur 10 bits Ce CAN peut convertir jusqu’`a signaux analogiques par intermittence Le temps maximum de conversion est de 260µs mais peut ˆetre diminu´e en r´eduisant la r´esolution (nombre de bits du codage) L’´echelle de tension en entr´ee est par d´efaut [0, V cc] mais peut ˆetre pass´ee `a [0, Vref ] o` u Vref ≤ V cc est une tension appliqu´ee ` a la patte Aref (no 62) A noter que les CAN peuvent ˆetre configur´es pour ne faire qu’une conversion ou pour convertir en continu la tension analogique, la conversion ´etant alors r´eguil`erement mise ` a jour selon la dur´ee de conversion I.5 Communication s´ erie USART USART est l’abr´evation pour Universal Synchronous and Asynchronous serial Receiver and Transmitter, c’est un syst`eme de communication point-`a-point tr`es flexible Les donn´ees sont transmises par trames de `a 13 bits La trame a le format suivant : ❉ ☎ ❉☎ ❉☎ ❉☎ ❉☎ ❉☎ ❉☎ ❉☎ ❉☎ ❉☎ ☎ ❉ (IDLE) ❉ St ☎ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ [5] ☎❉ [6] ☎❉ [7] ☎❉ [8] ☎❉ [P] ☎ Sp1 [Sp2] ❉ (St/IDLE) ❉ ❉ ☎ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ ☎❉ ☎ St : bit de d´epart, toujours ` a0 n : bits de donn´ees P : bit de parit´e Sp : bit(s) de fin, toujours `a IDLE : pas de transfert, la ligne doit ˆetre `a Fig I.1 – Trame USART Les ´el´ements entre crochets sont facultatifs, leur pr´esence est d´efinie par le d´eveloppeur Le bit de parit´e permet de v´erifier rapidement s’il y a eu une erreur de transmission mais n’est pas fiable `a 100% L’USART se d´ecompose en trois parties : L’´ emetteur : se charge d’´emettre sur la patte TXDn, `a la fr´equence configur´ee, la trame selon la valeur stock´ee dans le registre UDR ; il s’occupe donc automatiquement de la g´en´eration des bits Start, Stop et ´eventuellement Parity Des interruptions peuvent ˆetre d´eclench´ees lorsque la transmission est termin´ee en abr´ eg´ e, CAN ou ADC en anglais pour Analog to Digital Converter ˆ CHAPITRE I LES MICROCONTROLEURS AVR POUR LES NULS Le r´ ecepteur : d`es d´etection sur la patte RXDn d’un bit Start valide (c’est-`a-dire `a 0), chaque bit de la trame est alors ´echantillon´e selon la fr´equence configur´ee ou selon l’horloge sur XCK, et stock´e dans un registre temporaire jusqu’`a r´eception de la trame compl`ete Ensuite, la valeur re¸cue est d´eplac´ee dans le registre UDR accessible par le programme Une interruption peut ˆetre d´eclench´ee lors de la fin de r´eception pour pr´evenir qu’une trame est arriv´ee Si le programme n’a pas lu une trame lorsqu’une deuxi`eme trame arrive, la premi`ere trame est perdue Si la transmission s’est mal d´eroul´ee, par exemple si la trame est non conforme, si le bit de parit´e n’est pas correct ou si des donn´ees re¸cues n’ont pas ´et´e lues, divers drapeaux7 passent ` a et les donn´ees erron´ees sont effac´ees Le g´ en´ erateur d’horloge : lors d’une utilisation en mode synchrone, un g´en´erateur est d´eclar´e maˆıtre et l’autre esclave Le maˆıtre g´en`ere le signal d’horloge selon le d´ebit souhait´e et l’envoit sur la patte XCK du microcontrˆoleur L’horloge esclave re¸coit ce signal d’horloge sur sa patte XCK et l’utilise pour ´echantilloner les trames ou les ´emettre au bon rythme En mode asynchrone, l’USART en reception se charge de synchroniser son horloge sur la trame arrivante La configuration doit ˆetre faite avant toute tentative d’envoi de donn´ees et ne devra pas ˆetre chang´ee tant que des donn´ees restent ` a ´emettre/recevoir Il faut bien veiller `a ce que la configuration soit toujours identique sur les deux microcontrˆoleurs pour le format de la trame, le d´ebit et qu’en mode synchrone les deux pattes SCK soient reli´ees et qu’un USART soit en maˆıtre et l’autre en esclave I.6 Comparateur analogique Outre les convertisseurs analogiques/num´eriques, les microcontrˆoleurs AVR poss`edent un comparateur analogique Celui-ci compare les deux tensions appliqu´ees aux pattes AIN0 et AIN1 Si AIN < AIN alors le bit ACO (5`eme bit du registre ACSR) passe `a Sinon, ACO reste `a De plus, une interruption peut ˆetre d´eclench´ee lors du passage `a de ACO I.7 Watchdog Timer Le Watchdog Timer se charge de faire des RESET `a intervalle de temps r´egulier Il utilise un oscillateur RC interne en tant qu’horloge cadenc´ee `a 1MHz Ce syst`eme permet de recommencer le mˆeme programme ` a intervalles de temps r´eguliers ou encore de se r´eveiller d’un mode d’´economie d’´energie apr`es un certain lapse de temps (voir paragraphe suivant) A noter que la m´emoire RAM n’est pas perdu au cours de ce RESET, ce qui permet d’augmenter le temps entre deux r´eex´ecution du programme en tenant ` a jour un compteur qui est d´ecr´ement´e `a chaque Watchdog Reset jusqu’`a ce qu’il atteigne et alors on commence r´eellement le programme I.8 Modes d’´ economie d’´ energie Certaines applications ne n´ecessitent pas que le microcontrˆoleur tourne continuellement Il serait donc souhaitable de le d´esactiver, de ”l’endormir”, pour qu’il consomme aussi peu d’´energie que possible Ceci est possible grˆ ace aux Sleep Mode Plusieurs modes sont disponibles, afin de pouvoir ”endormir” ce dont on n’a pas besoin et de conserver ce qui doit l’ˆetre Une fois configur´e, il suffit pour entrer dans le mode d’´enregie d’ex´ecuter l’instruction SLEEP La sortie du mode se fait via une interruption externe ou interne, selon le mode utilis´e Un drapeau est un bit indiquant qu’un ´ ev` enement s’est produit Le mot de la fin Voil`a, vous savez tout ce que vous avez besoin de savoir pour faire un projet sur les microcontrˆoleurs AVR d’ATMEL Je tiens ` a remercier tout ceux qui m’ont aid´e et soutenu lors de la d´ecouverte de ces microcontrˆ oleurs Parmi eux, les membres de mon ´equipe : Fran¸cois BARRE, ` Vincent BORREL, Guillaume DUPUY, Thomas LEFEVRE, Arnaud LESUEUR, Jean-Baptiste RICHARD et Benjamin SARDA ainsi que les anciens de la robotique `a l’ENST Bretagne : Pascal LEGRAND, Samuel MESCOFF, S´ebastien ROY, Luc SORGUE et Nicolas TORNERI Si vous avez des commentaires, suggestions ou si vous avez un texte `a rajouter `a ce document, je me ferai un plaisir d’en tenir compte Envoyez-moi un simple mail `a juillot_guillaume@hotmail.com 29 30 LE MOT DE LA FIN Annexe A Sch´ ema de l’ATmega128 31 32 ´ ANNEXE A SCHEMA DE L’ATMEGA128 Annexe B Conversion hexad´ ecimal/binaire/d´ ecimal B.0.1 Convention d’´ ecriture En d´ecimal, notre base habituel, le nombre est ´ecrit comme d’habitude : 21 En h´exad´ecimal, on le fait pr´ec´eder d’un ”0x” : 0x15 En binaire, on le termine par un ”b” : 00010101b Conversion binaire/hexad´ ecimal Pour convertir un octet binaire en une valeur hexad´ecimal, proc´edez ainsi : D´ecouper votre octet en deux parties de bits Convertir les deux morceaux obtenus selon le tableau suivant : binaire hexadecimal 0000 0001 0010 0011 0100 0101 0110 0111 binaire hexadecimal 1000 1001 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F Et pour finir on colle ensemble les deux symboles hexad´ecimal pour trouver la conversion Par exemple : 01111101b e´tape1 e´tape2 e´tape3 0111 et 1101 et D d’o` u 01111101b = 0x7D Suivez les ´etapes en sens inverse pour convertir un nombre hexad´ecimal en binaire 33 ´ ´ ANNEXE B CONVERSION HEXADECIMAL/BINAIRE/D ECIMAL 34 Conversion hexad´ ecimal/d´ ecimal 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x.0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 0x.1 17 33 49 65 81 97 113 129 145 161 177 193 209 225 241 0x.2 18 34 50 66 82 98 114 130 146 162 178 194 210 226 242 0x.3 19 35 51 67 83 99 115 131 147 163 179 195 211 227 243 0x.4 20 36 52 68 84 100 116 132 148 164 180 196 212 228 244 0x.5 21 37 53 69 85 101 117 133 149 165 181 197 213 229 245 0x.6 22 38 54 70 86 102 118 134 150 166 182 198 214 230 246 0x.7 23 39 55 71 87 103 119 135 151 167 183 199 215 231 247 0x.8 24 40 56 72 88 104 120 136 152 168 184 200 216 232 248 0x.9 25 41 57 73 89 105 121 137 153 169 185 201 217 233 249 0x.A 10 26 42 58 74 90 106 122 138 154 170 186 202 218 234 250 0x.B 11 27 43 59 75 91 107 123 139 155 171 187 203 219 235 251 0x.C 12 28 44 60 76 92 108 124 140 156 172 188 204 220 236 252 0x.D 13 29 45 61 77 93 109 125 141 157 173 189 205 221 237 253 0x.E 14 30 46 62 78 94 110 126 142 158 174 190 206 222 238 254 0x.F 15 31 47 63 79 95 111 127 143 159 175 191 207 223 239 255 Annexe C Aide ` a la programmation C.1 Type de donn´ ees Type Taille (octects) Domaine unsigned char 255 signed char -128 127 char (*) 255 unsigned short 65535 (signed) short -32768 32767 unsigned int 65535 (signed) int -32768 32767 pointer unsigned long 4294967295 (signed) long -2147483648 2147483647 float +/-1.175e-38 3.40e+38 double +/-1.175e-38 3.40e+38 (*) ”char” est ´equivalent ` a ”unsigned char” C.2 Gestion des entr´ ees/sorties DDRx : Data Direction Register, bit `a pour que la patte correspondante soit une entr´ee, `a pour une sortie PORTx : pour changer la valeur des pattes en sortie PINx : pour obtenir la valeur des pattes en entr´ee x est une lettre entre A et G indiquant le port consid´er´e C.3 Interruptions externes EICRA, External Interrupt Control Register A bit EIRCA ISC3 ISC2 ISC1 ISCn 00 01 10 11 ISC0 35 Interruption de INTn sur niveau bas non disponible front descendant front montant ` LA PROGRAMMATION ANNEXE C AIDE A 36 EICRB, External Interrupt Control Register B bit EIRCB ISC7 ISC6 ISC5 ISC4 ISCn 00 01 10 11 Interruption de INTn sur niveau bas front montant et front descendant front descendant front montant EIMSK, External Interrupt Mask bit EIMSK INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 INTn ` a pour que l’interruption externe correspondante soit prise en compte C.4 Timer/Counter0 (8 bits) TCNT0, Timer Counter Register : indique la valeur courante du Timer/Counter0 OCR0, Output Compare Register : peut ˆetre utilis´e pour g´en´erer une interruption en cours de comptage (voir C.7) TCCR0, Timer Counter Control Register TCCR0 Fr´equence de comptage Dur´ee totale (*) 0x00 Timer/Counter0 arrˆet´e 0x01 clkI/0 16µs 0x02 clkI/0 / 128µs 0x03 clkI/0 / 32 512µs 0x04 clkI/0 / 64 1, 024ms 0x05 clkI/0 / 128 2, 048ms 0x06 clkI/0 / 256 4, 096ms 0x07 clkI/0 / 1024 16, 384ms (*) Dur´ee entre deux retours ` a pour un microcontrˆoleur cadenc´e `a 16MHz C.5 Timer/Counter2 (8 bits) TCNT2, Timer Counter Register : indique la valeur courante du Timer/Counter2 OCR2, Output Compare Register : peut ˆetre utilis´e pour g´en´erer une interruption en cours de comptage (voir C.7) TCCR2, Timer Counter Control Register TCCR2 Fr´equence de comptage Dur´ee totale (*) 0x00 Timer/Counter2 arrˆet´e 0x01 clkI/0 16µs 0x02 clkI/0 / 128µs 0x03 clkI/0 / 64 1, 024ms 0x04 clkI/0 / 256 4, 096ms 0x05 clkI/0 / 1024 16, 384ms 0x06 Horloge externe sur T2 (front descendant) 0x07 Horloge externe sur T2 (front montant) (*) Dur´ee entre deux retours ` a pour un microcontrˆoleur cadenc´e `a 16MHz C.6 TIMER/COUNTER1 ET (16 BITS) C.6 37 Timer/Counter1 et (16 bits) TCNTnH et TCNTnL, Timer Counter Register High et Low : indique la valeur courante du Timer/Counter OCRnAH, OCRnAL utilis´es pour g´en´erer des interruptions en cours de comptage OCRnBH, OCRnBL (voir C.7) OCRnCH, OCRnCL TCCRnA, Timer Counter Control Register A = 0x00 TCCRnB, Timer Counter Control Register B TCCRnB Fr´equence de comptage Dur´ee totale (*) 0x00 Timer/Counter2 arrˆet´e 0x01 clkI/0 4, 096ms 0x02 clkI/0 / 32, 768ms 0x03 clkI/0 / 64 262, 144ms 0x04 clkI/0 / 256 1, 048576s 0x05 clkI/0 / 1024 4, 194304s 0x06 Horloge externe sur Tn (front descendant) 0x07 Horloge externe sur Tn (front montant) (*) Dur´ee entre deux retours ` a pour un microcontrˆoleur cadenc´e `a 16MHz C.7 Interruptions pour Timers/Counters TIMSK, Timer Counter Interrupt Mask bit TIMSK Comp2 Over2 Comp1A Comp1B Over1 Comp0 Over0 ETIMSK, Extended Timer Counter Interrupt Mask bit ETIMSK 0 Comp3A Comp3B Over3 Comp3C Comp1C Overn ` a active l’interruption d’Overflow du Timer/Counter n, c’est-`a-dire qu’une interruption est d´eclench´e quand le Timer/Counter revient `a la valeur Compnx ` a active l’interruption de comparaison lorsque le Timer/Counter n atteint la valeur du registre OCRnx C.8 G´ en´ eration de PWM sur OC0 (8 bits) OCR0 haut OCR0, Output Compare Register : permet de d´efinir le rapport cyclique η = temps tempsbas = 256 TCCR0, Timer Counter Control Register TCCR0 Fr´equence du signal PWM P´eriode (*) Commentaire 0x68 Timer/Counter0 arrˆet´e A ´eviter 0x69 clkI/0 / 256 16µs 0x6A clkI/0 / 2048 128µs 0x6B clkI/0 / 8192 512µs 0x6C clkI/0 / 16384 1, 024ms 0x6D clkI/0 / 32768 2, 048ms 0x6E clkI/0 / 65536 4, 096ms 0x6F clkI/0 / 262144 16, 384ms Recommand´e pour les servomoteurs (*) P´eriode du signal PWM pour un microcontrˆoleur cadenc´e `a 16MHz ` LA PROGRAMMATION ANNEXE C AIDE A 38 C.9 G´ en´ eration de PWM sur OC2 (8 bits) Attention, OC2 est commun avec une autre sortie PWM, OC1C haut OCR2, Output Compare Register : permet de d´efinir le rapport cyclique η = temps tempsbas = TCCR2, Timer Counter Control Register TCCR2 Fr´equence du signal PWM P´eriode (*) Commentaire 0x68 Timer/Counter0 arrˆet´e A ´eviter 0x69 clkI/0 / 256 16µs 0x6A clkI/0 / 2048 128µs 0x6B clkI/0 / 16384 1, 024ms 0x6C clkI/0 / 65536 4, 096ms 0x6D clkI/0 / 262144 16, 384ms Servomoteurs 0x6E Horloge externe sur T2 (front descendant) 0x6F Horloge externe sur T2 (front montant) (*) P´eriode du signal PWM pour un microcontrˆoleur cadenc´e `a 16MHz C.10 OCR2 256 PWM sur OC1A, OC1B, OC1C, OC3A, OC3B et OC3C (de ` a 10 bits) Dans ce qui suit, n vaut ou et x vaut A, B ou C OCRnxH OCRnxL ⇒ forment par concat´enation OCRnx=65536*OCRnxH+OCRnxL rapport cyclique ηnx = OCRnx o` u resolution ∈ {8, 9, 10} selon la configuration choisie 2resolution TCCRnA, Timer Counter Control Register A bit TCCRnA COMnA COMnB COMnC WGMn COMnx 00 10 WGMn 01 10 11 Description OCnx non utilis´e OCnx utilis´e R´esolution bits bits 10 bits TCCRnB, Timer Counter Control Register B TCCRnB bits Fr´equence PWM bits 10 bits Fr´equence `a 16MHz Fr´equence `a 16MHz Fr´equence `a 16MHz 0x09 clkI/O resolution clkI/O 256 16µs clkI/O 512 32µs clkI/O 1024 64µs 0x0A clkI/O ∗ 2resolution clkI/O 2048 128µs clkI/O 4096 256µs clkI/O 8192 512µs 0x0B clkI/O 64 ∗ 2resolution clkI/O 16384 1, 024ms clkI/O 32768 2, 048ms clkI/O 65536 4, 096ms C.11 USART TCCRnB 39 bits Fr´equence PWM bits 10 bits Fr´equence `a 16MHz Fr´equence `a 16MHz Fr´equence `a 16MHz 0x0C clkI/O 256 ∗ 2resolution clkI/O 65536 4, 096ms clkI/O 131072 8, 192ms clkI/O 262144 16,384ms 0x0D clkI/O 1024 ∗ 2resolution clkI/O 262144 16,384ms clkI/O 524288 32, 768ms clkI/O 1048576 65, 536ms C.11 USART Dans ce qui suit, n vaut ou selon l’USART consid´er´e Format de la trame : voir page UDRn, USARTn Data Register : destination des donn´ees re¸cues ou origine des donn´ees ` a envoyer UCSRnA, USARTn Control and Status Register A : non utilis´e pour la configuration UCSRnB, USARTn Control and Status Register B bit UCSRnB RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n ➫ RXCIEn : ` a pour permettre le d´eclenchement d’une interruption lors d’une r´eception termin´ee ➫ TCCIEn : ` a pour permettre le d´eclenchement d’une interruption lors d’une ´emission termin´ee ➫ UDRIEn : ` a pour permettre le d´eclenchement d’une interruption lorsque l’´emetteur est prˆet ` a ´emettre ➫ RXENn : ` a pour autoriser la r´eception ➫ TXENn : ` a pour autoriser l’´emission ➫ UCSZn2 : ` a pour indiquer une trame de bits, `a si bits ou moins ➫ RXB8n : 9eme ` a la r´eception si utilisation d’une trame de bits A lire avant UDRn ➫ TXB8n : 9eme ` a l’´emission si utilisation d’une trame de bits A ´ecrire avant UDRn UCSRnC, USARTn Control and Status Register C bit UCSRnC UMSELn UPMn USBSn UCSZn UCPOLn ➬ UMSELn : ` a pour communication asynchrone, `a pour synchrone UPMn Bit de parit´e 00 d´esactiv´e ➬ UPMn : 10 pair 11 impair ➬ USBSn : `a pour une trame ` a bit Stop, `a pour bits Stop UCSZn Taille des donn´ees 00 ➬ UCSZn : 01 10 11 ou selon UCSZn2 du registre USCRnB ➬ UCPOLn : inutile en mode asynchrone, peu utile en mode synchrone, `a mettre `a ` LA PROGRAMMATION ANNEXE C AIDE A 40 UBRRnH UBRRnL ⇒ forment par concat´enation UBRRn=65536*UBRRnH+UBRRnL UBRRn, USARTn Baud Rate Register : valeur maximale = 0x0FFF Calcul du d´ebit Calcul de Mode en bits/s (bps) UBRRn Asynchrone U BRRn = f 16(U BRRn + 1) BAU D = f −1 16 ∗ BAU D Synchrone U BRRn = f 2(U BRRn + 1) BAU D = f −1 ∗ BAU D Exemples de configuration Communication asynchrone, trame de bits avec un bit de parit´e pair, 9600 bps pour un microcontrˆoleur cadenc´e `a 16MHz : UCSRnC = 0x26 ; UBRRnL = 0x67 ; UBRRnH = 0x00 ; – Emetteur, sans interruption : UCSRnB = 0x08 ; – Emetteur, avec interruption : UCSRnB = 0x48 ; – R´ecepteur, sans interruption : UCSRnB = 0x10 ; – R´ecepteur, avec interruption : UCSRnB = 0x90 ; Code C pour une trame de bits ou moins, sans gestion d’interruptions – Emission : while ( ! ( UCSRnA & (1