Un petit problème au pic 16f877a
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Un petit problème au pic 16f877a



  1. #1
    inviteac07b6ba

    Un petit problème au pic 16f877a


    ------

    Bonjour,
    j'ai un petit problème au pic, j'ai fait un projet de "contrôleur de température",
    l'aidé du projet " l'utilisateur entrer une consigne de température a l'aide de deux bouton "INC incrémentation ou DES descend", et le pic va générer pour qu'il donne la décision que la résistance chauffante marche, ou la ventilateur.
    le petit problème, c'est que les bouton INC et DES ne marche pas, une fois que j'appui sur INC il incrément (passe de 0 a 1), mais si je relâcher le bouton,
    la valeur retourne a 0.
    merci d'aidez moi
    remarque:
    le programme est bien marché dans Isis,
    Temp Reel ou Now temp: c'est la température mesurer par le capteur
    Cons temp: c'est la consigne
    les résistances des bottons est de 10k

    -----
    Images attachées Images attachées

  2. #2
    inviteac07b6ba

    Re : Un petit problème au pic 16f877a

    Voila le code
    Code:
    int temp_res;
    char temp[12];
    unsigned int rtemp=10;
    char ntemp[10];
    
    sbit LCD_RS at RB2_bit;
    sbit LCD_EN at RB3_bit;
    sbit LCD_D4 at RB4_bit;
    sbit LCD_D5 at RB5_bit;
    sbit LCD_D6 at RB6_bit;
    sbit LCD_D7 at RB7_bit;
    
    sbit LCD_RS_Direction at TRISB2_bit;
    sbit LCD_EN_Direction at TRISB3_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
      Lcd_Cmd(_LCD_FIRST_ROW);
      void adc()
      {
      temp_res = ADC_Read(2);   // Get 10-bit results of AD conversion
      temp_res =  (temp_res *5)/10;
      IntToStr(temp_res,temp);
      }
      void print()
      {
      delay_ms(5);
      Lcd_Cmd(_LCD_CLEAR);
      delay_ms(5);
      lcd_out(1,1,"NOW Reel") ;
      delay_ms(5);
      lcd_out(2,1,"Cons temp") ;
       delay_ms(5);
      }
      void test()
      {
      if(temp_res>rtemp)
      {
      PORTC=0b00000101; //cool
      }
      if(temp_res<rtemp)
      {
     PORTC=0b00001010;//hot
      }
     if(temp_res==rtemp)
      {
     PORTC=0x00;
      }
      }
    
      void main()
      {
    
      TRISA =0b10;
      TRISD =0x11;
      TRISC =0x00;
    
      Lcd_Init();
      delay_ms(50);
      Lcd_Cmd(_LCD_CURSOR_OFF);
      delay_ms(50);
      ////////////////////////////////
      lcd_out(1,4,"Controle") ;
      delay_ms(50);
      lcd_out(2,1,"de Temperature") ;
      delay_ms(2500);
      Lcd_Cmd(_LCD_CLEAR);
      lcd_out(1,4,"Realise par") ;
      delay_ms(50);
      lcd_out(2,4,"Hadoudi") ;
      delay_ms(2000);
      Lcd_Cmd(_LCD_CLEAR);
      lcd_out(1,4,"Chouklati") ;
      delay_ms(50);
      lcd_out(2,4,"Farissi") ;
      delay_ms(2000);
      Lcd_Cmd(_LCD_CLEAR);
      lcd_out(1,4,"Encadre Par:") ;
      delay_ms(50);
      lcd_out(2,4,"Benboujemaa") ;
      delay_ms(2000);
      Lcd_Cmd(_LCD_CLEAR);
      lcd_out(1,4,"Souhane") ;
      delay_ms(50);
      lcd_out(2,4,"2011/2012") ;
      delay_ms(2000);
      print();
      do
        {
        IntToStr(rtemp,ntemp);
        lcd_out(2,10,ntemp);
        delay_ms(200);
        lcd_out(1,10,temp) ;
        delay_ms(200);
        test();
        if(portd.f1==0 && rtemp>0)
        {
             rtemp--;
    
             delay_ms(250);
         }
         if(portd.f0==0&&rtemp<=100)
         {
            rtemp++;
    
            delay_ms(250);
    
           }
            adc();
           }
        while(1);
    
         return;
        }

  3. #3
    Gérard

    Re : Un petit problème au pic 16f877a

    ISIS n'est pas la vrai vie.
    Ils sont déclarés où tes BP ?
    Il n'y a aucun commentaire !

  4. #4
    inviteac07b6ba

    Re : Un petit problème au pic 16f877a

    il sont déclaré ici:
    TRISD =0x11;

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

    Re : Un petit problème au pic 16f877a

    Citation Envoyé par hahamoh Voir le message
    il sont déclaré ici:
    TRISD =0x11;
    OK, je vais aussi deviner le reste ...

    Toujours pas de commentaires.

  7. #6
    inviteac07b6ba

    Re : Un petit problème au pic 16f877a

    int temp_res; //Déclarer que la valeur variateur de température est un nombre entier
    char temp[12]; //Déclarer chaine de caractère pour l’affichage sur LCD
    unsigned int rtemp=10; //Déclarer variable entier pour la consigne de temeprature
    char ntemp[10]; //Déclarer chaine de caractère pour l’affichage sur LCD
    sbit LCD_RS at RB2_bit; //Déclarer que le port RB2 de PIC est relié au pôle RS de LCD
    sbit LCD_EN at RB3_bit; //Déclarer que le port RB3 de PIC est relié au pôleEN de LCD
    sbit LCD_D4 at RB4_bit; //Déclarer que le port RB4 de PIC est relié au pôle D4 de LCD
    sbit LCD_D5 at RB5_bit; //Déclarer que le port RB5 de PIC est relié au pôle D5 de LCD
    sbit LCD_D6 at RB6_bit; //Déclarer que le port RB6 de PIC est relié au pôle D6 de LCD
    sbit LCD_D7 at RB7_bit; //Déclarer que le port RB7 de PIC est relié au pôle D7 de LCD
    sbit LCD_RS_Direction at TRISB2_bit; //Préparer les ports de PIC qui sont relie au LCD de prendre l’état d’entré ou sortie
    sbit LCD_EN_Direction at TRISB3_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
    Lcd_Cmd(_LCD_FIRST_ROW); //Code pour écrire à la 1ère ligne
    void adc() //Déclarer le convertisseur analogique numérique
    {
    temp_res = ADC_Read(2); //Lire la valeur de tension sur le port RB2, et transférer vers le convertisseur
    temp_res = (temp_res *5)/10; //Régler la valeur car chaque
    10mV= 1°c
    IntToStr(temp_res,temp); //Transfère la valeur de température au une continuation pour l’afficher sur LCD
    }
    void print() //Commencer a écrire sur LCD
    {
    Lcd_Cmd(_LCD_CLEAR); //Effacer LCD
    lcd_out(1,1,"NOW Reel") ; //Afficher “NOW Reel” dans la ligne 1, 1er case
    lcd_out(2,1,"Cons temp") ; //Afficher “Cons temp” dans la ligne 2, case 1
    }
    void test() //Appellee de function tester
    {
    if(temp_res>rtemp) //Si la température mesurée est plus grand que la consigne (il fait chaud)
    {
    PORTC=0b00000101;// Commencer à refroidisse dans le port C
    }
    if(temp_res<rtemp) //Si la température mesurée est inférieur à la consigne
    PORTC=0b00001010;// Commencer le chauffage dans le port C
    }
    if(temp_res==rtemp) //Si la mesure et la consigne sont egos
    {
    PORTC=0x00; //Arête touts
    }
    }
    void main() //Continue le programme
    {
    TRISA =0b10;
    TRISD =0x11; //déclarer que le port D, comme entrer de Botton
    TRISC =0x00; //Déclarer port C, comme sortie
    Lcd_Init(); //Allumer LCD
    Lcd_Cmd(_LCD_CURSOR_OFF); //Arrêter le curseur de LCD
    lcd_out(1,4,"Controle") ; //Ecrire Dans LCD, Et Attend 2500ms
    lcd_out(2,1,"de Temperature") ;
    delay_ms(2500);
    Lcd_Cmd(_LCD_CLEAR);
    lcd_out(1,4,"Realise par") ;
    lcd_out(2,4,"Hadoudi") ;
    delay_ms(2000);
    Lcd_Cmd(_LCD_CLEAR);
    lcd_out(1,4,"Chouklati") ;
    lcd_out(2,4,"Farissi") ;
    delay_ms(2000);
    Lcd_Cmd(_LCD_CLEAR);
    lcd_out(1,4,"Encadre Par:") ;
    lcd_out(2,4,"Benboujemaa") ;
    delay_ms(2000);
    Lcd_Cmd(_LCD_CLEAR);
    lcd_out(1,4,"Souhane") ;
    lcd_out(2,4,"2011/2012") ;
    delay_ms(2000);
    print(); //Affichage sur LCD
    do //Boucle infini
    {
    IntToStr(rtemp,ntemp); //Transfère la valeur de température à une continuation
    lcd_out(2,10,ntemp); //Afficher la valeur de température mesurée dans la ligne 2, case 10
    lcd_out(1,10,temp) ; //Afficher la valeur de température souhaitée dans la ligne 2, case 10
    test(); //Apelle de function test
    if(portd.f1==0 && rtemp>0) //Test le bouton de DES
    {
    rtemp--; //Diminuer la température a chaque impulsion sur le bouton DES
    delay_ms(250); //Un retard pour être réalité
    }
    if(portd.f0==0&&rtemp<=100) //Test de button INC
    {
    rtemp++; //Incrémenter la température à chaque impulsion sur le bouton INC
    delay_ms(250); //Un retard pour être réalité
    }
    adc(); //Appellee de Convertisseur
    while(1); //Finir du boucle infini
    return; //Fin de programme
    }

Discussions similaires

  1. probleme de programmation d'un PIC 16F877A !!
    Par rafik16 dans le forum Électronique
    Réponses: 9
    Dernier message: 25/04/2012, 21h07
  2. pic 16F877A
    Par invite636b8579 dans le forum Électronique
    Réponses: 22
    Dernier message: 01/04/2009, 16h00
  3. CAN pic 16f877A
    Par invite85bfc8b3 dans le forum Électronique
    Réponses: 1
    Dernier message: 11/08/2008, 14h39
  4. pic 16f877a
    Par invited2ae1532 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/02/2008, 11h49
  5. PIC 16F877A : Problème MPLab/Tmr2
    Par invite75aa5783 dans le forum Électronique
    Réponses: 4
    Dernier message: 19/04/2007, 16h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.