king-sixXx
30.01.2006, 08:32
Hi Leute!
Ich bin mit meinem Programm schon recht zufrieden. Wenn ich einen Befehlsstring an meinen Mega8 sende, werden die Daten korrekt verarbeitet und es funktionert alles so, wie es soll. Dann schicke ich den zweiten Befehl und es tut sich nichts mehr! Die Motoren bleiben stehen und es wird auch nichts mehr an den PC zurückgesendet. Sende ich den dritten Befehl funktioniret es wieder.
Ich denke er bleibt in einer der Schleifen hängen, aber ich finde den Fehler nicht. Bin auch für Verbesserungen aller Art dankbar!
MFG!
Achja ein Befehlsstring sieht so aus: m255-255-1-0000x
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Config Portb = Output
Config Pind.5 = Output 'Motor 1 In1 D5
Motor1_in1 Alias Portd.5
Config Pind.6 = Output 'Motor 1 In2 D6
Motor1_in2 Alias Portd.6
Config Pind.7 = Output 'Motor 2 In1 D7
Motor2_in1 Alias Portd.7
Config Pinb.0 = Output 'Motor 2 In2 B0
Motor2_in2 Alias Portb.0
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Enable Interrupts
Dim S As String * 1
Dim Befehl As String * 22
Dim X As String * 1
Dim Laenge As Byte
Dim Instring As String * 22
Dim Strings(7) As String * 3
Dim Char As String * 1
Dim Par As Byte
Dim Idx As Byte
Dim Pwms1 As Byte
Dim Pwms2 As Byte
Dim Richtung As Byte
' m255-255-1-0000x
Do
If Ischarwaiting() = 1 Then S = Inkey()
If S = "m" Then
Do
X = Inkey()
Befehl = Befehl + X
Loop Until X = "x"
Laenge = Len(befehl)
Laenge = Laenge - 1
Instring = Left(befehl , Laenge)
Par = 1
For Idx = 1 To Len(instring)
Char = Mid(instring , Idx , 1)
If Char = "-" Then
Incr Par
Else
Strings(par) = Strings(par) + Char
End If
Next
Pwms1 = Val(strings(1))
Pwms2 = Val(strings(2))
Richtung = Val(strings(3))
Print Pwms1
Print Pwms2
Print Richtung
For Par = 1 To 5
Strings(par) = ""
Next
End If
Select Case Richtung
Case 1:
Motor1_in1 = 1
Motor1_in2 = 0
Motor2_in1 = 1
Motor2_in2 = 0
Case 2:
Motor1_in1 = 0
Motor1_in2 = 1
Motor2_in1 = 0
Motor2_in2 = 1
Case 3:
Motor1_in1 = 0
Motor1_in2 = 1
Motor2_in1 = 1
Motor2_in2 = 0
Case 4:
Motor1_in1 = 1
Motor1_in2 = 0
Motor2_in1 = 0
Motor2_in2 = 1
Case Else:
Motor1_in1 = 0
Motor1_in2 = 0
Motor2_in1 = 0
Motor2_in2 = 0
End Select
Compare1a = Pwms1
Compare1b = Pwms2
Loop
End
Ich bin mit meinem Programm schon recht zufrieden. Wenn ich einen Befehlsstring an meinen Mega8 sende, werden die Daten korrekt verarbeitet und es funktionert alles so, wie es soll. Dann schicke ich den zweiten Befehl und es tut sich nichts mehr! Die Motoren bleiben stehen und es wird auch nichts mehr an den PC zurückgesendet. Sende ich den dritten Befehl funktioniret es wieder.
Ich denke er bleibt in einer der Schleifen hängen, aber ich finde den Fehler nicht. Bin auch für Verbesserungen aller Art dankbar!
MFG!
Achja ein Befehlsstring sieht so aus: m255-255-1-0000x
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Config Portb = Output
Config Pind.5 = Output 'Motor 1 In1 D5
Motor1_in1 Alias Portd.5
Config Pind.6 = Output 'Motor 1 In2 D6
Motor1_in2 Alias Portd.6
Config Pind.7 = Output 'Motor 2 In1 D7
Motor2_in1 Alias Portd.7
Config Pinb.0 = Output 'Motor 2 In2 B0
Motor2_in2 Alias Portb.0
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Enable Interrupts
Dim S As String * 1
Dim Befehl As String * 22
Dim X As String * 1
Dim Laenge As Byte
Dim Instring As String * 22
Dim Strings(7) As String * 3
Dim Char As String * 1
Dim Par As Byte
Dim Idx As Byte
Dim Pwms1 As Byte
Dim Pwms2 As Byte
Dim Richtung As Byte
' m255-255-1-0000x
Do
If Ischarwaiting() = 1 Then S = Inkey()
If S = "m" Then
Do
X = Inkey()
Befehl = Befehl + X
Loop Until X = "x"
Laenge = Len(befehl)
Laenge = Laenge - 1
Instring = Left(befehl , Laenge)
Par = 1
For Idx = 1 To Len(instring)
Char = Mid(instring , Idx , 1)
If Char = "-" Then
Incr Par
Else
Strings(par) = Strings(par) + Char
End If
Next
Pwms1 = Val(strings(1))
Pwms2 = Val(strings(2))
Richtung = Val(strings(3))
Print Pwms1
Print Pwms2
Print Richtung
For Par = 1 To 5
Strings(par) = ""
Next
End If
Select Case Richtung
Case 1:
Motor1_in1 = 1
Motor1_in2 = 0
Motor2_in1 = 1
Motor2_in2 = 0
Case 2:
Motor1_in1 = 0
Motor1_in2 = 1
Motor2_in1 = 0
Motor2_in2 = 1
Case 3:
Motor1_in1 = 0
Motor1_in2 = 1
Motor2_in1 = 1
Motor2_in2 = 0
Case 4:
Motor1_in1 = 1
Motor1_in2 = 0
Motor2_in1 = 0
Motor2_in2 = 1
Case Else:
Motor1_in1 = 0
Motor1_in2 = 0
Motor2_in1 = 0
Motor2_in2 = 0
End Select
Compare1a = Pwms1
Compare1b = Pwms2
Loop
End