ИК пульт

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

Re: ИК пульт

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

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

      btfss  C_imp,0    ; проверяем 0-й бит счётчика, если 
                        ; он = 0 - посылаем низкий уровень,
      goto   Send_LL    ; который у нас всегда одинаковой длины
;--- если передали 31 имп-с (т.е. должны перед. 32-й) - передача окончена
      movlw  .32
      xorwf  C_imp,0
      btfss  Status,2   ; если флаг Z установился - пропускаем переход
                        ; к передаче высокого уровня и завершаем передачу
      goto   Send_HH
;-------------------
Send_end
      clrf   INTCON     ; сбрасываем все прерывания и флаги
      call   Pause      ; выдерживаем паузу
      goto   Scan       ; переходим к сканированию клавиш
;--- посылаем высокий уровень ---
Send_HH
      movf   INDF,0     ; читаем передаваемый байт
      andwf  Nbit,0     ; "И" передаваемого байта с указ.передаваем. бита
      btfss  Status,2   ; если Z=1 - в передаваемом байте, в поз.Nbit у нас 0
      goto   Send_H1
;--- загружаем длит-ть высокого уровня, соответствующую нулевому биту ---
Send_H0
      movlw  Th0
      movwf  TMR0       ; загружаем Th0 в TMR0
      goto   Next
;--- загружаем длит-ть низкого уровня, соответствующую единичному биту ---
Send_H1
      movlw  Th1
      movwf  TMR0       ; загружаем Th1 в TMR0
Next  incf   C_imp,1    ; увеличить счётчик импульсов
      bcf    Status,0   ; сбросить флаг переноса
      rlf    Nbit,1     ; сдвинуть указатель передаваемого бита
      btfss  Status,0   ; если С=1 - ещё раз сдв.влево указ.бита и увелич.FSR
      goto   Next2
      rlf    Nbit,1
      incf   FSR,1
Next2 bsf    INTCON,7   ; разрешить немаскированные прерывания
      goto   Hlevel
;--------------------
Send_LL
      movlw  Tl
      movwf  TMR0       ; загрузить Th в TMR0
      incf   C_imp,1    ; увеличить счётчик импульсов
      bsf    INTCON,7   ; разрешить немаскированные прерывания
      goto   Llevel
Ну и в шапке названия поменяем и константы (чтоб нужные длительности получить), да и ещё, здесь мы делитель будем не на 64, а на 32 использовать:

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

 Tl    equ  .236        ; 255-длительность низкого уровня
 Th1   equ  .218        ; 255-длительность высокого уровня 1-го бита
 Th0   equ  .236        ; 255-длительность высокого уровня 0-го бита
 Tsl   equ  .236        ; 255-длит-ть низкого уровня в старт. последов-ти
 Tsh   equ  .180        ; 255-длит-ть высокого уровня в старт. последов-ти

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

;--- Настраиваем предделитель таймера ---
      movlw  b'00000100'; настройка предделителя 1:32, 32*256=8,192 мс
Фу! Вот, кажись ничего не забыл.
С уважением, администрация сайта.
vladik0000
Читатель
Читатель
Сообщения: 2
Зарегистрирован: 28 авг 2012, 03:59

Re: ИК пульт

Сообщение vladik0000 »

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

Re: ИК пульт

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

Ошибочка вкралась. Ранее я писал:
т.е. каждую команду разбиваем вот таким образом: 0xxxxxxx xxx00000 и обозначим их в шапке CMD_z2 и CMD_z1, где z - номер команды
Далее в младшие 5 байт CMD_z1 добавлялся адрес и всё это помещалось в byte1. Но в этом случае сначала передаётся адрес, а потом команда, а должно быть наоборот.
Чтобы всё стало правильно, нужно команду в шапке записывать таким образом: CMD_z1 - 8 младших бит команды, CMD_z2 - 000000xx (xx - 2 старших бита команды), AL надо в шапке записывать так: 0xxxxx00 (xxxxx - 5 бит адреса). Ну и в коде переделать кусок формирования байт для передачи вот так:

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

;*** ПОДГОТОВКА К НАЧАЛУ ПЕРЕДАЧИ ************************
Tx_CMD1
      movlw  CMD_11
      movwf  Byte1
      movlw  CMD_12
      goto   Form_Com
;------------------------
Tx_CMD2
      movlw  CMD_21
      movwf  Byte1
      movlw  CMD_22
      goto   Form_Com
;------------------------
Tx_CMD3
      movlw  CMD_31
      movwf  Byte1
      movlw  CMD_32
      goto   Form_Com
;------------------------
Tx_CMD4
      movlw  CMD_41
      movwf  Byte1
      movlw  CMD_42
Form_Com
      movwf  Byte2
      movlw  AL
      iorwf  Byte2,1
P.S. Решил я тоже эту прошивку слепить и испытать, благо телек SONY стечением звёзд под рукой оказался, а пульт самопальный только перешить...
С уважением, администрация сайта.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: ИК пульт

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

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

Re: ИК пульт

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

Вот короче окончательный вариант. Подгонял константы для времени импульса/паузы по сцилу, получилось что они немного отличаются от расчётных, но я биты калибровки внутреннего генератора затёр, пришлось поставить от балды, возможно с этим связано (в скобках указаны расчётные значения констант).
С уважением, администрация сайта.
dethdron
Читатель
Читатель
Сообщения: 4
Зарегистрирован: 03 мар 2013, 04:50

Re: ИК пульт

Сообщение dethdron »

Доброго времени суток, возникла потребность сделать пульт так как родной утерян. Использовать его хочу с магнитолой вмонтировав в руль, так вот, есть пара вопросов, делать думаю на attiny но мне нужно минимум 5 кнопок это громкость + - влево вправо и set( для выбора cd radio flash) еще так как пульт утерян то возможности считать команды невозможно. в инете нарыл инфу по нему?
Protocol Nec-Clarion
Address 0x2487
VolUp 0x1A
VolDn 0x05
BAND/SET 0x1B
7/LEFT 0x1E
9/RIGHT 0x1F
Так как я в написании прошивки ни чего не понимаю то прошу помощи в написании и как бы сделать что бы громкость +- многократно отсылали команды
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: ИК пульт

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

Команды он и так многократно будет отсылать (через определённые интервалы, пока кнопку не отпустишь), а программировать всё равно придётся (вполне может понадобиться подбирать константы для всяких задержек). В принципе - надо взять вот эту прогу, в ней заменить AL на 0x87, AH на 0x24, CMD_1 на 0x1A, CMD_2 на 0x05, CMD_3 на 0x1B, CMD_4 на 0x1E и скомпилировать то, что получилось (сначала попробуй для 4-х кнопок). Пятую кнопку можно добавить, если использовать первую ногу не как RESET, а как вход PB5 (это уже надо прогу более серьёзно менять).
С уважением, администрация сайта.
dethdron
Читатель
Читатель
Сообщения: 4
Зарегистрирован: 03 мар 2013, 04:50

Re: ИК пульт

Сообщение dethdron »

значит в адресе зашифрован старший и младший байт) а я то думал)) прочитал всю ветку и наткнулся на пульт под 5 кнопок на тиньке от фотика . завтра поеду за деталями заоодно ради интереса соберу еще на пике один
Вложения
взято с hardlock.org.ua
взято с hardlock.org.ua
sch_attiny13_1.gif (7.49 КБ) 5417 просмотров
взято с hardlock.org.ua
взято с hardlock.org.ua
dethdron
Читатель
Читатель
Сообщения: 4
Зарегистрирован: 03 мар 2013, 04:50

Re: ИК пульт

Сообщение dethdron »

Собрал пультик прошил работает ик посылает команды
IMAG0531.jpg
, только вот магнитола не хочет воспринимать их, видимо где то в прошивке косяк :cry: (( Вот прошивка
ikpult_pic12_prg_nec.rar
(3.43 КБ) 400 скачиваний
помогите разобраться поправьте пожалуйста :?:
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: ИК пульт

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

1. посмотреть, есть ли вообще импульсы на ИК-диоде.
2. посмотреть, правильно ли они формируются. Записать сцилом пакет и дешифровать. Если шлёт то, что надо - значит дело в несовпадении частоты.
3. nop-ами и константами подбирать нужные длительности импульсов/пауз.

Вероятнее всего дело в последнем (но проверять - всё равно по порядку), были уже прецеденты, хоть и пишут, что внутренний генератор калиброванный.
С уважением, администрация сайта.
Ответить

Вернуться в «Интерфейсы / Протоколы / Периферия»