Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Tout ce qui n'a pas de catégorie !
RC anti-rebond
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#1 Message par Gérard » mer. 21 août 2019 15:56

Bonjour,
Je viens de faire une recherche concernant l'anti-rebond. On y voit plein de solutions. Perso, je n'aime pas court-circuiter un condo.
Vous faites comment?

Au plaisir de vous lire.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RC anti-rebond
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mer. 21 août 2019 16:21

vu le niveau d'energie emagasiné (sous 5V) , je pense que le condo ne risque rien .

moi je fais comme cela .. pour pouvoir laisser connecté mon ICSP, pendant la phase de deboguage
Reset via le PICKit ou en court-circuitant ( strap)

reset.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

RC anti-rebond
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#3 Message par Gérard » mer. 21 août 2019 16:49

C'est pour des entrées. Donc 10K, 100n et 390 ohm vers l'entrée.
OK, je ferai comme ça.


Trop fort Paul, il a toujours une idée et une réponse. :bravo:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RC anti-rebond
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#4 Message par cyril13110 » mer. 21 août 2019 17:25

hello,
sur mes pics jai opté pour la solution de compter les rebonds et d'activer l'action sur 1 seul que jai choisi.
ca reduit le nombre de composants et ca rajoute quelques lignes par bp, mais cest plutot efficaces.
et le réglage du seul revient a regler la réactivité du bp.

je rajoute du code

Code : Tout sélectionner

'gestion du BP +
     if (portc.0=1) and (cpt_up<10) then
       inc(cpt_up)
    end if
    if (portc.0=0)then
        cpt_up=0
    end if
    if (cpt_up=3) then
       inc(selec_f)
    end if
'fin gestion BP +
Modifié en dernier par cyril13110 le jeu. 22 août 2019 07:35, modifié 1 fois.

RC anti-rebond
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » mer. 21 août 2019 19:50

Gérard a écrit :C'est pour des entrées. Donc 10K, 100n et 390 ohm vers l'entrée.
OK, je ferai comme ça.


le filtrage soft , avec timer (en mode pooling) est aussi une solution sans rajout de condo + R.

la solution la plus simple est de relire l'eat apres une tempo laissant passer les rebonds

Code : Tout sélectionner



//  extrait test clavier 5 touches: 4 fleche + 1 BP validation (en C18)
// application Menu DDS sur LCD

 
if (BP_Incr==0)
    {   
        
Tempo(50000L);
        if (
BP_Incr==0)
        {
         
Tempo(10000L);
        
i=4;  // code de la touche appuyée
        
}
     }
 




et quid de la fonction lecture bouton de mikroC ?

Code : Tout sélectionner


Button
Prototype unsigned short Button
(unsigned short *portunsigned short pinunsigned short timeunsigned short active_state);
 
Returns 
255 
if the pin was in the active state for given period
0 otherwise 

 Description 
Function eliminates the influence of contact flickering upon pressing a button (debouncing).
Parameter port specifies the location of the buttonparameter pin is the pin number on designated port and goes from 0..7parameter time is a debounce period in millisecondsparameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.
  
Aide toi, le ciel ou FantasPic t'aidera

RC anti-rebond
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#6 Message par Gérard » mer. 21 août 2019 22:53

J'utilise l'interruption du Timer1 toutes les 100ms et ne souhaite pas utiliser de tempo.

Je viens de lire l'aide sur Button, est ce que c'est clair pour vous?
Button.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RC anti-rebond
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#7 Message par pspic » jeu. 22 août 2019 07:10

Je viens de lire l'aide sur Button, est ce que c'est clair pour vous?


Bonjour,
L’aide de la fonction Button manque un peu de clarté.

Button(port, bit, temps d'appui en ms, état logique actif)

Exemple en Mikrobasic :
If Button(portA,2,10,1) then <Action 1> end if

On teste l'appui sur un bouton poussoir relié à la broche RA2 pendant 10 ms pour faire l'Action 1.
La valeur "Temps d'appui" est à adapter au matériel.

RC anti-rebond
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#8 Message par Gérard » jeu. 22 août 2019 08:18

Bonjour,
Pourquoi dans leur exemple ils utilisent oldstate?
Et que ce passe-t-il si l'interruption tombe dans la tempo?

EDIT : correction de 2 fautes. :mur:
Modifié en dernier par Gérard le jeu. 22 août 2019 15:43, modifié 2 fois.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

RC anti-rebond
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#9 Message par pspic » jeu. 22 août 2019 09:16

Voir le chapitre "Utilisation de la routine BUTTON" en Pascal mais facile à convertir en Basic.

https://www.google.fr/url?sa=t&rct=j&q= ... rZTg2s1Md6

RC anti-rebond
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » jeu. 22 août 2019 10:03

Gérard a écrit :Bonjour,
Pourquoi dans leur exemple ils utilise oldstate?
Et que ce passe-t-il si la l'interruption tombe dans la tempo?


oldstate sert à memoriser l'etat du bouton
pour detecter l'appui et le relachement

je ne connais pas en detail le deploiement du code genéré par cette fonction Button
* leur code _Button n'est pas accessible.
je suppose l'utilisation d'un timer en mode pooling

dans ce cas, une interruption externe ne changerait pas grand chose, SAUF si des traitements longue durée ( ex > 1mS)
sont fait dans l'interruption


Code : Tout sélectionner

//test button 
 #define BP1 &PORTB,1 // RB1
bit oldstate;  

 
#define BP1 &PORTB,1 // RB1
 bit oldstate; 
 
......
void main()
{
//    .. some init
   //....
   ANSELC=0;
  TRISB1_bit=1;
   ...
  do
  
{
     UART1_Write_CText("Test appui BP1 ( doit durer>=100mS) :  ");
     if (Button( BP1, 100, 1))  // Detect logical one
     {
        oldstate = 1;    // Update flag
        Led_Rouge=0;
        UART1_Write('1');
     }
     if (oldstate && Button(BP1, 100, 0))     // Detect one-to-zero transition
     {
         Led_Rouge=1;
         oldstate = 0;     // Update flag
         UART1_Write('0');
     }
     CRLF1();
     Delay_ms(1000);
    } while(1);
 


durée anti-rebond volontairement mise à 100mS pour bien saisir le fonctionnement
si maintenu à zero pendant longtemps ..pas de rafraichissement button qui était à zero
jusqu'à ce qu'on relache BP1

Test appui BP1 ( doit durer>=100mS) : 1 BP au repos (tirage interne au +VCC)
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 0 appuyé > 100mS, puis relaché
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 0
Test appui BP1 ( doit durer>=100mS) : maintenu à Zero
Test appui BP1 ( doit durer>=100mS) :
Test appui BP1 ( doit durer>=100mS) :
Test appui BP1 ( doit durer>=100mS) : maintenu à Zero
Test appui BP1 ( doit durer>=100mS) : 1 relaché
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 0 appuyé > 100mS, puis relaché
Test appui BP1 ( doit durer>=100mS) : 1
Test appui BP1 ( doit durer>=100mS) : 1





Nota:
:+1: lien SONNELEC donné par PSPIC tres instructif .. !
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 50 invités