[color=Navy]#picaxe [/color][color=Black]08M2[/color]
[color=Navy]#no_data[/color]
[color=Green]'modified to use hardware pwm for driving servo on C.2(leg 5)
'must run at 2Mhz to get pwm freq low enough
'pauses will have to be divided by 2
'drawback to this method is low resolution
'only 47 steps from .75 to 2.25 milliseconds
'tested on 08M2 and Parallax servo
' 2MHz clock 50Hz pwm / pwmduty range is 23 to 70 (.75 - 2.25 milliseconds high)
'semaphore program
;08m2[/color]
[color=Blue]symbol [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]b0[/color]
[color=Blue]symbol [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]b1[/color]
[color=Blue]symbol [/color][color=Purple]up [/color][color=DarkCyan]= [/color][color=Purple]b2[/color]
[color=Blue]symbol [/color][color=Purple]lev [/color][color=DarkCyan]= [/color][color=Purple]b3[/color]
[color=Blue]symbol [/color][color=Purple]dwn [/color][color=DarkCyan]= [/color][color=Purple]b4
[/color][color=Blue]setfreq M2 [/color][color=Green]'for 50 Hz servo PWM
'servo 2,125
[/color][color=Blue]pwmout pwmdiv64[/color][color=Black], [/color][color=Blue]C.2[/color][color=Black], [/color][color=Navy]155[/color][color=Black], [/color][color=Navy]23 [/color][color=Green]; 50Hz at 2MHz
'temp = 125
[/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Navy]38
[/color][color=Green]'up = 125
[/color][color=Purple]up[/color][color=DarkCyan]= [/color][color=Navy]38
[/color][color=Green]'lev = 140
[/color][color=Purple]lev [/color][color=DarkCyan]= [/color][color=Navy]44
[/color][color=Green]'dwn = 150
[/color][color=Purple]dwn [/color][color=DarkCyan]= [/color][color=Navy]47[/color]
[color=Black]start:
[/color][color=Green];down red
[/color][color=Blue]if [/color][color=Purple]pinc.4 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]div
[/color][color=Blue]high c.1
low c.0
if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]dwn [/color][color=Blue]then [/color][color=Black]cont
[/color][color=Blue]if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]lev [/color][color=Blue]then
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]lev [/color][color=Blue]to [/color][color=Purple]dwn
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]else
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]up [/color][color=Blue]to [/color][color=Purple]dwn
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]endif
[/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]dwn[/color]
[color=Black]cont:
[/color][color=Green]'servopos 2,dwn
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]dwn
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]goto [/color][color=Black]start[/color]
[color=Green];up[/color]
[color=Black]div:
[/color][color=Blue]if [/color][color=Purple]pinc.3 [/color][color=DarkCyan]= [/color][color=Navy]1 [/color][color=Blue]then [/color][color=Black]st
[/color][color=Blue]high c.1
high c.0
if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]lev [/color][color=Blue]then [/color][color=Black]cont1
[/color][color=Blue]if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]up [/color][color=Blue]then
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]up [/color][color=Blue]to [/color][color=Purple]lev
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]else
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]dwn [/color][color=Blue]to [/color][color=Purple]lev [/color][color=Blue]step [/color][color=DarkCyan]- [/color][color=Navy]1
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]endif
[/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]lev[/color]
[color=Black]cont1:
[/color][color=Green]'servopos 2,lev
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]lev
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]goto [/color][color=Black]start
[/color][color=Green];level yellow[/color]
[color=Black]st:
[/color][color=Blue]high c.0[/color][color=Black]:[/color][color=Blue]low c.1
if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]up [/color][color=Blue]then [/color][color=Black]cont2
[/color][color=Blue]if [/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]lev [/color][color=Blue]then
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]lev [/color][color=Blue]to [/color][color=Purple]up [/color][color=Blue]step [/color][color=DarkCyan]-[/color][color=Navy]1
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]else
for [/color][color=Purple]cnt [/color][color=DarkCyan]= [/color][color=Purple]dwn [/color][color=Blue]to [/color][color=Purple]up [/color][color=Blue]step [/color][color=DarkCyan]- [/color][color=Navy]1
[/color][color=Green]'servopos 2,cnt
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]cnt
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]next [/color][color=Purple]cnt
[/color][color=Blue]endif
[/color][color=Purple]temp [/color][color=DarkCyan]= [/color][color=Purple]up[/color]
[color=Black]cont2:
[/color][color=Green]'servopos 2,up
[/color][color=Blue]pwmduty C.2[/color][color=Black],[/color][color=Purple]up
[/color][color=Blue]pause [/color][color=Navy]100
[/color][color=Blue]goto [/color][color=Black]start[/color]