3144 lines
96 KiB
C
3144 lines
96 KiB
C
|
#include <mega128a.h>
|
|||
|
#include <delay.h>
|
|||
|
#include <stdint.h>
|
|||
|
#include <control_header.h>
|
|||
|
#include <stdio.h>
|
|||
|
|
|||
|
#define DATA_REGISTER_EMPTY (1<<UDRE0)
|
|||
|
#define RX_COMPLETE (1<<RXC0)
|
|||
|
#define FRAMING_ERROR (1<<FE0)
|
|||
|
#define PARITY_ERROR (1<<UPE0)
|
|||
|
#define DATA_OVERRUN (1<<DOR0)
|
|||
|
|
|||
|
// USART0 Receiver buffer
|
|||
|
#define RX_BUFFER_SIZE0 8
|
|||
|
static uint8_t rx_buffer0[RX_BUFFER_SIZE0];
|
|||
|
|
|||
|
|
|||
|
#if RX_BUFFER_SIZE0 <= 256
|
|||
|
static volatile uint8_t rx_wr_index0=0,rx_rd_index0=0;
|
|||
|
#else
|
|||
|
static volatile uint32_t rx_wr_index0=0,rx_rd_index0=0;
|
|||
|
#endif
|
|||
|
|
|||
|
#if RX_BUFFER_SIZE0 < 256
|
|||
|
static volatile uint8_t rx_counter0=0U;
|
|||
|
#else
|
|||
|
static volatile uint16_t rx_counter0=0U;
|
|||
|
#endif
|
|||
|
|
|||
|
// This flag is set on USART0 Receiver buffer overflow
|
|||
|
bit rx_buffer_overflow0;
|
|||
|
|
|||
|
interrupt [TIM0_OVF] void timer0_ovf_isr(void);
|
|||
|
|
|||
|
|
|||
|
static void usart0_err_check(void)
|
|||
|
{
|
|||
|
err_info_1 = link_data_buffer[91];
|
|||
|
err_info_2 = link_data_buffer[90];
|
|||
|
|
|||
|
if((err_info_1 & 0x80U) == 0x80U){ac_err = ERROR;}else{ac_err = NOR;}
|
|||
|
if((err_info_1 & 0x40U) == 0x40U){gen_high_temp = ERROR;}else{gen_high_temp = NOR;}
|
|||
|
if((err_info_1 & 0x20U) == 0x20U){gen_low_fuel = ERROR;}else{gen_low_fuel = NOR;}
|
|||
|
if((err_info_1 & 0x10U) == 0x10U){batt1_temp_err = ERROR;}else{batt1_temp_err = NOR;}
|
|||
|
if((err_info_1 & 0x08U) == 0x08U){batt1_ovp = ERROR;}else{batt1_ovp = NOR;}
|
|||
|
if((err_info_1 & 0x04U) == 0x04U){batt1_ocp = ERROR;}else{batt1_ocp = NOR;}
|
|||
|
if((err_info_1 & 0x03U) == 0x02U){batt1_charge = ON;}else{batt1_charge = OFF;}
|
|||
|
if((err_info_1 & 0x03U) == 0x01U){batt1_discharge = ON;}else{batt1_discharge = OFF;}
|
|||
|
|
|||
|
if((err_info_2 & 0x80U) == 0x80U){gen_ovp = ERROR;}else{gen_ovp = NOR;}
|
|||
|
if((err_info_2 & 0x40U) == 0x40U){gen_ocp = ERROR;}else{gen_ocp = NOR;}
|
|||
|
if((err_info_2 & 0x20U) == 0x20U){gen_low_presure_err = ERROR;}else{gen_low_presure_err= NOR;}
|
|||
|
if((err_info_2 & 0x10U) == 0x10U){batt2_temp_err = ERROR;}else {batt2_temp_err = NOR;}
|
|||
|
if((err_info_2 & 0x08U) == 0x08U){batt2_ovp = ERROR;}else{batt2_ovp = NOR;}
|
|||
|
if((err_info_2 & 0x04U) == 0x04U){batt2_ocp = ERROR;}else{batt2_ocp = NOR;}
|
|||
|
if((err_info_2 & 0x03U) == 0x02U){batt2_charge = ON;}else{batt2_charge = OFF;}
|
|||
|
if((err_info_2 & 0x03U) == 0x01U){batt2_discharge = ON;}else{batt2_discharge = OFF;}
|
|||
|
|
|||
|
if((gen_high_temp == ERROR)||(gen_ovp == ERROR)||(gen_ocp == ERROR)||(gen_low_presure_err == ERROR)){gen_state_err = ERROR;}else{gen_state_err = NOR;}
|
|||
|
|
|||
|
if(((err_info_1 & 0x1cU) == 0x00U)&&((err_info_2 & 0x1cU) == 0x00U)){batt_err = NOR;}else{batt_err = ERROR;}
|
|||
|
|
|||
|
if(init_delay_count == 0U)
|
|||
|
{
|
|||
|
if((err_info_1 & 0x03U) != 0x00U){batt_link_1_err = NOR;}else{batt_link_1_err = ERROR;}
|
|||
|
if((err_info_2 & 0x03U) != 0x00U){batt_link_2_err = NOR;}else{batt_link_2_err = ERROR;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
batt_link_1_err = NOR;
|
|||
|
batt_link_2_err = NOR;
|
|||
|
}
|
|||
|
|
|||
|
err_ch_ovp_1 = link_data_buffer[89];
|
|||
|
|
|||
|
if((link_data_buffer[89] & 0x01U)== 0x01U){ac_temp_err = ERROR;}else{ac_temp_err = NOR;}
|
|||
|
if((link_data_buffer[89] & 0x02U)== 0x02U){ac_fault_err = ERROR;}else{ac_fault_err = NOR;}
|
|||
|
|
|||
|
err_ch_ovp_2 = link_data_buffer[88];
|
|||
|
|
|||
|
err_ch_lvp_1 = link_data_buffer[87];
|
|||
|
err_ch_lvp_2 = link_data_buffer[86];
|
|||
|
|
|||
|
err_ch_current_1 = link_data_buffer[85];
|
|||
|
err_ch_current_2 = link_data_buffer[84];
|
|||
|
|
|||
|
ch_status_1 = link_data_buffer[83];
|
|||
|
ch_status_2 = link_data_buffer[82];
|
|||
|
|
|||
|
temp = link_data_buffer[81];
|
|||
|
if((temp & 0x80U)==0x80U){divider_limit_alram = ERROR;}else{divider_limit_alram = NOR;}
|
|||
|
if((temp & 0x40U)==0x40U){divider_work_alram = ERROR;}else{divider_work_alram = NOR;}
|
|||
|
if((temp & 0x20U)==0x20U){gen_limit_alram = ERROR;}else{gen_limit_alram = NOR;}
|
|||
|
if((temp & 0x10U)==0x10U){gen_work_alram = ERROR;}else{gen_work_alram = NOR;}
|
|||
|
if((temp & 0x08U) == 0x08U){gen_link_err = NOR;}else{gen_link_err = ERROR;}
|
|||
|
}
|
|||
|
|
|||
|
static void usart0_gen_info(void)
|
|||
|
{
|
|||
|
//generator info
|
|||
|
|
|||
|
if((link_data_buffer[15] & 0x80U)==0x80U){gen_volt_sensor_err = ERROR;}else{gen_volt_sensor_err = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x40U)==0x40U){gen_current_sensor_err = ERROR;}else{gen_current_sensor_err = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x20U)==0x20U){gen_temp_sensor_err = ERROR;}else{gen_temp_sensor_err = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x10U)==0x10U){gen_fuel_level_sensor_err = ERROR;}else{gen_fuel_level_sensor_err = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x08U)==0x08U){gen_oil_presure_sensor_err = ERROR;}else{gen_oil_presure_sensor_err = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x02U)==0x02U){gen_start_fail = ERROR;}else{gen_start_fail = NOR;}
|
|||
|
if((link_data_buffer[15] & 0x01U)==0x01U){gen_em_stop = ERROR;}else{gen_em_stop = NOR;}
|
|||
|
|
|||
|
if((gen_volt_sensor_err == ERROR)||(gen_current_sensor_err == ERROR)||(gen_temp_sensor_err == ERROR)||(gen_fuel_level_sensor_err == ERROR)||(gen_oil_presure_sensor_err == ERROR)||(gen_start_fail == ERROR)||(gen_em_stop == ERROR)){gen_sensor_err = ERROR;}else{gen_sensor_err = NOR;}
|
|||
|
if((gen_sensor_err == ERROR)||(gen_state_err == ERROR)||(gen_limit_alram == ERROR)||(gen_work_alram == ERROR)){gen_err = ERROR;}else{gen_err = NOR;}
|
|||
|
|
|||
|
|
|||
|
//battery
|
|||
|
//batt1 temperature
|
|||
|
temp = link_data_buffer[14];
|
|||
|
batt_temperature_1 = temp;
|
|||
|
|
|||
|
if(link_data_buffer[13] > 0U)
|
|||
|
{
|
|||
|
batt_volt_1 = link_data_buffer[13];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
batt_volt_1 = 0;
|
|||
|
}
|
|||
|
batt_current_1 = link_data_buffer[12];
|
|||
|
batt_health_1 = link_data_buffer[11];
|
|||
|
|
|||
|
//batt2 temperature
|
|||
|
temp = link_data_buffer[10];
|
|||
|
batt_temperature_2 = temp;
|
|||
|
|
|||
|
|
|||
|
if(link_data_buffer[9] > 0U)
|
|||
|
{
|
|||
|
batt_volt_2 = link_data_buffer[9];
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
batt_volt_2 = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// USART0 Receiver interrupt service routine
|
|||
|
interrupt [USART0_RXC] void usart0_rx_isr(void) //(422)to
|
|||
|
{
|
|||
|
uint8_t status;
|
|||
|
uint8_t data;
|
|||
|
status=UCSR0A;
|
|||
|
data=UDR0;
|
|||
|
if (((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))) == 0)
|
|||
|
{
|
|||
|
rx_buffer0[rx_wr_index0++]=data;
|
|||
|
#if RX_BUFFER_SIZE0 == 256U
|
|||
|
// special case for receiver buffer size=256
|
|||
|
if (++rx_counter0 == 0U) {rx_buffer_overflow0=1;}
|
|||
|
#else
|
|||
|
if (rx_wr_index0 == (uint8_t)RX_BUFFER_SIZE0){rx_wr_index0 = 0;}
|
|||
|
if (++rx_counter0 == (uint8_t)RX_BUFFER_SIZE0)
|
|||
|
{
|
|||
|
rx_counter0=0U;
|
|||
|
rx_buffer_overflow0=1;
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
if((link_data_buffer[3] == 0xaaU)&&(link_data_buffer[2] == 0x55U))
|
|||
|
{
|
|||
|
i2c_add = (uint16_t) (link_data_buffer[1] * 256U) + link_data_buffer[0];
|
|||
|
i2c_w_data = data;
|
|||
|
i2c_write_act = 1;
|
|||
|
link_data_buffer[3] = 0x00;
|
|||
|
link_data_buffer[2] = 0x00;
|
|||
|
link_data_buffer[1] = 0x00;
|
|||
|
link_data_buffer[0] = 0x00;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>б<EFBFBD>
|
|||
|
if((link_data_buffer[2] == 0xaaU)&&(link_data_buffer[1] == 0x00U))
|
|||
|
{
|
|||
|
i2c_add = (link_data_buffer[0] * 256U) + data;
|
|||
|
i2c_read_act = 1;
|
|||
|
link_data_buffer[2] = 0x00;
|
|||
|
link_data_buffer[1] = 0x00;
|
|||
|
link_data_buffer[0] = 0x00;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//<2F>б<EFBFBD> list
|
|||
|
if((link_data_buffer[2] == 0xaaU)&&(link_data_buffer[1] == 0xaaU))
|
|||
|
{
|
|||
|
i2c_add = (link_data_buffer[0] * 256U) + data;
|
|||
|
i2c_read_all_act = 1;
|
|||
|
link_data_buffer[2] = 0x00;
|
|||
|
link_data_buffer[1] = 0x00;
|
|||
|
link_data_buffer[0] = 0x00;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if(data == 0x0aU)
|
|||
|
{
|
|||
|
//ä<>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if((link_data_buffer[5] == 0x7fU) && (link_data_buffer[4] == 0xfeU) && (link_data_buffer[3] == 0x55U) && (link_data_buffer[0] == 0x0dU))
|
|||
|
{
|
|||
|
ch_status_1 = link_data_buffer[2];
|
|||
|
ch_status_2 = link_data_buffer[1];
|
|||
|
|
|||
|
link_data_buffer[5] = 0;
|
|||
|
link_data_buffer[4] = 0;
|
|||
|
link_data_buffer[3] = 0;
|
|||
|
link_data_buffer[2] = 0;
|
|||
|
link_data_buffer[1] = 0;
|
|||
|
link_data_buffer[0] = 0;
|
|||
|
|
|||
|
for(buff_loop = 0U;buff_loop < 6U;buff_loop++)
|
|||
|
{
|
|||
|
link_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if((link_data_buffer[94] == 0x7fU) && (link_data_buffer[93] == 0xfeU) && (link_data_buffer[92] == 0x00U) && (link_data_buffer[0] == 0x0dU))
|
|||
|
{
|
|||
|
//err info
|
|||
|
usart0_err_check();
|
|||
|
|
|||
|
|
|||
|
switch(temp & 0x07U)
|
|||
|
{
|
|||
|
case 1:
|
|||
|
mode = BATT;
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
mode = GEN;
|
|||
|
break;
|
|||
|
|
|||
|
case 4:
|
|||
|
mode = AC;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
// ä<>κ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
voltage_ch1 = ((uint16_t)link_data_buffer[80] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[79]); //v ch1 CS
|
|||
|
currunt_ch1 = ((uint16_t)link_data_buffer[78] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[77]);
|
|||
|
voltage_ch2 = ((uint16_t)link_data_buffer[76] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[75]); //v ch2 SW
|
|||
|
currunt_ch2 = ((uint16_t)link_data_buffer[74] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[73]);
|
|||
|
voltage_ch3 = ((uint16_t)link_data_buffer[72] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[71]); //v ch3 EX
|
|||
|
currunt_ch3 = ((uint16_t)link_data_buffer[70] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[69]);
|
|||
|
voltage_ch4 = ((uint16_t)link_data_buffer[68] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[67]); //v ch4 MAST
|
|||
|
currunt_ch4 = ((uint16_t)link_data_buffer[66] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[65]);
|
|||
|
voltage_ch5 = ((uint16_t)link_data_buffer[64] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[63]); //v ch5 OC1
|
|||
|
currunt_ch5 = ((uint16_t)link_data_buffer[62] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[61]);
|
|||
|
voltage_ch6 = ((uint16_t)link_data_buffer[60] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[59]); //v ch6 ST1
|
|||
|
currunt_ch6 = ((uint16_t)link_data_buffer[58] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[57]);
|
|||
|
voltage_ch7 = ((uint16_t)link_data_buffer[56] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[55]); //v ch7 MC
|
|||
|
currunt_ch7 = ((uint16_t)link_data_buffer[54] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[53]);
|
|||
|
voltage_ch8 = ((uint16_t)link_data_buffer[52] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[51]); //v ch5 NAVI
|
|||
|
currunt_ch8 = ((uint16_t)link_data_buffer[50] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[49]);
|
|||
|
voltage_ch9 = ((uint16_t)link_data_buffer[48] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[47]); //v ch6 SB
|
|||
|
currunt_ch9 = ((uint16_t)link_data_buffer[46] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[45]);
|
|||
|
voltage_ch10 = ((uint16_t)link_data_buffer[44] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[43]); //v ch7 OC2
|
|||
|
currunt_ch10 = ((uint16_t)link_data_buffer[42] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[41]);
|
|||
|
voltage_ch11 = ((uint16_t)link_data_buffer[40] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[39]); //v ch5 ST2
|
|||
|
currunt_ch11 = ((uint16_t)link_data_buffer[38] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[37]);
|
|||
|
voltage_ch12 = ((uint16_t)link_data_buffer[36] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[35]); //v ch6 GETC
|
|||
|
currunt_ch12 = ((uint16_t)link_data_buffer[34] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[33]);
|
|||
|
voltage_ch13 = ((uint16_t)link_data_buffer[32] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[31]); //v ch5 GC
|
|||
|
currunt_ch13 = ((uint16_t)link_data_buffer[30] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[29]);
|
|||
|
voltage_ch14 = ((uint16_t)link_data_buffer[28] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[27]); //v ch6 CNIC
|
|||
|
currunt_ch14 = ((uint16_t)link_data_buffer[26] * (uint16_t)0x100U) + (uint16_t)(link_data_buffer[25]);
|
|||
|
|
|||
|
//ac
|
|||
|
ac_volt = (link_data_buffer[24] * 256U) + link_data_buffer[23];
|
|||
|
|
|||
|
|
|||
|
//generator
|
|||
|
gen_rpm = link_data_buffer[22];
|
|||
|
gen_volt = ((link_data_buffer[21]*256U)+ link_data_buffer[20]);
|
|||
|
gen_current = (uint16_t)link_data_buffer[19];
|
|||
|
gen_fuel = link_data_buffer[18];
|
|||
|
gen_status = link_data_buffer[17];
|
|||
|
gen_temp = link_data_buffer[16];
|
|||
|
|
|||
|
usart0_gen_info();
|
|||
|
|
|||
|
|
|||
|
batt_current_2 = link_data_buffer[8];
|
|||
|
batt_health_2 = link_data_buffer[7];
|
|||
|
|
|||
|
batt_fuel_1 = link_data_buffer[6];
|
|||
|
batt_fuel_2 = link_data_buffer[5];
|
|||
|
|
|||
|
|
|||
|
//batt1 info
|
|||
|
if((link_data_buffer[4] & 0xC0U) == 0x00U)
|
|||
|
{
|
|||
|
batt1_status = DISCONNECT;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((link_data_buffer[4] & 0xC0U)!= 0xc0U)
|
|||
|
{
|
|||
|
if((link_data_buffer[4] & 0x80U) == 0x80U){batt1_status = CHARGE;}
|
|||
|
if((link_data_buffer[4] & 0x40U) == 0x40U){batt1_status = DISCHARGE;}
|
|||
|
if((link_data_buffer[4] & 0x20U) == 0x20U){batt1_heater = ON;}else{batt1_heater = OFF;}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
//batt2 info
|
|||
|
if((link_data_buffer[4] & 0x0cU) == 0x00U)
|
|||
|
{
|
|||
|
batt2_status = DISCONNECT;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((link_data_buffer[4] & 0x0cU)!= 0x0cU)
|
|||
|
{
|
|||
|
if((link_data_buffer[4] & 0x08U) == 0x08U){batt2_status = CHARGE;}
|
|||
|
if((link_data_buffer[4] & 0x04U) == 0x04U){batt2_status = DISCHARGE;}
|
|||
|
if((link_data_buffer[4] & 0x02U) == 0x02U){batt2_heater = ON;}else{batt2_heater = OFF;}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//source 4,3
|
|||
|
voltage_source = (link_data_buffer[3] * 256U) + link_data_buffer[2];
|
|||
|
|
|||
|
//check sum
|
|||
|
check_sum = link_data_buffer[1];
|
|||
|
|
|||
|
for(buff_loop = 0U;buff_loop < 95U;buff_loop++)
|
|||
|
{
|
|||
|
link_data_buffer[buff_loop] = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for(link_buffer_count = 93U;link_buffer_count > 0U;link_buffer_count--)
|
|||
|
{
|
|||
|
link_data_buffer[link_buffer_count + 1U] = link_data_buffer[link_buffer_count];
|
|||
|
}
|
|||
|
link_data_buffer[1] = link_data_buffer[0];
|
|||
|
link_data_buffer[0] = data;
|
|||
|
|
|||
|
loss_count = 0U; //<2F><>ũ <20><><EFBFBD><EFBFBD> Ȯ<>ο<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
// Get a character from the USART0 Receiver buffer
|
|||
|
#define _ALTERNATE_GETCHAR_
|
|||
|
#pragma used+
|
|||
|
|
|||
|
uint8_t getchar(void)
|
|||
|
{
|
|||
|
uint8_t data;
|
|||
|
while (rx_counter0==0){};
|
|||
|
data=rx_buffer0[rx_rd_index0++];
|
|||
|
#if RX_BUFFER_SIZE0 != 256
|
|||
|
if (rx_rd_index0 == RX_BUFFER_SIZE0){ rx_rd_index0=0;}
|
|||
|
#endif
|
|||
|
#asm("cli")
|
|||
|
--rx_counter0;
|
|||
|
#asm("sei")
|
|||
|
return data;
|
|||
|
}
|
|||
|
#pragma used-
|
|||
|
|
|||
|
// USART1 Receiver buffer
|
|||
|
#define RX_BUFFER_SIZE1 8
|
|||
|
uint8_t rx_buffer1[RX_BUFFER_SIZE1];
|
|||
|
|
|||
|
#if RX_BUFFER_SIZE1 <= 256
|
|||
|
uint8_t rx_wr_index1=0,rx_rd_index1=0;
|
|||
|
#else
|
|||
|
unsigned int rx_wr_index1=0,rx_rd_index1=0;
|
|||
|
#endif
|
|||
|
|
|||
|
#if RX_BUFFER_SIZE1 < 256
|
|||
|
uint8_t rx_counter1=0;
|
|||
|
#else
|
|||
|
unsigned int rx_counter1=0;
|
|||
|
#endif
|
|||
|
|
|||
|
// This flag is set on USART1 Receiver buffer overflow
|
|||
|
bit rx_buffer_overflow1;
|
|||
|
|
|||
|
// USART1 Receiver interrupt service routine
|
|||
|
interrupt [USART1_RXC] void usart1_rx_isr(void) //(422) to lan
|
|||
|
{
|
|||
|
uint8_t status;
|
|||
|
uint8_t data;
|
|||
|
status=UCSR1A;
|
|||
|
data=UDR1;
|
|||
|
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0U)
|
|||
|
{
|
|||
|
rx_buffer1[rx_wr_index1++]=data;
|
|||
|
#if RX_BUFFER_SIZE1 == 256U
|
|||
|
// special case for receiver buffer size=256
|
|||
|
if (++rx_counter1 == 0U) rx_buffer_overflow1=1U;
|
|||
|
#else
|
|||
|
if (rx_wr_index1 == RX_BUFFER_SIZE1) {rx_wr_index1=0;}
|
|||
|
if (++rx_counter1 == RX_BUFFER_SIZE1)
|
|||
|
{
|
|||
|
rx_counter1=0U;
|
|||
|
rx_buffer_overflow1=1;
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
for(lan_buffer_count = 93U;lan_buffer_count > 0U;lan_buffer_count--)
|
|||
|
{
|
|||
|
lan_data_buffer[lan_buffer_count + 1U] = lan_data_buffer[lan_buffer_count];
|
|||
|
}
|
|||
|
lan_data_buffer[1] = lan_data_buffer[0];
|
|||
|
lan_data_buffer[0] = data;
|
|||
|
|
|||
|
//ä<>λ<EFBFBD><CEBB><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
|
|||
|
if((lan_data_buffer[12] == 0x9bU)&&(lan_data_buffer[11] == 0x22U)&&(lan_data_buffer[10] == (uint8_t )mc_id)&&(lan_data_buffer[9] == (uint8_t )power_control_id)&&(lan_data_buffer[7] == 0x04U)&&(lan_data_buffer[6] == 0x03U)&&(lan_data_buffer[5] == 0x00U)&&(lan_data_buffer[4] == 0x00U)&&(lan_data_buffer[3] == 0x00U))
|
|||
|
{
|
|||
|
ch_sel_2 = lan_data_buffer[2]; //<2F><>Ʋ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> 240408
|
|||
|
ch_sel_1 = lan_data_buffer[1];
|
|||
|
|
|||
|
|
|||
|
if((lan_data_buffer[0] & 0x80U) == 0x80U) //<2F><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD>
|
|||
|
{
|
|||
|
em_off_time = lan_data_buffer[0];
|
|||
|
ch_sel_2 = 0x00;
|
|||
|
ch_sel_1 = 0x00;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
em_off_time = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
for(buff_loop = 0U;buff_loop < 13U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
power_manage_control_response_act = 1U;
|
|||
|
ch_set_act = 1U;
|
|||
|
}
|
|||
|
|
|||
|
//start_bit
|
|||
|
if((lan_data_buffer[10] == 0x94U)&&(lan_data_buffer[9] == 0x22U)&&(lan_data_buffer[8] == (uint8_t )mc_id)&&(lan_data_buffer[7] == (uint8_t )power_control_id)&&(lan_data_buffer[5] == 0x04U)&&(lan_data_buffer[4] == 0x01U)&&(lan_data_buffer[3] == 0x00U)&&(lan_data_buffer[2] == 0x00U)&&(lan_data_buffer[1] == 0x00U)&&(lan_data_buffer[0] == 0x01U))
|
|||
|
{
|
|||
|
power_manage_start_response_act = 1U;
|
|||
|
for(buff_loop = 0U;buff_loop < 11U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//pbit
|
|||
|
if((lan_data_buffer[9] == (uint8_t )PBIT)&&(lan_data_buffer[8] == 0x24U)&&(lan_data_buffer[7] == (uint8_t )mc_id)&&(lan_data_buffer[6] == (uint8_t )power_control_id)&&(lan_data_buffer[4] == 0x04U)&&(lan_data_buffer[3] == 0x00U)&&(lan_data_buffer[2] == 0x00U)&&(lan_data_buffer[1] == 0x00U)&&(lan_data_buffer[0] == 0x00U))
|
|||
|
{
|
|||
|
power_management_pbit_response_act = 1U;
|
|||
|
for(buff_loop = 0U;buff_loop < 10U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//detail pit
|
|||
|
if((lan_data_buffer[10] == 0x9aU)&&(lan_data_buffer[9] == 0x24U)&&(lan_data_buffer[8] == mc_id)&&(lan_data_buffer[7] == power_control_id)&&(lan_data_buffer[5] == 0x04U)&&(lan_data_buffer[4] == 0x01U)&&(lan_data_buffer[3] == 0x00U)&&(lan_data_buffer[2] == 0x00U)&&(lan_data_buffer[1] == 0x00U)&&(lan_data_buffer[0] == 0x01U))
|
|||
|
{
|
|||
|
power_manage_detail_response_act = 1U;
|
|||
|
for(buff_loop = 0U;buff_loop < 11U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//detail cbit
|
|||
|
if((lan_data_buffer[10] == 0x9aU)&&(lan_data_buffer[9] == 0x24U)&&(lan_data_buffer[8] == mc_id)&&(lan_data_buffer[7] == power_control_id)&&(lan_data_buffer[5] == 0x04U)&&(lan_data_buffer[4] == 0x01U)&&(lan_data_buffer[3] == 0x00U)&&(lan_data_buffer[2] == 0x00U)&&(lan_data_buffer[1] == 0x00U)&&(lan_data_buffer[0] == 0x00U))
|
|||
|
{
|
|||
|
power_manage_detail_response_act = 1U;
|
|||
|
for(buff_loop = 0U;buff_loop < 11U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//heart_bit
|
|||
|
if((lan_data_buffer[10] == 0x92U)&&(lan_data_buffer[9] == 0x10U)&&(lan_data_buffer[8] == mc_id)&&(lan_data_buffer[7] == power_control_id)&&(lan_data_buffer[5] == 0x04U)&&(lan_data_buffer[4] == 0x01U)&&(lan_data_buffer[3] == 0x00U)&&(lan_data_buffer[2] == 0x00U)&&(lan_data_buffer[1] == 0x00U)&&(lan_data_buffer[0] == 0x00U))
|
|||
|
{
|
|||
|
lan_reset_count = 0;
|
|||
|
for(buff_loop = 0U;buff_loop < 11U;buff_loop++)
|
|||
|
{
|
|||
|
lan_data_buffer[buff_loop] = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// Get a character from the USART1 Receiver buffer
|
|||
|
#pragma used+
|
|||
|
uint8_t getchar1(void)
|
|||
|
{
|
|||
|
uint8_t data;
|
|||
|
while (rx_counter1==0U){};
|
|||
|
data=rx_buffer1[rx_rd_index1++];
|
|||
|
#if RX_BUFFER_SIZE1 != 256U
|
|||
|
if (rx_rd_index1 == RX_BUFFER_SIZE1) {rx_rd_index1=0U;}
|
|||
|
#endif
|
|||
|
#asm("cli")
|
|||
|
--rx_counter1;
|
|||
|
#asm("sei")
|
|||
|
return data;
|
|||
|
}
|
|||
|
|
|||
|
#pragma used-
|
|||
|
// Write a character to the USART1 Transmitter
|
|||
|
#pragma used+
|
|||
|
|
|||
|
static void putchar1(uint8_t c)
|
|||
|
{
|
|||
|
while ((UCSR1A & DATA_REGISTER_EMPTY)==0U){};
|
|||
|
UDR1 = c;
|
|||
|
}
|
|||
|
#pragma used-
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Timer 0 overflow interrupt service routine
|
|||
|
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
|
|||
|
{
|
|||
|
if(count_a >= 6274U) //100ms
|
|||
|
{
|
|||
|
count_a = 0U;
|
|||
|
sec_count++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
count_a++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void header_stx(void)
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
putchar(0x7fU);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
putchar(0xfeU);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static void header_eot(void)
|
|||
|
{
|
|||
|
putchar((uint8_t)0x0dU);
|
|||
|
putchar((uint8_t)0x0aU);
|
|||
|
}
|
|||
|
|
|||
|
static void power_divider_chset(void)
|
|||
|
{
|
|||
|
header_stx();
|
|||
|
putchar((uint8_t)0x55U);//data set
|
|||
|
ch_status_1 = 0U;
|
|||
|
|
|||
|
if((ch_sel_1 & 0x01U) == 0x01U){ch_status_1 |= 0x80U;} //cs
|
|||
|
if((ch_sel_2 & 0x20U) == 0x20U){ch_status_1 |= 0x40U;} //sw
|
|||
|
if((ch_sel_1 & 0x02U) == 0x02U){ch_status_1 |= 0x20U;} //rec
|
|||
|
if((ch_sel_2 & 0x80U) == 0x80U){ch_status_1 |= 0x10U;} //mast
|
|||
|
if((ch_sel_2 & 0x02U) == 0x02U){ch_status_1 |= 0x08U;} //oc1
|
|||
|
if((ch_sel_2 & 0x04U) == 0x04U){ch_status_1 |= 0x04U;} //streeng1
|
|||
|
if((ch_sel_2 & 0x01U) == 0x01U){ch_status_1 |= 0x02U;} //mc
|
|||
|
if((ch_sel_2 & 0x40U) == 0x40U){ch_status_1 |= 0x01U;} //navi
|
|||
|
|
|||
|
|
|||
|
putchar(ch_status_1);
|
|||
|
|
|||
|
ch_status_2 = 0;
|
|||
|
|
|||
|
ch_status_2 |= 0x80U; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if((ch_sel_2 & 0x08U) == 0x08U){ch_status_2 |= 0x40U;}
|
|||
|
if((ch_sel_2 & 0x10U) == 0x10U){ch_status_2 |= 0x20U;}
|
|||
|
ch_status_2 |= 0x10U; //ge
|
|||
|
ch_status_2 |= 0x08U; //getc
|
|||
|
if((ch_sel_1 & 0x04U) == 0x04U){ch_status_2 |= 0x04U;}
|
|||
|
|
|||
|
putchar((uint8_t)ch_status_2);//data channel 2
|
|||
|
|
|||
|
putchar((uint8_t)em_off_time);//reserve1
|
|||
|
|
|||
|
header_eot();
|
|||
|
ch_set_act = 0U;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static void power_divider_request(void)
|
|||
|
{
|
|||
|
header_stx();
|
|||
|
putchar(0x00U);//request
|
|||
|
putchar(0x00U);//reserve1
|
|||
|
putchar(0x00U);//reserve2
|
|||
|
putchar(0x00U);//reserve3
|
|||
|
header_eot();
|
|||
|
ch_req_act = 0U;
|
|||
|
}
|
|||
|
|
|||
|
static void lan_sn(void)
|
|||
|
{
|
|||
|
putchar1(sn_count);
|
|||
|
if(sn_count >= 255U){sn_count = 0;}else{sn_count++;}
|
|||
|
}
|
|||
|
|
|||
|
/********************
|
|||
|
lan coounication
|
|||
|
********************/
|
|||
|
|
|||
|
|
|||
|
static void power_management_status_report1(void)
|
|||
|
{
|
|||
|
putchar1(0x90U);//1001 0000 message type
|
|||
|
putchar1(0x03U);//00000011 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//00001000 TM
|
|||
|
putchar1(0x2AU);//message length1
|
|||
|
putchar1(0x00);//message length2
|
|||
|
putchar1(0x00);//message length3
|
|||
|
putchar1(0x00);//message length4
|
|||
|
|
|||
|
switch(mode)
|
|||
|
{
|
|||
|
case BATT:
|
|||
|
temp_lan = 0x02U;
|
|||
|
break;
|
|||
|
|
|||
|
case AC:
|
|||
|
temp_lan = 0x01U;
|
|||
|
break;
|
|||
|
|
|||
|
case GEN:
|
|||
|
temp_lan = 0x00U;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
temp_lan = 0x01U;
|
|||
|
break;
|
|||
|
}
|
|||
|
putchar1((uint8_t)temp_lan);//source
|
|||
|
|
|||
|
temp_lan = 0;
|
|||
|
if((ch_status_1 & 0x10U) == 0x10U){temp_lan |= 0x80U;} //<2F><><EFBFBD><EFBFBD>Ʈ
|
|||
|
if((ch_status_1 & 0x01U) == 0x01U){temp_lan |= 0x40U;} //NAVI
|
|||
|
if((ch_status_1 & 0x40U) == 0x40U){temp_lan |= 0x20U;} //SW
|
|||
|
if((ch_status_2 & 0x20U) == 0x20U){temp_lan |= 0x10U;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
|||
|
if((ch_status_2 & 0x40U) == 0x40U){temp_lan |= 0x08U;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
|||
|
if((ch_status_1 & 0x04U) == 0x04U){temp_lan |= 0x04U;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
if((ch_status_1 & 0x08U) == 0x08U){temp_lan |= 0x02U;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
if((ch_status_1 & 0x02U) == 0x02U){temp_lan |= 0x01U;} //<2F>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
temp_lan = 0;
|
|||
|
if((ch_status_2 & 0x04U)== 0x04U){temp_lan |= 0x04U;} //cnic
|
|||
|
if((ch_status_1 & 0x20U)== 0x20U){temp_lan |= 0x02U;} //<2F><><EFBFBD>ϱ<EFBFBD>
|
|||
|
if((ch_status_1 & 0x80U)== 0x80U){temp_lan |= 0x01U;} //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
temp_lan = gen_status;
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
if(batt_volt_1 == 0U){temp_lan = 0U;}else{temp_lan = batt_volt_1;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 volt
|
|||
|
}
|
|||
|
|
|||
|
static void power_management_sub_status_report1(void)
|
|||
|
{
|
|||
|
temp_lan = batt_current_1;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 current
|
|||
|
|
|||
|
temp_lan = batt_health_1;
|
|||
|
if((batt1_charge == 1U)&&(batt1_discharge == 0U)){temp_lan |= 0x80U;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 current
|
|||
|
|
|||
|
temp_lan = batt_fuel_1;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 level
|
|||
|
|
|||
|
temp_lan = batt_temperature_1;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 temperature
|
|||
|
|
|||
|
if(batt_volt_2 == 0U){temp_lan = 0U;}else{temp_lan = batt_volt_2;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery2 volt
|
|||
|
|
|||
|
temp_lan = batt_current_2;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery2 current
|
|||
|
|
|||
|
temp_lan = batt_health_2;
|
|||
|
if((batt2_charge == 1U)&&(batt2_discharge == 0U)){temp_lan |= 0x80U;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery2 current
|
|||
|
|
|||
|
temp_lan = batt_fuel_2;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery2 level
|
|||
|
|
|||
|
temp_lan = batt_temperature_2;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery1 temperature
|
|||
|
|
|||
|
temp_lan = 0x00U;
|
|||
|
if(batt1_heater == ON){temp_lan |= 0x08U;}
|
|||
|
if(batt2_heater == ON){temp_lan |= 0x02U;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//battery heater status
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void power_management_status_report2(void)
|
|||
|
{
|
|||
|
//1 mcu
|
|||
|
if((voltage_ch7 < 150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch7 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//mcu_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch7;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//mcu_power current
|
|||
|
|
|||
|
//2
|
|||
|
if((voltage_ch5 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch5 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//opu1_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch5;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//opu1_power current
|
|||
|
//3
|
|||
|
if((voltage_ch6 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch6 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//ocu1_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch6;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);//ocu1_power current
|
|||
|
|
|||
|
//4
|
|||
|
if((voltage_ch10 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch10 - 150U);}
|
|||
|
putchar1(temp_lan);//opu2_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch10;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//opu2_power current
|
|||
|
|
|||
|
//5
|
|||
|
if((voltage_ch11 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch11 - 150U);}
|
|||
|
putchar1(temp_lan);//ocu2_power volt
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
temp_lan = (uint8_t)currunt_ch11;
|
|||
|
putchar1((uint8_t)temp_lan);//ocu2_power current
|
|||
|
|
|||
|
//6
|
|||
|
if((voltage_ch1 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch1 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//b_station_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch1;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t )(temp_lan % 256U));//b_station_power current //<2F><>Ʋ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
putchar1((uint8_t )(temp_lan / 256U));//b_station_power current
|
|||
|
|
|||
|
|
|||
|
//7
|
|||
|
if((voltage_ch4 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch4 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//ant_mast_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch4;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//ant_mast_power current
|
|||
|
|
|||
|
//8 NAVI
|
|||
|
if((voltage_ch8 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch8 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//navi_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch8;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//navi_power current
|
|||
|
|
|||
|
// 9 record
|
|||
|
if((voltage_ch3 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch3 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//ins_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch3;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//ins_power current
|
|||
|
|
|||
|
|
|||
|
//10
|
|||
|
if((voltage_ch2 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch2 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//switch_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch2;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//switch_power current
|
|||
|
|
|||
|
//11
|
|||
|
if((voltage_ch14 <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(voltage_ch14 - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//cnic_power volt
|
|||
|
temp_lan = (uint8_t)currunt_ch14;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//cnic_power current
|
|||
|
|
|||
|
//12 generator
|
|||
|
|
|||
|
|
|||
|
if((gen_volt <150U)||(power_divider_link_err == ERROR)){temp_lan = 0U;}else{temp_lan = (uint8_t)(gen_volt - 150U);}
|
|||
|
putchar1((uint8_t)temp_lan);//gen voltage
|
|||
|
|
|||
|
temp_lan = (uint8_t)gen_current;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//gen_current
|
|||
|
|
|||
|
if(gen_temp > 250U)
|
|||
|
{
|
|||
|
temp_lan = 255U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_lan = (uint8_t)gen_temp + 5U;
|
|||
|
}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//gen_temp
|
|||
|
|
|||
|
temp_lan = (uint8_t)gen_rpm;
|
|||
|
if(power_divider_link_err == ERROR){temp_lan = 0U;}
|
|||
|
putchar1((uint8_t)temp_lan);//gen_rpm
|
|||
|
|
|||
|
power_management_status_report_act = 0U;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static void pbit_cbit(void)
|
|||
|
{
|
|||
|
if((err_ch_ovp_1 != 0x00U)||(err_ch_ovp_2 != 0x00U)||(err_ch_lvp_1 != 0x00U)||(err_ch_lvp_2 != 0x00U)||(err_ch_current_1 != 0x00U)||(err_ch_current_2 != 0x00U)||(ac_err == ERROR))
|
|||
|
{divider_total_err = ERROR;}else{divider_total_err = NOR;}
|
|||
|
|
|||
|
if((gen_link_err == ERROR)||(batt_link_1_err == ERROR)||(batt_link_2_err == ERROR)||(power_divider_link_err == ERROR)||(divider_total_err == ERROR))
|
|||
|
{comm_total_err = ERROR;}else{comm_total_err = NOR;}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if((gen_volt_sensor_err == ERROR)||(gen_high_temp == ERROR)||(gen_low_presure_err == ERROR)||(gen_ovp == ERROR)||
|
|||
|
(gen_ocp == ERROR)||(gen_em_stop == ERROR)||(gen_start_fail == ERROR))
|
|||
|
{gen_main_err = ERROR;}else {gen_main_err = NOR;}
|
|||
|
|
|||
|
if((gen_low_fuel == ERROR)||(gen_current_sensor_err == ERROR)||(gen_temp_sensor_err == ERROR)||(gen_fuel_level_sensor_err == ERROR)||(gen_oil_presure_sensor_err == ERROR))
|
|||
|
{gen_sub_err = ERROR;}else {gen_sub_err = NOR;}
|
|||
|
|
|||
|
|
|||
|
if((batt1_temp_err == ERROR)||(batt1_ovp == ERROR)||(batt1_ocp == ERROR)){batt1_total_err = ERROR;}else{batt1_total_err = NOR;}
|
|||
|
if((batt2_temp_err == ERROR)||(batt2_ovp == ERROR)||(batt2_ocp == ERROR)){batt2_total_err = ERROR;}else{batt2_total_err = NOR;}
|
|||
|
|
|||
|
//cs-control status
|
|||
|
|
|||
|
temp_lan = 0;
|
|||
|
//function
|
|||
|
//batt and dividier err
|
|||
|
if((batt1_total_err == ERROR)||(batt1_total_err == ERROR)||(divider_total_err == ERROR)){temp_lan |= 0x20U;}//NOT WORK
|
|||
|
|
|||
|
//gen err
|
|||
|
if(gen_main_err == ERROR) //||(cs_comm_err == ERR) cs comm err
|
|||
|
{
|
|||
|
temp_lan |= 0x08U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(gen_sub_err == ERROR)
|
|||
|
{
|
|||
|
temp_lan |= 0x04U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if((divider_total_err == ERROR)||(comm_total_err == ERROR)||(ac_fault_err == ERROR)||(ac_err == ERROR)){temp_lan |= 0x02U;}//notice
|
|||
|
if(temp_lan != 0x00U)
|
|||
|
{
|
|||
|
if(((temp_lan & 0x30U) == 0x20U)||((temp_lan & 0x0cU) == 0x08U)||((temp_lan & 0x03U) == 0x02U))
|
|||
|
{
|
|||
|
temp_lan |= 0x80U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_lan |= 0x40U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//device
|
|||
|
//cs-control status
|
|||
|
temp_lan = 0;
|
|||
|
|
|||
|
//gen err
|
|||
|
if((gen_main_err == ERROR)||(gen_sub_err == ERROR)){temp_lan |= 0x04U;}
|
|||
|
|
|||
|
//divider err
|
|||
|
if((divider_total_err == ERROR)||(ac_temp_err == ERROR)){temp_lan |= 0x02U;}//notice
|
|||
|
|
|||
|
//control err
|
|||
|
if((batt1_total_err == ERROR)||(batt2_total_err == ERROR)||(divider_total_err == ERROR)){temp_lan |= 0x01U;} //||cs_comm_err == ERR
|
|||
|
if(temp_lan != 0x00U){temp_lan |= 0x10U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);//4: <20>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD> 3:<3A>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD>2, 2:<3A>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD>1 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0:<3A><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void heart_bit_sent(void)
|
|||
|
{
|
|||
|
putchar1(0x92U);//1001 0010 message type
|
|||
|
putchar1(0x10U);//0001 0000 message id
|
|||
|
putchar1((uint8_t)power_control_id);//sou1 e unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//0010 0100 TM 240925 0x24 ->0x04<30><34> <20><><EFBFBD><EFBFBD> <20><>ȭ <20><>û <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
|
|||
|
putchar1(0x01U);//message length1 <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
putchar1(0x00U);//message length1 HEART BIT RESERVE
|
|||
|
}
|
|||
|
|
|||
|
static void power_management_pbit_response(void)
|
|||
|
{
|
|||
|
putchar1(0x98U);//1001 1000 message type
|
|||
|
putchar1(0x34U);//0011 0100 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//00000100 TM
|
|||
|
putchar1(0x02U);//message length1 <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0> ȭ
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
//putchar1(0x02U);//message length1 <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><> Ȱ<><C8B0> ȭ
|
|||
|
|
|||
|
pbit_cbit();
|
|||
|
response_power_management_pbit_act_p = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void power_management_start_response(void)
|
|||
|
{
|
|||
|
putchar1(0x94U);//1001 1000 message type
|
|||
|
putchar1(0x32U);//0011 0100 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x24U);//00000100 TM
|
|||
|
putchar1(0x02U);//message length1 <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0> ȭ
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
putchar1(0x01U);//device
|
|||
|
putchar1(VERSION);//VERSION
|
|||
|
|
|||
|
response_power_manage_start_act_p = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void power_management_cbit_report(void)
|
|||
|
{
|
|||
|
putchar1(0x99);//10011001 message type
|
|||
|
putchar1(0x04U);//00000200 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//00001000 TM
|
|||
|
putchar1(0x02U);//message length1
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
|
|||
|
|
|||
|
pbit_cbit();
|
|||
|
|
|||
|
power_managementbit_cbit_report_act = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void power_managementbit_detail_response(void)
|
|||
|
{
|
|||
|
putchar1(0x9aU);//10011010 message type
|
|||
|
putchar1(0x34U);//00110100 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//00000100 TM
|
|||
|
putchar1(0x04U);//message length1
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
|
|||
|
temp_lan = 0;// response pbit 1 cbit 0
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
//link
|
|||
|
temp_lan = 0;
|
|||
|
if(gen_link_err == ERROR){temp_lan |= 0x40U;}
|
|||
|
if(batt_link_1_err == ERROR){temp_lan |= 0x20U;}
|
|||
|
if(batt_link_2_err == ERROR){temp_lan |= 0x10U;}
|
|||
|
if(power_divider_link_err == ERROR){temp_lan |= 0x08U;}
|
|||
|
if(divider_total_err == ERROR){temp_lan |= 0x02U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
// <20>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD> 3:<3A>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD>2, 2:<3A>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD>1 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0:<3A><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp_lan = 0;
|
|||
|
|
|||
|
if(gen_volt_sensor_err == ERROR){temp_lan |= 0x80U;}
|
|||
|
if(gen_high_temp == ERROR){temp_lan |= 0x40U;}
|
|||
|
if(gen_low_presure_err == ERROR){temp_lan |= 0x20U;}
|
|||
|
if(gen_ovp == ERROR){temp_lan |= 0x10U;}
|
|||
|
if(gen_ocp == ERROR){temp_lan |= 0x08U;}
|
|||
|
if(gen_em_stop == ERROR){temp_lan |= 0x04U;}
|
|||
|
if(gen_start_fail == ERROR){temp_lan |= 0x02U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
/*
|
|||
|
temp_lan = 0; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 <EFBFBD>ҷ<EFBFBD>
|
|||
|
if(batt1_temp_err == ERR){temp_lan |= 0x04;}
|
|||
|
if(batt1_ocp == ERR){temp_lan |= 0x02;}
|
|||
|
if(batt1_ovp == ERR){temp_lan |= 0x01;}
|
|||
|
putchar1((uint8_t)temp_lan); <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 <EFBFBD>µ<EFBFBD>:2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0
|
|||
|
|
|||
|
temp_lan = 0; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <EFBFBD>ҷ<EFBFBD>
|
|||
|
if(batt2_temp_err == ERR){temp_lan |= 0x04;}
|
|||
|
if(batt2_ocp == ERR){temp_lan |= 0x02;}
|
|||
|
if(batt2_ovp == ERR){temp_lan |= 0x01;}
|
|||
|
putchar1((uint8_t)temp_lan); <EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <EFBFBD>µ<EFBFBD>:2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0
|
|||
|
*/
|
|||
|
|
|||
|
temp_lan = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD>
|
|||
|
if(gen_low_fuel == ERROR){temp_lan |= 0x80U;}
|
|||
|
if(gen_current_sensor_err == ERROR){temp_lan |= 0x40U;}
|
|||
|
if(gen_temp_sensor_err == ERROR){temp_lan |= 0x20U;}
|
|||
|
if(gen_fuel_level_sensor_err == ERROR){temp_lan |= 0x10U;}
|
|||
|
if(gen_oil_presure_sensor_err == ERROR){temp_lan |= 0x08U;}
|
|||
|
|
|||
|
putchar1((uint8_t)temp_lan);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD> 0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
response_power_manage_detail_act_p = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void power_management_control_response(void)
|
|||
|
{
|
|||
|
putchar1(0x9bU);//10011011 message type
|
|||
|
putchar1(0x32U);//00110010 message id
|
|||
|
putchar1((uint8_t)power_control_id);//source unit
|
|||
|
putchar1((uint8_t)mc_id);//00110001 destination unit
|
|||
|
lan_sn();//SN DATA <20><><EFBFBD><EFBFBD> 0 ~ 255 <20><>ȯ
|
|||
|
putchar1(0x04U);//00000100 TM
|
|||
|
putchar1(0x03U);//message length1
|
|||
|
putchar1(0x00U);//message length2
|
|||
|
putchar1(0x00U);//message length3
|
|||
|
putchar1(0x00U);//message length4
|
|||
|
// ch_sel_2 = lan_data_buffer[2]; //<2F><>Ʋ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> 240408
|
|||
|
|
|||
|
temp_lan = ch_sel_2;
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
temp_lan = ch_sel_1;
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
|
|||
|
temp_lan = 0;
|
|||
|
if((em_off_time & 0x80U)== 0x80U)
|
|||
|
{
|
|||
|
temp_lan = em_off_time & 0x7fU;
|
|||
|
}
|
|||
|
putchar1((uint8_t)temp_lan);
|
|||
|
response_power_manage_control_act_p = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void pulse1(void)
|
|||
|
{
|
|||
|
delay_us(2);
|
|||
|
LED_CLK1 = 1;
|
|||
|
delay_us(2);
|
|||
|
LED_CLK1 = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void pulse2(void)
|
|||
|
{
|
|||
|
delay_us(2);
|
|||
|
LED_CLK2 = 1;
|
|||
|
delay_us(2);
|
|||
|
LED_CLK2 = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void pulse3(void)
|
|||
|
{
|
|||
|
delay_us(2);
|
|||
|
LED_CLK3 = 1;
|
|||
|
delay_us(2);
|
|||
|
LED_CLK3 = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void fnd_display1(void)
|
|||
|
{
|
|||
|
//FND 1 CONTROL
|
|||
|
LED_LOAD1 = 0;
|
|||
|
delay_us(2);
|
|||
|
LED_DIN1 = 1;
|
|||
|
for(count_temp = 0U; count_temp <4U; count_temp++)
|
|||
|
{
|
|||
|
pulse1();
|
|||
|
}
|
|||
|
//command digit 3
|
|||
|
if((command & 0x08U) == 0x08U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//command digit 2
|
|||
|
if((command & 0x04U) == 0x04U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//command digit 1
|
|||
|
if((command & 0x02U) == 0x02U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//command digit 0
|
|||
|
if((command & 0x01U) == 0x01U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 7
|
|||
|
if((fnd_data & 0x80U) == 0x80U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 6
|
|||
|
if((fnd_data & 0x40U) == 0x40U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 5
|
|||
|
if((fnd_data & 0x20U) == 0x20U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 4
|
|||
|
if((fnd_data & 0x10U) == 0x10U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 3
|
|||
|
if((fnd_data & 0x08U) == 0x08U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 2
|
|||
|
if((fnd_data & 0x04U) == 0x04U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 1
|
|||
|
if((fnd_data & 0x02U) == 0x02U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
//data digit 0
|
|||
|
if((fnd_data & 0x01U) == 0x01U){LED_DIN1 = 1;} else{LED_DIN1 = 0;}
|
|||
|
pulse1();
|
|||
|
LED_DIN1 = 1;
|
|||
|
delay_us(1);
|
|||
|
LED_LOAD1 = 1;
|
|||
|
delay_us(1);
|
|||
|
}
|
|||
|
|
|||
|
static void fnd_display2(void)
|
|||
|
{
|
|||
|
//FND 2 CONTROL
|
|||
|
LED_LOAD2 = 0;
|
|||
|
delay_us(1);
|
|||
|
LED_DIN2 = 1;
|
|||
|
for(count_temp = 0U; count_temp <4U; count_temp++)
|
|||
|
{
|
|||
|
pulse2();
|
|||
|
}
|
|||
|
//command digit 3
|
|||
|
if((command & 0x08U) == 0x08U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//command digit 2
|
|||
|
if((command & 0x04U) == 0x04U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//command digit 1
|
|||
|
if((command & 0x02U) == 0x02U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//command digit 0
|
|||
|
if((command & 0x01U) == 0x01U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 7
|
|||
|
if((fnd_data & 0x80U) == 0x80U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 6
|
|||
|
if((fnd_data & 0x40U) == 0x40U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 5
|
|||
|
if((fnd_data & 0x20U) == 0x20U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 4
|
|||
|
if((fnd_data & 0x10U) == 0x10U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 3
|
|||
|
if((fnd_data & 0x08U) == 0x08U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 2
|
|||
|
if((fnd_data & 0x04U) == 0x04U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 1
|
|||
|
if((fnd_data & 0x02U) == 0x02U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
//data digit 0
|
|||
|
if((fnd_data & 0x01U) == 0x01U){LED_DIN2 = 1;} else{LED_DIN2 = 0;}
|
|||
|
pulse2();
|
|||
|
LED_DIN2 = 1;
|
|||
|
delay_us(1);
|
|||
|
LED_LOAD2 = 1;
|
|||
|
delay_us(1);
|
|||
|
}
|
|||
|
|
|||
|
static void fnd_display3(void)
|
|||
|
{
|
|||
|
//FND 3 CONTROL
|
|||
|
LED_LOAD3 = 0;
|
|||
|
delay_us(1);
|
|||
|
LED_DIN3 = 1 ;
|
|||
|
for(count_temp = 0U; count_temp <4U; count_temp++)
|
|||
|
{
|
|||
|
pulse1();
|
|||
|
}
|
|||
|
//command digit 3
|
|||
|
if((command & 0x08U) == 0x08U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//command digit 2
|
|||
|
if((command & 0x04U) == 0x04U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//command digit 1
|
|||
|
if((command & 0x02U) == 0x02U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//command digit 0
|
|||
|
if((command & 0x01U) == 0x01U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 7
|
|||
|
if((fnd_data & 0x80U) == 0x80U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 6
|
|||
|
if((fnd_data & 0x40U) == 0x40U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 5
|
|||
|
if((fnd_data & 0x20U) == 0x20U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 4
|
|||
|
if((fnd_data & 0x10U) == 0x10U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 3
|
|||
|
if((fnd_data & 0x08U) == 0x08U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 2
|
|||
|
if((fnd_data & 0x04U) == 0x04U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 1
|
|||
|
if((fnd_data & 0x02U) == 0x02U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
//data digit 0
|
|||
|
if((fnd_data & 0x01U) == 0x01U){LED_DIN3 = 1;} else{LED_DIN3 = 0;}
|
|||
|
pulse3();
|
|||
|
LED_DIN3 = 1;
|
|||
|
delay_us(1);
|
|||
|
LED_LOAD3 = 1;
|
|||
|
delay_us(1);
|
|||
|
}
|
|||
|
|
|||
|
static void num_convert(uint8_t num)
|
|||
|
{
|
|||
|
switch(num)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
fnd_data = 0x7eU;
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
fnd_data = 0x30U;
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
fnd_data = 0x6dU;
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
fnd_data = 0x79U;
|
|||
|
break;
|
|||
|
|
|||
|
case 4:
|
|||
|
fnd_data = 0x33U;
|
|||
|
break;
|
|||
|
|
|||
|
case 5:
|
|||
|
fnd_data = 0x5bU;
|
|||
|
break;
|
|||
|
|
|||
|
case 6:
|
|||
|
fnd_data = 0x5fU;
|
|||
|
break;
|
|||
|
|
|||
|
case 7:
|
|||
|
fnd_data = 0x70U;
|
|||
|
break;
|
|||
|
|
|||
|
case 8:
|
|||
|
fnd_data = 0x7fU;
|
|||
|
break;
|
|||
|
|
|||
|
case 9:
|
|||
|
fnd_data = 0x7bU;
|
|||
|
break;
|
|||
|
|
|||
|
case 15:
|
|||
|
fnd_data = 0xffU;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
fnd_data = 0x00U;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void fnd_init(void)
|
|||
|
{
|
|||
|
LED_LOAD1 = HIGH;
|
|||
|
LED_LOAD2 = HIGH;
|
|||
|
LED_LOAD3 = HIGH;
|
|||
|
|
|||
|
// scan limit
|
|||
|
command = 0x0bU;
|
|||
|
fnd_data = 0x05U;
|
|||
|
fnd_display1();
|
|||
|
fnd_data = 0x03U;
|
|||
|
fnd_display2();
|
|||
|
fnd_data = 0x05U;
|
|||
|
fnd_display3();
|
|||
|
|
|||
|
// intensity
|
|||
|
command = 0x0aU;
|
|||
|
fnd_data = 0x07U;
|
|||
|
fnd_display1();
|
|||
|
fnd_display2();
|
|||
|
fnd_display3();
|
|||
|
|
|||
|
// decode mode
|
|||
|
command = 0x09U;
|
|||
|
fnd_data = 0x00U;
|
|||
|
fnd_display1();
|
|||
|
fnd_display2();
|
|||
|
fnd_display3();
|
|||
|
|
|||
|
// shut down
|
|||
|
command = 0x0cU;
|
|||
|
fnd_data = 0x01U;
|
|||
|
fnd_display1();
|
|||
|
fnd_display2();
|
|||
|
fnd_display3();
|
|||
|
|
|||
|
// fnd test normar
|
|||
|
command = 0x0fU;
|
|||
|
fnd_data = 0x00U;
|
|||
|
fnd_display1();
|
|||
|
fnd_display2();
|
|||
|
fnd_display3();
|
|||
|
|
|||
|
LED_LOAD1 = LOW;
|
|||
|
LED_LOAD2 = LOW;
|
|||
|
LED_LOAD3 = LOW;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void charge_work_display(void)
|
|||
|
{
|
|||
|
switch(charge_display_count)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
fnd_data = 0x48; //a 0x40
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
fnd_data = 0x24; //b 0x20
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
fnd_data = 0x12; //c 0x10
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void digit_low_sub(uint8_t digit_num, uint8_t temp1)
|
|||
|
{
|
|||
|
switch(digit_num)
|
|||
|
{
|
|||
|
case 6://current 1
|
|||
|
command = 0x01U;
|
|||
|
num_convert(temp1);
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
case 7: //fuel 100
|
|||
|
command = 0x03;
|
|||
|
if(gen_link_err == ERROR)
|
|||
|
{
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num_convert(temp1);
|
|||
|
}
|
|||
|
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(gen_err == ERROR)
|
|||
|
{
|
|||
|
fnd_data = 0x4FU;//"E"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((gen_low_fuel == 1U)&&(sec_500ms == 1U)){fnd_data = 0x00U;} //1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> blank
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display2();
|
|||
|
break;
|
|||
|
|
|||
|
case 8: //fuel 10
|
|||
|
command = 0x02;
|
|||
|
if(gen_link_err == ERROR)
|
|||
|
{
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num_convert(temp1);
|
|||
|
}
|
|||
|
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(gen_err == ERROR)
|
|||
|
{
|
|||
|
fnd_data = 0x05U;//"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((gen_low_fuel == 1U)&&(sec_500ms == 1U)){fnd_data = 0x00U;} //1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> blank
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display2();
|
|||
|
break;
|
|||
|
|
|||
|
case 9: //fuel 1
|
|||
|
command = 0x01U;
|
|||
|
if(gen_link_err == ERROR)
|
|||
|
{
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num_convert(temp1);
|
|||
|
}
|
|||
|
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(gen_err == ERROR)
|
|||
|
{
|
|||
|
fnd_data = 0x05U;//"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((gen_low_fuel == 1U)&&(sec_500ms == 1U)){fnd_data = 0x00U;} //1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> blank
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display2();
|
|||
|
break;
|
|||
|
|
|||
|
case 10: //sco1 100
|
|||
|
command = 0x06U;
|
|||
|
if((batt_link_1_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(batt1_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x4F;//"E"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt1_heater == ON){fnd_data = 0x00U;}//" "
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt1_charge == 1U)&&(batt1_discharge == 0U)&&(fnd_soc1 < 100U)&&(mode != BATT))
|
|||
|
{
|
|||
|
charge_work_display();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt1_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00U;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
command = 0x00U;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void digit_low(uint8_t digit_num, uint8_t temp1)
|
|||
|
{
|
|||
|
switch(digit_num)
|
|||
|
{
|
|||
|
case 1: //voltage 100
|
|||
|
command = 0x06U;
|
|||
|
num_convert(temp1);
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
case 2: //voltage 10
|
|||
|
command = 0x05U;
|
|||
|
num_convert(temp1);
|
|||
|
if(p_bit == 0U){fnd_data |= 0x80U;} ///<2F><><EFBFBD><EFBFBD>
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
case 3: //voltage 1
|
|||
|
command = 0x04U;
|
|||
|
num_convert(temp1);
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
case 4: //current 100
|
|||
|
command = 0x03U;
|
|||
|
num_convert(temp1);
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
case 5: //current 10
|
|||
|
command = 0x02U;
|
|||
|
num_convert(temp1);
|
|||
|
if(p_bit == 0U){fnd_data |= 0x80U;} ///<2F><><EFBFBD><EFBFBD>
|
|||
|
fnd_display1();
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
command = 0x00U;
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void digit_high_sub(uint8_t digit_num, uint8_t temp1)
|
|||
|
{
|
|||
|
switch(digit_num)
|
|||
|
{
|
|||
|
case 13: //sco2 100
|
|||
|
command = 0x03;
|
|||
|
if((batt_link_2_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(batt2_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x4FU;//"E"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt2_heater == ON){fnd_data = 0x00U;}//" "
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt2_charge == 1U)&&(batt2_discharge == 0U)&&(fnd_soc2 < 100U)&&(mode != BATT))
|
|||
|
{
|
|||
|
charge_work_display();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt2_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00U;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
case 14: //sco2 10
|
|||
|
command = 0x02U;
|
|||
|
if((batt_link_2_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
|
|||
|
if(batt2_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x05U;//"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt2_heater == ON){fnd_data = 0x37U;}//"H"
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt2_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00U;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
case 15: //sco2 1
|
|||
|
command = 0x01U;
|
|||
|
if((batt_link_2_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
|
|||
|
if(batt2_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x05U; //"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt2_heater == ON){fnd_data = 0x0fU;}//"t"
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt2_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00U;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
command = 0x00U;
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void digit_high(uint8_t digit_num, uint8_t temp1)
|
|||
|
{
|
|||
|
switch(digit_num)
|
|||
|
{
|
|||
|
case 11: //sco1 10
|
|||
|
command = 0x05;
|
|||
|
|
|||
|
if((batt_link_1_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(batt1_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x05U; //"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt1_heater == ON){fnd_data = 0x37U;}//"H"
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt1_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00U;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
case 12: //sco1
|
|||
|
command = 0x04U;
|
|||
|
if((batt_link_1_err == ERROR)||(power_divider_link_err == ERROR))
|
|||
|
{
|
|||
|
|
|||
|
num_convert(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(p_bit == 0U)
|
|||
|
{
|
|||
|
if(batt1_status == FAIL)
|
|||
|
{
|
|||
|
fnd_data = 0x05U;//"r"
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(batt1_heater == ON){fnd_data = 0x0fU;}//"t"
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt1_soc_low == ERROR)&&(sec_500ms == 1U)){fnd_data = 0x00;}else{num_convert(temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
fnd_display3();
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
command = 0x00U;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void digit(uint8_t digit_num, uint8_t temp1)//,char num)
|
|||
|
{
|
|||
|
if(digit_num < 11U)
|
|||
|
{
|
|||
|
if(digit_num < 6U){digit_low(digit_num, temp1);}else{digit_low_sub(digit_num, temp1);}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(digit_num < 13U){digit_high(digit_num, temp1);}else{digit_high_sub(digit_num, temp1);}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void display_culculate( void)
|
|||
|
{
|
|||
|
//volt
|
|||
|
if(fnd_voltage < 1000U)
|
|||
|
{
|
|||
|
digit(1,(uint8_t)(fnd_voltage/100U));
|
|||
|
digit(2,(uint8_t)((uint8_t)(fnd_voltage % 100U) / 10U));
|
|||
|
digit(3,(uint8_t)(fnd_voltage % 10U));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
digit(1,10U);
|
|||
|
digit(2,10U);
|
|||
|
digit(3,10U);
|
|||
|
}
|
|||
|
|
|||
|
//current
|
|||
|
if(fnd_current < 1000U)
|
|||
|
{
|
|||
|
digit(4,(uint8_t)(fnd_current / 100U));
|
|||
|
digit(5,(uint8_t)((uint8_t)(fnd_current % 100U) / 10U));
|
|||
|
digit(6,(uint8_t)(fnd_current % 10U));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
digit(4,10U);
|
|||
|
digit(5,10U);
|
|||
|
digit(6,10U);
|
|||
|
}
|
|||
|
;
|
|||
|
//fuel
|
|||
|
if(fnd_fuel <= 100U)
|
|||
|
{
|
|||
|
digit(7,(uint8_t)(fnd_fuel / 100U));
|
|||
|
digit(8,(uint8_t)((uint8_t)(fnd_fuel % 100U)/ 10U));
|
|||
|
digit(9,(uint8_t)(fnd_fuel % 10U));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
digit(7,10U);
|
|||
|
digit(8,10U);
|
|||
|
digit(9,10U);
|
|||
|
}
|
|||
|
|
|||
|
//soc1
|
|||
|
|
|||
|
if(fnd_soc1 <= 100U)
|
|||
|
{
|
|||
|
digit(10,(uint8_t) (fnd_soc1 / 100U));
|
|||
|
digit(11,(uint8_t)((uint8_t) (fnd_soc1 % 100U)/10U));
|
|||
|
digit(12,(uint8_t) (fnd_soc1 % 10U));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
digit(10,10U);
|
|||
|
digit(11,10U);
|
|||
|
digit(12,10U);
|
|||
|
}
|
|||
|
|
|||
|
//soc2
|
|||
|
if(fnd_soc2 <= 100U)
|
|||
|
{
|
|||
|
digit(13,(uint8_t) (fnd_soc2/100U));
|
|||
|
digit(14,(uint8_t)((uint8_t) (fnd_soc2%100U)/10U));
|
|||
|
digit(15,(uint8_t) (fnd_soc2%10U));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
digit(13,10U);
|
|||
|
digit(14,10U);
|
|||
|
digit(15,10U);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void display(void)
|
|||
|
{
|
|||
|
// LED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(power_divider_link_err == ERROR)
|
|||
|
{
|
|||
|
fnd_voltage = 0U;
|
|||
|
fnd_current = 0U;
|
|||
|
display_culculate();
|
|||
|
fnd_soc1 = 0U;
|
|||
|
fnd_soc2 = 0U;
|
|||
|
fnd_fuel = 0U;
|
|||
|
LED_AC = OFF;
|
|||
|
LED_GEN = OFF;
|
|||
|
LED_BATT = OFF;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
switch(mode)
|
|||
|
{
|
|||
|
case AC:
|
|||
|
if(ac_err == ERROR)
|
|||
|
{
|
|||
|
if(sec_100ms == 1U){LED_AC = ON;}else{LED_AC = OFF;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_AC = ON;
|
|||
|
}
|
|||
|
LED_GEN = OFF;
|
|||
|
LED_BATT = OFF;
|
|||
|
fnd_fuel = gen_fuel;
|
|||
|
mode_sw_err = 0U;
|
|||
|
break;
|
|||
|
|
|||
|
case GEN:
|
|||
|
LED_AC = OFF;
|
|||
|
|
|||
|
if(gen_link_err == ERROR)
|
|||
|
{
|
|||
|
if(sec_500ms == 1U){LED_GEN = ON;}else{LED_GEN = OFF;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(gen_err == ERROR)
|
|||
|
{
|
|||
|
if(sec_100ms == 1U){LED_GEN = ON;}else{LED_GEN = OFF;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_GEN = ON;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
LED_BATT = OFF;
|
|||
|
fnd_fuel = gen_fuel;
|
|||
|
mode_sw_err = 0U;
|
|||
|
break;
|
|||
|
|
|||
|
case BATT:
|
|||
|
LED_AC = OFF;
|
|||
|
LED_GEN = OFF;
|
|||
|
|
|||
|
if((batt_link_1_err == ERROR)||(batt_link_2_err == ERROR))
|
|||
|
{
|
|||
|
if(sec_500ms == 1U){LED_BATT = ON;}else{LED_BATT = OFF;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if((batt_err == ERROR)||(batt1_status == FAIL)||(batt2_status == FAIL))
|
|||
|
{
|
|||
|
if(sec_100ms == 1U){LED_BATT = ON;}else{LED_BATT = OFF;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_BATT = ON;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
fnd_fuel = gen_fuel;
|
|||
|
mode_sw_err = 0U;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
LED_AC = OFF;
|
|||
|
LED_GEN = OFF;
|
|||
|
LED_BATT = OFF;
|
|||
|
fnd_fuel = gen_fuel;
|
|||
|
mode_sw_err = 1U;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
fnd_voltage = voltage_source;
|
|||
|
current_sum = currunt_ch1 + currunt_ch2 + currunt_ch3 + currunt_ch4 + currunt_ch5 + currunt_ch6 + currunt_ch7 + currunt_ch8 +
|
|||
|
currunt_ch9 + currunt_ch10 + currunt_ch11 + currunt_ch12 + currunt_ch13 + currunt_ch14;
|
|||
|
fnd_current = current_sum;
|
|||
|
display_culculate();
|
|||
|
|
|||
|
//soc battery charge level
|
|||
|
fnd_soc1 = batt_fuel_1;
|
|||
|
fnd_soc2 = batt_fuel_2;
|
|||
|
if(init_delay_count == 0U)
|
|||
|
{
|
|||
|
if(fnd_soc1 < 15U){batt1_soc_low = ERROR;}
|
|||
|
if(fnd_soc2 < 15U){batt2_soc_low = ERROR;}
|
|||
|
if(fnd_soc1 >= 20U){batt1_soc_low = NOR;}
|
|||
|
if(fnd_soc2 >= 20U){batt2_soc_low = NOR;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
batt1_soc_low = NOR;
|
|||
|
batt2_soc_low = NOR;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void buzzer_check(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> <20>溸<EFBFBD><E6BAB8> <20>˶<EFBFBD> <20>溸
|
|||
|
if((power_divider_link_err == ERROR)||(gen_link_err == ERROR)||(batt_link_1_err == ERROR)||(batt_link_2_err == ERROR)||((err_info_1 & 0XFCU)!= 0U)||
|
|||
|
((err_info_2 & 0XFCU)!= 0U)||(err_ch_ovp_1 != 0U)||(err_ch_ovp_2 != 0U)||(err_ch_lvp_1 != 0U)||(err_ch_lvp_2 != 0U)||(err_ch_current_1 != 0U)||
|
|||
|
(err_ch_current_2 != 0U)||(gen_err == ERROR)||(gen_sensor_err == ERROR)||(batt1_soc_low == ERROR)||(batt2_soc_low == ERROR)){alram_count_flag = 1;}else{alram_count_flag = 0;}
|
|||
|
|
|||
|
if(alram_count >= ALRAM_COUNT_MAX){alram = 1U;}else{alram = 0U;}
|
|||
|
|
|||
|
if(alram == 1U)
|
|||
|
{
|
|||
|
if(buzzer_act == 0U)
|
|||
|
{
|
|||
|
buzzer_act = 1U;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buzzer_stop_act = 0U;
|
|||
|
buzzer_act = 0U;
|
|||
|
}
|
|||
|
|
|||
|
if(buzzer_act == 1U)
|
|||
|
{
|
|||
|
if(BUZZER_STOP_SW == 0U)
|
|||
|
{
|
|||
|
if((buzzer_act == 1U)&&(buzzer_stop_act == 0U))
|
|||
|
{
|
|||
|
buzzer_stop_act = 1U;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if((buzzer_act == 1U)&&(buzzer_stop_act == 0U))
|
|||
|
{
|
|||
|
buzzer_work = 1U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buzzer_work = 0U;
|
|||
|
}
|
|||
|
|
|||
|
if(buzzer_work == 1U)
|
|||
|
{
|
|||
|
BUZZER = ON;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
BUZZER = OFF;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(BUZZER_STOP_SW == 0U)
|
|||
|
{
|
|||
|
buzzer_press = 1U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buzzer_press = 0U;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void buzzer_pulse_one(void)
|
|||
|
{
|
|||
|
BUZZER = ON;
|
|||
|
delay_ms(10);
|
|||
|
BUZZER = OFF;
|
|||
|
}
|
|||
|
|
|||
|
static void display_p_bit(void)
|
|||
|
{
|
|||
|
p_bit = 1U;
|
|||
|
for(loop = 0U; loop < 2U; loop++)
|
|||
|
{
|
|||
|
LED_AC = ON;
|
|||
|
LED_GEN = ON;
|
|||
|
LED_BATT = ON;
|
|||
|
|
|||
|
for(fnd_digit_loop = 1U;fnd_digit_loop <16U;fnd_digit_loop++)
|
|||
|
{
|
|||
|
digit(fnd_digit_loop,0x0fU); //ȭ<><C8AD> <20><>ü full +
|
|||
|
}
|
|||
|
delay_ms(500);
|
|||
|
|
|||
|
LED_AC = OFF;
|
|||
|
LED_GEN = OFF;
|
|||
|
LED_BATT = OFF;
|
|||
|
for(fnd_digit_loop = 1U;fnd_digit_loop <16U;fnd_digit_loop++)
|
|||
|
{
|
|||
|
digit(fnd_digit_loop,0x0aU); //ȭ<><C8AD> <20><>ü full
|
|||
|
}
|
|||
|
delay_ms(500);
|
|||
|
}
|
|||
|
fnd_voltage = 0U;
|
|||
|
fnd_current = 0U;
|
|||
|
fnd_fuel = 0U;
|
|||
|
fnd_soc1 = 0U;
|
|||
|
fnd_soc2 = 0U;
|
|||
|
display();
|
|||
|
if(p_bit == 1U){p_bit = 0U;}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static void i2c_pulse(void)
|
|||
|
{
|
|||
|
SW_LAN_SCL = 0U;
|
|||
|
delay_us(30);
|
|||
|
SW_LAN_SCL = 1U;
|
|||
|
delay_us(30);//30
|
|||
|
SW_LAN_SCL = 0U;
|
|||
|
delay_us(30);
|
|||
|
}
|
|||
|
|
|||
|
static void i2c_start_sw(void)
|
|||
|
{
|
|||
|
DDRE.7 = 1U;
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
SW_LAN_SCL = 1U;
|
|||
|
delay_us(40);
|
|||
|
DDRE.7 = 1U;
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
delay_us(40);
|
|||
|
DDRE.7 = 1U;
|
|||
|
SW_LAN_SCL = 0U;
|
|||
|
delay_us(40);
|
|||
|
}
|
|||
|
|
|||
|
static void i2c_stop_sw(void)
|
|||
|
{
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
SW_LAN_SCL = 0U;
|
|||
|
delay_us(40);
|
|||
|
SW_LAN_SCL = 1U;
|
|||
|
delay_us(40);
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
delay_us(40);
|
|||
|
}
|
|||
|
|
|||
|
static void sw_head(void)
|
|||
|
{
|
|||
|
//TOUCH ADDRESS
|
|||
|
//BC, B8, B4
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//CHIP ID 0x
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//WRITE 0
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0U;
|
|||
|
delay_us(50);
|
|||
|
i2c_pulse();
|
|||
|
DDRE.7 = 1U;
|
|||
|
delay_us(50);
|
|||
|
}
|
|||
|
|
|||
|
static void sw_head_r(void)
|
|||
|
{
|
|||
|
|
|||
|
//BC, B8, B4
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//CHIP ID 0xb4
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//read 1
|
|||
|
SW_LAN_SDI = 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0U;
|
|||
|
delay_us(50);
|
|||
|
i2c_pulse();
|
|||
|
DDRE.7 = 1U;
|
|||
|
delay_us(50);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void sw_lan_cont_r(uint16_t temp_sw_add)
|
|||
|
{
|
|||
|
i2c_start_sw();
|
|||
|
delay_us(10);
|
|||
|
sw_head();
|
|||
|
|
|||
|
// //command digit 3
|
|||
|
if((temp_sw_add & 0x8000U) == 0x8000U){ SW_LAN_SDI = 1U;} else { SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x4000U) == 0x4000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x2000U) == 0x2000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x1000U) == 0x1000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 3
|
|||
|
if((temp_sw_add & 0x0800U) == 0x0800U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0400U) == 0x0400U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0200U) == 0x0200U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0100U) == 0x0100U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0;
|
|||
|
//ACK
|
|||
|
delay_us(10);
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
DDRE.7 = 1;
|
|||
|
delay_us(10);
|
|||
|
|
|||
|
|
|||
|
// //command digit 3
|
|||
|
if((temp_sw_add & 0x0080U) == 0x0080U){ SW_LAN_SDI = 1U;} else { SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0040U) == 0x0040U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0020U) == 0x0020U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0010U) == 0x0010U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 3
|
|||
|
if((temp_sw_add & 0x0008U) == 0x0008U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0004U) == 0x0004U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0002U) == 0x0002U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0001U) == 0x0001U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0U;
|
|||
|
//ACK
|
|||
|
delay_us(10);
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
DDRE.7 = 1U;
|
|||
|
delay_us(10);
|
|||
|
//data read
|
|||
|
i2c_stop_sw();
|
|||
|
delay_us(10);
|
|||
|
|
|||
|
delay_us(100);
|
|||
|
i2c_start_sw();
|
|||
|
sw_head_r();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
|
|||
|
SW_LAN_SDI = 0U;
|
|||
|
|
|||
|
DDRE.7 = 0U;
|
|||
|
delay_us(100);
|
|||
|
temp_sw = 0x00U;
|
|||
|
//data digit 7
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 6
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1U;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 5
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
//data digit 4
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 3
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 2
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 1
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
temp_sw = temp_sw << 1;
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
|
|||
|
//data digit 0
|
|||
|
if((SW_LAN_SDI_IN) == 1U)
|
|||
|
{
|
|||
|
temp_sw = temp_sw + 0x01U;
|
|||
|
}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 1;
|
|||
|
delay_us(10);
|
|||
|
SW_LAN_SDI = 0;
|
|||
|
delay_us(10);
|
|||
|
i2c_stop_sw();
|
|||
|
delay_us(10);
|
|||
|
sw_result = temp_sw;
|
|||
|
|
|||
|
putchar(sw_result);
|
|||
|
}
|
|||
|
|
|||
|
//sw control
|
|||
|
static void sw_lan_cont(uint16_t temp_sw_add, uint8_t temp_sw_data)
|
|||
|
{
|
|||
|
i2c_start_sw();
|
|||
|
delay_us(1);
|
|||
|
sw_head();
|
|||
|
// //command digit 3
|
|||
|
if((temp_sw_add & 0x8000U) == 0x8000U){ SW_LAN_SDI = 1U;} else { SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x4000U) == 0x4000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x2000U) == 0x2000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x1000U) == 0x1000U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 3
|
|||
|
if((temp_sw_add & 0x0800U) == 0x0800U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0400U) == 0x0400U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0200U) == 0x0200U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0100U) == 0x0100U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
SW_LAN_SDI = 0;
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0;
|
|||
|
//ACK
|
|||
|
delay_us(50);
|
|||
|
i2c_pulse();
|
|||
|
DDRE.7 = 1;
|
|||
|
delay_us(50);
|
|||
|
|
|||
|
// //command digit 3
|
|||
|
if((temp_sw_add & 0x0080U) == 0x0080U){ SW_LAN_SDI = 1U;} else { SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0040U) == 0x0040U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0020U) == 0x0020U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0010U) == 0x0010U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 3
|
|||
|
if((temp_sw_add & 0x0008U) == 0x0008U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 2
|
|||
|
if((temp_sw_add & 0x0004U) == 0x0004U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 1
|
|||
|
if((temp_sw_add & 0x0002U) == 0x0002U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//command digit 0
|
|||
|
if((temp_sw_add & 0x0001U) == 0x0001U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
SW_LAN_SDI = 0;
|
|||
|
|
|||
|
delay_us(10);
|
|||
|
DDRE.7 = 0;
|
|||
|
//ACK
|
|||
|
delay_us(50);
|
|||
|
i2c_pulse();
|
|||
|
DDRE.7 = 1;
|
|||
|
delay_us(50);
|
|||
|
|
|||
|
//data digit 7
|
|||
|
if((temp_sw_data & 0x80U) == 0x80U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 6
|
|||
|
if((temp_sw_data & 0x40U) == 0x40U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 5
|
|||
|
if((temp_sw_data & 0x20U) == 0x20U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 4
|
|||
|
if((temp_sw_data & 0x10U) == 0x10U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 3
|
|||
|
if((temp_sw_data & 0x08U) == 0x08U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 2
|
|||
|
if((temp_sw_data & 0x04U) == 0x04U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
//data digit 1
|
|||
|
if((temp_sw_data & 0x02U) == 0x02U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
|
|||
|
//data digit 0
|
|||
|
if((temp_sw_data & 0x01U) == 0x01U){ SW_LAN_SDI = 1U;} else{ SW_LAN_SDI = 0U;}
|
|||
|
i2c_pulse();
|
|||
|
|
|||
|
SW_LAN_SDI = 0;
|
|||
|
delay_us(50);
|
|||
|
DDRE.7 = 0;
|
|||
|
//ACK
|
|||
|
delay_us(50);
|
|||
|
i2c_pulse();
|
|||
|
delay_us(50);
|
|||
|
DDRE.7 = 1;
|
|||
|
|
|||
|
delay_us(50);
|
|||
|
i2c_stop_sw();
|
|||
|
delay_us(10);
|
|||
|
|
|||
|
putchar((uint8_t)(temp_sw_add / 256U));
|
|||
|
putchar((uint8_t)(temp_sw_add % 256U));
|
|||
|
putchar((uint8_t)temp_sw_data);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static void sw_list(void)
|
|||
|
{
|
|||
|
static uint16_t tt_count = 0;
|
|||
|
|
|||
|
for( tt_count = i2c_add ;tt_count < (i2c_add + 100U);tt_count++)
|
|||
|
{
|
|||
|
sw_lan_cont_r(tt_count);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void lan_reset_work(void)
|
|||
|
{
|
|||
|
DDRE=(1<<DDE5); //LED 1_0<5F><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
SW_LAN_SPEED_D_0_SET = 0;
|
|||
|
RESET_N = HIGH;
|
|||
|
delay_ms(200);
|
|||
|
RESET_N = LOW;
|
|||
|
delay_ms(200);
|
|||
|
RESET_N = HIGH;
|
|||
|
DDRE=(0<<DDE5); //LED 1_0<5F><30> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
}
|
|||
|
|
|||
|
static void main_time_sub(void)
|
|||
|
{
|
|||
|
// make 1sec
|
|||
|
if(sec_count >= 1U)
|
|||
|
{
|
|||
|
if(sec_100ms == 0U){sec_100ms = 1U;}else{sec_100ms = 0U;}
|
|||
|
sec_count = 0;
|
|||
|
count_b++;
|
|||
|
|
|||
|
|
|||
|
ch_req_act = 1U;
|
|||
|
|
|||
|
fnd_init();
|
|||
|
|
|||
|
display();
|
|||
|
if(sw_up_link_count >= 20U){ sw_up_link_count = 20U;}else{sw_up_link_count++;}
|
|||
|
|
|||
|
if(alram_count_flag == ERROR)
|
|||
|
{
|
|||
|
if(alram_count >= ALRAM_COUNT_MAX){alram_count = ALRAM_COUNT_MAX;}else{alram_count++;}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
alram_count = 0;
|
|||
|
}
|
|||
|
if(init_delay_count > 0U){init_delay_count--;}
|
|||
|
|
|||
|
if(lan_reset_count < 100U)
|
|||
|
{
|
|||
|
lan_reset_count++;
|
|||
|
}
|
|||
|
|
|||
|
if(lan_reset_count >= 100U)
|
|||
|
{
|
|||
|
lan_reset_count = 0;
|
|||
|
lan_reset_work();
|
|||
|
}
|
|||
|
|
|||
|
if(count_sent_time == 0U){if(power_management_status_report_act == 0U){power_management_status_report_act = 1U;}}
|
|||
|
if(count_sent_time == 1U)
|
|||
|
{
|
|||
|
if(power_manage_start_response_act == 1U)
|
|||
|
{
|
|||
|
power_manage_start_response_act = 0;
|
|||
|
if(response_power_manage_start_act_p == 0U){response_power_manage_start_act_p = 1U;}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(count_sent_time == 2U)
|
|||
|
{
|
|||
|
if(power_management_pbit_response_act == 1U)
|
|||
|
{
|
|||
|
power_management_pbit_response_act = 0U;
|
|||
|
if(response_power_management_pbit_act_p == 0U){response_power_management_pbit_act_p = 1;}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(count_sent_time == 3U)
|
|||
|
{
|
|||
|
if(power_manage_detail_response_act == 1U)
|
|||
|
{
|
|||
|
power_manage_detail_response_act = 0;
|
|||
|
if(response_power_manage_detail_act_p == 0U){response_power_manage_detail_act_p = 1U;}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(count_sent_time == 4U){if(power_management_status_report_act == 0U){power_managementbit_cbit_report_act = 1U;}}
|
|||
|
|
|||
|
if(count_sent_time == 6U){if(heart_bit_sent_act == 0U){heart_bit_sent_act = 1U;}}
|
|||
|
if(count_sent_time == 8U)
|
|||
|
{
|
|||
|
if(power_manage_control_response_act == 1U)
|
|||
|
{
|
|||
|
power_manage_control_response_act = 0;
|
|||
|
if(response_power_manage_control_act_p == 0U){response_power_manage_control_act_p = 1;}
|
|||
|
}
|
|||
|
}
|
|||
|
if(count_sent_time >= 9U){count_sent_time = 0;}else{count_sent_time++;}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static void main_time(void)
|
|||
|
{
|
|||
|
if(count_b >= 4U)
|
|||
|
{
|
|||
|
count_b = 0;
|
|||
|
count_c++;
|
|||
|
if(sec_500ms == 1U)
|
|||
|
{
|
|||
|
sec_500ms = 0U;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sec_500ms = 1U;
|
|||
|
}
|
|||
|
if(charge_display_count < 2U){charge_display_count++;}else{charge_display_count = 0U;} //5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8> ǥ<>ÿ<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
main_time_sub();
|
|||
|
|
|||
|
|
|||
|
if(count_c >= 2U)
|
|||
|
{
|
|||
|
count_c = 0U;
|
|||
|
if(power_divider_link_err == LINK )
|
|||
|
{
|
|||
|
if(loss_count < 4U)
|
|||
|
{
|
|||
|
loss_count++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
loss_count = 4U;
|
|||
|
}
|
|||
|
}
|
|||
|
if(loss_count >= 2U){ power_divider_link_err = ERROR;}else{power_divider_link_err = NOR;}
|
|||
|
|
|||
|
if(sec_1000ms == 1U){sec_1000ms = 0U;}else{sec_1000ms = 1U;}
|
|||
|
//<2F><>ü ä<><C3A4> <20><><EFBFBD><EFBFBD> <20><> 5<><35><EFBFBD>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü ü<><C3BC> <20>ʱ<EFBFBD>ȭ ó<><C3B3>
|
|||
|
if(buzzer_press == 1U)
|
|||
|
{
|
|||
|
if(buzzer_press_count >= 5U)
|
|||
|
{
|
|||
|
buzzer_press_count = 5U;
|
|||
|
if(buzzer_press_act == 0U)
|
|||
|
{
|
|||
|
buzzer_press_act = 1U;
|
|||
|
ch_sel_1 = 0xff;
|
|||
|
ch_sel_2 = 0xff;
|
|||
|
buzzer_pulse_one();
|
|||
|
ch_set_act = 1U;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buzzer_press_count++;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buzzer_press_count = 0U;
|
|||
|
buzzer_press_act = 0U;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if(sec_100ms == 1U)
|
|||
|
{
|
|||
|
LED_HEALTH = ON;
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_HEALTH = OFF;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void init(void)
|
|||
|
{
|
|||
|
delay_ms(100);
|
|||
|
DDRE=(1<<DDE5); //LED 1_0<5F><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
SW_LAN_SPEED_D_0_SET = 0;
|
|||
|
LAN_ISP = HIGH;
|
|||
|
RESET_N = HIGH;
|
|||
|
LAN_RESET = HIGH;
|
|||
|
delay_ms(500);
|
|||
|
RESET_N = LOW;
|
|||
|
delay_ms(10);
|
|||
|
DDRE=(0<<DDE5); //LED 1_0<5F><30> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
LAN_RESET = LOW;
|
|||
|
delay_ms(500);
|
|||
|
fnd_init();
|
|||
|
LAN_RESET = HIGH;
|
|||
|
RESET_N = HIGH;
|
|||
|
display_p_bit();
|
|||
|
|
|||
|
SW_LAN_SDI = 0;
|
|||
|
SW_LAN_SCL = 0;
|
|||
|
SW_LAN_SCS_N = 0;
|
|||
|
SW_LAN_TX_EN = 0;
|
|||
|
SW_LAN_TX_ER = 0;
|
|||
|
|
|||
|
ch_sel_1 = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
|||
|
ch_sel_2 = 0;
|
|||
|
|
|||
|
power_divider_link_err = NOR;
|
|||
|
batt_err = NOR;
|
|||
|
gen_err = NOR;
|
|||
|
|
|||
|
rx_wr_index0=0;
|
|||
|
rx_rd_index0=0;
|
|||
|
|
|||
|
sw_lan_cont(0x0334, 0x01);
|
|||
|
delay_ms(10);
|
|||
|
sw_lan_cont(0x0300, 0x01);
|
|||
|
delay_ms(10);
|
|||
|
sw_lan_cont(0x2112, 0x04);
|
|||
|
delay_ms(10);
|
|||
|
|
|||
|
count_a = 0;
|
|||
|
count_b = 0;
|
|||
|
count_c = 0;
|
|||
|
charge_display_count = 0;
|
|||
|
init_delay_count = 50U;
|
|||
|
lan_reset_count = 0;
|
|||
|
count_temp = 0;
|
|||
|
sec_count = 0;
|
|||
|
fnd_digit_loop = 0;
|
|||
|
count_sent_time = 0;
|
|||
|
|
|||
|
//TEMP
|
|||
|
loop = 0;
|
|||
|
|
|||
|
buff_loop = 0;
|
|||
|
link_buffer_count = 0;
|
|||
|
lan_buffer_count = 0;
|
|||
|
|
|||
|
//mode
|
|||
|
mode = 0;// AC:0/GEN:1/BATT:2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//err
|
|||
|
mode_sw_err = 0; //mode_Switch <20>ҷ<EFBFBD><D2B7><EFBFBD> 1
|
|||
|
power_divider_link_err = 0;
|
|||
|
batt_link_1_err = 0;
|
|||
|
batt_link_2_err = 0;
|
|||
|
batt_err = 0;
|
|||
|
gen_link_err = 0;
|
|||
|
gen_err = 0;
|
|||
|
err_info_1 = 0;
|
|||
|
err_info_2 = 0;
|
|||
|
err_ch_ovp_1 =0;
|
|||
|
err_ch_ovp_2= 0;
|
|||
|
err_ch_lvp_1 =0;
|
|||
|
err_ch_lvp_2= 0;
|
|||
|
err_ch_current_1= 0;
|
|||
|
batt1_soc_low = 0;
|
|||
|
batt2_soc_low = 0;
|
|||
|
|
|||
|
alram = 0U;
|
|||
|
|
|||
|
//source
|
|||
|
voltage_source = 0;
|
|||
|
current_sum = 0;
|
|||
|
|
|||
|
//ac
|
|||
|
ac_volt = 0;
|
|||
|
ac_temp_err = 0;
|
|||
|
ac_fault_err = 0;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//gen
|
|||
|
gen_volt = 0;
|
|||
|
gen_current = 0;
|
|||
|
gen_rpm = 0;
|
|||
|
gen_fuel = 0;
|
|||
|
gen_status = 0;
|
|||
|
gen_temp = 0;
|
|||
|
gen_state_err = 0;
|
|||
|
gen_sensor_err = 0;
|
|||
|
|
|||
|
//batt
|
|||
|
batt_volt_1 = 0;
|
|||
|
batt_current_1 = 0;
|
|||
|
batt_fuel_1 = 0;
|
|||
|
batt_temperature_2 = 0;
|
|||
|
batt2_heater = 0;
|
|||
|
batt_volt_2 = 0;
|
|||
|
batt_current_2 = 0;
|
|||
|
batt_fuel_2 = 0;
|
|||
|
batt_temperature_2 = 0;
|
|||
|
batt2_heater = 0;
|
|||
|
|
|||
|
//ch_value
|
|||
|
voltage_ch1 = 0;
|
|||
|
currunt_ch1 = 0;
|
|||
|
voltage_ch2 = 0;
|
|||
|
currunt_ch2 = 0;
|
|||
|
voltage_ch3 = 0;
|
|||
|
currunt_ch3 = 0;
|
|||
|
voltage_ch4 = 0;
|
|||
|
currunt_ch4 = 0;
|
|||
|
voltage_ch5 = 0;
|
|||
|
currunt_ch5 = 0;
|
|||
|
voltage_ch6 = 0;
|
|||
|
currunt_ch6 = 0;
|
|||
|
voltage_ch7 = 0;
|
|||
|
currunt_ch7 = 0;
|
|||
|
voltage_ch8 = 0;
|
|||
|
currunt_ch8 = 0;
|
|||
|
voltage_ch9 = 0;
|
|||
|
currunt_ch9 = 0;
|
|||
|
voltage_ch10 = 0;
|
|||
|
currunt_ch10 = 0;
|
|||
|
voltage_ch11 = 0;
|
|||
|
currunt_ch11 = 0;
|
|||
|
voltage_ch12 = 0;
|
|||
|
currunt_ch12 = 0;
|
|||
|
voltage_ch13 = 0;
|
|||
|
currunt_ch13 = 0;
|
|||
|
voltage_ch14 = 0;
|
|||
|
currunt_ch14 = 0;
|
|||
|
|
|||
|
//ch status
|
|||
|
ch_status_1 = 0;
|
|||
|
ch_status_2 = 0;
|
|||
|
|
|||
|
//etc
|
|||
|
check_sum = 0;
|
|||
|
|
|||
|
em_off_time = 0;
|
|||
|
|
|||
|
temp = 0;
|
|||
|
temp_lan = 0;
|
|||
|
err_ch_current_2 = 0;
|
|||
|
temp_sw = 0;
|
|||
|
sw_result = 0;
|
|||
|
|
|||
|
//i2c<32>ӽ<EFBFBD>
|
|||
|
i2c_add = 0;
|
|||
|
i2c_w_data = 0;
|
|||
|
i2c_read_act = 0;
|
|||
|
i2c_write_act = 0;
|
|||
|
i2c_read_all_act = 0;
|
|||
|
|
|||
|
//pulse
|
|||
|
sec_1000ms = 0U;
|
|||
|
sec_500ms = 0U;
|
|||
|
sec_100ms = 0U;
|
|||
|
|
|||
|
|
|||
|
response_power_management_pbit_act_p = 0;
|
|||
|
response_power_manage_detail_act_p = 0;
|
|||
|
response_power_manage_control_act_p = 0;
|
|||
|
response_power_manage_start_act_p = 0;
|
|||
|
}
|
|||
|
|
|||
|
static void init_sub(void)
|
|||
|
{
|
|||
|
|
|||
|
//fnd
|
|||
|
command = 0x00U;
|
|||
|
fnd_data = 0x00U;
|
|||
|
fnd_voltage = 0U;
|
|||
|
fnd_current = 0U;
|
|||
|
fnd_fuel = 0U;
|
|||
|
fnd_soc1 = 0U;
|
|||
|
fnd_soc2 = 0U;
|
|||
|
|
|||
|
//buzzer
|
|||
|
buzzer_work = 0U;
|
|||
|
buzzer_stop_act = 0U;
|
|||
|
buzzer_act = 0U;
|
|||
|
buzzer_press = 0U;
|
|||
|
buzzer_press_act = 0U;
|
|||
|
buzzer_press_count = 0U;
|
|||
|
alram_count = 0U;
|
|||
|
alram_count_flag = 0U;
|
|||
|
|
|||
|
//485 data
|
|||
|
ch_sel_1 = 0U;
|
|||
|
ch_sel_2 = 0U;
|
|||
|
|
|||
|
|
|||
|
//BIT
|
|||
|
p_bit = 0U;
|
|||
|
ch_set_act = 0U;
|
|||
|
ch_req_act = 0U;
|
|||
|
|
|||
|
//link
|
|||
|
loss_count = 0;
|
|||
|
|
|||
|
sw_up_link_count = 0;
|
|||
|
|
|||
|
sw_up_link = 0;
|
|||
|
sw_down_link = 0;
|
|||
|
|
|||
|
//err
|
|||
|
comm_total_err = 0;
|
|||
|
divider_total_err = 0;
|
|||
|
|
|||
|
ac_err = 0;
|
|||
|
|
|||
|
//lan
|
|||
|
sn_count = 0;
|
|||
|
|
|||
|
power_management_status_report_act = 0;
|
|||
|
power_management_pbit_response_act = 0;
|
|||
|
|
|||
|
power_managementbit_cbit_report_act = 0;
|
|||
|
power_manage_detail_response_act = 0;
|
|||
|
power_manage_control_response_act = 0;
|
|||
|
heart_bit_sent_act = 0;
|
|||
|
|
|||
|
divider_limit_alram = 0;
|
|||
|
divider_work_alram = 0;
|
|||
|
|
|||
|
// battery
|
|||
|
batt1_temp_err = 0;
|
|||
|
batt1_ocp = 0;
|
|||
|
batt1_ovp = 0;
|
|||
|
batt1_charge = 0;
|
|||
|
batt1_discharge = 0;
|
|||
|
batt1_status = 0;
|
|||
|
batt1_total_err = 0;
|
|||
|
batt_health_1 = 0;
|
|||
|
|
|||
|
batt2_temp_err = 0;
|
|||
|
batt2_ocp = 0;
|
|||
|
batt2_ovp = 0;
|
|||
|
batt2_charge = 0;
|
|||
|
batt2_discharge = 0;
|
|||
|
batt2_status = 0;
|
|||
|
batt2_total_err = 0;
|
|||
|
batt_health_2 = 0;
|
|||
|
|
|||
|
//genelator
|
|||
|
gen_high_temp = 0;
|
|||
|
gen_low_fuel = 0;
|
|||
|
gen_ovp = 0;
|
|||
|
gen_ocp = 0;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
gen_main_err = 0;
|
|||
|
gen_sub_err = 0;
|
|||
|
gen_temp_sensor_err = 0;
|
|||
|
gen_volt_sensor_err = 0;
|
|||
|
gen_current_sensor_err = 0;
|
|||
|
gen_low_presure_err = 0;
|
|||
|
gen_fuel_level_sensor_err = 0;
|
|||
|
gen_oil_presure_sensor_err = 0;
|
|||
|
gen_em_stop = 0;
|
|||
|
gen_start_fail = 0;
|
|||
|
gen_work_alram = 0;
|
|||
|
gen_limit_alram = 0;
|
|||
|
reserve1 = 0;
|
|||
|
}
|
|||
|
|
|||
|
void main(void)
|
|||
|
{
|
|||
|
// Input/Output Ports initialization
|
|||
|
// Port A initialization
|
|||
|
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
|
|||
|
DDRA= 0XFFU;
|
|||
|
//(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0)
|
|||
|
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
|
|||
|
PORTA= 0X00U;
|
|||
|
//(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0)
|
|||
|
|
|||
|
// Port B initialization
|
|||
|
// Function: Bit7=In Bit6=In Bit5=In Bit4=Out Bit3=Out Bit2=In Bit1=In Bit0=In
|
|||
|
DDRB=0xbc; //0B10111101
|
|||
|
//1<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (0<<DDB1) | (1<<DDB0)
|
|||
|
// State: Bit7=T Bit6=T Bit5=T Bit4=0 Bit3=0 Bit2=T Bit1=T Bit0=T
|
|||
|
PORTB=0X00U;
|
|||
|
//(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0)
|
|||
|
|
|||
|
// Port C initialization
|
|||
|
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=In Bit2=In Bit1=Out Bit0=Out
|
|||
|
DDRC= 0xf3; //0B11110011
|
|||
|
//(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (0<<DDC3) | (0<<DDC2) | (1<<DDC1) | (1<<DDC0)
|
|||
|
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=T Bit2=T Bit1=0 Bit0=0
|
|||
|
PORTC= 0X00U;
|
|||
|
//(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0)
|
|||
|
|
|||
|
// Port D initialization
|
|||
|
// Function: Bit7=In Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
|
|||
|
DDRD= 0x30; //0B00110000
|
|||
|
//(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (1<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0)
|
|||
|
// State: Bit7=T Bit6=T Bit5=0 Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
|
|||
|
PORTD= 0X00U;
|
|||
|
//(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0)
|
|||
|
|
|||
|
// Port E initialization
|
|||
|
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
|
|||
|
DDRE= 0xa0; //0B10100000
|
|||
|
//(1<<DDE7) | (0<<DDE6) | (1<<DDE5) | (0<<DDE4) | (0<<DDE3) | (0<<DDE2) | (0<<DDE1) | (0<<DDE0)
|
|||
|
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
|
|||
|
PORTE= 0X00U;
|
|||
|
//(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0)
|
|||
|
|
|||
|
// Port F initialization
|
|||
|
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
|
|||
|
DDRF= 0X00U;
|
|||
|
//(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0)
|
|||
|
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
|
|||
|
PORTF=0X00U;
|
|||
|
//(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0)
|
|||
|
|
|||
|
// Port G initialization
|
|||
|
// Function: Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
|
|||
|
DDRG=0X00U;
|
|||
|
//(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0)
|
|||
|
// State: Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
|
|||
|
PORTG=0X00U;
|
|||
|
//(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0)
|
|||
|
|
|||
|
|
|||
|
ASSR= 0X00U;
|
|||
|
//0<<AS0
|
|||
|
TCCR0=0X01U;
|
|||
|
//(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00)
|
|||
|
TCNT0=0x00;
|
|||
|
OCR0=0x00;
|
|||
|
|
|||
|
// Timer(s)/Counter(s) Interrupt(s) initialization
|
|||
|
TIMSK=0X01U;
|
|||
|
//(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0)
|
|||
|
|
|||
|
// Globally enable interrupts
|
|||
|
#asm("sei")
|
|||
|
/*
|
|||
|
USART0 initialization
|
|||
|
Communication Parameters: 8 Data, 1 Stop, No Parity
|
|||
|
USART0 Receiver: On
|
|||
|
USART0 Transmitter: On
|
|||
|
USART0 Mode: Asynchronous
|
|||
|
USART0 Baud Rate: 19200
|
|||
|
*/
|
|||
|
UCSR0A=0X00U;
|
|||
|
//(0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0)
|
|||
|
UCSR0B= 0x98; //0B10011000
|
|||
|
//(1<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (1<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80)
|
|||
|
UCSR0C= 0x06; //0B0000110
|
|||
|
//(0<<UMSEL0) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0)
|
|||
|
UBRR0H=0x00U;
|
|||
|
UBRR0L=0x33U;
|
|||
|
|
|||
|
// USART1 initialization
|
|||
|
// Communication Parameters: 8 Data, 1 Stop, No Parity
|
|||
|
// USART1 Receiver: On
|
|||
|
// USART1 Transmitter: On
|
|||
|
// USART1 Mode: Asynchronous
|
|||
|
// USART1 Baud Rate: 19200
|
|||
|
UCSR1A=0X00U;
|
|||
|
//(0<<RXC1) | (0<<TXC1) | (0<<UDRE1) | (0<<FE1) | (0<<DOR1) | (0<<UPE1) | (0<<U2X1) | (0<<MPCM1)
|
|||
|
UCSR1B= 0x98; //0B10011000
|
|||
|
//(1<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (1<<RXEN1) | (1<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81)
|
|||
|
UCSR1C= 0x06; //0B0000110
|
|||
|
//(0<<UMSEL1) | (0<<UPM11) | (0<<UPM10) | (0<<USBS1) | (1<<UCSZ11) | (1<<UCSZ10) | (0<<UCPOL1)
|
|||
|
UBRR1H=0x00U;
|
|||
|
UBRR1L=0x33U;
|
|||
|
|
|||
|
init();
|
|||
|
init_sub();
|
|||
|
|
|||
|
while (1)
|
|||
|
{
|
|||
|
|
|||
|
main_time();
|
|||
|
|
|||
|
buzzer_check();
|
|||
|
|
|||
|
if(ch_set_act == 1U)
|
|||
|
{
|
|||
|
power_divider_chset();
|
|||
|
}
|
|||
|
|
|||
|
if(ch_req_act == 1U)
|
|||
|
{
|
|||
|
power_divider_request();
|
|||
|
}
|
|||
|
|
|||
|
if((SW_LAN_SPEED_D_0 == HIGH)){LED_STATUS = HIGH;}else{LED_STATUS = LOW;}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if((sw_up_link == LINK)&&(sw_down_link == UNLINK))
|
|||
|
{
|
|||
|
LED_STATUS = HIGH;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LED_STATUS = LOW;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(response_power_manage_start_act_p == 1U){power_management_start_response();}
|
|||
|
|
|||
|
if(response_power_management_pbit_act_p == 1U)
|
|||
|
{
|
|||
|
power_management_pbit_response();
|
|||
|
}
|
|||
|
|
|||
|
if(power_management_status_report_act == 1U)
|
|||
|
{
|
|||
|
power_management_status_report1();
|
|||
|
power_management_sub_status_report1();
|
|||
|
power_management_status_report2();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(response_power_manage_detail_act_p == 1U)
|
|||
|
{
|
|||
|
power_managementbit_detail_response();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if(power_managementbit_cbit_report_act == 1U)
|
|||
|
{
|
|||
|
power_management_cbit_report();
|
|||
|
i2c_read_act = 0;
|
|||
|
}
|
|||
|
|
|||
|
if(heart_bit_sent_act == 1U)
|
|||
|
{
|
|||
|
heart_bit_sent( );
|
|||
|
heart_bit_sent_act = 0;
|
|||
|
}
|
|||
|
|
|||
|
if(response_power_manage_control_act_p == 1U)
|
|||
|
{
|
|||
|
power_management_control_response();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if(i2c_write_act == 1U)
|
|||
|
{
|
|||
|
|
|||
|
sw_lan_cont(i2c_add, i2c_w_data);
|
|||
|
i2c_write_act = 0;
|
|||
|
}
|
|||
|
|
|||
|
if(i2c_read_all_act == 1U)
|
|||
|
{
|
|||
|
sw_list();
|
|||
|
i2c_read_all_act = 0U;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|