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

code en C de PIC



  1. #1
    idham85

    Post code en C de PIC


    ------

    salut à tous:
    j'ai un signal carré à l'entrée RB0. Ce signal est comme étant une séquence binaire de la forme: 10101010101010101010010101010...
    Le but est d'incrémenter le compteur lors de la détection de deux zéros successives.
    J'ai besoin de vos aide pour ce code et je suis à votre disposition pour toute autre information.

    Merci d'avance

    -----

  2. Publicité
  3. #2
    vede

    Cool Re : code en C de PIC

    salut,

    tu peux t'inspirer de ça :
    http://forums.futura-sciences.com/el...2-timer-3.html
    qui utilise l'interruption sur RB0 pour mesurer les
    périodes entre deux impulsions grâce au Timer1...

    vede
    ;O]

  4. #3
    idham85

    Re : code en C de PIC

    Merci:
    Mais je ne sais pas comment travailler avec le timer, en + mon but est d'incrémenter une variable lors de la détection de deux zéros successives et l'affichage de la valeur de cette variable.
    C'est le signal délivré par un capteur d'effet de hall(capteur vitesse) montée sur un pignon.La détection des deux zéros implique la détection d'un tour.
    Cette image peut mieux expliqué
    Images attachées Images attachées  

  5. #4
    F1TVB

    Re : code en C de PIC

    Bonjour
    La meilleur solution est le timer rechargé à chaque front. S'il depasse la valeur de consigne (temps superieur à la duréee de l'impulsion) on incrémente un compteur.
    Compte tenu de la variation de fréquence du signal reçu, sans timer , il faut une horloge synchrone (type PLL) pour détecter une largeur d'impulsion non conforme.

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

    Re : code en C de PIC

    Salut !!

    Si la fréquence de ton signal est constante tu programmes un Timer pour aller lire la valeur de RB0 toutes les demi-période et tu détecte ainsi lorsqu'il y a 2 zéros de rang !!
    Sinon la solution proposée par F1TVB reste la plus adaptée !!!

    a+

  8. #6
    idham85

    Re : code en C de PIC

    Merci à tous:

    La fréquence est variable car la vitesse du pignon change il varie de 0 tour/min jusqu'à 7000 tour/min. D'après vos réponse je ne peut pas travailler par le Timer dans ce cas et la solution proposée par F1TVB reste la plus adapté. Vous pouvez plus expliqué.

  9. Publicité
  10. #7
    kronanberg

    Re : code en C de PIC

    Le soucis est que la variation de fréquence de ton signal est asser grande.

    Donc si tu utilises un timer pour calculer la fréquence d'une période et ainsi détecter deux zéros consécutives il te faudra beaucoup de valeur de consignes car une valeur de consigne pour une vitesse de 100 tours/min ne sera pas la même que celle pour 1000 tours/min !!!!
    Donc je vois pas trop comment réaliser ça avec cette technique !!

    Sinon si tu connais le nombre de période pour faire un tour est ce que tu ne pourrai pas faire un compteur qui s'incrémente à chaque front montant et que tu réinitialise lorsqu'il a atteint la valeur de consigne (correspondant à un tour) ??

    a+

  11. #8
    idham85

    Re : code en C de PIC

    Citation Envoyé par kronanberg Voir le message
    Le soucis est que la variation de fréquence de ton signal est asser grande.

    Donc si tu utilises un timer pour calculer la fréquence d'une période et ainsi détecter deux zéros consécutives il te faudra beaucoup de valeur de consignes car une valeur de consigne pour une vitesse de 100 tours/min ne sera pas la même que celle pour 1000 tours/min !!!!
    Donc je vois pas trop comment réaliser ça avec cette technique !!

    Sinon si tu connais le nombre de période pour faire un tour est ce que tu ne pourrai pas faire un compteur qui s'incrémente à chaque front montant et que tu réinitialise lorsqu'il a atteint la valeur de consigne (correspondant à un tour) ??

    a+
    Merci:
    Si le pignon est de 60 dents donc j'ai 60 période.
    Avec la méthode que vous avez décrit je peut incrémenter le compteur après 60 impulsions.

  12. #9
    F1TVB

    Re : code en C de PIC

    Bonsoir
    Il faut mesurer la durée de l'impulsion à zéro , la sauvegarder (état précédant) et la comparer la valeur actuelle.
    Si les valeurs sont égales on n'est pas dans la phase 00.En phase 00 on efface le précédant et on recommence le cycle.Avantage on s'affranchit de la vitesse.
    A tester...

  13. #10
    idham85

    Re : code en C de PIC

    Merci:
    Si le pignon est de 60 dents donc j'ai 60 période.
    Avec la méthode que vous avez décrit je peut incrémenter le compteur après 60 impulsions??????
    Comment????

  14. #11
    idham85

    Re : code en C de PIC

    Citation Envoyé par F1TVB Voir le message
    Bonsoir
    Il faut mesurer la durée de l'impulsion à zéro , la sauvegarder (état précédant) et la comparer la valeur actuelle.
    Si les valeurs sont égales on n'est pas dans la phase 00.En phase 00 on efface le précédant et on recommence le cycle.Avantage on s'affranchit de la vitesse.
    A tester...
    J'ai bien compris votre méthode mais je ne peut pas traduit cette idée en code C.
    Est ce que vous pouvez m'aider?

  15. #12
    vede

    Cool Re : code en C de PIC

    Citation Envoyé par idham85 Voir le message
    J'ai bien compris votre méthode mais je ne peut pas traduit cette idée en code C.
    Est ce que vous pouvez m'aider?
    Bonsoir,

    la méthode : regarde mon lien du fil que j'avais cité...
    c'est exactement ça... (ça detecte (affiche sa durée en µs même)
    si l'impulsion est plus longue (1001) que les précédentes (0101))...

    et avant de coder : envoyes un synoptique ou diagramme ou
    logigramme du déroulement logique prévu de la mesure...

    et un Timer est "obligatoire" pour créer "une fenêtre" ou une "base de temps" stable...

    vede
    ;O]
    Dernière modification par vede ; 29/03/2010 à 23h43.

  16. Publicité
  17. #13
    Seb.26

    Re : code en C de PIC

    my 2 cents :

    tu compte les impulsions ! ... peut importe la vitesse ... tout les x fronts, tu as fait 1 tour ... et basta !
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  18. #14
    idham85

    Post Re : code en C de PIC

    Citation Envoyé par Seb.26 Voir le message
    my 2 cents :

    tu compte les impulsions ! ... peut importe la vitesse ... tout les x fronts, tu as fait 1 tour ... et basta !
    On suppose que 1 tour correspond à 60 impulsions.
    J'ai écrit un petit code pour incrémenter le compteur à chaque impulsion:

    while (true){

    if(input(PIN_E0)==1) //j'ai mis un signal carré à l'entrée E0

    output_B(0b00000001); //allumage led sortie (B0)
    k=k+1; //incrémentation compteur
    }

    else
    {output_B(0b00000000);
    }
    }

    Le problème que le compteur compte plus que 10 fois pour une seul impulsion et ça à cause de la durée de traitement de boucle if. Comment je peut changé le code pour que le compteur incrémente une seul fois pour une impulsion

    Merci d'avance

  19. #15
    ftorama

    Re : code en C de PIC

    Si j'étais à ta place, j'utiliserais une interruption externe. Tu incrémentes alors ton compteur sur un front du signal d'entrée.

    Ensuite, avec la gestion d'un timer en plus, tu pourras détecter le PMH

  20. #16
    Seb.26

    Re : code en C de PIC

    Tu utilise un timer en mode compteur (voir datasheet), avec une valeur de RESET de 60, dans l'interruption tu remets le compteur à 0 et tu fais +1 sur ton compteur de tour ... c'est quoi le problème ???
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  21. #17
    idham85

    Re : code en C de PIC

    Citation Envoyé par ftorama Voir le message
    Si j'étais à ta place, j'utiliserais une interruption externe. Tu incrémentes alors ton compteur sur un front du signal d'entrée.

    Ensuite, avec la gestion d'un timer en plus, tu pourras détecter le PMH
    Vous pouvez m'aider coté programmation car je ne sais pas développer ni Timer ni interruption externe.

  22. #18
    vede

    Cool Re : code en C de PIC

    Citation Envoyé par idham85 Voir le message
    Vous pouvez m'aider coté programmation car je ne sais pas développer ni Timer ni interruption externe.
    re ;O]

    dans ce cas je te conseille de commencer par faire clignoter une led...
    pour commencer à assimiler leurs principes de fonctionnements...
    un exemple (dans le Post #18) :

    http://forums.futura-sciences.com/el...pic16f690.html


    vede
    ;O]

  23. Publicité
  24. #19
    idham85

    Re : code en C de PIC

    Citation Envoyé par Seb.26 Voir le message
    Tu utilise un timer en mode compteur (voir datasheet), avec une valeur de RESET de 60, dans l'interruption tu remets le compteur à 0 et tu fais +1 sur ton compteur de tour ... c'est quoi le problème ???
    Merci pour votre aide:
    Mon problème que je ne sais pas comment travailler avec le Timer (c'est la première fois que je programme un microcontroleur).

  25. #20
    vede

    Cool Re : code en C de PIC

    Citation Envoyé par idham85 Voir le message
    Merci pour votre aide:
    Mon problème que je ne sais pas comment travailler avec le Timer (c'est la première fois que je programme un microcontroleur).
    re ;O]

    oui on a bien compris...
    donc commencer par faire clignoter une led
    est une bonne base pour comprendre le
    fonctionnement des Timers...

    cf mon post précédent...

    commences un code avec Timer en te basant sur les docs et exemples...
    et delà on t'aidera à la faire clignoter si tu galères...

    vede
    ;O]

  26. #21
    idham85

    Re : code en C de PIC

    Citation Envoyé par vede Voir le message
    re ;O]

    oui on a bien compris...
    donc commencer par faire clignoter une led
    est une bonne base pour comprendre le
    fonctionnement des Timers...

    cf mon post précédent...

    commences un code avec Timer en te basant sur les docs et exemples...
    et delà on t'aidera à la faire clignoter si tu galères...

    vede
    ;O]
    Merci beaucoup

  27. #22
    vede

    Cool Re : code en C de PIC

    Citation Envoyé par idham85 Voir le message
    Merci beaucoup
    ps :

    et deux traductions partielles de datasheets de 16Fxxx :

    http://daniel.menesplier.free.fr/Doc/PIC16F88.pdf

    http://z.oumnad.123.fr/Microcontrole...F876-77-V1.pdf


    notamment pour les sections Timers et Interruptions...

    v;o]
    Dernière modification par vede ; 31/03/2010 à 01h46.

  28. #23
    idham85

    Re : code en C de PIC

    Citation Envoyé par vede Voir le message
    ps :

    et deux traductions partielles de datasheets de 16Fxxx :

    http://daniel.menesplier.free.fr/Doc/PIC16F88.pdf

    http://z.oumnad.123.fr/Microcontrole...F876-77-V1.pdf


    notamment pour les sections Timers et Interruptions...

    v;o]
    Merci pour le cours. Les document sont très riches en + se sont en français. ça fait longtemps je cherche des document en français.
    Merci infinimenttttttttttttttttttttt ttttttttttttttttttt

Discussions similaires

  1. Ir et pic code RC5
    Par bypbop dans le forum Électronique
    Réponses: 39
    Dernier message: 19/01/2015, 18h05
  2. Pic basic 3B et code IR
    Par françois05 dans le forum Électronique
    Réponses: 7
    Dernier message: 10/02/2010, 16h49
  3. Envoyer un code hexa à un Pic via hyperterminal
    Par lcoulon dans le forum Électronique
    Réponses: 3
    Dernier message: 18/06/2009, 06h32
  4. [Pic] Probleme avec code
    Par wave68runner dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2009, 09h40
  5. Code conversion A/N pic 18f2550
    Par Kurosaki dans le forum Électronique
    Réponses: 1
    Dernier message: 21/06/2008, 23h42
Découvrez nos comparatifs produits sur l'informatique et les technologies.