Problème de code sur XC8 et PIC18F458
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Problème de code sur XC8 et PIC18F458



  1. #1
    petitnul12

    Problème de code sur XC8 et PIC18F458


    ------

    Bonsoir,

    J'ai fait une fonction pour facilement gérer les I/O des PIC. Dans le bout de code, je fait clignoter une diode du port D et E. Mais seul la diode du port E clignote... Celle du port D reste à zéro, même si je la force à "1" en remplacant "o_tor_run(&led_run,pwm_run.s) ;" par "o_tor_run(&led_run,1);"

    Il se passe la même chose sur les ports A,B et C..
    Mais ce que je ne comprend pas, c'est que je fait exactement la même chose pour tout les ports dans mon code.. Je ne comprend pas d’où peut venir le soucis... =( Je ne voit pas d'exception pour les ports A, B, C et D. Il existe des registre particuliers ?

    Les registre de configuration sont dans la fonction ecu_init()

    ecu.c
    Code:
    #include "ecu.h"
    
    // INIT de l'objet "ecu"
    void ecu_init(void)
    {
        // CONFIG1H
    #pragma config OSC = HSPLL
    #pragma config OSCS = OFF
    //CONFIG2L
    #pragma config PWRT = OFF
    #pragma config BOR = ON
    #pragma config BORV = 25
    //CONFIG2H
    #pragma config WDT = OFF
    #pragma config WDTPS = 128
    // CONFIG4L
    #pragma config STVR = ON
    #pragma config LVP = OFF
    // CONFIG5L
    #pragma config CP0 = OFF
    #pragma config CP1 = OFF
    #pragma config CP2 = OFF
    #pragma config CP3 = OFF
    // CONFIG5H
    #pragma config CPB = OFF
    #pragma config CPD = OFF
    // CONFIG6L
    #pragma config WRT0 = OFF
    #pragma config WRT1 = OFF
    #pragma config WRT2 = OFF
    #pragma config WRT3 = OFF
    // CONFIG6H
    #pragma config WRTC = OFF
    #pragma config WRTB = OFF
    #pragma config WRTD = OFF
    // CONFIG7L
    #pragma config EBTR0 = OFF
    #pragma config EBTR1 = OFF
    #pragma config EBTR2 = OFF
    #pragma config EBTR3 = OFF
    // CONFIG7H
    #pragma config EBTRB = OFF
        
        ADCON1 = 0x00000110;
    }
    Code:
    #include <xc.h>
    #include "tor.h"
    
    
    struct o_clock  clock;
    struct o_tor led_run, led2;
    
    void main(){
    
        ecu_init();
        o_clock_init(&clock,10000000,1000);
        o_tor_init(&led_run,4,0);
        o_tor_init(&led2,5,0);
    
        while(1){
    
            o_clock_run(&clock);
            o_tor_run(&led_run,pwm_run.s);
            o_tor_run(&led2,pwm_run.s);
        }
    }
    tor.h
    Code:
    #ifndef TOR_H
    #define TOR_H
    
    #include <xc.h>
    
    struct o_tor {
        unsigned char p, b;
    };
    
    void o_tor_init(struct o_tor *o, unsigned char _p, unsigned char _b);
    void o_tor_run(struct o_tor *o, unsigned char _s);
    
    #endif TOR_H
    tor.c
    Code:
    #include "tor.h"
    
    #ifndef MASK
    #define MASK
    unsigned char maskF0[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
    unsigned char maskF1[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
    #endif MASK
    
    // INIT de l'object "o_tor"
    void o_tor_init(struct o_tor *o, unsigned char _p, unsigned char _b)
    {
        o->p = _p;
        o->b = _b;
    
        if(o->p == 1)
        {
            TRISA = TRISA & maskF0[o->b];
            LATA = LATA & maskF0[o->b];
        }
        if(o->p == 2)
        {
            TRISB = TRISB & maskF0[o->b];
            LATB = LATB & maskF0[o->b];
        }
        if(o->p == 3)
        {
            TRISC = TRISC & maskF0[o->b];
            LATC = LATC & maskF0[o->b];
        }
        if(o->p == 4)
        {
            TRISD = TRISD & maskF0[o->b];
            LATD = LATD & maskF0[o->b];
        }
        if(o->p == 5)
        {
            TRISE = TRISE & maskF0[o->b];
            LATE = LATE & maskF0[o->b];
        }
    }
    
    // RUN de l'objet "o_tor"
    void o_tor_run(struct o_tor *o, unsigned char _s)
    {
        if(o->p == 1)
        {
            if(_s == 1)
                LATA = LATA | maskF1[o->b];
                LATA = LATA & maskF0[o->b];
        }
        if(o->p == 2)
        {
            if(_s == 1)
                LATB = LATB | maskF1[o->b];
                LATB = LATB & maskF0[o->b];
        }
        if(o->p == 3)
        {
            if(_s == 1)
                LATC = LATC | maskF1[o->b];
                LATC = LATC & maskF0[o->b];
        }
        if(o->p == 4)
        {
            if(_s == 1)
                LATD = LATD | maskF1[o->b];
                LATD = LATD & maskF0[o->b];
        }
        if(o->p == 5)
        {
            if(_s == 1)
                LATE = LATE | maskF1[o->b];
                LATE = LATE & maskF0[o->b];
        }
    }

    -----

  2. #2
    RISC

    Re : Problème de code sur XC8 et PIC18F458

    Salut,

    Je te recommande de lire la datasheet en détail.
    Toutes les broches qui sont mulitplexées entre entrées analogiques (ANx) et autres sont en analogique au reset...
    La datasheet explique port par port comment il faut faire.

    Au fait....le PIC18F458 est un très très vieux PIC...tu devrais plutôt utiliser le PIC18F4580 ou même encore plus récent le PIC18F45K80 qui sont moins chers et plus performants

    a+

  3. #3
    petitnul12

    Re : Problème de code sur XC8 et PIC18F458

    Muoui je les passe en I/O numérique avec l'instruction suivante "ADCON1 = 0x00000110;"
    Ce qui pourrait poser problème pour le port A et E, mais les autres je ne comprend vraiment pas pourquoi =/

    Bon le site de Microchip plante ^^ Je pensais passer sur des 18F4680 après, mais je me perd un peu dans leur gamme... Le K correspond à quoi ?

    Thank !

Discussions similaires

  1. Problème d'interruption sur PIC18F458
    Par petitnul12 dans le forum Électronique
    Réponses: 6
    Dernier message: 31/03/2013, 00h02
  2. Problème ICD3 / MPLabX / XC8
    Par petitnul12 dans le forum Électronique
    Réponses: 10
    Dernier message: 13/02/2013, 18h45
  3. Problème programme sur PIC18, compilateur XC8
    Par petitnul12 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/02/2013, 10h33
  4. MPLAB X ; XC8, C18 et CCS sur Ubuntu
    Par punky591 dans le forum Électronique
    Réponses: 8
    Dernier message: 27/07/2012, 11h36
  5. Probleme INT0 PIC18f458
    Par invite4109377f dans le forum Électronique
    Réponses: 1
    Dernier message: 11/05/2006, 14h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.