реклама на сайте
подробности

 
 
> Проблема с разрядностью АЦП
simer
сообщение Jan 5 2011, 18:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-01-08
Пользователь №: 34 312



АЦП на ATmega8 насколько я знаю 10-разрядный, т.е. значение регистра ADCW должно достигать 1023 (0x03FF) при максимальном значении напряжения на входе АЦП

Но по непонятным мне причинам значение поднимается только до 200 (0x00C8)

CODE

#define ADC_VREF_TYPE 0xc0

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


Проверено при любых вариантах опорного напряжения.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Jan 5 2011, 18:41
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Слишком рано считываете. Ждать надо не исчезновения бита ADIF (0x10), а исчезновения бита ADSC (0x40).
Т.е. вместо
while ((ADCSRA & 0x10)==0);
надо ждать
while ((ADCSRA & 0x40)==0);

А бит ADIF (0x10) никогда не появится, т.к. разрешения на прерывание вы не давали (не устанавливали ADIE). Поэтому ожидание у вас отсутствует и АЦП не успевает накопить число.
И вот этого
ADCSRA|=0x10;
делать не надо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01958 секунд с 7
ELECTRONIX ©2004-2016