Hi,

I've been playing with this sample, trying to decypher a towel warmer remote
control (two buttons)... I'm able to trigger INT0 interrupts, but I can't
seem to find a way to differentiate buttons. I tried to capture 100 events
(instead of 50 in original sample), but they all look the same, whatever
button I'm pressing.

I'm using a photo transistor, not a IR receiver like TSOP4838, so I guess my
troubles could come from this. Even if it can catch light from IR to
visible, it may not be accurate enough ?

Cheers,
Seb

2011/6/13 Sebastien Lelong <[email protected]>

> Hi Alexey,
>
> Do you have a reference schematic showing how to use TSOP IR receiver on
> INT0 (pullups, etc... ?)
>
> TIA
> Cheers,
> Seb
>
>
> 2011/5/24 stalex <[email protected]>
>
>>
>>
>> On 23 май, 22:38, Sebastien Lelong <[email protected]> wrote:
>> > Hi Alexey,
>> >
>> > Please see revision 2669, it includes addition of your sample. This is a
>> > preliminary addition, I need you to review it carefully.
>> I compiled source from this revision and tested - works as usual, all
>> correct with my
>> remotes.
>>
>> > I renamed the file
>> > to 18f4550_ir2serial.jal and slightly modified content:
>> >
>> >  - corrected few typos
>> >  - modified header to include license, title, etc... (please confirm you
>> > agree with BSD license)
>> Yes, I agree with BSD license :)
>> >  - modified welcome message to "IR capture demo" (not "JALLIB USB serial
>> > demo")
>> >  - some other changes to make it JSG compliant (style guide)
>> >  - reindentation
>> Thank you, its become more beautiful :)
>>
>> >
>> > I don't have time to review the logic, and I must admit I'm not sure
>> I'll
>> > have time before, well... before I actually need to do this :)
>> Fortunately
>> > this is one need I have, so I'll be happy to dive into this by that
>> time.
>> I'm glad  to answer of any question about  logic of work this
>> program :)
>>
>> > Thanks
>> > Cheers,
>> > Seb
>> >
>> > 2011/5/23 stalex <[email protected]>
>> >
>> >
>> >
>> > > Unfortunately I dont know what protocol using my remotes :(
>> > > But I tested on 3 remotes - works fine,stable and unique number for
>> > > different keys on the same remote,
>> > >  only position of significant bits in train and values of TMR1H for
>> > > '0' and '1' are different.
>> > > If someone would like to test it on own remote it will be good :)
>> > > I suspect that one of my remote is Philips RC-5(6).
>> > > Later I'll try to calculate ticks to length in microseconds and answer
>> > > what protocols I tested :)
>> >
>> > > > It looks like a great sample. You may want to make a library. What
>> > > > protocol is it for?
>> >
>> > > > Matt.
>> >
>> > > > On May 21, 3:04 pm, stalex <[email protected]> wrote:
>> >
>> > > > > Hello.
>> > > > > I have written a program to analyze footprint of signal of keys
>> from
>> > > > > IR-remote and
>> > > > > do something on pressing different keys on IR-remote. For example
>> -
>> > > > > play/pause winamp playing and so on :)
>> > > > > As i cant find the finished code for JAL for different IR
>> protocols I
>> > > > > would like to share my code with anyone who using JAL :)
>> >
>> > > > > Schematic is simple - the significant detail is than IR reciever
>> > > > > TSOPxxx connected to INT0(RB0) pin on MC
>> > > > > and have pull up resistor on this connect
>> >
>> > > > > The main idea of this program to  measure ticks of timer1 between
>> > > > > interrupts from INT0. Conver this intervals
>> > > > > to 'binary' array that convert to dwrod variable and have a
>> keycode of
>> > > > > any key on IR-remote.
>> > > > > --------------------
>> > > > > --
>> >
>> > >
>> ---------------------------------------------------------------------------­­--
>> > > > > -- Title: demo of analyze of IR-remote timing between interrupts
>> from
>> > > > > -- TSOP IR reciver, and so a footprint of signal of different keys
>> > > > > from IR-remote
>> > > > > -- Author: Alexey Studenikin [email protected] , Copyright (c)
>> 2011,
>> > > > > all rights reserved.
>> >
>> > > > > ;@jallib section chipdef
>> > > > > -- chip setup
>> > > > > include 18f4550
>> >
>> > > > > -- even though the external crystal is 20 MHz, the configuration
>> is
>> > > > > such that
>> > > > > -- the CPU clock is derived from the 96 Mhz PLL clock (div2),
>> > > > > therefore set
>> > > > > -- target frequency to 48 MHz
>> > > > > pragma target clock       48_000_000
>> >
>> > > > > include delay
>> > > > > include usb_serial
>> > > > > include print
>> > > > > include pic_data_eeprom
>> >
>> > > > > alias   led      is pin_b6
>> > > > > pin_b6_direction =  output
>> > > > > led =  off
>> > > > > alias   led2      is pin_b7
>> > > > > pin_b7_direction =  output
>> > > > > led2=off
>> > > > > alias   led3      is pin_b5
>> > > > > pin_b5_direction =  output
>> > > > > led3=off
>> > > > >         var bit IR_pin is pin_B0
>> > > > > pin_B0_direction   = input
>> >
>> > > > > -- set up interrupts
>> > > > > INTCON_INT0IE = on -- allow interrupt from changing state on INT0
>> > > > > INTCON_INT0IF = off -- flush flag of interrupt from INT0
>> > > > > INTCON2_INTEDG0 = 1 -- setting up inerrupt INT0 from changing
>> state
>> > > 0->1
>> >
>> > > > > INTCON_GIE = on -- allow interrupts
>> >
>> > > > > -- setting up timer
>> > > > > T1CON_T1CKPS = 0b_11 -- prescale to 8
>> > > > > T1CON_TMR1CS = 0 -- clock source from internal clock
>> > > > > PIE1_TMR1IE = on -- allow interrup from  TMR1
>> > > > > PIR1_TMR1IF = off -- flush flag of interrupt TMR1
>> > > > > INTCON_PEIE = on -- allow interrupt
>> > > > > T1CON_TMR1ON = off -- stoping timer
>> >
>> > > > > const byte len=50 ;length of array of intervals between interrupts
>> > > > > from int0
>> > > > > var byte buttonnumber=0 -- if first press of button
>> > > > > var byte trainH[len] ; array of Hight byte of TMR1
>> > > > > var byte trainL[len]
>> >
>> > > > > var byte trainnum=0 ;current position in array
>> > > > > var byte realtrainlen=0 ;real lenght of train
>> >
>> > > > > procedure INT_ISR is
>> > > > >  pragma interrupt
>> >
>> > > > > if INTCON_INT0IF then -- if interrupt from INT0
>> > > > >    INTCON_INT0IF = off -- flushing flag
>> >
>> > > > >    if  (buttonnumber==0) then -- if first packet in train -
>> initialize
>> > > > > timer and variables
>> > > > >       buttonnumber=buttonnumber+1
>> > > > >       trainnum=0
>> > > > >       TMR1H=0
>> > > > >       TMR1L=0
>> > > > >       T1CON_TMR1ON=on
>> > > > >    end if
>> >
>> > > > >    if  (buttonnumber>0) then ;
>> > > > >     T1CON_TMR1ON = off   ;stopping timer while writing
>> > > > >     trainH[trainnum]= TMR1H
>> > > > >     trainL[trainnum]= TMR1L
>> > > > >     trainnum=trainnum+1
>> >
>> > > > >     TMR1H=0  ; zeroing timer
>> > > > >     TMR1L=0
>> > > > >     T1CON_TMR1ON = on ;starting timer again
>> > > > >    end if
>> > > > > end if
>> >
>> > > > > if PIR1_TMR1IF then -- if we have interrupt from timer that means
>> that
>> > > > > train of packets have finished
>> > > > >    PIR1_TMR1IF = off -- flushing flag
>> > > > >    T1CON_TMR1ON = off ; stopping timers
>> > > > >    PIE1_TMR1IE = off  ; disabling interrupt from timer
>> > > > >    realtrainlen=trainnum
>> > > > >    trainnum =len ; making 'flag' to start procedure of analyzing
>> whole
>> > > > > train
>> > > > > end if
>> > > > > end procedure
>> >
>> > > > > -- constants
>> > > > > const  byte str_welcome[] = "JALLIB USB Serial Demo app\n"
>> >
>> > > > > -- setup the USB serial library
>> > > > > usb_serial_init()
>> >
>> > > > > var bit has_shown_welcome_msg = true
>> > > > > var byte ch
>> >
>> > > > > var byte i=0
>> > > > > var byte i1=0
>> > > > > var dword keynum=0
>> >
>> > > > > -- main loop
>> > > > > forever loop
>> > > > >         -- poll the usb ISR function on a regular base, in order
>> to
>> > > > >         -- serve the USB requests
>> > > > >         usb_serial_flush()
>> >
>> > > > >     -- check if USB device has been configured by the HOST
>> > > > >         if ( usb_cdc_line_status() !=  0x00 )  then
>> > > > >                 if !has_shown_welcome_msg then
>> > > > >                         has_shown_welcome_msg = true
>> > > > >                         print_string( usb_serial_data, str_welcome
>> )
>> > > > >                 end if
>> > > > >         else
>> > > > >                 has_shown_welcome_msg = false
>> > > > >         end if
>> >
>> > > > > ;if we already have len(full) 'bits' and 'ticks'
>> > > > >     var word t=0
>> > > > >     if (trainnum>=len) then
>> > > > >      ;while thinking of data we dont need interrupts
>> > > > >        INTCON_INT0IE=off
>> > > > >        T1CON_TMR1ON = off
>> > > > >        PIE1_TMR1IE = off
>> > > > >        keynum=0
>> >
>> > > > >        print_crlf(usb_serial_data)
>> > > > > ;in my IR-remote the meaningful information int between 17 and
>> 17+17
>> > > > > "bits"
>> > > > > ;so lets convert from high byte of timer ticks between int0 to
>> binary
>> > > > > dword 'keynumber' of button of IR-transmitter
>> > > > >       for 17 using i loop
>> > > > >        i1=i+17
>> > > > >       ;convert intervals between changes of input from IR receiver
>> > > > > from hight timer ticks to 'bits'
>> > > > >       ;in your case there may be another values, you can see 'raw'
>> > > > > intervals in code below
>> > > > >       if (trainH[i1]>0) then if (trainH[i1]<=7)   then t=0 end if
>> end
>> > > > > if
>> > > > >        if (trainH[i1]>7) then if (trainH[i1]<=14)   then t=1 end
>> if
>> > > > > end if
>> > > > >       if (trainH[i1]>14) then if (trainH[i1]<255)   then t=2 end
>> if
>> > > > > end if
>> >
>> > > > >        ;convert from binary array to one  dword
>> > > > >        if (t==1) then
>> > > > >          keynum=keynum+1
>> > > > >        end if
>> > > > >        keynum=keynum<<1
>> >
>> > > > >       ;lets see binary 'keynumber'
>> > > > >       print_word_dec(usb_serial_data,t)
>> >
>> > > > >       ;in need we can print whole array of numbers of timer ticks
>> > > > > between interrupts from int0
>> > > > >       ;
>> > > > >        print_byte_dec(usb_serial_data,trainH[i])
>> > > > >        usb_serial_data = "_"
>> > > > >        print_byte_dec(usb_serial_data,trainL[i])
>> >
>> > > > >        usb_serial_data = "["
>> > > > >        print_byte_dec(usb_serial_data,i1)
>> > > > >        usb_serial_data = "]"
>> > > > >        usb_serial_data = " "
>> > > > >        end loop
>> >
>> > > > >       ;print resulting 'keynber' and real length of train
>> > > > >        usb_serial_data ="_"
>> > > > >        print_dword_binary(usb_serial_data,keynum)
>> > > > >        usb_serial_data ="_"
>> > > > >        print_dword_dec(usb_serial_data,keynum)
>> > > > >        usb_serial_data ="_"
>> > > > >        print_byte_dec(usb_serial_data, realtrainlen )
>> >
>> > > > > ;do something on different keynumber - optional
>> > > > >         case keynum of
>> > > > >              249902 :
>> > > > >               block
>> > > > >               led =on
>> > > > >               _usec_delay(5000)
>> > > > >               led=off
>> > > > >               end block
>> > > > >              168302 :
>> > > > >               block
>> > > > >               led2 =on
>> > > > >               _usec_delay(5000)
>> > > > >               led2 =off
>> > > > >               end block
>> > > > >               184622 :
>> > > > >               block
>> > > > >               led3 =on
>> > > > >               _usec_delay(5000)
>> > > > >               led3 =off
>> > > > >               end block
>> > > > >               205022 :  ;button up
>> > > > >               block
>> > > > >               led3 =on
>> > > > >               _usec_delay(5000)
>> > > > >               led3 =off
>> > > > >               end block
>> > > > >               225422:  ;button down
>> > > > >               block
>> > > > >                led3 =on
>> > > > >               _usec_delay(5000)
>> > > > >               led3 =off
>> >
>> > > > >               end block
>> >
>> > > > >         end case
>> >
>> > > > >         _usec_delay(300000)
>> > > > >         ;getting ready to recieve another button
>> > > > >        trainnum=0
>> > > > >        i=0
>> > > > >        buttonnumber=0
>> > > > >        keynum=0
>> > > > >        INTCON_INT0IE=on
>> > > > >        PIE1_TMR1IE = on
>> >
>> > > > > end if
>> >
>> > > > > end loop
>> >
>>
>


-- 
Sébastien Lelong

-- 
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en.

Reply via email to