HELP: détecter 5 appuis bouton en moins de 3 secondes ???
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

HELP: détecter 5 appuis bouton en moins de 3 secondes ???



  1. #1
    salloune

    HELP: détecter 5 appuis bouton en moins de 3 secondes ???


    ------

    Bonsoir tout le monde,
    je fais de l’électronique à mes heures perdues (gros débutant) et je me suis lancé dans un projet
    autour d'un PIC 16F677, pour le programme j'utilise mikropascal et je simule le tout avec ISIS.
    donc, mon but est de détecter 5 impulsions sur une broche en moins de 3 secondes
    - si 5 impulsions en plus de 3 secondes, on ne fait rien
    - si seulement 4 impulsions on ne fait rien etc...
    mes connaissances sont très limitées en mikropascal et sur le PIC je ne sais même pas utiliser un timer
    (si d'ailleurs quelqu'un a une doc facile je suis preneur)...
    Je viens donc demander votre aide pour me mettre sur une piste...

    Merci d'avance

    -----

  2. #2
    Montd'est

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Bonsoir

    Tu dois créer une variable qui s'incrémente de (+1) à chaque appui;

    Utiliser un timer ou delay pour compter 3 s; au bout de 3 s la variable est remise à 00;

    Si la valeur de la variable arrive à atteindre " 5 " alors >> action.

    Le premier appui doit remettre le compteur de temps à 0 mais pas les suivants.

    Je ta laisse réfléchir...
    Dernière modification par Montd'est ; 22/11/2012 à 21h53.

  3. #3
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    bonsoir,
    merci pour la réponse rapide.
    peux tu détaillé un peu plus stp?
    j'avais fait des essais avec "delay" mais ca "bloque" le programme => je ne peux pas compter PUIS attendre.
    pour l'instant j'ai réussi à allumer une LED après 4 appuis bouton, le problème c'est que je n'ai aucune notion de temps...
    je peux repartir les 4 appuis en 5s ou en 1 heure la LED s'allumera...
    J'ai bien compris que je devais lancer un "chrono" et dans ce laps de temps je dois compter le nombre d'appui en incrémentant une variable.
    le problème est que je ne sais pas mettre en oeuvre ce timer qui se déclencherait au moment du 1er appui

  4. #4
    Montd'est

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Les delays bloquent le programme le temps de leur exécution;

    Pour compter astucieusement 3s ne pas faire delay_ms(3000);
    mais plutot:

    delay_ms(1); // attente de 1ms
    inc(ma_variable); // si ma_variable = 3000 , 3 s se sont écoulées

    tu te sers de la valeur de "ma_variable" pour déterminer quand est-ce que 3 sec se sont écoulés;

    Le delay_ms(1); bloquera toujours le programme mais pendant seulement 1 ms à chaque fois ce qui fait que entre chaque delay les autres appuis sur le BP seront quand même pris en compte et le comptage du nombre d'appui pourra aussi se faire.

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

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    javais pensé à un concept de ce genre mais je crois que ça pose un soucis, en effet.
    pour détecter mes appuis bouton je fais des:

    if PORTA.0 = 1 then
    begin
    c_2 := c_2 + 1;
    while (PORTA.0 =1) do nop
    end;

    if PORTA.0 = 0 then
    begin
    c_2 := c_2 + 1;
    while (PORTA.0 =0) do nop
    end;

    ainsi je compte le nombre de fois ou mon bouton change d'état, aussi bien de 0 vers 1 que de 1 vers 0 (car je ne sais pas faire autrement)
    et pour attendre l'appui suivant ou le relâchement du bouton j'utile un "while do nop"
    donc ma notion de temps serait faussée même j'intercale des "delays_ms(1)"
    je crois qu'il y'a plus simple pour détecter un front montant mais mes connaissances sont limitées hélas...

  7. #6
    Montd'est

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    J'ai jamais utilisé de "while do nop" je sais pas ce que ça fait

    Mais j'aurais fait:


    var: c_2,auto:byte;


    begin

    auto:=1; // valeur initiale 1

    while true do

    begin

    delay_ms(1);


    if ((PORTA.0 = 1) and (auto=1)) then
    begin
    c_2 := c_2 + 1;
    auto:=0;
    end;






    if PORTA.0 = 0 then
    begin
    auto:=1;
    end;







    end;


    end.



    "ainsi je compte le nombre de fois ou mon bouton change d'état, aussi bien de 0 vers 1 que de 1 vers 0 " Avec ce bout de programme là c_2 ne s'incrémentera que sur front montant ! Je te laisse deviner comment ça marche...

    Attantion: avec ce que j'ai fait là le delay_ms(1); ne sert à rien pour le moment, il servira pour la suite que je te laisse un peu deviner...

  8. #7
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Apprends à te servir des timer, ca te sera utile pour la suite...

    Que se passe t il dans ce cas de figure ?:

    t0 => appuie sur le bouton
    t1 => appuie sur le bouton
    t2 => appuie sur le bouton
    t2.2 => appuie sur le bouton
    t4.1=> appuie sur le bouton
    t4.3=> appuie sur le bouton
    t4.5=>appuie sur le bouton

    Du coup après l'appuie de t2.2 on aura 4 impulsions (pas assez) et la 5e à t = 4.1 tarde à venir.
    Par contre en comptant à partir de t2.2 on a bien 5 impuls en moins de 3 secondes, faut il le prendre en compte ?

    En gros, est ce qu'il s'agit de 5 impulsions sur 3 secodnes "flottante" ?

  9. #8
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    merci à vous de vous pencher sur mon problème.

    @Montd'est: je vais tester ta solution, je crois que j'ai compris le principe mais faut que je creuse encore
    @terriblement: j'aimerais connaitre les timer mais je ne trouve rien d'assez simple pour le novice que je suis
    en ce qui concerne le fonctionnement je ne sais pas ce qui serait le mieux comme fonctionnement...
    l'appui bouton est en fait le signal reçu depuis une télécommande.
    je crois que dans un premier temps je choisirai le fonctionnement le plus simple:
    dès le premier signal, on lance les 3s et si dans ce laps de temps on n'a pas les 5 impulsions alors on retourne dans le "main" qui est du genre:

    begin // programme principal
    Init;
    while true do
    begin
    Read_Input_1;
    Read_Input_2;
    end
    end.

    J'ai en fait 2 "bouton" de télécommande
    j'ai pas de souci avec le bouton 1 car je dois juste détecter un appui simple ou un appui long
    mais tout mon problème tourne autour du bouton 2

    A bientôt je vous tiendrai au jus

  10. #9
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Pour apprendre à utiliser les timer...lis la doc (plusieurs fois), ca ne fait que quelques pages

    Après avoir lu, relu, et rerelu, cherche des exemples sur le net, voit comment ca marche, et ensuite essaie de te lancer de ton coté, ca te prendra un certain temps, mais c'Est vraiment très utile.

  11. #10
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Je me balade toujours avec mon pc et comme je passe bcp de temps
    Dans les transports. J'en profite pour lire...
    Mais il y'a encore de grosse zones de flou
    Bon, comme il y'a des pro je demande:
    Est ce que le timer s'utilise uniquement avec les interruptions
    Ou est ce qu'il est possible de consulter a n'importe quel moment
    L'état de TMR1L et TMR1H et de comparer leurs valeurs?

    En dehors de ça j'ai aussi eu un problème de variables, pourtant déclarées dans mikropascal
    Mais invisible dans la simulation de proteus.
    Je crois avoir régler le problème en utilisant la fonction "absolute"
    Affaire a suivre...

    Merci pour votre aide
    Dernière modification par salloune ; 26/11/2012 à 06h19.

  12. #11
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Je te joins le code (vraiment fait à l'arrache, les commentaires ne sont peut etre pas juste/plus actuels), je saurais meme plus dire a quoi servait ce code exactement, mais ca utilise les timer pour un 18F46J50:

    Code:
    #include "p18F46J50.h"
    #include "oled.h"
    
    #pragma config XINST = OFF
    #pragma config OSC = ECPLL	
    #pragma config PLLDIV = 3	//Si clock = 12MHz on divise par 3 pour tomber aux 4MHz requis
    #pragma config CPUDIV = OSC4_PLL6//OSC2_PLL2//
    
    unsigned int test;
    void interruption_timer_0 (void);
    
    #pragma code interruption_high = 0x08
    void interruption_high(void)
    {
    	_asm
    	goto interruption_timer_0
    	_endasm
    }
    
    void main()
    {
    	int seconde=0;
    	test=0;
    
    	ResetDevice();
    	FillDisplay(0x00);
    	
    	RCONbits.IPEN = 0;		//pas de priorité
    	INTCONbits.GIE = 1;		//activation générale des interrupts si IPEN =0
    	INTCONbits.PEIE = 1;	//activation des interrupts périphériques
    	
    	T1CONbits.TMR1CS = 0b10;
    
    	T0CON = 0b11000111;
    	
    	while(1)
    	{		
    		if(test==8)
    		{
    			seconde++;
    			test=0;
    			oledWriteChar1x((char)(seconde+48),0+0xB1,0);
    		}			
    	}			
    }
    
    #pragma interrupt interruption_timer_0
    void interruption_timer_0 (void)
    {
    	test++;
    	INTCONbits.TMR0IF = 0;
    }
    et pour te répondre, oui on peut lire l'etat du tiemr sans interruption.

  13. #12
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Merci,
    c'est pas du mikropascal?

  14. #13
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    heum non c'est du C, j'avais oublié que tu voulais du mikropascal sorry :S
    peut etre serait l bon de te mettre au C ?

  15. #14
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    j'ai bien l'impression qu'un jour je vais devoir basculer sur du C
    mais comme j'ai déjà bien entamé mon projet je vais attendre le prochain
    ...sinon, quel logiciel pour du C? un logiciel qui corrige les fautes un peu comme celui que j'utilise "mikropascal"

    pour en revenir aux timer, j'ai essayé de créer une interruptions avec le timer 1 sur 16 bits mais j’attends toujours! lol
    mais je vais y arriver...

  16. #15
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    attaque toi d'abord aux interruptions sans timer (front sur une broche par exemple).

    Sinon, comme dis plus haut, rien ne t'empeche de lire l'état du timer `tout moment, pour voir si il compte.

  17. #16
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    j'ai déjà réussi a créer une interruption par un changement d'état d'une entrée.
    ça marchait assez bien (même si je n'arrive pas à apprécier l’intérêt par rapport à un simple "IF" )

    dans la simulation de PROTEUS j'ai surveillé (dans le tableau des variables) l'état de TMR1L et TMR1H à chaque pas du programme
    mais ça ne changeait pas!

    ce soir dans le train je vais refaire des essais...le temps passe beaucoup plus vite comme ça!

  18. #17
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    heum le mieux serait de faire un

    while(1)
    {
    tempo (50ms par exemple)
    variable = valeur_TMR
    }

    et de mettre un point d'arret dans le while pour voir si variable change, me semble que le timer ne fonctionne pas (correctement?) en mode "pas a pas", mais j'ai un doute. Je sais pas non plus si en simulation ca fonctionne côté timer.

  19. #18
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    okok pas bête l'astuce!!!
    mais alors pourquoi on voit les variables TMR1L et TMR1H dans le tableau des variables si ça ne fonctionne
    pas en mode pas à pas?
    de toute façon je vais essayer avec ta technique...
    A mon avis j'ai pas réussi à mettre le timer1 en route

  20. #19
    terriblement

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Parce que en mode point d'arret ca fonctionne ^^

    Il me semble que je pensais que mon RTCC ne fonctionnait pas, et qu'en fait en faisant avec un point d'arret ca fonctionnait correctement, mais je suis plus sur.
    edit: je n'utilise presque pas la simu, donc je sais pas comment ca se passe de ce coté.

  21. #20
    Montd'est

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    Il existe Mikropascal et MikroC du même éditeur !

  22. #21
    salloune

    Re : HELP: détecter 5 appuis bouton en moins de 3 secondes ???

    sur le principe de montd'test
    j'ai réussi à coder ce que je voulais, ça passe bien en simulation proteus
    je suis sur qu'il y'a des lignes en trop...mais c'est pas grave! lol
    maintenant je vais m'attaquer aux timer et pourquoi pas switcher sur du C
    car si j'ai bien compris c'est plus répandu que du mikropascal...
    dans tous les cas merci à tous pour votre implication
    c'est cool de trouver de l'aide!
    je reviendrai poster mes questions alors ne vous éloignez pas trop...

Discussions similaires

  1. [Thermique] Saunier Duval Themaplus C24 : de moins en moins d'eau chaude ! [résolu]
    Par Super4L dans le forum Dépannage
    Réponses: 8
    Dernier message: 24/07/2011, 19h13
  2. Réponses: 2
    Dernier message: 06/05/2009, 19h20
  3. [Thermique] Chauffe-eau électrique : moins d'ECS, bouton rouge apparaît sur le thermostat.
    Par invitefb04337f dans le forum Dépannage
    Réponses: 13
    Dernier message: 29/11/2008, 20h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.