Atmega8A и АЦП скачут показания

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Доброго времени всем!
На Atmega8A использую АЦП со скоростью преобразования около 80кгц, опорное 5вольт. Делаю 64 измерения, потом усредняю. И в итоге показания могут отличаться в 3-4 раза. Проверял мультиметром и осциллографом входное напряжение стоит на месте. У кого какие идеи есть, как это исправить?
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

RUNA писал(а):У кого какие идеи есть, как это исправить?
Надо найти причину такого поведения и устранить ее.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

покажите схему и код инициализации и работы с АЦП хотя бы...
а то телепаты все на каникулы разъехались....
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Измеряю напряжение от датчика температуры lm135 подключен по стандартной схеме из ДШ. Преобразование запускаю по таймеру, каждые 8мс.
Вложения
LM335.jpg
(5.77 КБ) 287 скачиваний
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Сообщение korob »

МК покупали у китайцев? Покупал я как-то у китайцев ATMega8A-PU, всё вроде бы нормально, но вот с работой АЦП были подобные проблемы у всей партии. :evil: :kill: Покупка партии МК здесь на базаре радиокота решила все проблемы. :)) Партия МК с китая успешно работают в других устройствах, где не задействован АЦП. :roll: :dont_know:
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Я не знаю откуда партия. Покупал в Микронике СПб.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

откуда берется опорное для АЦП?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Опорное внутреннее.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

RUNA, такое ощущение, что вы комсомолец на допросе в гестапо.
Как подключен AVCC, AREF ?
Покажите фрагмент кода, где вы инициализируете АЦП, где читаете и как усредняете...
В перерывах между измерениями с АЦП что то делается? ADCSRA и ADMUX остаются те же, что и при инициализации?
Дорожки от вашего датчика и к ноге МК длинные? Не могут ли быть на них наводки от соседних дорог ?
Какой резистор подтяжки у вашего термодатчика ?
Суть - чем больше вы покажете информации, тем быстрее вам помогут локализовать проблему.

Есть ли у вас возможность проверить ваш алгоритм на другом МК? На той же меге в макетке или андурине ?
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Раньше не мог выложить, был на работе.

Инициализация
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

lds temp,Counter_ADC
inc temp
sts Counter_ADC,temp

cpi temp,64
breq PC+2
ret;

ldi ZL,Low(Summa_ADC_t)
ldi ZH,High(Summa_ADC_t)
ld temp1,Z+
ld temp,Z
ldi temp2,6
ADC_in_000://Усреднение
lsr temp1
ror temp
dec temp2
cpi temp2,0
brne ADC_in_000

Сопротивление к датчику 2ком питание 5в

Между измерениями и в момент измерений может работать SPI и UART
Вложения
Захват-2.jpg
(95.59 КБ) 253 скачивания
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

так. Пишем в 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) нужно выполнить холостое преобразование, ибо его результат будет далек от ожидаемого.....
Кстати, где то на просторах сети натыкался, что если мерять несколько разных аналоговых сигналов, то после переключения входа АЦП тоже нужно запустить холостое преобразование... Какое то объяснение этому тоже вроде было - перезарядка входной емкости устройства выборки-хранения АЦП....
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Код: Выделить всё

sbr temp,(1<<REFS0)
out ADMUX,temp
Кондер на Aref нужен.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Возможно, нет начальной установки, типа

Код: Выделить всё

;Инициализация

	clr temp
	STS	Counter_ADC,temp
	STS	Summa_ADC_t+0,temp
	STS	Summa_ADC_t+1,temp

sbr temp,(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)
......
......
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3771458#p3771458"]так. Пишем в 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) нужно выполнить холостое преобразование, ибо его результат будет далек от ожидаемого.....
Кстати, где то на просторах сети натыкался, что если мерять несколько разных аналоговых сигналов, то после переключения входа АЦП тоже нужно запустить холостое преобразование... Какое то объяснение этому тоже вроде было - перезарядка входной емкости устройства выборки-хранения АЦП....[/uquote]

Частота 11.0592Мгц
Да планирую 8 входов измерять, но пока с одним маюсь.
PORTC0 вход без подтяжки.
Запуск АЦП происходит в прерывание таймера.

Холостое преобразование не делал. Попробую. Но врятли это поможет. Даже если первое преобразование кривое то на сумму в 64 измерения сильно не повлияет. Сумма измерений скачет от 40600 до 0.
Кондер на AREF вешал, не помогает.
Сейчас поеду куплю новый мк, но mega8. И попробую. Может действительно глючная.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

RUNA, Включите АЦП при инициализации и больше его не выключайте.
В прерывании дергайте только старт преобразования.

И, кстати, вы окончание преобразования продолжаете ждать там же, в прерывании таймера ?
Если да, то это не совсем правильно. У вас всё стоит, пока вы ждете результат АЦП.
Лучше сделайте отдельное прерывание для АЦП.

Тогда в таймере дёрнете старт. А АЦП как посчитает - вызовет свое прерывание, где вы уже и будете суммировать результат.
Там же потом можете переключать MUX.

Кондер на AREF повесьте - это прямое требование даташита. 0.1 мкф керамику.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Думаю, для начала нужно вообще убрать усреднение. 4, 5 разрядов будут болтаться от помех, можно будет вычистить аппаратно. Сейчас непонятно. По мне, дело в программе. Не может так работать АЦП.
Самсусамыч

Сообщение Самсусамыч »

[uquote="RUNA",url="/forum/viewtopic.php?p=3771270#p3771270"]Преобразование запускаю по таймеру, каждые 8мс.[/uquote]
На сколько я могу предположить, для 64 измерений (преобразований) потребуется более 8 мс… или 8 мс это между каждым единичным измерением?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

Самсусамыч, тактовая 11 мгц, делитель АЦП 128. Тактовая для АЦП = 11 мгц/128 = 85,9 кгц, соответственно, период тактовой чуть менее 12 мкс. АЦП для первого измерения надо 25 тактов - это около 290 мкс, для последующих - 13 тактов - это порядка 150 мкс.
так что в 8 мс уложится. Я так думаю, что это единичные измерения каждые 8 мс.
тем более на фрагменте кода автор показывал, что сбрасывает флаг ADIF, т.е. он его где то проверяет

Вообще тут приходится гадать на кофейной гуще - ибо весь код, относящийся к работе с АЦП, автор так и не показал.
Мне что то подсказывает, что если автор включает АЦП перед каждым измерением, а потом тут же выключает - то это тоже может влиять.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Самсусамыч

Сообщение Самсусамыч »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3771924#p3771924"]Самсусамыч, тактовая 11 мгц[/uquote]
Откуда взяли такую тактовую частоту? Я просмотрел сообщения и не увидел где это указанно. :dont_know:
АЦП для первого измерения надо 25 тактов - это около 290 мкс, для последующих - 13 тактов - это порядка 150 мкс.
так что в 8 мс уложится.
Может и так, но в прерывании по АЦП как правило ещё дополнительно что-то делают… выгружают в стек, а затем возвращают необходимые данные обратно… переключают входа мультиплексора и тп. Хотя да полной картины нет, а гадать на кофейной гуще дело не благодарное.

ЗЫ. Можно было бы лучше написать тестовую прошивку для проверки работы АЦП с выводом информации по UART… тогда было бы виднее что происходит со значениями. :)
Последний раз редактировалось Самсусамыч Сб янв 11, 2020 20:10:49, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

Самсусамыч, на два сообщения выше вашего вопроса про 8 мс
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Ответить

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