Com-Port ansteuern will nicht so recht

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Smily

Betreff: Com-Port ansteuern will nicht so recht

BeitragMo, Jul 06, 2009 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho,

Folgendes Problem: Ich habe hier einen Atmega stehen, den ich gerne per COM-Port ansteuern möchte.

Dabei habe ich ein Problem, das etwas ungewöhnlich ist:

Code: [AUSKLAPPEN]
com = writefile("COM6")
writebyte com, 65

writefile liefert ein handle zurück, und wenn ich in dieses handle schreibe, wird auch kein fehler geliefert.
Aber bei der gegenseite kommen keine Daten an.

Wenn ich jetzt das Hyperterminal unter Windows öffne, etwas reinschreibe, und dieses wieder schliesse, funktioniert es auf einmal, also es kommen auch die daten an, die ich mittels bb schicke.

Wenn ich neu starte oder im Hardwaremanager den COM-Port wieder deaktiviere und aktiviere, geht es wieder nicht mehr, bis ich das nächste mal den port vorher mit dem Hyperterminal geöffnet habe.

Ach ja: Das Teil hängt nicht direkt an einem COM-Port meines Computers, sondern über einen USB-zu-COM adapter.

Hat jemand eine Idee?

Grüße,
Smily
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Smily

BeitragDi, Jul 07, 2009 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachtrag: Gibt es vielleicht eine Möglichkeit, den COM-Port per kommandozeile zu öffnen und dannach wieder zu schliessen?

Grüße,
Smily
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

DjDETE

BeitragDi, Jul 07, 2009 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Für den COM-Port musst du dlls benutzen, mit Writefile würdest du eine Datei erstellen, die COM6 heißt.
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

BtbN

BeitragDi, Jul 07, 2009 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, man kann so auf den COM-Port zugreifen. Das ist schon richtig so.
Meine vermutung: Man muss erst irgend ne Init-Sequenz schreiben, die das Hyperterminal kennt, du aber nicht.
 

DjDETE

BeitragDi, Jul 07, 2009 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
echt? wozu sind dann die dlls gut?
mfg
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

BtbN

BeitragDi, Jul 07, 2009 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Leute, die das nicht wissen.

Smily

BeitragDi, Jul 07, 2009 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
BtbN hat Folgendes geschrieben:
Nein, man kann so auf den COM-Port zugreifen. Das ist schon richtig so.
Meine vermutung: Man muss erst irgend ne Init-Sequenz schreiben, die das Hyperterminal kennt, du aber nicht.


Danke soweit. Die Frage ist nun, woher das Hyperterminal "weis", dass es diese Init-Sequenz schreiben muss. RS232 ist ja ein recht primitives Protokoll ohne flusssteuerung etc..
Oder ist das ein allgemeiner COM-Standard?

Und wie könnte ich denn an diese Init-Sequenz herankommen? Gibt es sowas wie Wireshark für den COM-Port?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Smily

BeitragMi, Jul 08, 2009 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nochmal nachtrag: Ich hab mir das ganze jetzt mal mit dem COM-Sniffer "Portmon" angesehen, dabei ist folgendes rausgekommen:

wenn ich etwas mit blitzbasic schicke, sieht es so aus:

Zitat:

0.00004805 blitzcc.exe IRP_MJ_CREATE Serial0 SUCCESS Options: Overwrite
0.00002710 blitzcc.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
0.00000363 blitzcc.exe IRP_MJ_CLEANUP Serial0 SUCCESS
0.09011145 blitzcc.exe IRP_MJ_CLOSE Serial0 SUCCESS


und wenn ich etwas mit hyperterm schicke, sieht es so aus:
Zitat:

0.00007180 hypertrm.exe IRP_MJ_CREATE Serial0 SUCCESS Options: Open
0.00000670 hypertrm.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 8192 OutSize: 8192
0.00000223 hypertrm.exe IOCTL_SERIAL_CONFIG_SIZE Serial0 SUCCESS Size: 0
0.00000196 hypertrm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
0.00000251 hypertrm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
0.00000196 hypertrm.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
0.00000223 hypertrm.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
0.00000168 hypertrm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
0.00000223 hypertrm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
0.00000168 hypertrm.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
0.00000196 hypertrm.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
0.00000782 hypertrm.exe IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 9600
0.00000447 hypertrm.exe IOCTL_SERIAL_SET_RTS Serial0 SUCCESS
0.00000419 hypertrm.exe IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
0.00000335 hypertrm.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
0.00000196 hypertrm.exe IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
0.00000363 hypertrm.exe IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:80000001 Replace:80000040 XonLimit:80 XoffLimit:200
0.00000196 hypertrm.exe IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:10 RM:0 RC:0 WM:0 WC:5000
0.00000251 hypertrm.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RLSD ERR
58.79886131 hypertrm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
58.79888282 hypertrm.exe IRP_MJ_READ Serial0 CANCELLED Length 80
0.00001928 hypertrm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: a
0.00002011 hypertrm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: s


Die Frage ist nun, wie ich das mit blitzbasic hinbekomme :/
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

BadDeath

BeitragMi, Jul 08, 2009 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon mal das probiert? https://www.blitzforum.de/foru...hp?t=29004 Damit kannst du auch direkt Zeichen senden, die Baudrate einstellen usw.
-~= real coders just code in binary =~-

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group