cours microcontrol 2005

91

Upload: mus

Post on 01-Oct-2015

26 views

Category:

Documents


11 download

TRANSCRIPT

Cours microcontrleur

SommaireAVANT PROPOS ....................................................................................................... 4I. MICROPROCESSEUR............................................................................................ 71.1. Systme informatique minimal ........................................................................................... 7

1.2. Excution de programme .................................................................................................. 11

1.3. Les Interruptions ............................................................................................................... 18

II. MICROCONTROLEURS..................................................................................... 212.1. Architecture dun Microcontrleur ................................................................................... 21

2.2. Etude du microcontrleur 8 bits ST7 ................................................................................ 24 a) Les registres internes ............................................................................................................................ 24 b) Lorganisation mmoire (memory map)................................................................................................ 26 c) Le jeux dinstruction.............................................................................................................................. 26

2.3. Les Priphriques du ST7 ................................................................................................. 27

2.3.1. Programmation et configuration des priphriques ......................................................................... 27

2.3.2 Les Timers ........................................................................................................................................ 29

2.3.3. Le Convertisseur analogique/numrique (CAN) ............................................................................. 332.3.4. Les ports dentres/sorties parallles ............................................................................................... 34

2.4. Les interruptions................................................................................................................ 39

III. UTILISATION DU LANGAGE C ....................................................................... 403.1. Organisation mmoire du ST7 et options de compilation ................................................. 41

3.2. Allocation des variables .................................................................................................... 42

3.2.1. La zone DEFAULT_RAM .............................................................................................................. 42

3.2.2. Les variables en page zro ............................................................................................................... 43

3.2.3. Les constantes .................................................................................................................................. 43

3.2.4. Stockage en mmoire EEPROM...................................................................................................... 44

3.2.5. Allocation de bouts de code ............................................................................................................. 44

3.2.6. Accs la mmoire via des pointeurs .............................................................................................. 44

3.3. Les registres des Priphriques ......................................................................................... 45

3.3.1. Dclaration des registres .................................................................................................................. 45

3.3.2. Lecture, criture et test dun bit dans un registre ............................................................................. 46

3.3.3. Configuration des registres lors dinitialisation de priphriques .................................................... 47

3.3.4. Utilisation de macros pour les oprations sur les bit........................................................................ 47

3.4. Programmation des Interruptions ...................................................................................... 49

3.5. Langage C optimis pour microcontrleurs ...................................................................... 50IV. LA MISE EN UVRE ........................................................................................ 544.1. Mise en uvre matrielle .................................................................................................. 54

4.2. Mise en uvre logicielle ................................................................................................... 56

4.3. La chane de dveloppement ST7 ..................................................................................... 59

4.4. Exemple de projet.............................................................................................................. 61

4.4.1. Programme principal main.c ........................................................................................................ 61

4.4.2. fichier de link enviro.prm ............................................................................................................. 63

4.4.3. fichier denvironnement defaut.env.............................................................................................. 64

4.4.4. fichier make enviro.mak............................................................................................................... 64

Avant proposMicrocontrleur :Circuit programmable capable dexcuter un programme et qui possde des circuits dinterface intgrs avec le monde extrieur.

Les microcontrleurs sont apparus quand :

Quand on a sut les fabriquer, cad quand les technologies dintgrations ont suffisamment progresses

Quand dans les applications domestiques ou industrielles ont avait besoin de systmes

intelligents ou tout au moins programmables.

Exemple

La machine laver qui doit commander diffrents organes avec des cycles bien dfinis mais variables en fonction du programme choisi.

Quand utiliser un microcontrleur ?Toutes les solutions base de composants programmables ont pour but de rduire le nombre de composants sur le circuit lectronique et donc fiabiliser le circuit.

Le microcontrleur est en concurrence avec dautres technologies

Suivants les applications : 3 types de technologies

Logique cble

trs rapide, fonctions ralises par une voie matrielle

non programmable, peu conomique quand lapplication est complexe peu de souplesse : dure dtude prohibitif et circuit difficilement modifiable

Rseaux de logique programmables (PAL, LCA,..)

rapide, adapt au traitement de signaux complexes

prix lev et langage de programmation non standard

Les processeurs

grande souplesse : fonctions sont ralises par voie logicielle puissance de calcul, langage volu

nombre important de composant runir, solution onreuse

A retenir

si la fonction raliser est simple une logique cblesi le nombre d'units raliser est trs important circuits intgrs ddi en logique cble pour les fonctions simples

Une ralisation logicielle est toujours plus lente qu'une ralisation en logique cble : le microprocesseur excute une instruction la fois

Les contrleurs = avantage des processeurs mais limits aux applications ne ncessitant pas tropde puissance de calcul, nombre de composant trs rduit, mais souvent

surdimensionnement devant les besoins de lapplication)

Les avantages des microcontrleurs- Diminution de lencombrement du matriel et du circuit imprim

- Simplification du trac du circuit imprim p(lus besoin de tracer de bus !)

-Augmentation de la fiabilit du systme nombre de composants Pconnexions composants/supports et composant circuit imprim P- Intgration en technologie MOS, CMOS, ou HCMOS

diminution de la consommation

- Le microcontrleur contribue rduire les cots plusieurs niveaux:

moins cher que les composants quil remplace

Diminution des cots de main duvre (conception et montage)

- Environnement de programmation et de simulation volus

Les dfauts des microcontrleurs- le microcontrleur est souvent surdimensionn devant les besoins de lapplication

- Investissement dans les outils de dveloppement

-crire les programmes, les tester et tester leur mise en place sur le matriel qui entoure le microcontrleur

-Incompatibilit possible des outils de dveloppement pour des microcontrleurs de mme marque.

- Les microcontrleurs les plus intgrs et les moins coteux sont ceux disposant de

ROM programmables par masque

Fabrication uniquement en grande srie >1000

Dfaut relatif car il existe maintenant systmatique des version OTPROM un peu plus chre.

En conclusion :un peu de calculbeaucoup dentres des sorties variescapteurs multiples logique (0,5v) tension

afficheur LCD, LED

relais

communicationle microcontrleur prsente lavantage des processeurs mais limits aux applications ne ncessitant pas trop de puissance de calcul (architecture courante 8bits)

Il existe plusieurs architecture de microcontrleurs de 4 128 bits pour les applications demandant une certaine puissance de calcul (injecteurs automobile)

II. Microcontrleurs2.1. Architecture dun MicrocontrleurLe microcontrleur est un driv du microprocesseur. Sa structure est celle des systmes base de microprocesseurs. Il est donc compos d'une unit centrale de traitement et de commande (quivalente au microprocesseur), de mmoires et de ports d'entres/sorties.En plus de cette configuration minimale, les microcontrleurs sont dots d'un ou plusieurs systmes de comptage (TIMER). Quelques uns sont dots d'un convertisseur analogique/numrique (CAN) intgr. Ces atouts supplmentaires permettent de nombreuses applications telles que :- acquisition et traitement de donnes analogiques (CAN)- comptage d'vnements (TIMER)- mesure de frquence ou de priode (TIMER)- gnration d'impulsions (TIMER) les programmes peuvent tre diffrents (gestion dun thermostat intelligent, dune photocopieuse..)

les programmes ont en commun peut de calculs complexes contrairement un systme informatique)

Interruptions externes

Entre des compteurs

Contrleur dinterruptions

ROM UVPROM

OTPROM RAM EEPROM

Timer 1

Timer 0CPU

BUS

Interface spcifique

Horloge

Contrleur de bus

Ports dentres/sorties

Ports srie

Quartz externe ou

interne TXD RXD

monde extrieur

Un systme minimal programmable pour fonctionner besoin :

dune unit centrale

de mmoires morte pour le programme (PROM, EPROM,.) de mmoires vive, pour les calculs, pour stocker les donnes,.. de circuits interfaces, pour connecter les priphriques qui vont permettre la communication avec lextrieur

do lapparition des microcontrleurs (ou Monochip) Dans un seul circuit on va trouver :

Une Horloge (oscillateur) Un processeur (Unit centrale) De la mmoire vive (RAM) De la mmoire morte (PROM, EPROM, EEPROM) Des interfaces qui vont dpendre du type de microcontrleurs choisio Compteurs/Timero Convertisseurs Analogiques/numriques (C.A.N.)o Chien de garde ( Watch Dog )o Gestion dun port parallle (dentre/sortie)o Gestion dune liaison srie RS232o Gestion des interruptionso Gestion des moteurs en PWM (pulse w modulation)o Gestion dcran LCDo Gestion de bus I2Co EtcIl suffit de choisir le microcontrleur le mieux adapt lapplication que lon doit raliser. !la ROM contient le programme excutercontrairement un systme informatique classique, il nest pas question de charger un programme en mmoire vive partir dun disque ou dune disquette car lapplication doit dmarrer ds la mise sous tension et ne possde pas dorgane de ce type.

la RAM ou mmoire vive(Random access memory :mmoire accs alatoire)On les appel comme a de faon impropre LES ROM sont aussi a accs alatoire

Ces mmoires perdent linformation lorsquelles ne sont plus alimentes.

Pour pouvoir travailler normalement le contrleur doit pouvoir a souvent besoin de stocker des donnes temporaire qque part et cest la quintervient la RAM.

Contrairement a un systme informatique classique la RAM dun contrleur est de petite taille.

Les entres sortiesles circuits dinterfaces peuvent piloter des matriels trs diffrents, (moteur pas as, afficheur LCD, thermistance, communication avec des pc ou dautres contrleurs, etc)

Le bus systmeLunit centrale doit pouvoir communiquer avec les mmoires et les priphriques.

Exemple : pour crire une donne en mmoire, lUC doit dabord spcifier ladresse de lammoire, puis envoyer la donne,

et en dernier lieu, envoyer un signal qui validera lammorisation de la donne. Tous ces signaux seront vhiculs par les bus , ensembles de

conducteurs , sur lesquels viennent se brancher les mmoires, les interfaces des priphriques.

On distingue 3 types de bus

le bus dadresses le bus de donnes le bus de contrle (pour les signaux de service)Les diffrents types de mmoires dans les microcontrleursLe prix du microcontrleur dpend fortement du type de mmoire quil contient. Outre les diffrents priphriques possibles, les diffrents types de mmoire constituent les diffrentes gammes de microcontrleurs de mme architecture.

La ROM qui contient le programme excuter (plusieurs kilo octets)ne sefface pas hors tension1. PROM. (Programmable Read Only memory)

On les appelle aussi mmoire fusibles ou OTP (One Time Programmable)

La programmation de ce type de mmoires consiste faire claquer des fusibles

(qui sont en fait des jonctions semi-conductrices)

2. EPROM (Erasable Programmable Read Only Memory) ou UVPROMCe sont des mmoires programmables lectriquement et effaable par UV doncrutilisables. Il faut noter que leffacement par UV

(environ 15 min) et lcriture(qques minutes) sont des oprations relativement longues. Ncessite une petite fentre en quartz pour laisser passer les UV.

(principe utilis :utilisation de transistors FAMOS : Floating Gate Avalanche Injection

Metal Oxide Silicium)

apparition dOTPROM qui sont des UVPROM sans fentre et donc non rutilisable mais pas chre.

3. AutresEEPROM (Erasable Programmable Read Only Memory)

Ce sont des mmoires programmables et effaables lectriquement, ou aussi mmoires

FLASH. Procd beaucoup plus rapide que lors dune exposition UV.

la RAM (mmoire des donnes, variables, piles,etc..) (quelques octets)sefface hors tension.

2.2. Etude du microcontrleur 8 bits ST7a) Les registres internes

Laccumulateur (A) (Registre de donne)Registre o sont effectus les calculs arithmtique et logiques.

Pour effectuer une opration en mmoire il faut dabord copier la premire dans laccumulateur, puis effectuer lopration entre laccumulateur et la deuxime valeur. Le rsultat peut alors tre recopi de laccumulateur vers la mmoire.

Les registres dindex (X et Y) (Registre dadresse)Ces registres contiennent des adresses. Avoir 2 registres dadresse permet de grer les dmnagement de mmoire mmoire. Sinon on peut les utiliser pour stocker des donnes temporaires

Exemple

D[k]=C[j]+B[i] ;

LD X,i

LD A,([B],X) LD X,j

ADD A,([C],X) LD X,k

LD ([D],X),A

Le compteur de programme (PC)Ce registre commande le squencement des instructions. PC contient ladresse de la prochaine instruction excuter.

PC sincrmente automatiquement avec une constante (x octets = code instruction + code oprande) sauf en cas de saut ou branchement (PC se charge alors avec ladresse de dbut de la routine appele suite un CALL par exemple).

Le pointeur de pile (SP)La pile est une zone de mmoire vive utilise par les instructions CALL, RET et

PUSH , POP

Quand une valeur est empile, SP est dcrment et la valeur est crite ladresse situe immdiatement en dessous de la dernire valeur empile.

Lempilement dcrmente et le dpilement incrmente permet limbrication dappel de sous programme.

Exemple : 1 ss. prog. peut appeler un ss. prog. qui en appelle 1 troisime. 3 adresses de retour sont empiles (3 call) : le premier RET fera retourner la troisime la deuxime, etcjusquau prog principal

Cas des interruptionsEmpilent ladresse de retour, mais aussi le contenu de tous les registre (A,X,CC) sauf Y. Le retour dinterruption se fait par une instruction spciale IRET, qui dpile toutes les valeurs et remplace les registres dorigine.

Initialisation du pointeur de pileAu dvbut du prog le pointeur de pile doit tre initialis. RSP qui met SP une valeur qui dpend du modele de ST7.

Le registre code condition (CC)1 1 1 H I N Z Cles bits de ce registre sont mis jour aprs chaque opration.Le bit CCest le bit de retenu (addistion ou soustraction) Exemple : addition 16 bit

1200 + 6230

4B0 + 1856 = 1D06

B0 + 56 = 106 (hexa) 1 est la retenu

4 + 18 = 1C, 1C+1=1D

pour cela la premire instruction utilse ADD, et toutes les autres ADC IDEM pour la soustraction avec SUB et SUBC

Le bit ZIl permet de savoir si le dernier rsultat tait zero ou nonLe bit NIl permet de savoir si le dernier rsultat tait ngatif ou nonLe bit ICest le masque global dinterruptions. Quand il est 1 toutes les demandes dinterruption sont ignores. Si une demande est en attente son passage 0

dclenche linterruption.Le bit HIl reflte la retenu entre le 4me et le 5me bit dun octet. Utilis en arithmtique dcimale code binaire (BCD) chaque groupe de 4 bits contient un digit dcimal, mais le groupe suivant une valeur seulement 10 fois plus grande au lieu de 16. chaque groupe peut prendre les valeurs 0 9 , les valeur 10 15 tant interdites.

Utilit de

vice versa.

larithmtique BCD : vite les conversions dcimale en binaire et

b) Lorganisation mmoire (memory map)ST7 : Architecture de type von Neuman, donc un seule espace adressable continu.etc) Le jeux dinstructionArchitecture RISC, le jeu dinstruction est cependant assez

riche. Il ne manque que ladivision. Les modes dadressage sont nombreux et disponibles sur presque toutes les instructions lmentaires.

2.3. Les Priphriques du ST72.3.1. Programmation et configuration des priphriquesLes registres des priphriques matriels8 bitsPoids fort Poids faible1 registre de control : CR (lecture/criture) (configuration logicielle du priphrique chaque bit est un interrupteur on/off)

1 registre de Status : SR (lecture)

modifi par le systme

(renseigne de ltat courant du priphrique au moyen de flags ou fanions reprs par les bits du registre)

1 registre de donne : DR (lecture/criture) tat dun port dentre/sortie (lecture/criture) Rsultat de conversion A/D (lecture)

a) Le registre Miscellanaeous du ST72311Le cur du ST7 est cadenc par une horloge interne qui provient de la division de la frquence de loscillateur. Le rapport de division est programmable, ce qui permet de slectionner le meilleur compromis entre vitesse et consommation dnergie.

Ce choix est fait laide de plusieurs bits du registre miscellaneous. Ce registre contient aussi des bits servant dautres usages ; la rpartition des bits de ce registre diffre selon la variante de ST7 considre. Nous donnons ici les fonctionnalits du ST72311 :

MISCR

Ei2 : Pb0-Pb3FFF2-FFF3EI3 : Pb4-Pb7FFF0-FFF1

EI0 : Pa0-Pa3FFF6-FFF7EI1 : Pf0-Pf7FFF4-FFF5

0 Normal1 LentPEI3

PEI2 MCO PEI1 PEI0

PSM1 PSM2 SMSEt niveaubas 0 0seul 0 1seul 1 0ou 1 1

0 Pf0=E/S1 Pf0=fcpu

/2 0 0

Oscilateur/2Pf0

/8 1 0/16 1 1Fcpu vers lUCb) Le chien de garde du ST72311Le chien de garde est plutt 1 dispositif de scurit quun priphrique.Il est

mis en uvre pour, non pas viter un plantage, mais relancer le programme dumicrocontrleur (reboot)

Le plantage peu provenir dune agression lectromagntique ou dun bug du programme provenant de la non prise en compte dvnement matriels extrieurs ou souvent de leurs enchanements.

A lachat du microcontrleur on peut spcifier 2 options :

- chien de garde activation logicielle

- chien de garde activation matrielle

Une fois le programme au point, on peut fixer la valeur du compteur la moitie du max et ensuite approcher par la valeur optimale par dichotomie.

Si le chien de garde dclenche trop tt on double la valeur, si le reboot nest pas gnant pour lappli, on prend la moyenne etc,..de faon trouver la plus petite valeur qui permet lappli de fonctionner. Une fois cette valeur trouve, il est de bon ton de la multiplier par un coefficient de scurit (gestion des imprvus) !

2.3.2 Les TimersLe st7 dispose de 2 circuits Timer 16 bits (Timer A et Timer B) indpendants et proposant les mmes fonctionnalits.

Chacun permet par exemple : Le comptage dimpulsions

La mesure de frquence

La mesure dintervalles de temps

LA gnration dimpulsions, isoles ou priodiquesLintrt dun tel priphrique est quil traite ces oprations sans lintervention du cur !!Horloge du temporisateur2 sources possibles :

- horloge interne

- horloge externe (sur une broche spcifique dun port parallle)

En cas dutilisation de lhorloge interne, on peut configurer diffrentes frquences de fonctionnement qui vont prdiviser la frquence du cpu. Pour cela on utilise un prdiviseur paramtrable au moyen des bits CC1 et CC0 du registre de configuration du timer TACR2 pour le timer A et TBCR2 pour le timer B.

2 registres de contrle : TACR1 et TACR2TACR1ICIEOCIETOIEFOLVL2FOLVL1OLVL2IEDG1OLVL1

TACR2OC1E

OC2E OPM PWM CC1

CC0 IEDG2 EXEDG0 0 /4fcpu

0 1 /21 0 /8

ftimer=fcpu/prediv1 1 External

Horloge dutemporisateur1 registre de status : TASRTASRICF1OCF1TOFICF2OCF2000

Exemple de la rsolution du temporisateur avec un Quartz de 16 Mhz pour chaque taux de prdivision :

PrdiviseurHorloge de la CPUPrdiviseur Horloge du temporisateur

1/21/41/8

1/2 (rapide)0.25 s0.5 s1 s

1/32 (lent)4 s8 s16 s

Les Compteurs perptuels TACR ou TBCR (16 bits)TACR est compos de 2 mots de 8bits chacun nots TACHR (HIGH : 8 bitsde poids fort) et TACLR

(LOW :8 bits de poids faible) qui sincrmenteautomatiquement la frquence du temporisateur.Lecture des compteurs : Attention a lordre de lecture !!!. Comme on ne peut procder qua 2 lectures successives il simultanit.

ny a pas de

Toujours commencer par les poids forts TACHR. Laccs en lecture de ce registre entrane un recopie automatique de TACLR dans un verrou, et quand on accde TACLR cest en fait la valeur du verrou qui est renvoy.

Remise 0 du compteur (en fait pas 0 mais FFFC = -4 ) Toute criture dans TACLR remet le compteur FFFC

a) Dbordement du compteur perptuel et son interruption associeFlag de dbordementLe bit TOF du registre de status TASR indique le dbordement de FFFF

0000 soit 4 impulsions aprs linitialisation du compteur. Le bit TOF passe 1 si dbordement il y a eu.

Pour remettre le bit TOF 0 il faut lire TASR et lire ou crire dans TACLR

Interruption sur dbordementPour gnrer une interruption sur dbordement il faut mettre le bit TOIE du registre de control TACR1 1. linterruption se dclenche alors quand les bits TOIE et TOF sont 1 et quand le bit I du registre code condition est 0.

b) La fonction de comparaison et son interruption associeMcanisme qui produit un vnement quand la valeur courante du compteur est gale la valeur d1 des 2 registres de comparaison TAOC1HR TAOC1LR ou TAOC2HR TAOC2LR.

On peut associer a cet vnement :

- 1 demande dinterruption

- 1 changement dtat sur 1 broche ddie en sortie

-la remise au dpart automatique du compteur perptuel (seulemnet en mode PWM)

Si OC1E est 1 la valeur du bit OLVL1 est copie sur la broche au moment de lvnement de comparaison..

Le flag OCF1 est mis 0 par lecture de TASR puis lecture ou criture de TAOC1LR

c) La capture et son interruption associeElle permet de prendre une photo de la valeur du compteur au moment dune transition de signal dtecte une broche ddie.

La transition de signal dclenchant la capture est dfinie par le bit IEDG1 :

front montant (IEDG1=1) ou descendant (IEDG1=0) :

Quand la transition adquate se produit sur la broche dentre input capture 1 :

- la valeur du compteur est copi dans les registres TAC1HR et

TAC1LR

- le flag ICF1 du registre de status TASR est mis 1

Pour chaque Timer il existe 2 captures possibles (2 broches ddies, input capture 1 et input capture 2)

Linterruption de la captureSi le bit ICIE (input capture interuption enble) est 1 le flag ICFi (i = 1 ou 2)

dclenche linterruption

ICIE est commun aux 2 flags donc il est ncssaire deffectuer dans la routine dinterruption un test des bits ICF1 et ICF2 du registre de status TASR pour connatre lorigine de la capture

Remise 0 du flag de capture ICFi- lire TASR

- lire ou crire dans TAICiLRd) Le mode PWM

2.3.3. Le Convertisseur analogique/numrique (CAN)Description :- tensions dentres positives

-conversion radiomtrique (rsulat = rapport entre la tension applique et la tension de rfrence)

- 8 bits de rsolution

- linaire

- prcision : 1 incrment max (1LSB) ; 0.3 incrment typique

-temps de conversion : 32 prode de lghorloge du convertisseur = 64 priodes de lhorloge interne

( 8 s vitesse max du cpu c.a.d 16/2 Mhz )

Toute criture dans le registre de control/statuts ADCCSR (un seul registre) stop la conversion en cours.

Les ports dentre/sortie AIN0 AIN7 doivent tre configures en entre (PADDR=0) et sans interruptions (PAOR=0) pour tre en haute impdance afin dviter toute interfrence.

Avant de rcuprer la valeur de la tension dans le registre ADCDR il faut sassurer de la fin de la conversion, pour cela il suffit dattendre que le flag COCO passe 1.

Avant dutiliser le CAN il faut attendre 30 s aprs avoir fixer ADON 1.

2.3.4. Les ports dentres/sorties paralllesIls conditionnent le nombre de pattes du microcontrleur

Ils sont les plus utilises dans les montages microcontrleur car se sont des lignes dont l'tat logique, haut ou bas, est directement contrlable par programme. En sorties, les lignes sont gnralement charges de commander des relais, des triacs, des LED ou des afficheurs. Par mesure d'conomie ou mme parfois de "ralisabilit", on cherche toujours rduire le nombre de ports d'entres/sorties ncessaires.

Configur en sortie

2 montages : symtrique (totem-pole), collecteur ouvert (open drain)

Comportant essentiellement deux transistors qui ne sont jamais passant en mme temps. Il existe un autre type de montage de l'tage de sortie o seul le transistor cabl la masse (transistor "du bas") est prsent. Le signal de sortie est prendre sur le collecteur de ce transistor, d'o l'appelation de collecteur ouvert pour un tel montage. Ce transistor se comporte comme un interrupteur la masse, ouvert ou passant, correspondant respectivement aux tats de sortie H ou L, dans le montage totem-pole. Pour retrouver un signal logique 5V/0V en sortie du montage collecteur ouvert, il faut rajouter une rsistance de tirage 5V.

De nombreux microcontrleurs proposent des ports qui peuvent servir d'entre et de sortie par souci d'conomie de place. On par exemple commander un afficheur LED est scruter un clavier sur un unique port. La lecture du clavier peut tre faite pendant des temps morts amnags entre deux commandes d'affichage.

LaffichageSi le microcontrleur dispose de sorties fort courant (10mA), on peut connecter directement une LED avec une rsistance de limitation de courant la broche du circuit. C'est le cas de quelques ports de la famille 6805 de Motorola ou de la famille ST7 de STMicroelectronics. Si ces ports n'existent pas, il reste la solution du banal transistor intercaler entre la LED et le contrleur.

Dans le cas o on utiliserait plusieurs afficheurs 7 segments LED, on doit raliser un multiplexage. Les afficheurs sont allums tour tour. Si les pas de programmation sont assez rapides, La persistance rtinienne donne alors l'impression d'un affichage continu. Les segments peuvent tre connects directement sur les sorties du microcontrleur ou si on ne dispose pas assez de lignes de sorties, on peut faire appel un dcodeur BCD / 7 segments.

Lorsque pour des problmes d'autonomie, de dissipation de puissance ou de consommation se posent, on prfrera recourir un afficheur cristaux liquides. Ils sont cependant plus difficiles mettre en uvre. De nombreux fabricants intgrent dsormais une interface spcifique pour commander ces afficheurs LCD.

LED (Sortie fort courant (High sink) ) : utilisation dune rsistance de limitation

+ 5 V Pb0R = 220 330 OhmsLED (Sortie normal) : utilisation dun transistor 2N222A+ 5 V RLIMPb0

4.7 kOhms

2N222AAfficheurs 7 segments multiplexs

Commande de puissanceTransistor MJ 3001

Montage RelaisLes interrupteurs lecture de bouton poussoirla rsistance de tirage au 0 volt (push pull) permet dimposer un 0 logique sur lentre du circuit TTL.

la rsistance de tirage au 5 volt (pull up) permet dimposer un 1 logique sur lentre du circuit TTL.

Les claviersLorsqu'il s'agit de n'utiliser que quelques boutons poussoirs, il suffit de les connecter aux lignes d'entres (un par ligne). Cependant, il est souvent indispensable de mettre en place un clavier ; il n'est alors plus possible de rserver une ligne par bouton. Une solution consiste faire appel a un encodeur de clavier externe qui recevra N touches en entres et fournira un code sur P bits en sortie avec N= 2^P. Ainsi, 16 touches peuvent tre codes sur 4 bits. Une autre solution, celle du clavier en matrice n'utilise

pas de circuit

externe. Comme le montre la figure, les touches sont places l'intersection des lignes et des colonnes du quadrillage ralis par les deux groupes de quatre fils. Il suffit alors de localiser le court-circuit entre une ligne et une colonne lorsqu'une touche est enfonce. Cette localisation se fait en deux temps (logiciel). Les lignes sont mises au niveau logique bas et les colonnes au niveau haut ; on connat la colonne se trouve la touche utilise. On inverse le rle des lignes et des colonnes pour trouver la ligne. Connaissant la ligne et la colonne, on retrouve la touche enfonce. Cette dernire solution est la plus intressante puisqu'elle ne ncessite qu'une dizaine

de ligne en assembleur, elle ne ncessite pas de circuit supplmentaire et ralise une conomie de lignes d'entres/sorties.

Mode de connexion d'un clavier cbl en matrice

Les mmoires externesQue ce soit pour utiliser des microcontrleurs sans ROM interne, pour ajouter de la RAM ou un circuit d'interface, il est parfois utile se faire sortir le bus interne. Cela n'est possible qu'avec les microcontrleurs possdant un mode tendu. Dans ce cas, la solution la plus employe par les fabricants est de redfinir certaines lignes d'entres/sorties parallles comme bus d'adresses et bus de donnes. Par conomie, il arrive que les lignes d'adressage et de donnes soient multiplexes.

dmultiplexage adresse/donnes sur un microcontrleur Motorola

Exemple du MC68HC11A8 o le bus de donnes est multiplex avec les 8 bits de poids faible du bus d'adressage sur le port C du microcontrleur alors que les bits de poids fort du dus d'adressage sont disponibles sur le port B. La ligne AS (Address Strobe) sert ce multiplexage.

2.4. Les interruptionsRemarque :

un seul vecteur dinterruption pour plusieurs vnements possibles

Cas du timer : au niveau logiciel pour connatre lorigine prcise de lvnement il faudra tester les diffrents fanions ou flag.

cest au moyen du fichier du type prm que au moment de ldition le compilateur fait le lien entre le vecteur dinterruption et le nom de la routine dinterruption associe lvnement et dclare dans le programme. le vecteur dinterruption contiendra alors ladresse du dbut de

la routine (adresse code sur 16 bits)

III. Utilisation du langage CPourquoi utiliser le langage C ?Lintrt principal :

Ncessit de dvper en langage volu ; lassembleur proche du langage machine est trop peu lisible est mal adapts une architecture complexe de programme.

Il existe de nombreux langage de haut niveau :

Certain dvps pour des microcontrleurs, dautres largement rpandus dans les ordinateurs ont ts adapts aux besoins des microcontrleurs.

Cest le cas du C.

Avantages : le C reste proche du matriel (mise 1 ou 0 dun bit dun port dentre sortie) le C est structur (prog. Facilement divisible en bloc = fonctions,..) 1 seule ligne de C peut produire plusieurs centaines dinstructions assembleur =simplification du code source, et fiabilit.

Souplesse de travail de part la portabilit globale dun programme en C (hors gestion ente/sortie)

Portabilit entre diffrents types de microcontrleurs de la mme familleInconvnients : Le C destin lorigine pour de gros ordinateurs mmoire centrale. Une mme mmoire pour le programme, les donnes.

Dans un microcontrleur le programme dans une mmoire lecture seule, les donnes dans une mmoire en lecture criture mais volatile (modifiable par vnement extrieur autre que programme). Le C na pas doutils standard pour grer ces diffrences.

Les interruptions doivent et peuvent tre crites en C. les interruptions ne sont pas des concepts du langage C.

Les constructeurs fournissent les extensions pour fonctionner sur microcontrleurs : Modifications pour pouvoir fonctionner sur microcontrleurs :

Diffrentiation des proprits des RAM et ROM pour intgrer la notion dentre/sortieExemple :Le modificateur volatile permet une donne de pouvoir tre modifie par le programme, mais aussi par un vnement extrieur.

Cest le cas des registres dentres, des registres dtat dun priphrique, etc..

volatile unsigned char PADR; // port A data register volatile unsigned char SPISR; // SPI Status Register

Implmentation particulire de chaque fabricant pour pouvoir mettre en uvre les spcificits des microcontrleurs.

Exemple :La directive #pragma TRAP_PROC qui permet de dclarer les routines dinterruptions. Les pointeurs near et far dans la dfinition des pointeurs pour optimiser ladressage.

La premire catgorie est normalise et commune tous les compilateurs. La seconde est propre chaque compilateur.

Plusieurs compilateurs existent pour le ST7. Nous choisissons le compilateur Hiware.

3.1. Organisation mmoire du ST7 et options de compilationLe programme est crit en ROM, les variables sont crites en RAM. Le programmeur doit spcifier dans un fichier de paramtrage, les adresses des zones mmoires afin que lditeur de liens sache placer chacun des segments composant le code.

Il doit contenir la memory map.

Lespace mmoire disponible est propre chaque modle de microcontrleur.

Pour optimiser les accs mmoire, le compilateur Hiware propose 4 modles dorganisation de la mmoire.

Adressage direct :les variables sont stockes en page zero (Short Addressing) 0080h 00FFh

cest un adressage court sur un octet (avantage longueur du code gnr et rapidit dexcution)

Adressage tendu :Les variables sont situes des adresses 0100hModleVariables localesVariables globalesRsultat

SmallAdressage directAdressage directSeules les donnes constantes ont

un adressage tendu ou peuvent tre adrsses par des pointeur far A nutiliser que pour de petites applications

Small extendedAdressage tendu

(>100h)Adressage direct

LargeAdressage directAdressage tenduMode par defaut, bien adapt au

ST7

Large extendedAdressage tenduAdressage tenduPermet lutilisation dun grand

nombre de variables, locales ou globales. Peu adapt aux memory map des ST7

3.2. Allocation des variables3.2.1. La zone DEFAULT_RAMpar dfaut les variables sont stockes dans la zone DEFAULT_RAM.

Certaine variables doivent cependant avoir des addresses fixes, commes les registres des priphriques ou autre variables forces en page 0)

//ANSI C

#define VAR (*(char *) (0x0010))

//LAddresse de VAR est fixe 0x0010//ST7

#pragma DATA_SEG MY_RAM //dfini dans le fichier LINK (*.prm)

char VAR ;

quand elle doivent figurer en page 0 le compilateur doit le savoir

#pragma DATA_SEG SHORT MY_RAM //dfini dans le fichier LINK

char page0VAR ;

le linker alloue la mmoire squentiellement dans lordre des dclaration et optimise lespace mmoire quand une variable nest pas utilise.

Attention la dclaration des registres matriels : dans le fichier de LMINK on doit rajouter +

chaque fichier objetVolatile signifie que la variable peut tre modifie par le matrielFILE.C#pragma DATA_SEG SHORT REG_AREA

volatile char ADCDR;

volatile char ADCCSR;

#pragma DATA_SEG DEFAULT

.

FILE.PRMNAMES FILE.O+

. PLACEMENT

REG_AREA in NO_INIT 0x0070 TO 0x0072

3.2.2. Les variables en page zroCodage sur un octet. Un nombre max de donnes devra tre stock en page zro, plus particulirement celle dont lusage est le plus frquent.

Pour affecter une variable en page zro, deux mthodes :

Cration dun segment code avec lattribut SHORT :#pragma DATA_SEG SHORT FAST_DATA

int FastVariable ; Lutilisation du segment prdfini _ZEROPAGE. Ce segment est dfini par le compilateur qui y stocke ses variables temporaires. On peut y ajouter ses propres variables.

#pragma DATA_SEG _ZEROPAGE

int FastVariable ;

Les segments sont dfinis dans un fichier de paramtrage utilis par le link et dextension prm.

On peut revenir tout moment au segment par dfaut des variables par :

#pragma DATA_SEG DEFAULT3.2.3. Les constantesEn C la notion de constante nexiste pas.

On peut appliquer le modificateur const devant une variableConst int SIZE = 100 ;Ce modificateur gnre un message derreur lors dune tentative dcriture sur cette constante.SIZE = 200 ; // un message derreur est gnrInconvnient de cette mthode : consomme de la mmoire en RAM.

Le compilateur propose loption Cc qui permet de stocker des constantes dans un segment particulier en ROM nomm ROM_VAR, sans rserver lespace quivalent en RAM.

Exemple :const char HEXADECIMAL[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,

D, E, F} ;

lattribut const associ loption de compilation Cc permet de ne pas encombrer la RAM

avec ses 16 valeurs. mot cl : const

const char table[]={} ;

const char *table[]={} ;

quand une constante doit tre stocke dans une zone spcifique de la ROM, on doit utiliser la pragma CONST_SEG#pragma CONST_SEG MY_ROM //placement dclar dans le fichier de LINK

const char table[]={} ;

3.2.4. Stockage en mmoire EEPROMPermet de conserver certains paramtres lorsque le composant est mis hors tension. Les donnes sont accessibles en lecture/criture

Afin que ces donnes soient stockes aux addresses de LEEPROM, un segment particulmier est cr par lintermdiaire dune pragma :

#pragma DATA_SEG MyEEPROM3.2.5. Allocation de bouts de code#pragma CODE_SEG MY_ROM

void FctName1(void){..}

#pragma CODE_SEG DEFAULT

void FctName2(void){..}3.2.6. Accs la mmoire via des pointeursen mode LARGE (-Mi ou Mx option)

pour accder une donne en page 0 via un pointeur utiliser prfrentiellement le mot cl

nearchar * near FunctionName (char * near ptr)

{return ( (char * near) ptr + 1 ;}

en mode SMALL (-Ms option)

pour accder une donne en dehors de la page 0 via un pointeur utiliser prfrentiellement le mot cl far3.3. Les registres des PriphriquesLes registres des priphriques sont des variables localises dans la mmoire de donnes en page zro. A linverse des variables utilisateur ces registres sont situs des adresses fixes prdfinies par construction dans le contrleur.

3.3.1. Dclaration des registresConsidrons le registre PADR est ladresse absolue 008 de la mmoirePremire mthode :Cette mthode cre un pointeur absolu sur le registre au moyen dune macro#define PADR * ((unsigned char *)(8))

PADR = 0x10 ; // crire 10h (00010000) sur le port A PADR &= ~0x10 ; // mise zro du bit 4 du port A

Seconde mthode :Elle consiste attribuer un segment pour chaque priphrique lintrieur duquel les registres sont dfinis comme une suite de variables du type unsigned char. Cette suite est ordonne selon la position physique des registres dans la memory map de la RAM du composant.

Exemple du priphrique SPI :// Serial Peripheral Interface

#pragma DATA_SEG SHORT SPIexternvolatile unsigned char SPIDR;// SPI Data Register

externvolatile unsigned char SPICR;// SPI Control Register

externvolatile unsigned char SPISR;// SPI Status Register

tous les registres dun modle de la famille ST7 seront regroups dans un fichier source : ici

map72311.cLe segment DATA_SEG SHORT SPI est dfini entre les adresses 21h et 23h au moment du link par le fichier de paramtrage utilis : *.prm (Linker Parameter File)// MEMORY LOCATION SETTING SECTIONS

// some declarations

ASPI = READ_WRITE 0x21 TO 0x23 ;

// more declarations

PLACEMENT

// some declarations SPI INTO ASPI;

// more declarations

ATTENTION : ldition de lien optimise le code en liminant, dans chacun des segments les registres non utiliss par le programme et remplit les addresses laisses vides en dcalant les adresses des registres suivants.

Pour linterdire doptimisation on rajoute le signe + dans la partie NAMES du fichier de paramtrage.7

NAMES prog1.o map72311.o+ start07.o ansi.lib

END

3.3.2. Lecture, criture et test dun bit dans un registreTest dun bit dans un registreprenons par exemple le bit 7 du registre TASR. Ce bit t dfini dans st72251.h par la ligne :

#define ICF1 0x07 //Input Capture Flag 1 bit pour tester ce bit on utilise :

if ( TASR & ( 1