[Programmation] CPU à 97% du PIC16F877A ???
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

CPU à 97% du PIC16F877A ???



  1. #1
    ocean312

    CPU à 97% du PIC16F877A ???


    ------

    Salut à tous

    J’ai un projet qui est constitué d'un pic16f877a, d'un DS1307 et d'un affichage 7 segments pour réaliser une sonnerie automatique de mon lycée.
    le problème c'est lorsque j'appelle la fonction sonnerie(), contient plusieurs tests, le PIC ne répond plus et avec ISIS il affiche un taux d'utilisation de CPU de 97%.

    Qu'est ce que je dois faire ????

    Les heures de sonnerie sont mentionnées sous forme de commentaires

    Code:
    void Sonnerie()
    {
     short int s,h,m;
     s=second + second10*10;
     m=minute +minute10*10;
     h=hour + hour10*10;
     if (day != 1 )
        {
          //07:35
          if (m==35 && h==7 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //07:45
          if (m==45 && h==7 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //08:45
          if (m==45 && h==8 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //09:40
          if (m==40 && h==9 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //09:50
          if (m==50 && h==9 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //10:45
          if (m==45 && h==10 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //11:45
          if (m==45 && h==11 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          PORTE.B0=0;
        }
      
    if (day!=6 && day!=7 && day != 1)
        {
          //14:05
          if (h==14 && m==5 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //14:15
          if (h==14 && m==15 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //15:15
          if (h==15 && m==15 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //16:10
          if (h==16 && m==10 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //16:20
          if (h==16 && m==20 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //17:15
          if (h==17 && m==15 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
          //18:15
          if (h==18 && m==15 && s < 2)
              {PORTE.B0=1;delay_ms(2000);}
    
          PORTE.B0=0;
        }
    }
    et merci pour vos aides

    -----
    Dernière modification par Antoane ; 20/01/2016 à 11h43. Motif: Ajout balises code

  2. #2
    invitee05a3fcc

    Re : CPU à 97% du PIC16F877A ???

    Bonjour ocean312 et bienvenue sur FUTURA
    Citation Envoyé par ocean312 Voir le message
    le problème c'est lorsque j'appelle la fonction sonnerie(), contient plusieurs tests, le PIC ne répond plus et avec ISIS il affiche un taux d'utilisation de CPU de 97%.
    Ca fait des années que je ne programme plus en µC , mais ton soft n'a pas l'air génial :
    [#] {PORTE.B0=1;delay_ms(2000);}[/#]
    - Cette ligne apparait une multitude fois . je pense qu'on peut l'écrire qu'une seule fois
    - Plus grave . L'appel à delay_ms qui est bloquant tant que la tempo n'est pas terminée

    Il faut positionner PORTE.B0=1 , lancer un timer de 2 secondes, et quand l'interruption de fin de timer arrive faire PORTE.B0=0

  3. #3
    Pierrre

    Re : CPU à 97% du PIC16F877A ???

    bonjour

    97% c'est le taux d'utilisation du processeur du PC pour la simulation, pas du pic ! et dans ce cas la simu plante ou tourne au ralenti ...

  4. #4
    inviteeb160de1

    Re : CPU à 97% du PIC16F877A ???

    Ca ne veut rien dire 97% d'utilisation du PIC...vu que tu ne gères aucun mode veille et ne touche pas à la clock, il tourne en permanence et donc 100% utilisation...

  5. A voir en vidéo sur Futura
  6. #5
    ocean312

    Re : CPU à 97% du PIC16F877A ???

    Merci pour votre réponse.
    mais des que je fait appel à la fonction sonnerie() le 7 segment n'affiche pas l'heure.
    je vais tester de mettre les temps de sonneries dans un tableau

  7. #6
    invite5637435c

    Re : CPU à 97% du PIC16F877A ???

    Bonsoir,

    tu peux aussi réduire tes if en cascade en utilisant le "||" (OU) vu que les actions associées sont toutes les mêmes dans la première partie et idem pour la deuxième partie.
    Code:
    if ((m==35 && h==7 && s < 2) || (m==45 && h==7 && s < 2) || (m==45 && h==8 && s < 2)
       || (m==40 && h==9 && s < 2) || (m==50 && h==9 && s < 2) || (m==45 && h==10 && s < 2) || (m==45 && h==11 && s < 2))
              {PORTE.B0=1;
                delay_ms(2000);
              }

    Pour ton afficheur vu qu'on ne voit pas le code je ne peux pas t'aider.
    Il faut utiliser les interruptions pour multiplexer la commande des afficheurs, si tel n'est pas le cas tu risques en effet de bien planter ton affichage.
    @+

Discussions similaires

  1. Période PWM PIC16F877A
    Par invite3df4a7fe dans le forum Électronique
    Réponses: 3
    Dernier message: 17/11/2014, 21h01
  2. Interruption et PIC16F877A
    Par invite639d7aaf dans le forum Électronique
    Réponses: 7
    Dernier message: 18/05/2014, 15h34
  3. Pic16f877a!
    Par invite6ab74433 dans le forum Électronique
    Réponses: 0
    Dernier message: 24/05/2008, 18h34
  4. pic16f877A ROM
    Par inviteca539e75 dans le forum Électronique
    Réponses: 5
    Dernier message: 07/08/2007, 14h51
  5. adc + pic16F877A+LCD
    Par invite412b515c dans le forum Électronique
    Réponses: 0
    Dernier message: 29/05/2007, 23h59
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...