Lecture de Switch PIC18
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Lecture de Switch PIC18



  1. #1
    skylow17

    Lecture de Switch PIC18


    ------

    Bonjour,
    Je viens de commencer la programmation de uC PIC et j'essaie de me faire la main en commençant des petits projets de base comme le classique chenillard de leds ou le clignotement, (je faisais déjà du uC sur des uC de silabs).

    Problème :
    J'ai essayer de faire allumer une led selon la position d'un switch mais le PIC ne semble en avoir rien à faire, c'est comme si il le lisait seulement à l'initialisation et du coup la led reste allumée. j'ai beau retournée le problème dans tous les sens rien n'y fait. Voilà mon :
    Code:
    /* 
     * File:   main.c
     * Author: Erwann
     *
     * Created on 4. juillet 2015, 14:14
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>
    #include <pic18f14k22.h>
    
    #pragma config FOSC=IRC,LVP=OFF,MCLRE=ON,WDTEN=OFF
    
    /*
     * Implémenter un programme qui allume une led en fonction de la position du 
     * switch.
     */
    int main(int argc, char** argv) 
    {
        
        TRISCbits.TRISC2 = 0;               //bit RC2 en output - LED
        TRISAbits.TRISA2 = 1;               // bit RA3 en input - Switch
        
        while(1) // début du programme 
        {
            if (LATAbits.LATA2 == 1)     // si le switch est au repos la led s'allume
            {
                LATCbits.LATC2 = 1;
            }
            else                            //Sinon elle s'éteint 
            {
                LATCbits.LATC2 = 0;
            }
        }
        return (EXIT_SUCCESS);
    }
    Pour info je suis sur mplab et voici le schéma de ma plaque d'exp. :
    Nom : LPC Schematic.jpg
Affichages : 140
Taille : 85,5 Ko

    Par contre j'utilise un PIC18F14k22 mais les connexions sont plus ou moins identique normalement, le switch "SW1" se trouve par contre sur la sortie RA2 et non RA3 et j'utilise la led DS3.

    Merci d'avance pour vos réponse ou vos pistes qui me seront très utiles

    -----

  2. #2
    DAUDET78

    Re : Lecture de Switch PIC18

    Le strap JP5 est en place ?
    J'aime pas le Grec

  3. #3
    skylow17

    Re : Lecture de Switch PIC18

    oui j'ai essayé avec et sans pour vérifier si le schéma était bon.

  4. #4
    skylow17

    Re : Lecture de Switch PIC18

    oui j'ai essayé avec et sans pour vérifier si le schéma était bon. J'ai bien 5V à l'entrée de la pin quand le micro est allumée et le switch au repos.

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

    Re : Lecture de Switch PIC18

    Bonjour,

    Code:
    TRISAbits.TRISA2 = 1;               // bit RA3 en input - Switch
    Rien ne vous choque?

  7. #6
    invite03481543

    Re : Lecture de Switch PIC18

    Le port A est par défaut en analogique, il vous faut donc le déclarer au préalable en numérique (voir la doc -> ANSEL=0; ).
    Dernière modification par HULK28 ; 04/07/2015 à 17h17.

  8. #7
    skylow17

    Re : Lecture de Switch PIC18

    haha je suis persuadé que le problème vient de là mais comme je l'ai dit je suis débutant en uC PIC.
    Ce que vous proposer donc c'est que je déclare "ANSEL = 0" au début de la fonction main ?

  9. #8
    skylow17

    Re : Lecture de Switch PIC18

    Citation Envoyé par HULK28 Voir le message
    Bonjour,

    Code:
    TRISAbits.TRISA2 = 1;               // bit RA3 en input - Switch
    Rien ne vous choque?
    Autant pour moi je me suis fier au schéma pour les commentaires mais c'est bien TRISAbits.TRISA2 = 1;

  10. #9
    invite03481543

    Re : Lecture de Switch PIC18

    Oui juste avant le while(1)

    Et il vous faudra appuyer sur le bon switch.

  11. #10
    skylow17

    Re : Lecture de Switch PIC18

    D'accord merci, je vais essayer cela et je vous tient au courant du résultat

  12. #11
    skylow17

    Re : Lecture de Switch PIC18

    Citation Envoyé par HULK28 Voir le message
    Oui juste avant le while(1)

    Et il vous faudra appuyer sur le bon switch.
    Malheureusement le programme ne fonctionne toujours pas. voilà le code modifié :
    Code:
    /* 
     * File:   main.c
     * Author: Erwann
     *
     * Created on 4. juillet 2015, 14:14
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>
    #include <pic18f14k22.h>
    
    
    #pragma config FOSC=IRC,LVP=OFF,MCLRE=ON,WDTEN=OFF
    
    /*
     * Implémenter un programme qui allume une led en fonction de la position du 
     * switch.
     */
    int main(int argc, char** argv) 
    {
        
        TRISCbits.TRISC2 = 0;               //bit RC2 en output - LED
        TRISAbits.TRISA2 = 1;               // bit RA2 en input - Switch
        ANSEL = 0;
        
        while(1) // début du programme 
        {
           if (LATAbits.LATA2 == 1)     // si le switch est au repos la led s'allume
            {
                LATCbits.LATC2 = 1;
            }
            else                            //Sinon elle s'éteint 
            {
                LATCbits.LATC2 = 0;
            }
        }
        return (EXIT_SUCCESS);
    }
    Et pour infos il n'y a qu'un seul switch donc pas d'erreurs possible.

  13. #12
    antek

    Re : Lecture de Switch PIC18

    Vérifier avec le simulateur le registre LATA, si un appui a un effet.

    if (LATAbits.LATA2 == 1) // si le switch est au repos la led s'allume
    Il ne faudrait pas plutôt lire le registre PORTA ?

  14. #13
    invite03481543

    Re : Lecture de Switch PIC18

    Oui très bonne remarque.

  15. #14
    skylow17

    Re : Lecture de Switch PIC18

    Citation Envoyé par antek Voir le message
    Vérifier avec le simulateur le registre LATA, si un appui a un effet.

    if (LATAbits.LATA2 == 1) // si le switch est au repos la led s'allume
    Il ne faudrait pas plutôt lire le registre PORTA ?
    Enfaite je ne comprends pas la différence en LAT et PORT, vous pourriez m'expliquer ?

  16. #15
    skylow17

    Re : Lecture de Switch PIC18

    Citation Envoyé par antek Voir le message
    Vérifier avec le simulateur le registre LATA, si un appui a un effet.

    if (LATAbits.LATA2 == 1) // si le switch est au repos la led s'allume
    Il ne faudrait pas plutôt lire le registre PORTA ?
    OMG ça marche enfin j'ai remplacé if (LATAbits.LATA2 == 1) par if (PORTAbits.RA2 ==1)

    ça m'enlève une sacrée épine du pied mais il me reste encore à comprendre pourquoi PORTA et pas LATA

  17. #16
    invite03481543

    Re : Lecture de Switch PIC18

    Les nouveaux PIC (enfin ça remonte maintenant à quelques temps) on 2 commandes distinctes, une pour lire le port et une autre pour écrire, pour une raison essentiellement de sécurité sur la commande envoyée et réellement active en sortie du port.
    L'écriture est "latchée" d'où le fameux LAT pour assurer que l'état du port ne sera pas influencée par un autre évènement externe (sur la sortie du port lui même), une variation lente par exemple une grosse capa à charger qui vis à vis de la vitesse du PIC mais des années.
    Hors pendant ce temps si le programme doit aller écrire quelque chose dans le registre du PORT, il va d'abord lire le contenu du registre (read/modify/write) puis en cas de condition logique à appliquer sur l'ensemble du port par exemple, va être trompé par l'état réel de cette sortie spécifique qui tarde à monter à 1, par exemple de RA2 qui ne sera pas encore à l'état 1, il va donc lire 0.
    Il va s'ensuivre une erreur sur l'état final écrit.
    Sachant que tout cela dure quelques µs seulement.
    Pour cette raison on distingue PORTA (pour lire uniquement) et LATA(pour écrire uniquement) et il n'y a plus de problème.
    En fait ça cache un peu la misère de la gestion des PORTS sur les PIC...
    Dernière modification par HULK28 ; 04/07/2015 à 20h22.

  18. #17
    invite03481543

    Re : Lecture de Switch PIC18

    Sur les anciens PIC, par exemple le PIC16F877 il n'y a pas de commande spécifique LAT, il faut donc utiliser PORT pour lire ET écrire, néanmoins la commande en écriture est tout de même latchée comme avec LAT.
    On peut donc légitimement se demander pourquoi l'avoir distingué par la suite en introduisant cette nouvelle commande...

  19. #18
    antek

    Re : Lecture de Switch PIC18

    Parce que les gens lisent pas la doc (y'a qu'à lire les forums !)
    LAT pour écrire, PORT pour lire c'est sensé être plus vite compris que l'organisation des bascules d'entrée/sortie.

    Personnellement je trouve aussi que ce registre de plus n'apporte rien.

Discussions similaires

  1. Eeprom pic18 ecriture lecture
    Par invitea769ac52 dans le forum Électronique
    Réponses: 1
    Dernier message: 24/08/2012, 11h26
  2. problème lecture UART (PIC18, C18)
    Par gogott dans le forum Électronique
    Réponses: 3
    Dernier message: 13/04/2011, 19h17
  3. Switch ou mini switch?
    Par inviteb85ec0d9 dans le forum Électronique
    Réponses: 2
    Dernier message: 28/12/2009, 11h58
  4. Utilisation de switch avec un autre switch
    Par invitef69a6111 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/10/2009, 18h10
  5. Réponses: 2
    Dernier message: 27/07/2005, 09h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.