Вы находитесь на странице: 1из 6

CAN :Correction Application 2

Partie 1:

Résolution de convertisseur est :

Le quantium ;

• Un capteur température ,à une plage °C ,délivre une tension ( ) comme


image de la température mesurée.
La relation entre et la température est une équation affine sous la forme

◦ pour ,

◦ ; la résolution du capteur , noté aussi

alors

Finalement on peut écrire ou

• Un capteur de pression , à une plage Bar , délivre une tension ( )


comme image de la pression mesurée .
La relation entre et la pression est une équation affine sous la forme

◦ pour , on a : on peut écrire


◦ Pour , on a : on peut écrire

On le système suivant :

soient et

On a avec et

Remarque

Iset Béja 2015/2016 1/6 R.Hertelli


• Un capteur d’humidité , à une plage % , délivre une tension ( ) comme
image de l'humidité mesurée .
La relation entre et l'humidité est une équation affine sous la forme

◦ pour ,

◦ ; la résolution du capteur , notée aussi

alors

Finalement on peut écrire ou

Programme :
#use delay(clock=20000000)
#device adc=16 //Directive du résoluition du CAN

//Définition étiquette
#define T_H PIN_B0
#define T_L PIN_B1

#define P_H PIN_B2


#define P_L PIN_B3

#define H_H PIN_B4


#define H_L PIN_B5

//variable globale
int16 N; //Sauvegarde du valeur N résultante de conversion
float T_val; //Valeur de la temperature
float P_val; //Valeur de la pression
float H_val; //Valeur de l'humidité
float Q = 5/65536.0; //Quantium du CAN
float R_T= 5/80.0; //Résolution capteur temperature
float R_P = 5/1180.0 ; //Résolution capteur Pression
float R_H = 5/100.0; //Résolution capteur Humidité
float Cte_P = -100/1180.0 ; //Cte de Pression
void main()
{

setup_adc(ADC_CLOCK_INTERNAL); // Activation du A/D module et


mettre l'horloge
// interne comme horloge du
ADC
setup_adc_ports(ALL_ANALOG); //RA0,RA1,RA2 entrées analogique
tous Analogue

Iset Béja 2015/2016 2/6 R.Hertelli


set_tris_B(0x00); //All PORTB output
output_B(0x00); //Tous les LED <- 0

while (true)
{
//Lecture et calcul Temperature
set_adc_channel(0); //Selection du canal 0
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
T_val = (N*Q)/R_T;//Calculer la temperature reelle

//Lecture et calcul Humudité


set_adc_channel(1); //Selection du canal 1
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
H_val = (N*Q)/R_H;//Calculer la humidité reelle

//Lecture et calcul pression


set_adc_channel(2); //Selection du canal 2
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
P_val = ((N*Q) -Cte_P )/R_P;//Calculer la Pression reelle

//Update output
output_B(0x00); //Tous les LED <- 0
//Temperature LED
if (T_val > 40) {output_High(T_H);}
else
{
if (T_val <10)
output_High(T_L);
}

//Pression LED
if (P_val > 130) {output_High(P_H);}
else
{ if (T_val <50)
output_High(P_L);
}

//Humedité LED
if (H_val > 80) {output_High(H_H);}
else
{ if (P_val <20)
output_High(H_L);
}
//attente 2s
delay_ms(2000);
}}

Iset Béja 2015/2016 3/6 R.Hertelli


Partie 2:

Programme :
On fait une interruption toute le 100ms . A l'aide d'un compteur gloable , on compte 20 interruptions
puis on autorise la conversion et la mise à jour des sortie.
#use delay(clock=20000000)
#device adc=16 //Directive du résoluition du CAN

//Définition étiquette
#define T_H PIN_B0
#define T_L PIN_B1

#define P_H PIN_B2


#define P_L PIN_B3

#define H_H PIN_B4


#define H_L PIN_B5

//variable globale
int16 N; //Sauvegarde du valeur N résultante de conversion
float T_val; //Valeur de la temperature
float P_val; //Valeur de la pression
float H_val; //Valeur de l'humidité
float Q = 5/65536.0; //Quantium du CAN
float R_T= 5/80.0; //Résolution capteur temperature
float R_P = 5/1180.0 ; //Résolution capteur Pression
float R_H = 5/100.0; //Résolution capteur Humidité
float Cte_P = -100/1180.0 ; //Cte de Pression

int ms100 = 20; //Variable globale


int1 activation = 0; //Variable d'activation du fonctionnement

#int_timer1 //Directive interruption Timer1


void Inter_100ms()
{
disable_interrupts(GLOBAL); //Désactivé toute les interruptions
set_timer1(3035); // Réinitialiser timer1
ms100 --; //Decrémenter var ms_100
if ( ms100 == 0) //1s découlé
{
activation = 1;
ms100 = 20;//Réinitialiser ms_100
}
clear_interrupt(int_timer1) ;// Clear Flag Overfloaw Timer1
enable_interrupts(int_timer1);//Activation Interruption Timer1
enable_interrupts(GLOBAL);//Activation Interruption Global
}

Iset Béja 2015/2016 4/6 R.Hertelli


void main()
{

setup_adc(ADC_CLOCK_INTERNAL); // Activation du A/D module et


mettre l'horloge
// interne comme horloge du
ADC
setup_adc_ports(ALL_ANALOG); //RA0,RA1,RA2 entrées analogique
tous Analogue

/Config Timer1 and interruption Timer1


//Prédiviseur 8 , Horloge interne
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8) ;
set_timer1(3035); // 65535-62500 = 3035

enable_interrupts(int_timer1);//Activation Interruption Timer1


enable_interrupts(GLOBAL); //Activation Interruption Global

set_tris_B(0x00); //All PORTB output


output_B(0x00); //Tous les LED <- 0

while (true)
{
if (activation == 1)
{
activation = 0; //Réinitialiser l'activation
//Lecture et calcul Temperature
set_adc_channel(0); //Selection du canal 0
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
T_val = (N*Q)/R_T;//Calculer la temperature reelle

//Lecture et calcul Humudité


set_adc_channel(1); //Selection du canal 1
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
H_val = (N*Q)/R_H;//Calculer la humidité reelle

//Lecture et calcul pression


set_adc_channel(2); //Selection du canal 2
delay_us(20); //Attente le temps de conversion
N = read_adc();//Lecture la valeur N de conversion
P_val = ((N*Q) -Cte_P )/R_P;//Calculer la Pression reelle

//Update output
output_B(0x00); //Tous les LED <- 0
//Temperature LED
if (T_val > 40) {output_High(T_H);}
else
{
if (T_val <10)

Iset Béja 2015/2016 5/6 R.Hertelli


output_High(T_L);
}

//Pression LED
if (P_val > 130) {output_High(P_H);}
else
{ if (T_val <50)
output_High(P_L);
}

//Humedité LED
if (H_val > 80) {output_High(H_H);}
else
{ if (P_val <20)
output_High(H_L);
}
}
}}

Iset Béja 2015/2016 6/6 R.Hertelli

Вам также может понравиться