Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 38

Prendre 2 valeur du timer



  1. #1
    Darkross

    Prendre 2 valeur du timer


    ------

    Bonjour,

    J'ai un easypic4, et je voudrais mesurer une fréquence...

    Je sais comment on prend la valeur du timer mais je voudrais savoir comment en prendre une après l'autre afin de faire un calcul sur la fréquence de pédalage...

    Svp

    -----

  2. Publicité
  3. #2
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Bonjour,

    J'ai un easypic4, et je voudrais mesurer une fréquence...

    Je sais comment on prend la valeur du timer mais je voudrais savoir comment en prendre une après l'autre afin de faire un calcul sur la fréquence de pédalage...

    Svp
    Bonjour Darkross,

    comment récupéres-tu la fréquence (les impulsions)
    cad :
    sur quel port?
    en utilisant une interruption?

    vede
    ;O]

  4. #3
    vede

    Cool Re : Prendre 2 valeur du timer

    ps :

    je ferais un truc de ce style (avec RB0 comme "entrée fréquence") :

    Code:
    active interruption sur RB0
    dés qu'impulsion (changement d'état d'où int.)
    active le TMR1, et l'init à 0
    re-active interruption sur RB0 
    dés qu'impulsion (changement d'état d'où int.)
    periode_us = TMR1 (/2?)
    exemple avec un quartz 4Mhz...
    et prescaler TMR1 = 1
    tu peux "mesurer" des "périodes" de max 65536µs (/2?)
    et de minimum 10µs
    (10µs temps approximatif de sauvegarde des registres avant int. avec 4Mhz... et selon le compilo...)
    ceci avec une précision de 1µs.... théoriquement...à 4Mhz...

    vede
    ;O]

  5. #4
    Darkross

    Re : Prendre 2 valeur du timer

    C'est un 8 MHz oui mais je compren pas trop les intéruption

    Je pensais utiliser le module CCP qui capture la valeur du timer lorsque un état haut a lieu sur l'entre RC2

    Mais je n'arrive pas a prendre deux valeur différentes qd j'appuye justement sur ce bouton pq il me faudrait faire une sorte de boucle et deux if qui ont comme condition la mise a un de rc2 et de changer de fonction si on veux..
    d'abord on passe a t1 puis après a t2 et on revien a t1, puis pendant ce temps on calcule la fréquence...

    Et pouvais vous m'indiquer le code avec interruption ? parce que je ne comprend pas comment les utiliser...

    Et je mesure une fréquence de rotation d'une pédale de vélo donc c'est juste mesurer le temps entre chaque impulsion en faite

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

    Cool Re : Prendre 2 valeur du timer

    Bonjour,

    je te conseille de commencer par faire clignoter une led...
    avec juste un Timer comme base de "temps" de clignotement...
    afin de plus facilement assimiler son principe...
    avant de tenter de "l'utiliser"...

    sinon ici et google sont farcis d'exemples...
    en cherchant...

    vede
    ;O]

    exemple :
    http://forums.futura-sciences.com/se...archid=3999806
    (ou je tente même d'expliquer en quelques lignes ... ;O] )

  8. #6
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par vede Voir le message
    (...)
    (ou je tente même d'expliquer en quelques lignes ... ;O] )
    re ;O]

    par exemple dans le fil
    http://forums.futura-sciences.com/el...nce-temps.html
    à partir du post #15

    ou dans celui là
    http://forums.futura-sciences.com/el...pic16f690.html
    à partir du post #12

    bonn'journée,
    vede
    ;O]
    Dernière modification par vede ; 22/03/2010 à 05h18.

  9. Publicité
  10. #7
    Darkross

    Re : Prendre 2 valeur du timer

    Rebonjours...

    Ben enfaite j'ai réussi a afficher la valeur du timer sur un LCD avec le registre CCP mais le seul kouak c que je veux enregistrer deux valeur de CCP différente et en faire la différence mais je n'arrive pas a faire sa !

  11. #8
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Rebonjours...

    Ben enfaite j'ai réussi a afficher la valeur du timer sur un LCD avec le registre CCP mais le seul kouak c que je veux enregistrer deux valeur de CCP différente et en faire la différence mais je n'arrive pas a faire sa !
    re ;O]

    ok, c'est quel pic exactement? un 18Fxxxx?
    et est-ce que tu pourrais envoyer ton code,
    ça pourrait aider...

    je connaissais pas l'interrupt. sur CPP et avec le compteur Timer1,
    d'après la doc, chaque interrupt. remet le Timer1 à zéro,
    et met sa valeur (du Timer1) au moment de l'interrupt.
    dans les registres CCP1L et CPP1H ...
    donc à chaque interrupt. , il faut lire ces 2 registres
    pour connaître le temps écoulé... depuis la précédente interrupt.
    avec Fosc = 8Mhz, une instruction = 0,5µs, d'où :
    période(temps) en µs = ( CCP1L + (CPP1H * 256) ) * 2

    vede
    ;O]

  12. #9
    Darkross

    Re : Prendre 2 valeur du timer

    Easy PIC 4 avec PIC 16f877a

    unsigned int ccpl;
    unsigned int ccph;
    unsigned long ccp;
    unsigned char ccpch[5] ;


    void main (){
    TRISC=0b00000100;
    PORTC=0b00000000;
    T1CON=0b00000001;
    INTCON=0b00000000;
    PIE1=0b00000100;
    CCP1CON=0b00000101;
    TRISD=0b00000000;
    PORTD=0b00000000;
    CCPR1L=0b00000000;
    CCPR1H=0b00000000;
    Lcd_Init(&PORTD);
    Lcd_Cmd(Lcd_CLEAR);
    Lcd_Cmd(Lcd_CURSOR_OFF);
    Lcd_Out(1,1,"Temps:");
    ccp=0;
    while(1){
    ccpl=CCPR1L;
    ccph=CCPR1H;
    ccp= (ccph*256)+ccpl ;
    LongToStr(ccp,ccpch);
    Lcd_Out(1,6,ccpch);
    if(ccp>=50000){
    PORTD.F0=1;
    }
    else{
    PORTD.F0=0;
    }
    }


    }

  13. #10
    vede

    Cool Re : Prendre 2 valeur du timer

    re re ;O]

    bon comme je connaissais pas cette interruption,
    j'ai fait un petit code pour déjà voir si l'interruption "CCP1"
    se déclenche sur une impulsion sur CCP1...

    pour l'instant, ça ne déclenche rien...

    sans ça c'est énervant, quand ça fonctionne pas...
    mais avant de m'entêter je vais attendre d'autres zavis zavizés...

    au fait pourquoi veux-tu utiliser cette interruption?
    pourquoi pas celle sur INT RB0? que je maîtrise...

    vede
    ;O]

    mon pseudo-code qui ne déclenche pas l'interruption
    cad qui ne fonctionne pas...
    avec un BP sur CCP1 (CCP1 est sur RB0 sur un 88),
    et avec une led sur RB1 qui devrait changer d'état à chaque int. :
    Code:
    program test_intCCP1
    '
    sub procedure interrupt
                 PortB.1 = not PortB.1   'change état led
                 PIR1.CCP1IF = 0  ' efface flag int.
                 PIR2.CMIF = 0  ' efface flag int.
    end sub                           '
    '
    main:
    ANSEL  = %00000000  ' ADC OFF sur 16F88
    TrisB  = %00000000  ' ports A en sorties
    TrisB  = %00000001  ' port RB0 en entrée (CPP1 sur 16F88)
    T1CON  =   %000001  ' activation du TMR1
    INTCON = %11000000  ' activation interruptions sur peripheriques
    PIE1.CCP1IE = 1     ' active int CCP1         '
    PIE2.CMIE = 1       ' active int CCP
    '
    while true
        nop
    wend
    '
    end.

  14. #11
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par vede Voir le message
    (...)
    mon pseudo-code qui ne déclenche pas l'interruption
    cad qui ne fonctionne pas...
    avec un BP sur CCP1 (CCP1 est sur RB0 sur un 88),
    et avec une led sur RB1 qui devrait changer d'état à chaque int. :
    Code:
    program test_intCCP1
    '
    sub procedure interrupt
                 PortB.1 = not PortB.1   'change état led
                 PIR1.CCP1IF = 0  ' efface flag int.
                 PIR2.CMIF = 0  ' efface flag int.
    end sub                           '
    '
    main:
    ANSEL  = %00000000  ' ADC OFF sur 16F88
    TrisB  = %00000000  ' ports A en sorties
    TrisB  = %00000001  ' port RB0 en entrée (CPP1 sur 16F88)
    T1CON  =   %000001  ' activation du TMR1
    INTCON = %11000000  ' activation interruptions sur peripheriques
    PIE1.CCP1IE = 1     ' active int CCP1         '
    PIE2.CMIE = 1       ' active int CCP
    '
    while true
        nop
    wend
    '
    end.
    ps :
    merci d'avance à tous pour vos éclaircissements...
    que pensez vous d'utiliser une l'int. sur le module CCP
    pour détecter des impulsions sur l'"entrée" CCP1 (via BP ou fréquence...)...

  15. #12
    vede

    Cool Re : Prendre 2 valeur du timer

    Bonjour à tous,

    j'y suis arrivé... enfin ça parait fonctionner... ;O]

    en fait je pensais que l'INT CPP1 était basée sur
    le mode "compare" (et du Special Event Trigger),
    alors qu'elle fonctionne en mode "capture"...

    bon, on vois qu'avec Fosc 8Mhz et Prescaler = 1,
    on peut "mesurer" max 32,768ms...
    et on a une précision théorique de 0.5µS...

    max 8 x 32,7ms avec le TIMER1 prescaler au max(8)...
    donc en perdant en précision...

    et même plus avec un compteur...
    mais en perdant encore en précision...

    et pour espérer une bonne précision,toujours commencer
    par ajouter au moins 20 au "TEMPS", cad les 5µs utilisées par
    le compilo à chaque appel d'interruption...
    pour sauvegarder les registres "vitaux"...

    le pseudo-code testé avec un 16F88:
    Code:
    program INTCPP1
    ' VARIABLES
    dim TEMPS as word
    dim cph, cpl as byte
    ' INTERRUPTION
    sub procedure interrupt
       cph = CCPR1H
       cpl = CCPR1L
       PIR1.CCP1IF = 0   ' re-active interruption
    end sub                           '
    ' INITIALISATION DU PIC
    main:
    ANSEL  = %00000000  ' désactive ADC (sur un 16F88)
    TrisB  = %00000001  ' ports RB0 en entrée  (RB0=CPP1 sur un 16F88)
    CCP1CON= %00000101  ' capture mode...
    T1CON  = %00000001  ' activation du TMR1, avec PreScaler=1
    INTCON = %11000000  ' activation interruptions sur peripheriques
    PIE1   = %00000100  ' active interruption sur CPP1 (CCP1IE = 1)
    ' LE PROGRAMME PRINCIPAL
    while true          ' (...dans une boucle infinie...)
        TEMPS = cph * 256
        TEMPS = cpl + TEMPS
        TEMPS = TEMPS / 2 ' pour avor des µs avec Fosc 8Mhz
        LCD_OUT(TEMPS + "µs")
    wend
    '
    end.
    vede
    ;O]
    Dernière modification par vede ; 23/03/2010 à 02h52.

  16. Publicité
  17. #13
    vede

    Cool Re : Prendre 2 valeur du timer

    EDIT :

    et pour espérer une bonne précision,toujours commencer
    par ajouter ENVIRON 20 au "TEMPS", cad...

    cet ENVIRON est "mesurable**"...d'où "réglable"...
    pour ceusses qui aiment avoir des horloges calées au millioniéme/s...
    (**avec un fréquencemètre étalonné notamment,
    mesurable mais pas calculable, cf dispertions pic/quartz)...

    re :

    enfin... l'interruption fonctionne... le reste....

  18. #14
    vede

    Cool Re : Prendre 2 valeur du timer

    re re :

    on dirait qu'il faut remettre "manuellement" à zéro le Timer1
    dans l'interruption...pour avoir des valeurs "crédibles"...
    (je brancherais le GBF et le fréquencemètre ce soir...)

    d'où correction :
    Code:
    ' INTERRUPTION
    sub procedure interrupt
       cph = CCPR1H
       cpl = CCPR1L
       TMR1H = 0
       TMR1L = 0
       PIR1.CCP1IF = 0   ' re-active interruption
    end sub

  19. #15
    vede

    Cool Re : Prendre 2 valeur du timer

    ______________________________ ___________
    simu, simu... maîtrise le réél... puis ton logiciel... pour oser en parler...
    (c'est un Big Up à feu MONSIEUR André BUSTICO... qui avec son
    expérience maitrisait la simulation analogique...et ses "bugs"...)...

  20. #16
    Darkross

    Re : Prendre 2 valeur du timer

    Ouah je pensais pas faire tout sa lol

    Ben moi je voulais juste quand j'appuye sur mon bouton RC2 deux foix qu'il m'affiche le temps que j'ai pris pour appuyé deux fois quoi
    et si on fait sa x fois qu'il nous affiche la fréquence justement !!

  21. #17
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Ouah je pensais pas faire tout sa lol

    Ben moi je voulais juste quand j'appuye sur mon bouton RC2 deux foix qu'il m'affiche le temps que j'ai pris pour appuyé deux fois quoi
    et si on fait sa x fois qu'il nous affiche la fréquence justement !!
    Hi Dark,

    tout quoi? c'est les bases... pour "finir" avec un minimum de précision...
    et mon code est relativement court...

    bon après je m'en sors pas avec INT sur CCP1...
    alors que c'est un truc "ultra courant" (FreqMeter) en utilisant l'INT RB0...

    mais bon comme ça m'énerve,
    ben je vais continuer à creuser...
    l' INT CPP1...

    en attendant je t'envoie un code testé et fonctionnel
    utilisant INT RB0... dans les 24h...

    pourquoi tu veux utiliser l'INT CPP1???

    vede
    ;O]

    ps : faut avouer qu'on est pas beaucoup aidé...
    Dernière modification par vede ; 24/03/2010 à 21h27.

  22. #18
    Darkross

    Re : Prendre 2 valeur du timer

    j'suis d'accord surtout que moi j'y connais rien lol

    le module CCP s'effectue avec le bouton RC2 !

  23. Publicité
  24. #19
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    j'suis d'accord surtout que moi j'y connais rien lol

    le module CCP s'effectue avec le bouton RC2 !
    re ;O]

    bon ben disons que ça simplifierait tout en utilisant RB0 et son INT en entrée...

    pourquoi utiliser le module CCP pour réaliser ce "période/fréquencemètre"...

    c'est obligé ou non?

    vede
    ;O]

  25. #20
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    j'suis d'accord surtout que moi j'y connais rien lol

    le module CCP s'effectue avec le bouton RC2 !
    ps : RC2 sur un 16F877A, et RB0 sur un 16F88...

    sinon le module CCP est un module dont la fonction principale
    est la comparaison ou la capture de tensions analogiques...
    cad rien à voir avec un période/fréquencemètre... à la base...

  26. #21
    Darkross

    Re : Prendre 2 valeur du timer

    Ben sur le 16f877a le module ccpr est capable de prendre la valeur du timer lorsque un état haut survien sur le bit RC2 sa marche bien pq j'arrive a affiché la valeur du timer qd j'appuye sur RC2 et pour faire la fréquence je voulais faire la différence des deux valeurs puis la multiplier pour donner des secondes puis faire l'inverse et on a la fréquence...

  27. #22
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Ben sur le 16f877a le module ccpr est capable de prendre la valeur du timer lorsque un état haut survien sur le bit RC2 sa marche bien pq j'arrive a affiché la valeur du timer qd j'appuye sur RC2 et pour faire la fréquence je voulais faire la différence des deux valeurs puis la multiplier pour donner des secondes puis faire l'inverse et on a la fréquence...
    Bonjour Dark,

    je comprends pas bien pourquoi tu veux récupérer 2 valeurs...
    et faire "la différence" entre elles...

    car quand tu appuie 2 fois sur RC2...
    la valeur du Timer1 est le temps écoulé entre les 2 impulsions...

    vede
    ;O]

  28. #23
    Darkross

    Re : Prendre 2 valeur du timer

    Oooh le boulet....

    Je ne savais pas sa... lol excusez moi
    donc enfaite c tout simple alors
    y'a qu'a faire directement le calcul pour la fréquence et c dans la boite nan ?

  29. #24
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Oooh le boulet....

    Je ne savais pas sa... lol excusez moi
    donc enfaite c tout simple alors
    y'a qu'a faire directement le calcul pour la fréquence et c dans la boite nan ?
    re ;O]

    théoriquement oui...

    et en sachant qu'avec Fosc = 8Mhz,
    donc que le Timer1 s'incrémente toutes les 0.5µs

    donc si par exemple valeur Timer1 = 2000
    alors :
    temp(s) = 0.001 (1ms)
    et
    F(hz) = 1/t(s) = 1000 (1Khz)

    vede
    ;O]

  30. Publicité
  31. #25
    Darkross

    Re : Prendre 2 valeur du timer

    Ah ben voila qui finie bien ! Heum mais si se temps depase la valeur de timer donc superieur a 65535 la valeur seras fossé ou negative alors ?

  32. #26
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Ah ben voila qui finie bien ! Heum mais si se temps depase la valeur de timer donc superieur a 65535 la valeur seras fossé ou negative alors ?
    rere ;O]

    oui...

    mais en positionnant le prescaler du Timer1 à 8
    tu peux arriver à "mesurer" des "périodes" de max 8x32ms...

    sinon faut "réduire" le quartz...
    exemple, 4Mhz, pour "mesurer" max 16x32ms...

    vede
    ;O]

  33. #27
    Darkross

    Re : Prendre 2 valeur du timer

    Ou alors rajouter 65535 au resultat s'il est négatif

  34. #28
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    Ou alors rajouter 65535 au resultat s'il est négatif
    non impossible...
    à moins d'être sur et certain qu'elle n'a dépassé qu'une fois les 65535...

    si vraiment tu veux prévoir de pouvoir mesurer plus de 8x32ms
    orientes toi vers l'INT RB0...

    vede
    ;O]

    ps : et de toute façon le résultat ne sera JAMAIS négatif...
    à moins de vraiment vouloir compliquer les choses...

  35. #29
    Darkross

    Re : Prendre 2 valeur du timer

    C quoi l'INT ?

  36. #30
    vede

    Cool Re : Prendre 2 valeur du timer

    Citation Envoyé par Darkross Voir le message
    C quoi l'INT ?
    INT RB0

    ben c'est l'interruption "déclenchable" sur une impulsion sur RB0...

    et en fait, faudrait commencer par savoir dans quelle plage
    de période/fréquence tu veux faire des mesures...

    56454445
    3B4F29
    ______________________________ __________
    46554D4552204E4520545545205041 53203B4F29

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Valeur discrète, valeur continue
    Par YABON dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 19/12/2014, 21h04
  2. Réponses: 0
    Dernier message: 08/03/2009, 18h41
  3. timer
    Par vindalou dans le forum Électronique
    Réponses: 2
    Dernier message: 24/02/2007, 14h00
  4. Timer....??
    Par bimo dans le forum Logiciel - Software - Open Source
    Réponses: 14
    Dernier message: 15/09/2006, 16h18
  5. Prendre ou pas prendre le Fucus?
    Par wind0013 dans le forum Biologie
    Réponses: 0
    Dernier message: 21/06/2006, 22h07
Découvrez nos comparatifs produits sur l'informatique et les technologies.