téléjaigeage programme 18F452

download téléjaigeage programme 18F452

of 13

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

    //////////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////////