Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: xmega256a3 ADC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DenisKuzovin
Добрый день!

Возникла проблема с ADC в xmega256a3. Долго пытались разобраться, вроде все должно быть нормально, а нет.. Может вы увидите проблему свежим взглядом sm.gif

АЦП настроен на 12 битный режим, внешнее референсное напряжение. При 0 вольт , значение АЦП сразу 420, далее плавно изменяется значение АЦП до 1075 при увеличении напряжения до 1 вольта. После этого резкий скачок на 1631. Далее опять плавно изменяется до 2460 (напряжение 2 вольта) и снова скачок до 3020. После этого снова плавное изменение до 3918 (3 вольта). Если одновременно контролировать напряжение осциллографом, то видно, что оно изменяется плавно во всем диапазоне.

В чем может быть проблема?

Код работы с АЦП:
CODE
/* инициализация АЦП */
ADCA.CTRLA = 0b00000101;
ADCA.CTRLB = 0b00000000;
ADCA.CH1.CTRL = 0b00000001;

uint16_t get_adc()
{
ADCA.REFCTRL |= (1<<5); // подаем смещение с пина AREFA
ADCA.CH1.MUXCTRL = 0b00100000; // выбираем ножку
ADCA.CH1.CTRL = 0b10000001; //запускаем преобразавние
_delay_us(30);
return ADCA.CH1.RES;
}


В приложении фрагменты схемы устройства.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Заранее благодарю за помощь!
zombi
С ADC не работал. Поэтому прошу простить если скажу глупость.
На AREF вроде больше чем AVCC- 0.6V подавать нельзя.
Xenia
Добавить:
ADCA.PRESCALER = 0x6; // ADC_PRESCALER_DIV256_gc
иначе от слишком быстрого счета могут быть еще глюки.
DenisKuzovin
Цитата(zombi @ Nov 14 2013, 12:49) *
На AREF вроде больше чем AVCC- 0.6V подавать нельзя.


Да, есть упоминания об этом, хотя в оригинальном даташите вроде бы об этом не пишут.


Цитата(Xenia @ Nov 14 2013, 16:47) *
Добавить:
ADCA.PRESCALER = 0x6; // ADC_PRESCALER_DIV256_gc
иначе от слишком быстрого счета могут быть еще глюки.

Огромное спасибо! действительно помогло. Не ожидал, что от этого может глючить, надо запомнить)) Раньше работал с ADC только на mega серии, там вроде бы таких проблем не замечал.
AndreyVN
Цитата(DenisKuzovin @ Nov 15 2013, 11:31) *
Да, есть упоминания об этом, хотя в оригинальном даташите вроде бы об этом не пишут.


Ой, а где это такое упоминание? У меня несколько схем на Atmega64 и Atmega16 работают с Vref=5.0 и Vcc=5.0 но от разных источников. На Vref еще сажаю питание операционников, благо они сейчас все мало потребляют. Пока проблем не было, ждать неприятностей? Или ложная тревога?
zombi
Не уверен что это оно, но в DS на xmega256a3 вот :
ArtemKAD
Цитата(AndreyVN @ Nov 15 2013, 11:58) *
Ой, а где это такое упоминание? У меня несколько схем на Atmega64 и Atmega16 работают с Vref=5.0 и Vcc=5.0 но от разных источников. На Vref еще сажаю питание операционников, благо они сейчас все мало потребляют. Пока проблем не было, ждать неприятностей? Или ложная тревога?

В даташите упоминание. АЦП xMega и простых Mega в этой части очень сильно отличаются. Для привязки Vref к Vcc есть делители типа Vcc/1.6
DenisKuzovin
Да, привык к обычным мегам, там можно до AVCC. Это вырезка из даташита к mega128 для сравнения, про xmega256 писали выше.
Нажмите для просмотра прикрепленного файла

АЦП у них действительно сильно отличаются. Хотя сейчас уточнил у товарища, у него схема на этой же хмеге256 и VREF = VCC. Тоже видимо по привычке. Работает стабильно, проблем он не замечал. Хотя по даташиту это действительно неверно.
В своей схеме я единственное что замечал, это то, что невозможно оцифровать напряжение выше 3В. При 2,95 уже максимальное значение в регистре АЦП. Но меня это устраивает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.