Vous êtes sur la page 1sur 19

2004

SARGOS Mathilde
ZANCAN Adrien

ENSEIRB

Projet systme numrique

SOMMAIRE
INTRODUCTION........................................................................................................3
LE MATRIEL ...........................................................................................................4
I
II

SYNOPTIQUE DE LA CARTE ..................................................................................................... 4


SCHMA ET RALISATION DE LA CARTE ................................................................................ 4

LE LOGICIEL .............................................................................................................5
I

LES BIBLIOTHQUES C........................................................................................................... 5


I.A)
La LED ......................................................................................................................... 5
I.B)
Le bouton-poussoir ....................................................................................................... 5
I.C)
L'afficheur LCD 2*16 .................................................................................................. 5
I.C.1)
I.C.2)
I.C.3)
I.C.4)
I.C.5)
I.C.6)
I.C.7)
I.C.8)
I.C.9)
I.C.10)
I.C.11)

I.D)

Le capteur LM35 .......................................................................................................... 7

I.D.1)
I.D.2)
I.D.3)

I.E)

Linitialisation gnrale pour le capteur analogique .....................................................................7


La lecture de la temprature ...........................................................................................................8
Le programme test ..........................................................................................................................8

Le capteur DS 1620 ...................................................................................................... 8

I.E.1)
I.E.2)
I.E.3)
I.E.4)
I.E.5)
I.E.6)

II

L'criture d'un octet dans le LCD...................................................................................................5


L'criture d'une instruction LCD ....................................................................................................5
L'criture d'un caractre vers le LCD.............................................................................................5
L'criture d'une chane de caractres vers le LCD.........................................................................6
Le retour chariot..............................................................................................................................6
L'effacement de l'cran ...................................................................................................................6
Le positionnement du curseur en ligne et colonne ........................................................................6
Les temporisations ..........................................................................................................................6
L'attente pour l'instruction suivante ...............................................................................................6
Linitialisation gnrale du LCD en mode 8 bits...........................................................................7
Le programme test ..........................................................................................................................7

La lecture dun mot.........................................................................................................................8


Lcriture dun mot.........................................................................................................................9
Linitialisation gnrale du capteur numrique .............................................................................9
Le lancement dune mesure............................................................................................................9
La lecture de la temprature ...........................................................................................................9
Le programme test ..........................................................................................................................9

I.F)
La bibliothque additionnelle ..................................................................................... 10
LE PROGRAMME PRINCIPAL................................................................................................. 10
II.A)
La premire version .................................................................................................... 10
II.A.1)
II.A.2)
II.A.3)
II.A.4)
II.A.5)
II.A.6)
II.A.7)
II.A.8)

II.B)

Point d'entre "main()"..................................................................................................................10


Initialisation des interruptions "irq_init()"...................................................................................10
Initialisation du microcontrleur "pic_init()"...............................................................................10
Conversion ASCII "temp_to_string( temp )"...............................................................................10
Enregistrements des tempratures maxi et mini "min_max()" ....................................................10
Remise zro des tempratures maxi et mini "raz_min_max()".................................................11
Traitement et affichage des tempratures "traitement()".............................................................11
Le programme d'interruption "interrupt isr()".............................................................................12

La version multi-tches .............................................................................................. 13

II.B.1)
II.B.2)
II.B.3)

Gnralits.....................................................................................................................................13
Les diffrentes tches....................................................................................................................13
Point d'entre "main()"..................................................................................................................14

CONCLUSION ..........................................................................................................15
ANNEXES ..................................................................................................................16

Sargos - Zancan

2/16

ENSEIRB

Projet systme numrique

____ INTRODUCTION ____


Notre projet consiste en la ralisation dun thermomtre affichage digital
base dun microcontrleur Microchip PIC 16F877. Sur un afficheur LCD, les
tempratures intrieure et extrieure provenant de deux capteurs seront affiches.
Lors d'un changement, on affichera les nouvelles valeurs courantes de
temprature. Les valeurs maximales et minimales des tempratures seront affiches
lors d'appuis successifs sur un bouton-poussoir. Si l'appui dpasse quelques secondes
alors une initialisation des valeurs maximales et minimales sera effectue. De plus une
LED clignotera rgulirement, il s'agit d'un tmoin de bon fonctionnement de
l'ensemble.

Sargos - Zancan

3/16

ENSEIRB

Projet systme numrique

LE MATERIEL _____
_____L
I

Synoptique de la carte
La carte lectronique est compose d'un microcontrleur PIC 16F877, auquel
sont associs divers priphriques. Un capteur de temprature de type analogique
LM35 permet de mesurer la temprature extrieure, un capteur de temprature de
type numrique DS1620 interface srie synchrone est utilis pour la temprature
intrieure. Un afficheur LCD permet la visualisation des tempratures et autres
informations utiles. Un bouton-poussoir permet, quant lui, de slectionner les
diffrentes informations afficher (tempratures courantes, tempratures maxi,
tempratures mini, remise zro). Enfin, une LED clignote pour indiquer l'tat de
fonctionnement du circuit.
LM35

DS1620

Vout

RB0

BP sl

/RST

RA1

RB1

RA1

CLK

RA2

RB2

RA1

DQ

RA3

RB4

RA1 LCD

PIC 16F877

RD0
RD7

RB5

(2x16)

DB0
DB7

LED

II Schma et ralisation de la carte


La ralisation du circuit imprim a t faite avec le logiciel Mentor Graphics.
Le schma lectrique du montage, les typons ct composants et ct cuivre,
les schmas d'implantation et la nomenclature des composants sont fournis
respectivement en Annexe 1, Annexe 2.1, Annexe 2.2, Annexe 3.1, Annexe 3.2 et
Annexe 4.

Sargos - Zancan

4/16

ENSEIRB

Projet systme numrique

_____ LE LOGICIEL _____


I

Les bibliothques C
I.A)

La LED

On souhaite simplement ici allumer la LED afin de vrifier l'tat gnral de


notre carte lectrique et le fonctionnement global du PIC. Il suffit donc de
configurer le port B correctement, le bit RB5 qui correspond la commande de la
LED doit tre configur en sortie. Si le bit RB5 est ltat '1' alors la LED
s'allumera sinon elle sera teinte.

I.B)

Le bouton-poussoir

On souhaite faire changer l'tat de la LED chaque appui sur le boutonpoussoir. Ce changement sera effectu dans le programme d'interruption appel
lors de l'appui sur le bouton-poussoir. Il a donc fallu initialiser en interruption le
bouton-poussoir de slection qui se trouve sur la broche RB0 du PIC.

I.C)

L'afficheur LCD 2*16

L'afficheur LCD doit permettre de lire les tempratures, on souhaite donc


afficher une chane de caractres en code ASCII partir d'une position dfinie sur
l'cran. On dcompose cette fonction principale en sous-programmes pour obtenir
une programmation plus claire et rutilisable.

I.C.1) L'criture d'un octet dans le LCD


La fonction de base est l'criture d'un octet dans l'afficheur que ce soit
une instruction ou une donne. Le port D du PIC qui est reli au port DB de
l'afficheur doit tre configur en sortie (PORTDATA). Le port D contient
l'octet transmettre l'afficheur, octet transmis quand le bit Enable du LCD
qui correspond la broche RB4 du PIC passe de l'tat '0' l'tat '1'
(LCD_STROBE).

I.C.2) L'criture d'une instruction LCD


L'octet reu par le LCD est pris comme instruction si le bit RS du LCD
qui correspond la broche RB1 du PIC est l'tat '0'. L'criture de l'instruction
sera faite uniquement si le LCD est libre de lire l'instruction, si le LCD est
occup il faut donc attendre et cette attente est effectue par la fonction
lcd_busy() explique un peu plus loin.

I.C.3) L'criture d'un caractre vers le LCD


L'octet reu par le LCD est pris comme une donne mettre dans la
mmoire RAM interne si le bit RS du LCD est l'tat '1'. Le bit RW du
LCD qui correspond la broche RB2 du PIC doit tre l'tat '0' pour pouvoir
Sargos - Zancan

5/16

ENSEIRB

Projet systme numrique

crire dans la RAM. L'criture de la donne d'un caractre en code ASCII sera
faite aussi uniquement si le LCD est libre.

I.C.4) L'criture d'une chane de caractres vers le


LCD
On parcourt la chane de caractres et tant que le caractre est diffrent
du caractre '\0', caractre de fin de chane, on crit le caractre vers le LCD.
La position sur l'cran du caractre suivant est dcale automatiquement, cette
configuration est dfinie lors de l'initialisation gnrale du LCD.

I.C.5) Le retour chariot


Il s'agit de l'criture de l'instruction LCD 0x02.

I.C.6) L'effacement de l'cran


L'effacement de l'cran correspond l'instruction LCD 0x01, le temps
d'excution de cette instruction prenant au moins 1.53 ms, une temporisation
de 2ms est ncessaire avant l'instruction suivante qui sera ici le retour chariot.

I.C.7) Le positionnement du curseur en ligne et colonne


Pour situer le curseur sur l'cran, il faut crire une instruction LCD.
Cette instruction est un octet o le bit DB7 est l'tat '1' et le reste des bits
correspond l'adresse de la mmoire une position donne sur l'cran. Dans le
cas de l'afficheur utilis, il y a uniquement 2 lignes par 16 caractres qui
peuvent tre affichs alors que l'on peut mmoriser 2 lignes par 40 caractres.
L'adresse peut tre dfinie comme suit : colonne + ligne * 0x40 o la ligne est
soit 0 ou 1 et la colonne va de 0 15.

I.C.8) Les temporisations


La temporisation de 250 s est ralise par une boucle while (dcnt--)
qui dcrmente la constante 'dcnt' chaque passage dans la boucle. La dure
d'un cycle d'horloge correspond quatre fois la priode du quartz soit 1s et
l'instruction while (dcnt--) prend trois cycles d'horloge. Donc si la constante
'dcnt' vaut 250/3 alors la dure de la boucle sera d'environ 250 s. La
constante 'dcnt' est en effet gale 250/3 car XTAL_FREQ = 4 (MHz) d'o
250/(12/4)=250/3. La temporisation de x ms est ralise en faisant x*4 la
temporisation de 250 s et celle de x seconde est ralise en faisant x*4 la
temporisation de 250 ms.

I.C.9) L'attente pour l'instruction suivante


On doit attendre que le LCD soit libre pour effectuer l'criture de
l'instruction suivante. On a sur le port DB du LCD un indicateur 'Busy Flag'
qui reste l'tat '1' tant que le LCD est occup; l'instruction suivante peut tre
excute quand l'indicateur est '0'.
L'indicateur est en sortie sur le bit DB7 de lafficheur et donc en entre
sur le port D du PIC quand le bit 'RS' est '0' et le bit 'RW' est '1'. A la fin de
cette fonction il faudra donc remettre le bit 'RW' '0' et le port D du PIC en
sortie. Ainsi tant que le bit qui correspond au 'busy flag' est ltat '1' on
Sargos - Zancan

6/16

ENSEIRB

Projet systme numrique

attend, attention il faut refaire un LCD_STROBE chaque fois que l'on


souhaite lire l'indicateur.

I.C.10) Linitialisation gnrale du LCD en mode 8 bits


La procdure dinitialisation est donne dans la data-sheet de lafficheur.
Tout dabord, le port D du PIC doit tre configur en sortie ainsi que les bits
RS, RW et Enable ltat 0. Un premire temporisation de 25 ms est
ncessaire pour assurer une alimentation correcte. Linstruction 0x30 doit
tre ensuite crite par deux fois avec une temporisation aprs chaque criture,
lafficheur est ainsi initialis en mode 8 bits et lindicateur busy flag peut
maintenant tre utilis. Linitialisation du mode daffichage peut alors
commencer. La premire instruction 0x38 permet de dfinir le nombre de
lignes, ici 2, et la rsolution des caractres, ici 5*7 points. La deuxime
instruction 0x08 permet de dfinir le contrle de laffichage, ici laffichage
est invisible. On effectue ensuite un effacement de lcran par linstruction
0x01 suivie par une temporisation de 2 ms. Laffichage est permis mais les
curseurs napparaissent pas avec linstruction 0x0C.Et enfin linstruction
0x06 permet que le curseur se dcale droite automatiquement et que
ladresse de la mmoire RAM interne sincrmente de 1.

I.C.11) Le programme test


On souhaite ici vrifier les fonctions de la bibliothque liblcd. On a
donc tout dabord initialis lafficheur , puis crit un caractre, positionn le
curseur sur lcran et crit une chane de caractres et on a aussi effectu un
effacement de lcran. Ce programme de test fonctionnait correctement, la
bibliothque de lafficheur est donc valide.

I.D)

Le capteur LM35

Le capteur LM35 est un capteur de temprature o la tension de sortie est


linairement proportionnelle la temprature en Celsius centigrade. Ce capteur
ne ncessite pas de calibrage externe pour fournir une prcision de _C sur une
gamme de temprature de 55C +150C. Son coefficient est de 10mV/C et
dans notre cas le capteur est aliment en 0-5V, on ne peut mesurer par consquent
que des tempratures positives.

I.D.1) Linitialisation gnrale pour le capteur


analogique
Le capteur tant analogique un convertisseur analogique - numrique est
ncessaire pour traiter et afficher la temprature. Le convertisseur CAN du
PIC doit donc tre configur. La sortie du capteur se trouve la broche RA0
du PIC qui est donc configure en entre analogique. De plus le rsultat de la
conversion est sur 10 bits (les registres ADRESH et ADRESL) le bit de poids
faible se trouvant au bit 0 du registre ADRESL (rsultat justifi droite). Une
frquence dchantillonnage doit tre aussi choisie, elle est gale ici la
frquence du quartz divise par 32. On ne souhaite pas non plus utiliser le
convertisseur CAN en interruption (ADIE=0). Le convertisseur est mis en
service quand le bit ADON est ltat 1. Aprs une temporisation de
250s, une conversion peut tre lance en mettant ltat 1 le bit ADGO.
Sargos - Zancan

7/16

ENSEIRB

Projet systme numrique

I.D.2) La lecture de la temprature


Afin de lire une temprature correcte issue du capteur analogique,
lattente de la fin de la conversion du CAN est indispensable. Une conversion
est finie quand le bit ADGO est repass ltat 0. Aprs la lecture des
registres ADRESH et ADREHL, une nouvelle conversion peut alors tre
lance.
La variable temp est un entier qui correspond la temprature en
0.1C. La pleine chelle du convertisseur correspond pour une tension de 5V
la valeur 0x3FF car le rsultat est sur 10 bits. Or si on ne prend pas en
compte la limitation du capteur, la tension 5V correspond une temprature de
5/(10mV/C) = 5000 en 0.1C. Donc pour une valeur x du rsultat de la
conversion, la temprature en 0.1C est gale x*5000/0x3FF.
Lerreur commise par un convertisseur CAN est de lordre de _ LSB,
ce qui correspond ici une tension de 5V/0x3FF=4.9mV, or pour le capteur
LM35 une tension de 10mV correspond une temprature de 1C. Par
consquence la prcision de la mesure de temprature est denviron 0.5C.

I.D.3) Le programme test


On souhaite ici vrifier les fonctions de la bibliothque liblm25. Aprs
linitialisation de lafficheur et du capteur LM35, on affiche en continu la
temprature issue du capteur. Une fonction supplmentaire est ncessaire pour
passer dun entier qui correspond la temprature une chane de caractres
pour laffichage, il sagit de la fonction void temp_to_string ( unsigned short
temp ). Cette fonction transforme un entier en chane de caractres ASCII et
arrondie le dixime de la temprature soit 0 soit 5. Ce programme de test
fonctionnait correctement, la bibliothque du capteur LM35 est donc valide.

I.E)

Le capteur DS 1620

Le capteur DS1620 est un capteur numrique de temprature avec une


gamme de mesure de 55C +125C et de prcision 0.5C. Ce capteur
fonctionne avec une interface de trois fils: un signal dhorloge CLK, un signal
de reset RST et un signal de donne DQ. La transmission des donnes et des
instructions se fait par liaison synchrone srie avec le bit de poids faible en
premier. Ce capteur peut nous permettre davoir une mesure de temprature
environ toutes les secondes.

I.E.1) La lecture dun mot


Une des fonctions de base est la lecture par le PIC dune donne du
capteur. La broche DQ du capteur relie la broche RA3 du port A est
donc configure en entre par rapport au PIC. Une transmission de donnes
doit tre initialise en mettant la broche RST du capteur ltat 1. Si le mot
transmettre est compos de x bits alors cette transmission sera ralise avec x
cycles dhorloge. Un cycle dhorloge correspond un front descendant de
lhorloge CLK suivi dun front montant. Quand une transmission entre le
capteur et le PIC est termine le bit RST doit repasser ltat 0. Dans le cas
dune lecture, la broche DQ du capteur est en sortie, et la donne sur cette
broche est modifie lors dun front descendant de lhorloge et reste valide
Sargos - Zancan

8/16

ENSEIRB

Projet systme numrique

jusqu un front montant de lhorloge. Ainsi entre CLK=0 et CLK=1,


suivant ltat de la broche DQ on modifie le bit correspondant de la donne
finale.

I.E.2) Lcriture dun mot


Lautre fonction de base est lcriture par le PIC dune instruction du
capteur. La broche DQ du capteur relie la broche RA3 du port A est
donc configure en sortie par rapport au PIC. Le principe de transmission de
lecture reste le mme pour lcriture. Mais dans le cas dune criture, la broche
DQ du capteur est en entre, et la donne sur cette broche doit tre valide
durant le front montant de lhorloge. Ainsi entre CLK=0 et CLK=1,
suivant le bit correspondant de la donne transmettre la broche DQ prend la
valeur de ce bit.

I.E.3) Linitialisation gnrale du capteur numrique


Les broches du capteur tant relies sur les broches RA1 RA3 du port
A du PIC, ces broches sont configures en entres numriques. Le registre de
configuration du capteur doit tre initialis et pour cela il faut tout dabord
crire linstruction de 8 bits 0x0C qui permet au capteur de savoir que les 8
prochains bits correspondront la nouvelle valeur du registre de configuration.
On crit donc ensuite dans ce registre 0x03, le capteur est par consquent
dans le mode One-shot, une nouvelle conversion se fait uniquement si
lcriture de linstruction Start Convert T (lancement de conversion) a t
effectue, de plus le bit CPU ltat 1 correspond au mode de transmission
expliqu plus haut.

I.E.4) Le lancement dune mesure


Le lancement dune mesure seffectue en crivant sur le capteur
linstruction de 8 bits 0xEE qui correspond un dbut de conversion de
temprature.

I.E.5) La lecture de la temprature


Pour lire la temprature du capteur qui se trouve sous la forme dun mot
de 9 bits, il faut tout dabord envoyer sur le capteur linstruction de 8 bits
0xAA. Cette instruction permet au capteur de savoir que lon souhaite lire la
dernire conversion sur le registre temprature. La variable temp est un
entier qui correspond la temprature en 0.1C.

I.E.6) Le programme test


On souhaite ici vrifier les fonctions de la bibliothque lib1620. Aprs
linitialisation de lafficheur et du capteur DS1620, on affiche en continu la
temprature issue du capteur numrique. On utilise la mme fonction du
capteur analogique qui transforme un entier en chane de caractres ASCII. Ce
programme de test fonctionnait correctement, la bibliothque du capteur
DS1620 est donc valide.

Sargos - Zancan

9/16

ENSEIRB

I.F)

Projet systme numrique

La bibliothque additionnelle

Cette bibliothque est prsente en raison du compilateur qui naccepte pas


les rentrances dans les fonctions. Les mmes fonctions ne doivent donc pas se
retrouver la fois dans le programme dinterruption et dans le programme
principal. On a donc recopi les fonctions qui posaient un problme sous un autre
nom.

II Le programme principal
II.A) La premire version
II.A.1) Point d'entre "main()"
Aprs avoir appel la fonction d'initialisation "pic_init()", le
microcontrleur entre dans une boucle infinie. Dans cette boucle, le PIC
effectue seulement l'appel de la fonction "traitement()" qui est charge de la
gestion de l'affichage.

II.A.2) Initialisation des interruptions "irq_init()"


Cette fonction permet tout d'abord d'initialiser le Timer pour qu'il
effectue une interruption toutes les secondes. Elle permet aussi d'autoriser le
bouton-poussoir fonctionner en interruption.

II.A.3) Initialisation du microcontrleur "pic_init()"


Cette fonction permet dinitialiser les ports du microcontrleur,
dappeler les fonctions d'initialisation de chaque priphrique et d'initialisation
des interruptions.

II.A.4) Conversion ASCII "temp_to_string( temp )"


Cette fonction permet de convertir un entier image de la temprature en
une chane de caractres prte tre affiche sur l'cran LCD.
La variable "temp" est un octet non sign, c'est une temprature en
0.1C. Chaque digit est converti en code ASCII, la chane de caractres
rsultante contient : le chiffre des dizaines de C , le chiffre des units, le
caractre '.' , le chiffre des diximes et enfin le caractre '\0' .
Le capteur LM35 associ au CAN du microcontrleur n'tant prcis qu'
0.5 C prs, il plus judicieux de n'afficher que des valeurs arrondies de la
temprature. Aussi, une adaptation est ralise dans la fonction
"temp_to_string" pour arrondir les diximes de degrs.

II.A.5) Enregistrements des tempratures maxi et mini


"min_max()"
Lorsque la temprature courante est infrieure la temprature minimale
enregistre prcdemment, cette dernire est mise jour. De mme lorsque la
temprature courante est suprieure la temprature maximale enregistre

Sargos - Zancan

10/16

ENSEIRB

Projet systme numrique

prcdemment, cette dernire est mise jour. Cet enregistrement seffectue


pour les deux tempratures (intrieure et extrieure).

II.A.6) Initialisation des tempratures maxi et mini


"raz_min_max()"
Les tempratures minimale et maximale enregistres sont remises aux
valeurs des tempratures courantes (intrieure et extrieure).

II.A.7) Traitement et affichage des tempratures


"traitement()"
Cette fonction est entirement articule autour de la variable "select"
grce un switch case. La variable "select" reprsente en quelque sorte le
nombre d'appui sur le bouton-poussoir et donc, l'information que doit afficher
l'cran. Ainsi, suivant l'tat de "select", l'cran sera dans les tats suivants :
Si select = 0
affichage des tempratures courantes
Si select = 1
affichage des tempratures maximales
Si select = 2
affichage des tempratures minimales
Si select = 3
affichage de l'cran "RAZ max, RAZ min"

De faon viter un clignotement de l'cran, les tempratures courantes


ne sont affiches que si elles ont chang. Toutefois l'cran des tempratures
courantes doit tre affich si un autre cran t affich auparavant. La
variable boolenne "flag_select_different" a pour rle de dtecter si un autre
cran vient d'tre affich.
Voici l'algorithme de la fonction "traitement()"
Selon ( select )
si ( 0 ) faire
Si ( (temprature temprature_prcdente)
ou flag_select_different ) alors
flag_select_different = 0
min_max()
Modification des max et min
temprature_prcdente = temprature
afficher l'cran des tempratures courantes
Fin si
si ( 1 ) faire
afficher l'cran des tempratures maximales
si ( 2 ) faire
afficher l'cran des tempratures minimales
si ( 3 ) faire
raz_min_max()
afficher l'cran de RAZ des tempratures
Fin selon

Sargos - Zancan

11/16

ENSEIRB

Projet systme numrique

II.A.8) Le programme d'interruption "interrupt isr()"


Il y a deux interruptions actives : une par le dbordement du timer1 qui
survient rgulirement toutes les secondes, et une lors d'un appui sur le
bouton-poussoir. Ces deux interruptions excutent le mme programme
d'interruption, il convient donc de tester chaque "flag" d'interruption pour
dterminer quelle est celle qui vient de survenir. L'ordre de scrutation des
"flags" dtermine la priorit des interruptions respectives. Nous avons dcid
de donner la priorit maximale l'interruption timer, elle est donc scrute en
premier.
A chaque interruption timer, les deux tempratures sont lues et
enregistres dans les variables globales "tempINT" et "tempEXT". Mais
l'interruption timer sert aussi dtecter un appui long sur le bouton-poussoir.
Ainsi, un test est effectu pour savoir si le bouton-poussoir est appuy, si c'est
le cas, un compteur "appui_long" est incrment, si ce compteur dpasse la
valeur 3, cela veut dire que le bouton-poussoir est rest appuy pendant 3
secondes, la variable "select" doit donc tre mise 3 pour indiquer la
fonction traitement d'effectuer la remise zro des tempratures maxi et mini.
A chaque interruption gnre par le bouton-poussoir, et aprs une petite
tempo anti-rebond, la variable "select" est incrmente, elle passera
successivement ( chaque appui) 1, 2 puis reviendra 0.
Voici l'algorithme de la fonction "interrupt isr()"
Interruption timer
Si ( flag_timer ) alors
RAZ flag_timer
LED = non LED
Si ( BP_appuy ) alors
RAZ flag_BP
Si ( appui_long > 3 ) alors Appui > 3 s
select = 3
RAZ min max
sinon
L'utilisateur est en train d'appuyer mais
appui < 3 secondes
incrmenter appui_long
Fin si
sinon
appui_long = 0
Si ( select = 3 ) alors un RAZ vient d'tre effectu
select = 0 retour l'affichage courant
flag_select_different = TRUE
Fin si
Lecture des tempratures
tempINT = lireDS1620
tempEXT = lireLM35
Fin si
Fin si
Interruption bouton-poussoir
Si ( flag_BP ) alors
Attendre 12ms
tempo anti-rebond
Si ( BP_appuy ) alors
Si ( select < 2 ) alors

Sargos - Zancan

12/16

ENSEIRB

Projet systme numrique


incrmenter select passer l'affichage suivant
sinon
select = 0 retour l'affichage courant
L'affichage prcdent n'tait pas l'affichage des
tempratures courantes
flag_select_different = TRUE
Fin si
RAZ flag_BP
Fin si

II.B) La version multi-tches


II.B.1) Gnralits
Toutes les librairies utilises restent bien sr identiques, les fonctions
utilises dans le programme principal sont aussi identiques. Les changements
se situent dans le "main()" et le programme d'interruption.
Dans cette version du programme, le bouton-poussoir ne fonctionne pas
en interruption, par contre, l'interruption due au dbordement du timer1 sera
beaucoup plus rapide (1ms) pour permettre une scrutation de l'tat du boutonpoussoir. Quatre tches distinctes ont t dfinies.
A chaque tche est associs un compteur "task_x_counter" et une
constante "TASK_X_COUNTER_MAX". A chaque interruption (toutes les
1ms), le compteur de chaque tche est incrment ; lorsque le compteur de la
tche "x" atteint la constante "TASK_x_COUNTER_MAX", la tche "x" est
effectue.

II.B.2) Les diffrentes tches


"task_sw"
C'est la tche la plus frquemment excute, car elle est excute
chaque interruption (toutes les 1ms). Elle sert scruter l'tat du boutonpoussoir et modifier la variable "select" pour choisir les informations
afficher. Le boolen "task_sw_push" permet de dtecter lorsqu'il y a eu un
relchement de l'interrupteur pour viter qu'un appui d'une dure suprieure
1ms (ce qui est toujours le cas si l'utilisateur est humain ) ne soit pris en
compte comme une multitude d'appuis. "task_sw" permet aussi d'autoriser
l'excution de la tche "task_raz" lorsqu'il y a eu appui sur le boutonpoussoir.

"task_display"
C'est une tche de frquence moyenne (toutes les 250ms) et de faible
priorit. Elle permet le traitement et l'affichage des donnes par l'appel de la
fonction "traitement()" (cette dernire est dtaille en II.A.7). Comme cette
tche peut durer plus de 1ms, dans l'interruption, seul un "flag" et mis 1,
l'excution de la tche se fait dans la boucle infinie du "main()".

Sargos - Zancan

13/16

ENSEIRB

Projet systme numrique

"task_read"
C'est une tche de faible frquence (toutes les 1s) et de faible priorit.
C'est dans cette tche qu'est effectue la lecture des valeurs des capteurs de
temprature et les re-lancements de conversion. Elle ralise aussi le retour
l'affichage "tempratures courantes" si l'cran "tempratures maxi" ou
"tempratures mini" est affich depuis 3 4 secondes. Comme pour
"task_display", la tche durant plus de 1ms, elle est excute dans le
"main()" grce un "flag" mis 1 dans l'interruption.

"task_raz"
Cette tche n'est autorise que si l'utilisateur vient d'appuyer sur le
bouton-poussoir (dans "task_sw", le compteur "task_raz_counter" y est
aussi mis 0 en mme temps que "task_raz" est autorise), elle s'effectuera
alors au bout de 2 secondes. Sa seule fonction est de mettre la variable
"select" 3, permettant ainsi d'autoriser l'effacement des tempratures maxi
et mini.

II.B.3) Point d'entre "main()"


Aprs avoir appel la fonction d'initialisation des priphriques
"pic_init()" et l'initialisation du timer1 pour le fonctionnement multi-tches
"setup_multitasking()", le microcontrleur entre dans une boucle infinie. Dans
cette boucle, le PIC effectue, suivant l'tat des "flags" de "task_read" et
"task_display", la lecture et l'enregistrement des deux tempratures dans les
variables globales "tempINT" et "tempEXT" (toutes les 1s) et l'appel de la
fonction "traitement()" qui est charge de la gestion de l'affichage (toutes les
250ms).

Sargos - Zancan

14/16

ENSEIRB

Projet systme numrique

____ CONCLUSION _____


Ce projet nous a tout d'abord permis de concevoir un systme numrique du
dbut la fin, de la conception lectronique jusqu'au logiciel. L'utilisation d'un
microcontrleur de type PIC simplifie grandement l'laboration d'un tel montage, et
notre logiciel rpond au cahier des charges.
La programmation du logiciel associ tait intressante et nous avons pu nous
rendre compte de tout l'intrt que peut prendre la cration de bibliothques. Les
programmes sont ainsi simplifis et plus lisibles mais surtout, les bibliothques
peuvent tre rutilises trs simplement. La version multi-tches a t en fait trs
rapide faire, elle permet d'avoir une approche plus systmatique dans la conception
du programme et on comprend tout l'intrt qu'elle apporte lorsque l'on veut ajouter
une tche au microcontrleur. En effet, il suffit de dfinir une tche supplmentaire et
de l'implmenter dans l'interruption exactement comme les autres, l'amlioration d'un
systme devient ainsi trs simple et les performances ne sont pas dgrades.

Sargos - Zancan

15/16

ENSEIRB

Projet systme numrique

______ ANNEXES ______


Schma lectrique du montage

Annexe 1

Typon ct composants

Annexe 2.1

Typon ct cuivre

Annexe 2.2

Schma d'implantation des composants 1

Annexe 3.1

Schma d'implantation des composants 2

Annexe 3.2

Nomenclature des composants

Annexe 4

Code source du programme test de la LED

Annexe 5

Code source du programme test du Bouton-poussoir

Annexe 6

Dfinition de la bibliothque de lafficheur

Annexe 7.1

Code source de la bibliothque de lafficheur

Annexe 7.2

Code source du programme test de lafficheur

Annexe 7.3

Dfinition de la bibliothque du capteur LM35

Annexe 8.1

Code source de la bibliothque du capteur LM35

Annexe 8.2

Code source du programme test du capteur LM35

Annexe 8.3

Dfinition de la bibliothque du capteur DS1620

Annexe 9.1

Code source de la bibliothque du capteur DS1620

Annexe 9.2

Code source du programme test du capteur DS1620

Annexe 9.3

Dfinition de la bibliothque additionnelle

Annexe 10.1

Code source de la bibliothque additionnelle

Annexe 10.2

Code source du programme principal, 1re version

Annexe 11

Code source du programme principal, version multi-tches

Annexe 12

Sargos - Zancan

16/16

# Board Station BOM file


# date : Friday April 16, 2004; 11:23:47

REFERENCE
C1
C2
C3
Cds1
Clcd1
Cpic1
D1
Jds_CLK1
Jds_dq1
Jds_rst1
Jgnd1
Jgnd2
Jgnd3
Jlcd_E1
Jlcd_RS1
Jlcd_RW1
Jlm1
Jvcc1
K1
K2
P1
R1
R2
R3
R4
R5
U1
U2
U3
U4
U5

ITEM_NUMBER
12
12
12
12
12
13
9
4
4
4
4
4
5
4
4
4
4
5
3
3
11
10
10
10
10
10
2
1
7
6
8

COMPANY PART NO.


pn-m-cap_01_2u
pn-m-cap_01_2u
pn-m-cap_01_2u
pn-m-cap_01_2u
pn-m-cap_01_2u
pn-m-chim_tantale_2u
pn-k-led_3.5mm
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-douille_4mm_ci
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-cosse_poignard
pn-g-douille_4mm_ci
pn-f-rond_d6_itt
pn-f-rond_d6_itt
pn-l-trim_vert
pn-l-res_01_4u_1/4W
pn-l-res_01_4u_1/4W
pn-l-res_01_4u_1/4W
pn-l-res_01_4u_1/4W
pn-l-res_01_4u_1/4W
pn-c-lm35
pn-b-ds1620
pn-j-pic16f877
pn-i-quartz_2u
pn-k-lcd2x16

GEOMETRY
CK05
CK05
CK05
CK05
CK05
c_chim_1
LED_3X5.5MM
cnk1x200
cnk1x200
cnk1x200
cnk1x200
cnk1x200
plk1x400
cnk1x200
cnk1x200
cnk1x200
cnk1x200
plk1x400
sw_bp12mm
sw_bp12mm
trim_v
RC05
RC05
RC05
RC05
RC05
to920
DIP8_P
DIP40_P
hc18
lcd84x43mm

DESCRIPTION
CAPACITOR, 0.1u
CAPACITOR, 22p
CAPACITOR, 22p
CAPACITOR, 0.1u
CAPACITOR, 0.1u
POL_CAPACITOR, 1u
LED, RBG1000
conn1
conn1
conn1
conn1
conn1
plot
conn1
conn1
conn1
conn1
plot
poussoir
poussoir
pot, POT
RESISTOR, 1K
RESISTOR, 100K
RESISTOR, 10K
RESISTOR, 10K
RESISTOR, 470
LM35
DS1620
16F877
quartz, 4MHz
LCD2x16

Vous aimerez peut-être aussi