Sie sind auf Seite 1von 56

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 lutilisateur.Lutilisation 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 puissants.Chacune 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.

Das könnte Ihnen auch gefallen