[SOLVED] Little help on canbus display lcd micro c

Status
Not open for further replies.

bauche

Junior Member level 1
Joined
Oct 13, 2010
Messages
15
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,367
Hi there i'm building an canbus with 3 node..2 collector node 1-temperature 2-adc voltage.
data send on display node with 2X16 display line 1 is temp line 2 is volt

Everything works fine....

my little prob is if one of the these node is down (or missing) my display node
stop of working (cause it's waiting for receive data)

does somebody help me to keep display working in case node are too long for response or missing???

thanks for help!!!!

works on 18F2580 20mhz osc
Code:
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections



void main()
{

/*-----------prog variable----------------------------*/

unsigned char temperature;                 // temperature variable
unsigned char voltage;                         // voltage variable
unsigned char Data[8];                            // data variable
unsigned short init_flag, send_flag, dt, len, read_flag; // canbus
char SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, txt[4]; // canbus
unsigned long id, mask;                               // id variable canbus

/*-----------port definition------------------------*/

TRISC = 0x00; // PORTC are outputs (LCD)
TRISB = 0x08; // RB2 is output, RB3 is input

/*----------------lcd------------------------------*/

Lcd_Init(); // init LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // no flashing cursor
Lcd_Out(1,1,"CANBUS TEST"); // Display TEST on LCD
Delay_ms(3000); // Wait for 3 seconds
Lcd_Cmd(_LCD_CLEAR); // Clear LCD

/*----------------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;

CANInitialize(SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init_flag);
CANSetOperationMode(_CAN_MODE_CONFIG, 0xFF);
mask = -1;
CANSetMask(_CAN_MASK_B1, mask, _CAN_CONFIG_XTD_MSG);
CANSetMask(_CAN_MASK_B2, mask, _CAN_CONFIG_XTD_MSG);
CANSetFilter(_CAN_FILTER_B2_F3,3,_CAN_CONFIG_XTD_MSG);
CANSetOperationMode(_CAN_MODE_NORMAL, 0xFF);

/*-----------------END CAN BUS Parameters----------------------------*/


/*----------------------loop-----------------------------------*/


for(;;) // loop Endless loop

  {

//Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // 


/*--------request Node:TEMP-COLLECTOR & display data----------------*/

Data[0] = 'T'; // temperature Data to be sent
id = 500; // Identifier address temperature collector
CANWrite(id, Data, 1, send_flag); // send 'T' ---canbus send data----
//Delay_ms(500);

// fin send data TEMP + debut get temperature data

dt = 0;
while(!dt)
dt = CANRead(&id, Data, &len, &read_flag); // ---read canbus---

if((id == 3) && (Data[1] == 'A')) // address #3 is node display address
// data 'A' received temp data from temp collector from address 500

      {
temperature = Data[0];
Lcd_Out(1,1,"Temperature=");
ByteToStr(temperature,txt); // Convert to string
Lcd_Out(1,13,txt); // Output to LCD
ByteToStr(temperature,txt); // Convert to string
 }


/*---------------fin get & display data TEMP------------------------*/

Delay_ms(500);

/*--------request Node:VOLT-COLLECTOR & display data----------------*/

Data[0] = 'T'; // voltage Data to be sent
id = 501; // Identifier address voltage collector
CANWrite(id, Data, 1, send_flag); // send 'T' ---canbus send data----
//Delay_ms(500);

// fin send data VOLT + debut get voltage data


dt = 0;
while(!dt)
dt = CANRead(&id, Data, &len, &read_flag); // ---read canbus---


if((id == 3) && (Data[1] == 'B')) // address #3 is node display address

// data 'B' received volt data from volt collector from address 501

      {
voltage = Data[0];
Lcd_Out(2,1,"Voltage    =");
ByteToStr(voltage,txt); // Convert to string
Lcd_Out(2,13,txt); // Output to LCD
ByteToStr(voltage,txt); // Convert to string
}

/*----------------fin get & display data VOLT-------------------------*/


//Delay_ms(2000); // Wait 2 second


}
       
}
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…