Aide sur les timer sur un 16f876a
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Aide sur les timer sur un 16f876a



  1. #1
    invited023a47c

    Aide sur les timer sur un 16f876a


    ------

    Bonjour à tous,

    J'ai déjà lu tous les post sur les timer de pic 16f876a et malheureusement, je n'ai toujours pas compris et je n'arrive pas à en faire un qui me conviens. Je voudrai un timer qui fait changer une valeur (l'incrémente) toute les secondes.

    Cordialement,
    Valentin

    -----

  2. #2
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Qz de 3,2768MHz, en entrée TMR1 (entrée interne), soit 819200 Hz, en rechargeant TMR1H avec 080h à chaque IRQ, tu auras 25 IRQ/s.
    A toi de compter une variable qui arrivée à 25 fera avancer la variable seconde.
    Ne pas oublier GIE, PEIE, TMR1IF, TMR1ON.
    La datasheet te dira ce que font ces bit.

  3. #3
    invited023a47c

    Re : Aide sur les timer sur un 16f876a

    Bonjour,

    Houla, on dirai que tu ne parle pas le français ^^. Le problème c'est que j'ai une carte que j'ai faite au lycée avec un quartz de 20MHz dessus ...

  4. #4
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Citation Envoyé par valentin074 Voir le message
    Bonjour,

    Houla, on dirait que tu ne parles pas le français . Le problème, c'est que j'ai une carte que j'ai faite au lycée avec un quartz de 20MHz dessus ...
    Quand dans ta question tu diras que tu as un Qz de 20MHz, tu pourras éventuellent me dire que je n'ai pas lu ta question mais certainement pas que je ne parle pas français !

    Maintenant, tu te débrouilles pour ton IRQ !


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

    Re : Aide sur les timer sur un 16f876a

    Citation Envoyé par valentin074 Voir le message
    Bonjour,

    Houla, on dirai que tu ne parle pas le français ^^. Le problème c'est que j'ai une carte que j'ai faite au lycée avec un quartz de 20MHz dessus ...
    Quand j'ai dit que tu ne parles pas le français c'était pour te dire que je n'avait pas compris ce que tu m'avais dit juste avant, ce n'est pas du tout un reproche. Je suis désolé

  7. #6
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Citation Envoyé par valentin074 Voir le message
    Quand j'ai dit que tu ne parles pas le français c'était pour te dire que je n'avait pas compris ce que tu m'avais dit juste avant, ce n'est pas du tout un reproche. Je suis désolé
    OK, mauvaise interprétation de ma part, comme quoi, toujours bien expliquer ce que l'on dit pour éviter ce genre de situation.

    On repart, dans ce que j'ai dit, qu'est ce que tu ne comprends pas ?

    Si tu utilises un 876 avec un Qz de 20MHz, as-tu la possibilité de brancher un Qz de 32,768KHz (valeur standard) sur RC0 / RC1 ?
    C'est l'entrée (presque) directe vers le Timer1.
    Si oui, je te dirai ce qu'il faut écrire dans TMR1H, la config du prescaler et les différents bit associés.

  8. #7
    invited023a47c

    Re : Aide sur les timer sur un 16f876a

    Bonjour,

    Je suis désolé mais non, j'ai une carte qui est déjà toute faite et toutes les pattes sont occupées par une fonction (schéma pièce jointe). Mon prof m'a dit que je pouvais faire un timer sans rajouter de quartz mais avec le quartz de 20MHz en divisant sa valeur. J'espère que je suis compréhensible, et que cette solution sera possible grâce à votre aide

    Edit : J'ai fait le calcul, il faudrait le diviser par 610

    Cordialement,
    Valentin
    Images attachées Images attachées

  9. #8
    gedonet

    Re : Aide sur les timer sur un 16f876a

    Bonjour
    Avec le Timer1 16bits qui compte, avec un prediviseur par 8, pendant 524288 cycles, et un Tcycle de 0.2µs pour un quartz de 20MHz, il faut faire deborder 10 fois le Timer1 pour avoir 1,04856 seconde.
    On peut evidement ajuster pour avoir la seconde precise.
    Gilles

  10. #9
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Citation Envoyé par gedonet Voir le message
    Bonjour
    Avec le Timer1 16bits qui compte, avec un prediviseur par 8, pendant 524288 cycles, et un Tcycle de 0.2µs pour un quartz de 20MHz, il faut faire deborder 10 fois le Timer1 pour avoir 1,04856 seconde.
    On peut evidement ajuster pour avoir la seconde precise.
    Gilles
    C'est justement la le problème, on ne tombe pas juste.
    En plus, il y a un bug dans TMR1 sur ce PIC (voir ... je ne sais plus quelle doc chez Microchip). On ne peut pas recharger avec n'importe quelle valeur.

    Je crois que Bigonoff en parle dans le cours N°2.

    C'est pour ça que je te proposais celle solution avec un Qz de cette valeur (3,2768MHz) qui est un multiple de 2.

  11. #10
    gedonet

    Re : Aide sur les timer sur un 16f876a

    Bonjour Gérard
    C'est en mode compteur que le Timer1 est problematique, pas en chrono.
    Cela poserai un probleme avec ta methode si tu n'avais choisi le bon quartz.
    De toute façon il semble que valentin074 ne puisse modifier sa platine.
    Dons à mon avis soit il utilise ma methode avec les ajustements neccessaires s'il a besoin d'une precision superieur au 4/10 da seconde, soit il utilise une tempo precise, en fait cela lui suffit peut être, voir le code fournit par le logiciel Picdel:
    Code:
    ;-------------------------------------------------------------
    ; Code generated by PDEL  ver 1.0  on 26/02/2009 at 23:50:07
    ; Description: Waits 5000000 cycles
    ;-------------------------------------------------------------
    PDelay  movlw     .165      ; 1 set number of repetitions (C)
            movwf     PDel0     ; 1 |
    PLoop0  movlw     .41       ; 1 set number of repetitions (B)
            movwf     PDel1     ; 1 |
    PLoop1  movlw     .147      ; 1 set number of repetitions (A)
            movwf     PDel2     ; 1 |
    PLoop2  clrwdt              ; 1 clear watchdog
            clrwdt              ; 1 cycle delay
            decfsz    PDel2, 1  ; 1 + (1) is the time over? (A)
            goto      PLoop2    ; 2 no, loop
            decfsz    PDel1,  1 ; 1 + (1) is the time over? (B)
            goto      PLoop1    ; 2 no, loop
            decfsz    PDel0,  1 ; 1 + (1) is the time over? (C)
            goto      PLoop0    ; 2 no, loop
            return              ; 2+2 Done
    ;-------------------------------------------------------------
    
    
    
    ;Code requirements
    ;-----------------
    ;- Declaration of PDel0 (register)
    ;- Declaration of PDel1 (register)
    ;- Declaration of PDel2 (register)
    ;- 1 stack level
    
    ;Example of use
    ;--------------
    ;call PDelay      ; Delay 5000000 cycles (including call+return)
    Voir mon site pour Picdel: http://gedonet.free.fr/testpic/programme.htm
    Gilles

  12. #11
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Je ne comprends pas pourquoi en mode compteur il y a pb et pas en chrono.

  13. #12
    gedonet

    Re : Aide sur les timer sur un 16f876a

    Salut
    Je ne pourrai pas t'expliquer d'ou vient l'erreur, c'est un bug de Microchip, mais une astuce est d'arreter le timer1 pendant la lecture, lire et relancer le compteur, on ne perd que peut de cycle.
    De toute facon, avec ta methode, on ne lit pas TMR1H(L), on ne compte que des debordements (qui sont des sous multiples de la seconde) donc il n'y a pas de probleme.
    Gilles

  14. #13
    invited023a47c

    Re : Aide sur les timer sur un 16f876a

    Bonjour à tous,

    J'ai pas compris, cette méthode marche alors ?

    Citation Envoyé par gedonet Voir le message
    Bonjour
    Avec le Timer1 16bits qui compte, avec un prediviseur par 8, pendant 524288 cycles, et un Tcycle de 0.2µs pour un quartz de 20MHz, il faut faire deborder 10 fois le Timer1 pour avoir 1,04856 seconde.
    On peut evidement ajuster pour avoir la seconde precise.
    Gilles
    Merci de votre aide,
    Valentin

  15. #14
    gedonet

    Re : Aide sur les timer sur un 16f876a

    Bonjour
    La methode de mon post #8 fonctionne si tu acceptes un erreur de 0.04s par seconde. On peut corriger l'erreur mais il faut reflechir un peut.
    Si ton pic ne fait rien d'autre, alors l'utilisation d'une tempo est beaucoup plus simple, tu lances ta tempo par call PDelay et la ligne suivante tu ecris incf variable et tu reboucles sur call PDelay autant de fois que tu veux incrementer la variable.
    Des méthodes pour resoudre ton probleme, il y en a plein, il faut simplement choisir celle qui te convient.
    Gilles

  16. #15
    Gérard

    Re : Aide sur les timer sur un 16f876a

    Tout dépend aussi de la précision souhaitée comme gedonet l'a dit.

  17. #16
    invited023a47c

    Re : Aide sur les timer sur un 16f876a

    Bonjour,

    Merci de cette réponse. Je vais m'orienter vers la solution de gedonet. Si j'ai des problèmes, je posterai se ce topic.

    Cordialement,
    Valentin

  18. #17
    invited023a47c

    Re : Aide sur les timer sur un 16f876a

    Bonjour,

    J'utilise CCS C Compileur, comment je fait pour rentrer ça dans le logiciel ? Et ça va marcher ?

    Citation Envoyé par gedonet Voir le message
    Bonjour Gérard
    C'est en mode compteur que le Timer1 est problematique, pas en chrono.
    Cela poserai un probleme avec ta methode si tu n'avais choisi le bon quartz.
    De toute façon il semble que valentin074 ne puisse modifier sa platine.
    Dons à mon avis soit il utilise ma methode avec les ajustements neccessaires s'il a besoin d'une precision superieur au 4/10 da seconde, soit il utilise une tempo precise, en fait cela lui suffit peut être, voir le code fournit par le logiciel Picdel:
    Code:
    ;-------------------------------------------------------------
    ; Code generated by PDEL  ver 1.0  on 26/02/2009 at 23:50:07
    ; Description: Waits 5000000 cycles
    ;-------------------------------------------------------------
    PDelay  movlw     .165      ; 1 set number of repetitions (C)
            movwf     PDel0     ; 1 |
    PLoop0  movlw     .41       ; 1 set number of repetitions (B)
            movwf     PDel1     ; 1 |
    PLoop1  movlw     .147      ; 1 set number of repetitions (A)
            movwf     PDel2     ; 1 |
    PLoop2  clrwdt              ; 1 clear watchdog
            clrwdt              ; 1 cycle delay
            decfsz    PDel2, 1  ; 1 + (1) is the time over? (A)
            goto      PLoop2    ; 2 no, loop
            decfsz    PDel1,  1 ; 1 + (1) is the time over? (B)
            goto      PLoop1    ; 2 no, loop
            decfsz    PDel0,  1 ; 1 + (1) is the time over? (C)
            goto      PLoop0    ; 2 no, loop
            return              ; 2+2 Done
    ;-------------------------------------------------------------
    
    
    
    ;Code requirements
    ;-----------------
    ;- Declaration of PDel0 (register)
    ;- Declaration of PDel1 (register)
    ;- Declaration of PDel2 (register)
    ;- 1 stack level
    
    ;Example of use
    ;--------------
    ;call PDelay      ; Delay 5000000 cycles (including call+return)
    Voir mon site pour Picdel: http://gedonet.free.fr/testpic/programme.htm
    Gilles

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/01/2009, 20h38
  2. Faire clignoter une led sur pic 16F876A
    Par invite3799b2e8 dans le forum Électronique
    Réponses: 9
    Dernier message: 20/11/2008, 14h11
  3. 16f876A et Timer avec CCS
    Par invite4ee64344 dans le forum Électronique
    Réponses: 10
    Dernier message: 28/09/2008, 22h53
  4. Timer sur Windev
    Par invite211c1e0b dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 12/07/2007, 12h45
  5. les effets de l'aspirine sur les courbatures [AIDE SVP]
    Par invited5a168f2 dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 21/12/2006, 12h27
Découvrez nos comparatifs produits sur l'informatique et les technologies.