Forum: Mikrocontroller und Digitale Elektronik Kommunikation Excel VBA --> µC / Stringterminator


von Daniel D. (__daniel__)


Lesenswert?

Liebe Forumleute!

I've got a situation here :) Hoffe auf Hilfe von euch.

Hier habe ich ein super Excel-File gezogen:
http://michael-schwimmer.de/vba117.htm

Funktioniert einwandfrei, also auch die Kommunikation mit dem µC 
insofern ich im µC nicht auf'\0' als Stringterminator warte in meiner 
UART-Empfangsroutine.

Wenn ich weiß wie lange meine Nachrichten sein werden, dann kann ich ja 
auch einfache eine gewisse Anzahl an Zeichen abfragen und muss nicht auf 
einen Terminator /0 warten.

Ich will das jetzt aber irgendwie flexibel zum Laufen bekommen - mit 
diesem Abschluss. (wenn ich als Abschluss auf irgendein anderes Zeichen 
warte im µC-Code, z.B. einfach mal "X" und im gesendeten String ein "X" 
vorkommt, dann funktioniert es einwandfrei. Der Terminator wird vom µC 
erkannt.)

Ich kann aber scheinbar in Excel-VBA nicht einfach \0 (wohl weil kein 
C?) anhängen um es zum Laufen zu bringen. Was muss ich denn dann 
anfügen?  Bzw. generell in Excel VBA für diese Steuerzeichen: 
http://de.wikipedia.org/wiki/Steuerzeichen ? Oder muss ich da noch 
irgendwas konvertieren?

Dankeschön schonmal!

Daniel

von Mike (Gast)


Lesenswert?

Hast du mal vbCR (0x0D) probiert?

von KEIN97 (Gast)


Lesenswert?

Hallo,

oder mal mit Chr(0)?
zB. strNewString = strNewString & Chr(0)

von c-hater (Gast)


Lesenswert?

Daniel D. schrieb:

> Ich kann aber scheinbar in Excel-VBA nicht einfach \0 (wohl weil kein
> C?) anhängen um es zum Laufen zu bringen.

Natürlich kann man das tun. Es muß halt nur anders als in C geschrieben 
werden, weil VBA nunmal eine andere Sprache als C ist und 
dementsprechend auch eine andere Syntax hat.

Zum Anhängen eines Nullzeichens schreibt man in VBA:

"Zeichenkette" & vbNull

von Daniel D. (__daniel__)


Lesenswert?

Juhu! Dankeschön für eure Antworten!

Also:
Mike schrieb:
> Hast du mal vbCR (0x0D) probiert?
--> funktioniert nicht

KEIN97 schrieb:
> oder mal mit Chr(0)?
--> funktioniert einwandfrei! Toll, dankeschön!!

c-hater schrieb:
> "Zeichenkette" & vbNull
--> funktioniert nicht. Mal kurz gegoogelt: & vbNullChar wäre in meinem 
Fall richtig und funktioniert

Super!

Grundsätzlich mal ne Frage: Wenn ich jetzt beispielsweise eine Drehzahl 
von 1000 rpm übermitteln wollte, dann könnte ich das mit 4 Zeichen 
machen, also als Zeichenkette "1000" = 4Byte.
Diese Info (also die Zahl "1000") könnte ich aber auch binär in zwei 
Byte packen, also eine 16-Bit-Zahl und könnte die sofort Ohne Schleife 
oder Konvertierung oder irgendeiner anderen "Auseinanderdröselei" des 
Strings mit meinem µC direkt verarbeiten. Nur wäre dann eben wenn 
Drehzahl 0 auch die Information = \0 und mein µC würde die Nachricht 
dort abhacken. Ich müsste dann also mit der UART-Routine direkt auf eine 
konkrete Zeichenkettenlänge warten.

Ist es denn generell eher die Regel Ascii-Zeichen zu übermitteln, also 
die speicherintensivere Lösung? Ich muss jetzt nicht Unmengen von Daten 
übermitteln...einfach als Info für mich.

Danke!

von KEIN97 (Gast)


Lesenswert?

Hallo,

ich würde als Stringterminator eher ein Carriage Return = Chr(13) oder 
auch vbCr genannt verwenden (schau mal in die Hilfe von VBA unter dem 
Stichwort "Konstanten").
Also "1000" & Chr(13). Wenn dein µC das Carriage Return (\n in C) 
empfangen hat dann weiß er das alles was davor steht die Drehzahl ist.

Ob das in µC Kreisen üblich ist ASCII zeichen zu versenden weiß ich 
nicht, aber viele externe Geräte die ich kenne erwarten Strings als 
Kommandos und in der Regel ein Carriage Return (Wagenrücklauf auf dt.) 
als Abschluß.

von Mike (Gast)


Lesenswert?

Daniel D. schrieb:
> Mike schrieb:
>> Hast du mal vbCR (0x0D) probiert?
> --> funktioniert nicht

Das Basic stellt sich aber auch an. vbCr wäre dann wohl besser ;-)

Wenn du ASCII überträgst, hat das den Vorteil, dass du auch mal mit 
einem Terminalprogramm gut mitlesen kannst.

Klar gibt es HTerm, dass mit allem zurecht kommt, aber wie du schon 
richtig erkannt hast, mußt du dir bei Binärübertragung ein 
Datenprotokoll überlegen, damit es z.B. bei Drehzahl 0, 256, 512 oder 
768 nicht zu Verwirrung kommt.

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.