Страница 9 из 13
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 16:15:51
bolek
siamds писал(а):Уважаемый просто КОТ! Я уже высылал на форум рабочую проверенную программу...
Ваша "
рабочая проверенная" - это та, что
просто КОТ выложил в посте
http://radiokot.ru/forum/viewtopic.php? ... 1#p1378271 ?
Imho, Вы несколько погорячились со своим утверждением, поскольку функция led_show работает неправильно:
- если код АЦП будет >= 700, то гореть будут 3 светодиода, а не один.
- если код АЦП будет >=640, то гореть будут 2 светодиода
Требовалось то зажечь
один из. И, кстати, речь вроде шла о 4 светодиодах:
просто КОТ писал(а):Надо через АЦП смотрет напряжение на делителе и в зависимости от напряжения зажигать один из 4 светодиодов!
И зачем функция read_adc записывает значение АЦП через глобальную переменную
а потом еще и возвращает значение
если она объявлена void?
В остальной код и вникать не стал, смысла не вижу.
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 16:19:28
просто КОТ
Ну, столбик с накоплением это нормально -- не печаль. А 4 светодиод сюда добавит не проблема -- Ctrl+C, Сtrl+V и цифарку поправить. . .
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 16:35:00
bolek
Дело не в столбике: дело
в логической ошибке алгоритма.
Это я в магазине попрошу бутылку 0,5 коньяка, а мне продавец сунет литровый пакет портвешка: бери, его же больше и стоит дешевле
P.S. Ладно здесь задачка - фигня на палочке, но ведь
siamds на полном серьезе уверен - он крут, а КРАМ - так себе, чайник начинающий. И даже не может представить, насколько ничтожны его знания и умения, например в сравнении с тем же КРАМ...
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 17:46:03
Барсик
Про то, что функция, объявленная как void, возвращает что-то, я уже писал. Но там есть ещё интересные места. Например, в начале есть такие слова:
#define ADC_VREF_TYPE 0x00
А ближе к концу, такие:
ADMUX=ADC_VREF_TYPE & 0xff;
А теперь, внимание, вопрос. Чему равен ADMUX ? Правильно. Нулю. А это означает, что в качестве опорного выбрано напряжение питания, а в качестве входа АЦП линия ADC0, она же PB5, она же нога 1, она же RESET. Конечно, можно эту ногу использовать, но тогда придётся использовать высоковольтный программатор, чтобы перепрограммировать контроллер в случае чего...
Короче говоря, при использовании CodeWizardAVR надо обязательно проверять, чего он там нагенерил...
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 17:48:56
просто КОТ
А можно так же доступно про моё творчество?! Ну, про о, что я из твоего кода сделал!
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 17:59:29
Барсик
А я уже об этом писал. Надеюсь, достаточно доступно:
http://radiokot.ru/forum/viewtopic.php? ... 1#p1378041
И зря Вы комментарии повыкидывали. Они Вам мешали?
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 23:01:28
siamds
Уважаемый
Просто Кот! Высылаю Вам доработанную программу. Чтобы Вам проще было разобраться в работе программы, программа снабжена подробными комментариями. Вам остается выставить пороги срабатывания.
- Tinny_13.jpg
- Схема соединений ATTINY_13
- (35.75 КБ) 494 скачивания
Напряжение порога срабатывания вычисляется следующим образом. У нас 10-ти разрядный ADC – это 1023 дискреты. Максимальное напряжение на PIN ADC 5вольт. Вычисляем сколько воль приходиться на дискрету, для этого 5 вольт / 1023 ≈ 0,00488758 вольта. Теперь вычисляем, при каком напряжении включиться светодиод D1. 0,00488758 х 600 ≈ 2,9325 вольта. Если возникнут вопросы – пишите.
Re: АЦП. Разбор полётов
Добавлено: Вт авг 21, 2012 23:10:02
Аlex
Высылаю Вам доработанную программу.
Странно как-то... Почему данные с АЦП читаются
до преобразования ?

Получается, что в
ad пишется предыдущее значение. Зачем тогда зацикливать программу, ожидая окончания преобразования ?
И хочу, немного, Вас поправить. 10 бит - это не 1023, а 1024 дискреты. "0" забыли

Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 04:57:13
bolek
Аlex писал(а):...И хочу, немного, Вас поправить. 10 бит - это не 1023, а 1024 дискреты. "0" забыли


!
Не надо его поправлять, все он правильно поделил: опорному напряжению 5 вольт соответствует код (число) 1023 для 10-битного АЦП.
1024 - это уже 11 бит.
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 05:10:18
Аlex
Не надо его поправлять
Забыл Вас спросить
напряжению 5 вольт соответствует код 1023
И что, что соответствует ? Дискрет то 1024. И делить нужно на 1024.
Идём все вместе курить матчасть

!
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 05:52:34
bolek
Аlex писал(а):... Дискрет то 1024. И делить нужно на 1024.
Идём все вместе курить матчасть

!
Если 10 бит много, чтобы понять свои заблужения, упростим АЦП до 2 бит.
Соответственно напряжению 5 В будет соответствовать код 3.
Величина ступеньки будет 5/3=1,6(6) В, а не 5/4=1,25 В.
Если снова непонятно, посмотрите картинку.
P.S. Странно, что азбучные вещи приходится объяснять модератору.
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 07:00:19
КРАМ
bolek писал(а):
Если снова непонятно, посмотрите картинку.

Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 11:30:30
Аlex
P.S. Странно, что азбучные вещи приходится объяснять модератору.
Я бы на вашем месте не торопился с подобными высказываниями, а включил бы простую логику, которая у Вас , скорее всего, имеется, и попытался бы её применить. 10 бит - это 1024 части, так-же как и 2 бита - 4 части. Из этого следует, что Vref делить нужно не на 1023, а на всё кол-во частей, как бы странным это не казалось. Иначе "кому-то не достанется

"
Дело в том, что, когда АЦП нацифровал число 1023, это не значит, что напряжение на входе равно опорному (Vref), а значит, что оно находится в диапазоне от 1023/1024-ой части опорного напряжения и выше. Так же, как и значение кода 0x00 не является признаком нулевого напряжения на входе, а
диапазоном от 0 до 1/1024 части опорного.
Т.е. ноль - это диапазон от 0 до 1/1024, еденица - это от 1/1024 до 2/1024, .... , 1023 еденицы - это от 1023/1024 и выше !
Нужно учитывать, что мы меряем сигнал дискретно, и эти дискреты являются
диапазонами значений напряжения на входе, а не определёнными точками !
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 12:06:06
Леонид Иванович
Вот идеальная таблица "Вход - Выходной код" для 12-разрядного АЦП:

Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 12:16:47
Аlex
Леонид Иванович писал(а):Вот идеальная таблица "Вход - Выходной код" для 12-разрядного АЦП:
Ну вот,
bolek, гляньте сноску, под таблицей, какова цена младшего бита.
Не зря же есть ИОНы на стандартное напряжение = 4.096V. Хотя 12 бит из всех еденичек = 4095

Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 13:21:08
siamds
Просто Кот! Я бы посоветовал установить
Proteus. Это замечательный инструмент для проверки и наладки Ваших проектов. В нем можно промоделировать практически любой проект. Не надо ни паять, ни лудить, при ошибке в схеме Вы ничего не сожжете. Попробую убедить Вас примером. Мы с Вами вычислили, что при 600 дискретах напряжение должно быть 2,9325 вольт и зажечься светодиод D1. Проверяем Вашу программу в
Proteus’e. Задаем напряжение на ADC2 - 2.9 вольта. Светодиод не горит (см.Рис_1)
Добавляем напряжение и при напряжении 2.95 вольта светодиод D1 загорится (Рис_2).
Резюме: ничего не вычисляя, мы, проверили работу программы.
Alex. Чтобы доходчиво ответить на Ваш вопрос надо отправить на форум: структурную схему, осциллограмму обменных сигналов, расшифровку мнемоники обменных сигналов. Поверьте, для форума это не реально. Я ничего не изобретал нового, все это есть в учебниках, поэтому я бы посоветовал бы Вам обратиться к первоисточникам.
P.S.
Просто Кот! А Вы проверяли работу программы которую я Вам выслал?
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 13:53:43
bolek
Аlex писал(а):Ну вот, bolek, гляньте сноску, под таблицей, какова цена младшего бита
Глянул:
2.5/4096=0.0006103516
2.5/4095=0.0006105006
Так что это не аргумент.
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 14:15:32
Goodefine
bolek писал(а):...Так что это не аргумент.
Главное головой подумать, тогда и аргументов не понадобится. Третий класс, вторая четверть...
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 14:45:22
Совесть

а не проще было открыть даташит на конкретный МК и посмотреть что в нем пишут? а то пошли примеры каких-то "левых" АЦП.
Re: АЦП. Разбор полётов
Добавлено: Ср авг 22, 2012 14:55:45
bolek
Goodefine писал(а):bolek писал(а):...Так что это не аргумент.
Главное головой подумать, тогда и аргументов не понадобится. Третий класс, вторая четверть...
И вам того же: величина ступеньки не зависит от момента переключения - будет ли оно на половине младшего разряда, или непосредственно на младшем разряде.
Вот Вам еще пара картинок.
Если все еще не согласны, нарисуйте картинку со ступенькой 5/4=1.25 В, так чтобы напряжению 5 В соответствовал код 3.