PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)



  1. #1
    bertrand.ad

    PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)


    ------

    Bonjour à tous !

    Voilà, je découvre le monde des microcontrolleurs et je dois dire que la datasheet est vraiment indigeste !

    En fait, j'aimerais tout simplement allumer une LED lorsque j'appuie sur un bouton.
    Mais je n'y arrive pas.

    Mon matériel :
    - PIC18F45K20 avec une carte avec 44 PIN (PICkit 3 Debug Express (DV164131)) (Video du modèle : https://www.youtube.com/watch?v=TsubDNJClEI)
    - PICKIT3 (MPLAB 8.92 + CSS)
    - Datasheet : http://ww1.microchip.com/downloads/e...Doc/41303G.pdf
    - Leçons en C adaptées à mon PIC mais malheureusement avec un autre compilateur : http://ww1.microchip.com/downloads/e...Doc/41370C.pdf (il y a le schém de la carte p.77 du PDF)


    D'après le dernier lien (p.31) :
    The demo board switch is connected to I/O pin RB0, which is normally pulled up to VDD
    internally. When the switch is pressed, it pulls RB0 to ground (low state).
    The PORTx Special Function Registers are used to read the state of an input pin.
    Therefore, reading PORTBbits.RB0 will give the value of the signal on the RB0 pin.
    Le schéma est en pièce jointe et p.77 du PDF (meilleure qualité)

    Si je comprends bien le pin RB0 représente l'état du bouton poussoir.
    J'ai donc tenté ma chance

    Code:
    /**  I  N  C  L  U  D  E  S  **************************************************/
    #include  <18F45K20.h>
    #FUSES INTRC_IO,NOWDT
    #USE delay (CLOCK=1MHz)
    
    
    
    #BYTE LATD=0xF8C
    #BYTE PORTD=0xF83
    #BYTE PORTB=0xF81
    #BYTE LATB=0xF8A
    #BYTE ANSELH=0xF7F
    
    
    
    
    void main(){
    
    
    	SET_TRIS_D(0b00000000); on met les pins du port B en tant que sortie pour les LED
    	LATD=0;
    	bit_clear(ANSELH,4); //  AN8-12  are  digital  inputs  (AN12  on  RB0)
    	SET_TRIS_B(0b11111111); // on met les pins du port B en tant qu'entrée pour le bouton poussoirs
    
    while(1){
    
    	if(bit_test(LATB,0)==0){ // On teste RB0, si le bouton est enfoncé alors RB0=0. 
    		bit_set(LATD,2);     // On fait allumer la LED2
    		delay_ms(5000);
    	}
    	
    	if(bit_test(LATB,0)==1){    // On teste RB0, si le bouton est relaché alors RB0=0. 
    		bit_set(LATD,7);		// On fait allumer la LED7
    		delay_ms(5000);
    	}
    
    }
    }


    La LED2 s'allume constamment et la pression sur le bouton poussoir n'a aucune conséquence...

    Merci pour votre aide

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

  2. #2
    dje8269

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Bonsoir,

    Je connais rien au PIC ( pour le moment du moins) .

    Mais je lis que tu met toutes les pisn du port B en sortie puis après en entrée ; C'est normal que ca ne fonctionne pas ;

    Désigne les pisn ou sont branchées tes led en sortie , et toutes les autres en entrée .

    bonne soirée
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  3. #3
    Gérard

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    DEBUT :
    If BP = 0 then LED1 = 1
    delay 5000
    If BP = 1 then LED2 = 1
    delay 5000
    GOTO DEBUT
    Dernière modification par Gérard ; 27/08/2014 à 20h53.

  4. #4
    Gérard

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Citation Envoyé par bertrand.ad Voir le message
    Bonjour à tous !

    Voilà, je découvre le monde des microcontrolleurs et je dois dire que la datasheet est vraiment indigeste !

    En fait, j'aimerais tout simplement allumer une LED lorsque j'appuie sur un bouton.
    Mais je n'y arrive pas.

    Mon matériel :
    - PIC18F45K20 avec une carte avec 44 PIN (PICkit 3 Debug Express (DV164131)) (Video du modèle : https://www.youtube.com/watch?v=TsubDNJClEI)
    - PICKIT3 (MPLAB 8.92 + CSS)
    - Datasheet : http://ww1.microchip.com/downloads/e...Doc/41303G.pdf
    - Leçons en C adaptées à mon PIC mais malheureusement avec un autre compilateur : http://ww1.microchip.com/downloads/e...Doc/41370C.pdf (il y a le schém de la carte p.77 du PDF)


    D'après le dernier lien (p.31) :

    Le schéma est en pièce jointe et p.77 du PDF (meilleure qualité)

    Si je comprends bien le pin RB0 représente l'état du bouton poussoir.
    J'ai donc tenté ma chance

    Code:
    /**  I  N  C  L  U  D  E  S  **************************************************/
    #include  <18F45K20.h>
    #FUSES INTRC_IO,NOWDT
    #USE delay (CLOCK=1MHz)
    
    
    
    #BYTE LATD=0xF8C
    #BYTE PORTD=0xF83
    #BYTE PORTB=0xF81
    #BYTE LATB=0xF8A
    #BYTE ANSELH=0xF7F
    
    
    
    
    void main(){
    
    
    	SET_TRIS_D(0b00000000); on met les pins du port B en tant que sortie pour les LED
    	LATD=0;
    	bit_clear(ANSELH,4); //  AN8-12  are  digital  inputs  (AN12  on  RB0)
    	SET_TRIS_B(0b11111111); // on met les pins du port B en tant qu'entrée pour le bouton poussoirs
    
    while(1){
    
    	if(bit_test(LATB,0)==0){ // On teste RB0, si le bouton est enfoncé alors RB0=0. 
    		bit_set(LATD,2);     // On fait allumer la LED2
    		delay_ms(5000);
    	}
    	
    	if(bit_test(LATB,0)==1){    // On teste RB0, si le bouton est relaché alors RB0=0. 
    		bit_set(LATD,7);		// On fait allumer la LED7
    		delay_ms(5000);
    	}
    
    }
    }


    La LED2 s'allume constamment et la pression sur le bouton poussoir n'a aucune conséquence...

    Merci pour votre aide
    Ce n'est pas le même bit.

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

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Bonjour,

    Merci de vos réponses !

    Mais je lis que tu met toutes les pisn du port B en sortie puis après en entrée ; C'est normal que ca ne fonctionne pas ;
    Une erreur de ma part dans le commentaire mais j'agis sur deux ports différents (B et D).


    DEBUT :
    If BP = 0 then LED1 = 1
    delay 5000
    If BP = 1 then LED2 = 1
    delay 5000
    GOTO DEBUT
    C'est ce que j'ai fait a priori.
    Votre BP=0 est mon bit_test(LATB,0)==0
    LATB,0 correspond au bit 0 de LATB soit RB0, soit le PIN pour le bouton poussoir

    Ce n'est pas le même bit.
    Oui, c'est normale
    Non, il y a 8 LED connectés sur le PORTD.
    bit_set(LATD,2) signifie je met à 1 le bit 2 de LATD2, soit la deuxième LED

    Merci

  7. #6
    Gérard

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Est ce que tu mesures 0V sur RB0 en appuyant sur le BP ?

  8. #7
    Bertrand.adw

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    C'est bon, j'ai trouvé !
    En fait, il faut lire l'état du bouton non pas avec LATB mais avec PORTB.
    Quelle joie quand on voit que ça fonctionne !

    /** I N C L U D E S ****************************** ********************/
    #include <18F45K20.h>
    #FUSES INTRC_IO,NOWDT
    #USE delay (CLOCK=1MHz)



    #BYTE LATD=0xF8C
    #BYTE PORTD=0xF83
    #BYTE PORTB=0xF81
    #BYTE LATB=0xF8A
    #BYTE ANSELH=0xF7F
    #bit bouton=PORTB.0 // et non LATB.0


    void main(){


    SET_TRIS_D(0b00000000);
    LATD=0;
    bit_clear(ANSELH,4); // AN8-12 are digital inputs (AN12 on RB0)
    SET_TRIS_B(0b11111111); // on met les pins du port B en tant qu'entrée

    while(1){
    bit_clear(LATD,7);
    bit_clear(LATD,2);

    if(bouton==0){ // On teste RB0, si le bouton est enfoncé alors RB0=0.
    bit_set(LATD,2); // On fait allumer la LED2
    delay_ms(5000);
    }

    if(bouton==1){ // On teste RB0, si le bouton est relaché alors RB0=0.
    bit_set(LATD,7); // On fait allumer la LED7
    delay_ms(5000);
    }

    }
    }
    En fait, comme je lis l'état, il fallait utiliser le PORTB et non LATB
    Une regle simple pour echapper à tout probleme : utiliser TRIS pour slectionner le type E ou S, PORT pour la lecture et LAT pour l'ecriture.
    http://www.abcelectronique.com/forum...ad.php?t=49417

    Merci pour votre aide à tous les deux, ça m'a permis de creuser cette histoire.
    Bonne soirée

  9. #8
    Gérard

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Je vais me le noter dans un coin.
    On peut aussi lire avec PORT.

    Content que ça marche.

  10. #9
    Gérard

    Re : PIC18 Allumer une LED en appuyant sur un bouton (MPLAB + CSS)

    Citation Envoyé par Gérard Voir le message
    Je vais me le noter dans un coin.
    On peut aussi lire avec PORT.

    Content que ça marche.
    Sûrement la fatigue ...

    Bonne nuit.


Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2013, 21h02
  2. Allumer une led avec un bouton pousoir (Arduino)
    Par invite3e837cd9 dans le forum Électronique
    Réponses: 9
    Dernier message: 12/12/2012, 13h26
  3. bouton poussoir, qui ne fonctione pas :/ pic18
    Par inviteefe6e4f2 dans le forum Électronique
    Réponses: 15
    Dernier message: 19/01/2011, 20h50
  4. Allumer une del sur PICDEM 2 plus (MPLAB MCC18)
    Par inviteeea4c416 dans le forum Électronique
    Réponses: 6
    Dernier message: 02/08/2009, 12h12
  5. Bouton poussoir, Allumer et eteindre une led
    Par jojo86 dans le forum Électronique
    Réponses: 37
    Dernier message: 06/12/2008, 09h34
Découvrez nos comparatifs produits sur l'informatique et les technologies.