[PIC C18] problème pour activer 2 sorties en même temps
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[PIC C18] problème pour activer 2 sorties en même temps



  1. #1
    invitec89d22d7

    [PIC C18] problème pour activer 2 sorties en même temps


    ------

    Bonjour,

    je programme un PIC en C (C18 de microchip). J'ai un problème très étrange.

    Avec le code suivant UNIQUEMENT la LED verte s'allume :

    Code:
    #include <p18f4550.h> 
    #pragma config WDT      = OFF 
    
    void main (void)
    {
    	TRISBbits.TRISB4 = 0; // LED verte
    	TRISBbits.TRISB3 = 0; // LED jaune
    
    	PORTBbits.RB3 = 1;
    	PORTBbits.RB4 = 1;
    	while (1);
    }
    Avec le code suivant UNIQUEMENT la LED jaune s'allume :

    Code:
    #include <p18f4550.h> 
    #pragma config WDT      = OFF 
    
    void main (void)
    {
    	TRISBbits.TRISB4 = 0; // LED verte
    	TRISBbits.TRISB3 = 0; // LED jaune
    
    	PORTBbits.RB4 = 1;
    	PORTBbits.RB3 = 1;
    	while (1);
    }
    La différence : inversion des lignes ou je met la sortie RB3 ou RB4 à 1.

    Avez vous une idée? (personnellement je suis en train de programmer directement PORTB intégralement, exemple : PORTB = 0x5A pour activer toutes les sorties du port B pour allumer les 2 LED, mais ca n'est pas une solution viable à long terme)

    Merci d'avance,

    -----

  2. #2
    invite7a49d0d5

    Cool Re : [PIC C18] problème pour activer 2 sorties en même temps

    Bonsoir,

    je ne connais pas C18, mais en effet,
    cela paraît très très zétrange ;O]

    et si tu enlèves le while(1) en dessous
    qu'est ce que ça donne?

    ou peut-être "configure" les ports (TRISx) avant les main...

    vede
    ;O]

  3. #3
    invitec89d22d7

    Re : [PIC C18] problème pour activer 2 sorties en même temps

    Re-bonsoir,

    merci de la réponse.

    en elevant le while(1) ca donne une LED allumée et l'autre avec une très faible tension, mais bon c'est un cas limite et c'est sans doute un résidu lié au shutdown (si on peut l'appeler comme ca)

    Comment puis-je configurer les ports (ici le B) avant la fonction main? cela me parait bien difficile ^^

  4. #4
    blurpy

    Re : [PIC C18] problème pour activer 2 sorties en même temps

    Bonjour,

    Pardon si je dis une betise, mais ne serait-ce pas simplement une erreur de registre entre PORTX (pour la lecture) et LATX (pour l'ecriture) sur les pic 18F ? je ne sais pas comment ceci est géré avec le compilo microchip

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

    Cool Re : [PIC C18] problème pour activer 2 sorties en même temps

    re ;O]

    en effet, utilises LATBx pour "positionner" les ports en sorties...
    au lieu de PortBx... c'est peut-être la source du problème...

    vede
    ;O]

  7. #6
    invitec89d22d7

    Re : [PIC C18] problème pour activer 2 sorties en même temps

    Merci beaucoup pour la solution. Cela fonctionne.
    Le truc étrange restera le pourquoi on arrive a positionner un des bits en sortie en adressant ce registre directement, 1 seul et pas plusieurs à la suite

    Par contre c'est assez difficile de trouver de la documentation là dessus (je pense faire l'acquisition du DUNOD - programmation en C sur PIC mais il est difficile à trouver hors VPC)

    Vous risquez de me voir poser des questions bêtes assez souvent ^^

    Merci encore.

  8. #7
    RISC

    Re : [PIC C18] problème pour activer 2 sorties en même temps

    Salut,

    Ton problème est....ultra connu.
    Il faut bien lire la documentation.

    Il est recommandé de toujours utiliser LATx pour les broches en SORTIE sur TOUS LES PICS rapides, sous peine du probème que tu vois.

    Pour pouvoir changer 2 bits sur le MEME port avec un seul cycle de différence en utilisant il FAUT le faire sur LAT et pas sur PORT sans quoi quand le 2e bit monte, le premier...descend.
    Cela est du à la "lenteur" du signal électrique qui n'arrive pas à monter suffisamment vite.
    Ce problème est du au "Read Modify Write" (RMW) qui se fait en un seul cycle sur tous les PICs ;=)


    Ces programmes là fonctionne tous les 2 pour illustrer mon propos :

    Code:
    #include <p18f4550.h> 
    #pragma config WDT      = OFF 
    void main (void)
    {
    	TRISBbits.TRISB4 = 0; // LED verte
    	TRISBbits.TRISB3 = 0; // LED jaune
    	LATBbits.RB3 = 1;
    	LATBbits.RB4 = 1;
    	while (1);
    }

    Code:
    #include <p18f4550.h> 
    #pragma config WDT      = OFF 
    void main (void)
    {
    	TRISBbits.TRISB4 = 0; // LED verte
    	TRISBbits.TRISB3 = 0; // LED jaune
    	LATBbits.RB4 = 1;
    	LATBbits.RB3 = 1;
    	while (1);
    }
    a+

  9. #8
    invitec89d22d7

    Re : [PIC C18] problème pour activer 2 sorties en même temps

    Merci pour ces infos.

    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 memory
    mapped. Read-modify-write operations on the LATA
    register read and write the latched output value for
    PORTA.
    Ce n'est pas expliqué dans la datasheet du pic. Ou alors je n'ai pas trouvé ou. Un truc a savoir sans doute

    Citation Envoyé par RISC Voir le message
    Ce problème est du au "Read Modify Write" (RMW) qui se fait en un seul cycle sur tous les PICs ;=)
    Caractéristique à l'architecture RISC, tu portes bien ton nom

    Merci encore

    Bonne soirée.

Discussions similaires

  1. Servomoteur, Pic et C18
    Par hoffmann dans le forum Électronique
    Réponses: 6
    Dernier message: 07/11/2009, 16h13
  2. Réponses: 8
    Dernier message: 11/05/2009, 11h52
  3. Probleme pour activer od auto radio de mon audi a4
    Par invited4cb870b dans le forum Électronique
    Réponses: 2
    Dernier message: 21/02/2009, 16h43
  4. Pour en finir avec mon problème LCD/C18
    Par hoffmann dans le forum Électronique
    Réponses: 15
    Dernier message: 09/11/2008, 20h41
  5. Plusieurs actions en même temps avec un PIC
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 15
    Dernier message: 24/07/2007, 02h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.