Перейти к содержанию
    

mega168 - скачет напряжение с АЦП

ADC.rar

Автор,

без схемы входа, значений резисторов в плечах делителя ADC и частоты ADC(какой делитель на какой частоте проца), типа канала (обычный/диф.), Ваш вопрос чисто абстрактный...

 

вкратце, конечно

Изменено пользователем kd_Rash

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный креатиффчик...

Непонятно тока зачем делать четыре измерения, заполняя буфер, а потом на пятый раз сдвигать все значения. При этом идет усреднение каждый раз. Может, стоит просто зациклить заполнение фильтра и каждый раз усреднять - получится обычный нерекурсивный фильтр.

А засада, может кроется в объявлениях переменных - есть у меня подозрение, что компилятор при входе в прерывание затрет переменные в 0. Надо сгенерировать ассемблерный код и посмотреть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по схеме у Вас есть много резервов для улучшения качества оцифровки.

1. Входной делитель с конденсатором приблизить к входу (смысл не масштабировать помеху).

2. Неиспользуемые входы АЦП шные посадить лучше на землю.

3. Резистор в делителе 7,5 кОм уменьшить, а опорное поднять.

4. На AVCC поставить конденсатор.

5. +5 В на коллекторы транзисторов отвести отдельно с 7805.

 

Это, что сразу бросилось в глаза. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А засада, может кроется в объявлениях переменных - есть у меня подозрение, что компилятор при входе в прерывание затрет переменные в 0. Надо сгенерировать ассемблерный код и посмотреть.
Там вобще-то static стоит, компилятор который в такой ситуации будет

обнулять переменные нужно просто выкинуть...

 

Автору:

- кондер на AVcc обязательно

- непонятно зачем между +5 и Avcc резистор 100 Ом, атмел рекомендует:

2. The AVCC pin on the device should be connected to the digital VCC supply

voltage via an LC network as shown in Figure 109.

L=10uH C=100nF

- неясно какая частота MCU, но например для 8MHz и выбраном Вами делителе 16

получаем fADC=8000000/16=500000 - многовато будет для 10bit точности.

- в тексте прерывания строка

if (t==0) {x1=ADCrez;}

не будет работать никогда, тк перед ней стоит t++;

и вобще не очень понятно что Вы хотели сделать...

если скользящее среднее, то там его нету...

 

- непонятно как объявлены ADCrez и k.

 

P.S. текст проги пишите в текстовом виде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вкратце, конечно

 

1. Да поставьте же ж Вы на АВЦЦ кондюка 2,2мкф! И, BTW, можно и без L=10uH. Сам ставлю 100 Ом ( из жадности :biggrin: ) и ниче...

2. Почему на AREF так мало (100н)? Никогда так не делал - все больше 10мкФ.

3. Так у Вас, оказывается, можно дрыгать ногами в одном месте программы!

Изменено пользователем _Pasha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вкратце, конечно

1. Да поставьте же ж Вы на АВЦЦ кондюка 2,2мкф!

Именно. Ну хоть какой-то на 18 ноге поставь!!!

3. Резистор в делителе 7,5 кОм уменьшить, а опорное поднять.

Лучше ТАК не делай ;) . Особенно в части понижения резистора...

 

5. +5 В на коллекторы транзисторов отвести отдельно с 7805.

То-же лучше не так. Переподключи коллекторы на +12 (туда где делитель) и замени 7805 на 78L05 (пусть лучше греется 4-е транзистора чем 1 стабилизатор). Можешь поставить по резистору в цепь коллектора. Повесь резисторы на землю на базах транзисторов.

 

Ну и самый неприятный вопрос заключается в том, что полный ток индикатора течет через землю твоего МК.... Не думаю, что это улучшит точность измерения напряжения измеряемого относительно той-же земли...

 

Перенеси электролит с выхода стабилизатора на вход. Поставь на входе стабилизатора керамику.

Резистор и электролит по цепи Reset выбрось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучше ТАК не делай ;) . Особенно в части понижения резистора...

Объясните поподробнее почему.

Туда не ходи, сюда ходи. Снег башка попадет - совсем мертвый будешь. (Джентальмены удачи.):)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо всем!

 

на ADC0 и на AREF поставил по кондеру по 2 мкф - не помогло

ADCrez и k - глобальные

t++ перенес, ошибся

 

короче разводка не очень удачная - надо как-то программным путем.

а мое усреднение не очень устраивает, т.к. изменения напряжения показываются с задежкой

 

да, забыл сказать, до этого у меня стояла мега8 - было все ок

и на схеме только показал работу АЦП, остальную переферию убрал для простоты.

т. ч. все ноги у меги заняты

 

повторюсь - стояла мега8 и без всякого усреднения напряжение не перескакивало.

выпаял ее и поставил 168-ю, изменив делитель под опорное 1,1В- 7,5 и 0.5 кОм (у 8меги - 2,56 было и в делители стояли 7,5 и 1 кОм)+ 2мкф.

Изменено пользователем kd_Rash

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

короче разводка не очень удачная - надо как-то программным путем.

а мое усреднение не очень устраивает, т.к. изменения напряжения показываются с задежкой

А какая задержка и на что она влияет ?

Если только на вывод на дисплей, то не надо так расстраиваться.

Когда от изменений на дисплее рябит в глазах - это очень плохо. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какая задержка и на что она влияет ?

Если только на вывод на дисплей, то не надо так расстраиваться.

Когда от изменений на дисплее рябит в глазах - это очень плохо. :)

да, но почему с мегой8-ой такого не было :crying:

хотелось бы понять(найти) причину

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы посчитайте какая постоянная времени получилась(да и было) у вашей входной цепи на ADC0 и прикиньте сколько усреднений вы успеете сделать пока установится новое напряжение на входе АЦП. Я думаю, что именно из-за этого у вас получаются задержки покизаний, а не из-за того что вы делаете программное усреднение. Кстати у атмела есть апноут про оверсемплинг - там рассказано как при усреднении можно получить дополнительные разряды преобразования АЦП, если мне не изменяет память если на 16 измерений получать 1 результат, то можно вытянуть один лишний разряд, т.е. получить 11бит преобразование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если мне не изменяет память если на 16 измерений получать 1 результат, то можно вытянуть один лишний разряд, т.е. получить 11бит преобразование

Здесь зависимость корень квадратный из количества показаний. Т.е. Сделав 100 усреднений, повысим точность в 10 раз.

PS. Вот ссылка на обсуждение цифровой фильтрации http://electronix.ru/forum/index.php?showt...4068&st=15#

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделав 100 усреднений, повысим точность в 10 раз

Нет, не так, опять же по памяти, при 256 измерениях получается 12 бит, а это всего в 4 раза против исходных 10бит, это цыфры из апнота атмеловского, там же есть и пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, не так, опять же по памяти, при 256 измерениях получается 12 бит, а это всего в 4 раза против исходных 10бит, это цыфры из апнота атмеловского, там же есть и пример.

А если считать исходно 8 бит (а 2 бита от лукавого), то и получается в 16 раз (а 2 бита от лукавого). :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...