Здравствуйте! Очень познавательные уроки. С работой АЦП по прерыванию, вроде как понятно. Но хотелось бы узнать, как можно брать значения АЦП в конкретном месте программного кода и из разных входов.
классно! очень понятно! USART, rs485 еслеб как-нибудь услышать..... :) TWI, I2C :) В атмел студио есть библиотеки на 1-wire. USART и т.д.... Может позже есть смысл вам привязываясь к ним объяснять остальные возможности... :) это как вариант.
Спасибо, все понятно разложили по полочкам. Но есть одно НО. Так как, я являюсь новичком, в программирование микроконтроллеров, то мне не все понятно. А точне, что вообще такое АЦП и каков принцип его работы?
Понятия ацп, относится к основам электроники и программирование микроконтроллеров,тут не причем. В следующем видео, буду на основе ацп измерять напряжение, думаю там все станет понятно.
АЦП - Аналого- цифровой преобразователь. Т.е перевод аналогового сигнала в цифровой ( в данном случае движение джойстика переводится в цифровые значения).
Добрый день! Обещали в следующих уроках показать, как усреднять значение, чтобы не прыгал последний разряд. Напишите как это сделать. Заранее благодарю!
Как работать с несколькими каналами АЦП? Я пробовал работать в Codevision avr, там видимо упростили задачу: просто запускаем АЦП, выставляем частоту (через кодвизард всё автоматически настраивается и генерируется "шаблон" кода) а потом тупо считываем значение АЦП с любого канала (read_adc(0), read_adc(1), и т.д.). В Atmel Studio видимо как-то по другому. Разъясните пожалуйста кто-нибудь. Заранее благодарю!
Если не затруднит , подскажите: 3:03 Там делитель частоты преобразования 2,2,4,8,16,64,128 вместо 1,2,4,8,16,32,64,128 ??? Это опечатка или действительно нет 1 и 32 ??? 5:20 Зачем нужны MUX3 , MUX4 если они всегда =00
Просто я думаю какая нужна обвязка для ножки АЦП , потому что когда двумя пальцами касаюсь gnd и и ножки АЦП то датчик дает правильные показания, а когда отпускаю то зашкаливает
Скажите а как поступить если хочу оцифровать сигнал с напряжением от 0 до 30mV? Предварительно его усилить операционным усилителем? Можно ли AREF поставить скажем 100mV, таким образом оцифровывать опираясь на такое напряжение? Можно ли подавать опорное напряжение на AREF через мультиплексер?
Здравствуйте Александр.Решил освоить АЦП и ввел с экрана код. Компиляция прошла успешно в Atmel Studio 6.Фьюзы установил 0xFF и 0xC9. На макетной плате собрал устройство по Вашему рисунку.7 сегментный индикатор ничего не показывает. Не могли бы Вы сбросить ссылку с прошивкой и кодом? Спасибо.
+иван русев По очереди, делаете установки для первого. Происходит замер первого. Программа переходит в вектор прерывания ацп. Так вы знаете что замер произведен. Затем устанавливаете установки для второго ацп и так далее.
Добрый день! У меня есть необходимость измерения угла между двумя балками. Собственно придумал два варианта реализации его: с помощью АЦП и переменного резистора , которым меняет значение в зависимости от угла или вместо резистора использовать энкодер. Если первоначальный угол всегда известен и всегда равен 180 градусов, а измерять нужно только его изменения, как вы думаете, какой из этих вариантов мне будет более грамотным? Или, возможно, есть какой-то третий вариант? Заранее благодарю за ответ!
Александр Писанец скорее всего не получится, так как положение в пространстве не будет стационарным... Изначальное положение зафиксировано только по отношению друг к другу, а как их повернёт человек, который будет производить измерения, одному Богу известно...
Спасибо за урок по АЦП. Хотел уточнить если преобразование АЦП занимает 13 тактов то если пред делитель выставить / 2 то преобразование АЦП займет 26 тактов ? и еще если АЦП настроить на 8 бит то нужно ли запрещать прерывания при сохранении данных в переменную? и можно ли использовать ADCW в программе например a = 5 / ADCW; или if(ADCW==512)
Здравствуйте. При выстовленом пред делители , АЦП как выполнялось 13 тактов так и будет 13 тактов. А вот время микроконтроллера займет 26 тактов. Насчет 8 битного режима не скажу, некогда не применял (мне и 10 битного мало) Что касается "a = 5 / ADCW " не стоит применять, могут возникнуть глюки, другие режимы "*,==,+"работают нормально.
Простыми словами. ИОН задействуется внутренний стабилизатор напряжения или напряжение подано на ножку микроконтроллера. Как выставите пред установки для ацп. AVcc напряжение питания микроконтроллера.
Спасибо за оперативный ответ! Я правильно понимаю: Опорное напряжение нужно для питания АЦП? Выбор источника никак не влияет на качество и стабильность результата?
Не пойму почему тогда вы бит ADIF не опрашиваете и не сбрасываете ? ведь бит ADFR режим непрерывного преобразования вы не включили,и почему у вас на экране ацп не прыгает ? у меня есть скачки даже когда задержку на вывод на экран поставил ??
ну я понял у вас режим однократного преобразование + разрешили прерывание по завершению ацп и в функции прерывание ацп в конце опять запускаете ацп,а бит ADIF который показывает что ацп завершилось вы не проверяете ! рассказывали одно сделали другое) а ваш канал по avr из русско язычных ,один из лучших!! хорошое видео спасибо!
Ну вы свое видео посмотрите внимательно вы говорите что бит ADIF становится в 1 по прерыванию ацп ,и надо только в ручную его сбрасывать если вы в однократном режиме прерывания ,а я скажу что это только флаг и сбрасывается он сам как только вы запустили прерывание)
Принцип такой (digital-drums.ru/handmade/handmade-triggers). Там данные элементы приклеиваются для примера к поверхности барабана. Потом сигнал поступает в триггерный блок, в котором (видел по описаниям) стоит Atmega644. Если подумать, то по сути мы преобразовываем сигнал вибрации в сигнал миди. Только вот подробнее пока информации мало нашел. В любом случае спасибо за ответ.
Александр, здравствуйте. А можно ли подключить к данному микроконтроллеру датчик 2-х проводный, который работает от 10-30 Вольт, при этом на выходе 4-20 мА ? Если можно, так как именно это можно сделать?
Nik RU42 Да можно, через сопротивление или на операциониках преобразователь уровня собирать, так сходу схему не припомню. Но в нете много разных решений можно найти.
А через сопротивление это получиться делитель напряжения? Т.е. если напряжение с источника питания 24 Вольт, представить что R1 - это сопротивление датчика, R2 - поставить резистор 250 Ом, а потом с участка R2 мерить напряжение, при этом один конец (до R2) подключить к порту A0, а второй конец на землю питания микроконтроллера?
у меня вопрос .я замеряю 3ф с пускателя при включении пускателя мега 16 зависает в чём причина отключаю датчики тока включаю нагрузку(асинхронный двигатель) подвесания нет помогите
Фильтра нужно ставить по входам. Мне помоги ферритовые кольца, пару витков с токовых датчиков пропускаете через кольцо, тем самым высокочастотные всплески вроде как отсекало.
Урок точно не буду делать, долго все это. Все зависит от датчика применяемого. Есть с выходом 0-5В там все просто, замер цап и все. А есть мостовые, сними немного сложнеее. По крайне мере не описать в двух словах
Подскажите пожалуйста, почему у меня не работает окно периферии? Открываю, а там ничего нажать нельзя, никакие флажки не меняются, даже порты не могу настроить, не говоря о АЦП. К стати вкладки AD_CONVERTER так же нету. Скачал ваш проект, открыл и ничего, окно так же не рабочее
К сожалению проблема не в этом. Путь к Студии: C:\PROGRAMMI\AVR Studio\7.0 Путь к самому проекту: C:\Users\artio\Desktop\USB_Flash_Code\GccApplication1
Таки хотелось бы иметь представление, когда какой режим использовать.. Вот зачем прерывание включать, это я понимаю.. (чтобы ничто не смогло прервать измерение).. с цикличностью непонятно..
Спасибо за видео, познавательно. Попробую повторить. Единственно коробит комменты в стиле "АЦР". Непонятно что это значит...И автор еще в видео ADC читает как "А ДЭ ЭС" WTF?
Александр, спасибо за ваш труд. Все очень доходчиво разжевано! Сейчас столкнулся с проблемой, по последовательному чтению с двух каналов АЦП. При чем в симуляторе и протеусе всё красиво, а в реальном устройстве два СД, которые должны загораться каждый от своего АЦП, загораются одновременно от обоих каналов. Будьте добры подскажите в чем ошибка. Вот код в три строки)) yadi.sk/d/qYrTLxpl327E6j
Код рабочий, все норм. Такое может быть если у вас входа ацп в воздухе, не чем не подгружены. Сначала задаем канал, затем включаем ацп. case 0:{ NPin=1; ACPPinA0Motion = ADCW; //считаваем значения АЦП ADMUX |=(1
Спасибо большое, действительно подтянул неиспользуемый вход и все стало хорошо! Кошмар, два дня промучился, чего я только не делал))) Вот что значит опыт! Еще раз спасибо, Сэнсэй!
Александр, здорово, не пропускаю ни одного урока с самого начала. Просто и понятно.
Спасибо! С каждым уроком все интересней и интересней.
Очень хотелось бы узнать о принципе работы UART.
Спасибо за АЦП. Вольтметр в протеусе сделал. Рад, как ребенок.
Сам такой :) Буквально сегодня WiFi модулями разобрался, довольный что слон.
Здравствуйте!
Очень познавательные уроки.
С работой АЦП по прерыванию, вроде как понятно.
Но хотелось бы узнать, как можно брать значения АЦП в конкретном месте программного кода и из разных входов.
классно! очень понятно! USART, rs485 еслеб как-нибудь услышать..... :) TWI, I2C :) В атмел студио есть библиотеки на 1-wire. USART и т.д.... Может позже есть смысл вам привязываясь к ним объяснять остальные возможности... :) это как вариант.
Большое спасибо за статью
Какую книгу предложите для изучения микроконтроллеров avr на си.
Спасибо, все понятно разложили по полочкам. Но есть одно НО. Так как, я являюсь новичком, в программирование микроконтроллеров, то мне не все понятно. А точне, что вообще такое АЦП и каков принцип его работы?
Понятия ацп, относится к основам электроники и программирование микроконтроллеров,тут не причем. В следующем видео, буду на основе ацп измерять напряжение, думаю там все станет понятно.
АЦП - Аналого- цифровой преобразователь. Т.е перевод аналогового сигнала в цифровой ( в данном случае движение джойстика переводится в цифровые значения).
Добрый день!
Обещали в следующих уроках показать, как усреднять значение, чтобы не прыгал последний разряд.
Напишите как это сделать.
Заранее благодарю!
+Рустем Мухутдинов ruclips.net/video/oPowvX-cPQA/видео.html
Как работать с несколькими каналами АЦП? Я пробовал работать в Codevision avr, там видимо упростили задачу: просто запускаем АЦП, выставляем частоту (через кодвизард всё автоматически настраивается и генерируется "шаблон" кода) а потом тупо считываем значение АЦП с любого канала (read_adc(0), read_adc(1), и т.д.).
В Atmel Studio видимо как-то по другому. Разъясните пожалуйста кто-нибудь. Заранее благодарю!
Доброго дня. Не получается скачать проект.
Скажите, почему запись, например ADMUX |= (0
мне устанавливать ADMUX ? или другие регистры тоже устанавливать
Если не затруднит , подскажите:
3:03 Там делитель частоты преобразования 2,2,4,8,16,64,128 вместо 1,2,4,8,16,32,64,128 ???
Это опечатка или действительно нет 1 и 32 ???
5:20 Зачем нужны MUX3 , MUX4 если они всегда =00
3:03 нет опечатки именно так , МUX3 и MUX4 не нули, Участвуют когда нужны диференциальные входа.
Александр Писанец Спасибо !
Благодарю! Не увидел в плейлисте.
Просто я думаю какая нужна обвязка для ножки АЦП , потому что когда двумя пальцами касаюсь gnd и и ножки АЦП то датчик дает правильные показания, а когда отпускаю то зашкаливает
Однозначно ножка работающая на АЦП должна быть подгружена . К примеру, резистором к минусу . Хотя все зависит от схемотехники .
Как у вас подключена ножка АЦП? Можете дать схему? А то в интернете неоднозначные предложения.
Крутяк, Спасибо!!!
как лучше програмно зажечь светодиод и погасить отАЦП?
Скажите а как поступить если хочу оцифровать сигнал с напряжением от 0 до 30mV? Предварительно его усилить операционным усилителем?
Можно ли AREF поставить скажем 100mV, таким образом оцифровывать опираясь на такое напряжение? Можно ли подавать опорное напряжение на AREF через мультиплексер?
Да. Это лучший вариант
Здравствуйте Александр.Решил освоить АЦП и ввел с экрана код. Компиляция прошла успешно в Atmel Studio 6.Фьюзы установил 0xFF и 0xC9. На макетной плате собрал устройство по Вашему рисунку.7 сегментный индикатор ничего не показывает. Не могли бы Вы сбросить ссылку с прошивкой и кодом? Спасибо.
+Виктор Сычев Здравствуйте. К сожилению я не сохранил код данного урока. Урок давний.
+Виктор Сычев Разве ссылка не работает?, Проект:dfiles.ru/files/olr6vvgif
Какой самый стабильный вариант подключения ацп?
Все варианты стабильны. Смотря, для каких задач. Для точного измерения с помощью АЦП нужно стабильное питания и замер производить в медленном режим
Доброго Вам дня Олександре. Переглядаючи відео побачив відладочьну плату, а схемки немає?
Aleksandr Maslo Данную плату коллега по работе делает на продажу, правда цена кусается в 800гр.
есть ли альтернативные недорогие отладчики?Dragon из дорогих
+иван русев я таких не находил. Разве только какой то самодельный сделать
как подключить несколько выводов ацп подскажите алгоритм
+иван русев По очереди, делаете установки для первого. Происходит замер первого. Программа переходит в вектор прерывания ацп. Так вы знаете что замер произведен. Затем устанавливаете установки для второго ацп и так далее.
Добрый день! У меня есть необходимость измерения угла между двумя балками. Собственно придумал два варианта реализации его: с помощью АЦП и переменного резистора , которым меняет значение в зависимости от угла или вместо резистора использовать энкодер. Если первоначальный угол всегда известен и всегда равен 180 градусов, а измерять нужно только его изменения, как вы думаете, какой из этих вариантов мне будет более грамотным? Или, возможно, есть какой-то третий вариант? Заранее благодарю за ответ!
+Rain Game Studio Как насчет гироскопа, можно по всем трем координатам контролировать угол.
Александр Писанец скорее всего не получится, так как положение в пространстве не будет стационарным... Изначальное положение зафиксировано только по отношению друг к другу, а как их повернёт человек, который будет производить измерения, одному Богу известно...
Тогда переменный резистор. Проще программа будет.
Александр Писанец Хорошо. Спасибо за ответ!
спасибо.
Спасибо за урок по АЦП.
Хотел уточнить если преобразование АЦП занимает 13 тактов то если пред делитель выставить / 2 то преобразование АЦП займет 26 тактов ?
и еще если АЦП настроить на 8 бит то нужно ли запрещать прерывания при сохранении данных в переменную?
и можно ли использовать ADCW в программе например
a = 5 / ADCW; или if(ADCW==512)
Здравствуйте. При выстовленом пред делители , АЦП как выполнялось 13 тактов так и будет 13 тактов. А вот время микроконтроллера займет 26 тактов. Насчет 8 битного режима не скажу, некогда не применял (мне и 10 битного мало) Что касается "a = 5 / ADCW " не стоит применять, могут возникнуть глюки, другие режимы "*,==,+"работают нормально.
Александр Писанец Спасибо
А разве подтягивающий резистор к ноге DDRA не нужен?
+Max D смотря в каких случаях. Но в обще нет.
Здравствуйте Александр! Скажите зачем подключать опорное напряжение, и какая разница между подключением Внутреннего ИОН и AVcc?
Простыми словами. ИОН задействуется внутренний стабилизатор напряжения или напряжение подано на ножку микроконтроллера. Как выставите пред установки для ацп. AVcc напряжение питания микроконтроллера.
Спасибо за оперативный ответ! Я правильно понимаю: Опорное напряжение нужно для питания АЦП? Выбор источника никак не влияет на качество и стабильность результата?
Конечно влияет, если опорное напряжение не стабильное. То и результат измерения соответственно хреновый.
Александр Писанец Спасибо!
символ w работает токо в ADC или везде где есть два байта
Только в АЦП
Не пойму почему тогда вы бит ADIF не опрашиваете и не сбрасываете ?
ведь бит ADFR режим непрерывного преобразования вы не включили,и почему у вас на экране ацп не прыгает ? у меня есть скачки даже когда задержку на вывод на экран поставил ??
Давно урок делал, вникать нет времени.
ну я понял у вас режим однократного преобразование + разрешили прерывание по завершению ацп и в функции прерывание ацп в конце опять запускаете ацп,а бит ADIF который показывает что ацп завершилось вы не проверяете ! рассказывали одно сделали другое)
а ваш канал по avr из русско язычных ,один из лучших!!
хорошое видео спасибо!
Зачем мне проверять бит ADIF. Как преобразование закончилось уходит программа в вектор прерывания"преобразование АЦП завершено".
Ну вы свое видео посмотрите внимательно вы говорите что бит ADIF становится в 1 по прерыванию ацп ,и надо только в ручную его сбрасывать если вы в однократном режиме прерывания ,а я скажу что это только флаг и сбрасывается он сам как только вы запустили прерывание)
Сложно ли сделать midi клавиатуру на пьезоэлементах? Т.е. чтобы при разном усилии разная сила звука была.
Nik RU42
Не знаю, не разбирался с таким.
Принцип такой (digital-drums.ru/handmade/handmade-triggers). Там данные элементы приклеиваются для примера к поверхности барабана. Потом сигнал поступает в триггерный блок, в котором (видел по описаниям) стоит Atmega644. Если подумать, то по сути мы преобразовываем сигнал вибрации в сигнал миди. Только вот подробнее пока информации мало нашел. В любом случае спасибо за ответ.
С датчиком проблем нет, я имел виду не знаю протокол миди.
Понятно.
Александр, здравствуйте. А можно ли подключить к данному микроконтроллеру датчик 2-х проводный, который работает от 10-30 Вольт, при этом на выходе 4-20 мА ? Если можно, так как именно это можно сделать?
Nik RU42 Да можно, через сопротивление или на операциониках преобразователь уровня собирать, так сходу схему не припомню. Но в нете много разных решений можно найти.
А через сопротивление это получиться делитель напряжения? Т.е. если напряжение с источника питания 24 Вольт, представить что R1 - это сопротивление датчика, R2 - поставить резистор 250 Ом, а потом с участка R2 мерить напряжение, при этом один конец (до R2) подключить к порту A0, а второй конец на землю питания микроконтроллера?
Да именно так. Конечно это не совсем правильно, но работать будет
А что неправильного в данном методе?
Такой метод негде в даташите я не встречал, везде нужны какие то микросхемы.
у меня вопрос .я замеряю 3ф с пускателя при включении пускателя мега 16 зависает в чём причина
отключаю датчики тока включаю нагрузку(асинхронный двигатель) подвесания нет помогите
Фильтра нужно ставить по входам. Мне помоги ферритовые кольца, пару витков с токовых датчиков пропускаете через кольцо, тем самым высокочастотные всплески вроде как отсекало.
Благодарю Александр.Я начинающий программист.Скажу так.Практика от теории немного отличается.Буду дальше учиться.
подскажите пожалуйста как сделать веса из атмеги 16 если можно покажите как это сделать?
Elburs Nasibov Не очень понял вопрос. Весы ?
Да, весы
извините за ошибку,
Урок точно не буду делать, долго все это. Все зависит от датчика применяемого. Есть с выходом 0-5В там все просто, замер цап и все. А есть мостовые, сними немного сложнеее. По крайне мере не описать в двух словах
Здравствуйте! Действительно, а как использовать сразу несколько ножек ацп? Регистр то, который хранит значение всего 1.
Здравствуйте. Опрашиваете по порядку. Сначала один канал, забираете данные. Затем второй и т.д
Александр Писанец Спасибо))
Александр Писанец А напишите как. Пжлста!
Александр Писанец А может Вы в своих уроках уже где то коснулись этого момента, тогда намекните в каком. Очень очень спасибо!
Как пример:
ISR (ADC_vect)
{
ACP=ADCW;
Kanal ++;
switch (Kanal)
{
case 0: ADMUX &=~(1
Подскажите пожалуйста, почему у меня не работает окно периферии? Открываю, а там ничего нажать нельзя, никакие флажки не меняются, даже порты не могу настроить, не говоря о АЦП. К стати вкладки AD_CONVERTER так же нету. Скачал ваш проект, открыл и ничего, окно так же не рабочее
Путь установки студии, не должен содержать русские символы.
К сожалению проблема не в этом.
Путь к Студии: C:\PROGRAMMI\AVR Studio\7.0
Путь к самому проекту: C:\Users\artio\Desktop\USB_Flash_Code\GccApplication1
возможно тулбара нет соответствующего, проще вручную код прописать.. главное чтобы компилировалось нормально..
непонятно зачем нужен цикличный режим опроса ацп если и с ручным все работает? В каких случаях его применяют?
Конечно работает, все зависит от задачи.
Таки хотелось бы иметь представление, когда какой режим использовать.. Вот зачем прерывание включать, это я понимаю.. (чтобы ничто не смогло прервать измерение).. с цикличностью непонятно..
Спасибо за видео, познавательно. Попробую повторить. Единственно коробит комменты в стиле "АЦР". Непонятно что это значит...И автор еще в видео ADC читает как "А ДЭ ЭС" WTF?
gin87100 0 я стараюсь делать путче, но бывает данные промахи)
почему вы забираите данные с ADCWа не с ADC
ADCW заберет сразу два байта
Так и не показали как программно убрать дерганье последнего разряда
Александр, спасибо за ваш труд. Все очень доходчиво разжевано! Сейчас столкнулся с проблемой, по последовательному чтению с двух каналов АЦП. При чем в симуляторе и протеусе всё красиво, а в реальном устройстве два СД, которые должны загораться каждый от своего АЦП, загораются одновременно от обоих каналов. Будьте добры подскажите в чем ошибка. Вот код в три строки)) yadi.sk/d/qYrTLxpl327E6j
Код рабочий, все норм. Такое может быть если у вас входа ацп в воздухе, не чем не подгружены.
Сначала задаем канал, затем включаем ацп.
case 0:{
NPin=1;
ACPPinA0Motion = ADCW; //считаваем значения АЦП
ADMUX |=(1
Спасибо большое, действительно подтянул неиспользуемый вход и все стало хорошо! Кошмар, два дня промучился, чего я только не делал))) Вот что значит опыт! Еще раз спасибо, Сэнсэй!
Та я сам такой )
не могу скачать проект почему?
Проверил, работает.
NOD32 бьет тревогу.
+Виктор Сычев Та нет там вирусняков, покрайне мере я из не архивировал :)
флаХ