bouton poussoir, qui ne fonctione pas :/ pic18
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

bouton poussoir, qui ne fonctione pas :/ pic18



  1. #1
    inviteefe6e4f2

    bouton poussoir, qui ne fonctione pas :/ pic18


    ------

    Bonjour

    J'ai pic un pic18f4685 , avec un pickit2 et mplab v8.56

    J'ai repris un ancien bout de code qui fonctionne parfaitement,

    le but est que lorsque j'appuie ou relache sur un bouton, je change de programme (Appuie: programme : magnétométre, Relaché capteur a ultrason)

    bref

    voici mon code simplifié

    Code:
    #include <p18f4685.h>
    #include <delays.h>
    
    #pragma config OSC = HS			
    #pragma const config FCMENB = OFF	
    #pragma const config IESOB = OFF	
    #pragma config PWRT = OFF			
    #pragma const config BOR = BOHW 	
    #pragma const config BORV = 45		
    #pragma config WDT = OFF			
    #pragma config DEBUG = OFF			
    #pragma config LVP = OFF			
    #pragma config PBADEN = OFF
    
    #define PD0		PORTDbits.RD0	
    #define LED0 	LATBbits.LATB0
    #define LED1 	LATBbits.LATB1
    #define ON 		1
    #define OFF 	0
    
    
    int init (void);
    
    void main (void)
    {
    	init();
    	while(1)
    	{	
    		LED1=ON;
    		Delay10KTCYx(100);
    		LED1=OFF;
    		if(PD0) 
    		{	
    			LED0=ON;
    		}
    		else
    		{
    			LED0=OFF;
    		}	
    	}
    }
    
    int init (void)
    
    {
    	TRISB=0x00;
    	TRISD=0x01;
    	LED0=OFF;
    	LED1=OFF;
    
    }
    Si je lui dit (PD0==0) la LED0 s'allumera, mais si je teste (PD0==1) il ne se passe rien, de plus, j'ai rajouté un delai, pour savoir, si la boucle se termine... et ça ma l'air de bien bloqué, puisque la LED1 ne clignote meme pas :/

    Voici, voilà

    Je vous remercie d'avance pour votre attention et vos réponse

    (j'ai trouvé un post ici mais cela ne m'a pas aidé )

    -----

  2. #2
    invite29971eb1

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Il y a bien une résistance de tirage sur ta broche, en interne ou en externe?

  3. #3
    inviteefe6e4f2

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    oui 10kohms :/, j'ai changé de µC (j'en ai plusieurs sous la main) donc je comprends pas..
    ne serait-ce pas au niveau de la configuration?...? pourtant je ne vois rien dans la doc qui se rapporte au portD

  4. #4
    invite03481543

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Bonjour,

    Elle représente combien de temps cette tempo ?

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

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    En même temps je ne suis pas surpris que la led1 reste allumée puisque la séquence est la suivante:

    on allume,
    on temporise (mais elle est toujours allumée) puis on l'éteint mais sans autre tempo... donc quelques µs => pour l'oeil elle est toujours allumée

  7. #6
    Bouteille51

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Bonjour,

    j'ai bien peur que meme si ta LED s'eteint, tu n'aies pas le temps de le voir, tu la rallume juste apres l'avoir eteinte dès que tu re-entres dans ta boucle.

    En test j'aurais plus vu quelque chose de la sorte :

    Code:
    void main (void)
    {
    	init();
    	while(1)
    	{	
    		Delay10KTCYx(100);
    		LED1=OFF;
    		if(PD0) 
    		{	
    			LED0=ON;
    		}
    	}
    }

    Ton delay doit se faire apres ton eventuel changement d'etat pour que tu puisse le voir.
    A supposer que ton delay soit asez long egalement pour qu'on puisse le voir a l'oeil nu.

    Bon courage.

  8. #7
    inviteefe6e4f2

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    mmh = 200ms (en gros elle devrait clignoter a 5hz)

  9. #8
    invite03481543

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Donc:

    Code:
    LED1=ON;
    Delay10KTCYx(100);
    LED1=OFF;
    Delay10KTCYx(100);
    
    etc...
    Puis il faut prévoir un anti-rebonds parce qu'ainsi vous éviterez tout problème.
    Là ce qui se passe c'est qu'au moindre rebonds, et il y en a plein sans filtrage hard ou soft, les deux conditions seront accédées et pour votre oeil rien ne bouge réellement.
    Je vous conseille de mettre une tempo dans votre test et de retester 100ms plus tard, si l'appui est toujours actif.

  10. #9
    Forhorse

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Citation Envoyé par HULK28 Voir le message
    En même temps je ne suis pas surpris que la led1 reste allumée puisque la séquence est la suivante:

    on allume,
    on temporise (mais elle est toujours allumée) puis on l'éteint mais sans autre tempo... donc quelques µs => pour l'oeil elle est toujours allumée
    Ah oui bien vu, c'est evident.
    Me semblait bien qu'il y'avait un truc qui clochait dans ce programme sans reussir à mettre le doigt dessus.
    Comme quoi parfois quand c'est trop evident on cherche les complications pour rien.

  11. #10
    Bouteille51

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Eheh doublé

  12. #11
    invite03481543

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Code:
    Delay10KTCYx(100);
    LED1=OFF;
    Delay10KTCYx(100);
    
    if(PD0) 
    {
    Delay10KTCYx(10);
     if(PD0)	LED0=ON;
    }

  13. #12
    inviteefe6e4f2

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    pour la tempo
    le calcul est bien 20mhz/4 soit 5000 000
    5000 000/10 000 (delay10KTCYx(1000)) soit 1hz

    pour la tempo ça fonctionne, cependant, ma LED0 ne s'allume pas quelques soit l'état de l'entrée PD0 (ya une resistance de tirage de 10kohms dessus)

  14. #13
    inviteefe6e4f2

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Bon et bien j'ai toujours aucune réaction lorsque je met du +5 sur mon entrée RD0, cependant j'ai mes dels qui clignognent donc merci,
    je vais changer de port en attendant.
    C'est bien sympa des leds qui clignotent mais ça m'apporte plus rien =).

  15. #14
    invite03481543

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Essaye comme ça:

    Code:
    #define LED0 	PORTBbits.RB0
    #define LED1 	PORTBbits.RB1

  16. #15
    inviteefe6e4f2

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Eh bien, je viens de changer de port , j'ai pris PORTC.RC5 et ça fonctionne.
    Je vais essayer comme tu m'as dit.
    Merci

    A l'origine, j'avais ce code (d'un autre projet)

    Code:
     
    
    #define TRIS_RC3 	TRISCbits.TRISC3	// Pin 18 SCL;
    #define TRIS_RC4 	TRISCbits.TRISC4 	// Pin 23 SDA
    // Indicateur CMD en cours;
    #define	LEDA		LATDbits.LATD0		// Pin 19;
    #define	LEDB		LATDbits.LATD1		// Pin 20;
    #define LEDC		LATDbits.LATD2		// Pin 21;
    // Indicateur Valeur en cours;
    #define LED0		LATDbits.LATD4		// Pin 27;
    #define LED1		LATDbits.LATD5		// Pin 28;
    #define LED2		LATDbits.LATD6		// Pin 29;
    #define LED3 		LATDbits.LATD7		// Pin 30;
    // Sélection des capteurs;
    #define BT0			PORTBbits.RB0		// Pin 33;
    #define BT1			PORTBbits.RB1		// Pin 34;
    #define BT2			PORTBbits.RB2		// Pin 35;
    #define BT3			PORTBbits.RB3		// Pin 36;
    // Selecteur CMD;
    #define BTA			PORTAbits.RA0		// Pin 2;
    #define BTB			PORTAbits.RA1		// Pin 3;
    #define BTC			PORTAbits.RA2		// Pin 4;
    
    void Init_Main(void)
    {
    		TRISA=0x05;										// RA0, RA1, RA2 en entrée; 0b00000111;
    		TRISB=0x0F; 									// RB0, RB1, RB2, RB3 en entrée; 0b00001111;
    		TRISD=0x00; 									// RD0, RD1, RD2 en sortie (LEDA:LEDC) RD4, RD5, RD6, RD7, en sortie (LED0:LED3);
    		PORTA=0x00;										// Valeur PORTA = 0; 0;
    		PORTB=0x00; 									// Valeur PORTB = 0; 0;
    		PORTD=0x00; 									// Valeur PORTD = 0; 0;
    		LATA=0x00;										// Mise à zéro des sorties A;
    		LATD=0x00; 										// Mise à zero des sorties B;
    		LATD=0x00; 										// Mise à zero des sorties D;
            ADCON1=0x0F; 									// AN0:AN11 = Ports Digitaux;
            TRIS_RC3 = 1;									// SCL;
            TRIS_RC4 = 1;									// SDA;
            OpenI2C(MASTER, SLEW_OFF);						// Maitre, Bus a 100khz;	
            SSPADD = 49;  									// 100KHz sous 20MHz ((20 000 000 : ( 4 * 100 000 )) - 1 = 49;
    
    }
    Je ne comprends pas pourquoi, d'un pic a un autre (exactement les mêmes avec la même configuration, ça ne fonctionne pas) ce n'est pas la première fois que je fais face à ce probléme

  17. #16
    invite03481543

    Re : bouton poussoir, qui ne fonctione pas :/ pic18

    Simplement parcequ'il aurait fallu initialiser les LATx comme il est fait dans le programme original, fait dans le main().

Discussions similaires

  1. pic + bouton poussoir ne fonctionne pas !!!
    Par invite3a95e38f dans le forum Électronique
    Réponses: 26
    Dernier message: 13/07/2012, 10h55
  2. bouton poussoir ?
    Par invited1b9fc52 dans le forum Électronique
    Réponses: 19
    Dernier message: 08/07/2009, 21h34
  3. Télérupteur : 1 poussoir ne fonctione pas. [résolu]
    Par invite3d62c616 dans le forum Bricolage et décoration
    Réponses: 14
    Dernier message: 20/12/2008, 15h43
  4. Cookie qui ne fonctione pas ???
    Par inviteba9bce0d dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 20/02/2007, 13h37
  5. Bouton poussoir
    Par invite4d36e559 dans le forum Électronique
    Réponses: 4
    Dernier message: 23/06/2005, 14h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...