mki
10.10.2007, 13:45
hi,
habe ein prob. mit den servos in bascom, der irq wird zwar ausgelöst aber inerhalb des irqs funktionieren die servos nicht :-(
$regfile = "m32def.dat"
$crystal = 14745600
$baud = 115200
$framesize = 32
$swstack = 256
$hwstack = 128
Config Timer1 = Timer , Prescale = 256
On Timer1 Ontimer1
Enable Timer1
Timer1 = 7935
'servo
Config Servos = 2 , Servo1 = Portc.2 , Servo2 = Portc.3 , Reload = 10 ', Timer = Timer2
Config Pinc.3 = Output
Config Pinc.2 = Output
'ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc , Timer = Timer2
Config Pinb.0 = Output
Enable Interrupts
Declare Sub Stopleft
Declare Sub Stopright
Declare Sub Stopfull
Declare Sub Forwardleft
Declare Sub Forwardright
Declare Sub Rewardleft
Declare Sub Rewardright
Declare Sub Turnleft
Declare Sub Turnright
Declare Sub Ausweichen
Dim Dist1 As Integer
Dim Speed As Integer
Speed = 50
Stopfull
'Now give power to the chip
Start Adc
'Waitms 5000
'Forwardleft
'Forwardright
Waitms 2000
Stopfull
Speed = 10
Do
' W = Getadc(0)
Forwardleft
Waitms 2250
Stopfull
Forwardright
Waitms 2250
Stopfull
Forwardleft
Forwardright
Waitms 2000
Stopfull
Turnleft
Waitms 2000
Stopfull
Waitms 2000
Stopfull
Loop
End
Sub Ausweichen
Dist1 = Getadc(0)
Print "0 value: " ; Dist1
If Dist1 > 19 Then
Print "trunright " ; Dist1
' Stopfull
Turnright
Portb.0 = 1
Do
Waitms 500
Dist1 = Getadc(0)
Print "ausweichen: " ; Dist1
If Dist1 < 19 Then
Stopfull
Portb.0 = 0
Return
Else
Turnright
End If
Loop
End If
End Sub
OnTimer1: 'Interrupt-Routine
Timer1 = 7935
Ausweichen
Return
Sub Stopleft
Servo(1) = 100
End Sub
Sub Stopright
Servo(2) = 100
End Sub
Sub Stopfull
Servo(1) = 100
Servo(2) = 100
End Sub
Sub Forwardleft
Servo(1) = Speed + 100
End Sub
Sub Forwardright
Servo(2) = 100 - Speed
End Sub
Sub Rewardleft
Servo(1) = 100 - Speed
End Sub
Sub Rewardright
Servo(2) = Speed + 100
End Sub
Sub Turnleft
Servo(1) = 100 - Speed
Servo(2) = 100 - Speed
End Sub
Sub Turnright
Servo(1) = Speed + 100
Servo(2) = Speed + 100
End Sub
habe ein prob. mit den servos in bascom, der irq wird zwar ausgelöst aber inerhalb des irqs funktionieren die servos nicht :-(
$regfile = "m32def.dat"
$crystal = 14745600
$baud = 115200
$framesize = 32
$swstack = 256
$hwstack = 128
Config Timer1 = Timer , Prescale = 256
On Timer1 Ontimer1
Enable Timer1
Timer1 = 7935
'servo
Config Servos = 2 , Servo1 = Portc.2 , Servo2 = Portc.3 , Reload = 10 ', Timer = Timer2
Config Pinc.3 = Output
Config Pinc.2 = Output
'ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc , Timer = Timer2
Config Pinb.0 = Output
Enable Interrupts
Declare Sub Stopleft
Declare Sub Stopright
Declare Sub Stopfull
Declare Sub Forwardleft
Declare Sub Forwardright
Declare Sub Rewardleft
Declare Sub Rewardright
Declare Sub Turnleft
Declare Sub Turnright
Declare Sub Ausweichen
Dim Dist1 As Integer
Dim Speed As Integer
Speed = 50
Stopfull
'Now give power to the chip
Start Adc
'Waitms 5000
'Forwardleft
'Forwardright
Waitms 2000
Stopfull
Speed = 10
Do
' W = Getadc(0)
Forwardleft
Waitms 2250
Stopfull
Forwardright
Waitms 2250
Stopfull
Forwardleft
Forwardright
Waitms 2000
Stopfull
Turnleft
Waitms 2000
Stopfull
Waitms 2000
Stopfull
Loop
End
Sub Ausweichen
Dist1 = Getadc(0)
Print "0 value: " ; Dist1
If Dist1 > 19 Then
Print "trunright " ; Dist1
' Stopfull
Turnright
Portb.0 = 1
Do
Waitms 500
Dist1 = Getadc(0)
Print "ausweichen: " ; Dist1
If Dist1 < 19 Then
Stopfull
Portb.0 = 0
Return
Else
Turnright
End If
Loop
End If
End Sub
OnTimer1: 'Interrupt-Routine
Timer1 = 7935
Ausweichen
Return
Sub Stopleft
Servo(1) = 100
End Sub
Sub Stopright
Servo(2) = 100
End Sub
Sub Stopfull
Servo(1) = 100
Servo(2) = 100
End Sub
Sub Forwardleft
Servo(1) = Speed + 100
End Sub
Sub Forwardright
Servo(2) = 100 - Speed
End Sub
Sub Rewardleft
Servo(1) = 100 - Speed
End Sub
Sub Rewardright
Servo(2) = Speed + 100
End Sub
Sub Turnleft
Servo(1) = 100 - Speed
Servo(2) = 100 - Speed
End Sub
Sub Turnright
Servo(1) = Speed + 100
Servo(2) = Speed + 100
End Sub