Спойлер
//--- Функция оцифровки напряжения внутреним ацп MUX5 ---unsigned int ADCV_Conv(unsigned char ch_ADC) //(переменная "канал ацп")
{
unsigned int adcv_value = 0; //сброс регистра хранения результата оцифровки напряжения
unsigned char set_ADMUX = ADMUX; //переменная для выбора канала АЦП
ADMUX |= ((0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0)); //выбор канала АЦП MUX5
_delay_us(10); //пауза 10мкс
for(unsigned char i=0;i<measure;i++) //цикл суммирования результатов оцифровки 64 замеров
{
ADCSRA |= (1<<ADSC); //запуск АЦП
while((ADCSRA &(1<<ADSC))); //ожидание окончания преобразования
adcv_value += ADCW; //adcv_value=adcv_value+ADCW прибавим к сумме значений предыдущих измерений значение очередного измерения
}
return(unsigned int)adcv_value >> 6; //выйдем из функции и вернём среднее значение (из регистров результата ADCL и ADCH АЦП)
} //оцифровки 64 замеров в переменную типа (unsigned int)
//--- Функция оцифровки тока внутреним ацп MUX4 ---
unsigned int ADCI_Conv(unsigned char ch_ADC) //(переменная "канал ацп")
{
unsigned int adcv_value = 0; //сброс регистра хранения результата оцифровки напряжения
unsigned char set_ADMUX = ADMUX; //переменная для выбора канала АЦП
ADMUX |= ((0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(0<<MUX0)); //выбор канала АЦП MUX4
_delay_us(10); //пауза 10мкс
for(unsigned char i=0;i<measure;i++) //цикл суммирования результатов оцифровки 64 замеров
{
ADCSRA |= (1<<ADSC); //запуск АЦП
while((ADCSRA &(1<<ADSC))); //ожидание окончания преобразования
adcv_value += ADCW; //adcv_value=adcv_value+ADCW прибавим к сумме значений предыдущих измерений значение очередного измерения
}
return(unsigned int)adcv_value >> 7; //выйдем из функции и вернём 1/2 среднего значения (из регистров результата ADCL и ADCH АЦП)
} //оцифровки 64 замеров в переменную типа (unsigned int)
а вот цикл
Спойлер
while(1){
Display1_ADC = ADCV_Conv(5); //считаем значение канала MUX5
ledprint_1(Display1_ADC); //отправим считанное значение в функцию вывода на индикатор вольтметра
_delay_ms(200); //пауза 0,2с
//Display2_ADC = ADCI_Conv(Read_3201()); //считаем значение регистра SPDR
Display2_ADC = ADCI_Conv(4); //считаем значение канала MUX4
ledprint_2(Display2_ADC); //отправим считанное значение в функцию вывода на индикатор амперметра
_delay_ms(200); //пауза 0,2с
}
вставил вашу кодировку, а свою ахинею закоментировал. всё заработало как надо. деление /128 в канале тока нужно для правильногоо отображения предела 50а. в канале mux5 верхний предел 99,9в, поэтому там просто усреднение /64