roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 20:08

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Способы измерения длительности импульса.
СообщениеДобавлено: 28 сен 2010, 22:01 
Не в сети

Зарегистрирован: 13 сен 2010, 12:47
Сообщения: 317
Добрый день!
Прошу подсказать. Мне нужно измерить длительность импульса на микроконтроллере PIC16F877 (подключить к аксселерометру). К сожалению оба порта PWM/компаратор заняты. Порт прерывания - свободен, но он только один, а у аксселерометра 2 выхода на 2 оси.
Подскажите способ измерить длинну импульса, используя обычные порты контроллера? Например прерывание по таймеру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 28 сен 2010, 22:14 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Элементарно, Ватсон (с)

Ждем фронта импульса, включаем таймер, ждем спада импульса, выключаем таймер. Нужно быть уверенным, что таймер не переполнится, иначе считать число переполнений таймера. Чем меньше предделитель - тем выше точность счета.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 28 сен 2010, 22:27 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Возможно входы модуля захвата сравнения свободны? Тогда их надо использовать. Русская документация по микроконтроллерам PIC есть на страничке http://proavr.narod.ru/09.htm в ней есть примеры кода для разных задач.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 29 сен 2010, 18:33 
Не в сети

Зарегистрирован: 13 сен 2010, 12:47
Сообщения: 317
1.Входы модуля захвата у меня заняты. Мне на ROBPICA надо подключить, а там прямо на плате к этим выводам драйвер моторов подключен.
2. Наверное попробую - ждать единицу и по ней таймер запускать. Но получится, что контроллер ничем другим уже не сможет заниматься. Видимо нужен еще один контроллер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 29 сен 2010, 22:13 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Если есть вход внешнего прерывания - вешаем это дело на него. Проц может заниматься своими делами. А вообще обычно сперва распределяют ноги и ресурсы проца по задачам, а не наоборот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 29 сен 2010, 23:08 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
NorthStar писал(а):
2. Наверное попробую - ждать единицу и по ней таймер запускать. Но получится, что контроллер ничем другим уже не сможет заниматься. Видимо нужен еще один контроллер.


У вас схема как на http://RoboPica.Narod.Ru ? Или какие то модификации сделаны ?

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 04 окт 2010, 18:50 
Не в сети

Зарегистрирован: 13 сен 2010, 12:47
Сообщения: 317
Ну у меня на последовательном порту Bluetooth модуль а на прерывании пульт ДУ.
Пульт можно снять, но мне-то для подключения аксселерометра 2 входа нужно, одним прерыванием много не сделаешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 09:33 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Новую тему не стал открывать, т.к. мне нужно то же самое почти.
Нужно измерить длительность импульсов от 900 до 2100 мкс примерно (стандартные сигналы управления сервами и другими подобными устройствами, в т.ч. аклелерометрами).
Внешние прерывания свободны (3 шт), но 3 канала маловато, хотелось бы 8. Обычные порты тоже свободны.
Вопросов собственно 2.
1) Если использовать внешние прерывания (по на 3 канала), то насколько будет нагружен мк? Он из прерываний вылезать не будет почти. Прерывания будут происходить 2(подъем и спад сигнала)*50(период импульсов)*3(канала) = 300 раз в секунду примерно. Это конечно не очень много, но боюсь на основную работу времени останется мало. мк атмега32-16
2) Хотелось бы использовать 1 внешнее прерывание, а 8 каналов подать на какой-то порт. Чтоб прерывание происходило при изменении уровня любого из 8-им каналов. Тогда все бы делалось в 1м обработчике, который бы считывал все 8 каналов с 1 порта. Это бы сильно прооптимизировало вычисления и освободило бы входы внешних прерываний. Такое возможно и как? Без использования 2-го контроллера хотелось бы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 09:38 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
проц какой? импульсы идут по очереди или вразнобой?

Добавлено спустя 3 минуты 9 секунд:
Если речь об AVR-ках, и импульсы идут по очереди, то берите проц с прерыванием на pin-change на весь порт и радуйтесь. Точность будет порядка трех-четырех тактов проца.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 09:40 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Зависит от того что необходимо делать в прерываниях и в основной программе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 09:42 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Сорри, проглядел - мега16. Нету там такого прерывания, насколько помню.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 12:15 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
мега32, а не 16, но не суть, они почти одинаковые. Точность в 3-4 такта меня бы устроила, но там действительно нет прерывания по изменению всего порта. Или я не нашел.
Может какой то внешней простенькой микросхемкой можно отслеживать изменение любого из 8-ми битов? а уже с нее завести на внешнее прерывание контроллера. Только вот есть ли такая штука?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 13:05 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
А атмега32 это принципиально? Может взять какую-нибудь, у которой есть прерывание по изменению порта?
Ну и с самим прерыванием нужно аккуратнее, там будут проблемы когда фронты на разных линиях подойдут близко друг к другу - такое может происходить, если девайс управляется от цифрового контроллера, который валит или все импульсы разом (общее начало - разный конец). Вообще если возможно наложение фронтов - точность в 2-3 цикла ИМХО нереальна. Потому что если фронты идут с разхождением в несколько тактов - прога первый фронт поймает, начнет выполнение обработчика, и только когда его полностью выполнит - начнет обработку следующего фронта, опоздание будет равно времени выполнения обработчика.
А - еще есть простенькая внешняя микросхемка! Называется atmega48A, около бакса стоит :) Пускай она все ноги обмеряет и по любому удобному цифровому каналу (spi,uart,i2c) шлет готовые цифры. Запускать без кварца, тактировать от генератора основной меги. А можно и атмегу8, обработку вообще без прерываний делать, шустрым главным циклом, средняя погрешность немного возрастет (до пары мкс может), зато максимальная может и уменьшиться. Работу с передатчиком только надо аккуратно из такого цикла делать, максимально короткими действиями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 23:14 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2010, 14:51
Сообщения: 979
Откуда: Петрозаводск
прог. языки: C, FBD, Wiring-Processimg,,,LD, SFC, ST...
ФИО: Вадим
В вашу задачку ПЛИС просится...

_________________
Роботы, уже среди нас...
Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Способы измерения длительности импульса.
СообщениеДобавлено: 26 ноя 2010, 23:22 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
HarryStar писал(а):
Может какой то внешней простенькой микросхемкой можно отслеживать изменение любого из 8-ми битов? а уже с нее завести на внешнее прерывание контроллера. Только вот есть ли такая штука?

Вы не ответили на вопрос - импульсы идут по очереди или вразнобой?
Микросхемок есть много разных...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO