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
> >
>

-- 
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