Доброго времени всем! На Atmega8A использую АЦП со скоростью преобразования около 80кгц, опорное 5вольт. Делаю 64 измерения, потом усредняю. И в итоге показания могут отличаться в 3-4 раза. Проверял мультиметром и осциллографом входное напряжение стоит на месте. У кого какие идеи есть, как это исправить?
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
МК покупали у китайцев? Покупал я как-то у китайцев ATMega8A-PU, всё вроде бы нормально, но вот с работой АЦП были подобные проблемы у всей партии. Покупка партии МК здесь на базаре радиокота решила все проблемы. Партия МК с китая успешно работают в других устройствах, где не задействован АЦП.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
RUNA, такое ощущение, что вы комсомолец на допросе в гестапо. Как подключен AVCC, AREF ? Покажите фрагмент кода, где вы инициализируете АЦП, где читаете и как усредняете... В перерывах между измерениями с АЦП что то делается? ADCSRA и ADMUX остаются те же, что и при инициализации? Дорожки от вашего датчика и к ноге МК длинные? Не могут ли быть на них наводки от соседних дорог ? Какой резистор подтяжки у вашего термодатчика ? Суть - чем больше вы покажете информации, тем быстрее вам помогут локализовать проблему.
Есть ли у вас возможность проверить ваш алгоритм на другом МК? На той же меге в макетке или андурине ?
Инициализация clr temp sbr temp,(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) out ADCSRA,temp clr temp sbr temp,(1<<REFS0) out ADMUX,temp
Считывание показаний и усреднение когда сложим 64 показания sbi ADCSRA,ADIF ldi ZL,Low(Summa_ADC_t) ldi ZH,High(Summa_ADC_t) in r20,ADCL in r21,ADCH ld temp1,Z+ ld temp,Z add temp,r20 adc temp1,r21 st Z,temp st -Z,temp1
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
так. Пишем в ADCSRA делитель (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) - это делитель тактовой 128. При 8 МГц / 128 тактовая АЦП - 62.5 кГц. При 16МГц - 125 кГц. Норм.
Далее. Поднимаем в ADMUX бит REFS0. Ок, опора - питальник с кондером на AREF. Вход исключительно PORTC0. (хотя судя по обрывку схемы, вы планируете читать 8 датчиков)
Вопрос номер раз. PORTC0 сконфигурирован как вход без подтяжки?
Вопрос номер два. Я не вижу в инициализации поднятия бита ADEN в регистре ADCSRA. Т.е. после инициализации АЦП остается выключен!.
Вопрос номер три. Я нигде не вижу запуск преобразования АЦП (установка ADSC в ADCSRA).
Замечание номер четыре. После включения АЦП (ADEN) нужно выполнить холостое преобразование, ибо его результат будет далек от ожидаемого..... Кстати, где то на просторах сети натыкался, что если мерять несколько разных аналоговых сигналов, то после переключения входа АЦП тоже нужно запустить холостое преобразование... Какое то объяснение этому тоже вроде было - перезарядка входной емкости устройства выборки-хранения АЦП....
так. Пишем в ADCSRA делитель (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) - это делитель тактовой 128. При 8 МГц / 128 тактовая АЦП - 62.5 кГц. При 16МГц - 125 кГц. Норм.
Далее. Поднимаем в ADMUX бит REFS0. Ок, опора - питальник с кондером на AREF. Вход исключительно PORTC0. (хотя судя по обрывку схемы, вы планируете читать 8 датчиков)
Вопрос номер раз. PORTC0 сконфигурирован как вход без подтяжки?
Вопрос номер два. Я не вижу в инициализации поднятия бита ADEN в регистре ADCSRA. Т.е. после инициализации АЦП остается выключен!.
Вопрос номер три. Я нигде не вижу запуск преобразования АЦП (установка ADSC в ADCSRA).
Замечание номер четыре. После включения АЦП (ADEN) нужно выполнить холостое преобразование, ибо его результат будет далек от ожидаемого..... Кстати, где то на просторах сети натыкался, что если мерять несколько разных аналоговых сигналов, то после переключения входа АЦП тоже нужно запустить холостое преобразование... Какое то объяснение этому тоже вроде было - перезарядка входной емкости устройства выборки-хранения АЦП....
Частота 11.0592Мгц Да планирую 8 входов измерять, но пока с одним маюсь. PORTC0 вход без подтяжки. Запуск АЦП происходит в прерывание таймера.
Холостое преобразование не делал. Попробую. Но врятли это поможет. Даже если первое преобразование кривое то на сумму в 64 измерения сильно не повлияет. Сумма измерений скачет от 40600 до 0. Кондер на AREF вешал, не помогает. Сейчас поеду куплю новый мк, но mega8. И попробую. Может действительно глючная.
_________________ Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник". Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
RUNA, Включите АЦП при инициализации и больше его не выключайте. В прерывании дергайте только старт преобразования.
И, кстати, вы окончание преобразования продолжаете ждать там же, в прерывании таймера ? Если да, то это не совсем правильно. У вас всё стоит, пока вы ждете результат АЦП. Лучше сделайте отдельное прерывание для АЦП.
Тогда в таймере дёрнете старт. А АЦП как посчитает - вызовет свое прерывание, где вы уже и будете суммировать результат. Там же потом можете переключать MUX.
Кондер на AREF повесьте - это прямое требование даташита. 0.1 мкф керамику.
Думаю, для начала нужно вообще убрать усреднение. 4, 5 разрядов будут болтаться от помех, можно будет вычистить аппаратно. Сейчас непонятно. По мне, дело в программе. Не может так работать АЦП.
Самсусамыч, тактовая 11 мгц, делитель АЦП 128. Тактовая для АЦП = 11 мгц/128 = 85,9 кгц, соответственно, период тактовой чуть менее 12 мкс. АЦП для первого измерения надо 25 тактов - это около 290 мкс, для последующих - 13 тактов - это порядка 150 мкс. так что в 8 мс уложится. Я так думаю, что это единичные измерения каждые 8 мс. тем более на фрагменте кода автор показывал, что сбрасывает флаг ADIF, т.е. он его где то проверяет
Вообще тут приходится гадать на кофейной гуще - ибо весь код, относящийся к работе с АЦП, автор так и не показал. Мне что то подсказывает, что если автор включает АЦП перед каждым измерением, а потом тут же выключает - то это тоже может влиять.
Откуда взяли такую тактовую частоту? Я просмотрел сообщения и не увидел где это указанно.
Цитата:
АЦП для первого измерения надо 25 тактов - это около 290 мкс, для последующих - 13 тактов - это порядка 150 мкс. так что в 8 мс уложится.
Может и так, но в прерывании по АЦП как правило ещё дополнительно что-то делают… выгружают в стек, а затем возвращают необходимые данные обратно… переключают входа мультиплексора и тп. Хотя да полной картины нет, а гадать на кофейной гуще дело не благодарное.
ЗЫ. Можно было бы лучше написать тестовую прошивку для проверки работы АЦП с выводом информации по UART… тогда было бы виднее что происходит со значениями.
Последний раз редактировалось Самсусамыч Сб янв 11, 2020 20:10:49, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения