АЦП. Разбор полётов

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Вроде как, версия от Барсика вполне работоспособна, а главное понятна.
ILYAUL писал(а): Вообще-то запустить ADC в этой тиньке можно используя 7 прерываний . При этом не требуется команда запуска ADC в обработчиках прерываний , все произойдёт автоматически. А уж читать результат преобразования или нет - дело третье
А нельзя, что бы он просто запускался при старте?! БЕЗ прерывания. Включили, он посчитал 16 раз, потом МК зажёг нужный светик и всё. Я этого добиваюсь.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25412
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Самый лучший вариант работы с сигналами - использовать аппаратный запуск АЦП от таймера. А уже по прерываниям АЦП писАть результат в массив с инкрементом указателя и маской указателя на длину массива. При таком раскладе можно считать результат фильтра вообще в суперлупе. Правда будет подергиваться полоса пропускания, но для большинства применений это не важно.
Очень удобно. Однократно запускается весь этот механизм и программа имеет всегда корректные данные в массиве, причем невидимо для нее.
А если в МК есть внутрицикловый ДМА (прямой доступ к памяти), то даже выпадений времени на обработку прерываний не будет...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25412
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

просто КОТ писал(а):Вроде как, версия от Барсика вполне работоспособна, а главное понятна.
Работоспособна - на значит правильна, а понятность ее не более, чем у правильной.
Главное разобраться... :wink:
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

просто КОТ писал(а):ты сказал, что прерывание от таймера, а написал в коде, что от АЦП
Собственно, добрые коты уже всё объяснили и без меня.
Предлагаю сделать так:
1. тактовую частоту микроконтроллера установить 1,2 МГц.
2. Из таймера смастерить что-то вроде часов реального врени. Для этого:
- входную (тактовую) частоту таймера выбрать 150 кГц
- выбрать моду работы таймера CTC top=OCR0A
- включить прерывание Compare Match A Interrupt
- значение регистра OCR0A установить равным 150 (0x96)
тогда таймер будет считать до 150, и прерывания от него будут с частотой 1000 Гц, т.е. каждую миллисекунду. в этом прерывании организовать счёчик(и) времени и забить на функцию delay.
3. Включить прерывания от АЦП. Запуск АЦП настроить от таймера, режим Timer0 Compare Match A. Тогда АЦП будет запускаться каждую миллисекунду. Тактовую частоту АЦП выбрать 18,75 кГц. Поскольку преобразование происходит за 13 тактов, то преобразование закончится через 0,7 мс, и по прерыванию от АЦП можно считать результат.
В качестве опорного напряжения выбрать внутренний источник 1,1 вольта (Bandgup Reference). Можно ещё отключить от входа АЦП цифровую часть (Disable Digital Input Buffer) чтобы повысить входное сопротивление.

Все эти настройки можно сделать в CodeWizardAVR.
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вообще-то запустить ADC в этой тиньке можно используя 7 прерываний
Я имел ввиду не это, а возможность выбора частоты тактирования модуля. :)
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Я вот думаю, а нельзя всё-таки сделать 1 точный замер?! На низкой частоте и с подавлением шума -- разве это не даст точность: +/-10мВ?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Вт мар 20, 2012 20:50:22
Откуда: Краснодар

Сообщение siamds »

Уважаемый Барсик! Может быть, Вы объясните мне, зачем такие сложности (это без подначки), Запись мл.байта в один регистр, ст.байта в другой, манипуляции со сдвигом. Может быть, я чего-то недопонимаю, и такой метод измерения АЦП действительно лучше, чем пользуюсь я. Обычно я делаю так: из регистра ADCW я переписываю слово данных в переменную типа int, и уже манипулирую с этой переменной, неизменно получаю точные результаты измерений. На фото, результат работы программы проверенный на тестовой плате, а не в Proteuse (это для Совести).
Вложения
Фото001.jpg
(24.19 КБ) 405 скачиваний
Последний раз редактировалось siamds Чт авг 16, 2012 10:59:11, всего редактировалось 1 раз.
На каждого Моцарта есть свой Сальери.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

просто КОТ писал(а):Я вот думаю, а нельзя всё-таки сделать 1 точный замер?! На низкой частоте и с подавлением шума -- разве это не даст точность: +/-10мВ?!
А что сложного в реализации, предложенной Марком, кольцевого буфера ? Вроде бы он понятно объяснил...
Вы бы лучше спрашивали, что не понятно, а не "увиливали" бы от сложных и невыполнимых на ваш взгляд задач :)
Контактная информация:
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

Сообщение Совесть »

siamds писал(а):результат работы программы проверенный на тестовой плате, а не в Proteuse (это для Совести).
:))) ок, теперь вы меня убедили, 10-и битная точность АЦП AVR это не миф, а реальность! Отошлите эту фотографию в Atmel, пусть в свой даташит вставят вместо непонятных циферок!
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

КРАМ писал(а):Для его формирования нужно каждое преобразование писать в буфер нужной длины просто по кольцу (инкрементируя указатель по кругу). И ПОСЛЕ КАЖДОГО ИЗМЕРЕНИЯ, после занесения очередного измерения в буфер, находится сумма всех элементов массива-буфера и делится на длину буфера (сдвигом или делением, зависит от выбранной длины)
Вроде как ЭТО и есть нахождение среднего -- сумму на кол-во!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Собственно да. Только буфер Вам не нужен , лишнее это - писать в него потом считывать . Возьмите младшие регистры и сразу суммируйте, ну а затем - делите или как я уже писал - умножайте.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

А старшие регистры?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Они для более важных дел пригодятся. Функций у них больше , чем у младших.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

А до скольки младшие могут досчитать?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25412
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

просто КОТ писал(а):
КРАМ писал(а):Для его формирования нужно каждое преобразование писать в буфер нужной длины просто по кольцу (инкрементируя указатель по кругу). И ПОСЛЕ КАЖДОГО ИЗМЕРЕНИЯ, после занесения очередного измерения в буфер, находится сумма всех элементов массива-буфера и делится на длину буфера (сдвигом или делением, зависит от выбранной длины)
Вроде как ЭТО и есть нахождение среднего -- сумму на кол-во!
Федот, да не тот...
Не любое среднее будет правильным результатом. Не любое среднее даст плавное (гладкое) изменение результата при шумовых компонентах во входном сигнале и его изменении.
Еще раз предлагаю разобраться с проблемой. Она достаточно проста и результат Ваших трудов сейчас решит многие проблемы в будущем.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

А не проще ли бороться с шумом схематически -- поставить например кондёр, параллельно входу против ВЧ помех и т.д.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Ну это Вам решать , сколько. Например для пяти регистров 4 294 967 296
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

КРАМ писал(а):Не любое среднее даст плавное (гладкое) изменение результата при шумовых компонентах
А оно мне надо?! Мне надо 1 результат точный и всё.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25412
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

просто КОТ писал(а):А не проще ли бороться с шумом схематически -- поставить например кондёр, параллельно входу против ВЧ помех и т.д.
Конденсатор на входе сам по себе никаким внятным фильтром не будет. Фильтрация входного сигнала аппаратными способами с даже с качеством простейшего КИХ с прямоугольным окном потребует невменяемого количества ОУ и подбора коденсаторов и резисторов.
Опять же ЗАЧЕМ городить даже единственный конденсатор, когда программная реализация ВООБЩЕ НЕ ТРЕБУЕТ никаких схемотехнических затрат?
В третий раз предлагаю Вам разобраться с ОЧЕНЬ простой в реализации задачей.
Если есть желание, могу привести графическое описание сего действа...
Вы знакомы с косвенной адресацией массивов? Вы знаете что такое указатель на элемент массива?
Ну или может Вы знакомы с АСМом для используемых Вами контроллеров?
Один точный результат принципиально невозможен без фильтрации. Вы получите конечно точный результат на одном измерении, но Вам эта точность не понравится. АЦП тупо преобразует РЕАЛЬНЫЙ сигнал на входе, а не Вашу МОДЕЛЬ, которую Вы домыслили.
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Тогда объясните пожалуйста поподробнее! Мне очень трудно понимать пока!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Ответить

Вернуться в «AVR»