Hallo zusammen,
ich bin ganz neu in der Bascom Programmierung und finde zu meinem aktuellen Problem keine passenden Antworten im Netz.
Ich möchte über ein Telegramprotokoll mehrere Servos von meinem Java Tool aus Steuern. Nur frage ich mich, wie ich mehrere Servos gleichzeitig ansteuern kann ohne darauf warten zu müssen, dass zunächst ein Servo seinen Stellvorgang beendet hat.
Außerdem kann ich die Servos zwar schon mit dem Servo Befehl von Bascom ansteuern, aber leider nicht mittels Timer. Hier mein erfolgloser Timerversuch auf dem Atmega16 (Fuse = int. Osc 8Mhz):
Code-Tags verwenden ! (PicNick)Code:$crystal = 8000000 $swstack = 50 $hwstack = 50 $framesize = 50 Config Portb.1 = Output Config Portb.2 = Output Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 'Enable Timer1 'Start Timer1 Servo1 Alias Pwm1a Servo2 Alias Pwm1b Dim Position As Word Const Links = 895 Const Rechts = 960 Wait 2 Do Servo1 = Rechts Servo2 = Rechts Wait 2 Servo1 = Links Servo2 = Links For Position = Links To Rechts Step 5 Servo2 = Position Waitms 100 Next Position Loop End Und hier noch der erwähnte Anfang vom schon funktionierenden Code (der aber immer nur ein Servo und das der Servo Befehl): $swstack = 50 $hwstack = 50 $framesize = 50 Enable Interrupts Config Porta = Output Config Portb = Output Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 10 '$crystal = 8000000 '$baud = 9600 'WELCOME: Porta.0 = 1 Porta.1 = 0 Porta.2 = 1 Porta.3 = 0 Porta.4 = 1 Porta.5 = 0 Porta.6 = 1 Porta.7 = 0 Servo(1) = 50 Servo(2) = 50 Servo(1) = 150 Servo(2) = 150 Dim X As Byte Dim M As Byte Declare Sub Ledaction(byref Valuex As Integer) Declare Sub Commandrouter(byref Command As Integer , Valuex As Integer) Declare Sub Fastservoaction(byref Valuex As Integer) M = 0 While M < 99 X = 0 While X < 10 Waitms 200 Toggle Porta Incr X Wend Porta = 0 '''''''''''''''''' 'Lies Input nach IN und trenne nach :: '''''''''''''''''' Dim In As String * 80 Input "Input" , In Print In Dim Message(2) As String * 20 'Message(1) = "" 'Message(2) = "" Dim Bcount As Byte Bcount = Split(in , Message(1) , "::") '''''''''''''''''' 'Jetzt berechne CRC 16 aus Message(1) '''''''''''''''''' Dim Crccalc As String * 20 Crccalc = "" Crccalc = Hex(crc16uni(message(1) , 20 , 0 , &H8005 , 1 , 1)) 'Print "------" 'Print Message(1) 'Print Message(2) 'Print Crccalc 'Print Message(2) 'Print "------" ''''''''''''''''''' 'Prüfe ob berechneter CRC Wert mit dem der Message(2) übereinstimmt 'Wenn ja sende OK, teile Telegramm und sende an Commandrouter. 'Wenn nicht sende NOK und Beende Durchlauf. ''''''''''''''''''' Print "-------" Print Crccalc Print Message(2) Print "-------" If Crccalc = Message(2) Then Dim Ccount As Byte Dim Telegram(5) As String * 20 Ccount = Split(message(1) , Telegram(1) , "#") Print "OK" Dim Command As Integer Command = Val(telegram(2)) 'Print "1AR2" ; Command Dim Valuex As Integer Valuex = Val(telegram(3)) 'Print "1AR3" ; Port Call Commandrouter(command , Valuex) Else Print "NOK" End If Wend Sub Commandrouter(byrefl Command As Integer , Valuex As Integer) If Command = 10 Then Call Ledaction(valuex) Elseif Command = 11 Then Call Fastservoaction(valuex) End If End Sub Sub Ledaction(byref Valuex As Integer) Print "LED" ; Valuex ; "---" If Valuex = 0 Then Porta.0 = 1 End If If Valuex = 1 Then Porta.1 = 1 End If If Valuex = 2 Then Porta.2 = 1 End If If Valuex = 3 Then Porta.3 = 1 End If If Valuex = 4 Then Porta.4 = 1 End If End Sub Sub Fastservoaction(byref Valuex As Integer) Print "Moving Servo to" ; Valuex Servo(1) = Valuex End Sub End
Über antworten und Anregnung würde ich mich sehr freuen!







Zitieren

Lesezeichen