Mesure longueur d'impulsion PPM avec PIC
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. #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+

  3. #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

  4. #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

  5. A voir en vidéo sur Futura
  6. #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

  7. #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

  8. #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. Mesure de l'amplitude maximale d'une impulsion par dichotomie
    Par invite67ee8e47 dans le forum Électronique
    Réponses: 11
    Dernier message: 10/08/2011, 12h27
  2. Moyens de mesure d'une longueur de fissure
    Par invite7420ece0 dans le forum Physique
    Réponses: 2
    Dernier message: 28/05/2010, 13h02
  3. mesure d'une impulsion laser fs
    Par invitee1f6cbd0 dans le forum Physique
    Réponses: 0
    Dernier message: 28/05/2009, 19h48
  4. Mesure de longueur
    Par invite1a7050d5 dans le forum Technologies
    Réponses: 9
    Dernier message: 24/02/2008, 10h32
  5. Réponses: 11
    Dernier message: 15/03/2006, 15h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.