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

Timer2



  1. #1
    narakphysics

    Timer2


    ------

    Bonjour à vous tous et à toutes
    je désire commander un servo moteur en utilisant le TIMER2. mais le programme ça marche pas , je reçois rien sur la sortie.
    Voici les différents equations utilisées:
    avec K1: le pré diviseur d'horloge, dans mon cas j'ai pris 1
    avec K2 le diviseur de sortie, K2=1
    La configuration des registres:
    Code:
    TRISC=0x00;
    PORTC=0x00;
    TMR2 = 0; 
    PR2 = 99; // Registre de période à 100
    INTCON=0xC0; k1=0 et K2=0
    TMR2IE_bit = 1; // Activation interruption Timer 2
    TMR2IF_bit = 0; // Mise à 0 indicateur int.
    T2CON = 0b00000100;
    Donc:
    les angles de rotation sont:
    0°==>1500µs càd 15*100µs
    50°==>2000 càd 20*100µs
    voici le reste de la main:
    Code:
    while(1){down=15;
    delay_ms(2000);
    down=20;
    delay_ms(2000);
    }
    L'interruption:
    Code:
    void interrupt(){if(TMR2IF_bit==1){ 
         cnt++;
         if(cnt==down) portc.F0=0;
    
    
         if(cnt==200) {portc.F0=1;cnt=0;}
         TMR2IF_bit=0;
         TMR2=0;
         }
    }
    Prenons le cas du 0°: il faut incrémenter cnt 15 fois. Donc selon le programme ci-dessous: l'état 1 dure 1.5ms et l'état bas 18.5ms dont le total: 200*100µs
    Pourriez vous me dire où je suis trompé ??
    merci d'avance

    -----
    Dernière modification par narakphysics ; 14/10/2012 à 13h55.

  2. Publicité
  3. #2
    RISC

    Re : Timer2

    Salut,

    Avant de détailler le TIMER2 il faudrait d'abord dire quel PIC tu utilises (parmi les 900 références...) ;=)
    A quelle vitesse tourne ton PIC (quartz externe, horloge interne, PLL,...)

    Il faudrait aussi montrer ton code d'initialisation

    a+
    Dernière modification par RISC ; 14/10/2012 à 17h17.
    Ma marotte ? les microcontrôleurs ;=)

  4. #3
    narakphysics

    Re : Timer2

    Re.m
    Merci de votre réponse
    Le PIC utilisé est 16F877A;
    Fréquence interne est 4MHz.
    A+

  5. #4
    narakphysics

    Re : Timer2

    Voici tous le code:
    Code:
    int cnt=0;
    int down=0;
    void interrupt(){
    if(TMR2IF_bit==1){ 
         cnt++;
         if(cnt==down) {portc=0;}
         if(cnt==5000) {portc=1;cnt=0;}
         TMR2IF_bit=0;
         TMR2=0;
         }
    }
    void main()
    {
    TRISC=0x00;
    PORTC=0x00;
    CMCON = 7; // Disable comparators
    TMR2 = 0; // RAZ TIMER 2
    PR2 = 99; // Registre de période à 100
    INTCON=0xC0;
    TMR2IE_bit = 1; // Activation interruption Timer 2
    TMR2IF_bit = 0; // Mise à 0 indicateur int.
    T2CON = 0b00000100; 
    while(1){
    down=15;//moteur en arret
    delay_ms(1000);
    down=20;//moteur en avance vitesse maximal
    delay_ms(1000);
    
    
    }
    }

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    RISC

    Re : Timer2

    Salut,

    Dans ton interruption il ne faut pas toucher à TMR2 (TMR2=0).
    Ce timer est auto-reload, il est automatiquement remis à zero quand tu entres dans l'interruption.

    Dans le programme principal il vaudrait mieux changer l'ordre de quelques instructions
    Code:
    TMR2IF_bit = 0;
    TMR2IE_bit = 1;
    INTCON = 0xC0;
    Pour le reste ton programme semble correct.
    Si tu as 4MHz interne (Fosc) la fréquence d'entrée de ton timer2 est à 4MZ / 4 = 1MHz.
    Tes pré et post scalers sont à 1 donc Finterruption = 1MHz / ( 1 x 100 x 1)= 10kHz (100us)

    Quel debugger utilises-tu ?
    Mets un point d'arrêt dans l'interruption

    a+
    Ma marotte ? les microcontrôleurs ;=)

  9. #6
    narakphysics

    Re : Timer2

    Re.
    Merci de votre réponse
    j'utilise Mikroc.
    Je sais pas comment mettre un point d'arrêt ?!
    A+

  10. Publicité
  11. #7
    narakphysics

    Re : Timer2

    Re.
    Citation Envoyé par RISC Voir le message
    Dans le programme principal il vaudrait mieux changer l'ordre de quelques instructions
    Code:
    TMR2IF_bit = 0;
    TMR2IE_bit = 1;
    INTCON = 0xC0;
    J'ai changé l'ordre ...j'ai même changé le servo moteur mais toujours le même problème!!

  12. #8
    RISC

    Re : Timer2

    Salut,

    As-tu retiré la ligne TMR2=0 dans ton interruption ?

    a+
    Ma marotte ? les microcontrôleurs ;=)

  13. #9
    narakphysics

    Re : Timer2

    Re.
    Oui
    A+

  14. #10
    RISC

    Re : Timer2

    Salut ,

    Sans déboguer, à ce stade difficile de dire ou se trouve le problème...
    Peux-tu poster un schéma de ta carte électronique ?

    a+
    Ma marotte ? les microcontrôleurs ;=)

  15. #11
    narakphysics

    Re : Timer2

    Salut
    Voici le schéma:
    A+
    Images attachées Images attachées

  16. #12
    RISC

    Re : Timer2

    Salut,

    Pas étonnant que cela ne fonctionne pas...
    Il y a de multiples problèmes...

    As-tu regardé la spécification de ton servo-moteur ???
    Le PIC ne peut délivrer qu'une 20mA....

    Si tu as un oscillosope tu débranches ton servomoteur et tu regardes le signal sur RC0.
    As-tu une datasheet ou un lien sur ton servomoteur (caractéristiques électriques).

    Pourquoi as-tu choisis un PIC avec tant de broches ?????

    a+
    Ma marotte ? les microcontrôleurs ;=)

  17. Publicité
  18. #13
    narakphysics

    Re : Timer2

    Re.
    Citation Envoyé par RISC Voir le message
    Salut,
    Pas étonnant que cela ne fonctionne pas...
    Il y a de multiples problèmes...
    As-tu regardé la spécification de ton servo-moteur ???
    Le PIC ne peut délivrer qu'une 20mA....

    Si tu as un oscillosope tu débranches ton servomoteur et tu regardes le signal sur RC0.
    As-tu une datasheet ou un lien sur ton servomoteur (caractéristiques électriques).

    Pourquoi as-tu choisis un PIC avec tant de broches ?????

    a+
    La référence du servo est HS 322-HD
    pour le pic, les PORTs D et E sont utilisés aussi! j'ai pas dessiné les autres parties, en fait se sont des matrice à LEDs!
    Le pic ne délivre rien!! j'ai réalisé une simulation sous ISIS dont j'ai importé le programme en modifiant juste la temporisation pour allumer une LED,
    Bref, La LED ne s'allume pas!!
    A+

  19. #14
    RISC

    Re : Timer2

    Salut,

    Oublie le simulateur. Quand on a des PB il faut les régler sur le vrai circuit car ton simulateur ne prend pas tout en compte...

    Je te recommande de faire un programme très très simple qui fait simplement clignoter une LED sur la broche RC0 SANS interruption.
    Il faut repartir de zéro quand on ne sait par ou commencer ;=)
    Une fois que tu auras validé que tu initialises correctement le port C et que tu controle correctement la sortie RC0 tu pourras passer à l'étape suivante.

    a+
    Ma marotte ? les microcontrôleurs ;=)

Discussions similaires

  1. Problème avec le timer2
    Par Mazen21 dans le forum Électronique
    Réponses: 13
    Dernier message: 14/05/2011, 18h31
  2. PIC 16F87xA, Timer2 et interruption
    Par Forhorse dans le forum Électronique
    Réponses: 1
    Dernier message: 12/01/2011, 19h49
  3. Timer2 PIC16F
    Par olivier_elec dans le forum Électronique
    Réponses: 7
    Dernier message: 19/05/2010, 22h41
  4. PIC16f628 : timer0 et timer2 combinés
    Par sabaks dans le forum Électronique
    Réponses: 3
    Dernier message: 20/08/2009, 22h43
  5. Pic18f2525 pwm et timer2
    Par Haox dans le forum Électronique
    Réponses: 3
    Dernier message: 01/06/2009, 19h30
Découvrez nos comparatifs produits sur l'informatique et les technologies.