Can this IR Xmitter/Rcvr be improved?


Closed Thread
Results 1 to 2 of 2

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Default Did it

    Hello Everyone. I made the improvements needed for multichannel operation and "instant on" I needed for my IR project. I'm posting it here if anyone is interested in IR remote control. I read documentation on how remote controls work and shortened the routine a bit (5 bit code instead of 8 bit). I know the code can be reduced even further by not repeating the commands 5 times for a 5 bit code but the program is still suprisingly short. The transmitter generates code bits which are LOW pulses in the IR receiver module that are either 1 or 2MS long by turning ON for this amount of time. The pulses received are made a 0 or 1. They are put into a variable from right to left. In this code I'm generating the number "23", transmitter pulses in MS are 2,2,2,1,2. Receiver variable will then be 1,0,1,1,1 = 23. Each operation begins with a 3MS start pulse to sync the receiver with the transmitter. The transmitter is running on 3V and the range is longer than my house. Here is the code. So far it works perfectly without any false activations using different "channels" (I call this channel 23). Any suggestions will be appreciated.

    ********IR Transmitter using 12F629*********
    CMCON = 7 'comparators off
    trisio = %11111111 'ALL INPUTS - HIGH & LOW COMMANDS CONVERT THEM TO OUTPUTS
    DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
    @ DEVICE MCLR_OFF, INTRC_OSC, WDT_ON, BOD_ON, PWRT_ON, PROTECT_ON
    X VAR BYTE

    STARTBIT:
    High GPIO.4 'GETTING 38KHZ WITH THIS SUBROUTINE
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X = X + 001
    IF X < 99 Then STARTBIT '99 GIVES 3MS START PULSE
    GoSub SEPARATETHEBITS

    FIRSTCODEBIT:
    High GPIO.4
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X= X + 001
    IF X < 66 Then FIRSTCODEBIT '2MS CODEBIT
    GoSub SEPARATETHEBITS

    SECONDCODEBIT:
    High GPIO.4
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X= X + 001
    IF X < 66 Then SECONDCODEBIT '2MS CODEBIT
    GoSub SEPARATETHEBITS

    THIRDCODEBIT:
    High GPIO.4
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X= X + 001
    IF X < 66 Then THIRDCODEBIT '2MS CODEBIT
    GoSub SEPARATETHEBITS

    FORTHCODEBIT:
    High GPIO.4
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X= X + 001
    IF X < 33 Then FORTHCODEBIT '1MS CODEBIT
    GoSub SEPARATETHEBITS

    FIFTHCODEBIT:
    High GPIO.4
    High GPIO.4
    Low GPIO.4
    Low GPIO.4
    LET X= X + 001
    IF X < 66 Then FIFTHCODEBIT '2MS CODEBIT
    GoSub SEPARATETHEBITS
    GoTo STARTBIT

    SEPARATETHEBITS:
    Pause 2
    LET X = 0
    Return

    ******************IR RECEIVER USING 12F629***************
    CMCON = 7 'comparators off
    trisio = %00001000 'RA3 INPUT FROM IR RCVR
    GPIO = 0 'ALL OUTPUTS LOW
    DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
    @ DEVICE MCLR_OFF, INTRC_OSC, WDT_ON, BOD_ON, PWRT_ON, PROTECT_ON
    CODELENGTH VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 PULSES MEASURED
    CODE VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 CODE BITS
    X VAR BYTE
    Clear 'RESET VARIABLES TO 0
    High GPIO.4 'ON IR RECEIVER MODULE ATTACHED TO GP4
    Pause 100 'SETTLE DOWN BOTH PIC & IR RECEIVER

    STARTPULSE:
    PulsIn GPIO.3,0,CODELENGTH 'MEASURE LOW PULSE (IR LED ON TIME)
    IF CODELENGTH <200 Then STARTPULSE 'LOOKING FOR 3MS PULSE
    IF CODELENGTH >400 Then STARTPULSE

    CODEPULSES:
    PulsIn GPIO.3,0,CODELENGTH
    IF CODELENGTH > 150 Then LET CODE.bit0 = 1 '2MS PULSE IS 1
    IF CODELENGTH < 150 Then LET CODE.bit0 = 0 '1MS PULSE IS 0

    PulsIn GPIO.3,0,CODELENGTH
    IF CODELENGTH > 150 Then LET CODE.bit1 = 1
    IF CODELENGTH < 150 Then LET CODE.bit1 = 0

    PulsIn GPIO.3,0,CODELENGTH
    IF CODELENGTH > 150 Then LET CODE.bit2 = 1
    IF CODELENGTH < 150 Then LET CODE.bit2 = 0

    PulsIn GPIO.3,0,CODELENGTH
    IF CODELENGTH > 150 Then LET CODE.bit3 = 1
    IF CODELENGTH < 150 Then LET CODE.bit3 = 0

    PulsIn GPIO.3,0,CODELENGTH
    IF CODELENGTH > 150 Then LET CODE.bit4 = 1
    IF CODELENGTH < 150 Then LET CODE.bit4 = 0

    IF CODE = 23 Then LEDON
    Clear
    GoTo STARTPULSE

    LEDON:
    High GPIO.0 'LED ON
    Pause 500
    Low GPIO.0
    GoTo STARTPULSE
    Last edited by peterdeco1; - 24th August 2005 at 19:18. Reason: typo

Similar Threads

  1. Replies: 17
    Last Post: - 12th April 2014, 02:17
  2. PIC16F877A pwm use for IR transmission
    By mcbeasleyjr in forum General
    Replies: 0
    Last Post: - 11th July 2009, 18:51
  3. Plz help in completing RC-5 IR remote lamp dimmer project
    By vu2iia in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 3rd April 2008, 08:44
  4. PIC10F200 Automated IR Light Switch
    By Bruce in forum Code Examples
    Replies: 7
    Last Post: - 3rd May 2007, 11:40
  5. how to get pic to pic communication
    By kinsiro in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 30th August 2005, 17:12

Members who have read this thread : 0

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

Posting Permissions

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