jhorsburgh
- 3rd September 2008, 00:24
Hi Guys,
I have another little problem, the code below work perfectly with the exception of the SEROUT Command. For some reason the computer is not receiving the SEROUT information. Can anyone see anything that could cause it not to work? Oscillator maybe?
I have tested the pin and it is pulsing when it should be.
<code>
INCLUDE "modedefs.bas"
CMCON = 7 'comparators off
trisio = %00001000 'GPIO.3 INPUT FROM IR RCVR
GPIO = 0 'ALL OUTPUTS LOW
Define OSC 4
DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
@ DEVICE PIC12f629, INTRC_OSC
@ DEVICE PIC12f629, WDT_ON
@ DEVICE PIC12f629, PWRT_ON
@ DEVICE PIC12f629, MCLR_OFF
@ DEVICE PIC12f629, BOD_ON
@ DEVICE PIC12f629, CPD_OFF
CODELENGTH VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 PULSES MEASURED
CODE VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 CODE BITS
TYPE VAR BYTE
codelength = 0
code = 0
type = 0
Pause 100 'SETTLE DOWN BOTH PIC & IR RECEIVER
STARTPULSE:
PulsIn GPIO.3,0,CODELENGTH 'MEASURE LOW PULSE (IR LED ON TIME)
IF CODELENGTH <200 Then STARTPULSE 'LOOKING FOR 3MS PULSE
IF CODELENGTH >400 Then STARTPULSE
CODEPULSES:
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET TYPE = 1 '2MS PULSE IS 1
IF CODELENGTH > 250 Then LET TYPE = 2 '3MS PULSE IS 2
IF CODELENGTH > 350 Then LET TYPE = 3 '4MS PULSE IS 3
IF CODELENGTH > 450 Then LET TYPE = 4 '5MS PULSE IS 4
IF CODELENGTH > 550 Then LET TYPE = 5 '6MS PULSE IS 5
IF CODELENGTH > 650 Then LET TYPE = 6 '7MS PULSE IS 6
IF CODELENGTH > 750 Then LET TYPE = 7 '8MS PULSE IS 7
IF CODELENGTH < 150 Then LET TYPE = 0 '1MS PULSE IS 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit0 = 1 '2MS PULSE IS 1
IF CODELENGTH < 150 Then LET CODE.bit0 = 0 '1MS PULSE IS 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit1 = 1
IF CODELENGTH < 150 Then LET CODE.bit1 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit2 = 1
IF CODELENGTH < 150 Then LET CODE.bit2 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit3 = 1
IF CODELENGTH < 150 Then LET CODE.bit3 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit4 = 1
IF CODELENGTH < 150 Then LET CODE.bit4 = 0
IF CODE = 23 Then hit
codelength = 0
code = 0
type = 0
GoTo STARTPULSE
HIT:
High GPIO.0 'LED ON
Serout 2, N2400,["Hello",10,13]
Pause 500
Low GPIO.0
codelength = 0
code = 0
type = 0
GoTo STARTPULSE
End
</code>
Thanks for your help,
Jeremy
I have another little problem, the code below work perfectly with the exception of the SEROUT Command. For some reason the computer is not receiving the SEROUT information. Can anyone see anything that could cause it not to work? Oscillator maybe?
I have tested the pin and it is pulsing when it should be.
<code>
INCLUDE "modedefs.bas"
CMCON = 7 'comparators off
trisio = %00001000 'GPIO.3 INPUT FROM IR RCVR
GPIO = 0 'ALL OUTPUTS LOW
Define OSC 4
DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
@ DEVICE PIC12f629, INTRC_OSC
@ DEVICE PIC12f629, WDT_ON
@ DEVICE PIC12f629, PWRT_ON
@ DEVICE PIC12f629, MCLR_OFF
@ DEVICE PIC12f629, BOD_ON
@ DEVICE PIC12f629, CPD_OFF
CODELENGTH VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 PULSES MEASURED
CODE VAR BYTE 'BYTE VARIABLE OK - LESS THAN 8 CODE BITS
TYPE VAR BYTE
codelength = 0
code = 0
type = 0
Pause 100 'SETTLE DOWN BOTH PIC & IR RECEIVER
STARTPULSE:
PulsIn GPIO.3,0,CODELENGTH 'MEASURE LOW PULSE (IR LED ON TIME)
IF CODELENGTH <200 Then STARTPULSE 'LOOKING FOR 3MS PULSE
IF CODELENGTH >400 Then STARTPULSE
CODEPULSES:
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET TYPE = 1 '2MS PULSE IS 1
IF CODELENGTH > 250 Then LET TYPE = 2 '3MS PULSE IS 2
IF CODELENGTH > 350 Then LET TYPE = 3 '4MS PULSE IS 3
IF CODELENGTH > 450 Then LET TYPE = 4 '5MS PULSE IS 4
IF CODELENGTH > 550 Then LET TYPE = 5 '6MS PULSE IS 5
IF CODELENGTH > 650 Then LET TYPE = 6 '7MS PULSE IS 6
IF CODELENGTH > 750 Then LET TYPE = 7 '8MS PULSE IS 7
IF CODELENGTH < 150 Then LET TYPE = 0 '1MS PULSE IS 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit0 = 1 '2MS PULSE IS 1
IF CODELENGTH < 150 Then LET CODE.bit0 = 0 '1MS PULSE IS 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit1 = 1
IF CODELENGTH < 150 Then LET CODE.bit1 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit2 = 1
IF CODELENGTH < 150 Then LET CODE.bit2 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit3 = 1
IF CODELENGTH < 150 Then LET CODE.bit3 = 0
PulsIn GPIO.3,0,CODELENGTH
IF CODELENGTH > 150 Then LET CODE.bit4 = 1
IF CODELENGTH < 150 Then LET CODE.bit4 = 0
IF CODE = 23 Then hit
codelength = 0
code = 0
type = 0
GoTo STARTPULSE
HIT:
High GPIO.0 'LED ON
Serout 2, N2400,["Hello",10,13]
Pause 500
Low GPIO.0
codelength = 0
code = 0
type = 0
GoTo STARTPULSE
End
</code>
Thanks for your help,
Jeremy