Anda di halaman 1dari 16

Indicateur de

temprature base du
PIC 16F876A





Compte rendu du TP sur
Microcontrleur








Ralis par : HABBOULI Youns

Encadr par : Mr A.BENAATA



Master Gnie Electrique 1
er
anne ENSET


Ecole Normale Suprieure de lEnseignement Technique Rabat


Prsentation
Lindicateur de temprature propos dans ce travail, fait partie dune unit de production et permet de
mesurer la temprature dun produit.
La temprature T du produit est prleve grce un capteur de temprature de type PT100 reli un
circuit de conditionnement, sur sa sortie une tension analogique proportionnelle la temprature et
varie linairement de 0v 5v lorsque la temprature varie de 0
0
c 100
0
c.
Lindicateur est fix gnralement sur un pupitre de commande et permet dans le cas de cette
application :
Convertir la tension image de la temprature du domaine Analogique vers le domaine Numrique
Afficher directement la temprature mesure sur 3 afficheurs 7-Segment (Anodes communs) de telle
faon que pour le 0
0
C __00.0 et 100
0
C__99.9.
Rgler un seuil dalarme de dpassement de temprature grce 4 buttons(T/A, +, -, R) deux
tmoins(LED)pour indiquer ltat daffichage.
Communiquer avec un ordinateur de supervision grce une liaison RS232.
Fonctionnement gnral :
Aprs mise sous tension de lindicateur, les afficheurs indiquent la temprature mesure, le seuil
dalarme est fix 50
0
C. Durant le fonctionnement normal de lindicateur, une premire action sur le
bouton T/A affiche la valeur du seuil de temprature dalarme et allume le tmoin T/A en indiquant
que la valeur affiche est la temprature du seuil, on peut ce moment l augmenter ou l diminuer
grce aux boutons (+ et -). Une deuxime action sur le bouton T/A, teint le tmoin T/A et indique
sur les afficheurs la temprature mesure.
Si la temprature mesure dpasse le seuil dalarme, le tmoin AL sallume et reste allum mme si
la temprature mesure devient infrieure au seuil .pour lteindre on appuie sur le bouton R.
La communication avec le PC permet de recevoir sur celui-ci la valeur de temprature mesure et la
valeur du seuil dalarme. En effet, lindicateur renvoie vers le PC la temprature mesure sous le
format Tm : xx.x
0
C la rponse de la commande T suivie dun retour chariot (0x0D) envoyer
depuis le PC travers une liaison RS232.pour lire la valeur du seuil sur le PC, on envoie la
commande S suivie dun retour chariot sous la forme suivante : SA : xx.x
0
C.




I. Etude Matriels
Choix du Microcontrleur :
Un microcontrleur PIC est une unit de traitement et dexcution de l'information laquelle on a
ajout des priphriques internes permettant de raliser des montages sans ncessiter lajout de
composants annexes. Un microcontrleur PIC peut donc fonctionner de faon autonome aprs
programmation. Le microcontrleur PIC16F876A possde en particulier une interface de
communication srie USART (Universel Synchronous Asynchronous Reciever Transmitter)
USART du PIC 16F876A utilise la ligne TxD pour lmission et la ligne RxD pour la rception. Cs
deux ligne se partagent, respectivement les lignes RC6 et RC7 du port C.
La figure suivante montre les trois blocs internes de linterface USART du PIC16F876A









Bloc dmission : Responsable de lmission des donnes.il contient le registre de donne
mettre TxREG et le registre dtat dmission TxSTA.
Bloc de rception : Responsable de la rception des donnes.il comporte le registre de
donnes reues RcREG et le registre dtat de rception RcSTA.
Bloc de rglage dbit : Un gnrateur de dbit de transmission BRG (Baud Rate Generator)
Permet de choisir la vitesse de transmission grce au registre SPBRG.

Le registre dtat dmission TxSTA :
Ce qui nous intresse de plus sur se registre sont les bits suivant pour une configuration adquate
pour notre cahier des charges :
- TxEN pour lautorisation(1) ou blocage dmission (0).
- SYNC mode Synchrone (1) et Asynchrone (0).
- BRGH choix de la vitesse de transmission rapide (1) ou lente (0).
- TRMT registre dcalage mission vide(1) ou plein (0).


Le registre dtat de rception RcSTA :

- SPEN : ligns PC6 et PC7utilis avec lUART (1) ou avec le Port C (0).
- CREN : autorisation ou blocage de rception
- FEER : erreur de cadrage (1) ou pas derreur (0).
- OERR : crasement de la donne reue (1) ou non (0)

Le registre de rglage de dbit SPBRG :

- Le dbit tant fix 9600bit/s c qui donne une valeur de K = (25)
10
et d un erreur de 0.16%
suivant le tableau donn, avec Fosc = 4Mhz.

Capteur de temprature : PT100

Le thermomtre rsistance de platine est un dispositif (en fait, un type de thermistance)
permettant de mesurer la temprature. Il est bas sur le fait que la rsistance du platine varie selon la
temprature. La PT100 a une rsistance de 100 ohms 0 C et 138,5 ohms 100 C.

Principe

En injectant un courant constant et continu, il suffit alors de mesurer la tension, qui, tant
proportionnelle la rsistance donne une image de la temprature mesure. Toutefois, et en vertu de
l'effet Joule, l'injection d'un courant de mesure dans l'lment sensible de platine conduit au
phnomne d'auto-chauffement de celui-ci. Cette lvation de la temprature, inhrente au passage
du courant dans le capteur, conduit une erreur systmatique sur la mesure. Pour corriger cette
erreur, il s'agit lors d'un talonnage au point-fixe, de relever la valeur de la rsistance lectrique de
l'lment sensible pour un courant (normal) de 1 mA, puis 1, 414 mA. De ces deux points de mesure
une extrapolation de la rsistance lectrique du platine courant nul, synonyme d'une mesure idale
sans auto-chauffement, peut tre dtermine.
Attention! Pour une Pt25, le moindre choc thermique, ou mcanique, peut engendrer une drive
importante de l'instrument. Une attention toute particulire de l'exprimentateur est donc absolument
requise. Pour les faibles valeurs (Pt25, Pt100), on utilise plutt du fil de platine enroul. Pour les
valeurs leves (Pt100, Pt1000) et les dispositifs de petite taille, on dpose plutt un mandre de
platine sous forme de couche sur un substrat en cramique.
R
T :
rsistance du thermomtre la temprature T
0

R
0
: rsistance du thermomtre 0C.
T : la temprature en C
A = 3.9083*10
-3
B= -5.775*10
-7




R
T
/ R
0
= 1+A T+B T
2


Lindicateur de temprature :

Conversion Analogique-Numrique :

Principe :
Le CAN : Cest un montage lectronique dont la fonction est de traduire une grandeur analogique en
une valeur numrique (code sur plusieurs bits), proportionnelle au rapport entre la grandeur
analogique d'entre et la valeur maximum du signal. Pour des usages ultrieurs comme notre cas
laffichage de la temprature sur lindicateur (7seg).
Le signal converti est le plus souvent une tension lectrique.
N Avec n : nombre de bits de CAN,
On considre que Vref-=0V et Vref+=5V avec n=10 bits



Le CAN selon le type du PIC contient plusieurs registres mais les plus importants sont :

- ADCONO : Ce registre permet de slectionner quelle entre analogique va tre connecte
lentre du CAN (bit CHS3 CHS0). Ce registre contient galement les bits permettant de
mettre sous tension le CAN et de lancer une conversion
- ADCON1 : Le registre ADCON1 permet de configurer ltat des entres (analogique ou
TOR) mais galement de slectionner les tensions qui serviront de rfrence au CAN.

Configuration des registres

Slection de la frquence dhorloge du CAN :

- Utilisation du registre ADCON0. Cette frquence dpend du quartz utilis selon le tableau
suivant :









N= (Vi /Vref+)*1023.
Slection de lentre analogique convertir :
- Utilisation du registre ADCON0.
Mise en route du CAN :
- Utilisation du registre ADCON0.
Attente de lacquisition de la grandeur analogique :
Le temps entre la slection de lentre analogique et larrive relle de cette grandeur lentre du
convertisseur nest pas instantan. En effet le schma interne dune broche analogique est le suivant :





La documentation
du constructeur nous donne donc une formule pour calculer le temps dacquisition de la tension
analogique :

Lancement de la conversion :
- Utilisation du bit GO/DONE du registre ADCON0.
Attente de la fin de la conversion :
- Utilisation du bit GO/DONE du registre ADCON0.


Afficheur 7 segments :

On a utilis pour la modlisation de lindicateur sur Isis 3 afficheurs (Centaine, Dizaine, Unit) 7
segments anodes commun pour facilit la slection de chaque afficheur.



Affichage Multiplaces





T
ACQ
=T
AMP
+T
C
+T
COFF

T
ACQ
= 19.72s
II. Partie Logiciels

Fonctionnement :
Par dfaut aprs mise sous tension, la temprature mesure saffiche sur lindicateur.
Une premire action sur la touche T/A allume la LED tmoin T/A et affiche la temprature du seuil.
Une deuxime action sur la touche T/A teint la LED T/A et affiche la temprature mesure par la
PT100.
Une fois la temprature mesure dpasse le seuil (50
0
C), une LED tmoin AL sallume, pour
lteindre on appuie sur la touche R.
Les deux autres touches +/- ont pour rle dtalonne lindicateur.

Liaison PC et Indicateur :

Lindicateur est reli au PC via une liaison srie base RS232.

Programme en Langage C :

#include <htc.h>
char cmd,U,D ,C,x,i;
char a,b,c;
long T,S=500,conv ;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F}; // Table
des codes 7 segments

void init_pic() // Procdure d'initialisation du PIC
{
GIE=1; // Activation des interruptions gnrales
PEIE=1; // Activation des interruptions priphriques
TRISB=0x80; // Configuration du Port B pour l'utilisation des afficheurs 7 segments
TRISA=0x01; // Configuration du Port A
}

void init_convert() // Procdure d'initialisation du convertisseur A/N
{
int i;
ADCON1=0x8E; // Configuration du convertisseur pour une
justification droite et pour une seule entre analogique
ADCON0=0x40; // Configuration du convertisseur pour un temps de
conversion de 32*Tosc et choix de la premire ligne (RA0) comme source
ADIE=1; // Activation de l'interruption du convertisseur
ADIF=0; // Remise zro de l'indicateur de fin de conversion
ADON=1; // Activation du convertisseur
ADGO=1; // Lancement de la conversion
for(i=0;i<50;i++) // Temporisation de 20 40 S
{}
}

void init_usart() // Procdure d'initialisation de l'interface srie
USART
{
RCIE=1; // Activation de l'interruption de rception
RCIF=0; // Remise zro de l'indicateur de rception
TRISC =0xCF; // Configuration du Port C en entre pour le bon
fonctionnement de l'USART
PORTC=0;
TXSTA =0x24; // Configuration de l'mission de l'USART: en autorisant
l'mission, en choisissant une vitesse de transmission rapide

RCSTA =0x90; // Configuration de la rception de l'USART: en
spcifiant l'utilisation des lignes RC6 et RC7, en autorisant la rception en continu
SPBRG =25; // Rglage du dbit de l'USART 9600 bits/s
}

void emet_caract(int caract) // Procdure d'mission d'un caractre
{
TXREG=caract;
while(!TXIF);
}

char recept_caract() // Fonction de rception d'un caractre
{char caract_r;
caract_r=RCREG;
return caract_r;}

interrupt general() // Fonction d'interruption
{if(RCIF) // Interruption relative la rception d'un
carctre
{RCIF=0;
cmd=recept_caract(); // Acquisition du caractre reu dans la
variable 'cmd'
if(cmd =='T') // Test de la variable 'cmd' pour choisir entre
l'envoi de la temparture (si cmd=T) ou l'envoi du seuil (si cmd=S)
{
emet_caract('T');
emet_caract('m');
emet_caract(':');
emet_caract(C+0x30);
emet_caract(D+0x30);
emet_caract('.');
emet_caract(U+0x30);
emet_caract('');
emet_caract('C');
emet_caract(0x0D);}
if (cmd =='S')
{
emet_caract('S');
emet_caract('A');
emet_caract(':');
emet_caract('5');
emet_caract('0');
emet_caract('.');
emet_caract('0');
emet_caract('');
emet_caract('C');
emet_caract(0x0D);}
}

if (ADIF) // Interruption relative la fin d'un conversion
{ADIF=0; // Remise zro de l'indicateur de fin de conversion
T=((ADRESH<<8)+ADRESL)/1,024; // Acquisition de la valeur convertie

// Mises en forme de la donne convertie sous la forme CD.U (C pour centaines, D pour
dizaines et U pour units)


if(T>999)
{T=999;}
C=T/100; // Affection de la valeur des centaines la variable 'C'
D=(T%100)/10; // Affection de la valeur des dizaines la variable 'D'
U=T%10; // Affection de la valeur des units la variable 'U'

ADGO=1; // Lancement d'une nouvelle conversion
}
}

void affich(char e,char f,char g) // Procdure d'affichage multiplex sur les afficheurs 7
segments
{
PORTB=0;
PORTA=0x30; // Slection de l'afficheur des centaines
PORTB=tab[e]; // Envoi du nombre cod en 7 segments depuis la table
(tab) relatif au nombre de centaines trouv lors de la conversion
for(i=0;i<10;i++); // Temporisation pour le contrle de l'affichage multiplex

PORTA=0x28; // Slection de l'afficheur des dizaines
PORTB=tab[f]; // Envoi du nombre cod en 7 segments depuis la table
(tab) relatif au nombre de dizaines trouv lors de la conversion
for(i=0;i<10;i++);

PORTA=0x18; // Slection de l'afficheur des units
PORTB=tab[g]; // Envoi du nombre cod en 7 segments depuis la table
(tab) relatif au nombre d'units trouv lors de la conversion
for(i=0;i<10;i++);

}

void main() // Programme principal
{ init_pic(); // Appel des procdures d'initialisation
init_usart();
init_convert();
while(1){
affich(C,D,U); // Affichage de la temprature mesure
if(T>S)
RC5=1; // RC5 :LED AL
if (!RC3&&(T<S)) // RC3 : le boutton R
{RC5=!RC5;}

if(!RC0) // RCO : le boutton T/A
{RC4=!RC4; // RC4 : la LED T/A


if(!RC1)
{S++;}
if(!RC2)
{S--;}

a=S/100;
b=(S%100)/10;
c=S%10;
affich(a,b,c);
}

}
}






III. Les fonctions

F1 : Initialisation du PIC
void init_pic() // Procdure d'initialisation du PIC
{
GIE=1; // Activation des interruprions gnrales
PEIE=1; // Activation des interruprions priphriques
TRISB=0x80; // Configuration du Port B pour l'utilisation des afficheurs 7
segments
TRISA=0x01; // Configuration du Port A
}

F2 : Initialisation Convertisseur CAN

void init_convert() // Procdure d'initialisation du convertisseur A/N
{
int i;
ADCON1=0x8E; // Configuration du convertisseur pour une justification
droite et pour une seule entre analogique
ADCON0=0x40; // Configuration du convertisseur pour un temps de
conversion de 32*Tosc et choix de la premire ligne (RA0) comme source
ADIE=1; // Activation de l'interruption du convertisseur
ADIF=0; // Remise zro de l'indicateur de fin de conversion
ADON=1; // Activation du convertisseur
ADGO=1; // Lancement de la conversion
for(i=0;i<10;i++) // Temporisation de 20 40 S
{}
}
F3 : Initialisation de lUART

void init_usart() // Procdure d'initialisation de l'interface srie USART
{
RCIE=1; // Activation de l'interruption de rception
RCIF=0; // Remise zro de l'indicateur de rception
TRISC =0xCF; // Configuration du Port C en entre pour le bon
fonctionnement de l'USART
PORTC=0;
TXSTA =0x24; // Configuartion de l'mission de l'USART: en autorisant
l'mission, en choisissant une vitesse de transmission rapide
RCSTA =0x90; // Configuration de la rception de l'USART: en
spcifiant l'utilisation des lignes RC6 et RC7, en autorisant la rception en continu
SPBRG =25; // Rglage du dbit de l'USART 9600 bits/s
}


F4 : Emission dun caractre

void emet_caract(int caract) // Procdure d'mission d'un caractre
{
TXREG=caract;
while(!TXIF);
}
F5 : Rception dun caractre
char recept_caract() // Fonction de rception d'un caractre
{char caract_r;
caract_r=RCREG;
return caract_r;}

F6: Fonction d'interruption

interrupt general() // Fonction d'interruption
{if(RCIF) // Interruption relative la rception d'un carctre
{RCIF=0;
cmd=recept_caract(); // Acquisition du carctre reu dans la variable 'cmd'

if(cmd =='T') // Test de la variable 'cmd' pour choisir entre l'envoi de la
temparture (si cmd=T) ou l'envoi du seuil (si cmd=S)
{
emet_caract('T');
emet_caract('m');
emet_caract(':');
emet_caract(C+0x30);
emet_caract(D+0x30);
emet_caract('.');
emet_caract(U+0x30);
emet_caract('');
emet_caract('C');
emet_caract(0x0D);}
if (cmd =='S')
{ emet_caract('S');
emet_caract('A');
emet_caract(':');
emet_caract('5');
emet_caract('0');
emet_caract('.');
emet_caract('0');
emet_caract('');
emet_caract('C');
emet_caract(0x0D);} }




if (ADIF) // Interruption
relative la fin d'un conversion
{ADIF=0; // Remise zro de
l'indicateur de fin de conversion
T=((ADRESH<<8)+ADRESL)/1,024; // Acquistion de la valeur
convertie

// Mises en forme de la donne convertie sous la forme CD.U (C pour centaines, D pour dizaines et U
pour units)


if(T>999)
{T=999;}
C=T/100; // Affection de la valeur des centaines la variable 'C'
D=(T%100)/10; // Affection de la valeur des dizaines la variable 'D'
U=T%10; // Affection de la valeur des units la variable 'U'

ADGO=1; // Lancement d'une nouvelle conversion
}
}
F7 : Affichage sur 7 segments
void affich(char e,char f,char g) // Procdure d'affichage multiplex sur les afficheurs 7 segments
{
PORTB=0;
PORTA=0x30; // Slection de l'afficheur des centaines
PORTB=tab[e]; // Envoi du nombre cod en 7 segments depuis la table (tab)
relatif au nombre de centaines trouv lors de la conversion
for(i=0;i<10;i++); // Temporisation pour le contrle de l'affichage multiplex

PORTA=0x28; // Slection de l'afficheur des dizaines
PORTB=tab[f]; // Envoi du nombre cod en 7 segments depuis la table (tab)
relatif au nombre de dizaines trouv lors de la conversion
for(i=0;i<10;i++);

PORTA=0x18; // Slection de l'afficheur des units
PORTB=tab[g]; // Envoi du nombre cod en 7 segments depuis la table (tab)
relatif au nombre d'units trouv lors de la conversion
for(i=0;i<10;i++);

}

Programme Principal:

void main() // Programme principal
{ init_pic(); // Appel des procdures d'initialisation
init_usart();
init_convert();
while(1){
affich(C,D,U); // Affichage de la temprature mesure
if(T>S)
RC5=1; // RC5: LED AL
if (!RC3) // RC3 : le boutton R
{RC5=0;}

if(!RC0) // RCO : le boutton T/A
{RC4=!RC4; // RC4 : la LED T/A


if(!RC1)
{S++;}
if(!RC2)
{S--;}

a=S/100;
b=(S%100)/10;
c=S%10;
affich(a,b,c);
}
}
}
















Schema du Montage:































Lindicateur de temprature est trs utilis en instrumentation, lamlioration de ces performances reste
une question due lusage au bien la ncessit, parmi les modifications quon peut lajout cest
lenregistrement de la valeur mesure une instant donne ou bien lajout dautres priphriques.
Le choix du Pic t fait suivant le cahier des charges, donc pour dautres donnes ou pourra avoir
dautre type ou famille des PICs et par consquent autre configuration.




Conclusion

Anda mungkin juga menyukai