Forum: PC-Programmierung Probleme mit VBA, \0 und HyperTerminal


von Paul P. (dorpreuss)


Lesenswert?

Hallo,

ich habe Schwierigkeiten bei der seriellen Kommunikation mit meinem µC. 
Es ist ein Atmega88. Ich möchte mittels RSAPI.DLL und Excel mit dem 
Prozessor kommunizieren. (Daten senden empfangen, am PC anzeigen usw.) 
Ich schicke ein Steuerzeichen z.B. 'X' gefolgt von '\0' in einem String 
an den Prozessor. 'X' entspricht dabei den gewünschten Daten die er 
senden soll und '\0' sagt ihm, dass er aufhören kann zu empfangen. Das 
funktioniert leider nicht, so wie ich als Stringendzeichen '\0' 
verwende. Wenn ich zum Erkennen des Stringendes z.B. '?' benutze geht es 
tadellos.
Dase eigentliche Problem ist, dass ich nicht weiß, wie man in VBA einen 
String macht, der '\0' enthält oder wie man im Hyperterminal ein '\0' 
sendet.

Ich würde mich freuen, wenn ihr mir das verraten könntet. Ich such schon 
ewig im Netz und hab nichts gefunden. C-Programmierung kann ich ganz 
gut, aber mit VB bzw. VBA hab ich grad erst angefangen, also seid bitte 
nicht so hart mit euren Antworten.

Wenn ich übrigens aus der RSAPI.DLL mit der Funktion SENDBYTE erst das 
Steuerzeichen z.B. 'X' und dannn '\0' sende funktioniert es übrigens 
auch.
Aber diese Umsetzung gefällt mir einfach nicht.


Gruß

Paul

von Ralf (Gast)


Lesenswert?

Zeig mal deinen kompletten Code, sonst kann ja keiner was dazu sagen. 
Kann auch sein, dass du es einfach separat schicken musst. Verträgt 
SENDBYTE denn wirklich mehrere Zeichen auf einmal? Auf der Seite von 
Burkhard Kainka (http://www.b-kainka.de/vb5.htm) wird DOUT für die 
Ausgabe eines Wertes verwendet, vielleicht findest du dort ja noch 
was...

Ralf

von Peter (Gast)


Lesenswert?

Wieso benutzt Du die RsApi.DLL? Bei Windows kannst Du einfach eine Datei 
mit dem Namen "COM1", COM2", LPT1" etc... öffnen und darauf 
schreiben+lesen.

Open "COM1" For Binary Access Read Write As #1
  Put #1, , "Hello World" & Chr(0)  ' add \0 as stringend
Close #1

von Ralf (Gast)


Lesenswert?

Ach so, HyperTerminal ist großer Schrott. Ein /0 kannst du schicken, 
wenn du ALT gedrückt hältst, dreimal NUM0 drückst und ALT wieder 
loslässt.

Aber ich würde dir empfehlen, ein anderes Terminalprogramm zu nehmen, 
TeraTerm, BrayTerminal oder das Terminalprogramm von Tobi hier aus dem 
Forum.
Bei denen hat man viel mehr Funktionen und kann auch direkt HEX-Werte 
eingeben...

Ralf

von Paul P. (dorpreuss)


Lesenswert?

Hallo,


ich benutze das Terminal nur, um schnell zu testen, ob der µC das macht 
was er soll. Ich werde mir aber mal ein bessere runterladen, wenn ihr 
sagt dass die nicht Windows Terminals besser sind. Das mit \0 ist ja 
sehr umständlich.

Das man eine Datei Namens "COM1" öffnen kann, wusste ich nicht. Aber wo 
gebe ich da die Baudrate, Paritär usw. ein?

Das mit Sendbyte habe ich so gemacht.

SENDBYTE asc("X")
SENDBYTE 0

und das hier hab ich ausch schon probiert

SENDSTRING "X" und Chr(0)

geht aber auch nich.

Ich probier das jetzt mal per Terminal.


Vielen Dank

Gruß

Paul

von Peter (Gast)


Lesenswert?

Um die COM-Schnitstelle zu konfigurieren rufe ich einfach den "mode.com" 
Befehl auf, z.B:

MyId = Shell("mode.com COM1 baud=9600 parity=n data=8 stop=1 to=on 
xon=off dtr=off rts=off", vbHide)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.