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 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)
 - modified welcome message to "IR capture demo" (not "JALLIB USB serial
demo")
 - some other changes to make it JSG compliant (style guide)
 - reindentation

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.

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


-- 
Sébastien Lelong
http://www.sirloon.net
http://sirbot.org

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