[Programmation] [Programmation] La gestion de Fonction
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

[Programmation] La gestion de Fonction



  1. #1
    terrdala

    Question [Programmation] La gestion de Fonction


    ------

    Bonjour,

    J'ai un projet a faire pour quelqu'un.

    Je vais expliqué son but en bref et de façons compréhensible car c'est pas si facile.

    Je doit créer un module qui doit check un contacte libre de potentielle qui est actionné via du 24V d'une chaîne de production.

    Le module doit remplir certaine condition :

    -Si le contacte est maintenu,le programme est en veille.

    -Si le contacte n'est plus détecté,il temporise 15 min avant d'enclenché une alarme qui va durée 3 min.

    -Si le contacte ne fait qu'une impulsion,le programme se met en pause 1h,mais si il il se maintien a nouveau ben sa repasse en veille permanente bien sur.

    J'ai commencé a faire le début qui consiste a faire la tempos de 15 minute puis 3 minute avec l'alarme.Ici dans le programme il n'est question que de détecté le contacte ou non (je programmerais l'impulsion plus tard).

    Code:
    // Definition PORTB Pin
    #define VoltCheck PORTB.B2
    #define Signal PORTB.B1
    
    // Set Variable
    bit alarme;
    unsigned long int time;
    unsigned int seconde;
    
    void interrupt()
    {
     if (INTCON.T0IF == 1)  // If TMR0 Overflowing
     {
      INTCON.T0IF = 0;  // Set Flag 0
      time++; // 10ms time incrémente
      TMR0 = 98; // Set TMR0 98 start value
     }
    }
    
    void Time15min()
    {
     seconde = 0;
     time = 0;
     
     while(seconde <= 3)
     {
      if (time == 100 ) // set 1000ms
      {
       time = 0;
       seconde++;
      }
     }
    }
    
    void Time3min()
    {
     seconde = 0;
     time = 0;
     
     while(seconde <= 3)
     {
      if (time == 100) // set 1000ms
      {
       time = 0;
       seconde++;
      }
     }
    }
    
    void main()
    {
     // Set Register Bank
     INTCON = 0b10110000; // Enable all INT and INT TOIE,INTE
     PORTB = 0; // Initialisation 0V
     TRISB = 0b00000101; // Set RB0 and RB2 Input
     OPTION_REG = 0b11001101; // Pull-up Off,rising,Presc ON select 1:64
     PCON.B3 = 1; // 4Mhz oscillator
    
    // Initialisation Variable
    alarme = 0;
    time = 0;
    seconde = 0;
    
    TMR0 = 98; // Set TMR0 98 start value
    
     while(1)
     {
      if (VoltCheck == 1)
      {
       Signal = 0;
       alarme = 0;
       seconde = 0;
       time = 0;
      }
      
      if (VoltCheck == 0)
      {
       Time15min();
       alarme = 1;
       
       if (alarme == 0)
       {
        Signal = 0;
       }
       
       if (alarme == 1)
       {
        Signal = 1;
        Time3min();
        alarme = 0;
       }
      }
     }
    }
    On remarque que j'ai activé le TIMER0 et je l'ai régler comme suit.Fosc/4=1us * 157 (TMR0 débute a 98 et non de 0),celas donne 157 us * un prescal de 64 donc 1048 us soit 10ms par débordement du TMR0.

    J'ai créer 2 fonction qui sont sensée gérer chaque tempos différente.Je note une while tant que la variable Seconde est inférieure ou égale a 3.

    Dans cette while vous remarquer l'incrémentation de la variable Seconde grâce a la variable timer qui est elle incrémentée toute les 10ms par le TMR0.

    Pour infos j'ai mit 300 pour 3000ms car c'est plus rapide pour voir si sa fonctionne en teste,que d'attendre les 15 min ect.

    Dans le main j'utilise des condition suivant l'étant de la broche d'entrée RB1 (VoltAlert) qui permet suivant son état d'appeler la fonction 15 minute et ensuite d'incrémenter la variable alarme qui suivant son état active RB2 (Signal) pour activé la sirène pendant 3 minute.

    Sauf que la sirène s'enclenche tous de suite après que le contacte soit rompu.J'ai cherche je ne vois pas ce que je fait de mal,j'ai l'impression que ma méthode de la fonction n'est pas possible a faire comme je l'ai fait.

    Qu'en pensez vous.

    Ceci est assez long donc prenez votre temps pour me répondre,pas de soucis.

    Cordialement.

    -----
    Dernière modification par terrdala ; 25/07/2016 à 10h48.
    <<La détermination mène a la satisfaction>>

Discussions similaires

  1. Gestion d'accès d'une passerelle piéton - Programmation Xbee
    Par ThomasPriol dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/05/2016, 16h07
  2. Programmation en java avec netbeans: gestion d'une médiathèque
    Par Marie120 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 22/12/2015, 23h01
  3. Programmation PIC pour gestion clavier matriciel
    Par Pitt64 dans le forum Électronique
    Réponses: 2
    Dernier message: 01/03/2015, 17h34
  4. Aide programmation C pour gestion d'un écran LCD
    Par invite55fe29e6 dans le forum Électronique
    Réponses: 4
    Dernier message: 19/11/2008, 02h08
Découvrez nos comparatifs produits sur l'informatique et les technologies.