Hi, Atom
Those lines Have Passed the MPSIM Test ...
Code:
@ DEVICE pic12F629, INTRC_OSC_NOCLKOUT ; Using Internal Clock, no clock out
@ DEVICE pic12F629, WDT_ON ; Enable Watch dog timer
@ DEVICE pic12F629, PWRT_ON ; Enable Power-up timer
@ DEVICE pic12F629, MCLR_OFF ; Disable MCLR pin
@ DEVICE pic12F629, BOD_ON ; Enable Brown-out detect
@ DEVICE pic12F629, CPD_OFF ; EEPROM Protect
@ DEVICE pic12F629, PROTECT_OFF ; Code Protect off
'@ __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _BODEN_ON & _MCLRE_OFF
DEFINE OSCCAL_1K 1
DEFINE BUTTON_PAUSE 20
GPIO = %00000000
TRISIO = %11111110
INTCON.6=0 ' Disable all unmasked Interrupts
INTCON.7=0 ' Disable Global Interrupts
CMCON = 7 ' Disable analog comparator
ServoOut var GPIO.0
SetLimitSw var GPIO.1
PotIn var GPIO.2
MinSw var GPIO.4
MaxSw var GPIO.5
Delay var Byte
Posit var Byte
MinPosit var Byte
MaxPosit var Byte
'load starting min and max positions at program time
data @ 0,100
data @ 2,250
'************************************************* ***************
low Servoout
'read in stored min and max limits
read 0, MinPosit
read 2, MaxPosit
Start:
gosub GetServoPosition
Low servoout
pulsout servoout, posit
Delay = 0
BUTTON setlimitsw, 0, 255, 0, Delay, 1, Start
Delay = 0
BUTTON minsw, 1, 255, 0, Delay, 1, MinL '20 ms
Delay = 0
BUTTON maxsw, 1, 255, 0, Delay, 1, MaxL ' 20 ms
pause 20 ' no button pushed
Goto Start
MinL:
IF maxsw = 1 THEN Start '1 Button pushed at a Time !!!
IF Posit <> MinPosit THEN
MinPosit = Posit
write 0, MinPosit '10 ms
ENDIF
goto start
MaxL:
IF minsw = 1 THEN Start '1 Button pushed at a Time !!!
IF Posit <> Maxposit THEN
MaxPosit = Posit
write 2, MaxPosit ' 10 ms
ENDIF
goto start
'************************************************* ***************
GetServoPosition:
high potin
pause 1
rctime potin, 1, Posit 'at 4 mhz, returns 3 - 123 :: 1.23 ms max
'adjust posit to get values between 75 and 250
posit = posit + 75 + (posit / 2)
'now limit posit to 100 - 250 (1 ms - 2.5 ms)
if posit < 100 then posit = 100
if posit > 250 then posit = 250
if setlimitsw = 0 then 'apply limits
if Posit < MinPosit then Posit = MinPosit
if Posit > MaxPosit then Posit = MaxPosit
endif
return
'************************************************* ***************
End
Try those lines ... should work !!!
Alain
Bookmarks