Sie sind auf Seite 1von 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) 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 Linitialisation gnrale pour le capteur analogique .....................................................................7 La lecture de la temprature ...........................................................................................................8 Le programme test ..........................................................................................................................8

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

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

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

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


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

II

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) 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 Gnralits.....................................................................................................................................13 Les diffrentes tches....................................................................................................................13 Point d'entre "main()"..................................................................................................................14

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

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

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

Vout

RB0

BP sl

/RST
DS1620

RA1 RA2 RA3


PIC 16F877

RB1 RB2 RB4

RA1 RA1 RA1 LCD


(2x16)

CLK DQ

RD0 RD7

DB0 DB7

RB5

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 1 s 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

Projet systme numrique

I.F)

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 10/16

Sargos - Zancan

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 Typon ct composants Typon ct cuivre Schma d'implantation des composants 1 Schma d'implantation des composants 2 Nomenclature des composants Code source du programme test de la LED Code source du programme test du Bouton-poussoir Dfinition de la bibliothque de lafficheur Code source de la bibliothque de lafficheur Code source du programme test de lafficheur Dfinition de la bibliothque du capteur LM35 Code source de la bibliothque du capteur LM35 Code source du programme test du capteur LM35 Dfinition de la bibliothque du capteur DS1620 Code source de la bibliothque du capteur DS1620 Code source du programme test du capteur DS1620 Dfinition de la bibliothque additionnelle Code source de la bibliothque additionnelle Code source du programme principal, 1re version Code source du programme principal, version multi-tches Annexe 1 Annexe 2.1 Annexe 2.2 Annexe 3.1 Annexe 3.2 Annexe 4 Annexe 5 Annexe 6 Annexe 7.1 Annexe 7.2 Annexe 7.3 Annexe 8.1 Annexe 8.2 Annexe 8.3 Annexe 9.1 Annexe 9.2 Annexe 9.3 Annexe 10.1 Annexe 10.2 Annexe 11 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