Внутренние счетчики Меги 2560 которых аж целых 5 задействованы для реализации различных команд IDE ардуино (millis();digitalWrite(); ) и т.п. Вопрос вот в чем. Есть ли в самой среде ардуино возможности задействовать один из этих счетчиков для счета внешних импульсов в десятичную переменную? Или для этого нужно ваять что то на Си+ например, и загонять на Мегу через программатор? А может есть уже готовая библиотека для этого?
Считать импульсы с энкодера, подключая его на один из пинов Меги и используя один из штатных таймеров/счетчиков микропроцессора. Ваять для этого скетч или встраивать код для подсчета импульсов в уже готовую программу не желательно. Ну то есть с регистров внутреннего счетчика получить переменную равную количеству поступивших на ногу импульсов в заданный момент времени.
Для функций "референса" IDE используются только Т0, Т1 и Т2. Остальное надо самостоятельно активировать/использовать. То же и Т1 -Т2 касается, если не использовать основанные на их применении функции референса IDE. Программную поддержку самостоятельного применения таймеров или берем из соответствующих библиотек (в тырнете) или пишем самостоятельно.
Отчеты о времени не нужны для подсчета импульсов от энкодера. Есть внешнее прерывание, есть прерывание при изменении состояния пина, есть polling в loop и т. д.
Для функций "референса" IDE используются только Т0, Т1 и Т2. Остальное надо самостоятельно активировать/использовать. То же и Т1 -Т2 касается, если не использовать основанные на их применении функции референса IDE. Программную поддержку самостоятельного применения таймеров или берем из соответствующих библиотек (в тырнете) или пишем самостоятельно.
А какие команды IDE можно использовать для активации названных таймеров? Если они есть там конечно. В "тырнете" только для управления ШИМ волной библиотеку вижу. Похоже для моей задачи она не подходит.
Вопрос вот в чем. Есть ли в самой среде ардуино возможности задействовать один из этих счетчиков для счета внешних импульсов в десятичную переменную? Или для этого нужно ваять что то на Си+ например, и загонять на Мегу через программатор? А может есть уже готовая библиотека для этого?
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Ардуино IDE дает полный доступ ко всем регистрам контроллера. Ибо основано там все на GCC компиляторе. Открываем "Микроконтроллеры AVR семейства MEGA" Евстифеева, разбираемся как работает нужный нам таймер и через какие регистры и прерывания, пишем все что придет в голову и радуемся. Таймеры устроены крайне просто.
Ну то есть с регистров внутреннего счетчика получить переменную равную количеству поступивших на ногу импульсов в заданный момент времени.
У вас энкодер в одну сторону только крутится ? С механических стандартных энкодеров очень нежелательно так считать - ложные срабатывания будут, стандартная обработка двух каналов часть таких игнорит. Ног на 2560 не хватает что ли ? oO
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Ну то есть с регистров внутреннего счетчика получить переменную равную количеству поступивших на ногу импульсов в заданный момент времени.
У вас энкодер в одну сторону только крутится ? С механических стандартных энкодеров очень нежелательно так считать - ложные срабатывания будут, стандартная обработка двух каналов часть таких игнорит. Ног на 2560 не хватает что ли ? oO
4 шим сигнала, 2 из которых формирую одновременно, 2 других в это время стоят, хоть и подключены к ногам. Плюс одна серва работает одновременно с парой шим. Энкодер крутиться на движке в обе стороны, и сбрасывается в ноль с очередным реверсом, поэтому разницы для счета нет. А вот ложные срабатывания да были, пока конденсатор не запараллелил на вход и стало на порядок лучше. Думаю потому как фронт импульса слегка сгладил. Ног то хватает. Проблема в том, что идет коррекция скорости двигателя с интервалом по времени и есть опасения пропустить её в момент прерывания.
Проблема в том, что идет коррекция скорости двигателя с интервалом по времени и есть опасения пропустить её в момент прерывания.
Если другие прерывания отрабатывают быстрее интервалов между импульсами и сам энкодер тоже прерывания вызывает, то не должно бы пропустить.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Проблема в том, что идет коррекция скорости двигателя с интервалом по времени и есть опасения пропустить её в момент прерывания.
Если другие прерывания отрабатывают быстрее интервалов между импульсами и сам энкодер тоже прерывания вызывает, то не должно бы пропустить.
Наверно не точно выразил мысль. Прерывания по энкодеру могут совпасть с моментом снятия показаний счетчика. Оно снятие и коррекция идут в строго определенный момент 5 раз в секунду плюс минус 5 мсек с интервалом 200 мсек. Что само по себе интересно, срабатывает условие почему то 201, 401, 601 .. и т.д., несмотря на рамки +- 5 мсек.
Схемка 10 разрядного счетчика и была спаяна на макетке из 155ТМ2, благо было в запасе еще с советских времен. А снимается в переменную через bitWrite() по параллельному каналу из 10 штырьков. На один такой счетчик надо подключить два попеременно работающих энкодера. Проблемка в том что работает пока боле-менее один. Как только вторую линию подключаешь, на счетчике начинается свистопляска. Думаю то же будет если внутренний таймер процессора задействовать. Попробовать диоды в обе линии воткнуть?
Когда-то делал "на поиграться" программный обработчик энкодера на малолапом варианте АВР/ПИК - МК только для обработки и получения счетного импульса и флага направления. Или две входных линии МК на энкодер при программном опросе этих линий. (Тинька 13я или пик12F508 да демо-тест на адуринко-нанке). Сорбственно сам алгоритм: https://img.radiokot.ru/files/20529/3g35mrq2nk.GIF
Прерывания по энкодеру могут совпасть с моментом снятия показаний счетчика.
Навскидку не вижу в этом ничего страшного.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения