Bonjour et merci de me lire,
Je suis en train de programmer un PIC18f4523 pour mon travail de fin d'études et j'ai pour objectif de faire un système d'acquisition de mesures de deux capteurs angulaires et d'un capteur de force.
Hors je n'arrive pas à faire fonctionner mes entrées/sorties digitales, ma déclarations "#define LED LATB.LATB1" ne fonctionnent pas (j'ai aussi essayé avec PORTB.RB1, etc ...).
voici mon code:
Est-ce que l'un d'entre vous aurait une idée pour me sortir rapidement de mon mauvais pas ? déjà que je vais devoir travailler H24 pour réussir à le finir dans les temps ..Code:#include <xc.h> #include <stdio.h> #include <stdlib.h> #include "capteurs.h" /* Cet header contient la déclaration suivante: #define LED LATB.LATB1 */ // là y a mes interruptions hautes et basses void hardwareInitialise(){ // Configure le micro contrôleur pour 32MHz: OSCCONbits.IRCF = 7; // Fréquence de base: 8 MHz OSCTUNEbits.PLLEN = 1; // Active le PLL (x4). // Configure le convertisseur A/D ADCON2bits.ADFM = 0; // Résultat justifié à gauche sur ADRESH. ADCON2bits.ACQT = 7; // Temps d'acquisition du signal: 16 TAD ADCON2bits.ADCS = 6; // TAD de 1uS pour FOSC = 32MHz ADCON0bits.CHS = 0; // Canal AN0 (RA0) activé en mode acqisition A/D. ADCON0bits.ADON = 1; // Active le module A/D. ADCON1 = 0b00001110; // Tension de référence VPP-GND et AN0 actif // Tous les autres ports commene entrée digitale // Temporisateur 0: Echantillonnage du capteur de force + référence temporel T0CONbits.T0CS = 0; // Source: FOSC / 4 => 8 MHz T0CONbits.PSA = 0; // Active le diviseur de fréquence. T0CONbits.T0PS = 0b0000010; // Diviseur de fréquence /8 TPS => 1 MHz T0CONbits.TMR0ON = 1; // Active le temporisateur T0CONbits.T08BIT = 1; // Compteur de 8 bits. TMR0H = 0x00; // Etablit le compteur pour TMR0L = 0xC8; // un débordement à 0.2 ms -> f = 5 kHz INTCONbits.TMR0IE = 1; // Active les interruptions pour timer 0. INTCON2bits.TMR0IP = 1; // Interruptions de haute priorité. /* Option phase de test à 10 Hz à désactiver en mode réel*/ T0CONbits.T0PS = 0b0000100; // Diviseur de fréquence /32 TPS => 250 kHz TMR0H = 0x61; // Etablit le compteur pour un débordement T0CONbits.T08BIT = 0; // Compteur de 16 bits. (entre TMR0H et L) TMR0L = 0xA8; // à 25000 -> T = 0.1 s -> f = 10 Hz // Temporisateur 1: /* T1CONbits.TMR1CS = 0; // Raccordé sur Fosc/4 = 8 MHz T1CONbits.T1CKPS = 3; // Diviseur de fréquence TPS = 8 = 1 MHz T1CONbits.T1RD16 = 1; // Temporisateur de 16 bits. T1CONbits.TMR1ON = 1; // Active le temporisateur 1 */ // Temporisateur 2: Echantillonnage des capteurs angulaires et temps de ref T2CONbits.T2CKPS = 2; // Division de fréquence par 16 = 2 MHz T2CONbits.T2OUTPS = 1; // Seconde division de fréquence par 2 = 1MHz T2CONbits.TMR2ON = 1; // Active le temporisateur. PR2 = 250; // Période max: 32MHz / (16*2*250) = 4kHz. PIE1bits.TMR2IE = 1; // Active les interruptions. IPR1bits.TMR2IP = 1; // Interruptions de basse priorité. //Configuration de l'UART pour une transmission à 115 kbps // Pour une fréquence de 32MHz, ceci donne 115000 bauds : TXSTA1bits.BRGH = 1; // Mode haute vitesse. SPBRG = 16; //Baudrate = FOSC / (16 * (N + 1)) = 117647Bauds. SPBRGH = 0; // Configure RC6 et RC7 comme entrées digitales, pour que // la EUSART puisse en prendre le contrôle: TRISCbits.RC6 = 1; TRISCbits.RC7 = 1; // Configure l'EUSART: TXSTA1bits.SYNC = 0; // Mode asynchrone. TXSTA1bits.TXEN = 1; // Active l'émetteur. RCSTA1bits.CREN = 1; // Active le récepteur. RCSTA1bits.SPEN = 1; // Active l'EUSART. // Active les interruptions (basse priorité): PIE1bits.TX1IE = 1; IPR1bits.TX1IP = 0; PIE1bits.RC1IE = 1; IPR1bits.RC1IP = 0; // Active les interruptions générales: RCONbits.IPEN = 1; INTCONbits.GIEH = 1; INTCONbits.GIEL = 1; // Configure les ports IO: TRISA = 0b11111111; // Tous les bits du port A comme entrées TRISB = 0b11111101; // Tous les bits du port B comme entrées sauf b1 TRISC = 0b11000000; // Tous les bits du port C comme sorties sauf TX et RX TRISD = 0b11111111; // Tous les bits du port C comme entrées } void main(void) { struct EVENEMENT_ET_VALEUR *ev; // Initialise le hardware: hardwareInitialise(); initialiseEvenements(); initialiseMessagesUART(); uartReinitialise(); // Surveille la file d'événements, et les traite au fur // et à mesure: while(fileDeborde() == 0) { ev = defileEvenement(); if (ev != 0) { do { Test_BP(); ENVOI_DATA(ev); //ev = defileMessageUART(); ev = defileEvenement (); } while (ev != 0); } } // La file a débordé // allume une diode en cas de débordement LED = 1; // C'est ici que l'erreur "main.c:199: error: (196) struct/union required" s'affiche. // Tout s'arrête: while(1); }
Merci infiniment pour votre aide
-----