Страница 1 из 2

ИК пульт управления на AVR

Добавлено: Ср авг 25, 2010 14:44:27
Skiludr
Моя задумка такова: хочу сделать пульт управления на основе ИК диодов. Передатчик либо обычный пульт от бытовой техники либо схемка на AVR. А приемник, это схемка с фотоприемником и AVR, схема приемника должна при нажатии кнопки на пульте включать нагрузку т.е. 1 на лапке микроконтроллера. Помогите реализовать или подскажите как это сделать!

Re: ИК пульт управления на AVR

Добавлено: Ср авг 25, 2010 16:29:46
belyay

Re: ИК пульт управления на AVR

Добавлено: Ср авг 25, 2010 16:59:02
Skiludr
Хотелось бы что-о более конкретное, рабочий проект например))

Re: ИК пульт управления на AVR

Добавлено: Чт авг 26, 2010 17:21:42
PB_EXPERT
Прошивку для RC5 приёмника и передатчика, можно сделать в среде BASCOM
Для приёмника используется команда GETRC5, а для передатчика - RC5SEND
Примеры есть в хелпе баскома.

Re: ИК пульт управления на AVR

Добавлено: Пт авг 27, 2010 07:13:23
Anode_Katode
PB_EXPERT писал(а):Прошивку для RC5 приёмника и передатчика, можно сделать в среде BASCOM
Для приёмника используется команда GETRC5, а для передатчика - RC5SEND
Да, есть такие команды. Только почему-то далеко не все пульты воспринимают :(
Для сравнения я сделал вот такой девайс: http://radioded.ru/content/view/129/1/ и собственную штуковину на меге8 с прошивкой на бейсике. В результате из 8 пультов схема на тиньке13 приняла 7, а мега на бейсике всего 5.
ИК приемники одинаковые стояли, тактовая частота МК тоже одинаковая была.

Re: ИК пульт управления на AVR

Добавлено: Пт авг 27, 2010 08:28:33
ooogo
может тут найдете чего подходящего http://radiokot.ru/forum/viewtopic.php? ... 61&start=0

Re: ИК пульт управления на AVR

Добавлено: Сб сен 04, 2010 14:46:26
lluganet
http://aes.at.ua/publ/31-5-2
там есть несколько разных и довольно простых устройств с обучением под пульт

Re: ИК пульт управления на AVR

Добавлено: Сб сен 04, 2010 16:05:04
aleksandr-zh
Skiludr писал(а):Моя задумка такова: хочу сделать пульт управления на основе ИК диодов. Передатчик либо обычный пульт от бытовой техники либо схемка на AVR. А приемник, это схемка с фотоприемником и AVR, схема приемника должна при нажатии кнопки на пульте включать нагрузку т.е. 1 на лапке микроконтроллера. Помогите реализовать или подскажите как это сделать!
я делал это
часть кода тут
http://bascomavr.3bb.ru/viewtopic.php?id=287

если есть вопросы - в личку

Re: ИК пульт управления на AVR

Добавлено: Пн сен 06, 2010 19:11:48
Alex Medvedev
Я собирал вот такой пультик http://avrdevices.ru/ik-pulyt/
Посмотри может поможет. Протокол RC5 только у меня там бит toggle не используется. Лень было заморачиваться =)

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 00:58:38
Секретный кот
Anode_Katode писал(а):Да, есть такие команды. Только почему-то далеко не все пульты воспринимают :(
Может, потому что далеко не все пульты – RC5? :)))

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 06:51:13
Anode_Katode
Секретный кот писал(а):Может, потому что далеко не все пульты – RC5?
Ах, если бы, ах если бы...
К сожалению, проверялись гарантировано RC5.

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 07:12:15
ARV
а я сейчас завершаю тестирование своей собственной библиотечки WinAVR для приема-передачи RC5. пока тесты очень положительные результаты дают. передача требует порядка 300 байт flash-памяти AVR, а прием - порядка 700, т.е. можно даже на тини13 делать девайсы.
как закончу тестирование - опубликую на своем сайте :)

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 07:47:36
aleksandr-zh
кусок кода под FastAVR

Код: Выделить всё

'=== примем 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 Function
300 байт - что-то многовато, у меня чуть больше 210 с выдачей принятых данных в UART

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 08:15:50
ARV
aleksandr-zh, при всем уважении: приведенный кусок кода как-то слабо вяжется с RC5.

во-первых, RC5 - это 14-битовый код, у вас же показан прием 8 бит.
во-вторых, мне показалось, что кодирование в вашем примере немного отличается от того, что принято в RC5.
в третьих, я указал байты кода так же вместе с main(), в которой делается мелкий анализ принятого кода - светодиод моргает.
в четвертых, сомневаюсь, что при использовании stdio.h для выдачи в UART printf-ом хоть чего-то объем кода будет меньше килобайта.
в-пятых, 300 байт я указал для ПЕРЕДАТЧИКА, а прием у меня даже больше :)))
ну и наконец, в-шестых, вы привели странный код на каком-то бейсике, возможности которого я никак не могу оценивать - может, это действительно супер-язык, дающий микро-размер кода, однако я делаю свои поделки исключительно на WinAVR, поэтому сравнение с другими языками некорректно в принципе (еще можно как-то сравнить с другими компиляторами Си). Виденные мною реализации приема RC5 на ассемблере - разговор особый, а на Си - показались гораздо сложнее и навороченнее по тексту исходника, чем мой вариант.

но я не хвалюсь - наверняка кто-то сумеет и лучше сделать (или уже сделал), я не против, я за! :beer:

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 10:32:28
PB_EXPERT
ARV писал(а):может, это действительно супер-язык, дающий микро-размер кода
Здесь вы правы - FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.

Re: ИК пульт управления на AVR

Добавлено: Чт сен 09, 2010 11:43:15
ARV
PB_EXPERT писал(а):Здесь вы правы - FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.
готов признать, но все равно отмечу, что при сравнении разных языков компиляция одного и того же исходника невозможна, а значит, на самом деле сравниваться будут навыки двух программистов, каждый из которых знает свое средство лучше другого. причем один из программистов попадает в заведомо худшие условия, если его исходник второй программист "переводит" на другой язык: второй программист в этом случае сразу может видеть неоптимальности кода первого и автоматически устранять их.

поэтому даже при сравнении программ-аналогов по функциям результаты могут не отражать действительного положения вещей в работе компиляторов. :)))

Re: ИК пульт управления на AVR

Добавлено: Пт сен 10, 2010 11:43:12
ARV
я тут посидел, подумал...
если сделать прием 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;
}
учтите, что различные прерывания, если они есть, искажают точность отработки задержек и поэтому значение BIT_TIME надо соответственно корректировать, иначе приема корректных кодов не будет

ну, кто там что говорил про супер-пупер бейсики? ;)

Re: ИК пульт управления на AVR

Добавлено: Пт сен 10, 2010 12:59:04
PB_EXPERT
ну, кто там что говорил про супер-пупер бейсики
На бейсике можно добится такого же результата, используя функцию

Код: Выделить всё

RC5(Adr, Com)
а не изобретая велосипед как в вашем случае!

Re: ИК пульт управления на AVR

Добавлено: Пт сен 10, 2010 13:50:35
ARV
PB_EXPERT писал(а):На бейсике можно добится такого же результата, используя функцию

Код: Выделить всё

RC5(Adr, Com)
а не изобретая велосипед как в вашем случае!
да ладно! :)))
по формату функции это скорее ПЕРЕДАЧА кода, а не прием :)))
а кроме того, после того, как я опубликовал код функции, теперь и на Си тот же эффект достигается практически точно так же

Код: Выделить всё

get_ir()
:)))

речь шла не о том, как в тексте программы это выглядит, а о том, сколько памяти требует.
PB_EXPERT писал(а):FastAVR создает прошивки, хорошо оптимизированые по размеру и скорости работы.

Re: ИК пульт управления на AVR

Добавлено: Пт сен 10, 2010 14:07:32
PB_EXPERT
ARV писал(а):по формату функции это скорее ПЕРЕДАЧА кода, а не прием
Это прием.
ARV писал(а):речь шла не о том, как в тексте программы это выглядит, а о том, сколько памяти требует
Вот асм код функции RC5.
Считайте сколько памяти нужно.

Код: Выделить всё

;////// 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