Полная версия этой страницы:
Эмулятор ИК пультов
AlexTech
Apr 1 2007, 13:05
Вот возникла необходимость замутить такой девайс: управление несколькими бытовыми приборами с помощью ИК. Микроконтроллер управляется с помощью кнопок(6) и командами с компа через usb или com, и соответственно должен выдавать ИК команды предварительно записанные с "родных" пультов.
Схемотехника понятна и примитивна, а вот как генерировать пачки ИК импульсов с несущей 38-40кгц я чего-то никак не могу придумать. Может есть у кого идеи или готовые наработки, помогите пожалуйста разобраться...
Целевой девайс будет на AT90S2313, 12мгц
Тестовая платформа - Mega16, 8мгц
ЗЫ. Для любыпытствующих: это будет работать в автомобиле - кнопки те которые на руле стоят, компутер - CarPC, а управлять будет магнитолой и монитором.
Тоже мысль возникала сделать универсальный пульт для себя.
Из идей - это использовать какой нибудь готовый пульт в который встраивается своя платка,
которая понимала бы сигналы излучаемые этим пультом и выдавала нужный.
Плюс в том что есть готовый корпус с кнопками, нужно только подключить выход
на свою схему а из нее на излучатель.
У атмела есть апноты
AVR410: Приемник RC5 инфракрасного дистанционного управления
описаниеисходникиAVR415: Передатчик RC5 инфракрасного дистанционного управления
описаниеисходники
AlexTech
Apr 1 2007, 14:23
Цитата(jekler @ Apr 1 2007, 15:02)

Очень похоже ))) осталось с делителями частоты разобраться. Спасибо.
bodja74
Apr 1 2007, 14:40
Занимался я подобным года 2-3 назад,даже наваял тяжеловесную прогу для компа, столкнулся
с большим разнообразием протоколов ,с префиксами и суфиксами сигналов,так и не смог привести все это в какой то общий вид.
Поэтому если есть мысля типа универсального пульта - ориентируйтесь на какой то один протокол ,наиболее распостраненный RC-5 ,все однопроцессорные телики на нем и большинство DVD.
Наиболее распостраненная модуляция 38кГц и 455кГц.
Насчет использования в готовом корпусе пульта из атмела годится Тини28 c аппараным модулятором -она "затачивалась" под это.Памяти под универсалку маловато ,но шить под конкретный аппарат можно
(типа как пульты BQS)
rezident
Apr 1 2007, 15:42
Фирма SONY начала производить универсальные обучаемые пульты ДУ еще лет 15 назад. Сейчас если это и актуально, то лишь для целей самообразования ИМХО.
P.S. Когда-то на форуме rc5.ru был опенсорсный проект по считыванию кодов от различных ТВ-пультов ДУ на компьютере и была база этих кодов. Сейчас видимо этот проект аннулировали.
Цитата
а вот как генерировать пачки ИК импульсов с несущей 38-40кгц я чего-то никак не могу придумать. Может есть у кого идеи или готовые наработки, помогите пожалуйста разобраться...
http://www.remexpert.com/forum/viewtopic.php?t=1000http://www.remexpert.com/forum/viewtopic.php?t=1003
Pyku_He_oTTyda
Apr 2 2007, 17:01
Цитата
Схемотехника понятна и примитивна, а вот как генерировать пачки ИК импульсов с несущей 38-40кгц я чего-то никак не могу придумать. Может есть у кого идеи или готовые наработки, помогите пожалуйста разобраться...
я на АВР делал, соневский. Очень просто: запускаем ШИМ, настроенный на 38 кгц, по окончании посылки останавливаем.
Цитата(Pyku_He_oTTyda @ Apr 2 2007, 18:01)

я на АВР делал, соневский. Очень просто: запускаем ШИМ, настроенный на 38 кгц, по окончании посылки останавливаем.
а можно примерчик?
Pyku_He_oTTyda
Apr 3 2007, 06:57
правда он корявый, сделано на ТИНИ26, 8Мгц выход с PВ1
//Timer/Counter 1 установки таймера
PLLCSR=0b00000110;
TCCR1A=0b11000010;
TCCR1B=0b00000100;
TCNT1=0x00;
OCR1A=100;
OCR1B=0x00;
void waitPLL(void)
{
//ждем синхронизации PLL при запуске МК (ШИМ тактируется от //встроенного PLL на 64 МГц
while((PLLCSR&0x01)==0);
}
// генерация старт-бита для посылки сони
void start(void)
{
TCCR1B|=0x80;
OCR1C=199; //запуск таймера
delay_2.4(); //задержка 2,4 мс (формируется TIMER0) в принципе //можно использовать и задержки из <delay.h>, тогда будет
// delay_us(2400); - проверял - работает, но так писать проги //несколько неправильно
OCR1C=0; //стоп таймера
delay_0.6(); // пауза до посылки следующего импульса (определено протоколом SIRC) (аналогично работает delay_us(600); )
}
насчет програмных задержек, просто, но не всегда надежно - компилятор может и дурить, выход отсчитывать временные интервалы с помощью другого таймера (душевное спокойствие гарантировано) или контролировать то, что получилось осцилографом
Цитата(Pyku_He_oTTyda @ Apr 3 2007, 06:57)

....
// delay_us(2400); - проверял - работает, но так писать проги //несколько неправильно
....
// ..... delay_us(600); )
}
Не правильно, правильно так:
delay_ms(2.4);
delay_ms(0.6);
И оптимизация как минимум -O1.
Анатолий.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.