This is a multi-part message in MIME format. ------=_NextPart_000_01BB_01C32A11.65EE1BE0 Content-Type: text/plain; charset="windows-1255" Content-Transfer-Encoding: 7bit Thanks for all of you helpers! My problem exactly is to know the IR code, and put it in the right place in the lookup table. Please take a look in the attach files. Tal -----Original Message----- From: pic microcontroller discussion list [mailto:PICLIST@MITVMA.MIT.EDU]On Behalf Of Tim Webb Sent: Tuesday, June 03, 2003 8:19 PM To: PICLIST@MITVMA.MIT.EDU Subject: Re: [PIC]: How to find IR codes? This might be a stupid question, but isn't is possible to design something with a Pic that could receive the code from your RC just like a learning remote and sample it. Then wouldn't it be possible to store that data in memory and send it back out on command? -----Original Message----- From: Hazelwood Lyle [mailto:LHazelwood@MFGNC.COM] Sent: Tuesday, June 03, 2003 9:48 AM To: PICLIST@MITVMA.MIT.EDU Subject: Re: [PIC]: How to find IR codes? >>From: Tal [mailto:kooter@012.NET.IL] >>I found a circuit that use a pic along with IR detector to control 6 >>devices/relays. >>the author said that I need to program the pic with the codes that fit my >>RC, How I find them? >>is there any circuit or a pc software that can show it? >From: Tim Webb [mailto:tim_webb@AGILENT.COM] >Make your pic a learning pic. have it sample the IR data and then store it. There are excellent resources describing various IR coding schemes at www.ustr.net This page is provided by Wagner Lipnharski, a piclist regular. I have found that many remote codes are similar to these, but not exact. It seems that each manufacturer feels free to rearrange things their own way. I'm working on a remote system that can send and receive "universal"?? data, and I have resigned that I'll never teach the PIC all of the various methods used. It will decode a signal format it recognizes, but will always be able to fall back to raw data for full compatibility. As Tim suggested, recording the data with the PIC is probably the best option. There was a project a few years back in "Nuts&Volts" that used a PIC to recognize IR keys, and could be trained by the user to most remote brands. It was written by Terry Weeder. Source code can be found here: ftp://nutsvolts.com/irremote.zip I am using this chip at home, and it works great for me. I ordered a back issue of Nuts&Volts, Feb 1998 from www.nutsvolts.com , and got the parts list and schematic from there. I was able to buy a pre-programmed PIC from the author from his business site: www.weedtech.com. Though he may not offer these anymore. It was working with this project that got me interested in PICs. Now I'm trying to expand on the features that Terrys project offers. Good Luck, Lyle -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details. -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details. -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details. ------=_NextPart_000_01BB_01C32A11.65EE1BE0 Content-Type: image/gif; name="irsystem.gif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="irsystem.gif" R0lGODlhxwP1AvcAAAQCBPzGDISC/PzOjPzOzPziDPzqjPziRPzGrHx+BPzqzPwCBPwmBPziLPzq rPzq7PzGNPz2RPzarPwmJPz2zPz2LPzODPzajPz2HPz2rPz2lPwSBPw6FPz2XPzazPzGvPwmFPza vPz23PzOHPziHPziVPzapPz2vPwSFPza3PziPPz27Pz2PPz2pPzaLPz2VPz+/PzGnPzqnPzqRPzO rPzq3PwuBPzqLPzqvPzirPw6PPz+zPz+LPzaDPzijPz+HPz+rPz+lPweBPz+bPzizPzOvPwuFPzi vPz+3PzaHPzqHPz+7Py+HPzqFPwKBPz+TPwuJPz+ZPzqVPzinPz+xPweFPzi3PzaPPzOnPy+vPzi FPzqlPziTPzGtPzq1PwmDPziNPzqtPzOLPz2TPzatPz21Pz2NPzOFPzalPz2JPz2tPz2nPwSDPw6 HPz2ZPza1PzGxPwmHPzaxPz25PzOJPziJPz2xPzqPPz29Pz+PPz+pPzaNPz+VPzqpPzqTPzOtPzq 5PzGHPwuDPzqNPzqxPzitPz+1Pz+NPzaFPzilPz+JPz+tPz+nPweDPzi1PzOxPwuHPzixPz+5Pza JPzqJPz+9PwKDPwuLPzqXPzipPweHPzi5PzOpDAAAHMAAAAAAAE3AAAEAAD6AAC/AAHsAADBAABM AAAAACCwpwDqFwBzZwAAAbUtJSCrAAD4AAC/AACA/wBP/wAA/wCA/3CoJXV1AFEAAACAAABIFAB2 8AAAcwCAANQoAOpTAHMAAACAANAA1EcB67cAc78AAHYwGAdP+AAASQCAAEYAtAEA6wAAcwAAAAU3 gwAEsgD6TAC/AAZL6ACc6wAAcwAAADTQN+zrBHNz+gAAv4CTTU+y7QD5c4C/AAA42QAO/wBN/wAA fwAAKAAA7QAAcwAAAAg3AOsEAHP6AAC/AHBLN3WcBFEA+gAAv3aoAAeyAAD5AAC/AE7QDG/qAHRz OCAAAWEw8CAA4h3wRQQGAFrwKPYG7QAgcwAAAEQAKLoH7QAAcwAAACH5BAAAAAAALAAAAADHA/UC Bwj/AAEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX MGPKnEmzps2bOHPq3MmzZ0sYQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOK 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 VEscTMu1dEsKbMu3lMv/i8u5tMvxq8u71Mvpy8u99Evk68u/FEyqXEqhHMzDlLzARMzFPD3FZMzH 5DzHhMzJjDzJpMzLpL7CPErM5Ezu08yo7MzQpCnLFM3S9DrSNM3UpDrUVM3WRDrWdM3Y/DnYlM3a dDbatM3cbDTc1M3eBDD/3vTN4NQr4BTO4hzNzzTO5BRA5FTO5lQ75nTO6Pwv4pTO6qQX6rTO7NwU 7NTO7tQS7vTO8KwS8BTP8kwS8jTP9CQS9FTP9kwb6HTP+MwU9pTP+uQQ+rTP/PQ++NTP/jxP/ozN FwTDnBBDQKQKBwTCBC3Q5RBQAxXCAS1O/JzLASXDm3DQqoDQNsy/PlRABuVCHqxOCX3LLoRDGATD Cz1QBG1A+XNDOcRQOaxQDKxQ5RRRufxQDvRB6CDRICTRFkXRorjRDc1R6azREd1DKGTRL2yOHe3A LkzSBeVD5QjSGXzSH63NInXLKY1DFn0OLqU/J/TSEu3SI/3SKCRSAHVN/y0FQSsFUjH8Uifl0DeU UjKlUza1TSxdSzX1Ujs1CgQ10wTVUToV0jB1TjxVywbt0BOdDj8dUhMtUD71CUR90xl9R0ndQ3/8 x83MTUjVFE7FRgqNUj9U0s9DU+X0VEw51Whk0hiVQjbMQ330T/9UUzO91EvMyliVz1md0VSdDkPF 1QAVVC/cVf/QVPowzF9tzlnd0lqVD3xkSmRN1mBt1BzlVeYo1oO8VtOMEIJcyfjY1oy0VDEd1VEF xTn01mO9zG9tViJ8PnbNzW2VyWfFTHVdSmcEO3Ok197ED9CU13R1V0/8Vnz91ysliWxtR4MVzXw1 PnstWIZ1vkAUzuoAzf+CRVfKVFjnC1j4uNg7RVha7NjO3FgBc9i+EliIDc6JDcSKncyQXcWMrVeT VUi3w7t2lSeVhUyWJbxrLbB7zdlpw9nN69eDJbuRHT6iLVqebJCgXdmB7dli3dmGjSeYrEaYbczu GxCplUULeVqIRdqa/VjO/Nlf7EghGdmtFZKxDUeqLb1u/Ty0/cWGhVkKuQ5t5CEozT9AJNc2XNG8 TdmvnVemTRG3FcGyNdqKtNptVFvPY1viEtwXAbvHLVrIjVxPBIogZdQhdVEHVVqdLEmS7KHOBd2V DNjQJd0hKV2TlLbTVd3VZd3Wdd3X9VzJ3Ve13VfY1anGJVD8a1Fm3d3/YfTboYzAsP2JxY0OlxVb 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 ------=_NextPart_000_01BB_01C32A11.65EE1BE0 Content-Type: application/octet-stream; name="scir.asm" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="scir.asm" ;************************************************** ; Six Channel Ir Sistem=20 ; scir.ASM ; ; (c) 2001, alfonsi alfredo alfalf73@libero.it ; http://digilander.iol.it/alfred73, www.alfredoalfonsi.too.it ************************************************** PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" ;Suppress MPASM warning message 302: ;"Register in operand not in bank 0. Ensure that bank bits are correct" ERRORLEVEL -302 __CONFIG 3FF1H ;input ;Infrared receiver RX_IFR equ 2 ;Sensore ad infrarossi ; ************* o u t p u t ***************** ;LED data line bus LEDDB0 equ 1 ;LED data line DB0 LEDDB1 equ 2 ;LED data line DB1 LEDDB2 equ 3 ;LED data line DB2 LEDDB3 equ 4 ;LED data line DB3 LEDDB4 equ 5 LEDDB5 equ 6 LEDDB6 equ 7 PIEZO equ 3 ;piezo data line RA3 ;IFR timing IFR_K1 equ 46 ;1.5ms IFR_K2 equ 125 ;4ms IFR_K3 equ 93 ;3ms IFR_K4 equ 31 ;1ms ORG 0CH counta res 1 msDelayCounter res 2 COUNT res 1 IfrKeyCode res 1 ;Code of the last key pressed IfrCount res 1 IfrBuf res 4 ;Sign read buffer ;Reset Vector ORG 00H Start bsf STATUS,RP0 ;Swap to register bank 1 =20 movlw 00010111B ;Set PORTA lines movwf TRISA movlw 11111111B ;Set PORTB lines movwf TRISB =20 bcf PORTB,LEDDB0 bcf PORTB,LEDDB1 bcf PORTB,LEDDB2 bcf PORTB,LEDDB3 bcf PORTB,LEDDB4 bcf PORTB,LEDDB5 bcf PORTB,LEDDB6 =20 movlw 00000100B movwf OPTION_REG bcf STATUS,RP0 ;Swap to register bank 0 ;Reset IFR code clrf PORTB clrf IfrKeyCode =20 call ritardo MainLoop =20 movlw 2 movwf counta ;Check IFR input line CheckIFR btfsc PORTA,RX_IFR goto MainLoop checked call RxIfr ;Decode IFR signal movwf IfrKeyCode ;Save the IFR code =20 ;Read the received code and send a message to the LED CheckPPKey movlw 1 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckPPKey =20 movf PORTB,W xorlw 2 movwf PORTB btfsc PORTB,LEDDB0 =20 call ritardo call ritardo call ritardo =20 goto MainLoop _CheckPPKey CheckMKey movlw 2 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckMKey =20 movf PORTB,W xorlw 4 movwf PORTB btfsc PORTB,LEDDB1 =20 call ritardo call ritardo =20 call ritardo goto MainLoop _CheckMKey CheckVPKey movlw 3 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckVPKey movf PORTB,W xorlw 8 movwf PORTB btfsc PORTB,LEDDB2 =20 call ritardo call ritardo call ritardo =20 goto MainLoop _CheckVPKey CheckPMKey movlw 4 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckPMKey movf PORTB,W xorlw 16 movwf PORTB btfsc PORTB,LEDDB3 =20 call ritardo call ritardo call ritardo =20 goto MainLoop _CheckPMKey CheckPWKey movlw 5 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckPWKey movf PORTB,W xorlw 32 movwf PORTB btfsc PORTB,LEDDB4 =20 call ritardo call ritardo =20 call ritardo goto MainLoop _CheckPWKey CheckVMKey movlw 6 xorwf IfrKeyCode,W btfss STATUS,Z goto _CheckVMKey movf PORTB,W xorlw 64 movwf PORTB btfsc PORTB,LEDDB5 =20 call ritardo call ritardo =20 call ritardo goto MainLoop _CheckVMKey btfsc PORTB,LEDDB1; funzione di provatelecomandi IR se = il tasto PM =E8 premuto=20 call ritardo goto MainLoop ;************************************************************************= ** ; Decodifica degli impulsi provenienti dal trasmettitore IFR Visa = Simplex ; ; Output ; ; W =3D 0 Nessun tasto premuto o tasto non valido ; 1 P+, 2 Mute, 3 Vol +, 4 P-, 5 Power, 6 Vol - ; ;************************************************************************= ** RxIfr btfsc PORTA,RX_IFR ;Segnale da IFR ? retlw 0 ;No, fine _RxIfr clrf IfrCount ;Azzera il contatore di segni letti movlw IfrBuf ;Set del puntatore al buffer di = memorizzazione movwf FSR ;dei segni ricevuti nop nop nop ifri clrf 0 ;Azzera il byte che deve contenere il = prossimo segno ifra clrf TMR0 ;Azzera il misuratore di durata ifrc clrwdt btfsc PORTA,RX_IFR ;Segnale ancora presente ? goto ifrb ;No, continua movlw IFR_K1 ;Si, Segnale attivo per piu' di 1.5ms ? subwf TMR0,W btfsc STATUS,C retlw 0 ;Si, annulla goto ifrc ;No, continua a campionare ifrb incf 0,1 ;Incremento il numero di segno ricevuto clrf TMR0 ;Azzera il misuratore di durata ifrf clrwdt btfss PORTA,RX_IFR ;Segnale ritornato attivo ? goto ifrg ;Si, continua movlw IFR_K2 ;No. Segnale non attivo per piu' di 4ms = ? subwf TMR0,W btfsc STATUS,C goto ifrz ;Si, fine... goto ifrf ;No, continua a campionare ifrg movlw IFR_K3 ;Segnale rimasto non attivo per piu' di = 3ms ? subwf TMR0,W btfsc STATUS,C goto ifre ;Si, passa al segno successivo ... ifrd movlw IFR_K4 ;No, Segnale rimasto non attivo per = almeno 1ms ? subwf TMR0,W btfsc STATUS,C goto ifra ;Si, rimane sullo stesso segno retlw 0 ;No, annulla ifre incf FSR,1 ;Incrementa il puntatore al buffer dei = segni incf IfrCount,1 ;Incrementa il contatore di byte ricevuti movlw 4 ;Ricevuti 4 segni ? xorwf IfrCount,W btfss STATUS,Z goto ifri ;No, continua a ricevere goto ifrzz ;Si, fine ifrz clrwdt incf FSR,1 ;Incrementa il puntatore al buffer dei = segni incf IfrCount,1 ;Incrementa il contatore di byte = ricevuti movlw 4 ;Ricevuti 4 segni ? xorwf IfrCount,W btfsc STATUS,Z goto ifrzz ;Si, fine clrf 0 ;No, azzera il buffer dei segni fino al = 4 goto ifrz ifrzz ;In base ai segni ricevuti estrae lo scan code del tasto premuto kCode clrwdt swapf IfrBuf+0,W ;Compatta i quattro segni in due byte iorwf IfrBuf+1,W movwf IfrBuf+0 swapf IfrBuf+2,W iorwf IfrBuf+3,W movwf IfrBuf+1 movlw 16h xorwf IfrBuf+0,W btfss STATUS,Z goto k2 movlw 00h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 1 k2 movlw 13h xorwf IfrBuf+0,W btfss STATUS,Z goto k3 movlw 30h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 2 k3 movlw 11h xorwf IfrBuf+0,W btfss STATUS,Z goto k4 movlw 50h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 3 k4 movlw 25h xorwf IfrBuf+0,W btfss STATUS,Z goto k5 movlw 00h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 4 k5 movlw 21h xorwf IfrBuf+0,W btfss STATUS,Z goto k6 movlw 13h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 5 k6 movlw 34h xorwf IfrBuf+0,W btfss STATUS,Z retlw 0 movlw 00h xorwf IfrBuf+1,W btfss STATUS,Z retlw 0 retlw 6 ;********************************************************************** ; Delay subroutine ; ; =20 ;********************************************************************** ritardo movlw 15 =20 movwf COUNT movlw 6 movwf TMR0 =20 bsf PORTA,PIEZO =20 ciclo movf TMR0,W btfss STATUS,Z goto ciclo movlw 6 =20 movwf TMR0 =20 decfsz COUNT,1 goto ciclo bcf PORTA,PIEZO =20 =20 return END ------=_NextPart_000_01BB_01C32A11.65EE1BE0--