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
Hallo, oder mal mit Chr(0)? zB. strNewString = strNewString & Chr(0)
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
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!
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ß.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.