Affichage des articles dont le libellé est Les microcontroleurs. Afficher tous les articles
Affichage des articles dont le libellé est Les microcontroleurs. Afficher tous les articles
09/03/2014

montage electronique d'une commande de portail commandée par gsm

Avec ce montage, nous ouvrons le portail électrique de la maison en utilisant un téléphone portable type GSM au lieu de la traditionnelle télécommande. Utilisable sur n’importe quelle installation, il permet de faire au moins jeu égal avec les différents modèles de télécommandes qui nous remplissent les poches.
La commande d’activation du relais ne consomme aucune unité téléphonique. La sécurité de fonctionnement est excellente grâce au système de reconnaissance par l’identification de la personne appelant. Bien entendu, il est tout à fait possible d’extrapoler pour n’importe quelle commande comme celle de la porte du garage commun en copropriété ou l’ouverture de la porte d’un hall, d’un local protégé dont l’accès est réservé à certaines personnes, etc.


Dans ELM numéro 7, page 30 et suivantes, nous vous proposions une télécommande pilotée par portable GSM. A la fin de l’article, nous vous annoncions la version professionnelle dans une nouvelle application.
La version du montage que nous vous présentons dans ces pages, permet une sécurité de fonctionnement absolue.
En effet, pour permettre l’activation de l’organe de sortie (relais), ce système vérifie que la personne qui appelle est effectivement habilitée à ouvrir le portail. Seules les personnes qui connaissent le numéro à appeler et qui ont enregistré leur propre numéro d’appel peuvent activer le système.
Mais procédons par ordre et voyons à quoi sert et comment fonctionne notre système.
L’idée qui est à la base de ce système et de ses applications est très simple. Désormais, nous possédons pratiquement tous un téléphone portable que nous utilisons dans sa fonction normale, c’est-à-dire pour téléphoner !
Mais, pourquoi ne pas l’utiliser utilement pour de nombreuses autres applications. Surtout si cette utilisation détournée ne coûte rien sur le forfait, pas même la plus petite unité !
Dans l’application dont il est question dans ces lignes, grâce à notre téléphone portable, nous pouvons ouvrir le portail électrique de la maison ou, de façon plus générale, nous pouvons activer un quelconque dispositif électrique ou électronique.
Le montage utilise un module GSM avec un abonnement prépayé et un système de gestion à microcontrôleur pilotant également le relais de sortie. L’abonnement peut être le moins cher des moins cher et encore moins si possible !
En effet, le circuit GSM de commande ne passe jamais en émission.
Donc, il ne consommera jamais la moindre unité !
Les contacts du relais de la carte GSM, sont câblés en parallèle sur les contacts du relais du récepteur radio utilisé dans la centrale d’ouverture du portail. Cette centrale pilote les moteurs et les divers temporisateurs.
De ce fait, la greffe de notre système sur celui d’origine n’entraîne aucune modification. Le système d’origine continuera donc à fonctionner avec les télécommandes traditionnelles également.
L’ouverture du portail avec le téléphone portable s’obtient simplement en effectuant un appel au numéro du GSM de commande placé dans la centrale.
Avant tout, il est nécessaire de faire “apprendre” au système notre propre numéro de manière à éviter qu’une personne étrangère (ayant connaissance du numéro d’appel du système de contrôle) puisse ouvrir le portail.
Pour enregistrer notre propre numéro de téléphone dans la carte de pilotage, il suffit de placer la carte de pilotage GSM en mode “auto-apprentissage”.
Pour cela, il faut mettre le petit cavalier J1 sur A et effectuer un appel. Le numéro de la personne qui appelle est ainsi mémorisé dans la carte SIM du module GSM. Bien entendu, il faut ensuite retirer le cavalier et, pour ne pas le perdre, l’enfiler sur une des broches seulement.
Durant la phase de fonctionnement normal, le numéro qui appelle est comparé avec les numéros présents dans la mémoire et le portail n’est ouvert que si ce numéro est reconnu et donc s’il a été préalablement mémorisé.
L’appel n’aura jamais de réponse (de cette façon, il n’y a pas de consommation d’unités, ni sur le portable émetteur, ni sur le pilote GSM), mais le dispositif active normalement la centrale.
Un système de ce genre offre le maximum de sécurité et permet d’éliminer les différentes télécommandes dont nous ne savons plus quoi faire.
Le prix d’un tel système peut paraître élevé pour une application individuelle. Mais, au contraire, dans une application collective nous pouvons réaliser une économie considérable.
Prenons l’exemple d’un ensemble de 50 à 100 appartements, pour les seules télécommandes, il faut prévoir une dépense de 20000 à 30000 francs et au moins entre 3000 et 5000 francs par an pour remplacer les télécommandes perdues ou détériorées.
Notre système coûte décidément beaucoup moins cher et a un coût annuel équivalent au coût de la carte prépayée ou d’un abonnement à faible prix.
Le seul point négatif pourrait être celui de la couverture par le réseau GSM dans la zone d’utilisation car, évidemment, s’il n’y a pas de couverture par le réseau GSM, le système ne peut pas fonctionner. Il suffit de jeter un coup d’oeil sur les cartes des différents fournisseurs de services GSM, pour s’apercevoir que ces zones d’ombre sont extrêmement rares à l’heure actuelle.
Le système mémorise les numéros de téléphone dans la zone “phone book” (répertoire) de la carte SIM utilisée.
Normalement les cartes SIM ont une capacité de 100 numéros et par fois même de 130 numéros, ce qui est plus que suffisant dans la majorité des cas.
La sortie du système est constituée d’un relais avec des contacts capables de couper un courant de 10 ampères et qui peut fonctionner en mode astable ou bistable.



Le schéma électrique
L’utilisation et le fonctionnement du système étant éclaircis, analysons immédiatement le schéma électrique.
Le coeur du dispositif est constitué par le module GSM Falcom A2 désigné par U2 sur le schéma.
Pour ceux qui ne connaissent pas ce produit, rappelons qu’il s’agit d’un Modem GSM complet, homologué, en mesure d’opérer aussi bien en phonie, qu’en mode data/fax.
Le dispositif est caractérisé par des dimensions particulièrement réduites et peut être intégré à l’intérieur de n’importe quel appareillage.
La carte SIM, de type miniature, est insérée à l’endroit prévu dans le module. Pour les connexions avec les circuits externes, les connecteurs principaux sont au nombre de deux : un de 40 broches situé sous le module et un de 15 broches situé sur la partie frontale.
Pour cette application, nous n’utilisons que quelques lignes de contrôle, toutes situées sur le connecteur à 15 broches.
Pour indication, nous nous sommes connectés aux broches 10, 11 et 12 qui sont les broches reliées au positif de l’alimentation (5 volts). Aux broches 13, 14 et 15, toutes les trois reliées à la masse. Les autres connexions se font au niveau de la broche 3 (SOFT ON), de la broche 2 (RX DATA) et de la broche 1 (TX DATA).
A la mise sous tension, le module GSM ne passe pas en fonction tant qu’il ne reçoit pas au moins durant 3 secondes un niveau haut sur sa broche 3 (SOFT ON). En pratique, il faudrait un petit bouton poussoir comme celui utilisé pour la fonction ON des téléphones portables relié entre la broche 3 et la ligne positive. Dans notre cas, cette fonction est assurée par le microcontrôleur U3, plus précisément par la sortie correspondant à la broche 3. A la mise sous tension, cette ligne présente un niveau haut durant environ 5 secondes pour ensuite revenir à zéro volt.
Toujours à la mise en service, le microcontrôleur procède à la remise à zéro de la sortie (broche 2) qui pilote le transistor T1 et le relais.
Se sont là les fonctions les plus banales du microcontrôleur.
En fait, comme nous le voyons sur le schéma électrique, la ligne série de sortie du module Falcom A2 (broches 1 et 2) est connectée par l’intermédiaire de l’adaptateur de niveau U4 aux broches 4 et 5 du microcontrôleur.
Par l’intermédiaire de ces lignes sont effectuées toutes les opérations sur les signaux qui arrivent : la mémorisation et l’effacement des numéros dans le “phone book” (répertoire), la comparaison entre l’identification de l’appelant et les numéros mémorisés, etc.
Comme nous le voyons dans le tableau de la figure 6, les signaux disponibles sur le connecteur 15 points du module A2 présentent un niveau EIA (±12 volts), par contre, les signaux du microcontrôleur sont au niveau TTL (5 volts).
Il est donc nécessaire d’avoir recours à un MAX232 pour adapter les niveaux.
Pour obtenir une tension continue de ±12 volts nécessaires au fonctionnement des étages de conversions, il utilise des circuits élévateurs de tension de type capacitif qui sont constitués par les condensateurs C4 à C7. Ce sont les uniques composants externes nécessaires au fonctionnement correct du MAX232.
L’organigramme de fonctionnement du programme principal met en évidence les fonctions du microcontrôleur U3.
Lorsqu’un appel arrive, sur la ligne série est présente l’écriture “ring”, le numéro de l’appelant et éventuellement le nom de cette personne si celui-ci a été mémorisé dans la carte SIM du module Falcom A2.
Avant toute chose, le microcontrôleur lit le numéro de téléphone, pour ensuite interrompre la connexion par une instruction appropriée. En réalité la communication n’est pas interrompue car personne n’a répondu à l’appel, simplement l’appel est rejeté et le module Falcom A2 est remis à zéro.
A ce point, on peut vérifier trois possibilités en fonction de l’état du réseau RC connecté à la broche 7. Le microcontrôleur vérifie en permanence l’état de cette broche et se comporte de façon différente en fonction de son état déterminé par la position du petit cavalier :
- “A” fermé : effectue la mémorisation du numéro dans la carte SIM.
- “A” ouvert et “B” fermé : effectue l’effacement du numéro dans la carte SIM.
- Absence des cavaliers en “A” et en “B” : fonctionnement normal.
Dans la première hypothèse (“A” fermé), la broche 7 “voit” un réseau composé de C8 et des deux résistances R4 et R5 en parallèle (le cavalier A est fermé), il se prédispose alors à la mémorisation dans la carte SIM du numéro présent sur la ligne série du GSM. Naturellement, avant d’effectuer la mémorisation, le microcontrôleur vérifie que le numéro ne soit pas déjà en mémoire dans le répertoire de la carte SIM. La phase d’écriture terminée, le programme se prépare pour recevoir l’appel suivant.
Dans le second cas (B fermé), la broche 7 du microcontrôleur “voit” seulement le condensateur C8, il se place donc en mode d’effacement du numéro en cours. En fait dans ce cas, le numéro lu sur la ligne série est effacé du répertoire (s’il est présent) de la carte SIM.
La troisième hypothèse (pas de cavalier ni en “A” ni en “B”) concerne le fonctionnement normal. Dans ce cas, la broche 7 “voit” un réseau RC composé de R5 et C8 et, en cas d’appel, il vérifie que le numéro présent sur la ligne série soit effectivement mémorisé dans la carte SIM.
Dans le cas contraire, le dispositif n’effectue aucune opération sur la ligne de sortie et se replace de manière à recevoir un autre appel. Dans le cas où le numéro d’appel est mémorisé, la sortie est activée et le relais colle.
Le type d’activation dépend de la position du curseur du trimmer R1. Dans le cas où le curseur est complètement tourné vers C9, nous avons un fonctionnement du type astable et le relais reste activé durant environ 1 seconde.
Tournant le curseur dans l’autre sens, le temps augmente jusqu’à environ 20 secondes. Avec le curseur complètement tourné vers la position opposée, le fonctionnement devient bistable, avec un appel le relais est activé et reste dans cette position, jusqu’au prochain appel qui le désactivera et ainsi de suite. Dans ce mode il est possible d’utiliser ce circuit pour des applications différentes.
Evidemment, pour une utilisation en ouverture de portail, il est nécessaire de tourner R1 vers C9 afin d’obtenir une brève impulsion à chaque appel.

Figure 1 : Schéma électrique de la commande de portail pilotée par GSM.

Figure 2 : Schéma d’implantation des composants.

Figure 3 : Dessin du circuit imprimé à l’échelle 1.



Liste des composants
R1 = 4,7 kΩ trimmer
R2 = 10 kΩ
R3 = 5,6 kΩ
R4 = 2,2 kΩ
R5 = 4,7 kΩ
C1 = 470 μF 25 V électrolytique
C2 = 100 nF multicouche
C3 = 470 μF 25 V électrolytique
C4 = 1 μF 63 V électrolytique
C5 = 1 μF 63 V électrolytique
C6 = 1 μF 63 V électrolytique
C7 = 1 μF 63 V électrolytique
C8 = 100 nF pol. passo 5
C9 = 100 nF pol. passo 5
D1 = Diode 1N4007
D2 = Diode 1N4007
T1 = Transistor BC547B
J1 “A” = Cavalier
J1 “B” = Cavalier
U1 = Régulateur 7805
U2 = Module GSM Falcom A2
U3 = μcontrôleur PIC12C672 (MF279)
U4 = Intégré MAX232
RL1 = Relais 12 V 1 RT

Divers :
1 Support 2 x 4 broches
1 Support 2 x 8 broches
1 Bornier 2 pôles
2 Borniers 3 pôles
1 Connecteur 15 pôles
1 Connecteur d’antenne
1 Adaptateur d’antenne FME
1 Antenne GSM
1 Boîtier étanche
1 Circuit imprimé réf. S279


Montage et installation
La description théorique étant terminée, voyons à présent l’aspect pratique.
Pour le montage de notre télécontrôle, nous avons prévu l’emploi d’un circuit imprimé sur lequel seront montés tous les composants, y compris le module GSM.
Le système GSM étant fourni tout monté et réglé, la seule chose que vous ayez à faire est de le mettre en place dans un coffret étanche (genre boîte Legrand) d’où sortiront uniquement les câbles pour l’alimentation, celui relié à la centrale et le câble d’antenne avec son antenne qui peut être un modèle plat ou stylo.
La réalisation du circuit imprimé se fera de façon traditionnelle, par photocopie sur calque ou sur transparent du dessin du cuivre représenté à l’échelle 1/1 dans les pages suivantes.
Après insolation au rayon ultra-violet, gravure au perchlorure de fer et perçage des trous aux différents diamètres.
Mais procédons avec ordre et méthode.
La majeure partie de l’espace du circuit imprimé est occupée par le module GSM, fixé par l’intermédiaire de trois vis.
Par l’intermédiaire du connecteur à 15 broches, seront effectuées les liaisons dans les trous numérotés 1, 2, 3, 10, 11, 12, 13, 14 et 15. Faites très attention de ne pas intervertir les fils et évitez les courts-circuits entre les broches contiguës.
Le montage des autres composants ne présente aucune difficulté. Pour le montage des circuits intégrés U3 et U4, utilisez des supports en vérifiant bien le sens exact de montage.
Le régulateur U1 ne nécessite pas de dissipateur de chaleur car, au repos, le montage ne consomme qu’un peu plus de 40 milliampères et le régulateur ne dissipe donc que 300 milliwatts.
Durant un appel, la consommation augmente d’environ 5 fois, mais seulement pour quelques secondes et pour cela la puissance supérieure dissipée par le régulateur est négligeable.
Prêtez une attention particulière à l’orientation des composants polarisés et vérifiez, avant de souder, toutes les valeurs des composants.
Pour relier l’alimentation et la centrale, utilisez des borniers à vis au pas de 5 millimètres.
Pour pouvoir fonctionner correctement et entrer en ligne, le module GSM doit être équipé d’une carte SIM valide. Le type d’abonnement a peu d’importance, cela peut être un abonnement gratuit à l’aide d’une carte prépayée.
Notre système ne consomme aucune unité car il ne répond à aucun appel.
Avant d’insérer la carte SIM dans son logement dans le module Falcom A2, il faut désactiver la demande du code PIN. Cette opération peut être effectuée avec n’importe quel téléphone portable (en montant la carte SIM destinée au Falcom à la place de celle déjà en place dans le portable).
Après avoir inséré la carte SIM dans son logement sur le module Falcom A2, mettez le tout dans le boîtier, comme indiqué plus haut, et placer ce boîtier à l’intérieur du coffret étanche dans lequel se trouve la centrale de commande et le récepteur du portail. Alimentez le circuit en prélevant les 12 volts nécessaires dans l’installation existante et reliez en parallèle les contacts du relais du montage avec ceux du relais du récepteur de la centrale. De cette façon, le système initial (télécommandes) est toujours opérationnel.
Reliez également une antenne adaptée au module GSM. Dans ce cas, il est possible de recourir à une antenne stylo à monter à l’extérieur du coffret.
En premier lieu, programmez dans votre téléphone portable, dans une mémoire à accès direct, le numéro correspondant au numéro d’appel du portail.
Ensuite positionnez le système pour un mode de fonctionnement normal (le cavalier J1, ni sur “A”, ni sur “B”) avec une sortie astable (curseur du trimmer complètement tourné vers C9).
Essayez de procéder à un appel. Si tout fonctionne comme prévu, le système ne doit donner aucun signe de vie car la mémoire de la carte SIM est complètement vide.
Répétez l’appel après avoir installé le cavalier J1 sur “A”. Dans ce cas également la sortie restera inerte, mais le numéro de votre téléphone portable sera mémorisé dans la carte SIM.
A présent, ôtez le cavalier J1 de “A” et effectuez un troisième appel. Comme par enchantement le portail s’ouvrira.
Le circuit a en fait trouvé votre numéro dans la carte SIM. Il a reconnu l’appel comme valide et a donc activé le relais de sortie.
Pour autoriser d’autres personnes à utiliser l’ouverture du portail, il suffit de répéter autant de fois que nécessaire la procédure précédente avec le cavalier J1 sur “A”.
Pour retirer son droit d’utilisation à un usager, il faut insérer le cavalier J1 sur “B” et effectuer un appel avec son téléphone et automatiquement, le numéro concerné sera effacé de la mémoire de la carte SIM.
Si, pour une raison quelconque, le téléphone n’est plus disponible, il faut retirer la carte SIM du module Falcom A2 pour l’insérer dans un téléphone portable en état de fonctionnement et effacer le numéro concerné directement par l’intermédiaire du clavier. Concluons avec une dernière possibilité.
Si un utilisateur de poste fixe n’a pas demandé à France Télécom la suppression de l’affichage du numéro*, son numéro pourra être mémorisé dans la carte SIM du Falcom A2. Voilà qui ouvre des applications intéressantes !
Par exemple : mémorisez le numéro de votre téléphone d’appartement dans la SIM du Falcom A2 de façon à pouvoir ouvrir le portail en cas de nécessité en effectuant un appel avec le téléphone fixe de la maison.

Figure 4 : Organigramme du programme implémenté dans le microcontrôleur PIC12C672 (U3).

Figure 5a : Sous-programme de vérification de l’identification de l’appelant.

Figure 5b : Sous-programme de gestion du relais.

Figure 6 : Ce tableau illustre les fonctions qui sont dévolues aux lignes d’entrées/sorties du connecteur frontal 15 broches.


La commande de portail pilotée par GSM décrite dans cet article utilise un module GSM Falcom A2 dont les dimensions sont particulièrement réduites.
Malgré cela, le module comprend également le logement pour la carte SIM.
Le module A2 fonctionne avec une tension d’alimentation de 5 volts (la consommation au repos est de 35 mA seulement) et il est en mesure de se connecter aussi bien en phonie qu’en mode data/fax.
Le module dispose de deux connecteurs pour les liaisons aux circuits externes, un de 15 broches et l’autre de 40 broches. Dans notre application, nous avons utilisé les lignes disponibles sur le connecteur frontal à 15 broches exclusivement.

08/03/2014

la programmation des PIC en langage C sous MPLAB.

Programmer les PIC en C


        Introduction


Cette page porte sur la programmation des PIC en langage C sous MPLAB.

   Vous trouverez une suite de didacticiels, qui vous permettront en partant presque de 0 de développer des applications pour les PIC en langage C. Chaque didacticiel est la suite logique du précédent. Pour cet apprentissage, vous aurez besoin de :
                  -Logiciels gratuits disponibles sur Internet. Ces logiciels vous seront présentés au fur et à mesure des besoins.
                  -Programmateur de composants. Celui-ci est disponible sur le site.

        Avantages du C


   Pour de la programmation de base, le C est intéressant. Il permet rapidement, sans gros effort, de développer des programmes fonctionnels. Il permet aussi de s'affranchir de connaissances complexes sur l'architecture des PIC. Il a l'avantage de gérer facilement les boucles, les choix, ainsi que l'affichage.

        Inconvénients du C


   Le C n'est pas le langage naturel du microcontrôleur. Il permet de programmer plus intuitivement. Les logiciels de programmation en C transforment alors les lignes en C en lignes assembleurs directement compréhensibles par le microcontrôleur. Pour programmer efficacement, il est souvent nécessaire d'aller voir le code assembleur, il est donc conseillé d'avoir des bases solides en assembleur pour développer des programmes conséquents. Je vous conseille alors les didacticiels pour l'assembleur faits par .

        Les Cours

   Pour tous les cours, nous n'utiliserons qu'un seul type de PIC: le 16F84A. Ses possibilités sont intéressantes, il peut être effacé et reprogrammé plusieurs fois, son prix est faible (autour de 4 €). Tout ceci en fait un des PIC les plus utilisés par les amateurs.
Installation des programmes et première simulation (204Ko) version 1.3
   Ce tutorial vous permettra d'installer MPLAB version 6.3, de déclarer le compilateur C, d'écrire un premier programme en C afin de faire votre première simulation en C.
Architecture d'un programme et manipulation des Entres/Sorties (120Ko) version 2.1
   Vous découvrirez ici comment est architecturé un programme en C. Vous manipulerez les entrées et sorties du microcontrôleur (broches du composants) et programmerez un composant.
Alternatives et itérations (139Ko) version 1.4
   Grâce à ce fascicule vous comprendrez la notion de variable, apprendrez à créer des boucles, faire des choix. 
Maîtriser le temps avec les PIC (184Ko) version 1.1
   A l'aide de ce manuel vous apprendrez à gérer le temps avec les PIC.
Les fonctions, les interruptions(132Ko) version 1
   Vous découvrirez la notion de fonction, d'interruption, et la façon de les gérer.
Les variables, les constantes, les calculs mathématiques (131Ko)
   Comment faire réaliser des calculs mathématiques à un PIC ? Vous verrez, rien de plus simple.
 
14/10/2013

Les microcontroleurs 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.
Tableau 1 : Mémoire et prestations.
Ce qui différencie les divers microcontrôleurs 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.
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 disponible en version 40 broches (voir figure 2). Nous allons les décrire une par une.
Figure 1 : Schéma synoptique interne du microcontrôleur ATMEL AVR AT90S8515.
La 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 lafigure 3 (broches 18 et 19). ICP : C’est une broche d’entrée pour la fonction de “timer/ counter input capture”. (broche 31).
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éremment I/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.
Figure 4 : Schéma synoptique du microcontrôleur AT90S8515.
Le concept d’interruption Nous verrons plus tard que le CPU ne fait que lire et exécuter séquentiellement, rigoureusement l’une après l’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 vecteurs d’interruption. Revenons maintenant au schéma synoptique interne. Nous voyons que les autres périphériques disponibles sont
  • La “SPI Unit”, interface sérielle synchrone à 3 fils en mesure de travailler en mode “Master” (maître) ou “Slave” (esclave),
  • Le “Serial UART” (Serial Universal Asynchronous Receiver and Transmitter),
  • Un “Timer/ Counter” 8 bits et un “Timer/Counter” 16 bits, un “Watchdog Timer”,
  • Un comparateur analogique et 32 lignes d’entrée/sortie avec lesquelles le dispositif échange les données en niveau TTL avec le monde extérieur.
Pour communiquer avec les différents périphériques énumérés ci-dessus, une série de registres, définis selon le tableau 3, appelés “I/O Register” sont disponibles. Dans ce tableau, vous trouverez la liste des adresses mémoire où ils sont disponibles et les sigles mnémotechniques qui les identifient.
Le plan mémoire
Comme tous les microcontrôleurs, l’AT90S8515 dispose aussi de deux zones de mémoire spécifique internes : la “Program Memory” et la “Data Memory”. La “Program Memory” ou mémoire programme, contient le programme c’està- dire l’opcode des instructions que le CPU devra exécuter l’une après l’autre quand le microcontrôleur sera alimenté. La mémoire programme est de type Flash et peut être écrite et effacée plus de 1 000 fois. Sa capacité est de 4 kilobytes x 16 et ses adresses vont de $000 à $FFF. La “Data Memory” peut être décomposée en deux parties significatives : l’une contient les données et l’autre est destinée aux registres. Nous verrons que le déroulement d’un programme requiert l’utilisation des constantes mais aussi des variables. Le terme “variable” sert à indiquer tous les paramètres numériques qui peuvent varier pendant l’exécution d’un programme.
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 de 512 octets internes de mémoire (de l’adresse $0060 à $025F) dans lesquelles il est possible de mémoriser des variables. Observons le plan mémoire de données : nous pouvons noter que les adresses $0260 à $FFFF sont prévues pour une RAM externe. Ce qui veut dire que la structure hardware et les ressources software du AT90S8515 permettent de brancher une mémoire externe SRAM de 64 kilobytes (maximum). Les adresses $0000 à $005F contiennent, quant à elles, les registres qui, comme nous l’avons dit précédemment, sont des positions utilisées pour communiquer avec les périphériques ou utiles au travail de l’ALU. Les registres dont les adresses vont de $0000 à $0001F sont appelés “General Purpose Working Register”. Ce sont les registres de travail, ceux qui sont utilisés pour faire des opérations mathématiques ou pour diriger le programme vers des adresses déterminées. Nous étudierons ces registres lors de l’analyse du jeu d’instructions. Nous vous rappelons, de toute façon, que sur les 32 registres d’utilisation générale, 6 peuvent être utilisés comme pointeurs d’adressage indirect à 16 bits pour travailler avec la mémoire. Ces registres de 16 bits sont appelés registres X, Y et Z. A chaque registre est associée une adresse unique, ce qui a permis de faire le plan mémoire de l’adresse $00 à l’adresse $1F en distinguant les 32 adresses à utiliser.
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’AVR communique avec les 32 registres d’utilisation générale, et est en mesure d’exécuter, en un seul cycle d’horloge, des opérations entre les deux registres. Les adresses de $0020 à $005F contiennent, par contre, les registres d’I/O (voir le tableau 3). Il s’agit de 64 adresses à travers lesquelles il est possible de donner des ordres, ou encore d’envoyer des commandes aux différents périphériques et de les recevoir. Nous décrirons mieux chaque registre d’I/O lors de l’analyse du périphérique auquel ils sont destinés. Limitons-nous, pour l’instant, à dire que les adresse d’I/O, ou encore la partie de mémoire qui contient les registres d’I/O, sont accessibles à travers les instructions de “IN” et de “OUT” qui transfèrent les données entre 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 lesquels vous pouvez écrire ou lire des données, sont implémentés. Il s’agit de la mémoire EEPROM. Cette zone de mémoire peut être considérée comme une RAM à la différence près que les données insérées sont conservées, même en l’absence d’alimentation. Pour écrire ou lire des données en EEPROM, il est cependant nécessaire d’utiliser trois registres spécifiques. Cette mémoire permet un maximum de 100 000 cycles d’écriture/lecture.
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
  • Bit 7 – I – Global Interrupt Enable Ce bit est mis à la valeur logique haute (c’est-à-dire 1) pour activer l’utilisation des interruptions. Ce bit est mis à la valeur logique basse (c’est-à-dire 0) après une demande d’interruption. Il est remis à 1 par l’instruction RETI au retour d’une routine d’interruption.
  • Bit 6 – T – Bit Copy Storage Les instructions de copie des bits (BLD, bit lu et BST, bit emmagasiné) utilisent le bit T comme source et destination dans les opérations effectuées sur chaque bit d’un registre. Un bit d’un registre peut être copié dans le bit T par l’instruction BST alors que le bit T peut être copié dans un autre registre à travers l’instruction BLD.
  • Bit 5 – H – Half Carry Flag Ce bit indique qu’une opération arithmétique a généré une retenue ou un dépassement.
  • Bit 4 – S – Sign Bit Le bit S est donné par un OR exclusif entre le flag négatif N et celui complémenté à 2 du flag V. Il indique le signe de la donnée après avoir exécuté une opération arithmétique.
  • Bit 3 – V – Overflow flag Ce bit contient le résultat d’overflow et est en complément à deux. Traduit littéralement, overflow veut dire débordement. C’est une condition dans laquelle une opération arithmétique fournit un résultat de grandeur supérieure au maximum qu’un registre ou une position de mémoire peut contenir.
  • Bit 2 – N – Negative flag
  • Bit 1 – Z – Zero flag
  • Bit 0 – C – Carry flag Ces trois bits indiquent, respectivement, au terme d’une opération mathématique ou logique, si le résultat est négatif, si le résultat est égal à 0, si l’opération a donné lieu, en plus du résultat, à une retenue. Le registre d’état (Status Register) n’est pas automatiquement sauvegardé lorsque l’on appelle une routine d’interruption.
chapitre 3
Le microcontrôleur AT90S8515 dispose de quatre ports d’I/O (Input/Output) de 8 bits appelés port A, port B, port C et port D. Ces ports d’entrées/sorties permettent au microcontrôleur de communiquer avec le monde extérieur. Par exemple, si vous voulez connecter un convertisseur A/D (Analogique/Digital), il faudra que le micro dispose de quelques broches afin que vous puissiez effectuer le branchement au dispositif à commander.
Chacun de ces ports d’I/O est constitué de 8 bits chacun et certains sont “programmables”. Ce terme signifie que des broches particulières du port peuvent être utilisées dans des 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 en question du port d’I/O pour exécuter une interconnexion sérielle à quatre fils avec un autre périphérique qui utilise le même protocole de communication. Les quatre bits restants du port d’I/O peuvent être utilisés dans n’importe quel autre but. Chaque port d’I/O est piloté à travers l’utilisation de trois registres qui sont appelés “Data Register”, “Data Direction Register” et “Input Pins Address”. Pour utiliser le port A, comme pour les autres, trois adresses de mémoire d’I/O sont assignées, une pour chaque registre. On donne un nom mnémotechniqueà chacune de ces adresses. Le registre des données est appelé “PORTA” (adresse hexadécimale 3BH), le registre qui indique la direction de la donnée, In (entrée) ou Out (sortie), est appelé “DDRA” (adresse 3AH), et le registre “Input Pins Address” est appelé “PINA” (adresse 39H). Ces noms (“PORTA”, “DDRA” et “PINA”) sont utilisés lorsque l’on programme en assembleur. En effet, si l’on veut écrire dans le registre “DDRA”, il suffira d’utiliser les 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.
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.
Tableau 4 : Adresses hexadécimales des ports d’I/O.
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).
Tableau 6 : Port D.
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.
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.
Figure 8 : Schéma du circuit du compteur 8 bits.
Pour le compteur 16 bits, c’est la même chose, seules changent les broches de sélection (CS00, CS01 et CS02 deviennent CS10, CS11 et CS12). Ces bits de sélection sont mémorisés par le programmeur à l’intérieur d’un registre 8 bits dont on utilise seulement les trois bits de poids faibles. Ce registre s’appelle “TCCR0”. Vous noterez que le compteur de 8 bits est un “upcounter” et que la valeur de comptage est mémorisée dans le registre “TCNT0”. L’analyse du schéma du circuit du compteur (figure 8) montre les deux registres de 8 bits “TIMSK” et “TIFR”. Ces registres servent à gérer les événements d’interruption du compteur. En ce qui concerne le compteur 8 bits, on utilise le bit 1 du registre “TIMSK”. Lorsque celui-ci est au niveau logique haut, avec le bit 1 du “Status Register”, l’interruption de débordement (overflow) du compteur a été activée et, par conséquent, s’il y a débordement de la part du compteur, la routine correspondante (qui se trouvera à l’adresse 007H) sera exécutée. Du registre “TIFR”, on utilise le bit 1. Celui-ci va au niveau logique haut quand un overflow se produit et est remis à 0 par le hardware dès que la routine correspondantà la demande d’interruption a été exécutée. Le compteur 16 bits est, par contre, plus complexe que le précédent et il permet par conséquent de réaliser plus de fonctions. L’une d’entre elles est la modulation PWM (Pulse Width Modulation), et peut être réalisée à 8, 9 ou à 10 bits. Comme le compteur 16 bits est de type “up/down” et peut donc aussi bien compter que décompter, vous pouvez générer un signal triangulaire (voir la figure 9), obtenu en faisant monter le compteur jusqu’à sa valeur maximale, et toujours à intervalles de temps constants, le faire décompter jusqu’à ce qu’il arrive à zéro pour, ensuite, recommencer l’incrémentation. Cette caractéristique est utilisée pour générer la modulation PWM, qui consiste à changer le rapport cyclique (Duty Cycle) d’un signal carré sur la base d’un signal modulant représenté par la valeur de comparaison (Compare Value). Pour en comprendre le fonctionnement, revoyez la figure 9 . A chaque fois que le signal triangulaire se trouve sous la valeur de référence (la ligne en pointillés) un changement de front 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 valeur du seuil, vous pourrez changer la durée de l’impulsion en sortie et, donc, en continuant à faire varier le seuil, vous générez une forme d’onde PWM. Le seuil doit être modifié avant qu’il ne rencontre le signal triangulaire (voir la figure 4) sous peine de générer un “Glitch” qui représente un dérangement non désiré.
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.
Figure 10 : Schéma du circuit du watchdog et tableau du prescaler correspondant.