IRremote и прерывания
- Войдите на сайт для отправки комментариев
Вс, 12/07/2015 - 20:09
Всем привет!
Нужна помощь!!! Делаю устройство на базе UNO, с ИК приёмником в котором сначала требовалось использовать только одно прерывание. Использую библиотеку IRremote. Прерывание использовал INT0, что на 4-ой ноге ATMega. Потом потребовалось использовать функцию tone. Прошёлся по "граблям" с таймерами(IRremote + tone). Решение нашёл здесь. Всё заработало!
Теперь возникла потребность использовать второе прерывание INT1. Теперь наглухо отвалился IRremote... Возможно ли использовать одновременно оба прерывания + функцию tone + IRremote?
Растолкуйте чайнику! Заранее сспасибо!
Всем ещё раз привет!
Нашёл решение всех своих проблем и решил описать. Вдруг кому пригодится!
В общем прошёлся я вот ещё по каким "граблям".... При использовании библиотеки IRremote, той версии, что идёт с инсталятором оболочки для разработки, попадаешь в "страну чудес"! То одна системная функия станет недоступна, то прерывание "отвалится". Писал я значит программу. Пока программа была небольшого об\ема и с малым количеством переменных ИК работал. В какой-то момент начались "глюки" с распознованием кодов с ИК пприёмника. Ещё немного кода добавил и IRremote уже не способен распознавать коды. Вместо ожидаемых кодов кнопок из библиотеки посыпался какой-то шум. Правильно распознавались лишь 2-3 нажатия из 20-30. и чем больше дописывал код основной программ, тем становилось всё хуже и хуже. При чём, загружая пустой скетч, в котором только проверка ИК, вновь 100% "попаданий по кодам.
Явно стало очевидным, что дело не аппаратной части, в общем-то. Полез штурмовать интернет и наткнулся на сайт разработчиков IRremote. Скачал свежую версию, установил и сразу все проблемы (связанные с ИК) в большой программе ИСЧЕЗЛИ!
Вывод: Если работаете с ИК и возникают непреодалимые или даже необъяснимые сбои, помехи и т.п., то смело ищите и качайте свежую версию IRremote и скорее всего будет Вам счастье!!!
хм.. и, какая версия IRremote самая свежая, где сайт разработчиков?
хм.. и, какая версия IRremote самая свежая, где сайт разработчиков?
которая не пахнет!
https://github.com/z3t0/Arduino-IRremote
Кстати длительный опыт эксплуатации устройства показал, что глюки с распознанием кодов по прежнему имеют место быть, но в значительно меньшей степени.
https://github.com/z3t0/Arduino-IRremote
Кстати длительный опыт эксплуатации устройства показал, что глюки с распознанием кодов по прежнему имеют место быть, но в значительно меньшей степени.
какого рода глюки имеют место быть?
В какой-то момент начались "глюки" с распознованием кодов с ИК приёмника. Ещё немного кода добавил и IRremote уже не способен распознавать коды. Вместо ожидаемых кодов кнопок из библиотеки посыпался какой-то шум. Правильно распознавались лишь 2-3 нажатия из 20-30. и чем больше дописывал код основной программ, тем становилось всё хуже и хуже. При чём, загружая пустой скетч, в котором только проверка ИК, вновь 100% "попаданий по кодам.
Ещё одно странное проявление: прикрывая пальцем примерно на 50% "линзу" ИК-приёмника или ИК-передатчика, коды распознаются в 99% случаев правильно. Я пока вообще отказываюсь что-либо понимать... Иной раз с момента загрузки МК всё работает идеально, а иной раз вылазит такой глюк.
Прошло три года, а "воз и ныне там". Программа разрослась, а с ИК-сигналами по прежднему проблема... Пробовал на днях общаться с разработчиком бибилотеки - очень отзывчивый "малый", только вот с моим "знанием" английского, общего языка мы с ним так и не нашли... Он, на сколько я понял из Канады.
Может кто подскажет как при занятом другими делами прерывании INT0, навешать ИК приёмник на ногу INT1, и в момент поступления сигнала вызывать обработку бибилотекой поступившего сигнала?
По умолчанию, я так понял библиотека работает исключительно по таймеру(прерыванию), который в определённых случаях может и пропустить своё важное дело, обработать, в данном случае сигналы с ноги ИК. Так и теряются данные и появляется "шум". У меня программа большая и видимо не совсем оптимально написана и такие случаи, чем дальше тем больше, возникают. Хочу попробовать привязаться к внешнему прерыванию, и надеюсь перестанут теряться данные с ИК-приёмника.
Может кто-то что-то подсказать по данному вопросу? Если я конечно ясно описал ситуацию!? ))
Мое предположение что у вас программа много времени проводит в обработках прерываний. Поэтому когда наступает время обработки таймера, в этот момент обрабатывается что-то другое. Так что может быть проще поставить дополнительный контроллер и разгрузить таким образом основной. Ну или опубликуйте свой код, тогда будет ясно насколько ваша программа оптимально написана. Помните, что основное правило при программировании прерываний - они должны обрабатываться как можно быстрее.
Исходник здесь - https://cloud.mail.ru/public/BVe8/ZQKMPb6wq
Пару лет назад, устав воевать с IRremote и необходимости использовать все таймеры МК, поискал и нашёл библиотеку, работающую намного стабильней и использующую прерывание для ИК-приемника, и не использующую настройки таймеров. И с тех пор не знаю горя с Arduino. Это IRlib.
https://github.com/cyborg5/IRLib
Теперь началась та же морока, как у вас, с IRremoteESP8266 и альтернативы пока не нашёл.
Спасибо за ссылку! У меня авто уехало вместе с девайсом и не решённой проблемой к новому автовладельцу...
и не использующую настройки таймеров. И с тех пор не знаю горя с Arduino. Это IRlib.
Ага. Вот здесь как раз выбор какой таймер не использовать ;)
IRLibTimer.h стр.258
Еще и содержит в себе делеи на десятки миллисекунд. Очень полезная )))
Ну хотяб заглядуйте в исходники прежде чем рекомендовать.
Он некропостер, ему пофик
Их двое.
Вчера у меня была такая же проблема. Библиотека то же IRremote. Когда датчик стоял в платке все работало чудесно, но место куда надо было устанавливать датчик, вмести с платкой не помещался. Датчик и платку соединил проводами 12 см. Начались глюки, то сигнал проходит, а в основном не проходит, я пустил экранированный провод - нет результата, когда припаял конденсатор на 100мкф проблема пропала. Источник питания у меня импульсный мне кажется он и дает помеху.
Их двое.
Я вообще не понимаю как эти некропосты появляются... Неужто сложно поглядеть на дату! Нет, надо отвечать как будто бы вчера.)))
У меня приёмник от Arduino был на удалении около метра, в салоне машины. Мне не помогли ни экранированный провод ни фильтра у самого приёмника...
У меня от ардуино до платки около полу метра и от платки до датчика еще сантиметров 15. Попробуйте без провода то есть сразу датчик подключить к ардуино, как будет работать? Если будет работать нормально то причина в этом удлененном проводе. Попробуйте на сам датчик в питание последовательно поставить резистор ом 50-100 и сглаживающий конденсатор 100 мкф.
ТС не парьте мозги со слайконтролом, установите Intelli Remote.