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

Probleme port PIC



  1. #1
    Nithael

    Probleme port PIC


    ------

    Bonjour,

    Je débute dans la programmation des PIC et j'ai un probleme avec un simple allumage d'une LED. J'utilise un PIC 18f2520 et ma led est connectée sur le PORT A (RA5) que j'ai, bien sur, configuré en sortie. Juste apres l'instruction PORTAbits.RA5=1; la led s'allume bien puis s'éteint sans intervention de ma part...(je le vois avec le mode debug...)
    Quelqu'un pourrait il me dire ce qui se passe?
    Merci d'avance

    -----

  2. Publicité
  3. #2
    etienneh

    Re : Probleme port PIC

    Salut,

    peux tu poster le code dans son ensemble ? il peut se passer plein de choses, selon comment ton code est fichu.

    amicalement,
    e.

  4. #3
    Nithael

    Re : Probleme port PIC

    Salut et merci pour ton aide, voici mon code

    // configuration PICD+ quartz
    #pragma config OSC = HS
    #pragma config WDT = OFF
    #pragma config LVP = OFF
    #pragma config PWRT= OFF

    void main(void)
    {
    TRISAbits.TRISA5=0;
    TRISAbits.TRISA0=0;
    PORTAbits.RA5=1;/// allumage de la led
    PORTAbits.RA0=1;/// rétroéclairage de l'écran LCD
    }
    En mode pas à pas, la led s'allume puis s'éteint (qd l'écran LCD s'allume)alors que je ne remets pas à 0 PORTAbits.RA5...étrange non?

  5. #4
    etienneh

    Re : Probleme port PIC

    Beuh... ca m'a l'air correct tout ca !!!

    C'est effectivement étrange que ta LED s'éteigne, mais pour être sûr que ce n'est pas un bete reset des ES du PIC, je mettrais un

    while(1);

    avant la fin du main(), histoire de bloquer le PIC "en l'état".

  6. #5
    Nithael

    Re : Probleme port PIC

    C'est effectivement une solution . Le seul probleme c'est que j'allumais cette led pour tester ma plaquette et ce n'est en aucun cas ce que je veux faire par la suite (gérer un écran LCD). Mais tu as raison je vais essayer de voir si le pic ne fait pas un reset sur les E/S mais je ne vois vraiment pas pourquoi et comment contrer ce soucis sans un while(1)...

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

    Re : Probleme port PIC

    Chose encore plus etrange : les bits A0 et A5 que je mets en sortie avec TRISAbits.RA0 et TRISAbits.RA5=0 ne sont pas à 0 mais à 1 lorsque je regarde le registre TRISA avec watch...

  9. Publicité
  10. #7
    Nithael

    Re : Probleme port PIC

    Autant pour moi, le port A est bien en sortie mais la led s'éteint juste apres la commande d'allumage...je ne comprends vraiment pas

  11. #8
    etienneh

    Re : Probleme port PIC

    Nithael,

    as tu essayé avec un while(1); en supprimant le rétroéclairage ?

  12. #9
    umfred

    Re : Probleme port PIC

    Comment as-tu branché ta LED? Si ça se trouve c'est en mettant la sortie à 0 qu'elle est commandée et non par un 1.
    Si l'anode est reliée à la sortie, alors c'est un 1 qui l'alimente (la cathode est relié à la masse via une résistance).
    Si la cathode est reliée à la sortie, alors c'est un 0 qui l'alimente (l'anode est reliée au 5V via une résistance).

  13. #10
    Gérard

    Re : Probleme port PIC

    Ne faut-il pas configurer ADCON1 pour ne pas être en entrées analogiques au démarrage ?
    Gérard.

  14. #11
    Yannux

    Re : Probleme port PIC

    Bonsoir à tous,

    Comme dit précédemment, il manque un while (1); avant la fin de ta fonction main()

    Dans le cas des microcontrôleurs, la fonction C main ne doit jamais se terminer. Contrairement à la programmation sur PC, on fait toujours en sorte d'être dans une boucle infinie, afin que le programme ne se termine jamais.

    Ainsi, ton code devrait être :

    Code:
    / configuration PICD+ quartz
    #pragma config OSC = HS
    #pragma config WDT = OFF
    #pragma config LVP = OFF
    #pragma config PWRT= OFF
    
    void main(void)
    {
    TRISAbits.TRISA5=0;
    TRISAbits.TRISA0=0;
    PORTAbits.RA5=1;/// allumage de la led
    PORTAbits.RA0=1;/// rétroéclairage de l'écran LCD
    
    while(1);
    }
    Cordialement,

    Yann.

  15. #12
    Nithael

    Re : Probleme port PIC

    En supprimant le rétroéclairage ca marche mais je me demandais pourquoi il n'était pas possible d'allumer deux leds ou bien une led et un ecran LCD sur le meme port d'un pic (Ici le A). Il se trouve que j'ai réussi à pallier au problême en utilisant LATA au lieu de PORTA....

  16. Publicité
  17. #13
    etienneh

    Re : Probleme port PIC

    j'ai une petite idée: est-ce que par hasard tu n'alimenterais pas directement ton rétro-éclairage par la patte de ton PIC ?
    Ca pourrait expliquer un dysfonctionnement: le PIC n'est pas fait pour alimenter les périphériques.

    Dans tous les cas, c'est étrange que LATA fonctionne mieux que PORTA. Si mes souvenirs sont bons, LATA a juste pour fonction supplémentaire par rapport à PORTA de garder en mémoire la dernière valeur écrite, quand on passe de output en input.

  18. #14
    cookieParis

    Re : Probleme port PIC

    j'ai un problème similaire sur un 2455

    si je fais

    while(1)
    {


    PORTAbits.RA0 = 1 ;

    Delay1KTCYx(1);

    PORTAbits.RA0 = 0 ;


    Delay1KTCYx(1);
    }

    j'observe des creneaux normaux sur la pin A0

    si je fais


    while(1)
    {


    PORTAbits.RA0 = 1 ;
    PORTAbits.RA1 = 1 ;

    Delay1KTCYx(1);

    PORTAbits.RA0 = 0 ;
    PORTAbits.RA1 = 0 ;

    Delay1KTCYx(1);
    }


    j'observe des creneaux normaux sur la pin A1 par contre que du 1 sur la pin A0 enfin pas tout a fait j'ai l'impression que des que je touche a A1 pour le mettre high ou low , A0 passe a high.

    idem si je fais
    while(1)
    {


    PORTAbits.RA0 = 1 ;
    PORTAbits.RA2 = 1 ;

    Delay1KTCYx(1);

    PORTAbits.RA0 = 0 ;
    PORTAbits.RA2 = 1 ; // <- ce n'est pas une erreur

    Delay1KTCYx(1);
    }

    ( j'ai bien configuré le trisa et le adcon1 )
    Dernière modification par cookieParis ; 02/08/2007 à 19h52.

  19. #15
    cookieParis

    Re : Probleme port PIC

    par contre ainsi :

    while(1)
    {

    LATAbits.LATA0 = 1;
    LATAbits.LATA1 = 1;
    LATAbits.LATA2 = 1;
    LATAbits.LATA3 = 1;

    Delay1KTCYx(1);
    LATAbits.LATA0 = 0;
    LATAbits.LATA1 = 0;
    LATAbits.LATA2 = 0;
    LATAbits.LATA3 = 0;


    Delay1KTCYx(1);
    }

    ca marche parfaitement !
    la data sheet indique :

    Reading the PORTA register reads the status of the
    pins; writing to it will write to the port latch.
    The Data Latch register (LATA) is also memor
    mapped. Read-modify-write operations on the LAT
    register read and write the latched output value for
    PORTA.

    donc on lit sur PORTA et on ecrit sur LATA

Sur le même thème :

Discussions similaires

  1. Communication PIC <-> PC port série
    Par Toufinet dans le forum Électronique
    Réponses: 7
    Dernier message: 27/05/2010, 16h13
  2. problème de port avec PIC 12F675
    Par PSit dans le forum Électronique
    Réponses: 4
    Dernier message: 16/01/2008, 12h11
  3. PIC protection d'un port
    Par traxxa dans le forum Électronique
    Réponses: 3
    Dernier message: 03/04/2007, 23h33
  4. PIC protection de port ?
    Par alainav1 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/11/2006, 11h28
  5. PIC et port série -- Parasites ?
    Par Milkidreams dans le forum Électronique
    Réponses: 17
    Dernier message: 18/10/2005, 11h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.