|
@@ -12,7 +12,7 @@
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#undef DBG
|
|
|
-#define DBG if(1)
|
|
|
+#define DBG if(0)
|
|
|
|
|
|
#if defined (MAI_12)
|
|
|
|
|
@@ -40,8 +40,9 @@ ANALOG_IN_t channel_name[NUMBER_ADC_CH] = {AN_INP_1, AN_INP_2, AN_INP_3,
|
|
|
#endif
|
|
|
|
|
|
|
|
|
-uint16_t adc_raw_data[AI_ALL_NUMBER];
|
|
|
+uint16_t adc_com_raw_data[AI_COMMON_NUMBER];
|
|
|
|
|
|
+uint16_t adc_add_raw_data[AI_ADD_NUMBER];
|
|
|
|
|
|
led_t ai_alarm_led[12] = {IO_1_R, IO_2_R, IO_3_R, IO_4_R,
|
|
|
IO_5_R, IO_6_R, IO_7_R, IO_8_R,
|
|
@@ -81,19 +82,9 @@ void ai_init(void)
|
|
|
//
|
|
|
void ai_init_modbus_params(void)
|
|
|
{
|
|
|
- for (uint8_t i = 0; i < AI_COMMON_NUMBER/2; i++)
|
|
|
- {
|
|
|
+ for (uint8_t i = 0; i < AI_COMMON_NUMBER; i++) {
|
|
|
ai_gain[i] = settings.ai[i].gain_factor;
|
|
|
- ai_gain[i + 6] = settings.ai[i + 8].gain_factor;
|
|
|
}
|
|
|
-
|
|
|
-#if 0
|
|
|
- // для теста
|
|
|
- for (uint8_t i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
- {
|
|
|
- ai_gain[i] = i + 10;
|
|
|
- }
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
// Управление LED для 12-и основных входов
|
|
@@ -101,31 +92,22 @@ void ai_led_update(void)
|
|
|
{
|
|
|
for (int i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
{
|
|
|
- if (settings.ai[i].state) {
|
|
|
+ if (settings.ai[i].state)
|
|
|
leds[ai_input_led[i]].state = LED_ON;
|
|
|
- }
|
|
|
- else {
|
|
|
+ else
|
|
|
leds[ai_input_led[i]].state = LED_OFF;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Установить режим измерения каналов с 1 по 12.
|
|
|
void ai_set_meas_mode(void)
|
|
|
{
|
|
|
-#if 0
|
|
|
- for (uint8_t i = 1; i < 13; i++)
|
|
|
- {
|
|
|
- if (settings.ai_mode_bits & (1 << (i - 1)))
|
|
|
- ai_set_mode_word((MEAS_CHAN_MODE_t)1, i);
|
|
|
- else
|
|
|
- ai_set_mode_word((MEAS_CHAN_MODE_t)0, i);
|
|
|
- }
|
|
|
-#endif
|
|
|
for (int i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
{
|
|
|
if (settings.ai[i].mode)
|
|
|
- ai_set_mode_word((MEAS_CHAN_MODE_t)1, i);
|
|
|
+ ai_set_mode_word((MEAS_CHAN_MODE_t)1, i + 1);
|
|
|
+ else
|
|
|
+ ai_set_mode_word((MEAS_CHAN_MODE_t)0, i + 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -209,13 +191,23 @@ bool ai_adc_init(void)
|
|
|
// Оцифровка всех 16-и каналов (входы + дополнительные каналы)
|
|
|
void ai_processing(void)
|
|
|
{
|
|
|
- // все 16 каналов
|
|
|
- for (uint8_t i = 0; i < 8; i++)
|
|
|
+ // 12 основных каналов
|
|
|
+ for (uint8_t i = 0; i < AI_COMMON_NUMBER/2; i++)
|
|
|
{
|
|
|
- adc_meas_two_channels(settings.ai[i], settings.ai[i + 8], i);
|
|
|
+ adc_meas_two_channels(&settings.ai[i], &settings.ai[i + 6],
|
|
|
+ &adc_com_raw_data[i], &adc_com_raw_data[i + 6]);
|
|
|
}
|
|
|
|
|
|
#if 0
|
|
|
+ // 4 дополнительных канала
|
|
|
+ for (uint8_t i = 0; i < AI_ADD_NUMBER/2; i++)
|
|
|
+ {
|
|
|
+ adc_meas_two_channels(&settings.ai_add[i], &settings.ai_add[i + 2],
|
|
|
+ &adc_add_raw_data[i], &adc_add_raw_data[i + 2]);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+#if 1
|
|
|
printf("end\r\n");
|
|
|
adc_print_data();
|
|
|
printf("end\r\n");
|
|
@@ -223,56 +215,84 @@ void ai_processing(void)
|
|
|
}
|
|
|
|
|
|
//
|
|
|
-void adc_meas_two_channels(ai_t one, ai_t two, uint8_t data_index)
|
|
|
+void adc_meas_two_channels(ai_t *one, ai_t *two, uint16_t *out_one, uint16_t *out_two)
|
|
|
{
|
|
|
+ uint8_t gain;
|
|
|
+
|
|
|
// 1 - ый канал
|
|
|
- if (one.state == 0) {
|
|
|
- DBG printf("[one] channel name: %u off, data_index: %u\r\n", one.name, data_index);
|
|
|
+ if (one->state == 0) {
|
|
|
+ DBG printf("[one] channel name: %u off\r\n", one->name);
|
|
|
}
|
|
|
else {
|
|
|
- DBG printf("[one] channel name: %u on, data_index: %u\r\n", one.name, data_index);
|
|
|
+ DBG printf("[one] channel name: %u on\r\n", one->name);
|
|
|
|
|
|
- ai_connect_channel(one.name);
|
|
|
+ gain = adc_get_gain(one->gain_factor);
|
|
|
+ MS5192T_SetGain(gain);
|
|
|
+ ai_connect_channel(one->name);
|
|
|
vTaskDelay(1);
|
|
|
MS5192T_SetChannel(MS5192T_CH_AIN1P_AIN1M);
|
|
|
- adc_raw_data[data_index] = MS5192T_SingleConversion();
|
|
|
+ *out_one = MS5192T_SingleConversion();
|
|
|
}
|
|
|
|
|
|
// 2 - ой канал
|
|
|
- if (two.state == 0) {
|
|
|
- DBG printf("[two] channel name: %u off, data_index: %u\r\n", two.name, data_index + 8);
|
|
|
+ if (two->state == 0) {
|
|
|
+ DBG printf("[two] channel name: %u off\r\n", two->name);
|
|
|
}
|
|
|
else {
|
|
|
- DBG printf("[two] channel name: %u on, data_index: %u\r\n", two.name, data_index + 8);
|
|
|
+ DBG printf("[two] channel name: %u on\r\n", two->name);
|
|
|
|
|
|
- ai_connect_channel(two.name);
|
|
|
+ gain = adc_get_gain(two->gain_factor);
|
|
|
+ MS5192T_SetGain(gain);
|
|
|
+ ai_connect_channel(two->name);
|
|
|
vTaskDelay(1);
|
|
|
MS5192T_SetChannel(MS5192T_CH_AIN2P_AIN2M);
|
|
|
- adc_raw_data[data_index + 8] = MS5192T_SingleConversion();
|
|
|
+ *out_two = MS5192T_SingleConversion();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//
|
|
|
+uint8_t adc_get_gain(uint8_t tmp)
|
|
|
+{
|
|
|
+ uint8_t ret;
|
|
|
+
|
|
|
+ switch (tmp)
|
|
|
+ {
|
|
|
+ case 1 : ret = MS5192T_GAIN_1; break;
|
|
|
+ case 2 : ret = MS5192T_GAIN_2; break;
|
|
|
+ case 4 : ret = MS5192T_GAIN_4; break;
|
|
|
+ case 8 : ret = MS5192T_GAIN_8; break;
|
|
|
+ case 16 : ret = MS5192T_GAIN_16; break;
|
|
|
+ case 32 : ret = MS5192T_GAIN_32; break;
|
|
|
+ case 64 : ret = MS5192T_GAIN_64; break;
|
|
|
+ case 128: ret = MS5192T_GAIN_128; break;
|
|
|
+ default : ret = MS5192T_GAIN_1; break;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
//
|
|
|
void adc_print_data(void)
|
|
|
{
|
|
|
- printf("\033[2J"); // Очистить
|
|
|
- printf("\033[H"); // Переместить курсор в левый верхний угол
|
|
|
- printf("AN_INP_1: 0x%X, %f\r\n", adc_raw_data[0], (double) adc_raw_data[0]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_2: 0x%X, %f\r\n", adc_raw_data[1], (double) adc_raw_data[1]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_3: 0x%X, %f\r\n", adc_raw_data[2], (double) adc_raw_data[2]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_4: 0x%X, %f\r\n", adc_raw_data[3], (double) adc_raw_data[3]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_5: 0x%X, %f\r\n", adc_raw_data[4], (double) adc_raw_data[4]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_6: 0x%X, %f\r\n", adc_raw_data[5], (double) adc_raw_data[5]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_7: 0x%X, %f\r\n", adc_raw_data[6], (double) adc_raw_data[6]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_8: 0x%X, %f\r\n", adc_raw_data[7], (double) adc_raw_data[7]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_9: 0x%X, %f\r\n", adc_raw_data[8], (double) adc_raw_data[8]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_10: 0x%X, %f\r\n", adc_raw_data[9], (double) adc_raw_data[9]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_11: 0x%X, %f\r\n", adc_raw_data[10],(double) adc_raw_data[10]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_12: 0x%X, %f\r\n", adc_raw_data[11],(double) adc_raw_data[11]*0.00001785305/0.0961538);
|
|
|
- printf("V_ISO_CL: 0x%X, %f\r\n", adc_raw_data[12], (double) adc_raw_data[12]*0.00001785305/0.0961538);
|
|
|
- printf("V_ISO: 0x%X, %f\r\n", adc_raw_data[13], (double) adc_raw_data[13]*0.00001785305/0.0961538);
|
|
|
- printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_raw_data[14], (double) adc_raw_data[14]*0.00001785305/0.0961538);
|
|
|
- printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n", adc_raw_data[15], (double) adc_raw_data[15]*0.00001785305/0.0961538);
|
|
|
+ printf("\033[2J");
|
|
|
+ printf("\033[H");
|
|
|
+
|
|
|
+ printf("AN_INP_1: 0x%X, %f\r\n", adc_com_raw_data[0], (double)adc_com_raw_data[0]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_2: 0x%X, %f\r\n", adc_com_raw_data[1], (double)adc_com_raw_data[1]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_3: 0x%X, %f\r\n", adc_com_raw_data[2], (double)adc_com_raw_data[2]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_4: 0x%X, %f\r\n", adc_com_raw_data[3], (double)adc_com_raw_data[3]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_5: 0x%X, %f\r\n", adc_com_raw_data[4], (double)adc_com_raw_data[4]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_6: 0x%X, %f\r\n", adc_com_raw_data[5], (double)adc_com_raw_data[5]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_7: 0x%X, %f\r\n", adc_com_raw_data[6], (double)adc_com_raw_data[6]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_8: 0x%X, %f\r\n", adc_com_raw_data[7], (double)adc_com_raw_data[7]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_9: 0x%X, %f\r\n", adc_com_raw_data[8], (double)adc_com_raw_data[8]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_10: 0x%X, %f\r\n",adc_com_raw_data[9], (double)adc_com_raw_data[9]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_11: 0x%X, %f\r\n",adc_com_raw_data[10],(double)adc_com_raw_data[10]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_12: 0x%X, %f\r\n",adc_com_raw_data[11],(double)adc_com_raw_data[11]*0.00001785305/0.0961538);
|
|
|
+
|
|
|
+ printf("V_ISO_CL: 0x%X, %f\r\n", adc_add_raw_data[0], (double)adc_add_raw_data[0]*0.00001785305/0.0961538);
|
|
|
+ printf("V_ISO: 0x%X, %f\r\n", adc_add_raw_data[1], (double)adc_add_raw_data[1]*0.00001785305/0.0961538);
|
|
|
+ printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_add_raw_data[2],(double)adc_add_raw_data[2]*0.00001785305/0.0961538);
|
|
|
+ printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n",adc_add_raw_data[3],(double)adc_add_raw_data[3]*0.00001785305/0.0961538);
|
|
|
}
|
|
|
|
|
|
//
|
|
@@ -282,11 +302,11 @@ void adc_task(void *params)
|
|
|
{
|
|
|
ai_alarm = sh_ai_mode(ai_mode);
|
|
|
|
|
|
- //ai_processing();
|
|
|
+ ai_processing();
|
|
|
|
|
|
ai_leds_processing();
|
|
|
|
|
|
- //vTaskDelay(10);
|
|
|
+ vTaskDelay(10);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -354,7 +374,6 @@ void ai_set(void)
|
|
|
else {
|
|
|
leds[ai_input_led[i]].state = LED_ON;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -384,7 +403,6 @@ void ai_set_mode(MEAS_CHAN_MODE_t mode, uint8_t channel)
|
|
|
// Формируем слово режима работы каналов (ai_mode)
|
|
|
void ai_set_mode_word(MEAS_CHAN_MODE_t mode, uint8_t channel)
|
|
|
{
|
|
|
-#if 0
|
|
|
if (mode == MEAS_CURRENT)
|
|
|
{
|
|
|
if (channel < 7)
|
|
@@ -397,19 +415,6 @@ void ai_set_mode_word(MEAS_CHAN_MODE_t mode, uint8_t channel)
|
|
|
ai_mode &= ~(1 << (channel - 1));
|
|
|
else
|
|
|
ai_mode &= ~(1 << (channel + 1));
|
|
|
-#endif
|
|
|
- if (mode == MEAS_CURRENT)
|
|
|
- {
|
|
|
- if (channel < 7)
|
|
|
- ai_mode |= (1 << channel);
|
|
|
- else
|
|
|
- ai_mode |= (1 << channel);
|
|
|
- }
|
|
|
- else
|
|
|
- if (channel < 7)
|
|
|
- ai_mode &= ~(1 << channel);
|
|
|
- else
|
|
|
- ai_mode &= ~(1 << channel);
|
|
|
}
|
|
|
|
|
|
// Сигнал питания внешних датчиков
|