Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Utilisation du module ADC avec le module PWM du PIC



  1. #1
    heri91

    Wink Utilisation du module ADC avec le module PWM du PIC

    Bonjour à tous,

    En faisant quelques recherche sur internet, je me suis lancé sur un petit projet utilisant un microcontrolleur PIC, mon choix se pose sur 16F88, au niveau électronique, ça ne me pose pas de souci particulier mais c'est plutôt le coté logiciel que j'aurai besoin de votre aide.

    Mon projet c'est de commander un système avec un signal PWM à rapport cyclique variable. La fréquence du signal pwm est fixée à 50khz, et la fréquence du quartz de mon micro est de 20mhz.

    Alors dans le vif du sujet, à l'entrée sur le port RA1 j'ai un signal variable analogique qui varie de 0 à 5V, suivant cette variation de tension, j'aurai en sortie sur le port RB3 un signal pwm de rapport cyclique conséquente, qui suit la formule suivante:

    Code:
    Rapp_cyclique = -0,2*Vin + 1
    ce qui me donne une relation entre Vin et rapport_cyclique en %, c'est à dire à 5V -> Rpp_cycl = 0% et à 0V->Rpp_cyl = 100%.

    Je programme en C avec mikroC, en simulant mon prog, je n'ai rien en sortie, je vous mets en bas ce code pour que vous puissiez regarder ce qui ne vas pas ou c'est ce que j'ai oublié:

    Code:
    void main() 
    { 
         unsigned int Result_ADC = 0, CCPR1L_CCP1CON_5_4; 
         unsigned float Vin_ANALOG, Vref = 5.0; 
         float alpha; 
         unsigned short Channel = 1; 
          
    
         //Configure RB3 to output 
          PORTB = 0; 
          TRISB =  0xF7; 
    
        //TMR2 prescaler and postscaler 
         TOUTPS3_bit = 0; TOUTPS2_bit = 0; TOUTPS1_bit = 0; TOUTPS0_bit = 0;    
         T2CKPS1_bit = 0; T2CKPS0_bit = 1;      //prescaler 1:4 
        
         //Set PWM period 
         PR2 = 0x18; 
    
         ANSEL = 0x02;         //RA1 configured in analog input 
         TRISA = 0x02;    
    
         ADCON1 &= 0xC0;      
         ADCON1 |= 0x80;       //ADFM = 1; Resultat: right justified 
         ADCON1 &= 0xB0;       //ADCS2 = 0; A/D clock divide by 2 disabled 
          
         //choice channel 1 
         ADCON0 =(ADCON0 & 0xC7) | (Channel << 3);    
    
         //choice conversion frequency Fosc/8 
         ADCON0 = (ADCON0 & 0x7F) | 0x40;    
          
        //Turn ON A/D module 
         ADCON0 |= (1<<ADON);          
        
       while(1)                //infinite loop for acquisition 
        { 
            
           Delay_us(20);   //acquisition time ~19,6µs 
           
           //Starts conversion 
           ADCON0 |= (1<<GO_DONE);      
            
           while(GO_DONE);     //wait until GO_DONE passes to 0 
    
           Result_ADC = (ADRESH << 8); 
           Result_ADC += ADRESL; 
            
           Vin_ANALOG = ((float)Result_ADC * Vref)/1024; 
    
           alpha =  - 0.2 * Vin_ANALOG + 1;         //operation of the duty cycle of pwm signal 
    
           CCPR1L_CCP1CON_5_4 = 4 * alpha * (PR2 + 1);         //Store CCPR1L:CCP1CON<5:4> results 
    
           CCPR1L = CCPR1L_CCP1CON_5_4 >> 2;           //store CCPR1L 
           CCP1CON &= 0xCF; 
           CCP1CON |= ((CCPR1L_CCP1CON_5_4 & 0x03)<<4);   //store CCP1CON<5:4> 
    
           T2CON |= 0x04;       // set timer2 ON 
    
    
            //configure PWM module 
           CCP1CON |= 0x0C;         //CCP1M3 = 1; CCP1M2 = 1;  
         } 
    }
    Je remercie d'avance ceux qui pourront m'aider à avancer dans ma réalisation.

    Cordialement

    -----


  2. Publicité
  3. #2
    DAUDET78

    Re : Utilisation du module ADC avec le module PWM du PIC

    et un 555 avec un comparateur pour faire le PWM ... c'est trop simple?
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  4. #3
    heri91

    Re : Utilisation du module ADC avec le module PWM du PIC

    Merci DAUDET, effectivement ça pourra très bien marcher mais je prefere utiliser un microcontrolleur par rapport à la souplesse, nombres de composants utilisés, extensions futures,....sinon par rapport à mon code quelqu'un trouve des choses à dire: des ajouts ou des choses à modifier?

    Cordialement

  5. #4
    vede

    Re : Utilisation du module ADC avec le module PWM du PIC

    bonsoir,

    attention, par défaut, la sortie PWM du 16F88 est PortB.0....
    pour utiliser le PortB.3 en sortie PWM, il faut configurer les
    fusibles CCP1_RB0 et CCP1_RB3...

    vede
    ;O]
    Dernière modification par vede ; 23/09/2009 à 18h13.

  6. #5
    heri91

    Re : Utilisation du module ADC avec le module PWM du PIC

    Bonjour,

    Merci pour la réponse Vede, il me semble que pour configurer RB3 en sortie PWM, il suffit juste de bien configurer le registre TRISB, dans mon cas égal à 0xF7, RB3 configuré en sortie, à moins qu'il faut d'autres choses en plus?

    C'est écrit dans le datasheet page 87, d'après vous est ce qu'il y a encore d'autres registres à configurer à part TRISB pour spécifier RB3 en sortie pwm?


    Cdt,

  7. A voir en vidéo sur Futura
  8. #6
    heri91

    Re : Utilisation du module ADC avec le module PWM du PIC

    Autant pour moi , effectivement, il faut configuer le registre CONFIG1, le bit 12 (CCPMX) à 0 pour allouer CCP1 en mode pwm à RB3.
    Sauf que sur mikroC, la configuration des bits se fait au moment où on genère le fichier .hex, et moi je l'ai bien spécifié RB3. là je suis un peu bloqué.

    Cdt,

  9. Publicité
  10. #7
    heri91

    Re : Utilisation du module ADC avec le module PWM du PIC

    Bonjour,

    Personne n'a aucune idée par rapport à mon problème? j'ai encore regardé le datasheet apparemment je crois que mon programme est bon mais manque de pratique peut être que j'ai oublié quelque chose en plus?

    Cdt,

  11. #8
    heri91

    Re : Utilisation du module ADC avec le module PWM du PIC

    Bonjour à tous,

    Merci pour votre soutien mais j'ai trouvé moi meme la solution , j'ai même ajouté l'affichage de la tension mesurée sur un lcd alphanumérique.

    Cdt,

  12. #9
    DAUDET78

    Re : Utilisation du module ADC avec le module PWM du PIC

    Citation Envoyé par heri91 Voir le message
    mais j'ai trouvé moi meme la solution
    Un forum est un lieu d'échange ..... pas pour toi ! Merci pour ceux qui voudrait faire le même montage
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

Sur le même thème :

Discussions similaires

  1. PIC18F1220 : génération des PWM par le module ECCP
    Par JC22 dans le forum Électronique
    Réponses: 16
    Dernier message: 06/03/2009, 09h46
  2. Piloter une LED directement en tension via un PIC (PWM et ADC)
    Par Rodrigue dans le forum Électronique
    Réponses: 16
    Dernier message: 25/02/2009, 21h29
  3. [PIC18F] Module PWM - Language C
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 21/10/2008, 14h40
  4. Utilisation du module USB d'un PIC
    Par schneiderj dans le forum Électronique
    Réponses: 9
    Dernier message: 16/09/2008, 09h17
  5. Module PWM integré PIC16F88
    Par AntiPaniK dans le forum Électronique
    Réponses: 3
    Dernier message: 22/01/2008, 18h27