АЦП. Разбор полётов

Обсуждаем контроллеры компании Atmel.
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

siamds писал(а):Уважаемый просто КОТ! Я уже высылал на форум рабочую проверенную программу...
Ваша "рабочая проверенная" - это та, что просто КОТ выложил в посте viewtopic.php?p=1378271#p1378271 ?
Imho, Вы несколько погорячились со своим утверждением, поскольку функция led_show работает неправильно:
- если код АЦП будет >= 700, то гореть будут 3 светодиода, а не один.
- если код АЦП будет >=640, то гореть будут 2 светодиода

Требовалось то зажечь один из. И, кстати, речь вроде шла о 4 светодиодах:
просто КОТ писал(а):Надо через АЦП смотрет напряжение на делителе и в зависимости от напряжения зажигать один из 4 светодиодов!


И зачем функция read_adc записывает значение АЦП через глобальную переменную

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

ad=ADCW;

а потом еще и возвращает значение

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

return ADCW;

если она объявлена void?

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

void read_adc(void)


В остальной код и вникать не стал, смысла не вижу.
Последний раз редактировалось bolek Вт авг 21, 2012 16:24:44, всего редактировалось 2 раза.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Ну, столбик с накоплением это нормально -- не печаль. А 4 светодиод сюда добавит не проблема -- Ctrl+C, Сtrl+V и цифарку поправить. . .
Изображение
И ты врёшь!!! © Vladisman
Изображение
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

Дело не в столбике: дело в логической ошибке алгоритма.
Это я в магазине попрошу бутылку 0,5 коньяка, а мне продавец сунет литровый пакет портвешка: бери, его же больше и стоит дешевле :shock:

P.S. Ладно здесь задачка - фигня на палочке, но ведь siamds на полном серьезе уверен - он крут, а КРАМ - так себе, чайник начинающий. И даже не может представить, насколько ничтожны его знания и умения, например в сравнении с тем же КРАМ...
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: АЦП. Разбор полётов

Сообщение Барсик »

Про то, что функция, объявленная как void, возвращает что-то, я уже писал. Но там есть ещё интересные места. Например, в начале есть такие слова:

#define ADC_VREF_TYPE 0x00

А ближе к концу, такие:

ADMUX=ADC_VREF_TYPE & 0xff;

А теперь, внимание, вопрос. Чему равен ADMUX ? Правильно. Нулю. А это означает, что в качестве опорного выбрано напряжение питания, а в качестве входа АЦП линия ADC0, она же PB5, она же нога 1, она же RESET. Конечно, можно эту ногу использовать, но тогда придётся использовать высоковольтный программатор, чтобы перепрограммировать контроллер в случае чего...

Короче говоря, при использовании CodeWizardAVR надо обязательно проверять, чего он там нагенерил...
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

А можно так же доступно про моё творчество?! Ну, про о, что я из твоего кода сделал!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: АЦП. Разбор полётов

Сообщение Барсик »

А я уже об этом писал. Надеюсь, достаточно доступно: viewtopic.php?p=1378041#p1378041
И зря Вы комментарии повыкидывали. Они Вам мешали?
Аватара пользователя
siamds
Встал на лапы
Сообщения: 99
Зарегистрирован: Вт мар 20, 2012 20:50:22
Откуда: Краснодар

Re: АЦП. Разбор полётов

Сообщение siamds »

Уважаемый Просто Кот! Высылаю Вам доработанную программу. Чтобы Вам проще было разобраться в работе программы, программа снабжена подробными комментариями. Вам остается выставить пороги срабатывания.
Tinny_13.jpg
Схема соединений ATTINY_13
(35.75 КБ) 485 скачиваний

Напряжение порога срабатывания вычисляется следующим образом. У нас 10-ти разрядный ADC – это 1023 дискреты. Максимальное напряжение на PIN ADC 5вольт. Вычисляем сколько воль приходиться на дискрету, для этого 5 вольт / 1023 ≈ 0,00488758 вольта. Теперь вычисляем, при каком напряжении включиться светодиод D1. 0,00488758 х 600 ≈ 2,9325 вольта. Если возникнут вопросы – пишите.
Вложения
ATTiny_13.rar
(47.81 КБ) 187 скачиваний
На каждого Моцарта есть свой Сальери.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Высылаю Вам доработанную программу.
Странно как-то... Почему данные с АЦП читаются до преобразования ? :roll: Получается, что в ad пишется предыдущее значение. Зачем тогда зацикливать программу, ожидая окончания преобразования ?

И хочу, немного, Вас поправить. 10 бит - это не 1023, а 1024 дискреты. "0" забыли :)
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

Аlex писал(а):...И хочу, немного, Вас поправить. 10 бит - это не 1023, а 1024 дискреты. "0" забыли :)

:facepalm: :facepalm: :facepalm: !
Не надо его поправлять, все он правильно поделил: опорному напряжению 5 вольт соответствует код (число) 1023 для 10-битного АЦП.
1024 - это уже 11 бит.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Не надо его поправлять
Забыл Вас спросить :)))

напряжению 5 вольт соответствует код 1023
И что, что соответствует ? Дискрет то 1024. И делить нужно на 1024.
Идём все вместе курить матчасть :facepalm: :facepalm: :facepalm: !
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

Аlex писал(а):... Дискрет то 1024. И делить нужно на 1024.
Идём все вместе курить матчасть :facepalm: :facepalm: :facepalm: !

Если 10 бит много, чтобы понять свои заблужения, упростим АЦП до 2 бит.
Соответственно напряжению 5 В будет соответствовать код 3.
Величина ступеньки будет 5/3=1,6(6) В, а не 5/4=1,25 В.
Если снова непонятно, посмотрите картинку.
ADC.gif
(8.29 КБ) 455 скачиваний

P.S. Странно, что азбучные вещи приходится объяснять модератору.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25123
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: АЦП. Разбор полётов

Сообщение КРАМ »

bolek писал(а):Если снова непонятно, посмотрите картинку.

Изображение
:roll:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

P.S. Странно, что азбучные вещи приходится объяснять модератору.
Я бы на вашем месте не торопился с подобными высказываниями, а включил бы простую логику, которая у Вас , скорее всего, имеется, и попытался бы её применить. 10 бит - это 1024 части, так-же как и 2 бита - 4 части. Из этого следует, что Vref делить нужно не на 1023, а на всё кол-во частей, как бы странным это не казалось. Иначе "кому-то не достанется :hunger: "
Дело в том, что, когда АЦП нацифровал число 1023, это не значит, что напряжение на входе равно опорному (Vref), а значит, что оно находится в диапазоне от 1023/1024-ой части опорного напряжения и выше. Так же, как и значение кода 0x00 не является признаком нулевого напряжения на входе, а диапазоном от 0 до 1/1024 части опорного.
Т.е. ноль - это диапазон от 0 до 1/1024, еденица - это от 1/1024 до 2/1024, .... , 1023 еденицы - это от 1023/1024 и выше !
Нужно учитывать, что мы меряем сигнал дискретно, и эти дискреты являются диапазонами значений напряжения на входе, а не определёнными точками !
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Леонид Иванович »

Вот идеальная таблица "Вход - Выходной код" для 12-разрядного АЦП:

Изображение
Вложения
AD7892 (12 bit).gif
(14.67 КБ) 1187 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Леонид Иванович писал(а):Вот идеальная таблица "Вход - Выходной код" для 12-разрядного АЦП:
Ну вот, bolek, гляньте сноску, под таблицей, какова цена младшего бита.
Не зря же есть ИОНы на стандартное напряжение = 4.096V. Хотя 12 бит из всех еденичек = 4095 :)
Аватара пользователя
siamds
Встал на лапы
Сообщения: 99
Зарегистрирован: Вт мар 20, 2012 20:50:22
Откуда: Краснодар

Re: АЦП. Разбор полётов

Сообщение siamds »

Просто Кот! Я бы посоветовал установить Proteus. Это замечательный инструмент для проверки и наладки Ваших проектов. В нем можно промоделировать практически любой проект. Не надо ни паять, ни лудить, при ошибке в схеме Вы ничего не сожжете. Попробую убедить Вас примером. Мы с Вами вычислили, что при 600 дискретах напряжение должно быть 2,9325 вольт и зажечься светодиод D1. Проверяем Вашу программу в Proteus’e. Задаем напряжение на ADC2 - 2.9 вольта. Светодиод не горит (см.Рис_1)
Рис_1.jpg
(63.8 КБ) 452 скачивания

Добавляем напряжение и при напряжении 2.95 вольта светодиод D1 загорится (Рис_2).
Рис_2.jpg
(64.35 КБ) 459 скачиваний
Резюме: ничего не вычисляя, мы, проверили работу программы.

Alex. Чтобы доходчиво ответить на Ваш вопрос надо отправить на форум: структурную схему, осциллограмму обменных сигналов, расшифровку мнемоники обменных сигналов. Поверьте, для форума это не реально. Я ничего не изобретал нового, все это есть в учебниках, поэтому я бы посоветовал бы Вам обратиться к первоисточникам.

P.S. Просто Кот! А Вы проверяли работу программы которую я Вам выслал?
На каждого Моцарта есть свой Сальери.
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

Аlex писал(а):Ну вот, bolek, гляньте сноску, под таблицей, какова цена младшего бита
Глянул:
2.5/4096=0.0006103516
2.5/4095=0.0006105006
Так что это не аргумент.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: АЦП. Разбор полётов

Сообщение Goodefine »

bolek писал(а):...Так что это не аргумент.

Главное головой подумать, тогда и аргументов не понадобится. Третий класс, вторая четверть...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

Re: АЦП. Разбор полётов

Сообщение Совесть »

:dont_know: а не проще было открыть даташит на конкретный МК и посмотреть что в нем пишут? а то пошли примеры каких-то "левых" АЦП.
bolek
Сверлит текстолит когтями
Сообщения: 1178
Зарегистрирован: Пт авг 21, 2009 03:22:12

Re: АЦП. Разбор полётов

Сообщение bolek »

Goodefine писал(а):
bolek писал(а):...Так что это не аргумент.

Главное головой подумать, тогда и аргументов не понадобится. Третий класс, вторая четверть...

И вам того же: величина ступеньки не зависит от момента переключения - будет ли оно на половине младшего разряда, или непосредственно на младшем разряде.
Вот Вам еще пара картинок.
ADC2_2.GIF
(9.04 КБ) 718 скачиваний

ADC2_3.GIF
(9.1 КБ) 425 скачиваний

Если все еще не согласны, нарисуйте картинку со ступенькой 5/4=1.25 В, так чтобы напряжению 5 В соответствовал код 3.
Ответить

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