téléjaigeage programme 18F452
Transcript of téléjaigeage programme 18F452
-
8/4/2019 tljaigeage programme 18F452
1/13
Ce programme pour le compilateur Pic C compiler de CCS
Gestion tljaugeage dune station service
#include "C:\Program Files\PICC\Examples\telejaugeage.h"
#include
#device adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#include
#define use_portd_lcd
#include
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#define CINITPROD_0 0x003E80 // 16*VALEUR INITIALE DE LA SONDE CARBURANT N0
#define CINITPROD_1 0x003E80 // VALEUR INITIALE DE LA SONDE CARBURANT N1
#define CINITPROD_2 0x003E80 // VALEUR INITIALE DE LA SONDE CARBURANT N2
#define CINITPROD_3 0x003E80 // VALEUR INITIALE DE LA SONDE CARBURANT N3
#define CINITPROD_4 0x003E80 // VALEUR INITIALE DE LA SONDE CARBURANT N4
#define CINITPROD_5 0x003E80 // VALEUR INITIALE DE LA SONDE CARBURANT N5
#define CINITEAU_0 0x000000 // VALEUR INITIALE DE LA SONDE EAU N0
#define CINITEAU_1 0x000000 // VALEUR INITIALE DE LA SONDE EAU N1
#define CINITEAU_2 0x000000 // VALEUR INITIALE DE LA SONDE EAU N2
#define CINITEAU_3 0x000000 // VALEUR INITIALE DE LA SONDE EAU N3
#define CINITEAU_4 0x000000 // VALEUR INITIALE DE LA SONDE EAU N4
#define CINITEAU_5 0x000000 // VALEUR INITIALE DE LA SONDE EAU N5
#define NUM_TANKS 6
FLOAT CONST DIAMETRE [NUM_TANKS] = {1.472,1.472,1.472,1.472,1.472,1.472};
FLOAT CONST LENTH [NUM_TANKS] = {3.10,3.10,3.10,3.10,3.10,3.10};
FLOAT const CAPLENTH [NUM_TANKS] = {0.2,0.2,0.2,0.2,0.2,0.2};
INT32 CONST CINITPROD[NUM_TANKS] = {CINITPROD_0, CINITPROD_1, CINITPROD_2,CINITPROD_3,CINITPROD_4, CINITPROD_5 };
-
8/4/2019 tljaigeage programme 18F452
2/13
INT32 CONST CINITEAU[NUM_TANKS] = {CINITEAU_0, CINITEAU_1, CINITEAU_2,
CINITEAU_3,CINITEAU_4, CINITEAU_5 };
int i,j;
//VARIABLE CALCUL VOLUME
FLOAT cap_vol, tube_vol, diameter, length=1,height;
FLOAT cap_length, offset_height, tube_length, temp1,vol2;
//VARIABLE CALCUL PERIODE
unsigned int32 debut, fin;
int32 nbimpulsions;
LONG debordement;
INT VOLLo,VOLHi,LIVLo, LIVHi,LIV0,VOL0,hot1;
LONG T0,T1,T2,vol,liv,T0L,T1L,T2L,hot,somme;
//VARIABLES VERIFICATION DEPOTAGE
LONG volactuel1,volprecedent1,livraison1;
LONG volactuel2,volprecedent2,livraison2;
LONG volactuel3,volprecedent3,livraison3;
LONG volactuel4,volprecedent4,livraison4;
LONG volactuel5,volprecedent5,livraison5;
//////////////////////////////////////////////////////////////////////////////
/****************** activate buz1 for keys ******************/
void buz1(void)
{
char jb;
for (jb = 0; jb
-
8/4/2019 tljaigeage programme 18F452
3/13
#int_TIMER1
void TIMER1_isr() // Interruption si dbordement timer1
{
++debordement; // Prise en compte de plusieurs dbordement de tmr1.
}
//////////////////////////////////////////////////////////////////////////////
#int_CCP1
void CCP1_isr() // Interruption module de capture
{
fin = CCP_1;
nbimpulsions = (65536 * debordement) + fin - debut;
if (nbimpulsions > 0X001990 & input(PIN_A0)) buz1();
else output_low(PIN_A1);
debut = fin;
debordement = 0;
}
//////////////////////////////////////////////////////////////////////////////
void AFFIliv (void)
{
disable_interrupts(GLOBAL);
T0L=Floor(liv/100);
LIVHi=T0L;
T1L=Floor((liv-T0L*100)/10);
LIVLo=T1L;
T2L=floor((liv-T0L*100-(T1L*10)));
LIV0=T2L;
enable_interrupts(GLOBAL);
}
//////////////////////////////////////////////////////////////////////////////
void AFFIVOL (void)
{
disable_interrupts(GLOBAL);
T0=Floor(vol/100);
-
8/4/2019 tljaigeage programme 18F452
4/13
VOLHi=T0;
T1=Floor((vol-T0*100)/10);
VOLLo=T1;
T2=floor((vol-T0*100-(T1*10)));
VOL0=T2;
enable_interrupts(GLOBAL);
}
//////////////////////////////////////////////////////////////////////////////
// SOUS PROGRAMME DETERMINATION DU STOCK DE CARBURANT DANS LES CITERNES
void DETERMINATION_VOLUME (void)
{
disable_interrupts(GLOBAL);
length=LENTH [i];
Cap_length=CAPLENTH [i];
Diameter =DIAMETRE [i];
DELAY_ms(10);
height =(nbimpulsions-CINITPROD[i])/16000.0;////EQUIVALENCE NBRE IMPULTION
HAUTEURtube_length = length - 2*cap_length;
offset_height = height - diameter/2;
temp1 = (pwr(offset_height,3) - 3*diameter*diameter*offset_height/4
- pwr(diameter,3)/4);
cap_vol = -PI*cap_length*temp1/(3*diameter);
temp1 = sqrt(diameter*diameter/4-offset_height*offset_height);
temp1 = PI/2 + 4*offset_height*temp1/(diameter*diameter)+
asin(2*offset_height/diameter);
tube_vol = tube_length*diameter*diameter*temp1/4;
vol2 = (tube_vol + 2*cap_vol);
vol=floor(vol2*1000.);
// vol=floor((nbimpulsions-CINITPROD[i])/16);
enable_interrupts(GLOBAL);
-
8/4/2019 tljaigeage programme 18F452
5/13
}
void MENU_STOCK (void)
{
AFFIVOL ();
DELAY_ms(100);
SOMME=vol-0x0064;
if (i==0 ){
printf( "\r\n STOCK DE CARBURANT: ");
}
if (i==1 ){
printf("\rSTOCK GASOIL1 : %6.2lu L ", vol );
printf("\r\n\nLa hauteur GASOIL1 est: %6.2f Cm\n\n", height*100.);
printf(lcd_putc,"\fSTOCK GASOIL1: %U%U%U L\n", VOLHi ,VOLLo,VOL0);
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent5=volactuel5;
if (volvolactuel1) {
volactuel1=vol;
livraison1=volactuel1-volprecedent1;
}
}
if (i==2 ){
printf("\rSTOCK SUPER1 : %6.2lu L ", vol );
printf("\r\n\nLa hauteur SUPER1 est: %6.2f Cm\n\n", height*100.);
printf(lcd_putc,"\fSTOCK SUPER1: %U%U%U L\n", VOLHi ,VOLLo,VOL0);
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent2=volactuel2;if (vol
-
8/4/2019 tljaigeage programme 18F452
6/13
volactuel2=vol;
volprecedent2=vol;
}
else if (SOMME>volactuel2) {
volactuel2=vol;
livraison2=volactuel2-volprecedent2;
}
}
if (i==3 ){
printf("\rSTOCK SSP1 : %6.2lu L ", vol );
printf("\r\n\nLa hauteur SSP1 est: %6.2f Cm\n\n", height*100.);
printf(lcd_putc,"\fSTOCK SSP1: %U%U%U L\n", VOLHi ,VOLLo,VOL0);
if (nbimpulsions > 15000) buz1();
IF( input(PIN_A4)) volprecedent3=volactuel3;
if (volvolactuel3) {
volactuel3=vol;
livraison3=volactuel3-volprecedent3;
}
}
if (i==4 ){
printf("\rSTOCK PETROLE : %6.2lu L ", vol );
printf("\r\n\nLa hauteur PETROLE est: %6.2f Cm\n\n", height*100.);
printf(lcd_putc,"\fSTOCK PETROLE: %U%U%U L\n", VOLHi ,VOLLo,VOL0);
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent4=volactuel4;
if (vol
-
8/4/2019 tljaigeage programme 18F452
7/13
else if (SOMME>volactuel4) {
volactuel4=vol;
livraison4=volactuel4-volprecedent4;
}
}
if (i==5 ){
printf("\rSTOCK GASOIL2 : %6.2lu L ", vol );
printf("\r\n\nLa hauteur GASOIL2 est: %6.2f Cm\n\n", height*100.);
printf(lcd_putc,"\fSTOCK GASOIL2: %U%U%U L\n", VOLHi ,VOLLo,VOL0);
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent5=volactuel5;
if (volvolactuel5) {
volactuel5=vol;
livraison5=volactuel5-volprecedent5;
}
}
}
//////////////////////////////////////////////////////////////////////////////
void MENU_DERNIERES_LIVRAISONS (void)
{
DELAY_ms(100);
// AFFIliv ();
if (i==0 ) printf( "\r\n LES DERNIERES LIVRAISONS SONT: ");
if (i==1 ){
liv=livraison1;AFFIliv ();
-
8/4/2019 tljaigeage programme 18F452
8/13
printf(lcd_putc,"\fLIVRAISON GASOIL1: %U%U%U L\n", LIVHi ,LIVLo,LIV0);
printf("\rLIVRAISON GASOIL1 : %6.2lu Litres ", liv );
}
if (i==2 ) {
liv=livraison2;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON SUPER1: %U%U%U L\n", LIVHi ,LIVLo,LIV0);
printf("\rLIVRAISON SUPER1: %6.2lu Litres ", liv );
}
if (i==3 ) {
liv=livraison3;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON SSP1: %U%U%U L\n", LIVHi,LIVLo,LIV0);
printf("\rLIVRAISON SSP1 : %6.2lu Litres ", liv );
}
if (i==4 ){
liv=livraison4;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON PETROLE: %U%U%U L\n", LIVHi,LIVLo,LIV0);
printf("\rLIVRAISON PETROLE : %6.2lu Litres ", liv);
}
if (i==5 ) {
liv=livraison5;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON GASOIL2: %U%U%U L\n", LIVHi,LIVLo,LIV0);
printf("\rLIVRAISON GASOIL2: %lu Litres ", liv );
}
}
//////////////////////////////////////////////////////////////////////////////
void VERIFICATION_EXISTENCE_EAU (void)
{
hot=floor((nbimpulsions-CINITEAU[i] )/1000.);DELAY_ms(100);
-
8/4/2019 tljaigeage programme 18F452
9/13
if (i==0 )
{
printf( "\r\n VERIFICATION EXISTENCE D'EAU: ");
}
if (i==1 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU GASOIL1: %lu Cm ", hot );
printf(lcd_putc,"\fNIVEAU D'EAU GASOIL1: %U Cm\n", hot1);
}
if (i==2 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU SUPER1 : %lu Cm ", hot );
printf(lcd_putc,"\fNIVEAU D'EAU SUPER1: %U Cm\n", hot1);
}
if (i==3 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU SSP1 : %lu Cm ", hot );
printf(lcd_putc,"\fNIVEAU D'EAU SSP1: %U Cm\n", hot1);
}
if (i==4 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU PETROLE: %lu Cm ", hot );
printf(lcd_putc,"\fNIVEAU D'EAU PETROLE: %U Cm\n", hot1);
}
if (i==5 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU GASOIL2: %lu Cm ", hot );
printf(lcd_putc,"\fNIVEAU D'EAU GASOIL2: %U Cm\n", hot1);
}
}//////////////////////////////////////////////////////////////////////////////
-
8/4/2019 tljaigeage programme 18F452
10/13
void STOCK_EAU (void)
{
output_bit(PIN_C1,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,0) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void STOCK_LIVRAISON (void)
{
output_bit(PIN_C4,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void INITIALISATION_COMPTAGE (void)
{
output_bit(PIN_C5,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void TEMPORISATION_LUMIERE (void)
{
output_bit(PIN_C0,1) ;
output_bit(PIN_C4,0) ;
output_bit(PIN_C5,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_C1,0);
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void MODE_AUTO (void){
-
8/4/2019 tljaigeage programme 18F452
11/13
output_bit(PIN_C0,1) ;
output_bit(PIN_C4,0) ;
output_bit(PIN_C5,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_C1,0) ;
output_bit(PIN_A5,0) ;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
VOID main() {
port_b_pullups(TRUE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
//setup_ccp1(CCP_CAPTURE_RE);
setup_ccp1(CCP_CAPTURE_RE|CCP_CAPTURE_DIV_16);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_2(T2_DISABLED,0,1);
lcd_init();
while (1)
{
for (j=0;j
-
8/4/2019 tljaigeage programme 18F452
12/13
output_E(i); // COMMANDE DES MULTIPOLEXEURS ADRESSAGE
DELAY_ms(100);
IF((input(PIN_A3))& (input(PIN_A2) )) MENU_DERNIERES_LIVRAISONS ();
IF ((input(PIN_A2) )&(!input(PIN_A3)))
{
DETERMINATION_VOLUME ();
MENU_STOCK (); // AFFICHAGE STOCK DE CAARBURANT
}
IF (input(PIN_A0)) VERIFICATION_EXISTENCE_EAU ();
IF( !input(PIN_B0)) STOCK_EAU (); // COMMUTATION EAU /CARBURANT
IF( !input(PIN_B2)) STOCK_LIVRAISON (); // COMMUTSTOCK LIVRAISON
IF( !input(PIN_B3)) INITIALISATION_COMPTAGE (); // INITIAL memoire
IF( !input(PIN_B4)) TEMPORISATION_LUMIERE (); //LUMIERE
IF(! input(PIN_B1))
{
MODE_AUTO ();
break; // RETOUR EN MODE AUTO initalisation
}
}
}
MODE_AUTO ();
}
}//////////////////////////////////////////////////////////////////////////////
-
8/4/2019 tljaigeage programme 18F452
13/13
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////