Introduction Gnrale :
Le
dveloppement
des
applications
base
des
microcontrleurs PIC est devenu de plus en plus courant, ceci
est d plusieurs causes : beaucoup de ressources internes
(priphriques intgrs), mmoires embarques de plus en plus
grande, vitesse de calcul accrue
En effet, un microcontrleur est un composant parfaitement
adapt des applications embarques, il permet, en le
programmant, deffectuer et de contrler une tche tout en
comparant son tat des conditions
prfixes par [Link] d es microcontrleurs fait
appel tout dabord leur programmation. Il existe plusieurs
mthodes de programmation selon le langage utilis, par
exemple en assembleur on peut crire un programme o on va
tirer le maximum des performances du microcontrleur mais ce
programme ncessite beaucoup de travail et surtout beaucoup
de temps. Heureusement, avec la monte en puissance des
microcontrleurs, on voit apparaitre des compilateurs en
langage C qui permettent de gagner un temps considrable
pour le dveloppement des programmes.
Dans ce travail notre choix est port vers le PIC 16F877. Dans
le premier chapitre nous allons tudier dune manire gnrale
ce microcontrleur
et
ses diffrentes
ressources
internes,
ensuite un deuxime chapitre destin la programmation de ce
microcontrleur en langage, dans ce chapitre nous allons
exposer quelques notions de programmationen C .
Introduction :
Un microcontrleur se prsente sous la forme dun circuit
lectronique intgr runissant un certain nombre dlments
construit autour dun microprocesseur.
Il effectue entre
autres :
-oprations arithmtiques (addition, multiplication)
logiques (ET, OU, ),
et
-lexcution dinstructions stockes dans sa mmoire
programme,
-le dialogue avec des lments lectroniques extrieurs
(changes de donnes numriques et analogiques, gnration
de signaux, )
Modles:
Il existe une multitude de modles de microcontrleurs.
Ce vaste choix permet de trouver le type de modle le plus
adapt ce que l'on veut faire.
Les microcontrleurs ne sont gnralement pas trs chers,
compar aux processeurs ddis au calcul trs rapide (type
PENTIUM). Les plus courants commencent lO , tandis que
les plus chers atteignent plus de l5O .
Les microcontrleurs se distinguent par une grande
caractristique : la taille de sa mmoire de calcul. Quelques
microcontrleurs disponibles sur le march sont :
ATMEL :
AT9OS85l5
MICROSHIP :
l6C7l
MOTOROLA : 68HC5, 68HC11, 68HCl6, 6834O ; SEAGATETHOMSOM : ST6, ST9 ; INTEL : 8O3l, 8O5l
Utilisation:
Les
systmes
intelligents
automatiques,
intgrant
une
technologie base de microcontrleur, sont dans tous les
domaines de la vie quotidienne :
- Tlcommunications
carte
FAX/MODEM,
minitel,
tlphones portables, interfaces homme machine,
gestion d'crans graphiques...
- Industriels
automates
programmables,
contrle/rgulation de processus, supervision...
- Commercial : lectromnager, domotique...
- Automobile : ABS, calculateur dinjection, tableau de bord,
contrle des siges
- Militaire et spatial : sonde, lanceurs de fuses, missile,
robots...
- Loisirs : concours robotique
Le microcontrleur est dimensionn pour l'embarqu . Il
est
beaucoup
plus
facile
mettre
en
uvre
qu'un
microprocesseur. Il est conu pour se suffire lui-mme ; un
microprocesseur a besoin de priphriques pour pouvoir
fonctionner contrairement au microcontrleur qui lui possde
sa propre mmoire et le programme pour excuter les
tches. De part le nombre important dentres et sorties, le
microcontrleur trouve galement son rle dans le contrle
commande des processus .
Avantages
- Encombrement rduit,
- Circuit imprim
peu complexe,
Inconvnients
- Systme
de
dveloppement onreux,
- Programmation
- Faible consommation,
ncessitant un matriel
- Cot rduit.
adapt
Lhistoire du microcontroleur :
De l'ordinateur au microcontrleur :
Le diagramme ci-dessous
montre les grandes tapes de l'volution. Chaque tape a t
marque par un processeur diffrent :
Figure 1
L'avnement des transistors (1958), des circuits intgrs (1968)
et des circuits intgrs haute densit (1978) a permis de
construire des ordinateurs de plus en plus petits et de plus en
plus [Link] des intgrations laisse leurs traces dans
les
diffrents
noms
miniordinateur,
que
l'on
rencontre
microprocesseur,
aujourd'hui
micro-ordinateur,
microcontrleur... On les doit principalement la socit Intel
fond
en
1968.
Voici
les
grandes
tapes
d'volution
* Mini-Ordinateur : premire intgration, cet ordinateur
contient maintenant une Unit Centrale de traitement sur une
seule
carte.
* Microprocesseur : deuxime intgration, l'Unit Centrale
est contenue dans un seul circuit, c'est le C.P.U. . Ce fut le 4004
en 1971, le 8008 en 1972 puis le 8080 en 1974. Ce dernier eut
un tel succs qu'il est considr comme le pre de nos
microprocesseurs
et
microcontrleurs
d'aujourd'hui.
* Micro-Ordinateur : c'est le nom qui dsignera dsormais
un
ordinateur
conu
autour
d'un
microprocesseur.
* Microcontrleur : troisime intgration, l'ensemble des 3
units (centrale, mmoires et priphriques) sont maintenant
contenues dans un seul circuit. Ce fut le 8048 en 1976 puis le
8051
en
1980.
* Micro-ordinateur embarqu : C'est un ordinateur
spcialis et conu autour d'un microcontrleur. Il est capable
de
ragir
des
vnements
plus
rapides.
Deux noms sont l'origine des plus fameux microcontrleurs
utiliss : Intel et Motorola, avec deux architectures diffrentes.
En terme lectronique, on parlera de cur 8051 ou cur
68HC11 par exemple .
Dfinition dun microcontrleur :
Un microcontrleur (en notation abrge c, ) est un circuit
intgr qui
rassemble
les
lments
essentiels
d'un ordinateur : processeur, mmoires (mmoire morte pour le
programme, mmoire
priphriques
et
vive
interfaces
pour
les
donnes),
d'entres-sorties.
units
Les
microcontrleurs se caractrisent par un plus haut degr
d'intgration, une plus faible consommation lectrique, une
vitesse de fonctionnement plus faible (de quelques mgahertz
jusqu' plus d'un gigahertz1) et un cot rduit par rapport
aux microprocesseurs polyvalents utiliss dans les ordinateurs
personnels. Par rapport des systmes lectroniques base
de microprocesseurs et
microcontrleurs
autres
permettent
composants
de
spars,
diminuer
la
les
taille,
la
consommation lectrique et le cot des produits. Ils ont ainsi
permis de dmocratiser l'utilisation de l'informatique dans un
grand nombre de produits et de procds. Les microcontrleurs
sont
frquemment
comme
les
utiliss
contrleurs
dans
des
les systmes
moteurs
embarqus,
automobiles,
les
tlcommandes, les appareils de bureau, l'lectromnager, les
jouets, la tlphonie mobile, etc.
Le
schma
fonctionnel
dun
microcontrleur
peut
tre
reprsent par larchitecture suivante :
-Processeur
ROM
RAM
EEPROM
COP
Bus : donnes contrle - adresse
Timer
CAN
Interface parallle
Interface srie
Microcontrleur
Schma dun microcontroleur :
Contenu :
La
structure
interne
d'un
microcontrleur
typiquement :
-Une unit de calcul et de commande
-Mmoire ROM
-Mmoire RAM
-Un contrleur dinterruption
-Un compteur/temporisateur (timer)
-Des entres/sorties parallles (ports)
-Un UART (port srie)
Il peut aussi possder :
-Un Watchdog : (surveillance du programme)
-Une sortie PWM (modulation dimpulsion)
-Un CAN/CNA (Convertisseur analogique numrique)
-Un interface IC, CAN
Exemple Microcontroleur PIC 16F887 :
comporte
Les Mmoires :
la RAM (Random Access Memory) :
Presque tous les microcontrleurs en possdent en interne.
Elle a
le mme rle que sur PC, c'est une mmoire temporaire et
volatile
(les
donnes
disparaissent
lorsqu'il
n'y
plus
d'alimentation lectrique). La RAM embarque peut aller de 256
octets 1Ko ; une RAM de 256 octets peut donc contenir 256
variables de 8 bits, et une RAM de 1Ko contiendra 1024
variables de un octet au maximum. Cette valeur est suffisante
pour programmer de petites applications. Dans d'autres cas, il
est
possible
d'ajouter
une
mmoire
RAM
externe
au
microcontrleur :
c'est un composant d'une vingtaine de broches qui peut faire
32Ko
Donc, ds que vous crerez une nouvelle variable dans votre
programme, elle sera loge dans la RAM. La RAM est accessible
en lecture et en criture.
La mmoire ROM : (acronyme de Read Only Memory) :
Cette mmoire n'est accessible qu'en lecture. Elle contient
gnralement
le
programme
de
l'utilisateur.
Une
fois
programme, une ROM ne peut pas tre efface ; il faut donc
tre sr de son programme sous peine de devoir jeter la
mmoire.
Certains microcontrleurs disposent
d'une
ROM
interne ;
c'est donc une programmation dfinitive.
L'EPROM
(Ereasable
Programmable
Read
Only
Memory) :
Cette mmoire possde les mmes proprits que la ROM sauf
que l'on peut l'effacer l'aide d'un Effaceur d'EPROM. Cet
appareil se charge d'insoler la mmoire avec des rayons UV
pour l'effacer ; ds lors, il est possible de la reprogrammer. Ce
type de composant est reconnaissable par une fentre
sur le botier d'o l'on peut voir le cur de la mmoire.
L'EPROM est accessible en lecture uniquement, et contient
gnralement le programme excuter.
l'EEPROM ( Electrically Ereasable Programmable Read
Only Memory) :
Cette mmoire est trs intressante car il est possible de
l'effacer et de la programmer lectriquement ; inutile donc
d'investir dans un
programmateur coteux. Cette mmoire peut contenir le
programme ou encore une variable qu'il est ncessaire de
sauvegarder avant une coupure d'alimentation.
SFR (Special Function Register) :
Cest aussi de la mmoire RAM,sauf que les rles de chacune
des cases mmoire (registres) ont t dfinis par le fabriquant.
Chaque registre SFR est connect un priphrique matriel
spcifique et permet de la contrler.
Exemple :
Dtail dun registre SFR
Dclaration de i en
RAM
Affectation dune
valeur un
registre SFR
Les entres sorties :
Le microcontrleur possde beaucoup de broches directement
utilisables. Outre les habituelles broches d'alimentations et de
configuration, il y a ce qu'on appelle des Ports. A l'instar des PC,
il existe des ports srie et parallle.
Les ports sries servent le plus souvent comme port de
communication avec l'extrieur (un PC par exemple, pour
tlcharger un programme) ou pour dialoguer avec d'autres
microcontrleurs, composants esclaves ou autres modules.
Quant aux ports parallles, ils constituent la majorit des
broches que l'on peut voir sur un microcontrleur. Par exemple,
un 80C51 44 broches peut possder 4 ports de 8 bits, soit 32
broches utilisables. Chaque microcontrleur a son propre
brochage, c'est pour cela que l'on ne peut dire ici que des
gnralits.
Cependant, on programme les ports directement par leur nom
pour simplifier la programmation (il faut configurer les noms,
mais nous verrons a plus tard). Par exemple, mettons que l'on
a le composant fictif suivant qui possde un port parallle
nomm ELEVE_SI :
Comme vous pouvez le voir, les ports sont composs de 8
broches, ce qui forme un octet. Chaque broche a son propre
poids ; on nomme gnralement chaque broche en prenant le
nom du port et le poids d'une broche. Par exemple, on appellera
la premire broche (bit 0) du port ELEVE_SI (0), puis (1) pour le
deuxime bit, (2) pour le troisime et ainsi de
suite...
Une dernire chose : il existe trois status diffrents pour les
ports.
Port en entre :
il est capable de recevoir des informations en provenance de
l'extrieur.
Port en sortie :
il met des informations du microcontrleur vers l'extrieur.
Il existe deux types de sorties :
Sortie trois tats :
Fonctionnement
T1
Bloqu
T2
Bloqu
Sortie
Etat
haute
impdance
Bloqu
Satur
"0"
Satur
Bloqu
"1"
Satur
Satur
non utilis
Des sorties trois tats peuvent tre
relies entres elles mais il faut bien veiller ce que une seule
impose un niveau (haut ou bas) et que les autres sorties soit en
haute impdance.
Sortie collecteur ouvert (1):
Fonctionnement
Sortie
T2
collecteur
Satur
"0"
ouvert (2)
Bloqu
Dpend
du
montage
Pour gnrer le niveau "1", une rsistance extrieure est
ncessaire (rsistance de tirage // pull-up). Plusieurs sorties
"collecteur ouvert" peuvent tre relies entre elles, cela ralise
un "ET logique" Une sortie collecteur ouvert peut
commander une charge sous une tension diffrente
tension d'alimentation.
*Port bi-directionnel :
de la
il est capable, pour toutes ses broches ou certaines d'entre
elles, de recevoir ou d'mettre des donnes.
Il s'agit l d'un status physique, c'est dire que c'est la
fabrication lectronique des ports qui dcide dans quel mode il
sera
capable
de
fonctionner.
Certains
microcontrleurs
possdent des Port dont certaines broches sont en entre et
d'autres en sortie. Enfin, il est possible sur certains modles de
dfinir logiciellement dans quel mode le Port va fonctionner.
Cadencement du microcontroleur :
Schma du pic 16F887 :
Quartz
l Trs bonne Stabilit (10 ppm)
Rsonateur cramique
l Stabilit ( 0.5%)
l Moins couteux que le quartz
l Exemple pour un oscillateur 8 Mhz
Quartz : Frquence +/- 80 Hz
Rsonateur
Les timers :
Frquence
+/-
Les Timers du PIC 16F887 :
*Composition generale d'un Timer sur un microcontroleur PIC :
*Calcul du temps mis par le Timer pour faire lever son drapeau :
T=T quartzValeur du pr-compteur fixe Valeur du
T=T quartzValeur du pr-compteur fixe Valeur du prpr-compteur
rglable
Nombre
d'impulsions
compter
compteur rglable
Nombre
d'impulsions
compter
Les Timers sont internes au microcontroleur.
Le 16F887 en compte 3 :
Timer0 et Timer2 sur 8 bits Timer1 sur 16 bits
Composition du Timer0 :
Le pre-diviseur peut prendre une valeur parmi la liste suivante :
1, 2, 4, 8, 16, 32, 64, 128 ou 256
La valeur initiale peut prendre n'importe quelle valeur entiere
comprise entre 0 et 255.
Calcul du temps maximum :
Pour que le drapeau se leve le plus tard possible, il faut que la
frequence du signal applique au compteur soit la plus faible
possible. Il faut donc configurer le pr-diviseur le plus grand :
256
Il faut egalement faire demarrer le compteur avec la valeur la
plus petite possible pour qu'il compte le nombre d'impulsion le
plus grand : valeur initiale = 0
T MAX=TquartzValeur du pr-compteur fixe Valeur du pr-compteur
rglable max Nombre d'impulsions compter max
TMAX= 14.1064256(2560)=65,536ms
Registres associes au Timer0 :
TMR0 : c'est le registre de comptage. C'est donc dans ce
registre que nous
allons rentrer la valeur de depart de notre compteur.
INTCON seuls les bits 7, 6, 5 et 2 sont utiles pour le Timer 0 (ce
sont les seulsnon grises).
Dans ce chapitre, nous ne nous interesserons qu'au bit 2 appele
T0IF et qui correspond au flag permettant de tester la fin du
comptage.
Les bits 7, 6 et 5 seront vus lors du chapitre sur les
interruptions.
OPTION_REG : Nous venons de le voir ...
Exemple de programme :
void tempo_timer0 ( void ); // tempo de 10ms avec le
timer0
void init ( void ); // initialisation des priphriques
void main ( void )
{
init(); // initialisation des priphriques
while ( 1 ) // boucle infinie
{
PORTB.1 = !PORTB.1; // on change l'tat de RB1
tempo_timer0(); // tempo de 10 ms
}
}
void tempo_timer0 ( void ) // tempo de 10ms avec le
timer0
{
TMR0 = 100; // initialisation du registre de comptage
T0IF = 0; // initialisation du drapeau li au timer0
while ( T0IF == 0 ); // attente de la leve du drapeau
}
void init ( void ) // initialisation des priphriques
{
TRISB.1 = 0; // RB1 configur en sortie
OPTION_REG = 0x85; // configuration du timer0 : pr-
Le Timer2 du 16F887 :
Il est legerement different du Timer 0 puisque le debut de
comptage est en principe 0x00 et que la fin de comptage est la
valeur a entrer.
Il possede comme le Timer 0 un pre-compteur fixe et un precompteur variable (3 valeurs possibles : 1, 4 et 16). C'est aussi
un compteur 8 bits.
Calcul de la duree de comptage :
T MAX=TquartzValeur du pr-compteur fixe Valeur du
pr-compteur rglable max (Valeur dfinie + 1)
Duree de comptage max :
T MAX=
14.106416256=4,096ms
Originalite de ce Timer :
- Le flag ne se leve pas systematiquement a chaque fin de
comptage.
Existance d'un post-compteur.
- Ce post-compteur peut prendre chaque valeur entiere entre 1
et 16.
Exemple pour un post-compteur de 4 :
La temporisation max de ce Timer est donc :
TMAX = 16 * 4,096 ms soit 65,536 ms
T=Valeur du post-compteur 1Fquartz4Valeur du prcompteur rglable(Valeur dfinie + 1)
La formule permettant de calculer la duree de la temporisation
est donc :
void tempo_timer2 ( void ); //
tempo avec le timer2
void init ( void ); // initialisation
des priphriques
void main ( void )
{
init(); // initialisation des
priphriques
while ( 1 ) // boucle infinie
{
PORTB.1 = !PORTB.1; // on
change l'tat de RB1
tempo_timer2(); // tempo de 50
ms
}
}
void tempo_timer2 ( void ) //
tempo de 50ms avec le
timer2
{
PR2 = 239; // Valeur dfinie de
fin de comptage
T2CON = 0x66; // configuration
du timer2
TMR2IF = 0; // initialisation du
drapeau li au timer2
while ( TMR2IF == 0 ); //
attente de la leve du drapeau
}
void init ( void ) // initialisation
des priphriques
{
Exemple de
voidprogramme
tempo_timer2 (:void ); //
tempo avec le timer2
void init ( void ); // initialisation
des priphriques
void main ( void )
{
init(); // initialisation des
priphriques
while ( 1 ) // boucle infinie
{
PORTB.1 = !PORTB.1; // on change
l'tat de RB1
tempo_timer2(); // tempo de 50
ms
}
}
void tempo_timer2 ( void ) //
tempo avec le timer2
{
TMR2IF = 0; // initialisation du
drapeau li au timer2
while ( TMR2IF == 0 ); // attente
de la leve du drapeau
}
void init ( void ) // initialisation des
priphriques
{
TRISB.1 = 0; // RB1 configur en
sortie
PR2 = 239; // Valeur dfinie de fin
de comptage
T2CON = 0x66; // configuration du
Ces 2 programmes fonctionnent mais la solution de
droite est plus intelligente
Le Timer1 du 16F887
Particularites de ce Timer 1 :
Principe de fonctionnement similaire au Timer0
Le pre-compteur ne peut prendre que quatre valeurs : 1, 2, 4 ou
8.
Le compteur est un compteur 16 bits :
Registre de comptage compose de deux registres de 8 bits :
TMR1H et TMR1L
Les Timers 0 et 1 peuvent etre utilises en compteur
devenements
exterieurs.
Exemples :
* Compteur de pieces dans une machine
industrielle
* Affichage de la vitesse dun vehicule
Timer 0 :
Signal a appliquer sur la broche RA4/T0CKl
(Il faut bien sr penser
mettre la ligne RA4
en entre avec
TRISA.4)
Bit T0CS
mettre
T0
Timer 0 en compteur d'evenements :
T0SE = 0 : les fronts montants
attaquant
le Timer0 correspondent aux fronts
montants
de RA4 / T0CKI
T0SE = 1 : les fronts montants
attaquant
le Timer0 correspondent aux fronts
descendants
de RA4 / T0CKI
La broche du PIC associee au Timer 1 est la ligne
RC0/T1OSO/T13CKI
La ligne RC1 / T1OSI est aussi associe au Timer 1, mais ne joue
pas
de rle dans le comptage d'vnements extrieurs.
Compte tenu de la remarque ci-dessus, il faut dconnecter la
ligne RC1 / T1OSI en invalidant la porte logique inverseuse.
bit T1OSCEN = 0
Timer 1 associe a un quartz :
Il est possible de connecter un quartz sur le Timer 1 et de
compter les
impulsions de celui-ci pour generer des temps plus precis
comme par
exemple pour creer une horloge de secondes, minutes, heures
ou un
chronometre.
Tres utile pour gerer le mode sommeil du micro-controleur.
En general, on prend un quartz dit d'horloger de 32768 Hz
(on divise
ensuite par 215 pour avoir 1s)
T1OSCEN = 1
Watchdog (chien de garde informatique) :
Dfinition :
Un
chien
de
garde,
lectronique ou
en
anglais watchdog,
un logiciel utilis
est
un circuit
en lectronique
numrique pour s'assurer qu'un automate ou unordinateur ne
reste pas bloqu une tape particulire du traitement qu'il
effectue.
C'est
une
protection
destine
gnralement
redmarrer le systme, si une action dfinie n'est pas excute
dans un dlai imparti.
En informatique industrielle, le chien de garde est souvent
ralis par un dispositif lectronique, en gnral une bascule
monostable. Il repose sur le principe que chaque tape du
traitement doit s'excuter en un temps maximal. chaque
tape, le systme arme une temporisation avant son excution.
Si la bascule retourne son tat stable avant que la tche ne
soit acheve, le chien de garde se dclenche. Il met en uvre
un systme de secours qui peut soit dclencher une alarme,
soit faire redmarrer l'automate, soit mettre en marche un
systme redondant... Les chiens de garde sont souvent intgrs
auxmicrocontrleurs et aux cartes mres ddies au temps
rel.
Quand
il
est
ralis
d'un compteur qui
est
par
logiciel,
rgulirement
il
s'agit
remis
en
zro.
gnral
Si
le
compteur dpasse une valeur donne (timeout) alors on
procde un reset (redmarrage) du systme. Le chien de
garde consiste souvent en un registre qui est mis jour via
une interruption rgulire. Il peut galement consister en une
routine d'interruption qui doit effectuer certaines tches de
maintenance avant de redonner la main au programme
principal. Si une routine entre dans une boucle infinie, le
compteur du chien de garde ne sera plus remis zro et
un reset est
ordonn.
Le
chien
de
garde
permet
aussi
d'effectuer un redmarrage si aucune instruction n'est prvue
cet effet. Il suffit alors d'crire une valeur dpassant la capacit
du compteur directement dans le registre : le chien de garde
lancera le reset.
D'une faon plus gnrale, il peut galement s'agir d'un logiciel
destin l'observation de certaines conditions. Par exemple, en
matire de scurit, s'assurer rgulirement qu'aucune action
malveillante
n'est
effectue (dans
la
mmoire
vive
en
particulier) ou que certaines conditions de fonctionnement sont
bien remplies. Il s'agit gnralement de processus ou de service
excut en tache de fond et donc, invisible l'utilisateur.
Type de watchdog pic 16F877 :
Il existe deux types de watch dog ( interne et externe).
Le externe :
-
Les watchdogs externes peuvent excuter - en complment
des applications de surveillance du processeur - les tches
suivantes :
1) Surveillance de lalimentation du systme
2) Surveillance de lhorloge du systme
3)Les courtes interruptions dalimentation sont en gnrale
trs dangereuses pour les systmes microprocesseur.
En effet, ces dernires peuvent faire entrer le processeur dans
des tats non dfinis.
4)Les watchdogs externes surveillent galement lalimentation
et gnrent un reset en cas de problme.
Cette fonctionnalit peut galement tre reprise par le module
reset.
Les watchdogs externes possdent en gnrale leur propre
base de temps. Ce qui leur permet de surveiller galement
lhorloge du systme.
Le circuit de watchdog externe est tre ralis typiquement de
la manire suivante :
Le watchdog interne :
Un watchdog interne (c. d. intgr dans un microcontrleur)
gnre galement un reset en cas d'erreurs.
Un tel reset ne se distingue en gnral pas de celui, qui est
gnr de faon externe.
Selon la famille des microcontrleurs, il existe des watchdogs
internes qui possdent leur propre base de temps.
Cette dernire est en gnral produite laide dun circuit RC.
Fonctionnement du watchdog
Le coeur du watchdog est un registre compteur, qui est remis
zro priodiquement par le logiciel.
Un
disfonctionnement
dans
cette
procdure
de
rafrachissement engendre un dpassement de capacit du
compteur et dclenche une rinitialisation du systme.
La figure suivante illustre la structure de base dun watchdog :
Dmarrage du watchdog :
Le dmarrage du watchdog seffectue de deux manires :
De faon hardware aprs le reset. Cela prsente l'avantage
que le processus de contrle du microcontrleur dbute son
dmarrage.
De faon software en fixant la valeur des bits de contrle
appropris.
Cela devrait tre ralis le plus tt possible dans le code (c.--d.
avant l'initialisation du systme).
Rafraichissement du watchdog :
Le rafraichissement du watchdog seffectue galement de faon
logiciel en fixant la valeur des indicateurs (anglais : flag)
appropris.
Dans ce contexte, il est trs important que les
oprations de rafraichissement ne soient pas parpilles au
hasard dans le code.
En effet, il plutt recommand deffectuer ces oprations une
seule fois par cycle dexcution du programme, comme par
exemple la fin de la boucle principale de main(). La procdure
de rafraichissement peut tre combin avec des cls afin
daugmenter encore plus la scurit du systme.
La combinaison des cls avec un watchdog permet de raliser
les fonctionnalits suivantes :
Pour contrler comportement temporel d'un programme.
Pour vrifier si les fonctions les plus importantes ont
effectivement t excutes.
La procdure est la suivante : Une ou plusieurs cls sont
ncessaires.
Les cls sont des variables communs, qui permettent de
contrler le droulement du programme. Une valeur spcifique
est attribue une cl dans toutes les fonctions importantes du
systme. Si votre programme comporte de nombreux points
contrler, vous pouvez galement utiliser une seule variable
cl. Dans ce cas vous pouvez systmatiquement changer la
valeur de votre cl laide d'un polynme de CRC.
A la fin d'un cycle dexcution du programme, la valeur de la
cl vous assurera systmatiquement que toutes les fonctions
importantes ont t appeles dans un ordre adquat. En effet,
si cette dernire est correcte, vous pouvez effacer son contenu
et rafraichir le watchdog.
Toutefois, si la cl est errone, cela signifie que le programme
sest comport de faon errone. Dans ce cas, le watchdog ne
se doit pas tre rafraichi afin dengendrer le redmarrage du
systme avec un reset.
Le CAN (convertisseur analogique /numrique ) :
Introduction :
Le
CAN
(Controller
Area
Network)
est
un
bus
de
communication srie dvelopp la fin des annes 80 par
lentreprise allemande Robert Bosch. Lobjectif tait de fournir
lindustrie automobile un bus peu coteux pour llectronique
embarque des automobiles.
Aujourdhui, lefficacit et la robustesse de ce protocole lont
amen tre utilis dans de nombreuses autres applications
industrielles, en particulier celles ncessitant un dbit important
jusqu 1Mbits/s avec un trs faible taux derreur.
De nombreux contrleurs CAN sont aujourdhui disponibles
chez la plupart des fabricants, qui proposent aussi des versions
de leurs microcontrleurs avec des contrleurs CAN intgrs.
Le protocole de la communication par bus CAN est bas sur
le
principe
de
diffusion
gnrale.
En
effet,
lors
de
la
transmission dun message, aucune station (microcontrleur et
modules MPPT) n'est adresse en particulier, mais le contenu
de chaque message est explicit par une identification reue de
faon univoque par tous les noeuds. Grce cet identificateur,
ces derniers, qui sont en permanence l'coute du rseau,
reconnaissent et traitent les messages qui les concernent. Cette
prsente note dapplication dcrira, de faon dtaille, dans
une premire partie la mise en oeuvre dune communication
par bus CAN. En seconde partie, un exemple sera donn pour
illustrer cette communication. Elle dtaillera les changes
que peuvent avoir un microcontrleur PIC18F458 avec des
modules MPPT. Ces derniers permettent de rcuprer limage de
la tension et du courant, dlivrs par des panneaux solaires aux
batteries,
en
servant
dintermdiaires.
Par
dfinition,
ils
permettent de faire fonctionner
les panneaux solaires de faon produire en permanence le
maximum de leur puissance.
Ainsi,
quelles
que
soient
les
conditions
mtorologiques
(tempratures et irradiation), et quelle que soit la tension de la
batterie, la commande du convertisseur place le systme au
point de fonctionnement maximum. Ce point de fonctionnement
obtenu correspond une tension et un courant optimaux
dbits par les modules, appels Vopt et Iopt.
1. PRINCIPE DE FONCTIONNEMENT
Du type multi-matre, orient messages courts, le bus CAN est
bien adapt la scrutation de variables mises par des stations
dportes. La norme Iso 11898 spcifie un dbit maximum de
1Mbit/s. La longueur maximum du bus est dtermine par la
charge capacitive et le dbit. Les configurations recommandes
sont les suivantes :
Le protocole est bas sur le principe de diffusion gnrale : lors
de transmission, aucune station n'est adresse en particulier,
mais le contenu de chaque message est explicit par une
identification reue de faon univoque par tous les abonns.
Grce cet identificateur, les stations, qui sont en permanence
l'coute du rseau, reconnaissent et traitent les messages qui
les
concernent;
elles
ignorent
simplement
les
autres.
L'identificateur indique aussi la priorit du message, qui
dtermine l'assignation du bus lorsque plusieurs stations
mettrices sont en concurrence. En version de base, c'est un
nombre de 11 bits (CAN 2.0A), ce qui permet de dfinir jusqu'
2048 messages plus ou moins prioritaires sur le rseau. Il existe
une version tendue o le nombre de bits didentifiants est de
29 (CAN 2.0B). Chaque message peut contenir jusqu' 8 octets
de donnes. Il est possible d'ajouter des stations rceptrices
un rseau CAN sans modifier la configuration des autres
stations.
Format des trames
Les trames de donnes ou de requte sont composes de sept
parties. Le format ci aprs est dcrit pour des trames
respectant le protocole 2.0A.
Start of frame marque le dbut d'une Data Frame (trame de
donnes) ou d'une Remote frame (trame de requte). C'est un
seul bit dominant. Il permet la synchronisation des autres
noeuds avec celui qui met une trame.
Arbitration field est compos des 11 bits de lidentificateur
(CAN 2.0A) et dun bit de RTR (Remote transmission Request)
qui est dominant pour une trame de donnes, et rcessif pour
une trame de requte.
Control field est compos de 6 bits. Les 2 premiers sont des
bits rservs et les 4 suivants constituent le Data Length Code
(DLC). Le DLC indique le nombre d'octets du Data field. La
valeur du DLC est forcment comprise entre 0 et 8, soit 9
valeurs. 4 bits dominants (0000) correspondent la valeur 0
pour le DLC, tandis que 1 bit rcessif et 3 bits dominants (1000)
correspondent la valeur 8.
Data field sont les donnes transmises par la Data frame. Il
peut contenir de 0 8 octets, o chaque octet est transmis
avec le bit de poids fort en premier. CRC field est compos de la
squence de CRC sur 15 bits suivie du CRC delimiter (1 bit
rcessif). La squence de CRC (Cyclic Redundancy Code)
permet de vrifier l'intgrit des donnes transmises. Les bits
utiliss dans le calcul du CRC sont ceux du SOF, de l'Arbitration
field, du Control field et du Data field.
ACK field est compos de 2 bits, lACK Slot et lACK Delimiter
(1 bit rcessif). Le noeud en train de transmettre envoie un bit
rcessif pour lACK Slot. Un noeud ayant reu correctement le
message en informe le transmetteur en envoyant un bit
dominant pendant le ACK Slot : il acquitte le message.
End of frame marque la fin des Data frame et Remote par une
squence de 7 bits rcessifs.
Bit-stuffing : pour les Data Frames et les Remote Frames, les
bits depuis le Start of frame jusqu' la squence de CRC sont
cods selon la mthode du bit stuffing. Quand un transmetteur
dtecte 5 bits conscutifs de mme valeur dans les bits
transmettre, il ajoute automatiquement un bit de valeur
oppose.
Outre les trames de donnes et de requte, on a donc
galement des trames derreurs (mises par nimporte quel
noeud ds la dtection dune erreur), et des trames de
surcharge (ces trames correspondent une demande dun laps
de temps entre les trames de donnes et de requtes
prcdentes et successives.
Structure dun rseau CAN :
Pour
envoyer
ou
recevoir
un
message
partir
dun
microcontrleur, il faut que les donnes transitent par diffrents
modules. Ci-aprs, un schma structurel dun rseau CAN.
Le CPU (microprocesseur ) :
Le processeur (microprocesseur) est le composant hardware
le plus connu d'un systme micro-programm. C'est l'unit
intelligente de traitement des informations.
Son
travailconsiste
lire
des
programmes
(des
suites
d'instructions), les dcoder et les excuter. Les annes 80
voyaient l'mergence de ces circuits avec les Zylog Z80, 6800
de Motorola, le 8085 de Intel qui est souvent utilis en tant que
microcontrleur. Avec l'arrive des PC-XT d'IBM
et l'utilisation du 8088, INTEL devenait matre du march fin des
annes
80.
L'interfaage
du
processeur
avec
lextrieur
ncessite 3 bus: un bus de donnes, un bus d'adresse et un bus
de commande.
Il existe des processeurs bass sur l'architecture CISC et
dautres bass sur
larchitecture
RISC.
Cependant
certains
processeurs
sont
difficilement classifiables comme le CPU i486 galement appel
80486. Ce vritable processeur 32 bits (bus internes et
externes) est mi chemin entre le tout CISC et le tout RISC. Ce
processeur offre des performances similaires aux processeurs
RISC 32 bits, tout en restant compatible 100% avec son
prdcesseur CISC le 80386. Par contre le processeur 68040 de
Motorola est bas sur larchitecture CISC. Il est prsent par
Motorola comme tant un processeur CISC pur et dur.
Les premiers concepteurs de processeurs rajoutaient le plus
d'instructions
peaufiner
possibles
ses
pour
programmes.
permettre
Nanmoins,
l'utilisateur
ces
de
multiples
instructions ralentissent le fonctionnement du microprocesseur
et sont peu utilises en pratique. Actuellement, on utilise de
plus en plus de processeurs RISC (Reduced Instruction Set
Computer). Le nombre d'instructions est rduit, mais excutes
nettement plus rapidement.
Chaque instruction
complexe peut tre programme par
plusieurs instructions simples. Un processeur est constitu de:
une unit de commande qui lit les instructions et les dcode;
une unit de traitement (UAL - unit arithmtique et logique)
qui excute les instructions;
dun ensemble de mmoire appels registres;
dun bus de donnes externe;
dun bus dadresse externe;
dun bus de commande externe;
dun bus de donnes interne reliant lunit de commande
lUAL et les registres.
Lorsque tous ces lments sont regroups sur une mme puce,
on parle alors demicroprocesseur. La figure ci dessous donne
une ide sur larchitecture interne dun microprocesseur. Sur
cette figure nous pouvons voir les 3 bus qui permettent au
microprocesseur de communiquer avec lextrieur.
Architecture interne 1 :
Architecture interne 2 :
Architecture interne dun CPU :
1)Lunit de commande :
Elle permet de "squencer" le droulement des instructions.
Elle effectue la recherche en mmoire de l'instruction, le
dcodage, l'excution et la prparation de l'instruction suivante.
L'unit
de
commande
labore
tous
les
signaux
de
synchronisation internes ou externes (bus des commandes) au
microprocesseur.
2)Lunit arithmtique et logique :
C'est l'organe qui effectue les oprations:
Arithmtiques : addition, soustraction, multiplication, ...
Logiques : et, ou, non, dcalage, rotation, ....
Deux registres sont associs l'UAL : l'accumulateur et le
registre d'tat.
3)Laccumulateur nomm (A) :
C'est une des deux entres de l'UAL. Il est impliqu dans
presque toutes les
oprations ralises par l'UAL. Certains
constructeurs ont des microprocesseurs deux accumulateurs
(Motorola : 6800).
Exemple :
A tant l'accumulateur et B un registre, on peut avoir : A+B
(ADD A,B :
addition du contenu du registre A avec celui du registre B, le
rsultat tant mis dans A).
Conclusion :
Cette tudes thorique nous a permis de traiter et de
comprendre le fonctionnement des diffrents
La programation dun microcontroleur :
La programation des microcontroleur PIC est support par
plusieurs
langages de programmation tel que : MATLAB ,
lAssembleur, le C ou C++.
Dans ce chapitre on va prsent de manire gnrales la
procdure de programmation en C des microcontroleurs PIC et
donner quelques exemple dapplication.
1. PRSENTATION.
Le langage C a fait son apparition en 1972 pour le
dveloppement du systme dexploitation Unix. Il est devenu
un standard de la norme ANSI en 1983. Lui, ainsi que son petit
frre le C++, sont trs utiliss pour le dveloppement
dapplications sous station Unix et PC. Depuis quelques annes
il a fait son entre dans le monde des microcontrleurs. Il
permet
de
bnficier
dunlangage
universel
et
portable
pratiquement indpendant du processeur utilis. Il vite les
tches dcritures pnibles en langage assembleur et limine
ainsi certaines sources derreurs.
2. ARCHITECTURE DUN PROGRAMME C POUR C.
La saisie dun programme en C rpond pratiquement toujours
la mme architecture. On peut noter que lesymbole # est
suivi dune directive de compilation, le symbole // est suivi
dun commentaire.
#include <sdtio.h>
// Directive de compilation indiquant
dinclure la bibliothque E/S standard
#include <reg_uc.h>
// Directive de compilation indiquant dinclure
la bibliothque spcifique au C
#define clear=0x00
// Directive de compilation indiquant des
quivalences
...
char val1=0xA5;
// Dclaration dune variable caractre avec
valeur initiale
int val2 ;
// Dclaration dune variable nombre entier
...
void tempo(char temps)
{
...
}
// Fonctions et procdures appeles
plusieurs fois dans le programme principal
int bintobcd(char bin)
{
...
return ...;
}
void main(void)
// Programme principal
{
DDRBA=0xFF
// initialisation et configuration
....
while (1)
// Boucle principale
{
...
tempo(100);
...
val2=bintobcd(val1);
...
}
}
void nmi(void)interrupt 0
// Sous programme
dinterruption
{
...
.Chaque ligne dinstruction se termine par un ;.
Le dbut
dune squence est prcd du symbole {. La fin dun
squence est suivie du symbole }.
La notation des nombres peut se faire en dcimal de faon
normale ou en hexadcimal avec le prfixe 0x.
3. LES TYPES DE DONNES DU LANGAGE C.
Il existe, dans le langage C, plusieurs types de donnes
classs selon leurs tailles et leurs reprsentations. On ne
dtaillera que ceux utiliss dans le cadre des microcontrleurs.
3.1 TYPES DE BASE.
On en rencontre gnralement trois types qui peuvent tre
signs ou non signs. Dans ce dernier cas la dclaration sera
prcde du mot cl unsigned
Remarques :
Dans la dclaration de certaines fonctions, on emploie le type
void qui signifie que la fonction ne renvoie ou nexige aucune
valeur
3.2 TYPES STRUCTURS.
Les types structurs sont en fait une association de plusieurs
variables de base de mme type. Il en existe deuxtypes :
Les types tableau dont la taille est dfinie - ex : int
tableau[10] ; tableau de 10 entiers.
Les types pointeurs dont la taille nest pas dfinie - ex : char
*chaine ; pointeur de cacactres.
Les chaines de caractres peuvent tre dfinies par les 2 types.
On prfre cependant le pointeur pour sa taille indfinie.
Remarque :
- Le pointeur est comparable un registre dindex qui
contient non pas une donne mais ladresse de cette
donnes.
- Ladresse dune variable, affectant un pointeur, sobtient
en prcdant son nom du symbole &.
- Une chane de caractre se termine toujours par le
caractre nul \0.
4. LES OPRATEURS.
4.1 LES OPRATEURS ARITHMTIQUES.
Ces
oprateurs
arithmtiques
permettent
traditionnellee
multiplication et division entire.
deffectuer
:
Addition,
les
oprations
soustraction,
4.2 LES OPRATEURS DAFFECTATION.
Loprateur indispensable au langage C est laffectation dfini
principalement par le signe =. Il permet decharger une
variable avec la valeur dfinie par une constante ou par une
autre variable. Il en existe dautres qui, en plus de laffectation,
effectue une opration arithmtique.
4.3 LES OPRATEURS LOGIQUES.
Ces oprateurs sadresse uniquement aux opratione de test
conditionnel. Le rsultat de ces opratione est binaire : 0 ou
1.
4.4 LES OPRATEURS LOGIQUES BIT BIT.
Ces oprateurs agissent sur des mots binaires. Ils effectuent,
entre deux mots, une opration logique sur les bits de mme
rang.
4.5 OPRATEURS DE COMPARAISON.
Ces oprateurs renvoient la valeur 0 si la condition vrifie
est fausse, sinon ils renvoient 1.
5. LES STRUCTURES RPTITIVES.
Le langage C possde des instructions permettant de rpter
plusieurs fois une mme squence en fonction de certaines
conditions.
5.1 STRUCTURE WHILE : TANT QUE ... FAIRE ...
Avec ce type dinstruction le nombre de rptitions nest pas
dfini et dpend du rsultat du test effectu sur la condition. Si
cette dernire nest jamais vrifie, la squence nest pas
excute.
while (int x!=0)
{
...
}
La structure prcdente rpte la suite dinstruction comprises
entre crochets tant que la variable entire x est diffrente de
0.
5.2 STRUCTURE DO ... WHILE : FAIRE ... TANT QUE... :
Cette structure ressemble fortement la prcdente la seule
diffrence que la squence rpter est au moins excuter une
fois mme si la condition nest jamais vrifie.
do {
...
}while (int x!=0);
5.3 STRUCTURE FOR : POUR <VARIABLE> ALLANT DE
<VALEUR INITIALE> <VALEUR FINALE> FAIRE... :
Cette instruction permet de rpter, un nombre de fois
dtermin, une mme squence.
for (i=0;i<5;i++)
{
...
}
La structure prcdente rpte 5 fois la suite dinstruction
comprise entre crochets. La variable i prendra les valeurs
successives de : 0, 1, 2, 3 et 4.
1. LES STRUCTURES ALTERNATIVES.
Ces structures permettent dexcuter des squences diffrentes
en fonction de certaines conditions.
6.1 STRUCTURE IF ... ELSE : SI <CONDITION> FAIRE ...
SINON FAIRE ...
Avec
cette
structure
on
peut
raliser
deux
squences
diffrentes en fonction du rsultat du test sur une condition.
La
structure
affecte
la
valeur
if (a<b) c=b-a;
else c=a-b;
prcdente
b-a c si a
est infrieur b sinon c est affect par la valeur a-b.
2. LES FONCTIONS.
Afin de rduire la taille du programme il est souvent
prfrable de dfinir sous forme de fonction une mme suite
dinstructions appele plus dune fois dans le programme.
La fonction principal dun programme C est dfinie grce au
mot cl main.
Les fonctions du langage C peuvent renvoyes des valeurs de
mme quelles peuvent prendre en compte des arguments
provenant de la procdure dappel. Si il ny pas de renvoi ou
aucun argument, on saisit le mot cl void en remplacement.
La valeur renvoye est dfinie aprs le mot cl return.
Lorsque lon veut, dans une fonction, modifier une variable
passe en argument il est obligatoire dutiliser un pointeur.
Une fonction doit toujours tre dfinie avant sa procdure
dappel. Dans le cas contraire une simple dclaration doit tre
faite dans len tte du programme.
3. FONCTION PRDFINIE.
Il existe dans tous les compilateurs C des bibliothques de
fonctions prdfinies. La plus utilise parmi elles est <stdio.h>
qui est propre au organes dentres / sorties standards. Dans le
cas des ordinateurs ces organes sont le clavier et lcran. Dans
le cas dun microcontrleur ces organes sont gnralement les
interfaces sries du composant.
Dans cette bibliothque on trouve les fonctions suivantes :
- Printf() : criture formate de donnes.
- scanf() : lecture formate de donnes.
- Putchar() : criture d'un caractre.
- getchar() : lecture d'un caractre.
-
4. DCLARATION DE VARIABLES ET DE CONSTANTES
SPCIFIQUES AU MICROCONTRLEUR.
La dclaration de variables correspond au fait de rserver un
bloc, plus ou moins grand, dans la mmoire de donne. Comme
la taille de cette espace est limite en ce qui concerne les
microcontrleurs, il est important de
pouvoir contrler parfaitement certains paramtres comme par
exemple ladresse. Pour cela le cross - compilateur dispose de
mots cls supplmentaires permettant de dfinir le type ainsi
que ladresse du bloc de mmoire utilis.
*reg=*reg | m; //
opration bit bit
OU entre reg et m
}
void resetbit(char
*reg,const char n)
5. EXEMPLE.
Le programme suivant ralise une bascule
char m=1<<n;
bistable. Il permet de mettre 1 le bit 5
// variable m = 1
du port B si le bit 1du port A est 1 . La
dcal de n fois
gauche
*reg=*reg & ~m;
remise 0 seffectue en positionnant
1 le bit 1 du port A.
// opration bit bit
OU entre reg et le
complment de m
}
void main(void)
#include <st6265b.h>
// Programme
char testbit(const char reg,const char n)
principal
{
char m=1<<n;
// variable m = 1 dcal de n
{
fois gauche
DDRA=0x00;
return (reg & m);
// renvoi opration bit bit ET
// Port entre
A en entre
reg et m
}
ORA=0x00;
*reg,const char n)
// Sansvoid
pull setbit(char
up
{
DRA=0x00;
char m=1<<n;
// variable m = 1 dcal de n
// Ni interruption
DDRB=0xFF;
// Port B en sortie
ORB=0xFF;
// Symtrique
Conclusion :
A
travers les notions et
lapplication
prsent dans ce chapitre , nous avons
while (1)
fait un pas dans la programmation des PIC
// boucle principale
en C.
{
if (testbit(DRA,0))
setbit(&DRB,5);
// mise 1 du bit 5
de DRB si DRA0=1
if (testbit(DRA,1))
resetbit(&DRB,5);
// mise 0 du bit 5
Conclusion Gnrale :
Llaboration de ce modeste travail nous a permis de
comprendre un peu le fonctionnement du microcontroleur
travers une tude thorique de ces diffrents ressources
internes ensuite de sinitier leur programmation en langage C.
A la fin nous esprons avoir apport une contribution au
domaine des microcontroleurs PIC et leur programmations en
langage C.