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

horloge externe timer0



  1. #1
    sofiaaa

    horloge externe timer0


    ------

    Bonjour,
    je vais incrémenter timer0 a chaque front descendant d'une horloge externe,pour tmr0=5 une led s'allume.
    quelle est ma faute?
    merci d'avance.

    void interrupt() {
    if(tmr0==5)
    {portb=1;}
    intcon.f2=0;
    }
    void main() {
    TRISA=1;
    trisb=0;
    portb=0;

    intcon=0b10100000;
    option_reg=0b00100000;

    }
    cc.PNG

    -----

  2. Publicité
  3. #2
    kevin8z

    Re : horloge externe timer0

    Bonjour,

    Je n'ai pas regardé la configuration des registres mais la faute qui me saute au yeux c'est que dans l'interruption tu regarde si TMR0==5, hors une interruption est produite lorsque le TMR0 passe de 255 à 0 (donc ta condition de test sera toujours fausse).
    Il faudrait que tu initialise à chaque fois qu'il y a une interruption, TMR0 = 251

  4. #3
    sofiaaa

    Re : horloge externe timer0

    et si je veux compter un nombre précis de front descendant et allumer une led aprères (5 front par exemple) qu'est ce que je dois faire?

  5. #4
    kevin8z

    Re : horloge externe timer0

    Si ton programme sert juste à ça, il n'y a pas besoin des interruptions, tu fait tout dans le main() et tu incrémente un variable lorsque la broche de ton port passe de 1 à 0, quand elle passe à 5 tu allume ta led.

  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
    sofiaaa

    Re : horloge externe timer0

    int compteur=0;
    void main() {
    TRISA=1;
    trisb=0;
    portb=0;

    while(1)
    {
    if(porta.b4==0)
    {compteur++; }
    if(compteur==5)
    {portb.b0=1;
    delay_ms(1000);}
    }

    }
    avec ce programme la led s'allume dès le début de la simulation.

  9. #6
    antek

    Re : horloge externe timer0

    Ci-dessus tu ne comptes pas des fronts descendants, tu incrémentes 'compteur' tant que PORTA,4=0.

    Ton idée de comptage des fronts par tmr0 et interruption est bonne.
    Avant le comptage tu charges tmr0 avec [255-nombre fronts attendus]
    Ensuite tu détectes que le nombre de fronts est atteint par scrutation du flag tmr0if ou dans la routine interruption
    Dernière modification par antek ; 03/04/2015 à 11h46.

  10. Publicité
  11. #7
    sofiaaa

    Re : horloge externe timer0

    void interrupt() {
    portb=1;


    intcon.f2=0;
    }
    void main() {
    TRISA=1;
    trisb=0;
    intcon=0b10100000;
    option_reg=0b00100000;
    tmr0=250;
    j'ai essayé avec ce programme comme vous m'avez dit mais il n'a pas marché :/

  12. #8
    antek

    Re : horloge externe timer0

    Faudrait autoriser l'interruption TMR0, en sortie d'interruption recharger TMR0 avec la valeur voulue

  13. #9
    sofiaaa

    Re : horloge externe timer0

    pouvez vous m’écrire ça dans mon programme car j'ai pas compris?
    merci d'avance

  14. #10
    antek

    Re : horloge externe timer0

    Ah non, erreur de ma part, INTCON est correct.

    tmr0=250; -> le mettre ici (initialisation)

    void interrupt() {
    portb=1; ->inverser le bit au lieu de la mettre à 1


    intcon.f2=0;
    }
    void main() {
    TRISA=1; -> l'horloge externe pour tmr0 se trouve sur RA4 (mettre bit 4 de trisa à 1)
    trisb=0;
    intcon=0b10100000;
    option_reg=0b00100000;
    tmr0=250; -> ne pas le mettre ici

  15. #11
    sofiaaa

    Re : horloge externe timer0

    oui j'ai fait ca
    tmr0=250;

    void interrupt() {
    portb=~portb;


    intcon.f2=0;
    }
    void main() {
    TRISA=0b00010000;
    trisb=0;
    intcon=0b10100000;
    option_reg=0b00100000;
    }
    mais la led s'allume dès le début
    nh.PNG

  16. #12
    antek

    Re : horloge externe timer0

    tmr0=250;

    void interrupt() {
    portb=~portb;
    tmr0=250; -> recharge tmr0 avec la bonne valeur

    intcon.f2=0;
    }
    void main() {
    TRISA=0b00010000;
    trisb=0;
    intcon=0b10100000;
    option_reg=0b00100000;
    }

    Au départ la led est éteinte, puis elle doit s'allumer au bout de 5 fronts sur RA4, puis s'éteindre au bout de 5 fronts, etc
    C'est ce que tu voulais, non ?

  17. Publicité
  18. #13
    sofiaaa

    Re : horloge externe timer0

    non, juste après les 5 premier front la led s'allume.
    Dernière modification par sofiaaa ; 03/04/2015 à 16h17.

  19. #14
    antek

    Re : horloge externe timer0

    Citation Envoyé par sofiaaa Voir le message
    non, juste après les 5 premier front la led s'allume.
    Puis elle reste allumée et puis c'est tout ?
    Si c'est ça j'ai pas compris, je suis confus !
    Je reviens ce soir.

  20. #15
    sofiaaa

    Re : horloge externe timer0

    après les 5 premier front elle s'allume puis s’éteint et c'est tout.

  21. #16
    antek

    Re : horloge externe timer0

    tmr0=250;
    trisb=0;
    intcon=0b10100000;
    void interrupt() {
    portb=~portb; -> mettre RB0 à 1
    tmr0=250; -> recharge tmr0 avec la bonne valeur
    intcon=0b10000000;
    intcon.f2=0;
    }
    void main() {
    TRISA=0b00010000;
    option_reg=0b00100000;
    }

    Là elle s'allume au bout de 6 fronts (modifier tmr0 pour changer) puis reste allumée.
    La rotine d'interruption est appelée lorsque TMR0 passe de 255 à 0

    Je connais pas ce langage, mais y'a pas moyen d'affecter des valeur à des registres avant le "main" ?
    De manipuler des bits ?

  22. #17
    kevin8z

    Re : horloge externe timer0

    Je ne comprend pas trop la finalité de ce projet, si le fait est juste d'allumer un led au bout de 5 fronts, pourquoi s'embêter avec un µC?

  23. #18
    sofiaaa

    Re : horloge externe timer0

    j'essaie de comprendre ce petit programme pour faire un autre plus complexe.
    en fait je vais exploité deux signaux d'un séparateur de synchronisation qui sont (hout=top ligne,vout=top trame) pour détecter une ligne vidéo précise,
    le comptage se fait avec un pic.
    top ligne(c'est l'horloge externe:le compteur s'incrémente a chaque front descendant de hout(début d'une ligne)) et vout(top trame) pour reseter le compteur a chaque front descendant de vout.
    lorsque la ligne demandé est trouvé le pic génère un signal trigger.

  24. Publicité

Discussions similaires

  1. [atmel]Le prescal vient de l'horloge interne ou externe ?
    Par adrien4607 dans le forum Électronique
    Réponses: 4
    Dernier message: 08/02/2014, 16h38
  2. Synchronisation entre horloge atomique et horloge d'un récepteur GPS
    Par chuck_joris dans le forum Électronique
    Réponses: 10
    Dernier message: 06/12/2012, 22h56
  3. création d'horloge pour un circuit externe de PIC
    Par soufiane252 dans le forum Électronique
    Réponses: 7
    Dernier message: 15/02/2011, 18h21
  4. Configurer Horloge PIC32 pour USB (quartz externe)
    Par pseudoguyanais dans le forum Électronique
    Réponses: 20
    Dernier message: 05/11/2010, 21h01
  5. Réponses: 11
    Dernier message: 01/06/2009, 10h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.