IR remote на atmega8
- Войдите на сайт для отправки комментариев
Ср, 06/11/2013 - 07:56
Задача, казалось бы, тривиальная - включать/выключать лампу накаливания с ик пульта. Примеров масса. В самой бибилиотеке IR remote есть такой пример (IRrecvDemo). И на atmega328 (arduino uno) все прекрасно работает. Но если захотеть залить IRrecvDemo в atmega8, то облом! Не хватает 8 кб. Хотя головой понимаю, что для этой задачи atmega8 должно хватить с избытком.
Отсюда вопрос - как решить проблему включения нагрузки с ик пульта на atmega8?
Для себя вижу 2 пути решения:
1. Как то "ужать" библиотеку IR remote.
2. Писать скетч без этой библиотеки.
Подскажите в каком направлении двигаться правильнее?
Может есть готовые решения в среде Arduino IDE?
Только если переписать прошивку на чистом Си.
Для меня на данный момент это сложновато :(
Какая именно библиотека IR remote используется ? Ссылка ?
Задача, казалось бы, тривиальная - включать/выключать лампу накаливания с ик пульта. Примеров масса. В самой бибилиотеке IR remote есть такой пример (IRrecvDemo).
ну, и включайте лампу - зачем для этого нужно что-то в компорт писать?
Может есть готовые решения в среде Arduino IDE?
писал себе для одной лампы - одной кнопкой включается, другой выключается.
и, сделать "Step 2" отсюда(на пару байтов некс похудеет) - там чел много чего ещё делал, но я не понял
http://ubiyubix.wordpress.com/2012/05/05/porting-the-arduino-irremote-library-to-the-attiny4313/
вот ссылка на библиотеку
https://github.com/shirriff/Arduino-IRremote
Да,кстати , если убрать все упоминания сериал порта,то скетч меньше вроде бы на пару кб :)
ну, и включайте лампу - зачем для этого нужно что-то в компорт писать?
Вот верно в народе говорят "Утро вечера мудреннее" :)
Сел переписал свой код (подобен Вашему) и мой скетч стал меньше 8 кб. Вчера вечером-ночью у меня это не удавалось. Точно косяк у меня в мозгу.
Вот мой код:
Спасибо за помощь!
kiril22? обратитесь к уважаемому камраду kisoft, он перелопатил библиотеку IRremote, под atmega16, и теперь мой скетч занимает всего 8 с небольшим килобайт, а в нем задействовано 11 кнопок.
Вот скрин: http://clip2net.com/s/675xdG
Вот код:
kiril22? обратитесь к уважаемому камраду kisoft, он перелопатил библиотеку IRremote, под atmega16, и теперь мой скетч занимает всего 8 с небольшим килобайт, а в нем задействовано 11 кнопок.
Спасибо! Попробую покопаться в вопросе оптимизации библиотек под конкретные задачи.
Я тут вчера тоже задумался над построением пульта. В интернете все примеры на TSOP22. А можно ли сделать это на ИК фототранзисторе(тот который в мышках)? Всеравно сигнал цифровой.
А если попробовать так? -
(по сути это некое подобие осцилографа)
На выходе мы получим массив данных из которых можно построить график на компьютере с шагом 10 милисекунд. А затем можно выяснить какой длительности сигналы и просто эмулировать их и переслать на ИК светодиод.
*Хотел попробовать, но никак не могу найти фототранзистор, а разбирать мышь основываясь только на своей теории как-то нехочется.
Думаю, так работать не должно.
Вот здесь можно почитать про ИК приемники
http://www.myrobot.ru/wiki/index.php?n=Components.TSOP
Думаю, так работать не должно.
Вот здесь можно почитать про ИК приемники
http://www.myrobot.ru/wiki/index.php?n=Components.TSOP
Спасибо, интересная статья.
Всё отличие между транзистором и датчиком которую я увидел - это фильтрация сигналов, отличных от " 36, 38, 40 кГц". Я так понял - если датчик ловит "пачку" с кол-вом испульсов от 15 до 50 - он устанавливает соответствующее напряжение на Vo , а дальше всю работу делает софт - кодирует и декуодирует значения в более читабельные пакеты.
По моему предположению (если частоты считывания хватит), ардвинка должна ловить именно те самые пачки - то есть самый низкий уровень(физический уровень). А закодировать их через функцию не составит труда - Например массив для включения телевизора будет выглядеть так:
int TVOn[]={27,15,27,27,27}; - где элементы массива представляют колличство импульсов на частоте приемника
27 - некое значение представляющее собой логическую единицу.
15 - логический ноль.
Через вывод каждого элемента вводится задержка равная времени между пачками.
Итого на выходе мы получим значение 10111.
Так что по моему мнению все упирается только в частоту считывания сигнала.
Вот немного оптимизировал свой код, добавил комментарии для начинающих. Проверил на atmega8, прекрасно работает. Всем спасибо за участие и помощь!
Жирно конечно, на чистом Си у меня заняло 1350 байт.
Полностью согласен, что жирно. Однако, считаю это адекватной платой за удобство и низкий порог вхождения в программирование микроконтроллеров (в плане знаний). Где мне такой подход мешает, я начинаю применять "чистый Си". Жаль, что время на его изучение и практическое применение у меня сильно ограничено.
Поддержу пожалуй тему
Вот что мне удалось сделать на Atmega8 и Arduino
Это запись в память одной кнопик пульта в память и с дальнейшим управлением.
Кстати сейчас вполне недорогие Atmega168 ссыль
немного дороже 328 можно взять
http://www.aliexpress.com/item/10pcs-lot-Free-Shipping-ATmega328P-AU-ATM...
Только на тини13 почему-то не канает, код кнопки походу другой нежели как на ардуино.
Может когда-то будет желание то разберусь с этим...
поддержу тему. сделал управление открытием/закрытием экрана для домашнего кинотеатра с проектором на атмега8
пока только управление с пульта
хочу сделать еще "автоматически" пульт, который бедет слать коды IR при включении проектора автоматически. Хочу тоже сделать на мега8, но вот IRremote принципиально не компилируется для атмега8
знает ли кто решение?
все получилось, пролистал исходники библиотеки и обнаружил, что для мега8 надо использовать 9-й пин вместо 3-го