Les Microcontrôleurs Flash ATMEL AVR

1- L'architecture RISC

La technologie RISC consiste à déplacer les complexités majeures du hardware vers le software, ce qui est le contraire exact de la technologie CISC (Complex Instruction Set Computer). Dans l'architecture CISC les concepteurs ont misé sur la réduction du nombre d'instructions nécessaires pour exécuter le programme, en concevant des instructions très puissantes, ce qui a l'inconvénient de devoir augmenter moyennement le nombre de cycles machine nécessaires pour compléter une instruction. Dans ce cas, la fréquence de travail du système est réduite car il faut introduire une phase d'interprétation du code machine à travers des microcodes. Par contre, dans l'architecture RISC, on mise beaucoup sur la minimisation du nombre des cycles machine et l'on rend la majeure partie des instructions exécutables en un seul cycle d'horloge, ce qui permet d'augmenter la fréquence de travail du système. Ceci est possible en éliminant la phase d'interprétation grâce à la simplicité des instructions qui peuvent être décodées et exécutées directement par une simple unité de contrôle câblée. La simplification des unités de contrôle des machines de type RISC est particulièrement avantageuse pour la réalisation de la CPU sur un seul chip VLSI. L'économie d'espace obtenue permet, à zone de silice égale, d'augmenter sensiblement le nombre de registres internes et/ou d'intégrer directement sur le chip la mémoire cache pour exploiter au maximum la vitesse du microprocesseur. Malheureusement, la technologie RISC a aussi des défauts. En effet, le nombre réduit d'instructions fait que le software résultant, à fonctions à accomplir égales, occupe plus de mémoire que celui d'une machine CISC, aussi bien statiquement que dynamiquement. Toutes les machines RISC utilisent la technique du “pipelining” pour augmenter leurs prestations en terme d'instructions exécutées dans l'unité de temps.

La famille AVR à 8 bits

Vous trouverez dans les tableaux 1 et 2 la liste des principales ressources internes de la famille des microcontrôleurs AVR.

AVR : Mémoire et prestations

Tableau 1 : Mémoire et prestations.

Ce qui différencie les divers microcontrôleurs AVR est le nombre d'instructions Assembleur disponibles, la quantité de mémoire SRAM présente et surtout le nombre de lignes d'entrées/sorties (E/S ou I/O pour Input/Output), ainsi que la présence ou l'absence de périphériques tels que le UART, le timer,le convertisseur A/D, etc. Par exemple le AT90S1200 est un microcontrôleurs qui possède 89 instructions Assembleur, 1 kilobyte de mémoire programme, 15 lignes de I/O, 64 bytes de EEPROM et 32 registres d'utilisation générale. Ce qui unie la famille entière est l'architecture avec laquelle ces microcontrôleurs sont réalisés, le jeu d'instruction et les différentes méthodes de placement de la mémoire et des registres.

AVR : Ressources internes

Tableau 2 : Ressources internes.

L'architecture se base, en particulier, sur le concept d'accès rapide aux registres. Les registres, comme vous le savez, sont des zones de mémoire utilisées pour communiquer avec les périphériques disponibles à l'intérieur du microcontrôleur comme les compteurs, les timers, les convertisseurs A/D et les ports d'I/O. Certains registres peuvent être utilisés comme des pointeurs à placement indirect à 16 bits pour communiquer avec de la mémoire : ces registres à 16 bits sont appelés registres X, Y, Z. Une autre caractéristique commune est le mode par lequel le microcontrôleur exécute les instructions. On l'appelle instruction “pipelining” (chaîne de montage). Le “pipelining” consiste à exécuter une instruction et à aller chercher simultanément l'instruction suivante.

Le microcontrôleur ATMEL AT90S8515

Cette brève introduction vous permet de comprendre qu'en apprenant la structure de n'importe quel microcontrôleur AVR, vous serez automatiquement en mesure de travailler avec la famille entière. C'est la raison pour laquelle tout le cours est basé sur un seul modèle de microcontrôleur. Le choix s'est porté logiquement vers le type le plus courant, c'est-à-dire le AT90S8515 dont le schéma synoptique est donné en figure 1. Ce microcontrôleur, contenu dans un boîtier à 40 pattes, fournit un jeu de 118 instructions Assembleur, 8 kbytes de mémoire programme, 512 bytes de EEPROM, 512 bytes de SRAM et 32 lignes de I/O. Le dispositif exécute de puissantes instructions en un seul cycle d'horloge, il est capable de traiter 1 MIPS par MHz (ceci en théorie). Parmi ses autres caractéristiques, signalons la présence de 32 registres pour des opérations de I/O et 32 registres d'utilisation générale, des interruptions internes ou externes, un UART programmable par interconnexions sérielles, un watchdog timer programmable avec oscillateur interne, un port sériel SPI, deux états à basse consommation que vous pouvez sélectionner via software et un timer/ counter. Les deux états de basse consommation sont appelés respectivement “idle mode” et “power down mode”. Le premier arrête le CPU mais permet à la SRAM, au timer/counter, au port sériel SPI et aux systèmes d'interruption de continuer à fonctionner, alors que dans le second mode, le contenu des registres est sauvé et l'oscillateur est “gelé” ; toutes les autres fonctions du chip sont désactivées jusqu'à ce que l'on intervienne avec une interruption externe ou en effectuant un RESET du CPU. Comme nous venons de le dire, le microcontrôleur AT90S8515 est disponibleen version 40 broches (voir figure 2). Nous allons les décrire une par une.

Schéma synoptique interne du microcontrôleur ATMEL AVR AT90S8515

Figure 1 : Schéma synoptique interne du microcontrôleur ATMEL AVR AT90S8515.

La description des broches

AVR : description des broches

Figure 2 : Brochage du AT90S8515.

Vcc : Patte d'alimentation positive (broche 40).

GND : Masse d'alimentation (broche 20).

Port A (PA7…PA0) : C'est un port de I/O bidirectionnel. Toutes les pattes du port ont des résistances internes de pull-up. Le buffer de sortie est en mesure de fournir jusqu'à 20 mA de courant, suffisant pour piloter un afficheur à Led. Les pattes sont en haute impédances quand une condition de reset devient active, ou bien lorsque l'horloge n'est pas active. Ce port est utilisé comme multiplexer d'entrée/ sortie pour les données et les adresses quand une SRAM externe est reliée (broches 32 à 39).

Port B (PB7…PB0) : C'est un port de I/O bidirectionnel. Toutes les pattes du port ont des résistances internes de pull-up. Le buffer de sortie est en mesure de fournir jusqu'à 20 mA de courant. Les pattes du port sont en haute impédance quand une condition de RESET devient active, ou bien quand l'horloge n'est pas active (broches 1 à 8).

Port C (PC7…PC0) : C'est un port de I/O bidirectionnel. Toutes les pattes du port ont des résistances internes de pull-up. Le buffer de sortie est en mesure de fournir jusqu'à 20 mA de courant. Les broches sont en haute impédance quand une condition de RESET devient active, ou bien quand l'horloge n'est pas active. Lorsqu'on branche de la SRAM externe, ce port est utilisé comme bus adresses en sortie vers la SRAM (broches 21 à 28).

Port D (PD7…PD0) : C'est un port de I/O bidirectionnel. Toutes les pattes du port ont des résistances internes de pull-up. Le buffer de sortie est en mesure de fournir jusqu'à 20 mA de courant. Les broches sont en haute impédance quand une condition de RESET devient active, ou bien quand l'horloge n'est pas active (broches 10 à 17).

RESET (actif bas) : La broche de RESET est une entrée. Elle est activée par un niveau logique bas qui doit avoir une durée opportune. Habituellement, le temps de RESET tourne autour de 50 ns. Des temps plus courts n'assurent pas la génération du RESET (broche 9).

XTAL2 et XTAL1 : Ce sont les broches auxquelles est connecté le quartz de 4 à 8 MHz. En plus du quartz, deux condensateurs externes sont requis comme le montre le schéma de la figure 3 (broches 18 et 19). ICP : C'est une broche d'entrée pour la fonction de “timer/ counter input capture”. (broche 31).

AVR : Raccordement du quartz et des condensateurs

Figure 3 : Raccordement du quartz et des condensateurs
externes aux broches XTAL2 et XTAL1 du microcontrôleur.

OC1B : C'est une broche de sortie pour la fonction de “timer/counter1 compare B”. (broche 29).

ALE : C'est l'abréviation de “Address Latch Enable” qui est utilisé lorsque de la mémoire externe est connectée au microcontrôleur. En fait, la broche génère une impulsion de référence qui est utilisée pour commencer une liaison entre un microcontrôleur et la mémoire (broche 30).

La programmation “in-system”

Vous pouvez noter que le microcontrôleur dispose d'une grande quantité de mémoire programme. Dans notre cas, nous disposons de 8 kbytes de mémoire Flash. Ce type de mémoire peut être programmé “in-system”, c'est-à-dire que vous laissez le microcontrôleur sur le circuit sur lequel il doit travailler et qu'avec une connexion opportune au PC, vous le programmez selon vos propres exigences. La programmation “in system” évite l'inconvénient de devoir continuellement extraire le microcontrôleur de son support pour l'insérer dans le programmateur. On évite également, de cette façon, de l'endommager, en tordant par exemple une patte ou en cassant carrément une pendant les manoeuvres continues d'insertion et d'extraction du composant. Le seul inconvénient est la nécessité de devoir réaliser une liaison entre le circuit en conception et le PC.

Architecture interne

Ce microcontrôleur dispose d'une grande capacité de mémoire programme : 8 kilobytes de mémoire Flash, en plus de laquelle nous retrouvons les 32 registres pour utilisation générale qui vont de l'adresse mémoire $0000 à $001F, les 64 registres d'I/O (on utilise indifféremmentI/O = Input/Output ou E/S = Entrées/Sorties) qui vont de l'adresse $0020 à $005F, la mémoire SRAM interne (512 bytes) qui va de l'adresse $0060 à l'adresse $025F et, enfin, nous avons de l'espace pour placer une mémoire SRAM externe pour un total de 64 kilobytes (adresses de $0260 à $FFFF). Observons le schéma synoptique interne de l'AT90S8515 (figure 4). Au centre du schéma se trouve l'unité logique arithmétique l'ALU (Aritmetic Logic Unit) qui forme avec le bloc des registres le coeur du microcontrôleur. Le coeur communique, au moyen d'un bus de données (Data Bus) de 8 bits, avec toutes les ressources implémentées : tout d'abord avec les registres de contrôle qui, vus apparemment comme une zone de mémoire particulière, forment en réalité des interfaces entre le programme et les périphériques implémentés. Puis nous trouvons l'unité d'interruptions (Interrupt Unit) c'est-à-dire un dispositif qui s'occupe de gérer et de trier les différentes interruptions que les périphériques peuvent envoyer au CPU.

architecture interne AT90S8515

Figure 4 : Schéma synoptique du microcontrôleur AT90S8515.

Le concept d'interruption

Nous verrons plus tard que le CPU ne fait que lire etexécuter séquentiellement, rigoureusement l'une aprèsl'autre, les instructions contenues dans la mémoire programme.En pratique, le CPU lit le code opérateur “l'opcode” de la première instruction en mémoire, l'interprète en le transformant en une commande et l'exécute. Puis il répète le même processus sur l'opcode disponible dans le byte suivant de la mémoire programme et ainsi de suite. En réalité, cette séquentialité est confiée au “Program Counter” qui, par définition, pointe l'adresse du byte de mémoire programme qui contient l'opcode de la prochaine instruction que le CPU doit exécuter. Une machine à états ainsi élaborée ne permet cependant pas de gérer des événements en temps réel. C'est la raison pour laquelle on a inventé les interruptions. Les périphériques internes peuvent, sur la base d'événements internes ou externes particuliers, générer une interruption du cycle normal du programme. Dans la pratique, cela consiste à forcer le “Program Counter” à pointer l'adresse d'une zone de mémoire définie (vecteur d'interruption). Donc, en activant, par exemple, l'interruption du périphérique UART, nous obtiendrons, en correspondance avec la fin de la réception des données, que le microcontrôleur aille exécuter l'instruction contenue à l'adresse $009 (vecteur d'interruption de la réception UART). Nous pouvons alors insérer une série d'instructions consacrées à cet événement. Par exemple, nous pouvons lire la valeur que l'UART a reçue et l'écrire dans une variable. Ces opérations sont effectuées par une sous-routine appelée “routine de réponse à l'interruption”. La routine terminera avec une instruction qui fera l'opération opposée par rapport à l'interruption : c'est-à-dire qui forcera le “Program Counter” à pointer l'adresse contenant l'instruction suivante la dernière exécutée avant l'interruption.L'AT90S8515 dispose de 13 vecteursd'interruption.Revenons maintenant au schémasynoptique interne.Nous voyons que les autres périphériquesdisponibles sont

Pour communiquer avec les différentspériphériques énumérés ci-dessus, unesérie de registres, définis selon le tableau 3, appelés “I/ORegister” sont disponibles.Dans ce tableau, vous trouverez la listedes adresses mémoire où ils sont disponibleset les sigles mnémotechniques qui les identifient.

Le plan mémoire

Comme tous les microcontrôleurs,l'AT90S8515 dispose aussi de deuxzones de mémoire spécifique internes: la “Program Memory” et la “DataMemory”.La “Program Memory” ou mémoire programme,contient le programme c'està-dire l'opcode des instructions quele CPU devra exécuter l'une aprèsl'autre quand le microcontrôleur seraalimenté. La mémoire programme estde type Flash et peut être écrite eteffacée plus de 1 000 fois. Sa capacitéest de 4 kilobytes x 16 et sesadresses vont de $000 à $FFF.La “Data Memory” peut être décomposéeen deux parties significatives :l'une contient les données et l'autreest destinée aux registres.Nous verrons que le déroulementd'un programme requiert l'utilisationdes constantes mais aussi des variables.Le terme “variable” sert à indiquertous les paramètres numériques quipeuvent varier pendant l'exécutiond'un programme.

adressage AVR

Figure 5a : L'illustration montre que les adresses qui vont de $0000 à $001F
servent aux registres d'utilisation générale, alors que les adresses $0020 à $0005F contiennent les registres d'I/O.
De la position $0060 jusqu'à la $025F nous trouvons la SRAM interne du microcontrôleur,
alors que de l'adresse $0260 jusqu'à $FFFF nous avons l'espace utilisable pour ajouter au microcontrôleur de la mémoire SRAM externe.

Notre microcontrôleur dispose de512 octets internes de mémoire (de l'adresse $0060 à $025F) dans lesquellesil est possible de mémoriserdes variables.Observons le plan mémoire de données: nous pouvons noter que lesadresses $0260 à $FFFF sont prévuespour une RAM externe.Ce qui veut dire que la structure hardwareet les ressources software duAT90S8515 permettent de brancherune mémoire externe SRAM de 64kilobytes (maximum).Les adresses $0000 à $005F contiennent,quant à elles, les registresqui, comme nous l'avons dit précédemment,sont des positions utiliséespour communiquer avec lespériphériques ou utiles au travail del'ALU.Les registres dont les adresses vontde $0000 à $0001F sont appelés“General Purpose Working Register”.Ce sont les registres de travail, ceuxqui sont utilisés pour faire des opérationsmathématiques ou pour dirigerle programme vers des adressesdéterminées.Nous étudierons ces registres lors del'analyse du jeu d'instructions.Nous vous rappelons, de toute façon,que sur les 32 registres d'utilisationgénérale, 6 peuvent être utiliséscomme pointeurs d'adressage indirectà 16 bits pour travailler avec lamémoire.Ces registres de 16 bits sont appelésregistres X, Y et Z.A chaque registre est associée uneadresse unique, ce qui a permis defaire le plan mémoire de l'adresse$00 à l'adresse $1F en distinguantles 32 adresses à utiliser.

les registres d'AVR

Figure 5b : A chaque registre est associée une adresse unique. On a ainsi fait
le plan mémoire de l'adresse $00 à l'adresse $1F en distinguant 32 positions à utiliser comme espace de données. Les registres qui vont de l'adresse $1A à l'adresse $1F peuvent être associés deux par deux pour obtenir des registres de 16 bits, nommés registres X, Y et Z.

L'ALU à hautes prestations de l'AVRcommunique avec les 32 registresd'utilisation générale, et est enmesure d'exécuter, en un seul cycled'horloge, des opérations entre lesdeux registres.Les adresses de $0020 à $005Fcontiennent, par contre, les registresd'I/O (voir le tableau 3).Il s'agit de 64 adresses à travers lesquellesil est possible de donner desordres, ou encore d'envoyer des commandesaux différents périphériqueset de les recevoir.Nous décrirons mieux chaque registred'I/O lors de l'analyse du périphériqueauquel ils sont destinés.Limitons-nous, pour l'instant, à direque les adresse d'I/O, ou encore lapartie de mémoire qui contient lesregistres d'I/O, sont accessibles à traversles instructions de “IN” et de“OUT” qui transfèrent les donnéesentre les 32 registres d'utilisation générale et l'espace d'I/O.

La mémoire EEPROM

La SRAM interne n'est pas la seule zone possible pour la mémorisation des données. En effet 512 autres octets, dans lesquelsvous pouvez écrire ou lire des données, sont implémentés.Il s'agit de la mémoire EEPROM. Cette zone de mémoirepeut être considérée comme une RAM à la différence prèsque les données insérées sont conservées, même en l'absenced'alimentation.Pour écrire ou lire des données en EEPROM, il est cependantnécessaire d'utiliser trois registres spécifiques.Cette mémoire permet un maximum de 100 000 cycles d'écriture/lecture.

I/O Register pour un microcontroleur AVR

Tableau 3 : Pour communiquer avec les différents périphériques, une série de registres, appelés “I/O Register”, sont
disponibles. Dans ce tableau son listées les adresses mémoire où ils sont disponibles et les sigles mnémotechniques qui les identifient.

 

Le registre d'état

Ce registre sert à contrôler si des événements particuliers, dus à l'exécution de certaines instructions, comme les instructions logiques ou mathématiques, se vérifient. Chaque bit de ce registre a une fonction particulière.

I T H S V N Z C

chapitre 3

Le microcontrôleur AT90S8515 dispose de quatreports d'I/O (Input/Output) de 8 bits appelés port A,port B, port C et port D. Ces ports d'entrées/sortiespermettent au microcontrôleur de communiquer avecle monde extérieur. Par exemple, si vous voulezconnecter un convertisseur A/D (Analogique/Digital),il faudra que le micro dispose de quelques brochesafin que vous puissiez effectuer le branchement au dispositif à commander.

Chacun de ces ports d'I/O est constitué de8 bits chacun et certains sont “programmables”.Ce terme signifie que des broches particulièresdu port peuvent être utilisées dansdes buts spécifiques.Le port B, par exemple, dispose d'une interface sérielle(SPI) à quatre fils.Si le microcontrôleur est programmé de façon correcte,la logique interne s'occupera d'utiliser les broches enquestion du port d'I/O pour exécuter une interconnexionsérielle à quatre fils avec un autre périphérique qui utilisele même protocole de communication.Les quatre bits restants du port d'I/O peuvent être utilisésdans n'importe quel autre but.Chaque port d'I/O est piloté à travers l'utilisation detrois registres qui sont appelés “Data Register”, “DataDirection Register” et “Input Pins Address”.Pour utiliser le port A, comme pour les autres, troisadresses de mémoire d'I/O sont assignées, une pourchaque registre. On donne un nom mnémotechniqueàchacune de ces adresses.Le registre des données est appelé “PORTA” (adressehexadécimale 3BH), le registre qui indique la direction dela donnée, In (entrée) ou Out (sortie), est appelé “DDRA”(adresse 3AH), et le registre “Input Pins Address” estappelé “PINA” (adresse 39H).Ces noms (“PORTA”, “DDRA” et “PINA”) sont utiliséslorsque l'on programme en assembleur. En effet, si l'onveut écrire dans le registre “DDRA”, il suffira d'utiliserles instructions :

LDI r16, 0xff   
OUT DDRA, r16

Elles donnent au registre “r16” la valeur hexadécimale “FF” et le transfèrent dans le registre “DDRA”. De cette façon, le port A a été sélectionné comme port de sortie. En résumé, le registre “PORTA” sert à envoyer en sortie des données, le registre “PINA” sert à les acquérir alors que le registre “DDRA” sert à indiquer la direction de la donnée, ou mieux, la direction que peut prendre chaque bit du port. Vous trouverez le schéma électrique d'une broche du port A en figure 6.

Schéma électrique d'une broche du port A

Figure 6 : Schéma électrique d'une broche du port A.

En ce qui concerne le port B, le nombre de registres est le même mais leur emplacement à l'intérieur de la mémoire d'I/O change (voir tableau 4). Les registres se programment en assembleur de la même façon que le port A à la différence près que certains bits peuvent être utilisés dans des buts particuliers. Le tableau 5 montre bien les fonctions que l'on peut assigner au port B dont nous avons parlé précédemment.

Adresses hexadécimales des ports d'I/O

Tableau 4 : Adresses hexadécimales des ports d'I/O.

Port B

Tableau 5 : Port B.

Notez que, dans ce cas, le schéma de chaque bit du port est différent, ce qui veut dire que le schéma de circuit pour la broche PB0 du port B sera différent du schéma de circuit de la broche PB1 et ainsi de suite en raison, justement, des caractéristiques différentes de chaque broche. Pour se rendre compte de cela, il suffit de consulter la note technique. Le port C est identique au port A, alors que le port D a, lui aussi, des broches programmables dans des buts particuliers liés à l'utilisation de l'UART, de la mémoire et des interruptions externes (tableau 6).

Port D

Tableau 6 : Port D.

Configuration

Tableau 7 : Configuration
du prédiviseur avec le compteur 8 bits.

Les compteurs A l'intérieur du microcontrôleur AT90S8515 se trouvent deux compteurs intégrés, l'un de 8 bits et l'autre de 16 bits. En réalité, la logique permet de les configurer soit en compteur soit en temporisateur. Cela veut dire que, si le composant est configuré comme compteur, il est alors en mesure d'accepter des impulsions externes et d'interrompre le programme principal après un certain nombre d'impulsions établies par le programmeur (en pratique, s'il y a eu une demande d'interruption du compteur). Ou bien, il peut être utilisé comme temporisateur et est donc en mesure de compter des impulsions d'horloge du système et de donner un signal d'interruption après un nombre prédéterminé d'impulsions d'horloge. Chaque compteur peut bénéficier d'une logique interne qui sert de “PRESCALER”, c'est-à-dire de diviseur de fréquence. Le circuit se présente comme le montre le schéma synoptique des compteurs 8 et 16 bits de la figure 7.

Schéma synoptique des compteurs 8 et 16 bits

Figure 7 : Schéma synoptique des compteurs 8 et 16 bits.

Dans le circuit, on remarque le “prescaler” et deux multiplexeurs nécessaires pour apporter le signal, soit au compteur 8 bits (TCK0), soit au compteur 16 bits (TCK1). Les deux multiplexeurs sont programmables en utilisant les trois bits CS00, CS01 et CS02. Le tableau 7 montre la correspondance entre les valeurs logiques des trois bits et le type de signal appliqué au compteur. On peut sélectionner l'horloge interne en exécutant ou non le prescaler, ou bien un signal externe présent sur la broche “T0”. Sur le signal “T0”, on peut choisir d'être actif sur le front montant ou bien sur le front descendant du signal. Le tableau 7 est valable pour le compteur 8 bits.

Schéma du circuit du compteur 8 bits

Figure 8 : Schéma du circuit du compteur 8 bits.

Pour le compteur 16 bits, c'est la même chose, seules changent les brochesde sélection (CS00, CS01et CS02 deviennent CS10,CS11 et CS12). Ces bits desélection sont mémoriséspar le programmeur à l'intérieurd'un registre 8 bitsdont on utilise seulementles trois bits de poids faibles.Ce registre s'appelle“TCCR0”.Vous noterez que le compteurde 8 bits est un “upcounter”et que la valeur decomptage est mémoriséedans le registre “TCNT0”.L'analyse du schéma ducircuit du compteur (figure8) montre les deux registresde 8 bits “TIMSK”et “TIFR”. Ces registresservent à gérer les événementsd'interruption ducompteur.En ce qui concerne le compteur8 bits, on utilise le bit 1du registre “TIMSK”. Lorsquecelui-ci est au niveaulogique haut, avec le bit 1du “Status Register”, l'interruptionde débordement(overflow) du compteur a étéactivée et, par conséquent,s'il y a débordement de lapart du compteur, la routinecorrespondante (qui se trouveraà l'adresse 007H) seraexécutée.Du registre “TIFR”, on utilisele bit 1. Celui-ci va au niveaulogique haut quand un overflowse produit et est remisà 0 par le hardware dès quela routine correspondantàla demande d'interruption aété exécutée.Le compteur 16 bits est, parcontre, plus complexe quele précédent et il permet parconséquent de réaliser plusde fonctions.L'une d'entre elles est lamodulation PWM (PulseWidth Modulation), et peutêtre réalisée à 8, 9 ou à 10bits. Comme le compteur 16bits est de type “up/down”et peut donc aussi biencompter que décompter, vous pouvez générer un signal triangulaire (voir la figure 9),obtenu en faisant monter le compteurjusqu'à sa valeur maximale, et toujoursà intervalles de temps constants, lefaire décompter jusqu'à ce qu'il arriveà zéro pour, ensuite, recommencerl'incrémentation.Cette caractéristique est utilisée pourgénérer la modulation PWM, qui consisteà changer le rapport cyclique(Duty Cycle) d'un signal carré sur labase d'un signal modulant représenté par la valeur de comparaison (CompareValue). Pour en comprendre le fonctionnement,revoyez la figure 9 . A chaquefois que le signal triangulaire setrouve sous la valeur de référence (laligne en pointillés) un changement defront est généré sur le signal “OC1X”.La forme d'onde triangulaire représente donc la marche dans le temps du compteur. Il est donc clair qu'en changeant la valeurdu seuil, vous pourrez changer la durée de l'impulsion ensortie et, donc, en continuant à faire varier le seuil, vousgénérez une forme d'onde PWM.Le seuil doit être modifié avant qu'il ne rencontre le signaltriangulaire (voir la figure 4) sous peine de générer un “Glitch” qui représente un dérangement non désiré.

Modulation PWM réalisée avec le compteur 16 bits

Figure 9 : Modulation PWM réalisée avec le compteur 16 bits.

Le watchdog

Le watchdog est un temporisateur particulier qui est utilisé dans les systèmes à microprocesseur comme sécurité pour éviter que le programme n'aille dans une impasse et donc que le système ne se bloque dans une situation non prévue par le programmeur. En pratique, le watchdog intervient et effectue le reset du microcontrôleur si celui-ci n'est pas effectué par l'instruction “WDR” (WatchDog Reset) dans le temps établi par les broches 0, 1 et 2 du registre “WDTCR”. Le watchdog des microcontrôleurs AVR est temporisé par une horloge interne à 1 MHz, ce qui nous permet de comprendre qu'il peut fonctionner également en l'absence de l'horloge du système car il est indépendant de celui-ci. Le dispositif est programmé à travers le registre “WDTCR” grâce à l'utilisation des cinq premiers bits. Essayons maintenant d'en comprendre le fonctionnement en les analysant de façon détaillée.

Les bits 0, 1, et 2, comme nous l'avons déjà remarqué, servent à établir le temps qui doit s'écouler avant que le watchdog effectue le reset du micro. Ce temps dépend également de l'alimentation du micro et peut varier d'environ 15 ms (WDP0 = 0, WDP1 = 0, WDP2 = 0 et alimentation Vcc = 5 V) jusqu'à environ 6 s (WDP0 = 1, WDP1 = 1, WDP2 = 1 et alimentation Vcc = 3 V). Le bit 4 (WDTOE = Watch Dog Turn Off Enable) et le bit 5 (WDE) servent à désactiver la fonction de watchdog. Etant donné qu'il s'agit d'un système de sécurité, il serait trop risqué d'utiliser un seul bit de validation/inhibition vu que l'on ne peut pas savoir comment se comporte un programme en cas de dysfonctionnement. Donc, pour éviter des inhibitions involontaires, il est nécessaire de suivre une séquence précise de désactivation du watchdog. Il faut d'abord mettre au 1 logique aussi bien “WDTOE” que “WDE” et, ensuite, pour les quatre cycles d'horloge suivants, effectuer le reset de “WDE”. De cette façon le watchdog est désactivé. Le schéma du Watchdog (figure 10) met en évidence l'oscillateur indépendant de 1 MHz, un “prescaler” et un multiplexeur. Les trois bits de contrôle vont justement agir sur le multiplexeur pour sélectionner les temporisations pour le reset.

Schéma du circuit du watchdog et tableau du prescaler correspondant

Figure 10 : Schéma du circuit du watchdog et tableau du prescaler correspondant.

cours microcontroleur AVR AT90S8515 programmation formation electronique architecture memoire ATMEL

Révisé le :19-11-2017 www.technologuepro.com Facebook Twitter RSS