Bonjour a tous,
Je suis entrain de programer un bus CAN entre deux plaque dsPICPRO4 de cher MikroElektronika.
Le soucis c'est que j'ai crée un programme basic mais il marche pas est ce que quelqu'un peut me dire ou est l'erreur?
Merci pour votre aide.
PS : le programme est dévelloper avec mikroC dsPIC 30
Voila le programme d'émission:
#include <string.h>
void main()
{
unsigned int tx_flags;
char data[8];
unsigned long msg_id = 0x010;
unsigned int can_config_flags;
can_config_flags = CAN_CONFIG_SAMPLE_THRICE & // Form value to be used
CAN_CONFIG_PHSEG2_PRG_ON & // with CAN1Initialize
CAN_CONFIG_STD_MSG &
CAN_CONFIG_DBL_BUFFER_ON &
CAN_CONFIG_MATCH_MSG_TYPE &
CAN_CONFIG_LINE_FILTER_OFF;
tx_flags = CAN_TX_PRIORITY_0 &
CAN_TX_XTD_FRAME &
CAN_TX_NO_RTR_FRAME;
CAN1Initialize(1,3,3,3,1,can_c onfig_flags);
CAN1SetOperationMode(CAN_MODE_ NORMAL,0xFF);
//Alume LED pour test.
TRISA = 0xFFBF;
LATAbits.LATA6=1;
while(1)
{
strcpy(&data,1);
CAN1Write(msg_id, data, 1, tx_flags);
LATAbits.LATA6=1;
delay_ms(1000);
strcpy(&data,0);
CAN1Write(msg_id, data, 1, tx_flags);
LATAbits.LATA6=0;
delay_ms(1000);
//CAN1Read();
}
}
voila le programme de réception :
void main()
{
unsigned int msg_rcvd, rx_flags, data_len;
char data[8];
unsigned long msg_id = 0x010;
unsigned int can_config_flags;
int test,test2;
can_config_flags = CAN_CONFIG_SAMPLE_THRICE & // Form value to be used
CAN_CONFIG_PHSEG2_PRG_ON & // with CAN1Initialize
CAN_CONFIG_STD_MSG &
CAN_CONFIG_DBL_BUFFER_ON &
CAN_CONFIG_MATCH_MSG_TYPE &
CAN_CONFIG_LINE_FILTER_OFF;
CAN1Initialize(1,3,3,3,1,can_c onfig_flags);
CAN1SetOperationMode(CAN_MODE_ NORMAL,0xFF);
//Alume LED pour test.
TRISA = 0xF00F;
rx_flags = 0;
LATAbits.LATA6=1;
delay_ms(1000);
test= 0;
test2= 0;
while(1)
{
LATAbits.LATA6=0;
msg_rcvd = CAN1Read(&msg_id, data, &data_len, &rx_flags);
if (msg_rcvd <= 0xFFFF)
{
if(strcmp(data,0) == 0)
{
LATAbits.LATA7=0;
test = 1-test;
}
else
{
if(strcmp(data,0) == 1) LATAbits.LATA7=1;
}
}
else
{
test2= 1 - test2;
}
LATAbits.LATA6=1;
delay_ms(100);
switch (test)
{
case 0 :
LATAbits.LATA9=0;
break;
case 1:
LATAbits.LATA9=1;
break;
}
switch (test2)
{
case 0 :
LATAbits.LATA10=0;
break;
case 1:
LATAbits.LATA10=1;
break;
}
}
}
-----