|
Tài trợ cho PIC Vietnam |
Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
|
Ðiều Chỉnh | Xếp Bài |
|
08-04-2010, 03:14 PM | #1 | |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 146
: |
Trích:
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com |
|
05-05-2010, 06:48 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 7
: |
CAN với PIC30f4012
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 Nodeisplay // data[0] = temperature; id = 3; // Identifier CAN1Write(id, data, 1, send); // send temperature } } } |
05-05-2010, 06:51 PM | #3 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 7
: |
Pic 30f4012 và CAN ( tiếp)
CHíp thứ 2 nhận tín hiệu hiển thị LCD:
void main() { unsigned char temperature, data[8]; unsigned short init, send, dt, len, CANread; char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, txt[4]; long id, mask; TRISB = 0; TRISC = 0; TRISF = 0x04; SJW = 1; BRP = 1; Phase_Seg1 = 6; Phase_Seg2 = 7; 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; CAN1read = 0; CAN1SetMask(CAN_MASK_B1, mask, CAN_CONFIG_XTD_MSG); CAN1SetMask(CAN_MASK_B2, mask, CAN_CONFIG_XTD_MSG); CAN1SetFilter(CAN_FILTER_B2_F3,3,CAN_CONFIG_XTD_MS G); CAN1SetOperationMode(CAN_MODE_NORMAL, 0xFF); Lcd_Custom_Config(&PORTB, 5,4,3,2,1,0, &PORTC, 13); Lcd_Custom_Cmd(LCD_CLEAR); Lcd_Custom_Out(1,1 ,"CAN BUS"); Delay_ms(1000); for(; // Endless loop { Lcd_Custom_Cmd(LCD_CLEAR); //Clear LCD Lcd_Custom_Out(1,1, "Temp = "); // Display "Temp = " // // Send a message to Node:COLLECTOR and ask for data // data[0] = 'T'; // Data to be sent id = 500; // Identifier CAN1Write(id, data, 1, send); // send T // // Get temperature from node:COLLECT // dt = 0; while(!dt) dt = CAN1Read(&id, data, &len, &CANread); if(id == 3) { temperature = data[0]; ByteToStr(temperature,txt); // Convert to string Lcd_Custom_Out(1,8,txt); // Output to LCD Delay_ms(1000); //Wait 1 second } } } |
|
|