Problème avec le timer2
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Problème avec le timer2



  1. #1
    invite71317231

    Problème avec le timer2


    ------

    Slt,
    je veux utiliser le timer 2 pour faire une interruption chaque 1µs, j'utilise mikroc pro
    Code:
    void interrupt (){
              if (INTCON.TMR2IF) {
              portd=0XFF;
              
               }
               intcon.TMR0IF=0;
    
    }
    void main(){
         portd=0X00;
         trisd=0X00;
         GIE_bit=1;
         RCIE_bit=1;
         PEIE_bit=1;
         intcon.TMR2IE=1;
         t2con|=2;
         TMR2=68;
         intcon.TMR2ON=1;
    
         
       while(1){
              }
    }
    le programme n'entre jamais dans l'interruption. Est ce que vous pouvez m'aider.

    -----

  2. #2
    invite03481543

    Re : Problème avec le timer2

    Bonjour,

    quel PIC utilisez-vous?

    A première vue il est normal que ça ne fonctionne pas vous ne remettez pas le bon flag à 0
    Vous écrivez :

    Code:
    intcon.TMR0IF=0;
    au lieu de:

    Code:
    intcon.TMR2IF=0;
    il faudrait également initialiser le flag à 0 avant d'autoriser PEIE ET GIE qui doivent être à la fin.

    Pour constater si votre interruption est active écrivez plutôt la chose suivante:

    Code:
    void interrupt (){
              if (INTCON.TMR2IF) {
              PORTD = !PORTD;          
               }
               intcon.TMR2IF=0;
    
    }
    Vous ferez clignoter vos leds (si ce sont des leds bien sur) sur le portD au rythme de l'interruption, même si à 1µs vous ne verrez rien (oscillo nécessaire).lol

    Bon continuation.
    Dernière modification par HULK28 ; 25/12/2010 à 12h27.

  3. #3
    invite71317231

    Re : Problème avec le timer2

    Merci pour votre aide Hulk, le code marche très bien . j'utilise un pic 18F4550
    Code:
    unsigned char cnt=0;
    void interrupt (){
              if (pir1.TMR2IF) {
              cnt++;
              if(cnt==7){
              portd=!portd;
              cnt=0;
              }
             }
     intcon.TMR2IF=0;
    }
    void main(){
         portd=0X00;
         trisd=0X00;
         t2con=6;
    
         pie1.TMR2IE=1;
         intcon.PEIE=1;
         pir1.TMR2IF=0;
         TMR2=68;
         intcon.GIE=1;
         RCIE_bit=1;
         PEIE_bit=1;
       while(1){
              }
    }
    En fait je veux créer un signal pwm en utilisant le timer0, timer1, timer2 et le timer3 pour commander le vitesse de 4 moteurs dc

  4. #4
    Forhorse

    Re : Problème avec le timer2

    Pourquoi ne pas utiliser directement un PIC18F qui integre d'origine un module PWM prévu pour ce genre d'application (18F2431 par exemple) ?

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

    Re : Problème avec le timer2

    Je besoin de 4 sorties pwm,

  7. #6
    Forhorse

    Re : Problème avec le timer2

    Le 18F4x31 à un "Power Control PWM module" à 4 canaux

  8. #7
    invite71317231

    Re : Problème avec le timer2

    Merci Forhorse pour l'info, mais ici en tunisie on a pas le choix entre les pic, on doit se débrouiller avec des 16F877 ou des 18F2550 même les 18F4550 sont rares

  9. #8
    invite03481543

    Re : Problème avec le timer2

    Il faudrait en savoir plus sur les plages de variations à utiliser.
    On peut faire un PWM soft ou se servir des 2 CCPx du PIC16F877.

    Développez plus votre besoin.

  10. #9
    invite71317231

    Re : Problème avec le timer2

    Je suis en train de créer un robot omnidirectionnel avec des "mecanum wheel". Il me faudra 4 moteurs commandé séparément donc 4 sortie pwm

  11. #10
    RISC

    Re : Problème avec le timer2

    Salut Mazen,

    On peut bien sur faire des PWM par soft mais tout dépend de la fréquence et de la résolution .

    Tes 4 canaux ont-ils la même fréquence (période) ?
    Avec quelle résolution t la PWM : 4bits, 6bits, 8bits,...

    Attention ...par soft cela limite beaucoup la fréquence max / résolution.

    Quelle dommage que tu ne puisses pas utiliser des PICs qui ont déjà ces unités en hardware toutes faites...(CCP ou ECCP)

    a+

  12. #11
    invite71317231

    Re : Problème avec le timer2

    we c dommage,
    les 4 sorties pwm ont la même fréquence (20KHZ). je ne suis pas sure à propos la résolution peut être 8bit (255 valeurs moyennes différentes).
    j'ai essayer pwm3_init(5000); juste pour le test pour un pic 18F4431 mais le compilateur ne l'accepte pas

  13. #12
    RISC

    Re : Problème avec le timer2

    Salut,

    Si tes PWM ont une fréquence de 20kHz, je ne vois pas comment tu vas t'en sortir pour avoir 8 bits de résolution...il te faudrait une fréquence d'interruption de 20.000 x 256 = 5.000.000 MHz...Ce qui n'est pas possible avec un PIC18.
    Seule solution, réduire fortement la résolution ou utiliser un PIC avec des PWM hardware...

    a+

  14. #13
    invite2f1b7080

    Re : Problème avec le timer2

    Salut Mazen,
    je voulais savoir si tu avais réussi à créé tes 4 PWM, car je suis dans la meme impasse que toi, je doit créer plus de sorties PWM que j'en ai de prévu sur mon uC.
    Si tu as réussi, est-il possible que tu m'explique comment tu as fais?
    Merci

  15. #14
    invite71317231

    Re : Problème avec le timer2

    Salut titilaflamme,
    j'ai trouvé la solution pour commander 4 signaux pwm en utilisant le TIMER2 seulement ,
    Code:
    unsigned char vitess1=10;
    unsigned char vitess2=110;
    unsigned char vitess3=20;
    unsigned char vitess4=220;
    unsigned char compteur;
    void interrupt() {
    compteur++;
      if (TMR2IF_bit) {
        if(compteur==vitess1){
        portb.RB0=0;
        }
        if(compteur==vitess2){
        portb.RB1=0;
        }
        if(compteur==vitess3){
        portb.RB2=0;
        }
        if(compteur==vitess4){
        portb.RB3=0;
        }
        if(compteur==255){
        compteur=0;
        portb=0XFF;
        }
        TMR2IF_bit = 0;
        TMR2 = 0;
      }
    }
    
    
    void main() {
      PORTB = 0xFF;
      TRISB =   0;
      T2CON = 0x04;
      TMR2  =   0;
      TMR2IE_bit = 1;
      INTCON = 0xC0;
    
      while (1) {
      }
    }

Discussions similaires

  1. Timer2 PIC16F
    Par olivier_elec dans le forum Électronique
    Réponses: 7
    Dernier message: 19/05/2010, 22h41
  2. PIC16f628 : timer0 et timer2 combinés
    Par invitee1bdeaaa dans le forum Électronique
    Réponses: 3
    Dernier message: 20/08/2009, 22h43
  3. Pic18f2525 pwm et timer2
    Par Haox dans le forum Électronique
    Réponses: 3
    Dernier message: 01/06/2009, 19h30
  4. Réponses: 10
    Dernier message: 22/03/2009, 10h34
  5. probleme avec vista -> lecture du son avec fichier .mpg
    Par invite7f1547ae dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 23/01/2008, 22h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...