Tredory
06.03.2009, 23:58
Hallo,
Ich bin dabei nen Schrittmotor vom PC aus über einen Atmega 32 anzusteuern.
Die Controllersoftware habe ich soweit fertig und funktionieren tuts auch.
Naja, jedenfalls vom Terminal aus.
Ich muss dem Controller nacheinander 3 Daten übermitteln:
- ein l oder ein r für die Drehrichtung
- eine ganzzahl für die Drehzahl in U/min
- die Anzahl der Schritte die er laufen soll.
Mit dem Terminal läuft das ganze wie folgt:
ich verbinde das Terminal ganz normal mir den passenden com port einstellungen.
Dann drücke ich l und anschließend enter. Daraufhin antwortet mir der Controller mit O für OK.
dann gebe ich eine Zahl z.b.200 ein und drücke wieder enter.
Er antwortet wieder mit O.
Zuletzt geb ich dann wieder ne zahl (z.b.1000) ein gefolgt von enter und er Antwortet wieder mit O. Und nun macht der Motor auch genau das, was er soll:
Mit 200 U/min 1000 Schritte nach Links drehen.
Nun versuche ich mit VB2008 ein Programm zu erstellen, das halt genau diese befehle ausgibt, erst habe ich versucht direkt ein programm zu erstellen das zeilenweise eine textbox ausließt, und die Daten dann übertträgt, da das allerdings nicht wirklich klappen wollte will ich erstmal ganz einfach anfangen.:
Module Module1
Dim myport As New System.IO.Ports.SerialPort
Dim Daten() As Byte
Sub Main()
myport.PortName = "COM2"
myport.BaudRate = 9600
myport.Parity = IO.Ports.Parity.None
myport.StopBits = IO.Ports.StopBits.One
myport.DataBits = 8
myport.Open()
Do
myport.Write("r")
myport.Write(Chr(13))
'Threading.Thread.Sleep(500)
Checkinput()
myport.Write("300")
myport.Write(Chr(13))
'Threading.Thread.Sleep(500)
Checkinput()
myport.Write("1000")
myport.Write(Chr(13))
MsgBox("Durchgang fertig")
Loop
End Sub
Private Sub Checkinput()
Dim Buffer As String = ""
Do
Buffer = Buffer + myport.ReadLine
If Buffer = "O" + Chr(13) Then
Exit Do
Else
MsgBox("Aktueller empfang = " + Buffer)
End If
Loop
End Sub
End Module
der Hauptteil läuft, wenn ich die momentan auskommentierten 'Threading.Thread.Sleep(500) benutze. Aber da ich das mc programm extra so erstellt habe, dass er immer antwortet wenn was da ist, möchte ich diese Antworten auf dem Pc auch benutzen um ihm zu sagen wann er das nächste losschicken darf.
Dazu hab ich nun die Sub Checkinput() eingebaut, die aber leider irgendwie garnicht das macht was ich will ;)
Nach dem Starten des Programms erknnt der Kontroller seine laufrichtung und gibt O aus, am PC im checkinput kommt aber eine messagebox
mit dem Text "Aktueller empfang = l ". Nach klick auf OK kommt dann die 2te messagebox mit dem Text "Aktueller empfang = lO ".
Nach bstätigung hängt er dann in der Do Loop schleife Fest.
Was ich nicht verstehe, warum erkennt der im eingang ein l ?? der Kontroller gibt definitiv nur das O als antwort aus, zumindest wird nur das O als Antwort im Terminal angezeigt.
Was könnt ihr mir dazu sagen ? Was ist Falsch, ich bin hier jetzt 2 Tagen am rumprobieren und bekomme es einfach nicht hin.
Ich hoffe ihr könnt mir helfen, ich habe noch kein Tutorial oder Hinweise gefunden die mit da weiterhelfen konnten :(
mfg
Jens R.
Ich bin dabei nen Schrittmotor vom PC aus über einen Atmega 32 anzusteuern.
Die Controllersoftware habe ich soweit fertig und funktionieren tuts auch.
Naja, jedenfalls vom Terminal aus.
Ich muss dem Controller nacheinander 3 Daten übermitteln:
- ein l oder ein r für die Drehrichtung
- eine ganzzahl für die Drehzahl in U/min
- die Anzahl der Schritte die er laufen soll.
Mit dem Terminal läuft das ganze wie folgt:
ich verbinde das Terminal ganz normal mir den passenden com port einstellungen.
Dann drücke ich l und anschließend enter. Daraufhin antwortet mir der Controller mit O für OK.
dann gebe ich eine Zahl z.b.200 ein und drücke wieder enter.
Er antwortet wieder mit O.
Zuletzt geb ich dann wieder ne zahl (z.b.1000) ein gefolgt von enter und er Antwortet wieder mit O. Und nun macht der Motor auch genau das, was er soll:
Mit 200 U/min 1000 Schritte nach Links drehen.
Nun versuche ich mit VB2008 ein Programm zu erstellen, das halt genau diese befehle ausgibt, erst habe ich versucht direkt ein programm zu erstellen das zeilenweise eine textbox ausließt, und die Daten dann übertträgt, da das allerdings nicht wirklich klappen wollte will ich erstmal ganz einfach anfangen.:
Module Module1
Dim myport As New System.IO.Ports.SerialPort
Dim Daten() As Byte
Sub Main()
myport.PortName = "COM2"
myport.BaudRate = 9600
myport.Parity = IO.Ports.Parity.None
myport.StopBits = IO.Ports.StopBits.One
myport.DataBits = 8
myport.Open()
Do
myport.Write("r")
myport.Write(Chr(13))
'Threading.Thread.Sleep(500)
Checkinput()
myport.Write("300")
myport.Write(Chr(13))
'Threading.Thread.Sleep(500)
Checkinput()
myport.Write("1000")
myport.Write(Chr(13))
MsgBox("Durchgang fertig")
Loop
End Sub
Private Sub Checkinput()
Dim Buffer As String = ""
Do
Buffer = Buffer + myport.ReadLine
If Buffer = "O" + Chr(13) Then
Exit Do
Else
MsgBox("Aktueller empfang = " + Buffer)
End If
Loop
End Sub
End Module
der Hauptteil läuft, wenn ich die momentan auskommentierten 'Threading.Thread.Sleep(500) benutze. Aber da ich das mc programm extra so erstellt habe, dass er immer antwortet wenn was da ist, möchte ich diese Antworten auf dem Pc auch benutzen um ihm zu sagen wann er das nächste losschicken darf.
Dazu hab ich nun die Sub Checkinput() eingebaut, die aber leider irgendwie garnicht das macht was ich will ;)
Nach dem Starten des Programms erknnt der Kontroller seine laufrichtung und gibt O aus, am PC im checkinput kommt aber eine messagebox
mit dem Text "Aktueller empfang = l ". Nach klick auf OK kommt dann die 2te messagebox mit dem Text "Aktueller empfang = lO ".
Nach bstätigung hängt er dann in der Do Loop schleife Fest.
Was ich nicht verstehe, warum erkennt der im eingang ein l ?? der Kontroller gibt definitiv nur das O als antwort aus, zumindest wird nur das O als Antwort im Terminal angezeigt.
Was könnt ihr mir dazu sagen ? Was ist Falsch, ich bin hier jetzt 2 Tagen am rumprobieren und bekomme es einfach nicht hin.
Ich hoffe ihr könnt mir helfen, ich habe noch kein Tutorial oder Hinweise gefunden die mit da weiterhelfen konnten :(
mfg
Jens R.