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.
