АЦП в ATMEGA 8535 нестабильные показания
- Сообщения: 5
- Зарегистрирован: Пт июл 11, 2014 17:57:21
Доброго времени суток:) я тут новый, так что мяу:) работаю я автоэлектриком, собрал себе стенд для заправки кондиционеров. долго изучал тензодатчики, операционные усилители, в конце концов была собрана плата, заказаны все недостающие детали. и что вышло: показания веса на дисплее прыгают туда-сюда, в довольно большом пределе, около 300 гр. что то читал про "шумящие биты" в ацп, но толком не понял. помогите пожалуйста разобраться. буду очень признателен.
- Реклама
вопросы по схеме и разводке
1 развязка МК и силовой части
2 насколько чистое питания аналоговой части МК
3 "чистый" земляной полигон под МК
4 "чистый" земляной полигон под аналоговой частью схемы
1 развязка МК и силовой части
2 насколько чистое питания аналоговой части МК
3 "чистый" земляной полигон под МК
4 "чистый" земляной полигон под аналоговой частью схемы
Ещё бы неплохо было бы вход АЦП зашунтировать конденсатором...
- Сообщения: 5
- Зарегистрирован: Пт июл 11, 2014 17:57:21
что касается схемы, то у меня ее нет:):):) собирал слету на монтажной плате. питание пробывал менять, вплоть до того, что на батарейках запускал. плата с операционным усилителем для тензодатчика отдельно собрана. я читал, что "шумит" сам ацп, можно усреднить програмно, но как это сделать - ума не приложу:)
еще раз на счет схемы - закончу, выложу и схемы и прошивки и исходники. думаю будет интересно
еще раз на счет схемы - закончу, выложу и схемы и прошивки и исходники. думаю будет интересно
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:29:09, всего редактировалось 1 раз.
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
- Реклама
Запускаете цикл for на определённое количество шагов, в цикле с каждымsaund7901 писал(а): можно усреднить программно, но как это сделать
шагом суммируете значения АЦП, по завершению цикла делите получившийся результат на
количество шагов цикла.
- Сообщения: 5
- Зарегистрирован: Пт июл 11, 2014 17:57:21
добрый день:)
у меня это выглядит так:подскажите, как именно мне заставить контроллер среднее вычислять!
работаю в баскоме, новичек-самоучка, это только третий мой самостоятельный проэкт
у меня это выглядит так:
Код: Выделить всё
Tenzo:
Vesiz = Getadc(0)
If Vesiz < 440 Then Vesiz = 440
Vesiz = Vesiz - 440
Vesiz = Vesiz * 16
Waitms 500
Y = Str(vesiz)
Y = Format(y , "00.000")
Locate 2 , 1
Lcd Y
Returnработаю в баскоме, новичек-самоучка, это только третий мой самостоятельный проэкт
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:29:47, всего редактировалось 1 раз.
Причина: Тег Code
Причина: Тег Code
Код: Выделить всё
Start Adc
By1 = 0
For Schet = 1 To 100
Temp = Getadc(0)
By1 = By1 + Temp
Next
W_adc = By1 / 100
Cls
Lcd W_adc ;- Сообщения: 5
- Зарегистрирован: Пт июл 11, 2014 17:57:21
огромное спасибо, Adagumer, ваш пример помог мне разобраться. немного поменял алгоритм опроса тензодатчика, все заработало, показания стабилизировались. стенд сдан в эксплуатацию. если будет интересно, то могу написать статью про него и выложить модели в протеусе и исходники. из моих проектов есть еще контроль запуска двигателя авто одной кнопкой (не отличишь от лексуса или бмв), управление вентиляцией и заслонками на котле под твердое топливо(в боксе такой стоит, после доработки повысилась теплоотдача и выровнялся расход топлива или электроэнергии) ну и стенд для чистки форсунок на бензиновых авто. опять же, могу выложить, если будет интерес у котов, лиш бы сильно не пинали:)
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:30:18, всего редактировалось 1 раз.
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
По Баскому есть специализированный ресурс:
http://bascomavr.3bb.ru/
http://bascomavr.3bb.ru/
Кстати, для бОльшей точности рекомендуется мегу на время измерения отправлять в слип, для этого есть специальный режим. Не уверен, что это есть в 8535, в 88 и выше точно есть.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
- Сообщения: 7
- Зарегистрирован: Пн июл 28, 2014 12:26:37
Стабильность показаний АЦП-во первых-всего 10 бит-соответственно плавают младшие разряды
Во вторых-каково значение и стабильность опорного внешнего ИОНа?-источника опорного напряжения-
Зная полный диапазон сигнала тензодатчика-и зная опорное напряжение-вычислите значение показаний, приходящихся на младший разряд
Третье-как преобразуете полученное значение в нужный формат-нет ли ошибок
Режим сна в меге8535 есть-я его использую:
Фрагмент программы для меги8535:Для указанного фрагмента в таблице векторов прерываний напротив прерывания от ADC - ставим RETI
ВАЖНО!!!
Столкнулся с таким глюком-при нулевом входном сигнале АЦП показывает некую величину-это связано с тем, что при определении портов АЦП как входы - далее в регистр PORTA были записаны единицы-что привело к подключению внутренних подтягивающих резисторов-а они в свою очередь совместно с внутренним выходным сопротивлением источника сигнала образовали делитель напряжения-что и привело к этому явлению-поэтому, при описании портов АЦП в начале программы-НЕ ЗАПИСЫВАЙТЕ единицы в регистры PORTX-пишите нули-тогда не будет проблем с ненулевыми показаниями АЦП при отсутствии сигнала
Далее-совет:
При циклической основной программе и опросе нескольких портов АЦП за цикл программы-может тупо не хватить времени цикла
программы на опрос всех портов-поэтому я в своей программе использую арбитраж-последовательный опрос по одному каналу в каждом цикле программы
Во вторых-каково значение и стабильность опорного внешнего ИОНа?-источника опорного напряжения-
Зная полный диапазон сигнала тензодатчика-и зная опорное напряжение-вычислите значение показаний, приходящихся на младший разряд
Третье-как преобразуете полученное значение в нужный формат-нет ли ошибок
Режим сна в меге8535 есть-я его использую:
Фрагмент программы для меги8535:
Код: Выделить всё
ldi temp, 0x02 ;- выбор канала ADC2+внешний REF
out ADMUX, temp ;- выбираем канал ADC2 и коэффициент деления предделителя
rcall measpress ;- вызов подпрограммы запуска АЦП
sleep ;- переход в спящий режим
cont_u_adc:
in temp, ADCL ;- считывание данных АЦП из младшего регистра
mov r26, temp ;- перемещение в нижний регистр данных напряжения
in temp, ADCH ;- считывание данных АЦП из старшего регистра
mov r27, temp ;- перемещение в верхний регистр данных напряжения
......
где:
measpress:
ldi temp, 0x8F ;
out ADCSRA, temp;-включаем АЦП и разрешаем прерывание от АЦП
in temp, MCUCR ;
andi temp, 0xC3 ;- очистка 7-4 биты
ori temp, 0x28 ;
out MCUCR, temp ;- разрешение перехода в спящий режим ADC
ldi temp, 0xCF ;
out ADCSRA, temp;- старт преобразования
ret ;- выход из подпрограммыВАЖНО!!!
Столкнулся с таким глюком-при нулевом входном сигнале АЦП показывает некую величину-это связано с тем, что при определении портов АЦП как входы - далее в регистр PORTA были записаны единицы-что привело к подключению внутренних подтягивающих резисторов-а они в свою очередь совместно с внутренним выходным сопротивлением источника сигнала образовали делитель напряжения-что и привело к этому явлению-поэтому, при описании портов АЦП в начале программы-НЕ ЗАПИСЫВАЙТЕ единицы в регистры PORTX-пишите нули-тогда не будет проблем с ненулевыми показаниями АЦП при отсутствии сигнала
Далее-совет:
При циклической основной программе и опросе нескольких портов АЦП за цикл программы-может тупо не хватить времени цикла
программы на опрос всех портов-поэтому я в своей программе использую арбитраж-последовательный опрос по одному каналу в каждом цикле программы
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:31:16, всего редактировалось 1 раз.
Причина: офрмляем исходники, заключая их в тег Code
Причина: офрмляем исходники, заключая их в тег Code


