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 :

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);
}
merci de votre aide.