PORTB d'un PIC 18F : RB5 bug
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

PORTB d'un PIC 18F : RB5 bug



  1. #1
    black templar

    PORTB d'un PIC 18F : RB5 bug


    ------

    Bonjour à tous !

    J'ai un petit problème d'utilisation du portB de mon PIC18F2550.

    J'ai configuré le portB en mode digital output et j'essaye de mettre toutes les pin à 1, mais la pin RB5 ne veux pas s'allumer ...
    J'ai changé de µC pour voir s'il n'y avait pas de défauts dans celui que j'avais... même problème.

    J'ai donc essayé d'incrémenter le portB à chaque interruption du timer0 et là, déjà les pin RB6 et RB7 sont toujours activés et quand la pin RB5 doit s'activer, les pin RB0 à RB4 repassent à 0 et c'est reparti pour un tour ...

    Savez vous pourquoi ça fait ça ?? Ai-je oublier de configurer un registre ???
    Une autre petite question : à quoi sert le registre LATB ?? Je n'ai pas réussi à le comprendre avec le datasheet


    Voila mon code (pour compilo C18):

    Code:
    #include <p18f2550.h>
    
    void timer_overflow(void);
    
    #pragma code it=0x8
    void IT_timer_overflow(void)
    {
    	_asm
    		goto timer_overflow
    	_endasm	
    }
    #pragma code
    
    #pragma interrupt timer_overflow
    void timer_overflow(void)
    {
    	if(INTCONbits.TMR0IF)
    	{
    		INTCONbits.TMR0IF = 0;
    		PORTB += 1;
    	}
    }
    
    void init_interruptions()
    {
    	INTCONbits.GIEH = 1;     // Active ou désactive les interruptions
    	INTCONbits.GIEL = 0;
    	INTCONbits.TMR0IE = 1;
    	INTCONbits.INT0IE = 0;
    	INTCONbits.RBIE = 0;
    	INTCONbits.TMR0IF = 0;
    	INTCONbits.INT0IF = 0;
    	INTCONbits.RBIF = 0;
    }
    
    void init_timer0()
    {
    	T0CONbits.TMR0ON = 1;	// 0 : Disable Timer 0 | 1 : Enable Timer0
    	T0CONbits.T08BIT = 0;	// 0 : 16 bits counter | 1 : 8 bits counter
    	T0CONbits.T0CS = 0;		// 0 : Transition on TOCLK pin | 1 : Internal instruction cycle clock (CLKO)
    	T0CONbits.T0SE = 0;		// 0 : Increment on low-to-high transition on T0CKL pin | 1 : Increment on high-to-low transition on T0CLK pin
    	T0CONbits.PSA = 0;		// 0 : Prescaler is enable | 1 : Prescaler is dinable
    	T0CONbits.T0PS2 = 0;	// 000 : Prescale value 1/2
    	T0CONbits.T0PS1 = 1;	// 100 : Prescale value 1/32
    	T0CONbits.T0PS0 = 1;	// 111 : Prescale value 1/256
    }
    
    void init_portB()
    {
    	INTCON2bits.RBPU = 1;
    	INTCON2bits.RBIP = 0;
    	TRISB = 0b00000000;
    	LATB = 0b00000000;
    	PORTB = 0b11111111;
    }
    
    void main(void)
    {
    
    	init_portB();
    	init_timer0();
    	init_interruptions();
    	
    	while(1)
    	{
    
    	}	
    }

    -----

  2. #2
    VIIV

    Re : PORTB d'un PIC 18F : RB5 bug

    Sur RB5 il y a PGM, ca sert a la programmation en low voltage, il faut desactiver le fusible (LVP sans erreur). Et ça marchera.

  3. #3
    black templar

    Re : PORTB d'un PIC 18F : RB5 bug

    Merci. En effet, ça marche maintenant

  4. #4
    RISC

    Re : PORTB d'un PIC 18F : RB5 bug

    Salut,

    Concernant les LATx, il faut utiliser LATx plutot que PORTx pour tous les bits qui sont en SORTIE.

    Donc ces lignes n'ont aucun sens car si toutes les broches sont en sortie (TRISB = 0x00) alors tu bascules les broches de 0 à 1.
    LATB = 0b00000000;
    PORTB = 0b11111111;

    Je te recommande aussi de mettre les bits de configuration dans ton fichier source en utilisant les commandes #PRAGMA

    exemple :
    #PRAGMA CONFIG WDT=OFF, LVP=OFF, BOR=OFF, OSC=INTIO

    a+

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

    Re : PORTB d'un PIC 18F : RB5 bug

    Citation Envoyé par RISC Voir le message
    Salut,

    Concernant les LATx, il faut utiliser LATx plutot que PORTx pour tous les bits qui sont en SORTIE.

    Donc ces lignes n'ont aucun sens car si toutes les broches sont en sortie (TRISB = 0x00) alors tu bascules les broches de 0 à 1.
    LATB = 0b00000000;
    PORTB = 0b11111111;
    Hum... Je n'ai pas bien compris, ça veut dire que LATB = non(PORTB) ??
    En gros, si je veux mettre un bit à 1 dans PORTB, je peux tout aussi bien le mettre à 0 dans LATB, ça revient au même ??

    Citation Envoyé par RISC Voir le message
    Je te recommande aussi de mettre les bits de configuration dans ton fichier source en utilisant les commandes #PRAGMA

    exemple :
    #PRAGMA CONFIG WDT=OFF, LVP=OFF, BOR=OFF, OSC=INTIO
    Oui, j'ai vue cette notation dans un fichier d'exemple de C18. c'est beaucoup plus clair comme ça !! merci du tuyau !

    Bonne soirée

  7. #6
    RISC

    Re : PORTB d'un PIC 18F : RB5 bug

    Salut,

    Les lignes que j'ai reproduites sont celles de ton programme et elles sont fausses : LATx = PORTx pour toutes les broches en SORTIE.

    D'ailleurs si tu bouges PORTx (pas à pas) tu verras que LATx bouge simultanément (pour les bits en SORTIE).

    Il m'est trop compliqué d'expliquer en quelques lignes pourquoi il faut IMPERATIVEMENT utiliser LATx pour tous les bits en sortie au lieu de PORTx. L'utilisation de PORTx pose un problème si 2 bits d'un même port sont changés avec 1Tcy de différence avec les instructions (bsf PORTx,y1 puis bsf PORTx,y2)

    a+

  8. #7
    black templar

    Re : PORTB d'un PIC 18F : RB5 bug

    Ok, je commence à mieux saisir la différence ! Je part faire des tests en mode debug !

    Merci beaucoup ! bonne soirée !

Discussions similaires

  1. Utilisation du TIMER1 d'un PIC 18F comme compteur
    Par schneiderj dans le forum Électronique
    Réponses: 0
    Dernier message: 06/01/2009, 17h14
  2. comment passer des pic 16F au pic 18F ?
    Par MorpheusPic dans le forum Électronique
    Réponses: 5
    Dernier message: 13/08/2008, 22h04
  3. Pb PORTB PIC
    Par invite24eebdfe dans le forum Électronique
    Réponses: 3
    Dernier message: 02/06/2008, 09h43
  4. clavier et LCD commandés par PORTB d'un PIC
    Par arzew dans le forum Électronique
    Réponses: 3
    Dernier message: 07/05/2008, 09h04
  5. interruptions portB PIC
    Par romelec dans le forum Électronique
    Réponses: 6
    Dernier message: 02/05/2004, 10h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.