Problème de programmation du 16F877 en language C
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Problème de programmation du 16F877 en language C



  1. #1
    invite52ab9892

    Problème de programmation du 16F877 en language C


    ------

    bon soire a tt ,bon je viens de calculé un déphasage entre deux signaux U1 et U2 ont des amplitudes sont respectivement les suivantes 5 ET 2 V volts ayant une fréquence de 50 HZ bon aprés une simulation sur isis et j'ai utiliser un compilater pic c COMPILER je ne trouve pas mes valeurs souhaité de déphasage pour une fréquence de 50HZ bien que mon programme donne des bonne valeurs de déphasage pour des fréquence de 0.05 HZ qui ma fait étonné !!!! j'arrive pas a trouvé mon bonheur s'il vous plais aider moi pour connaitre les erreurs dans le programme ou dans la simulation
    mon code source et le schéma sur isis sont les suivantes

    ################# Image effacée.
    Merci de suivre ces quelques conseils pour poster une image dans le forum.

    Pour la modération,

    yoda1234.



    Code:
    #include <16f877.h>
    #device ADC=10
    #fuses xt,nowdt,NOPROTECT,noput
    #use delay(clock=20000000)
    #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
    #include <lcd.c>
    #include <math.h>
    
    
    int32 n=0;
    
    
    #int_timer0
    void timer0_isr()
    {
    n++;
    }
    
    
    void main () 
    {
    int1 test_1, test_2;
    //***********programme de dephasage******************//
    //float a,b,c,e,f,g,R,X;
    //float tens_max,courant_max,dephasage,Veff,Ieff ;
    
    float temps, dephasage;
    float tens_anal_10,tens_anal_1,tens_num_1,tens_num_2,tens_anal_2,tens_anal_20;
    int8 Iter;
    float Freq=0.05;
    
    tens_anal_10 = 0.1;
    tens_anal_20 = 0.1;
    
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    enable_interrupts(int_timer0);
    enable_interrupts(GLOBAL);
    
    
    disable_interrupts(int_timer0);
    clear_interrupt(int_timer0);
    
    setup_port_A(all_analog);
    setup_adc(adc_clock_internal);
    
    
    while(true)
    {
      while(!input(pin_C0))
      {
       test_1=1;
       test_2=1;
       set_adc_channel(0);
       delay_us(10);
       
       while(test_1==1)
       {
         tens_num_1 =read_adc();
         tens_anal_1 = (tens_num_1 *(0.0048876)*2)-5;
         
         
         lcd_init();
         printf(lcd_putc,"Tens1=%2.5f\r",tens_anal_1);
         //printf("T1=%2.3f\r",tens_anal_1);
         
         if ((tens_anal_1>=0) && (tens_anal_10<0))
           {       
             set_timer0(0);
             n=0;
             clear_interrupt(int_timer0);
             enable_interrupts(int_timer0);
             test_1=0;
             tens_anal_10=tens_anal_1;
             //lcd_init();
             //printf(lcd_putc,"Tens1=%2.5f\r",tens_anal_1);         
             printf("Detected Tens1=%2.5f\r",tens_anal_1);
           }
          else
           {
             tens_anal_10 = tens_anal_1;
           }
        }
        
        set_adc_channel(1);
        delay_us (10);
        
        while (test_2==1)
        {
          tens_num_2=read_adc();
          tens_anal_2 = (tens_num_2 *(0.0048876))-2;
          
          lcd_init();
          printf(lcd_putc,"Tens2=%2.5f\r",tens_anal_2);     
          //printf("T2=%2.3f\r",tens_anal_2);
          
          if ((tens_anal_2>=0) && (tens_anal_20<0))
          { 
            Iter=get_timer0();
            disable_interrupts(int_timer0);
            clear_interrupt(int_timer0);
            temps = 0.0000512*n+Iter*0.0000002;
            dephasage =2*PI-((2*PI*Freq)*temps);
            test_2=0;
            tens_anal_20=tens_anal_2;
            
            //lcd_init();
            //printf(lcd_putc,"Tens2=%2.5f\r",tens_anal_2);
            printf("Detected Tens2=%2.5f\r",tens_anal_2);
            printf("temps=%3.5f\r",temps);
          }
          else
          {
            tens_anal_20=tens_anal_2;
          }
        }
        lcd_init();
        printf(lcd_putc,"Deph=%3.5f deg\r",dephasage*57.295779513);
        printf("Deph=%3.5f deg\r",dephasage*57.295779513);
       }
      }
    }

    -----
    Dernière modification par yoda1234 ; 27/04/2011 à 06h47. Motif: Effacement image externe et mise en place balise code

  2. #2
    invite207b23d4

    Re : :sos: problème de programmation du 16F877 en language C

    n'est pas facile...
    Dernière modification par yoda1234 ; 27/04/2011 à 06h48. Motif: Effacement image externe

  3. #3
    invite74b500b2

    Re : :sos: problème de programmation du 16F877 en language C

    Tu veux connaitre le déphasage entre deux signaux ? OK !
    Explique un peu la technique que tu comptes utiliser pour le faire (t'as utilisé le timer_0 et l'adc mais comment tu comptes t'en servir en fonction des variables que tu utilises).
    Déjà ça permettra de bien comprendre ton code.
    Enfin bref si ton code marche pour 0.05 hz et non pour 50 hz, tu devrais prendre en considération la fréquence interne de ton pic avec la demarche que tu utilises pour detecter le déphasage et voir à quelle fréquence maximale ton code peut être valable.
    NB : Si tu veux avoir beaucoup plus de réponde, poses ton problème sur le forum électronique (les pic c'est plutôt ce domaine)

Discussions similaires

  1. Problème Programmation 16F877
    Par invite11fdcbbe dans le forum Électronique
    Réponses: 22
    Dernier message: 10/07/2010, 20h27
  2. Pic 16f877 problème de programmation
    Par invite4bffdc16 dans le forum Électronique
    Réponses: 11
    Dernier message: 06/08/2009, 08h21
  3. Problème de programmation PIC 16F877, SAA 1064 et afficheurs 7 segments
    Par invite64e12149 dans le forum Électronique
    Réponses: 6
    Dernier message: 18/05/2009, 09h33
  4. programmation en language C???
    Par inviteb3fa1a10 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/06/2008, 09h37
  5. Language de programmation
    Par invite7f929152 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 12/01/2008, 14h44
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...