Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/17: Рейтинг темы: голосов - 17, средняя оценка - 4.59
Skoffytd
1

Прошу совета в освоении АВР

27.04.2017, 00:00. Показов 3406. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток форумчанам! Нахожусь в начале изучения контроллеров, пишу только пока в ассемблере, поэтому прошу совета. Техническое задание: имеется ультразвуковой дальномер для Ардуино типа HC-SR04, каждые 1,5-2 секунды инициализурую измерение импульсом 10мкс, для этого использую 8-ми битный Таймер0, ответный сигнал - эхо, имеет активный высокий уровень, а его длительность пропорциональна измеренному расстоянию и связана формулой: в 1 см расстояния - 58 мкс длительности импульса, диапазон расстояний от 2 до 400 см. Получается, что импульс эхо будет в диапазоне 116...23200 мкс. Тактирую от кварца 7,3728 МГц ("некрасивая" частота выбрана для UART), тактовый период 0,14 мкс. Подскажите как наиболее правильно считать длительность эхо +/- 20...30 мкс, пробовал по прерыванию INT1 c восходящим фронтом, но как определить, что синал окончился. По любому изменению на входе INT0, как тогда правильно понимать, что сейчас фронт, а не спад. Как лучше считать: циклом инкремента в процедуре или на такую мелочь занимать Таймер1? В дальнейшем из рассчитанное времени буду вычитать 58 и смотреть переход через 0, целое число вычитаний и будет расстояние в см, которое выведу на трёхразрядный светодиодный индикатор (с этим сложностей нет). Сейчас важно правильно научиться писать, используя оптимальные решения, не по-индусски)))
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2017, 00:00
Ответы с готовыми решениями:

В чем отличие таймера АВР от счетчика АВР?
Объясните,пожалуйста.

Проблема с Ардуино, прошу совета
Всем привет. Странная проблема с Ардуино (кто не в курсе что это прилагаю схему). Проблема проста...

Прошу совета по схеме часов
Хочу собрать часы с динамической индикацией на современных элементах. Имеются DS3231SN,...

прошу совета по выбору МК
Доброе время суток ! Прошу совета знатоков практиков по выбору контроллера под конкретную...

Прошу совета по управлению ШД на STM32
Прошу совета по управлению ШД Небольшая технологическая установка по упаковке мелких предметов....

15
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 155
27.04.2017, 00:06 2
таймером с захватом
0
Skoffytd
27.04.2017, 00:38 3
Таймер с захватом это уже 16 разрядный Timer1 (ещё ни разу его не настраивал - там функций и регистров - куча). Как тогда люди решают более сложные задачи, если таймеры так легко расходуются (сам использую ATTiny2313)? Для отладки более сложных проектов хочу использовать UART, как там без таймеров - нужно будет ещё почитать. Благодарю за столь скорый ответ)
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
27.04.2017, 00:58 4
http://arduino-project.net/podklyucheni ... k-arduino/

и еще 100500 примеров
0
Skoffytd
27.04.2017, 01:07 5
Цитата Сообщение от x893
http://arduino-project.net/podklyuchenie-ul-trazvukovogo-dal-nomera-hc-sr04-k-arduino/

и еще 100500 примеров
Абсолютно этот дальномер и использую, но пишу исключительно на ассме, думаю, что после написания вся программа займёт не более 15-20% флэша ATTiny2313, а по тому как неоптимально всё реализуется в Ардуино, кто только не писал. Я сам радиотехник больше, нежели программист и понятие счётчиков и регистров мне гораздо ближе, чем if...then. Благодарю за ответ)
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
27.04.2017, 03:01 6
Для измерения времени полезно завести 1 таймер в режиме счета, который бы только тикал и больше ничего. Далее, когда надо измерять время, просто считывать текущее значение этого таймера и вычитать предыдущее захваченное значение. Таймер должен тикать с такой частотой, с какой дискретностью надо получать измеренное время.
0
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 879
27.04.2017, 08:43 7
Есть у меня измеритель уровня воды в летнем душе на этом датчике и на ATtiny2313A. Тактируется кварцем 12 МГц. Код на асме. Считаю таймером в режиме захвата. Всё чётко. Могу поделиться кодом, в личке
ЗЫ Кстати требования к запускающему импульсу совсем не строгие. Расходовать для этого таймер вовсе не обязательно
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 1,304
27.04.2017, 09:12 8
Цитата Сообщение от Skoffytd
...инициализурую измерение импульсом 10мкс... длительность эхо +/- 20...30 мкс.... пробовал по прерыванию INT1 c восходящим фронтом, но как определить, что сигнал окончился.
Это принципы локации, поэтому следуем им:
Поскольку зондирующий импульс вдвое-втрое короче допустимой погрешности, а счёт можно прекратить по фронту, то спад приходящего эха априори вам становится неинтересен.
Спад вам мог бы быть интересен для цифровой или даже компьютерной обработки цели. Ну, ещё для фильтрации помех. Но это уже другая история.
Цитата Сообщение от u37
Таймер должен тикать с такой частотой, с какой дискретностью надо получать измеренное время.
Можно и так, как вы говорите, т.к. длительность зонда и допустимая погрешность позволяют ковырять пальцем в носу. ТСу по его задаче бОльшего и не надо.
Но если сделать тики почаще, то появится возможность увеличить точность, т.к. ТС по сути сейчас будет сравнивать фронт зонда с фронтом эха. То есть "задел на будущее" есть, просто этот задел никому не нужен. И в будущем тоже.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 155
27.04.2017, 11:31 9
Цитата Сообщение от Skoffytd
ещё ни разу его не настраивал - там функций и регистров - куча
может вы с stm32 что путаете? не сложнее обычного таймера те же 2 регистра.
0
Skoffytd
27.04.2017, 12:49 10
Цитата Сообщение от u37
Для измерения времени полезно завести 1 таймер в режиме счета, который бы только тикал и больше ничего. Далее, когда надо измерять время, просто считывать текущее значение этого таймера и вычитать предыдущее захваченное значение. Таймер должен тикать с такой частотой, с какой дискретностью надо получать измеренное время.
Практически первая программа, вот, что сделал, помимо векторов прерываний и пустого цикла: завёл таймер0 с предделителем на 256, прерывание по переполнению случается 7,4 мгц/256/255=113 Гц, в каждом прерывании инкремент temp и сравнение со 113, т.е как только прошла 1 секунда - на процедуру формирования стартового импульса. В процедуре устанавливаю 1 и иду на инкремент переменной, в одном такте контроллера 0,14 мкс, а нужно 10мкс вот в цикле и считаю до 74, как только досчитал - перевожу вывод порта в 0 и назад в цикл ждать прерывания. Сейчас, как понял, по совету, мне нужно на вывод порта подходящий для режима захват, таймера1, подключить сигнал эхо и считать его длительность. Максимум подберу предделитель, чтобы 1 такт счётчика был ближе к 58 мкс, чтобы счётчик считал сразу в см. Сейчас на работе, вечером буду разбираться в авр студии. Благодарю за ответы)
Skoffytd
27.04.2017, 13:11 11
Цитата Сообщение от Sthuthu
Есть у меня измеритель уровня воды в летнем душе на этом датчике и на ATtiny2313A. Тактируется кварцем 12 МГц. Код на асме. Считаю таймером в режиме захвата. Всё чётко. Могу поделиться кодом, в личке
ЗЫ Кстати требования к запускающему импульсу совсем не строгие. Расходовать для этого таймер вовсе не обязательно
Если вам несложно, отправьте код программы в ЛС. Ещё интересен опыт работы этого датчика, в частности, пьезоэлементов в условиях над водой, при повышенной влажности.
Skoffytd
27.04.2017, 13:27 12
Цитата Сообщение от VtodyMyti
Цитата Сообщение от Skoffytd
...инициализурую измерение импульсом 10мкс... длительность эхо +/- 20...30 мкс.... пробовал по прерыванию INT1 c восходящим фронтом, но как определить, что сигнал окончился.
Это принципы локации, поэтому следуем им:
Поскольку зондирующий импульс вдвое-втрое короче допустимой погрешности, а счёт можно прекратить по фронту, то спад приходящего эха априори вам становится неинтересен.
Спад вам мог бы быть интересен для цифровой или даже компьютерной обработки цели. Ну, ещё для фильтрации помех. Но это уже другая история.
Цитата Сообщение от u37
Таймер должен тикать с такой частотой, с какой дискретностью надо получать измеренное время.
Можно и так, как вы говорите, т.к. длительность зонда и допустимая погрешность позволяют ковырять пальцем в носу. ТСу по его задаче бОльшего и не надо.
Но если сделать тики почаще, то появится возможность увеличить точность, т.к. ТС по сути сейчас будет сравнивать фронт зонда с фронтом эха. То есть "задел на будущее" есть, просто этот задел никому не нужен. И в будущем тоже. Длительность эхо +/- 20...30 мкс - это я имел ввиду точность измерения импульса, т.е +/- 0,5 см по расстоянию, как изначально указал в первом сообщении, диапазон от 2 до 400 см определяет длинну ответного импульса (эхо) 112...23200 мкс, вот и думал, что нужно отслеживать, как фронт, так и спад импульса. В любом случае, благодарю за ответ, нужно сначала в авр студии поработать и посмотреть, что творится в счётных регистрах)
Skoffytd
27.04.2017, 19:38 13
Цитата Сообщение от myshomy984
Цитата Сообщение от Skoffytd
ещё ни разу его не настраивал - там функций и регистров - куча
может вы с stm32 что путаете? не сложнее обычного таймера те же 2 регистра.
Просто режимов работы у таймера1 и всех нечётных - очень много, плюс ко всему давненько английский не использовал, часто сомневаюсь в своём переводе и гоняю гугл. А 32 битные контроллеры - это удел профи, которые только на си пишут, где сложные вычисления нужны и много обработки информации. По моим масштабам вполне хватает конечных автоматов на 8 битках, может попробую RTOS, от DY HOTT, но до этого нужно подрасти. Здесь недавно, но приятно удивила атмосфера форума: помогают, советуют)
0 / 0 / 0
Регистрация: 11.07.2014
Сообщений: 116
27.04.2017, 20:36 14
почитайте Евстифеева "микроконтроллеры AVR семейства Miko"
0
Oxford
27.04.2017, 20:45 15
Реально ребята, почитайте книжки. Да и тут статей море. AVR архитектура простейшая.
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 1,304
27.04.2017, 21:16 16
Цитата Сообщение от Skoffytd
Цитата Сообщение от VtodyMyti
Цитата Сообщение от Skoffytd
...инициализурую измерение импульсом 10мкс... длительность эхо +/- 20...30 мкс....
Поскольку зондирующий импульс вдвое-втрое короче допустимой погрешности...
1. Длительность эхо +/- 20...30 мкс - это я имел ввиду точность измерения импульса...
2. ...вот и думал, что нужно отслеживать, как фронт, так и спад импульса.1. Это понятно. Я так и написал.
2. Нет, достаточно одного фронта, без спада. Если отслеживать ещё и спад, то помехозащищённость будет легко поднять "на порядок". Но оно вам, мне кажется, как собаке пятое колесо.
0
27.04.2017, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2017, 21:16
Помогаю со студенческими работами здесь

Прошу помощи в освоении C#
Всем привет! Решил изучать C#, до сего момента никогда никаких языков программирования не изучал,...

Прошу совета
Сайт кулинарной тематики Домашние рецепты крутится с августа 2010г, постоянно возникают какие...

Прошу совета
Здравствуйте, хочу услышать критику по сайту http://www.realtybill.com.ua/. Главная беда - слабый...

Прошу совета
Имеется данная конфигурация : -процессор -i7-2600K - 3.40GHz -мат. плата - ASUS P8P75-V -память...

Прошу совета
Сильно прошу помочь. Прям сильно. Лет 8 назад я заказал сайт, у специалиста, который оказался...

Прошу совета!
Здравствуйте товарищи! Суть в следующем: я начинающий android разработчик, последние пол года...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru