分享

Serial port controlled infrared transmitter based on PIC

 黄浦江中的一条鱼 2009-12-13

Peter's electronic projects

Serial port controlled infrared transmitter based on PIC

2002/06/16
designed by Peter JAKAB

NOTE for beginners: PICs are general purpose microcontrollers which have to be programmed before you can use them in the actual circuit! Check out this link to learn more.


http:///electronic/irtx_pic.html

http://www./index.php/Serial-driven_IR_remote_controller

http:///electronic/infrared.html

description

This is a programmable infrared (remote control) transmitter, which can be controlled from a PC serial port. It is capable of sending many remote control formats, including the Philips RC-5 standard. Exact formats with the timing parameter names are shown on the pictures:

operation

The controller will accept commands on the serial port. Settings are: 19200 bps, 8 bits, no parity, 1 stopbit, no flow control (XON/XOFF or RTS/CTS). Commands consist of hex coded bytes and must be written on the port as ASCII characters separated by space, terminated by ENTER (ASCII char 0d) The list of commands is here:

SETSTATE set IR mod output state
Setting the mod output HIGH for a long time can result in blowing the IR transmitter LED out!
54 <state>
   
SETPARAMS set coding parameters
55 <ir_T> <head_h> <head_l> <bit0_h> <bit0_l> <bit1_h> <bit1_l> <tail_h> <tail_l>
55 <ir_T> <skipbits> <togglebits> <firstbyte> <rc5tail>
   
SENDPDM send ir command
header pulse high for T*head_h, low for T*head_l
data bytes transmitted as: bit#0 bit#1 bit#2 bit#3 bit#4 bit#5 bit#6 bit#7
tail bit is high for T*tail_h, bit0 is high for T*bit0_h, low for T*bit0_1,bit1 is high for T*bit1_h, low for T*bit1_l
56 <byte> [byte] [byte] ...
   
SENDRC5 send ir command
transmit 2 bytes per ir command: <firstbyte> 8-skipbits bits then <secondbyte>, all 8 bits
data bytes are transmitted as: bit#7 bit#6 bit#5 bit#4 bit#3 bit#2 bit#1 bit#0
bit0 is high for T, low for T, bit1 is low for T, high for T

This command can be used to repeat a given ir command, but not to transmit more commands one by one, because the toggle bit is only set after sending out all the ir commands. To send more than one ir commands, repeat the SENDRC5 command with the appropriate second byte(s).

57 <second byte> [second byte] ...

ir_T is given in 10 usecs, other timing values are given in ir_T steps

You can use a terminal emulator program to test out the circuit (for example minicom on linux, NC terminal on DOS, or hyperterminal on windows), but the settings usually won't work at first, so it is recommended that you write a small program to set the parameters and send commands by pressing keys on the keyboard.

Download source code here.

examples

To program the controller to send a "channel +" command to an ITT 3520 video recorder, you need to send:

55 38 10 8 1 1 1 3 1 1

This command will set these parameters: T=560 usec, header pulse=16T, header gap=8T. bit0 pulse=1T, bit0 gap=1T, bit1 pulse=1T, bit1 gap=3T, tail pulse=1T

56 31 ce 01 fe

This command will send the required command bytes to the video recorder. You can see that this format contains some type of ID and a command code. Each byte is transmitted normally then with all bits reversed. You can repeat this second command more times to ensure reception.

obtaining the protocol for your remote

The easiest is if you find the specification of your remote. Good pages to start are: the SIRCS page and the HP48 remote control program page. If you have no success, you need to measure the signal timings yourself. If you don't have a storage oscilloscope, here is a cheap trick: connect an IR receiver module to your soundcard line input and digitize the modulation waveform of all the buttons on your remote with a sound recorder and editor program. Here is a waveform example for the ITT 3520 video recorder remote.

You can actually measure all the signal times of header, bit0, bit1 and the tail pulse in a sound editor and decode the bits by hand. The yellow bars on the picture show the decoded bits. The last 16 bits contain the button code. The actual code calculated from the bits is "31 ce 01 fe", and will control the video to step one channel up. Another example for the Panasonic remotes POWER button digitized is here:

The encoding scheme is quite similar, with the difference being only in the header/bit pulse/gap times. You can decrypt the command shown yourself. It shows the sequence 02 20 90 00 3d ad, where the first 4 (!) bytes are the device identifier and the last two (3d ad) are the actual command. These remotes employ some strange checksum/code integrity mechanism, where the codes are in byte pairs and the second byte is actually calculated (?) from the preceding one or they contain more than 8 bits and mirror some of the bits.

schematic diagram

The first picture shows the controller and the IR transmitter parts. The second shows the (nonstandard) serial interface level translator, which converts the TTL voltages to/from RS232 levels of the serial port.




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多