need help in Sony S.I.R.C at 20/40 mhz
hi guys
Accroding to the manual of the PBP at 20mhz the resolution of PULSIN is 2uS.
but i cant seems to make it work even at 40mhz . But when i used 12mhz xtal or below it work perfectly.
Is there something im mising here?
i really need to make it work at 20mhz or 40mhz.
here is my code:
Header Var Word ' Header pulse length
Packet Var Word ' 12-bit IR information
P_Val Var Byte ' The bit length 60us = 0, 120us = 1
IR_But Var Byte ' The BUTTON code returned
IR_Dev Var Byte ' The DEVICE code returned
Sony_LP Var Byte ' Temporary loop variable
Green_LED Var PortA.1 ' Assign the red LED to this pin
TRISA = 0
LOW Green_LED
START:
GOSUB IRIN
IF IR_But = 0 THEN HIGH Green_LED
GOTO START
IRIN:
IR_Dev=255:IR_But=255
Pulsin PortB.2,0,Header ' Measure the header length.
If Header < 1000 then Return ' Verify a good header
If Header > 1350 then Return ' If not valid then exit
For Sony_Lp=0 to 11 ' Do 12-bits
Pulsin PortA.2,0,P_Val ' Receive the IR bit pulse
If P_Val >= 450 then ' If it's >= 90 then we've received a 1
Packet.0[Sony_Lp]=1 ' So set the appropriate bit of PACKET
Else
Packet.0[Sony_Lp]=0
Endif
Next
' Split the 7-bit BUTTON code, and the 5-bit DEVICE code
IR_But=Packet & %01111111 ' Mask the 7 BUTTON bits
IR_Dev=(Packet >>7) & %00011111 ' Move down and mask, the 5 DEVICE bits
Return
sorry for my english.
best regards,
ferds
Timings in your code are wrong....
It may just be a typo but the timings shown in your code are an order of magnitiude out.
SONY Timings are as follows
Header pulse is 2400uS ON 600uS OFF
Logic One is 1200uS ON 600uS OFF
Logic Zero is 600uS ON 600uS OFF
You show a "1" as 120uS and a "0" as 60uS
Remember also that the signal you are receiving will be a modulated 40kHz carrier and you need an IR Receiver Module to give you a demodulated signal which is normally ACTIVE LOW.
Pulsein varies with OSC frequency so ensure that you correctly define the OSC and allow for the fact that at higher frequencies the count for a given pulse length will be greater.
eg as Sony is based on a 600uS timeframe then Pulsin would be
4MHz = 10uS resolution = Count of 60, 120, 240
10MHz = 4uS resolution = Count of 150, 300, 600
20MHz = 2uS resolution = Count of 300, 600, 1200
40MHz = 1uS resolution = Count of 600, 1200, 2400
Use those values as the centre values for your acceptance window eg @ 20MHz 270-330, 540-660, 1080-1320 allowing a 10 percent tollerance.
Hope that helps
Keith