ИК пульт управления на AVR
- Сообщения: 7
- Зарегистрирован: Ср авг 25, 2010 14:34:41
Моя задумка такова: хочу сделать пульт управления на основе ИК диодов. Передатчик либо обычный пульт от бытовой техники либо схемка на AVR. А приемник, это схемка с фотоприемником и AVR, схема приемника должна при нажатии кнопки на пульте включать нагрузку т.е. 1 на лапке микроконтроллера. Помогите реализовать или подскажите как это сделать!
- Реклама
- Сообщения: 7
- Зарегистрирован: Ср авг 25, 2010 14:34:41
- Сообщения: 986
- Зарегистрирован: Ср июл 07, 2010 06:48:57
Да, есть такие команды. Только почему-то далеко не все пульты воспринимаютPB_EXPERT писал(а):Прошивку для RC5 приёмника и передатчика, можно сделать в среде BASCOM
Для приёмника используется команда GETRC5, а для передатчика - RC5SEND
Для сравнения я сделал вот такой девайс: http://radioded.ru/content/view/129/1/ и собственную штуковину на меге8 с прошивкой на бейсике. В результате из 8 пультов схема на тиньке13 приняла 7, а мега на бейсике всего 5.
ИК приемники одинаковые стояли, тактовая частота МК тоже одинаковая была.
- Реклама
- Сообщения: 1306
- Зарегистрирован: Вс янв 18, 2009 20:51:02
может тут найдете чего подходящего http://radiokot.ru/forum/viewtopic.php? ... 61&start=0
http://aes.at.ua/publ/31-5-2
там есть несколько разных и довольно простых устройств с обучением под пульт
там есть несколько разных и довольно простых устройств с обучением под пульт
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
я делал этоSkiludr писал(а):Моя задумка такова: хочу сделать пульт управления на основе ИК диодов. Передатчик либо обычный пульт от бытовой техники либо схемка на AVR. А приемник, это схемка с фотоприемником и AVR, схема приемника должна при нажатии кнопки на пульте включать нагрузку т.е. 1 на лапке микроконтроллера. Помогите реализовать или подскажите как это сделать!
часть кода тут
http://bascomavr.3bb.ru/viewtopic.php?id=287
если есть вопросы - в личку
- Сообщения: 95
- Зарегистрирован: Сб мар 01, 2008 12:27:44
Я собирал вот такой пультик http://avrdevices.ru/ik-pulyt/
Посмотри может поможет. Протокол RC5 только у меня там бит toggle не используется. Лень было заморачиваться =)
Посмотри может поможет. Протокол RC5 только у меня там бит toggle не используется. Лень было заморачиваться =)
Может, потому что далеко не все пульты – RC5?Anode_Katode писал(а):Да, есть такие команды. Только почему-то далеко не все пульты воспринимают
Даже остановленные часы два раза в сутки показывают правильное время.
- Сообщения: 986
- Зарегистрирован: Ср июл 07, 2010 06:48:57
Ах, если бы, ах если бы...Секретный кот писал(а):Может, потому что далеко не все пульты – RC5?
К сожалению, проверялись гарантировано RC5.
а я сейчас завершаю тестирование своей собственной библиотечки WinAVR для приема-передачи RC5. пока тесты очень положительные результаты дают. передача требует порядка 300 байт flash-памяти AVR, а прием - порядка 700, т.е. можно даже на тини13 делать девайсы.
как закончу тестирование - опубликую на своем сайте
как закончу тестирование - опубликую на своем сайте
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
кусок кода под FastAVR
300 байт - что-то многовато, у меня чуть больше 210 с выдачей принятых данных в UART
Код: Выделить всё
'=== примем 8 бит ============
Function RX() As Byte
Local tiki As Byte, temp3 As Byte, DATA_RX As Byte
For temp3 = 7 To 0 Step -1
tiki=0
Shift(Left, 1, DATA_RX)
While Not in_signal: Wend ' Ждем 1
WaitUs 30 ' пауза на часть импульса
While in_signal
Incr tiki: WaitUs 1 ' Пауза 10 мкс
Wend
If tiki >100 Then DATA_RX = DATA_RX Or 1 'длинный -> бит =1
While in_signal: Wend ' Ждем завершения сигнала
Next
Return DATA_RX
End Functionaleksandr-zh, при всем уважении: приведенный кусок кода как-то слабо вяжется с RC5.
во-первых, RC5 - это 14-битовый код, у вас же показан прием 8 бит.
во-вторых, мне показалось, что кодирование в вашем примере немного отличается от того, что принято в RC5.
в третьих, я указал байты кода так же вместе с main(), в которой делается мелкий анализ принятого кода - светодиод моргает.
в четвертых, сомневаюсь, что при использовании stdio.h для выдачи в UART printf-ом хоть чего-то объем кода будет меньше килобайта.
в-пятых, 300 байт я указал для ПЕРЕДАТЧИКА, а прием у меня даже больше
ну и наконец, в-шестых, вы привели странный код на каком-то бейсике, возможности которого я никак не могу оценивать - может, это действительно супер-язык, дающий микро-размер кода, однако я делаю свои поделки исключительно на WinAVR, поэтому сравнение с другими языками некорректно в принципе (еще можно как-то сравнить с другими компиляторами Си). Виденные мною реализации приема RC5 на ассемблере - разговор особый, а на Си - показались гораздо сложнее и навороченнее по тексту исходника, чем мой вариант.
но я не хвалюсь - наверняка кто-то сумеет и лучше сделать (или уже сделал), я не против, я за!
во-первых, RC5 - это 14-битовый код, у вас же показан прием 8 бит.
во-вторых, мне показалось, что кодирование в вашем примере немного отличается от того, что принято в RC5.
в третьих, я указал байты кода так же вместе с main(), в которой делается мелкий анализ принятого кода - светодиод моргает.
в четвертых, сомневаюсь, что при использовании stdio.h для выдачи в UART printf-ом хоть чего-то объем кода будет меньше килобайта.
в-пятых, 300 байт я указал для ПЕРЕДАТЧИКА, а прием у меня даже больше
ну и наконец, в-шестых, вы привели странный код на каком-то бейсике, возможности которого я никак не могу оценивать - может, это действительно супер-язык, дающий микро-размер кода, однако я делаю свои поделки исключительно на WinAVR, поэтому сравнение с другими языками некорректно в принципе (еще можно как-то сравнить с другими компиляторами Си). Виденные мною реализации приема RC5 на ассемблере - разговор особый, а на Си - показались гораздо сложнее и навороченнее по тексту исходника, чем мой вариант.
но я не хвалюсь - наверняка кто-то сумеет и лучше сделать (или уже сделал), я не против, я за!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 331
- Зарегистрирован: Вс мар 30, 2008 14:31:51
Здесь вы правы - FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.ARV писал(а):может, это действительно супер-язык, дающий микро-размер кода
готов признать, но все равно отмечу, что при сравнении разных языков компиляция одного и того же исходника невозможна, а значит, на самом деле сравниваться будут навыки двух программистов, каждый из которых знает свое средство лучше другого. причем один из программистов попадает в заведомо худшие условия, если его исходник второй программист "переводит" на другой язык: второй программист в этом случае сразу может видеть неоптимальности кода первого и автоматически устранять их.PB_EXPERT писал(а):Здесь вы правы - FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.
поэтому даже при сравнении программ-аналогов по функциям результаты могут не отражать действительного положения вещей в работе компиляторов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
я тут посидел, подумал...
если сделать прием RC5 по принципу aleksandr-zh, т.е. ожидать прихода ИК-кода (и тем самым не давать ничего делать в программе), то в моей реализации на WinAVR функция ожидания кода занимает всего 50 байт с учетом RET и постоянным сбросом WDT во время ожидания (для attiny2313). вот как эта функция выглядит:учтите, что различные прерывания, если они есть, искажают точность отработки задержек и поэтому значение BIT_TIME надо соответственно корректировать, иначе приема корректных кодов не будет
ну, кто там что говорил про супер-пупер бейсики?
если сделать прием RC5 по принципу aleksandr-zh, т.е. ожидать прихода ИК-кода (и тем самым не давать ничего делать в программе), то в моей реализации на WinAVR функция ожидания кода занимает всего 50 байт с учетом RET и постоянным сбросом WDT во время ожидания (для attiny2313). вот как эта функция выглядит:
Код: Выделить всё
uint16_t get_ir(void){
uint16_t code = 0;
while(PIND & _BV(PD2)) wdt_reset(); // ждем начала первого импульса
_delay_us(BIT_TIME / 4.0); // ждем, пока пройдет 1/4 часть импульса
for(uint8_t i=0; i < RC5_CODELEN; i++){
wdt_reset();
code <<= 1;
if(!(PIND & _BV(PD2))) code |= 1; // если на входе 0 - значит передается 1
_delay_us(BIT_TIME); // ждем 1778 микросекунд - длительность 1 бита
}
return code;
}
ну, кто там что говорил про супер-пупер бейсики?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 331
- Зарегистрирован: Вс мар 30, 2008 14:31:51
На бейсике можно добится такого же результата, используя функциюну, кто там что говорил про супер-пупер бейсики
Код: Выделить всё
RC5(Adr, Com)да ладно!PB_EXPERT писал(а):На бейсике можно добится такого же результата, используя функциюа не изобретая велосипед как в вашем случае!Код: Выделить всё
RC5(Adr, Com)
по формату функции это скорее ПЕРЕДАЧА кода, а не прием
а кроме того, после того, как я опубликовал код функции, теперь и на Си тот же эффект достигается практически точно так же
Код: Выделить всё
get_ir()речь шла не о том, как в тексте программы это выглядит, а о том, сколько памяти требует.
PB_EXPERT писал(а):FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 331
- Зарегистрирован: Вс мар 30, 2008 14:31:51
Это прием.ARV писал(а):по формату функции это скорее ПЕРЕДАЧА кода, а не прием
Вот асм код функции RC5.ARV писал(а):речь шла не о том, как в тексте программы это выглядит, а о том, сколько памяти требует
Считайте сколько памяти нужно.
Код: Выделить всё
;////// RC5 receive ///////////////////////
_RC5: sbic PINC,2
rjmp _RC5
ldi zl,2
out TCCR0,zl
ldi r24,0x0e
ldi zl,212
out TCNT0,zl
_RC51: in r25,TCCR0
cpi r25,0x00
brne _RC51
andi zh,0x3f
_RC50: sbis PINC,2
rjmp _RC50
ret
;////// RC5 Ovf0 Interrupt ////////////////
IntN9:
ldi r25,34
out TCNT0,r25
clc
sbic PINC,2
sec
rol zl
rol zh
dec r24
brne _RC52
lsl zl
rol zh
lsl zl
rol zh
lsr zl
lsr zl
out TCCR0,r24
Com zl
Com zh
andi zl,0x3f
sbrs zh,0x07
ser zl
_RC52: reti


