НЕ ВЕРЮ!
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
так это исшо не фсё... энкодеры в качестве задатчиков опорного напряжения и ещё кое что по мелочи... только вот терзают сумненья по поводу младшего разряда... не будет ли мельтишить... мож усреднять надо? или это шизофрения уже?вон много ножек зря пропало
Код: Выделить всё
#define kolvo_dlya_sglaj 17 // по скольким результатам измерений вычислить среднее значение
unsigned long ADC_Convert (unsigned char Kanal_ADC)
{
uint32_t sum = 0;
//ADMUX = ADMUX&224|Kanal_ADC; //выберем канал АЦП (обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7, после этого заменим значение битов MUX4-MUX0 на номер(код) канала)
ADMUX = ADMUX & 224; //выберем канал АЦП (сначала обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7)
ADMUX = ADMUX | Kanal_ADC; //выберем канал АЦП (затем заменим значение битов MUX4-MUX0 на номер(код) канала)
for(uint8_t i = 0; i < kolvo_dlya_sglaj; ++i) {
ADCSRA |= (1<<ADSC); //Начинаем аналого-цифровое преобразование (для этого запишем 1 в бит ADSC регистра ADCSRA)
while((ADCSRA & (1<<ADSC))); //Ждём когда закончиться аналого-цифровое преобразование (преобразование закончится, когда бит ADSC регистра ADCSRA станет равным 0)
sum += ADCW;
}
sum += kolvo_dlya_sglaj >> 1;
sum /= kolvo_dlya_sglaj;
return (unsigned long) sum; //Выйдем из функции и вернём (запишем) полученное значение (из регистров результата ADCL и ADCH) в переменную типа unsigned int
}
Карбофос писал(а): sum += kolvo_dlya_sglaj >> 1;
это правильное округлениеStarichok51 писал(а):а это что
Код: Выделить всё
sum+=ADC_Оut;
Out_To_Display=sum>>StSglag;
sum-=Out_Tо_Display;Код: Выделить всё
Out_To_Display += (ADC - Out_To_Display) / 2;