Коды для пультов на attiny13

Здесь обсуждаем устройства на МК и программы для них
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Коды для пультов на attiny13

Сообщение xorkrus »

Здравия желаю
В общем у меня два вопроса достаточно простых но мне непонятных:
1. Как их переводить в код для пульта?
2. Реально ли совместить коды двух разных пультов (но оба NEC)?

1. Вот есть данные одного пульта в lirc и второго вот таким скриншотом
pult2.png
2. собственно и хотелось бы по паре кнопок обоих уместить в одном пульте. или может нажатием одновременным двух кнопок переключаться

Подскажите кто чем может. По первому пункту хотя бы. С уважением,
Демократии нет и не будет!
Государство - это я!
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение rhf-admin »

Как их переводить в код для пульта?
Кого их? Осциллограммы?
Сначала прочитать вот эту статью, а потом переводить.
Длинная пауза - единица, короткая пауза - ноль. В твоём скриншоте осциллограмма не до конца, только первые 28 бит: 00110011 (младший бит адреса) 10111000 (старший байт адреса) 00000000(команда) 1111 (младшие 4 бита инвертированной команды). Все байты задом наперёд. Последние 4 бита не видно, но они тоже должны быть единицы.
Реально ли совместить коды двух разных пультов (но оба NEC)?
Конечно. Вычислил коды команд, да и подставляй их куда надо.
С уважением, администрация сайта.
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение xorkrus »

Спасибо, статью как-то пропустил.
В итоге для того, что на скрине будем иметь:

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

.equ  AL=0b00110011 ; адрес 04h (заданный младший байт адреса) 00110011 
.equ  AH=0b10111000 ; адрес CBh (заданный старший байт адреса) 10111000
.equ  CMD_1=0x00    ; код команды 1 00000000

А младший байт инвертированной команды...?
И по поводу другого пульта, данные о котором есть только в lirc-базе - их как-то можно... заюзать?
Демократии нет и не будет!
Государство - это я!
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение rhf-admin »

Невнимательно читал. :)
1. Байты передаются младшим битом вперёд. То есть правильно записанный младший байт адреса выглядит так: 11001100 = CCh, старший байт адреса: 00011101=1Dh
2. Команда однобайтная, только этот байт передаётся 2 раза - напрямую и инвертированный. Соответственно у команды нет младшего и старшего байтов. Байт команды только один.

В LIRC не настоящие коды протоколов. LIRC вообще не определяет тип протокола, она просто любой сигнал оцифровывает с какой-то своей дискретностью, заведомо большей, чем время импульсов любого пульта, что и позволяет ей работать практически со всеми типами пультов. Но это и является причиной того, что работает программа только в одну сторону. Т.е. сигналы пультов она понимает, но если коды LIRC перевести обратно в ИК-сигнал, то ни один родной приёмник их не поймёт.

P.S. Сигналы пультов достаточно просто самому отсканить. Вот здесь написано как.
С уважением, администрация сайта.
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение xorkrus »

Ну хоть с одним пультом разобрался - уже хорошо :) Спасибо.
А вот отсканировать я могу только один пульт. Второго (который в лирке) нет. И универсальные пульты оказались плохими помощниками.
Демократии нет и не будет!
Государство - это я!
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение xorkrus »

И снова здравствуйте!
Хочу сделать матричную клавиатуру и прошу подсказки. Если я правильно понимаю должно быть примерно так:

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

Scan: 
        ldi  w,0b00001100 
        ; PB3 - лед. PB2 - строка. PB1 - столбец
        out  DDRB,w
        ldi  w,0b11110011
        ; PB3 - лед. PB2 - резистор выкл. PB1 - резистор
        out  PORTB,w
        sbis PINB,1       ; если на входе низкий уровень - нажато
        rjmp Tx_CMD1
И так для каждого случая, верно?
И второе: для переделки на тини2313, менять регистры какие надо? Так вроде посмотрел поверхностно - все нормально.
Демократии нет и не будет!
Государство - это я!
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение rhf-admin »

Что-то у меня сегодня с экстрасенсорикой нелады. Не понимаю я что за лед, куда подключены столбцы и строки и как выглядят каждые случаи.
Вот есть пример матричной клавиатуры, читай, там описано подробно в чём фишка и как по очереди столбцы проверять.
С уважением, администрация сайта.
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение xorkrus »

Не осилил матричную клавиатуру, решил пойти путем попроще и... опять ниасилил. Изменения внесенные в код невелики - это замена TIMSK0 на TIMSK и ноги:
code

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

	;PD0/PD1-n.c.
	;PB7-2N2222A-ir
        ldi w,0b10000000 ; определяем входы и выходы порта
        out DDRB,w
	ldi w,0b01111111 ; включаем подтягивающие резисторы
	out PORTB,w      ; и определяем начальное состояние выходов
        ldi w,0b00000000 ; определяем входы и выходы порта
        out DDRD,w
	ldi w,0b00000000 ; включаем подтягивающие резисторы
	out PORTD,w      ; и определяем начальное состояние выходов
        ldi w,0b00000000 ; определяем входы и выходы порта
        out DDRA,w
	ldi w,0b00000000 ; включаем подтягивающие резисторы
	out PORTA,w      ; и определяем начальное состояние выходов
И не заработало. Смысл - прижать все ноги А\Д портов к земле а Б проверять. В чем может быть проблема?
P.S. МК Attiny2313V
Демократии нет и не будет!
Государство - это я!
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение rhf-admin »

Хочется помочь, но как??? Где код??? Где
Выложи код, напиши что он должен делать по твоей задумке и что работает не так, как нужно.
Из того куска, который я вижу: PB7 - выход, остальные ноги порта B - входы. Состояние 7-й защёлки порта B =1, на остальных ногах порта включены подтягивающие резисторы (и то не факт, - неизвестно значение флага PUD в MCUCR).
С уважением, администрация сайта.
xorkrus
Читатель
Читатель
Сообщения: 12
Зарегистрирован: 14 мар 2012, 17:35
Откуда: Тамбов
Контактная информация:

Re: Коды для пультов на attiny13

Сообщение xorkrus »

Прощу прощения за долгий ответ. В общем-то в предыдущем посту (посте?) я указал все изменения в коде. Т.е. в дополнение к основному я прижал PortA и PortD к земле. PortB7 это ИК-диод. Зашил в 2313 и... все сломалось :)
Демократии нет и не будет!
Государство - это я!
Ответить

Вернуться в «Устройства на микроконтроллерах»