anti rebond
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

anti rebond



  1. #1
    invite6af9789d

    anti rebond


    ------

    Bonjour tout le monde.
    J'aimerais réaliser un filtre anti-rebond pour récupérer l'état d'un bouton poussoir sur la patte d'un PIC, savez-vous comment on procède?
    Merci

    -----

  2. #2
    remy01

    Re : anti rebond

    Salut,
    tu fais une petite temporisation ( quelques ms )
    après la détection d'un changement d'état.
    A+ ....Rémy.

  3. #3
    invite6af9789d

    Re : anti rebond

    je précise, c'est au niveau logiciel (en C) que je cherche à réaliser l'anti-rebond.
    merci

  4. #4
    invite6af9789d

    Re : anti rebond

    je fais mon filtre dans une interruption et mon interruption est levée toutes les 2 ms mais j'ai toujours des problèmes, des fois ça marche des fois ça marche pas.

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

    Re : anti rebond

    Peut etre que si je met ce que j'ai déjà fait ça serait mieux.
    Voilà mon interruption:

    void Interrupt_Hi(void)
    {
    if(INTCONbits.TMR0IF == 1)
    {
    INTCONbits.TMR0IF = 0;
    LATBbits.LATB0 =~LATBbits.LATB0;

    temp=(temp|PORTDbits.RD0);

    var=0x01;
    ACCU=0;

    while(var<0x80) //somme des états de 8 états mémorisés
    {
    ACCU=ACCU+(temp&var);
    var=(var<<1); //décalage à gauche des bits
    }
    if(ACCU<4 && BPOUSSOIR==NONAPPUYE) BPOUSSOIR=APPUYE;

    else
    if(ACCU>4 && BPOUSSOIR==APPUYE) BPOUSSOIR=NONAPPUYE;

    temp=(temp<<1); //décalage à gauche des bits

    WriteTimer0(63900);
    }
    }


    et voici mon main:



    void main()
    {
    char c;

    TRISB = 0b00001100;
    LATB = 0b11111111;

    TRISD = 0b11111100;
    LATD = 0b11111111;

    //CONFIGURATION DE L'USART
    OpenUSART( USART_TX_INT_OFF &
    USART_RX_INT_OFF &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT &
    USART_CONT_RX,
    25 ); //(4 MHz /(16*9600))-1 en Low Speed

    OpenTimer0(
    (unsigned char )T0_16BIT & // Timer0 16bits, horloge int,
    T0_SOURCE_INT & T0_PS_1_1 & // prescale : 1
    TIMER_INT_ON // interruption par le timer0
    );

    WriteTimer0(0);

    RCONbits.IPEN = ENABLE;
    INTCONbits.GIEH = ENABLE;

    //Configuration de l'USART

    FOREVER // boucle infinie
    {
    if(BPOUSSOIR==NONAPPUYE && BPOUSSOIR!=BPOLD)
    {
    putcUSART('a');
    BPOLD=BPOUSSOIR;

    }
    /*---------------------------------------------------------------------------------*/
    /* Envoi un char à l'uart du pic et fait un echo sur l'uart vers le pc */
    /*---------------------------------------------------------------------------------*/

    if (DataRdyUSART()) // ch ck USART read buffer
    {
    c = getcUSART(); // lire caractère

    putcUSART(c); // renvoi l'echo du caractère entré en hyperterm

    while (BusyUSART()); // attendre jusqu'à ce que la transmission soit finie
    }
    }
    }

  7. #6
    Shaiton

    Re : anti rebond

    Bonjour,
    Oulalala, ca c'est du code pas tres lisible

    Le but de l'interruption, c'est d'arretter la tache en cour pour en faire une autre, et tres rapidement finir l'autre.
    Dans ce code, l'interruption est affreusement longue :s
    Mieux veux definir un variable (ou tableau) globale, de l'incrementer dans l'interruption, et de la traiter dans le main.

    Bon, après, reste le problème de l'anti rebond.
    Ce qu'il faut, c'est eviter les multiples interruptions (par la je veux dire plein qui s'enchainent au lieu d'une).

    Si le signal arrivant doit absolument passer par l'interruption, je serais pour un filtre extern (passif).

    Mais si quelqu'un à une idée logiciel, ca m'interresse aussi
    Le Geek Sportif !

  8. #7
    invite6af9789d

    Re : anti rebond

    Je ne peux pas faire avec un filtre passif on m'a catégoriquement interdit de le faire parce que je dois pouvoir le reconfigurer à tout moment. Certains de mes collègues savent très bien le faire logiciellement mais moi je suis apprenti ingénieur, je débute depuis presque 2 semaines avec les PIC que j'ai jamais vu et je dois me débrouiller à trouver tout seul. Et pour le code désolé c'est la première fois que j'en met un en post je savais pas du tout ce que ça allait donner.

  9. #8
    Jack
    Modérateur

    Re : anti rebond

    Une solution est de scruter le BP à l'aide d'un timer générant une interruption toutes les x ms.
    On mémorise les 10 dernières mesures par exemple, et quand toutes les valeurs sont identiques, on considère que le signal est stable.

    A+

  10. #9
    invite6af9789d

    Re : anti rebond

    Oui Jack c'est à peu près ce que j'ai fais. J'ai levé une interruption avec le timer0 toutes les 2 ms et g mémorisé les 8 derniers états grâce à un seul octet pour optimisation de la mémoire. J'ai trouvé comment on fait et ça marche nikel maintenant. Si quelqu'un veut savoir vous savez où m'écrire.
    Merci tout le monde.

  11. #10
    invitef9ed0084

    Re : anti rebond

    bonjour,
    je sais que le sujet est assez ancien mais pour moi j'ai le même problème maintenant, donc je voudrais savoir svp comment vous avez procéder.
    merci de bien vouloir me répondre.

Discussions similaires

  1. systeme anti rebond
    Par invitea2c32a52 dans le forum Électronique
    Réponses: 11
    Dernier message: 12/05/2011, 16h56
  2. anti rebond
    Par invite56f9974a dans le forum Électronique
    Réponses: 7
    Dernier message: 26/07/2007, 13h03
  3. anti rebond
    Par bouly94 dans le forum Électronique
    Réponses: 29
    Dernier message: 17/07/2007, 12h56
  4. Circuit anti-rebond dans pont en H
    Par invite6b6f65bb dans le forum Électronique
    Réponses: 15
    Dernier message: 16/03/2007, 06h57
  5. Anti rebond
    Par zanzeoo dans le forum Électronique
    Réponses: 3
    Dernier message: 07/08/2004, 10h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.