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

Problème contrôle LED avec bouton poussoir



  1. #1
    $uper-Poivron

    Problème contrôle LED avec bouton poussoir


    ------

    Bonjour,

    Je souhaite commander une led (enfin plusieurs branchées sur un même port) à l'aide d'un bouton poussoir :
    - bouton appuyé : led allumée
    - bouton relaché : led eteinte

    J'ai mis mon montage en pièce jointe. J'ai tenté de faire un anti-rebond logiciel comme vous pouvez le voir ci-dessous, mais je ne suis pas sûr de son exactitude. Je programme sur un PIC16F54 en C avec MPLAB et le compilateur CCS :

    Code:
    /**
    #include <16f54.h>
    #fuses HS, NOPROTECT, NOWDT
    #use delay (clock=20000000)
    #include <stdio.h>
    
    // Variables
    int8 tempo=16; //Variable pour l'anti-rebond
    char action;
    int1 inter=0;
    
    void anti_rebond(void);
    
    
    // Fonction d'allumage des LEDS
    void affichage(void){
    	if(action>0)
    		output_high(PIN_B0);
    	if(action>1)
    		output_low(PIN_B0);
    }
    
    
    void main(void){
    
    	// Configuration des entrées/sorties
    	set_tris_a(0b00000000);
    	set_tris_b(0b11000100);
    	
    	//Initialisation des sorties
    	output_a(0x00);
    	output_b(0b11000011);
    	
    
    	// Initialisation de l'allumage des leds (bouton relaché)
    		// Eteindre Leds jaunes
    		output_low(PIN_B0);
    
    		action=0;
    
    	// Main
    	for(;;){
    		inter=input(PIN_B2); // On lit le port du BP
    		if(inter){
    			++action;
    			anti_rebond();
    			inter=input(PIN_B2);
    			while(inter);
    			anti_rebond();
    		}	
    		affichage();
    	}	
    	
    }
    
    
    void anti_rebond(void){
    	for(tempo=0;tempo<1000;tempo++);	//anti-rebond de 10ms
    }
    Mon problème c'est que ça ne fonctionne pas du tout, la led ne s'allume pas et ne s'éteint pas non plus ^^. Je précise qu'en l'allumant simplement sans bouton poussoir, elle fonctionne. Une idée d'où cela peut provenir ?

    Merci !

    -----
    Images attachées Images attachées

  2. Publicité
  3. #2
    indri

    Re : Problème contrôle LED avec bouton poussoir

    Bête question: T'appuie une fois: action =1...une autre action:2...etc jusque 256 puis seulement repasse à 0...Donc t'allume jamais...ou une fois après 256 coup..
    Si j'ai bien suivi ton code..?

    Sinon y'a pas d'interruption dans les pics?
    Là où va le vent...

  4. #3
    $uper-Poivron

    Re : Problème contrôle LED avec bouton poussoir

    Oui, justement je me disais que j'avais pas déterminé le retour à l'action 0. Mais par contre ca peut marcher qu'en appuyant à nouveau sur le bouton et moi je veux en relachant le bouton. Je sais pas comment le traduire.

  5. #4
    Seb.26

    Re : Problème contrôle LED avec bouton poussoir

    et pourquoi tu fais pas juste :
    Code:
    while(1)
    {
      if(inter)
      {
        output_high(PIN_B0);
      }
      else
      {
        output_low(PIN_B0);
      }
    pour répondre à ton besoin en msg#1, tout le bazar autours ne sert à RIEN ...

    (d'ailleurs, le uCPU non plus ne sert à rien, il te suffisait de mettre l'inter en série avec la R du transistor ... donc j'en déduis que tu aime faire compliquer quand on peut faire simple, ou alors que tu donne que la moitié des infos ... )
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  6. #5
    $uper-Poivron

    Re : Problème contrôle LED avec bouton poussoir

    Seb je te rassure, je ne me complique pas la vie, c'est juste que sur un autre port que je n'ai pas précisé, je fais clignoter des leds.
    Sinon, j'avais déjà essayé cette solution : quand j'appuie ça s'allume bien, mais quand je relâche ça reste allumé...

  7. A voir en vidéo sur Futura
  8. #6
    Seb.26

    Re : Problème contrôle LED avec bouton poussoir

    Citation Envoyé par $uper-Poivron Voir le message
    Seb je te rassure, je ne me complique pas la vie, c'est juste que sur un autre port que je n'ai pas précisé, je fais clignoter des leds.
    ... me voilà rassuré !

    Citation Envoyé par $uper-Poivron
    Sinon, j'avais déjà essayé cette solution : quand j'appuie ça s'allume bien, mais quand je relâche ça reste allumé...
    ça devrait pas ...

    "my 2 cents" : plutôt que de tenter de contourner un problème qui de toute façon reviendra sur le devant de la scène, creuse pour trouver d'où ça vient ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. Publicité
  10. #7
    amoniaque

    Re : Problème contrôle LED avec bouton poussoir

    Salut,

    J'ai fait comme Seb.26 a dit :
    Code:
    void main(void)
    {
    	// Configuration des entrées/sorties
    	set_tris_a(0b00000000);
    	set_tris_b(0b11000100);
    	
    	// Eteindre Leds jaunes
    	output_low(PIN_B0);
    	
    	
    	while (1)
    	{
    		if (input(PIN_B2))
    		{
    			output_low(pin_B0);
    		}
    		else
    		{
    			output_high(pin_B0);
    		}		
    	}	
    }
    Puis simulé sous Isis et ça fonctionne nickel !

    Par contre , si tu dois allumer les DEL quand le BP est appuyé alors c'est quand RB0 = 0 et pas 1 .

    Et j'ai une question : est ce que tu veux que tes DEL soient commandées par niveau (l'état des DEL recopie l'inverse de l'entrée ) ou par front (front descendant pour allumer et montant pour éteindre) ? Perso la réponse ne m'a pas sauté aux yeux) dans ce qui a été expliqué

    A++

  11. #8
    Seb.26

    Re : Problème contrôle LED avec bouton poussoir

    Citation Envoyé par amoniaque Voir le message
    Et j'ai une question : est ce que tu veux que tes DEL soient commandées par niveau (l'état des DEL recopie l'inverse de l'entrée ) ou par front (front descendant pour allumer et montant pour éteindre) ?
    Quelle sera la différence visible par l'utilisateur ?
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #9
    $uper-Poivron

    Re : Problème contrôle LED avec bouton poussoir

    Oui, ça m'est égal que je fasse une détection de niveau ou de front. Je me demandais si ce n'était pas ma variable qui lit l'entrée du port qui n'était pas en cause :

    Code:
    for(;;){
    		inter=input(PIN_B2);
    		if(inter){
    			output_high(PIN_B0);
    			anti_rebond();
    		}
    		else{ 
    			output_low(PIN_B0);
    		}
           }
    J'ai l'impression que la variable inter (type int1) ne change plus de valeur une fois qu'elle passe à 1.

  13. #10
    Seb.26

    Re : Problème contrôle LED avec bouton poussoir

    PS: à quoi sert ton anti_rebond() ???

    Tu peux donner le code de input(PIN_B2);
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  14. #11
    $uper-Poivron

    Re : Problème contrôle LED avec bouton poussoir

    Euh, ben c'est un anti-rebond logiciel pour éviter les rebonds du bouton poussoir. D'ailleurs, soit dit en passant, mon bouton poussoir est en fait un interrupteur à lamelle souple avec 3 broches dont une laissée libre. Ca vient peut-être de là aussi je sais pas.

    Pour le code de input(PIN_B2), c'est en fait une fonction rendue disponible par le compilateur CCS dont voici la deescription :

    Syntax:
    value = input (pin)

    Parameters:
    Pin to read.

    Returns:
    0 (or FALSE) if the pin is low,
    1 (or TRUE) if the pin is high

    Function:
    This function returns the state of the indicated pin. The method of I/O is dependent on the last USE *_IO directive. By default with standard I/O before the input is done the data direction is set to input.


    Voila, du coup je vais regarder dans les codes exemples proposés par l'aide CCS. Je vous tiens au courant.

    Merci

  15. #12
    $uper-Poivron

    Re : Problème contrôle LED avec bouton poussoir

    C'est bon j'ai réussi !

    Finalement, j'ai bien creusé les exemples de code et j'ai trouvé cette syntaxe :

    Code:
    while(!input(PIN_B2));
    		output_high(PIN_B0);
               while(input(PIN_B2));
                    output_low(PIN_B0);
    Et là pas de soucis, ça fonctionne bien. Du coup j'abandonne l'idée de l'anti-rebond puisque ça marche très bien sans. Merci en tout cas pour le temps passé pour moi.

    A+

  16. Publicité

Discussions similaires

  1. Toupie avec bouton poussoir
    Par Lutin_malin dans le forum Bricolage et décoration
    Réponses: 6
    Dernier message: 17/02/2011, 16h57
  2. Bouton poussoir, Allumer et eteindre une led
    Par jojo86 dans le forum Électronique
    Réponses: 37
    Dernier message: 06/12/2008, 09h34
  3. led + bouton poussoir
    Par invite9865321 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/04/2008, 18h40
  4. Fixation bouton-poussoir & led dans menuiserie
    Par amundsen dans le forum Électronique
    Réponses: 3
    Dernier message: 06/04/2008, 19h11
  5. remplacer un bouton poussoir avec un pc
    Par xavkan dans le forum Électronique
    Réponses: 4
    Dernier message: 04/07/2003, 21h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.