Bonjour,
je dois établir une communication entre un CAN (LTC1098) et un pic 18f452 . J'ai fais le programme mais je ne suis pas sur du bon fonctionnement de celui ci .
voici le programme :
merci de votre aide.Code:/*initSPI_LTC1098 initialise le port SPI pour LTC1098 avec F=FOSC/4 Brochage LTC1098 CAN 8bits 1- /CS sur RD0/PSP0 2-IFP (sortie LM358N) 3-VFP(sortie AD620) 4-GND 5-DI sur RC5/SD0 6-D0 sur RC4/SDI/SDA 7-CLK sur RC3/SCK/SCL 8-VCC (+5V)*/ #include<p18f452.h> // permet d'utiliser la librairies du pic 18f452 #include<spi.h> // permet d'utiliser la librairies du SPI /***********************************************************************/ /* declarations des prototypes des fonctions */ /***********************************************************************/ void init_PORTC (void); void init_PORTD (void); void initSPI_LTC1098(void); unsigned char cData,cLec_data; void rw_SPI(unsigned char cVar); /*******************************************************************/ /* initialisation du PORTC et du PORTD */ /*******************************************************************/ void init_PORTC (void) { TRISCbits.TRISC3=0; // SCK configurée en sortie , signal de horloge PORTCbits.RC3; // RC3 est reliée a horloge TRISCbits.TRISC5=0; // SD0 est configurée en sortie PORTCbits.RC5=0; // TRISCbits.TRISC4=1; // SDI configurée en entrée PORTCbits.RC4=1; // } void init_PORTD (void) { TRISDbits.TRISD0=0; // RD0 est configurée en sortie PORTDbits.RD0=1; // CS=1 CS est a l'état haut sélectionne l'appareil } /*********************************************************************/ /* initilialisation du SPI */ /**********************************************************************/ void initSPI_LTC1098(void) // initialise le SPI sur le PIC { SSPSTAT=0b01000000; // CKE=1 la donnée est transmisse sur front montant SCK , la donnée en entrée est saisie au milieu du temps de la donnée en sortie SSPCON1=0b00100000; // SPEN=1 active le port série est configure SCK,SD0,SDI,SS comme les broches de port série SPI ; horloge = FOSC /4 PIR1bits.SSPIF=0; // indique une fin d'émission d'un 1 , on peut envoyer une autre donnée . } /*******************************************************************/ /*Ecriture d'une donnée dans le Bus SPI */ /*******************************************************************/ void rw_SPI(unsigned char cVar) //cVar récupére cData { PORTDbits.RD0=0; // CS=0 SSPBUF=cVar; // cVar est placé dans le registre SSPBUF while(!PIR1bits.SSPIF); // Quand SSPIF passe à 1, transmission de donnée terminée PIR1bits.SSPIF=0; // On passe SSPIF à 0 , et on peut envoyer une autre donnée cLec_data= SSPBUF; if(SSPBUF==cVar) { PORTBbits.RB1=1; } } /****************************** *************************/ /* Fonction principale : main() */ /****************************** *************************/ void main(void) { init_PORTC(); init_PORTD(); initSPI_LTC1098(); rw_SPI(0b00010110); while(1); }
-----