|  | @@ -16,6 +16,8 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if defined (MAI_12)  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +//uint16_t ai_state_bit;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  uint8_t ai_mux;     // выход сдвигового регистра U1010 (управляет MUX 301, 401)
 | 
	
		
			
				|  |  |                      // мультиплексоры отвечат за коммутацию аналоговых входов и АЦП
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -40,6 +42,7 @@ led_t ai_alarm_led[12] = {IO_1_R, IO_2_R, IO_3_R, IO_4_R,
 | 
	
		
			
				|  |  |                            IO_9_R, IO_10_R, IO_11_R, IO_12_R};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  //
 | 
	
		
			
				|  |  |  void ai_init(void)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -52,6 +55,7 @@ void ai_init(void)
 | 
	
		
			
				|  |  |  // Установить режим измерения каналов с 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)))
 | 
	
	
		
			
				|  | @@ -59,6 +63,12 @@ void ai_set_meas_mode(void)
 | 
	
		
			
				|  |  |          else
 | 
	
		
			
				|  |  |              ai_set_mode_word((MEAS_CHAN_MODE_t)0, i);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +    for (int i = 0; i < AI_NUMBER; i++)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        if (settings.ai[i].mode)
 | 
	
		
			
				|  |  | +            ai_set_mode_word((MEAS_CHAN_MODE_t)1, i);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }   
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Настройка внешнего ADC
 | 
	
	
		
			
				|  | @@ -254,6 +264,35 @@ void ai_connect_channel(uint8_t channel)
 | 
	
		
			
				|  |  |      //print_binary_byte(ai_mux);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 
 | 
	
		
			
				|  |  | +void ai_set(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    for (int i = 0; i < AI_NUMBER; i++)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +    }  
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +#if 0  
 | 
	
		
			
				|  |  | +    for (int i = 0; i < DI_NUMBER; i++)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        if ((settings.di_mode_bits & (1 << i)) != d_inputs[i].mode) 
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            d_inputs[i].mode = settings.di_mode_bits & (1 << i);
 | 
	
		
			
				|  |  | +            if (d_inputs[i].mode == 0) 
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                d_inputs[i].cnt = 0;
 | 
	
		
			
				|  |  | +                d_inputs[i].p_flag = false;
 | 
	
		
			
				|  |  | +                di_cnt[i] = 0;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                di_state_bit &= ~(1 << i);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  // Утсновить режим измерения канала (ток или напряжение)
 | 
	
		
			
				|  |  |  void ai_set_mode(MEAS_CHAN_MODE_t mode, uint8_t channel)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -279,6 +318,7 @@ 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)
 | 
	
	
		
			
				|  | @@ -291,6 +331,19 @@ 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);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Сигнал питания внешних датчиков
 | 
	
	
		
			
				|  | @@ -306,6 +359,14 @@ void ai_ext_sens_power(uint16_t state)
 | 
	
		
			
				|  |  |  void ai_leds_processing(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      //uint16_t foo = 0x800;
 | 
	
		
			
				|  |  | +#if 0    
 | 
	
		
			
				|  |  | +    // Управление индикацией вкл/выкл входов
 | 
	
		
			
				|  |  | +    for (uint8_t i = 0; i < AI_NUMBER; i++) {
 | 
	
		
			
				|  |  | +        if (settings.ai_state_bits & (1 << i)) {
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +#endif  
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      // Управление индикацией аварий (12 красных LED) (слово ai_alarm)
 | 
	
		
			
				|  |  |      for (uint8_t i = 0; i < AI_NUMBER; i++) {
 |