| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Atmega8: встроенный АЦП https://radiokot.ru/forum/viewtopic.php?f=57&t=1814 |
Страница 1 из 1 |
| Автор: | Pavel V. [ Ср сен 06, 2006 17:19:28 ] |
| Заголовок сообщения: | Atmega8: встроенный АЦП |
Впервые пришлось иметь дело со встроенным в атмегу АЦП, и заметил такую пакость - некоторые измерения получаются совершенно левыми. Т.е. получаем корректные данные раз 20 подряд, а потом - БАЦ - и какая-то хрень вылезает. Дальше снова нормальные результаты. Может быть какие-то есть схемотехнические приемы для уменьшения помех этих? Я просто ноги AREF и AVCC посадил на +5 В с конденсатором на землю 0,1 мкФ. Вот так инициализирую АЦП: // ADC initialization // ADC Clock frequency: 921,600 kHz // ADC Voltage Reference: AVCC pin ADMUX=0x40; ADCSRA=0x83; Это функция чтения результатов преобразования: unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } |
|
| Автор: | Aheir [ Ср сен 06, 2006 18:32:13 ] |
| Заголовок сообщения: | |
Лично я с таким не сталкивался... пока, по крайней мере. возможно, стоит использовать внутренний ИОН с подцепленным на Aref кондером или, что еще лучше, специализированный ИОН? насколько качественное питание используется для контроллера? Если источник импульсный - то я, в принципе, не удивлен... |
|
| Автор: | Pavel V. [ Ср сен 06, 2006 20:35:06 ] |
| Заголовок сообщения: | |
Питание от линейного стабилизатора, не импульсное. Про внешний ИОН думал.. Попробую. Но может быть все-таки еще какие решения есть? Меня напрягает то, что ошибочные преобразования случаются хаотично и они отдельные (т.е. проскочит раз и снова все нормально). Может быть какие-то хитрые временные интервалы нужно выдерживать между измерениями? |
|
| Автор: | teoretic [ Ср сен 06, 2006 21:29:15 ] |
| Заголовок сообщения: | |
Код: // ADC initialization
// ADC Clock frequency: 921,600 kHz // ADC Voltage Reference: AVCC pin ADMUX=0x40; ADCSRA=0x83; Сколько сколько частота преобразования? Я пробовал играться с 50кГц при 4Мгц ядра - вроде все работало при навесном монтаже. Для корректной работы рекомендуется до 200кгц(даташит). Для корректного преобразования необходимо, чтобы уровень напряжения был постоянным определенное время(13-25 тактов АЦП). Или хотя-бы достаточно медленно менялся... Техника защиты от помех(из разных источников) 1) почитать даташит про атмегу - там есть про PCB - экранировать аналоговую часть по мере возможности 2) почитать про питание ПЛИС и применить аналогичноую методику для ARef - навесить разных конденсаторов для сглаживания бОльшего числа гармоник. Мне хватило 0.1 и 1 мкф 3) ввести мегу в режим легкого аналогового посапывания - ADC Noise reduction - это отрубит цифровую ВЧ часть\ядро на время преобразования 4) ну и самое страшное временные интервалы-не нужно, т.к. есть режим непрерывного преобразования - одно кончилось - сразу началось другое. |
|
| Автор: | Сеня [ Ср сен 06, 2006 21:55:44 ] |
| Заголовок сообщения: | Re: Atmega8: встроенный АЦП |
Pavel V. писал(а): Может быть какие-то есть схемотехнические приемы для уменьшения помех этих? апноуты AVR040 AVR042 и раздел ДШ по АЦП используемого МК. Pavel V. писал(а): Я просто ноги AREF и AVCC посадил на +5 В с конденсатором на землю 0,1 мкФ. AREF нужноподключить через резистор или через индуктивность. Pavel V. писал(а): ADC Clock frequency: 921,600 kHz
это много. на вход тоже желательно конденсатор повесить. |
|
| Автор: | Anonimous [ Ср сен 06, 2006 22:16:49 ] |
| Заголовок сообщения: | Помеха? |
Понятно, что в даташите много всего написано на тему улучшения качества конверсии (и какой фильтр на AVcc повесить - емкость+индуктивность, и как усыплять процессор на время конверсии, чтобы не шумел зря, и что внутренний Vref куда лучше, чем Vcc, и что при >200КГц в качестве ADC clock не получится честных 10 бит, и прочее, и прочее)... И даже понятно, что именно оно и есть искомые "схемотехнические приемы". Но все это, похоже, к делу не относится - ведь помеха, чем бы она ни была, возникает редко, но сильно. С налету я бы проверил следующее: 1. Не стал бы пока для пущего спокойствия инициализировать ADC каждый раз (ADMUX=adc_input|ADC_VREF_TYPE; ) - просто для проверки, а если нужно даже во время экспериментов - то пропускал бы после инициализации один отсчет (если невовремя поменять выбранный канал - то можно получить отсчет с предыдущего). Но дело почти наверняка не в этом - я подозреваю, что эта процедура пока вызывается с одним и тем же каналом, да? 2. Включил бы ADC во free-running mode (чтобы исключить влияние любых манипуляций с его настройками), и посмотрел бы, тупо читая и проверяя результат почаще (и _ничего_ больше с АЦП не делая), что за сигнал там идет на самом деле (входную ногу привязал бы для начала к земле, потом к Vcc, и только потом к сигналу - мало ли, вдруг сигнал _и_правда_ такой?). И, конечно, очень сильно может быть, что это просто честная помеха. Ну, мало ли - наводка какая-нибудь от ближайшего электроприбора... Но это выяснится в пункте 2, я думаю. Как бороться, если это она? Экранировать, наверное - прибор в железный ящик... Для проверки - завернуть в бумагу, затем в фольгу У меня с ADC как раз на ATmega8L-8AI все нормально: +5V из розетки через трансформатор, диодный мост и линейный (обвешанный должными конденсаторами) стабилизатор, 8МГц внутренний clock, ADPS=0 (то есть 4МГц ADC clock), по 13 тактов АЦП (то есть 26 тактов процессора) на отсчет - в итоге 300K отсчетов в секунду. Vref - внутренний (и я даже поленился вешать на AVcc фильтр!), АЦП во free-running mode, чтобы ничего не проверять по дороге, и читаю я его строго раз в 26 тактов отполированным вручную циклом, чтобы обеспечить максимальную скорость захвата. Восемь бит там не получается, но никаких резких выбросов в случайные моменты нет, просто некий небольшой шум... |
|
| Автор: | Pavel V. [ Вс сен 10, 2006 12:33:21 ] |
| Заголовок сообщения: | |
Много всего перепробовал, так и не помогло. Пришлось программно отбрасывать некорректные результаты. |
|
| Автор: | moLCHec [ Чт сен 14, 2006 15:59:19 ] |
| Заголовок сообщения: | |
У меня подобная шляпа на m16 была . Вот из-за чего выяснилось . Я как написано в умной книжке запускал преобразование АЦП с спящем режиме, соответственно ток потребления менялся и из-за маленькой ёмкости в БП напруха питания чуть изменялась. Навешал кондеров и усё нормально бегает максимум +- 1 значение. Единственное что я так и не заставил его делать так эт из спящего режима ADC выходить ибо не герит и всё прерывание от АЦП. Использовал Igle благо у мя Т2 от внешнего кварца тикает. |
|
| Автор: | moLCHec [ Сб сен 16, 2006 07:10:07 ] |
| Заголовок сообщения: | |
Я думаю эт с железом чёто на m8 пробовал нормально. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


