![]() | ![]() | ![]() |
| |||||||
| Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc. |
![]() |
| | Tools |
| | #1 |
|
Hi, I am doing control area network project... where i have to sense the temperature value in one node and i have to transmit it to the other node using CAN Bus..The problem is that the lcd just display "Temp= _ ". I will attach the code ...can anyone help me to solve the problem... Microcontroller:PIC 18F458 Oscillator:20 Mhz Compiler:MikroC CAN Tranceiver:MCP2551 Display.C /*The LCD is connected to the microcontroller as follows: Microcontroller LCD RC0 D4 RC1 D5 RC2 D6 RC3 D7 RC4 RS RC5 EN CAN speed parameters are: Microcontroller clock: 8MHz CAN Bus bit rate: 100Kb/s Sync_Seg: 1 Prop_Seg: 6 Phase_Seg1: 6 Phase_Seg2: 7 SJW: 1 BRP: 1 Sample point: 65% File: DISPLAY.C ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ void main() { unsigned char temperature, data[8]; unsigned short init_flag, send_flag, dt, len, read_flag; char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, txt[4]; long id, mask; TRISC = 0; // PORTC are outputs (LCD) TRISB = 0x08; // RB2 is output, RB3 is input // // CAN BUS Parameters // SJW = 1; BRP = 1; Phase_Seg1 = 6; Phase_Seg2 = 7; Prop_Seg = 6; init_flag = CAN_CONFIG_SAMPLE_THRICE & CAN_CONFIG_PHSEG2_PRG_ON & CAN_CONFIG_STD_MSG & CAN_CONFIG_DBL_BUFFER_ON & CAN_CONFIG_VALID_XTD_MSG & CAN_CONFIG_LINE_FILTER_OFF; send_flag = CAN_TX_PRIORITY_0 & CAN_TX_XTD_FRAME & CAN_TX_NO_RTR_FRAME; read_flag = 0; // // Initialize CAN module // CANInitialize(SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init_flag); // // Set CAN CONFIG mode // CANSetOperationMode(CAN_MODE_CONFIG, 0xFF); mask = -1; // // Set all MASK1 bits to 1's // CANSetMask(CAN_MASK_B1, mask, CAN_CONFIG_XTD_MSG); // // Set all MASK2 bits to 1's // CANSetMask(CAN_MASK_B2, mask, CAN_CONFIG_XTD_MSG); // // Set id of filter B2_F3 to 3 // CANSetFilter(CAN_FILTER_B2_F3,3,CAN_CONFIG_XTD_MSG ); // // Set CAN module to NORMAL mode // CANSetOperationMode(CAN_MODE_NORMAL, 0xFF); // // Configure LCD // Lcd_Config(&PORTC,4,5,0,3,2,1,0); // LCD is connected to PORTC Lcd_Cmd(LCD_CLEAR); // Clear LCD Lcd_Out(1,1,"CAN BUS"); // Display heading on LCD Delay_ms(1000); // Wait for 2 seconds // // Program loop. Read the temperature from Node:COLLECTOR and display // on the LCD continuously // for(; // Endless loop{ Lcd_Cmd(LCD_CLEAR); // Clear LCD Lcd_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 CANWrite(id, data, 1, send_flag); // send 'T' // // Get temperature from node:COLLECT // dt = 0; while(!dt)dt = CANRead(&id, data, &len, &read_flag); if(id == 3) { temperature = data[0]; ByteToStr(temperature,txt); // Convert to string Lcd_Out(1,8,txt); // Output to LCD Delay_ms(1000); // Wait 1 second } } } Collector.C CAN speed parameters are: Microcontroller clock: 8MHz CAN Bus bit rate: 100Kb/s Sync_Seg: 1 Prop_Seg: 6 Phase_Seg1: 6 Phase_Seg2: 7 SJW: 1 BRP: 1 Sample point: 65% File: COLLECTOR.C ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ void main() { unsigned char temperature, data[8]; unsigned short init_flag, send_flag, dt, len, read_flag; char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, txt[4]; unsigned int temp; unsigned long mV; long id, mask; TRISA = 0xFF; // PORTA are inputs TRISB = 0x08; // RB2 is output, RB3 is input // // Configure A/D converter // ADCON1 = 0x80; // // CAN BUS Timing Parameters // SJW = 1; BRP = 1; Phase_Seg1 = 6; Phase_Seg2 = 7; BRP = 1; Prop_Seg = 6; init_flag = CAN_CONFIG_SAMPLE_THRICE & CAN_CONFIG_PHSEG2_PRG_ON & CAN_CONFIG_STD_MSG & CAN_CONFIG_DBL_BUFFER_ON & CAN_CONFIG_VALID_XTD_MSG & CAN_CONFIG_LINE_FILTER_OFF; send_flag = CAN_TX_PRIORITY_0 & CAN_TX_XTD_FRAME & CAN_TX_NO_RTR_FRAME; read_flag = 0; // // Initialise CAN module // CANInitialize(SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init_flag); // // Set CAN CONFIG mode // CANSetOperationMode(CAN_MODE_CONFIG, 0xFF); mask = -1; // // Set all MASK1 bits to 1's // CANSetMask(CAN_MASK_B1, mask, CAN_CONFIG_XTD_MSG); // // Set all MASK2 bits to 1's // CANSetMask(CAN_MASK_B2, mask, CAN_CONFIG_XTD_MSG); // // Set id of filter B1_F1 to 3 // CANSetFilter(CAN_FILTER_B2_F3,500,CAN_CONFIG_XTD_M SG); // // Set CAN module to NORMAL mode // CANSetOperationMode(CAN_MODE_NORMAL, 0xFF); // // Program loop. Read the temperature from analog temperature // sensor // for(; // Endless loop{ // // Wait until a request is received // dt = 0; while(!dt) dt = CANRead(&id, data, &len, &read_flag); 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 CANWrite(id, data, 1, send_flag); // send temperature } } } | |
| |
|
| Tags |
| controllerproblem |
| Thread Tools | |
| Display Modes | |
| |
Similar | ||||
| Title | Starter | Forum | Replies | Latest |
| LCD backlight problem? inverter problem? SHARP | dirtyb15 | Repairing Consumer Electronics | 32 | 27th October 2009 12:49 PM |
| K8004 problem with PWM controller noise | smilem | Electronic Projects Design/Ideas/Reviews | 14 | 19th July 2009 09:25 AM |
| printer interfacing with PIC controller problem?? | maddy2kool4u | Micro Controllers | 5 | 21st May 2009 06:29 PM |
| Servo motor~~~~ problem~.....shaking problem!!!!! | Gundam82 | Robotics Chat | 10 | 4th October 2004 08:12 PM |
| Light Controller or rather Electrical Outlet Controller | mammanoti | Electronic Projects Design/Ideas/Reviews | 1 | 11th January 2003 04:09 AM |