PIC Beginner - Infrared Receiver and IR Protocol


Closed Thread
Results 1 to 18 of 18

Hybrid View

  1. #1
    Join Date
    Aug 2009
    Posts
    9

    Default PIC Beginner - Infrared Receiver and IR Protocol

    I'm a beginner for PIC Basic Program. I want to control my PC Program with IR Remote Control. In my place, we can get various IR remote control but a few type of PIC : 16F84A, 16F628A, 16F648A, 16F877A and 18F4550 can available.

    I use 16F84A and 4MHz Crystal, RS232 for IR Remote Control.

    My first program is IR Remote Receiver with Sony IR Protocol. I choose a DVD Remote Control (Made in China). I tested my receiver to my PC via COM port. It did not work. So I choose universal remote control and assign SONY. Now It's ok.

    Secondly, I write my program with RC-5 Protocol. This code is posted by Bruce (http://www.picbasic.co.uk/forum/arch...php/t-308.html) It's also ok for universal remote that assigned for Philips. But it don't work for that DVD Remote Control.

    Then I tested simply that DVD Remote Control's IR signal with LED. LED is worked between 900ms and 920 ms. It may be Header of IR train. I searched data of all protocols (http://www.sbprojects.com/knowledge/ir/ir.htm). I thought that DVD remote use NEC protocol. I also found that most of China DVD player's remote control use NEC IR protocol in a manual of DVD Player.

    I learn NEC IR Protocol. It's type is different for Sony Protocol. Sony use Pulse Width Modulation [PWM]. But NEC use Pulse Distance Modulation [PDM]. I think that PulsIn is use to measure the pulse width. Is it right? So what is use to measure the distance between pulse. Is it [PulsIn + PAUSEUS]?

    For NEC Protocol, I refer dhouston's post (http://www.picbasic.co.uk/forum/show...7859#post77859). My receiver's LED is ok for that DVD remote any key press but in my PC program all signal is Zero.

    Any help would be greatly appreciated.

    If this receiver is ok, I want to do Universal Infrared Receiver (UIR) with USB (with ref: eg. A universal algorithm for implementing an infrared decoder: www.edn.com/article/CA6653644.html.

    Regard

    Moe
    Last edited by komoe01; - 29th August 2009 at 21:04.

  2. #2
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    A schematic of your IR LED circuitry is necessary so we can see whether you need to measure pulses or spaces. PulsIn measures spaces as well as pulses - you merely need to indicate the polarirty. There are some example circuits here...

  3. #3
    Join Date
    Aug 2009
    Posts
    9


    Did you find this post helpful? Yes | No

    Default PIC Beginner - Infrared Receiver and IR Protocol SONY AND NEC

    Thanks for reply

    IR LED circuitry is here.( please see attachment ).

    I use this circuit and test Sony Protocol. LED is blink for any key and correct key code is accept in PC via RS232.

    Here is code for Sony.

    'start code for Sony Protocol --------------------------------------------------------------

    'PIC 16F84A Sony SIRC Protocol

    Include "Modedefs.Bas"
    Define OSC 4 ' Set Xtal Frequency

    Header var word
    Body var word
    i var byte
    tmp var Byte
    irButton var byte
    irDevice var byte

    irIN var PortA.2 'IR Input
    ToCOM var PortB.4 'Serial Data to compute COM port [RS232]

    'next time use both Sony and NEC Protocol in a PIC
    'Same Key from different remote do different tasks
    'eg Key 1 from Sony Remote ----> task1 in PC
    ' Key 1 from NEC Remote -----> task2 in PC

    'SonyLED is blink for Sony and nec LED is blink for NEC Remote
    SonyLED var PortB.2 'Green LED for Sony Remote keypress
    necLED var PortB.3 'Red LED for NEC Remote keypress (Reserved)

    TrisA = %00000100 ' Input RA2 only
    TrisB = 0 ' Output All Port B

    Start:
    LOW SONYLED : LOW NECLED
    IRBUTTON=255: IRDEVICE=255

    'in Header is Sony 240
    Pulsin irin,0,header ' Measure the header length.
    if header > 270 or header < 200 then goto Start

    'if correct header read body 12 bit
    for i =0 to 11
    pulsin irin,0,tmp ' Measure the body length.
    if tmp >= 90 then
    Body.0[i]=1 'in Sony Logic 1 is 120
    else
    Body.0[i]=0 'in Sony Logic 0 is 60
    endif
    next

    IRBUTTON = Body & %01111111 'Mask 7 bit
    IRDEVICE = (Body >>7) & %00011111 'Mask 5 bit

    If IRDEVICE=255 then goto start

    Serout ToCom ,N9600,[IRBUTTON] 'to PC COM - Port

    if IRBUTTON >=0 and IRBUTTON < 255 then
    high Sonyled
    pause 300
    low Sonyled
    endif

    pause 100
    goto start


    'end of code for Sony Protocol ------------------------------------------------------

    I use this circuit again for NEC or CHINA DVD Remote Control.

    ' start code for NEC OR that DVD REMOTE -----------------------------
    'PIC 16F84A NEC Protocol Protocol

    Include "Modedefs.Bas"
    Define OSC 4 ' Set Xtal Frequency

    DEFINE PULSIN_MAX 968 '>968 RETURNS 0

    Header var word
    Body var word
    i var byte
    tmp var Byte
    irButton var byte
    irDevice var byte

    irIN var PortA.2 'IR Input
    ToCOM var PortB.4 'Serial Data to compute COM port [RS232]

    'nec LED is blink for NEC Remote
    necLED var PortB.3 'Red LED for NEC Remote keypress

    TrisA = %00000100 ' Input RA2 only
    TrisB = 0 ' Output All Port B

    Start:
    LOW NECLED
    IRBUTTON=255: IRDEVICE=255

    'in Header is NEC 900
    Pulsin irin,0,header ' Measure the header length.
    if header < 792 then goto Start

    While irIN=0:Wend 'wait pulse

    'if correct header read body 32 bit
    for i =0 to 31
    pulsin irin,0,tmp ' Measure the body length.

    If ((tmp<40) Or (tmp>180)) Then start

    if tmp >= 75 then
    Body.0[i]=1
    endif
    next

    IRBUTTON = Body & %11111111 'Mask 8 bit
    IRDEVICE = (Body >>16) & %11111111 'Mask 8 bit

    If IRDEVICE=255 then goto start

    Serout ToCom ,N9600,[IRBUTTON] 'to PC COM - Port

    if IRBUTTON >=0 and IRBUTTON < 255 then
    high necLED
    pause 300
    low necLED
    endif

    pause 100
    goto start

    ' end of code for NEC OR that DVD REMOTE ----------------------------

    LED is blink for Both remote control. But Data in my PC software All keys are same number.

    How can I fix it.

    Thanks.

    Moe
    Attached Images Attached Images  
    Last edited by komoe01; - 30th August 2009 at 11:02.

  4. #4
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    From your schematic it appears you are using an IR receiver. Which one?

    IR receivers usually are active low while the code I supplied for the NEC protocol was for RF where the receiver is active high. Also, my code was meant to work with the RF transmitter code that accompanied it which used slightly different timing than the NEC IR protocol.

    The EDN article is wrong about details of the NEC IR protocol. It is explained in this NEC datasheet.You will need to modify my RF code in order to receive/decode IR codes.
    Code:
    '12F629
    
    @ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF
    
    DEFINE PULSIN_MAX 1140				'>1140 RETURNS 0
    DEFINE DEBUG_REG GPIO
    DEFINE DEBUG_BIT 2				'GPIO.2
    DEFINE DEBUG_MODE 1 				'Inverted
    DEFINE DEBUG_BAUD 9600
    DEFINE OSCCAL_1K 1
    
    IR      VAR     byte[4]
    pulse   VAR     byte
    i       VAR     byte	         	
    stx     VAR     word            	'start of transmission
    
            CMCON = 7                   'comparators off
            Debug "IR NEC PROTOCOL"
    init:   IR[0]=0:IR[1]=0:IR[2]=0:IR[3]=0:i=0
            PulsIn GPIO.1, 0, stx	
            If (stx<760) Then init  		
            'debug #stx                 
            While GPIO.1=1:Wend			'wait space
            Repeat
              PulsIn GPIO.1, 1, pulse
              If (pulse>100) Then
                IR.0(i)=1				'set bit
              EndIf
              i=i+1 
            Until (i>31)
            For i = 0 To 3
              Debug IHEX2(IR[i] REV 8)
            Next
            GoTo init
    
            End
    I have not tested the above code (I don't have time to build a circuit with an IR receiver.) and you will need to convert it for your PIC and the pins you are using.

    Note also that my code does not deal with the NEC shortcut repeat code.
    Last edited by dhouston; - 30th August 2009 at 11:55.

  5. #5
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Change...
    Code:
            For i = 0 To 3
              Debug IHEX2(IR[i] REV 8)
            Next
    to...
    Code:
            For i = 0 To 3
              Debug IHEX2 IR[i]
            Next
    The bit order is already reversed as the bits are set by...
    Code:
    RF.0(i)=1

  6. #6
    Join Date
    Apr 2003
    Location
    Cambridge - UK
    Posts
    1,046


    Did you find this post helpful? Yes | No

    Default

    Moe, you might want to read this article: Controlling the world from your armchair

  7. #7
    Join Date
    Apr 2003
    Location
    Cambridge - UK
    Posts
    1,046


    Did you find this post helpful? Yes | No

    Default

    Moe, Infrared remote control decoding maybe considered something of a black art, however, this tutorial will show you that its principals are quite straightforward, and easy to implement on a PIC microcontroler.

    Thanks to BASIC’s shallow learning curve, software designs that used to take weeks can now be realised in a just few hours. This article presents software solutions in the PicBASIC Pro language.

    You might want to read the article: Controlling the world from your armchair

Similar Threads

  1. pic to pic ir link versus wired link : help please anyone
    By xnihilo in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 30th May 2008, 21:01
  2. PIC to PIC "wired" serial one-way communication - SERIN2/SEROUT2
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 14th April 2008, 20:02
  3. Infrared Receiver
    By emavil in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 8th December 2006, 01:03
  4. how to get pic to pic communication
    By kinsiro in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 30th August 2005, 17:12
  5. Can this IR Xmitter/Rcvr be improved?
    By peterdeco1 in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 24th August 2005, 11:27

Members who have read this thread : 0

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts