Em có viết giao thức CAN để truyền thông 2 chip pic30f4012, em viết dùng Mikroc for Dspic. chip thứ nhất em đọc tín hiệu từ cảm biến LM35, chíip thứ 2 nhận tín hiệu này qua mạng truyền thông CAN và hiển thị lên màn LCD (16x2), sau khi dich và nạp xong em không thấy có tín hiệu gì được truyền thông cả. Rất mong các anh chị giúp đỡ.
sau đây là code của 2 chíp
Chíp 1 ( nhận tín hiệu từ cảm biến LM35)
void main()
{
unsigned char temperature, data[8];
unsigned short init, send, dt, len, read;
char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, txt[4];
unsigned int temp;
unsigned long mV;
long id, mask;
TRISDbits.TRISD0=1; // PORTD0 are inputs
TRISF = 0x04; // RB2 is output, RB3 is input
//ADCON1 = 0x80;
// CAN BUS Timing Parameters
//
SJW= 1;
BRP = 1;
Phase_Seg1 = 6;
Phase_Seg2 = 7;
BRP = 1;
Prop_Seg = 6;
init = CAN_CONFIG_SAMPLE_THRICE & // Form value to be used
CAN_CONFIG_PHSEG2_PRG_ON & // with CAN1Initialize
CAN_CONFIG_XTD_MSG &
CAN_CONFIG_DBL_BUFFER_ON &
CAN_CONFIG_MATCH_MSG_TYPE &
CAN_CONFIG_LINE_FILTER_OFF;
send = CAN_TX_PRIORITY_0 & // Form value to be used
CAN_TX_XTD_FRAME & // with CAN1Write
CAN_TX_NO_RTR_FRAME;
read = 0;
//
// Initialise CAN module
//
CAN1Initialize(SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init);
//
//Set CAN CONFIG mode
//
CAN1SetOperationMode(CAN_MODE_CONFIG, 0xFF);
mask = -1;
//
//Set all MASK1 bitstol's
//
CAN1SetMask(CAN_MASK_B1, mask, CAN_CONFIG_XTD_MSG);
//
//Set all MASK2 bitstol's
//
CAN1SetMask(CAN_MASK_B2, mask, CAN_CONFIG_XTD_MSG);
//
//Set id of filter B1_F1 to 3
//
CAN1SetFilter(CAN_FILTER_B2_F3,500,CAN_CONFIG_XTD_ MSG);
//
// Set CAN module to NORMAL mode
//
CAN1SetOperationMode(CAN_MODE_NORMAL, 0xFF);
//
// Program loop. Read the temperature from analog temperature
// sensor
for(;
// Endless loop
{
//
//Walt until a request is received
//
dt = 0;
while(!dt) dt = CAN1Read(&id, data, &len, &read);
if(id == 500 && data[0] == 'T')
{
//
// Now read the temperature
//
temp = Adc_Read(0); // Read temp
mV = (unsigned long)temp * 5000 /1024; // in mV
temperature = mV/10; // in degrees C
//
// send the temperature to Node

isplay
//
data[0] = temperature;
id = 3; // Identifier
CAN1Write(id, data, 1, send); // send temperature
}
}
}