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

Mesure longueur d'impulsion PPM avec PIC



  1. #1
    eulgeneral

    Mesure longueur d'impulsion PPM avec PIC


    ------

    Bonsoir à tous,

    j'ai un problème avec un programme que j'essaie de faire pour un PIC 16F628. Je cherche à mesurer la durée d'une impulsion issue d'un récepteur RC de modèle réduit (entre 1 et 2ms). En simulant dans MPLAB, çà a l'air de fonctionner en simulant un signal correspondant au signal du récepteur mais dans la vraie vie, çà ne marche pas. Auriez-vous une idée, SVP?

    Le but est de décoder plusieurs voies (ici, le code n'en lit qu'une) et de m'en servir pour effectuer différentes actions (allumage leds, déclenchement d'un autre pic,...). C'est pourquoi, je ne peux pas utiliser le module capture du 628.

    pinfrein=RB4, impulsfrein= état de l'impulsion à mesurer (haut ou bas), LED1= RA0

    Voici le programme:

    #include "INT16CXX.H"

    #pragma config = 0x3D18 ////////si watchdog, 8=>C 3D18
    #pragma origin 4
    ///////////// definition alias //////////////
    //#define LED1 RA0
    ////////////////////////////////////////////
    #define LED1 RA0
    #define LED2 RA1
    #define LED3 RA2
    #define LED4 RA3
    #define pinfrein RB4
    #define pincodes RB5
    #define pincligno RB6
    #define pinphares RB7
    ////////// variables //////////////////////////
    char impuls;
    char impulsfrein;
    int dureefrein;
    char sv_PORTB;
    char sv_FSR;
    ////////////////////////////////////////////////
    ///////////// interruptions ////////////////////
    ////////////////////////////////////////////////
    static interrupt traitement()
    {
    int_save_registers;
    if (RBIF)
    {
    //////////////// Mesure de la durée de l'impulsion //////////////////////////
    /////////////////////////////////////////////////////////////////////////////
    if (pinfrein==1 && impulsfrein==0) //RA0, etat précédent bas => front montant
    {
    TMR0=0;
    impulsfrein=1;
    }
    if (pinfrein==0 && impulsfrein==1) //RA0, etat précédent haut => front descendant
    {
    dureefrein=TMR0; // mise en mémoire de la durée de l'impulsion pour traitement
    impulsfrein=0;
    }
    RBIF=0;
    }
    int_restore_registers;
    }
    ///////////////////////////////////////////////////
    ////////// Programme principal ////////////////////
    ///////////////////////////////////////////////////
    void main (void)
    {

    OPTION=0b10000010; /// PRESCALER SUR 8
    TRISA=0; /// PORT A EN SORTIE
    TRISB=0XF0; /// B0-B3 EN SORTIE, B4-B7 EN ENTREE
    PORTA=0;
    PORTB=0;

    RBIE=1;
    RBIF=0;
    GIE=1;
    PEIE=1;

    for(; /// ce n'est pas un smiley !!!!
    {
    if (dureefrein<120)
    { LED1=1;}
    if (dureefrein>120)
    { LED1=0;}
    }
    }

    Merci

    A+

    -----

  2. Publicité
  3. 📣 Nouveau projet éditorial de Futura
    🔥🧠 Le Mag Futura est lancé, découvrez notre 1er magazine papier

    Une belle revue de plus de 200 pages et 4 dossiers scientifiques pour tout comprendre à la science qui fera le futur. Nous avons besoin de vous 🙏 pour nous aider à le lancer...

    👉 Je découvre le projet

    Quatre questions à explorer en 2022 :
    → Quels mystères nous cache encore la Lune 🌙 ?
    → Pourra-t-on bientôt tout guérir grâce aux gènes 👩‍⚕️?
    → Comment nourrir le monde sans le détruire 🌍 ?
    → L’intelligence artificielle peut-elle devenir vraiment intelligente 🤖 ?
  4. #2
    katmai

    Re : Mesure longueur d'impulsion PPM avec PIC

    Salut,

    Je ne suis pas pro en PIC mais il n'y a pas une configuration du timer à faire?

    Sinon tu peux essayer de le débuguer avec le programmateur? ou avec une led tout simplement?

    A+

  5. #3
    freepicbasic

    Re : Mesure longueur d'impulsion PPM avec PIC

    impulsfrein n'est pas initialisé !
    INTEDG dans option_reg n'est pas sélectionné un coup rising un coup falling
    A+, pat

  6. #4
    eulgeneral

    Re : Mesure longueur d'impulsion PPM avec PIC

    Merci,

    Bon j'avance un peu...

    Pour INTF, ce bit n'est utilisé que pour détecter un changement (front montant ou descendant) sur RB0/INT, donc je ne l'utilise pas parce que ce que je teste c'est un changement de d'état sur RB4 à 7 qui provoque l'interruption, c'est pour çà que je teste le impulsfrein lors du traitement de l'interruption. Apparemment çà fonctionne puisqu'en simulant une impulsion de 1,4ms, je la retrouve en faisant tourner le programme au simu MPLAB.

    J'ai fait un test avec le timer1 pour mesurer l'impulsion, en utilisant timer0 et l'IT correspondante pour faire clignoter une led et en déduire que le pic est vivant.

    Tant que je ne cherche pas à utiliser la valeur "dureefrein" le programme semble tourner même en présence d'un signal sur RB4. En revanche, dès que j'essaye de traiter "dureefrein" avec un test de la valeur dans le programme principal, la led reste éteinte, donc j'en déduis que le pic plante. Je ne comprends pas pourquoi...

    De plus, quelqu'un pourrait-il m'expliquer comment tester la valeur recueillie sur 16bit et la comparer avec 1300 (valeur médiane)?

    Merci

  7. A voir en vidéo sur Futura
  8. #5
    freepicbasic

    Re : Mesure longueur d'impulsion PPM avec PIC

    met des casts sinon on ne sait pas ce que fait le compilo


    dureefrein= (int) TMR0;

    if ( dureefrein > (int) 120 )


    sinon voir si 120 est la bonne valeur (possible que la simule et le réel ne correspondent pas...)
    l'idéal serait de contrôler cette valeur en la mettant quelque part , sur le port ou en eeprom, etc...
    A+, pat

  9. #6
    freepicbasic

    Re : Mesure longueur d'impulsion PPM avec PIC

    je ne vois pas comment TMR0 qui est sur 8bits peut avoir une valeur 1300.
    A+, pat

  10. Publicité
  11. #7
    eulgeneral

    Re : Mesure longueur d'impulsion PPM avec PIC

    Comme dit précédemment, j'ai refait mon prog avec TMR1 pour tester l'impulsion et tmr0 pour faire clignoter une led et voir si le pic est encore "en vie" d'où les 16bits (1300). Je vais faire un essai avec une impulsion calibrée générée par un autre pic pour voir...

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/08/2011, 13h27
  2. Moyens de mesure d'une longueur de fissure
    Par baha42 dans le forum Physique
    Réponses: 2
    Dernier message: 28/05/2010, 14h02
  3. mesure d'une impulsion laser fs
    Par metol dans le forum Physique
    Réponses: 0
    Dernier message: 28/05/2009, 20h48
  4. Mesure de longueur
    Par Minouchon2007 dans le forum Technologies
    Réponses: 9
    Dernier message: 24/02/2008, 11h32
  5. Réponses: 11
    Dernier message: 15/03/2006, 16h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.