[решено] ADC в atmega16 возвращает значения от 0 до 200

Обсуждаем цифровые устройства...
Ответить
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

[решено] ADC в atmega16 возвращает значения от 0 до 200

Сообщение xray »

Приветствую!

Пытался найти здесь, или нагуглить подобную проблему где-то еще, но это не помогло. Как и не помогло повторное чтение даташита ATMEGA16.
Суть проблемы такова: какие бы я ни задавал частоты ADC (как частотой атмеги (1-8MHz), так и прескалером (upto 128)), он, ADC, измеряет только до 0.5В, что соответствует 200 единицам, несмотря на оговоренную 10-тибитную точность. Дальше он застревает на цифре 200, какое бы напряжение ни было приложено на ногу.
Измеряется в режиме single-ended, то есть от GND, опорное напряжение - встроенное 2.56В.
Проект пишется в CodeVisionAVR, функция read_adc создана самой CodeVisionAVR и выглядит следующим образом:

Код: Выделить всё

// 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;
}
Также к проекту подключен модуль для работы с экраном от LCD Nokia 1100, однако, он практически полностью уже переписан мной, и ничего кроме простого ногодрыгания там нет - никаких прерываний или работы с особенными регистрами, только с портом (PORTC), к которому подключен LCD (используются ноги 0-3).

Начальная инициализация ADC (генерируется мастером cvavr):

Код: Выделить всё

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 250,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
Схема симулируется в протеусе, живой атмеги на руках пока нет.

Пните меня, пожалуйста, в правильном направлении, как правильно задействовать ADC на ATMega16.
Последний раз редактировалось xray Вт фев 01, 2011 21:14:27, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение Roman Venom »

xray
Попробуй внешнее опорное напряжение. У меня мега16 в протеусе и в реале нормально работет. Сперва попробуй включить только один канал АЦП в регистре МУХ. И частоту преобразования поставь не 250кГц, а примерно 100кГц.
Успех - императив!
Реклама
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение xray »

Канал АЦП подключен один, он же единственный и подключается в ADMUX (а как иначе в single-ended?)
Попробовал внешний источник - VREF, пробовал различные напряжения, но выяснил интересное: ADC затыкается всегда на 0.5В
соответственно, в зависимости от того, какое количество делений этому соответствует, столько и будет показывать для более высоких значений.
Вне зависимости, стоит 250кГц или 125кГц.
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение Fasterpast »

Попробуйте 8ми битный режим измерения.
Реклама
Эиком - электронные компоненты и радиодетали
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение xray »

В 8-мибитном режиме то же самое - выше 0.5В затык.
Реклама
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение xray »

Роман, если Вас не затруднит - не могли бы Вы дать образец схемы и прошивки, которые измеряли бы значения ADC от 0 до VREF на всем диапазоне?
Реклама
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

Re: ADC в atmega16 возвращает значения только от 0 до 200

Сообщение xray »

Ошибка найдена: необходимо также подавать напряжение на AVCC
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: [решено] ADC в atmega16 возвращает значения от 0 до 200

Сообщение Roman Venom »

xray
Роман, если Вас не затруднит - не могли бы Вы дать образец схемы и прошивки, которые измеряли бы значения ADC от 0 до VREF на всем диапазоне?
Ещё надо?
Ошибка найдена: необходимо также подавать напряжение на AVCC
Ну вы, блин, даёте!
Успех - императив!
xray
Родился
Сообщения: 9
Зарегистрирован: Вт фев 01, 2011 18:47:39

Re: [решено] ADC в atmega16 возвращает значения от 0 до 200

Сообщение xray »

Бывает :dont_know:
За последний месяц настолько углубился в логическую часть и написание кода, что про элементарные вещи забыл.
Ответить

Вернуться в «Цифровая техника»