Навигация
· Главная
· Архив новостей
· Лаборатория
· Личные сообщения
· Личный кабинет
· О нас
· Пользователи
· Справочник
· Статьи
· Форум
· Школа
· Энциклопедия

Irbislab.ru :: Просмотр темы - Корректное первичное преобразование АЦП микроконтроллера
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль  Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Корректное первичное преобразование АЦП микроконтроллера

 
Начать новую тему   Ответить на тему    Список форумов Irbislab.ru -> Техника смешанных сигналов
Предыдущая тема :: Следующая тема  
Автор Сообщение
One
Разведчик
Разведчик


Зарегистрирован: Oct 10, 2007
Сообщения: 259
Откуда: Ukraine, Kyiv

СообщениеДобавлено: Пн Мар 24, 2008 15:45:13    Заголовок сообщения: Корректное первичное преобразование АЦП микроконтроллера Ответить с цитатой

Задача состоит в необходимости быстро сканировать 6 входов АЦП с частотой переключения мультиплексора 1600 Гц. Ранее работая с интегрированными АЦП различных при низких скоростях переключения входа АЦП микроконтроллеров Atmel, каких либо проблем с результатами преобразований не возникало. Но при быстром переключении входов результатом преобразования был "мусор". Вспомнил что необходимо после изменения входа АПЦ выполнить первичное (пустое) преобразование. Для кодов С это выглядит так:
Код:

void ADC_init(void)
  {
      ADMUX=0; // Выбран 0-й вход
      ADCSRA=0xC0; // Пуск пустого преобразования
  }

По различным информационным источникам сразу после пустого преобразования рекомендуется выполнить считывание аналогового значения в стандартном порядке:
Код:

unsigned int read_adc(unsigned char adc_input)
  {       
    ADMUX=adc_input|ADC_VREF_TYPE;  // Назначаем вход АЦП + источник опорного напряжения для выполнения считывания аналога
    ADCSRA|=0x40; // Запуск преобразования
    while ((ADCSRA&0x10)==0); // Ожидание завершения
    ADCSRA|=0x10; // Выключаем АЦП
    return ADCW; // Возращаем результат
  }

Но нигде не сказано о необходимости выполнения задержки дабы завершить пустое преобразование. И о номере входа АЦП по умолчанию назначаемый при "пустом" проеобразовании.
Суть в том что если вход "пустого" преобразования назначен "0", а вход считывания каким-либо другим, то всё равно появляется мусор, поэтому пришлось сделать таким образом, при пустом преобразовании назначать входом АЦП тот который будет использоваться в дальнейшем:
Код:

unsigned int read_adc(unsigned char adc_input)
  {
    ADMUX=adc_input|ADC_VREF_TYPE; // Назначаем вход АЦП + источник опорного напряжения для выполнения "пустого" преобразования
    ADCSRA=0xC0; // Запус преобразования
    delay_us(10);  // Задержка 10 мкС     
    ADMUX=adc_input|ADC_VREF_TYPE; // Назначаем вход АЦП + источник опорного напряжения для выполнения считывания аналога
    ADCSRA|=0x40; // Запуск преобразования
    while ((ADCSRA&0x10)==0); // Ожидание завершения преобразования
    ADCSRA|=0x10; // Выключаем АЦП
    return ADCW; // Возращаем результат
  }

Задерка delay_us(10); внутри совмещённого преобразования подобрана эксперементально методом "научного тыка" и даёт наилучший результат, но все же, при непрерывном сканировании за период нескольких минут может появлятся цифровой "мусор".

В чём я не прав?

Такт АЦП выбирался в пределах 125 кГц... 1МГц, результат тот же.

_________________
Тротила для дураков не бывает® One
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ИРБИС
Администратор
Администратор


Зарегистрирован: Oct 02, 2007
Сообщения: 2117
Откуда: Cтрана скал и снегов...

СообщениеДобавлено: Пн Мар 24, 2008 16:04:55    Заголовок сообщения: Ответить с цитатой

1. Время преобразования АЦП?
2. Работать лучше через регистры и т.п. с подтверждением "Данные готовы".

_________________
А ещё называют его “кар кечкен ильбирс”, что означает — “по грудь идущий в снегу”…
© Чингиз Айтматов "Когда падают горы (Вечная невеста)"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Андрей
Разведчик
Разведчик


Зарегистрирован: Feb 16, 2008
Сообщения: 171

СообщениеДобавлено: Пн Мар 24, 2008 16:50:22    Заголовок сообщения: Ответить с цитатой

С 6 не работал, работал с двухточечным, менял просто вход без всяких пустых преобразований и нормально все работает. преоразования делал с частотой 2Гц. чаще не нада было на ЖК выводил.
т.е. у меня на кварце часовом часики тикали на Т2 и каждые 0,5 секунды происходило переключение пина и преобразование. До сих пор робит под 300 греют датчики при вакууме Cool
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
One
Разведчик
Разведчик


Зарегистрирован: Oct 10, 2007
Сообщения: 259
Откуда: Ukraine, Kyiv

СообщениеДобавлено: Пн Мар 24, 2008 21:51:40    Заголовок сообщения: Ответить с цитатой

ИРБИС, время преобразования АЦП определяется тактовой частотой АЦП и при указанном диапазоне составляет 13... 65 мкс.
Потверждение "данные готовы" происходит на участке:
Код:

while ((ADCSRA&0x10)==0); // Ожидание завершения

через регистр ADCSRA.

_________________
Тротила для дураков не бывает® One
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Irbislab.ru -> Техника смешанных сигналов Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001-2003 phpBB Group




Web-ring: электроника, электронные компоненты и приборы
rand prev next

ChipFind: поисковая система по поставщикам радиокомпонентов Rambler\'s Top100 Рейтинг@Mail.ru


Сайт оптимизирован для отображения в браузере Mozilla Firefox версии 2 и выше с разрешением 1024*768 точек и выше.

При неполадках с отображением кнопок, обновите проигрыватель Macromedia Flash.

PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.

Открытие страницы: 0.12 секунды
The Russian localization - project Rus-PhpNuke.com