Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Вопрос по ADC


Вопрос по ADC

Сообщений 1 страница 15 из 15

1

Добрый день!

Горожу девайс atmega8a на три канала: частотомер, генератор, две линии "вольтметра". С задачей и измерением частоты, в каком-то смысле, разобрался, а вот с работой ADC незадача.
Схема включения к каналам ADC:
http://se.uploads.ru/t/bD5mi.jpg
Диоды от переплюса, стабилитроны...на всякий. Аналоговые и цифровые линии разнесены, полигоны земли большие.

Конфигурация и опрос ADC:

ADC

---до DO-LOOP---
Config Adc = Free , Prescaler = 32 , Reference = Aref
---где-то потом в рабочем цикле---
A5 = Getadc(5)
A4 = Getadc(4)
Print "ADC;" ; A5 ; ";" ; A4 ; ";"

Aref - зацеплен 5 В через конденсатор.

Косяк в том, что в железе происходит ерунда:
- к входам АЦП ничего не подключено: A4 прыгает около 30, А5 - около 0-2,
- на А4 повесил пачку старых батареек на 2,56 В (так показал мультиметр), А4 кажет около 500; на правду похоже и А5 молчит: прыгает цифра 0-2,
- вешаю эту же пачку на А5: А5 ~ 170, A4 ~ 150. На А5=170 согласен (номиналы не точные), но вот откуда 150 на А4? Физически, напряжение на лапе отсутствует.
Задержки между опросами ставил, предделитель изменял, уже и стабилитроны отпаял.

Что это может быть? Барсик 2.0.7.1.

Отредактировано TIM-SHI (2015-02-11 14:27:47)

0

2

вообще-то Aref соединяется с землей через емкость 0,1 мк

0

3

Выдержка из datasheet'a:
http://se.uploads.ru/t/7aAGw.jpg

Понимаю так:
- либо опора на AVCC с AREF соединенным с землей через емкость,
- "The internal voltage reference options may not be used if an external reference voltage is being applied to the AREF pin" либо могу задать опорное напряжение на лапу AREF, что и сделано.
Да и масштабирует более-менее адекватно.

Но даже если косяк с ИОН, какого  :mad:  в отсутствии сигнала на 4ом канале при подключенном 5ом чип видит что там что-то есть? Грешным делом думаю, не глюк ли Bascom'a?

0

4

Mrshilov написал(а):

Промыть плату спиртом, поставить резистор от ADC4 на землю.

Платы изопропилом мою после монтажа. Сопротивление, где резонно, между проводниками измерено - по нолям.
Что толку линию в землю сажать, если на ней нет ничего? Все-таки, не цифровой вход...Ну да ладно: попробовал - не помогло (благо плата позволила кинуть провод-перемычку и резюк в землю развернуть). А4 по воздуху стал правда не 30, а, где-то, 10 показывать.

Ради интереса, включил в опрос двух соседей: А3 и А2. Перевел ADC на Single. Задержка между опросами 20 мс. Дал на 4ый ~2,8 В (остальные в воздухе):
ADC;0;591;438;155; (5ый - 2ой по порядку)
3ий и 2ой просто висят в воздухе и никуда не подключены. На входах - по нолям (уже и осцилем посмотрел).

Чего-то я совсем потерялся в догадках.

Упс. Развернул резюк, да не на землю: полигон в воздухе висел. Теперь на земле - помогло.
Вопрос - почему? Разве аналоговый вход реально необходимо в землю утягивать при отсутствии входного сигнала? Наводок-то, ощутимых, тоже нет. Ранее делал нечто подобное, но там все шесть входов были с делителем (ну и одно плечо, что понятно, утягивало в землю) и как-то не столкнулся с таким эффектом.

Отредактировано TIM-SHI (2015-02-11 21:31:05)

0

5

Вход имеет какую-то ёмкость, а входное сопротивление очень большое, вот Вы кулончики и меряете по ветру. Ветер дунул на север, их сдуло чуть- чуть, АЦП меньше показал. :flirt:

0

6

kip написал(а):

Вход имеет какую-то ёмкость, а входное сопротивление очень большое, вот Вы кулончики и меряете по ветру. Ветер дунул на север, их сдуло чуть- чуть, АЦП меньше показал.

Доступно. Никогда бы не подумал, что "оно" на АЦП до трети шкалы даст o.O 

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

0

7

Ну пальцем можно и КМОП из строя вывести, а там ( в советских вариантах точно) до 30 вольт выдерживает.

0

8

У меня вопрос. Серия 48\88\168\328. При замере внутренней опорки w=GetADC(14) c первого раза не получается получить правильные показания. Что бы показания были правильные нужно дать команду два раза. При  этом в протеусе всё нормально, а в железе только два раза.

Код:
   Gosub Кнопки        - здесь опрос кнопок Getadc(1), работает правильно
  W = Getadc(14)                - первый раз брешет                         
   W = Getadc(14)               - второй раз правильно
 W = Getadc(6)                   - измеряет правильно.

В чём может быть нюанс?

0

9

Prescaler = Auto попробуйте

0

10

Mrshilov написал(а):

внутреннему источнику требуется время на установку.

Я сначала тоже так подумал, но судя по этому, перед Getadc(14), происходит считывание из Getadc(1).

kip написал(а):

Gosub Кнопки        - здесь опрос кнопок Getadc(1), работает правильно
  W = Getadc(14)                - первый раз брешет

0

11

Т.е. д думаю понятно, что что бы замерить напряжение питания контроллера, опорку подключаем на Аvcc.

Код:
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'конфигурация АЦП

Дальше тут ни чего не меняем. Кнопки меряем(тут пофиг, для клавиатуры), далее меряем опорку 1,1 вольт. (Getadc(14)). вычисляем напряжение питания, далее меряем W = Getadc(6) - (это замер батарейки RTC)_, и вычисляем напряжение батарейки, зная уже напряжение питания. Так вот когда подключаемся к опорке 1,1 вольт, до этого она не включена была? Т.е. когда мы её запрашиваем, сначала на неё подаётся ток? Это логично в целях энергосбережения. Тогда это объясняет ошибочные первые показания.

Отредактировано kip (2015-02-12 21:19:42)

0

12

ну вообще при измерение уж питания, никто по одному измерению логику не строит)
обычно делается N измерение, а потом находится среднее арифметическое

0

13

Странно, что Вы не знаете этой фишки.
Reference = Avcc ставится один раз и больше не меняется . Дальше мы меряем 1.1 вольт относительно напряжения питания.  Формула только меняется.  Ещё один момент - при нехватке ног, можно Aref использовать как вход АЦП.(к примеру подключить ту-же клавиатуру на резисторах)
RDW, всё оно хорошо, но иногда памяти в обрез или времени , цикл тулить. Потом , по опыту знаю, при правильной разводке питания, достаточно одного замера ацп, что-бы замерить точно напряжение в границах "0,00".  Вот и клавиатура у меня на резисторах - ацп -еденицы только прыгают.
Мне просто интересно, почему так с первым замером? Думаю время на установку напряжение 1.1 и есть объяснение.
З.Ы.
вот, нашёл про замер напруги
Ссылка

Отредактировано kip (2015-02-12 22:40:30)

0

14

По поводу ADC(14) в документации   стр. 243 п.п. 24.5.2, чётко написано, пропускать первый замер (The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.)

По поводу Протеуса, модель AVR2 выпущена с ошибками, обещали устранить в версии 8.1, но пока не сделали.

Отредактировано sasha_1973 (2015-02-13 00:06:15)

0

15

kip написал(а):

RDW, всё оно хорошо, но иногда памяти в обрез или времени , цикл тулить. Потом , по опыту знаю, при правильной разводке питания, достаточно одного замера ацп, что-бы замерить точно напряжение в границах "0,00".  Вот и клавиатура у меня на резисторах - ацп -еденицы только прыгают.
Мне просто интересно, почему так с первым замером? Думаю время на установку напряжение 1.1 и есть объяснение.

Насколько память не изменяет, у АЦП есть холодный старт. Кто мешает перед запуском инициализировать и прогревать всё. ;)
Потом на счет одного измерения, смотря где использовать и что мерить, я не раз делал устройства при работе от аккумуляторов и там на одном измерении никуда не уедешь, есть элементарные просадки/помехи по питанию, которые надо сглаживать, иначе бывают просто смешные случае, что устройство даже не включается из-за ошибки алгоритма. Да и при нагрузке всегда есть время которое требуется стабу для понятия что стабилизировать...

На протеус не опирайтесь, голая синтетика, там не вся физика радиоэлемента учитывается (это давно известно).

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Вопрос по ADC