[B]DEFINE [/B]OSC 20
TRISB=%00000001 [COLOR=#000080][I]' PortB.0=input, rest=outputs
[/I][/COLOR]PortB=%00000010 [COLOR=#000080][I]' LED=off on start
' 430 IRLED
' PortB.1 -------/\/\/\/------|<|----------+5V
[/I][/COLOR]NumCycles [B]VAR BYTE [/B][COLOR=#000080][I]' Holds number of 40KHz carrier cycles
[/I][/COLOR]IR_IN [B]VAR BIT [/B][COLOR=#000080][I]' IR detector input storage bit
[/I][/COLOR]IR_IN=1 [COLOR=#000080][I]' Start with 1 | Indicates no object detected
[/I][/COLOR][B]GOTO [/B]Main [COLOR=#000080][I]' Jump over sub to Main routine
' ~47%
' High duty-cycle
[/I][/COLOR]Pulse: [COLOR=#000080][I]' +5V ___________ ____
[/I][/COLOR][COLOR=#008000]@ bcf portb,1 [/COLOR][COLOR=#000080][I]; 200nS, LED=on | | |
[/I][/COLOR][B]PAUSEUS [/B]13 [COLOR=#000080][I]' 13uS | 11.8uS | 13.2uS |
[/I][/COLOR][COLOR=#008000]@ bsf portb,1 [/COLOR][COLOR=#000080][I]; 200nS, LED=off 0 ____| |_________|
[/I][/COLOR][B]PAUSEUS [/B]11 [COLOR=#000080][I]' 11uS | |
[/I][/COLOR][COLOR=#008000]@ decfsz _NumCycles,F [/COLOR][COLOR=#000080][I]; 200nS |<---- ~25uS ---->|
[/I][/COLOR][COLOR=#008000]@ goto _Pulse [/COLOR][COLOR=#000080][I]; 400nS, LED=off
[/I][/COLOR]IR_IN=PortB.0 [COLOR=#000080][I]' Read detector output
[/I][/COLOR][B]RETURN [/B][COLOR=#000080][I]' Return to Main
[/I][/COLOR]Main:
NumCycles=20 [COLOR=#000080][I]' 20 carrier cycles
' Most IR detectors require >=10 carrier cycles
' Adjust as required to adjust time of 40KHz burst
[/I][/COLOR][B]GOSUB [/B]Pulse [COLOR=#000080][I]' Go check for obstacle
[/I][/COLOR][B]IF [/B]IR_IN=0 [B]THEN [/B]Obstacle
[B]LOW [/B]Portb.2 [COLOR=#000080][I]' No obstacle, indicator LED=off
[/I][/COLOR][B]GOTO [/B]Main [COLOR=#000080][I]' Return to Main
' 430 LED
[/I][/COLOR]Obstacle: [COLOR=#000080][I]' PortB.2 -------/\/\/\/\-------|>|-------GND
[/I][/COLOR]IR_IN=1 [COLOR=#000080][I]' Reset object detection indicator bit
[/I][/COLOR][B]HIGH [/B]Portb.2 [COLOR=#000080][I]' Turn on LED when object is detected
[/I][/COLOR][B]GOTO [/B]Main [COLOR=#000080][I]' Return to Main[/I][/COLOR]