Du musst die Print-Anweisung auf die entsprechend eingestellte Software-Uart zeigen lassen :
Print #3, "@01"
Hallo,
Ich bin Maschinenbaustudent und soll mittels Bascom Einen Isel 4 Achs Controller iMC-M ansteuern und Punkte abfahren. Dazu zusagen ist das ich mich als Maschinenbaustudent nicht alzu tief in der Materie befinde und auch nicht sonderlich viele Kenntnisse in der Programmierung mit Bascom habe. Meine erste Frage ist wie ich die Schnittstelle öffen kann? Der Ausgang ist COM3 und hat 19200 baud. Probiert habe ich es mit dem Befehl: Open Com3:19200,8,n,1 for output as #3
Ich weiß nun nicht ob das ausreicht oder dort noch irgendwo ein close kommen muss weil dies in der Hilfe nicht ersichtlich ist. jedenfalls fur mich nicht.
Und zweitens wusste ich gerne wenn ich die Simulator öffne ob die Schnittstelle dann geöffnet wird oder ob mir das Programm dies nur vorgaugelt.
Ich habe folgendes Programm geschrieben und auf dem simulator ablaufen lassen:
Cls
Dim A As String * 1
Open "com3:19200,8,n,1" For Output #3
Print "@01"
A = Waitkey()
Print A
End
Das System benötigt immer einen Handshake aber ich bekomme keine 0 zurück das die Achsen konfiguriert wurden oder auch keine Fehlermeldung deshalb die Frage mit dem simulator ob er die Schnittstelle anspricht.
Ich hoffe es gibt schlaue leute die mir da helfen können. Würde mich sehr über Hilfe freuen.
Dank im vorraus.
Du musst die Print-Anweisung auf die entsprechend eingestellte Software-Uart zeigen lassen :
Print #3, "@01"
Ich habe den kanal eingefügt so wie du es geschrieben hast aber nun zeigt er mir fehler in line 7. external routine not found und label not found. Line 7 ist die End Zeile.
Schau Dir den open Befehl in der Bascom Hilfe an. Da ist ein Beispiel for Soft UART.
Im Open Befehl müßte es zB "comb.1:19200, ... " heißen. Dann wäre PB1 der TX
Außerdem muß es ... as #3 heißen.
Für waitkey braucht es einen Input PIn, also open "...." for input as ...
Im waitkey muß die Kanalnummer vom input angegeben sein.
Auf welchem µC soll das laufen?
Komplettes Programm incl Header posten.
Der Simulator kann auf dem µC den Port nicht öffnen, wenn er nicht angeschlossen ist.wusste ich gerne wenn ich die Simulator öffne ob die Schnittstelle dann geöffnet wird
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Dim A As String * 3
A = "*"
Open "com3:19200,8,N,1" For Input As #3
Print #3 , "@01"
If Loc(3) < 1 Then Print "hallo"
A = Inkey(#3)
Print "A$" ; A
If A = "0" Then Print "alles ok" ; End If
Marke:
A = Inkey(#3)
If A < 0 Then Goto Marke
Print "a$" ; A
Print #3 , "@0a 500,1000"
A = Waitkey()
Print "A$" ; A
End
Das is ein ein kleiner Anfang den ich mal so probiert habe aber gibt er auch fehler aus. Also ich will über eine RS232 Schnittstelle diesn Isel Roboter ansteuern und damit einzelne Messpunkte anfahren. Das Programm war nur so ein kleiner Versuch zum testen. Angeschlossen habe ich alles. Über andere Programme kann ich auch wunderbar mit dem geraät kommunizieren und alles so bewegen wie ich will aber mein Professor will unbedingt das ich es mit Bascom mache. Er soll einfach 10 voreingegeben Punkte anfahren und dort 30sec verharren dann kann ich den messwert ablesen und weiter gehts. so soll das Programm aussehen aber das ist ganz und gar nicht meine Welt. Vllt könnt ihr mir ja noch mehr nützliche Hinweise geben. Gruß
Mit Bascom schreibt man Programme, die auf einen Mikrokontroller (µC) übertragen werden und dann dort ablaufen.
Damit das Programm auf dem µC ablauffähig ist, muß der Sourcecode für den ganz bestimmten µC kompiliert werden.
Einstellungen für die Kompilierung gibt man der Übersichtlichkeit halber in einem Header im Sourcecode an.
In Deinem Programm versuchst Du SW-UART zum Senden von Daten über die PC COM Schnittstelle zu nutzen. Damit hab ich es nicht geschafft - denke auch nicht, daß das geht
Das ganze Timing Verhalten in der Simulation entspricht nicht dem, die es auf dem µC haben würde. Um trotzdem was aus der Simulation raus und rein zu kriegen, versuch Folgendes:
In Bascom unter "Options", "Communication" den COM Port einstellen, den Du am PC nutzen möchtest und die Parameter wie 19200,8,n,1,handshake=none
In Bascom unter "Options", "Simulator" auch nochmal den COM Port einstellen.
Unten stehendes Programm kompilieren und dann Simulator aufrufen. Oben den Haken bei Terminal aktivieren (Werden COM-Port Parameter geändert, muß der Haken deaktiviert und wieder aktiviert werden!).
Bei Beenden und Neustart von Bascom verschwindet der Haken wieder - drauf achten daß er gesetzt ist, wenn Du wieder den Datenaustausch brauchst.
Simulation laufen lassen.
So hat die Verbindung bei mir auf WIN-XP mit Nullmodem Kabel zwischen echten COM-Ports zu einem anderen PC mit Hyperterminal geklappt; hatte also keinen USB-RS232 Wandler und korrekte Einstellungen am anderen PC vorausgesetzt.
Das Programm nutzt die defaultmäßigen Einstellungen für die HW-Uart = COM1 des µC. Deshalb keine Einstellungen außer $baud ($baud hat aber keinen Einfluß auf die Kommunikation aus der Simulation heraus). Wegen Nutzung der HW-COM1 ist kein "Open" notwendig.
Bitte gib Bescheid wenns funktioniert hat. und wenn nicht, dann nicht
GrußCode:$regfile = "m88def.dat" 'Für ATMega88 Mikrokontroller $framesize = 32 $swstack = 32 $hwstack = 34 $crystal = 8000000 $baud = 19200 'Baud Rate ( 8,N,1 ist default - flow control=NONE) Dim A As String * 1 Print "@01" A = Waitkey() Print A End
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Hallo... Ganz herzlichen dank schonmal das ihr mir helfen wollt. ICh habe alles so wie du beschrieben hast gemacht und habe alles so eingestellt. Ich habe den simulator geöffnet aber er arbeitet das programm nur bis zum waitkey ab und weiter geht er nicht. Ich denke er bekommt keine antwort. Ich habe es mit einem anderen Programm überprüft. Ich habe com3 und 19200 Baud. Mit diesen Einstellungen kann ich mit dem Isel kommunizeiren und er führt die Befehle auch wunderbar aus. Ich habe wikrlich keine Idee wieso er nichts zurück bekommt. Würde mich über weitere Antworten sehr freuen. Gruß
- - - Aktualisiert - - -
Sry ich muss mich revidieren. Ich hatte ganz vergessen den Haken bei terminal zu setzen und nun bekomme ich die Null also das er den Befehl erpfangen hat zurück also funktioniert es. Tausend dank dafür schonmal. Und wie geht es nun weiter? Wie setze ich die befhele ab das er Punkte anfährt? Also der befehl für isel ist zum beispiel ür eine Achse dann: @0a 5000,10000 -> Der erste Wert bestimmt die Schrittweite und der zweite die Geschwindigkeit. Würde mich über weitere Hilfe sehr freuen. Gruß
Na prima!
Als erstes muß ich sagen, daß mir etwas unwohl dabei ist, den Simulator zur Steuerung von Isel zu nehmen. Der Simulator ist ja eigentlich nur zum Debuggen von µC Programmen gedacht. Mit dem Steuern per Bascom hat Dein Professor wahrscheinlich eher an einen µC gedacht, dessen Programm mit Bascom erstellt wurde
Ab jetzt führt wohl kein Weg mehr dran vorbei, Bascom zu lernenUnd wie geht es nun weiter? Wie setze ich die befhele ab das er Punkte anfährt?
Kurz noch das Beispiel für den Achsbefehl, wie ich denke, daß es funktionieren könnte, kenne aber natürlich nicht das Protokoll zu Isel:
Für die Kommunikation über RS232 gibt es Monitorprogramme für den PC um den Datenaustauch "abzuhören". Sehr hilfreich um zu sehen, was da wirklich hin und her geht. Früher gab es mal "portmon" von sysinternals. Mit dem Neuen http://www.netzwelt.de/download/6805-portmon.html hab ich noch nicht gearbeitet. Weis auch nicht, ob das mit USB-Port läuft.Code:$regfile = "m88def.dat" 'Für ATMega88 Mikrokontroller $framesize = 32 $swstack = 32 $hwstack = 34 $crystal = 8000000 $baud = 19200 'Baud Rate ( 8,N,1 ist default - flow control=NONE) Dim A As String * 1 Print "@01" A = Waitkey() 'Print A 'auskommentiert, da A wieder zum Isel geschickt würde Print "@0a 5000,10000" 'Befehl zum Achse positionieren A = Waitkey() 'für Quittung? ein Zeichen? vom Isel Print A 'Anzeige der Quittung (geht aber auch wieder zum Isel zurück! ) End
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Ok super. Ich hatte alleine schon so probiert und er bewegt sich mit den befehlen und ich kann auch die referenzfahrt absolvieren wie es sein soll. Er soll an den verschiedenen Punkten so ca 30sec verharren damit ich an meiner messaparatur werte abnhemen kann und dann im porgramm weiter gehen und zum nächsten punkt gehen. macht man das am besten mit ner schleife? oder gibts da n befehl wo ich sagen kann wielange er an einem bestimmten befehl verharren soll? Ein lieben dank schonmal an searcher für die unterstützung.
Da fängt das Problem mit dem Simulator schon an. Wenn das Programm auf dem µC läuft, könnte man einfach "wait 30" für eine Wartezeit von 30 Sekunden schreiben. Im Simulator wird die Zeit aber sehr anders sein, abhängig vom PC und dessen Geschwindigkeit. Da könnte Ausprobieren helfen. Mit kurzen Zeiten beginnen, da der Ablauf "ewig" dauert. Es gibt noch waitms mit Angabe von Millisekunden und waitus.Er soll an den verschiedenen Punkten so ca 30sec verharren damit ich an meiner messaparatur werte abnhemen kann und dann im porgramm weiter gehen und zum nächsten punkt gehen. macht man das am besten mit ner schleife? oder gibts da n befehl wo ich sagen kann wielange er an einem bestimmten befehl verharren soll?
Im µC würde man idealerweise statt wait die Timer zum Abmessen von Zeiten zu nehmen. Timer funktionieren im Simulator jedoch noch problematischer und langsamer - nach meinem Wissensstand im Simulator nicht für Deinen Zweck zu gebrauchen
Aber vielleicht gibt es ja einen Befehl für Isel, der ihn anweist mal eine Pause einzulegen und wenn die Pause fertig ist eine Quittung gibt. Dann kann man auf die Pauseende Quittung warten.
waitkey wartet nur auf ein Zeichen, egal was. Zum Testen, ob es die Richtige ist kann man Abfragen in/mit Schleifen verwenden und entsprechen reagieren. Ob waitkey überhaupt das Richtige ist, hängt davon ab, was Isel sendet. Es gibt zB auch Input und anderes. Die sind sogar noch konfigurierbar, ob CR/LF oder nur LF etc an der Message dran hängt -> BASCOM-Hilfe
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Lesezeichen