Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich habe folgendes Problem:
Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln. Das habe ich mit viel Aufwand auch geschaft, das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart.
So, giebt es eine Möglichkeit die VISA Schnittstelle Bitweise anzusprechen oder meine eigene ACII-Tabelle anzulegen? Das blöde aber wäre das ich nicht weis wie ich die ganzen Sonderzeichen da eintragen soll/muss.
Ich habe folgendes Problem:
Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln. Das habe ich mit viel Aufwand auch geschaft, das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart.
So, giebt es eine Möglichkeit die VISA Schnittstelle Bitweise anzusprechen oder meine eigene ACII-Tabelle anzulegen? Das blöde aber wäre das ich nicht weis wie ich die ganzen Sonderzeichen da eintragen soll/muss.
Vielen Dank für eure Hilfe!
da muß dir ein anderer Fehler unterlaufen sein.
Zum Ersten eine Zahl wandelst du am schnellsten, wie schon sooft im Forum beschrieben, mit der Funktion Byte Array To String in ein String um (FunctionsNumericConversion). Vorher noch ein Build Array einschieben.
Zum Anderen ist es völlig egal in welches sichtbare Zeichen dein Betriebssystem es umwandelt. Es zählt einzig und alleine die Bitreihenfolge, die über die Serielle Schnittstelle gesendet wird und die wird wieder deiner Zahl entsprechen. Du kannst dies einfach mit einem Speicherozzi oder RS232-Analyser nachprüfen.
Mit welcher Tabelle Windows also gearbeitet hat ist egal - es steckt immernoch die gleiche Zahl dahinter.
' schrieb:Ich möchte eine Zahl im Bereich von 0-255, also ein Byte, an meinen Mikrocontroller übertragen. Dazu müsste ich die Zahl in ein ASCII Zeichen umwandeln.
Ein ASCII-Zeichen ist eine Zahl im Bereich von 0 bis 255.
Ein Byte ist eine Typbezeichnung mit der Breite 8 Bit.
ASCII, HEX, Dezimal und wie sie alle heißen ist eine Darstellungsform einer Zahl. Hex 0x41 = DEC 65 = ASCII 'A'. Darstellungsformen an sich kann man aber nicht übertragen. Übertragen kann man nur Zahlen. Willst du das Byte 65 - also z.B. ASCII 'A' - in Hexform übertragen musst du die beiden Zahlen für '4' und '1', also 0x34 und 0x31 übertragen.
Zitat:Das habe ich mit viel Aufwand auch geschaft,
Da für mich ASCII und Binär identisch ist, kann ich diesen Aufwand nicht nachvollziehen.
Zitat:das dumme ist das dabei offenbar die Windows ASCII-tabelle verwendet wird, mein Controller arbeitet aber mit IBM-Standart.
Die ASCII-Tabelle ist normiert. Oder möchtest du EBCDIC übertragen (was ich mir eigentlich nicht vorstellen kann)?
Zum Umwandeln Zahl in String siehe Posting von Oliver Frank.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Serielle Komunikation mit Mikrocontroller
Hallo,
meines Erachtens muss 41 (hex) nicht mehr in Hex umgewandelt werden, bevor es übertragen wird, wenn ich ASCII 'A' rüberschicken möchte.
Gruß Markus
' schrieb:ASCII, HEX, Dezimal und wie sie alle heißen ist eine Darstellungsform einer Zahl. Hex 0x41 = DEC 65 = ASCII 'A'. Darstellungsformen an sich kann man aber nicht übertragen. Übertragen kann man nur Zahlen. Willst du das Byte 65 - also z.B. ASCII 'A' - in Hexform übertragen musst du die beiden Zahlen für '4' und '1', also 0x34 und 0x31 übertragen.
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
' schrieb:meines Erachtens muss 41 (hex) nicht mehr in Hex umgewandelt werden, bevor es übertragen wird, wenn ich ASCII 'A' rüberschicken möchte.
Das ist richtig.
Wenn ich ASCII übertragen will, brauche ich nicht wandeln.
Muss ich aber HEX übertragen, weil die Gegenseite quasi lesbare Zeichen verlangt - nämlich HEX-Darstellung - muss ich die beiden ASCII-Zeichen der Hex-Darstellung übertragen.
Im übrigen bin ich der Meinung, dass Mark_LabVIEW möglicherweise eine Hex-Übertragung meint, auch wenn er ASCII schreibt.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Zitat:Zum Anderen ist es völlig egal in welches sichtbare Zeichen dein Betriebssystem es umwandelt. Es zählt einzig und alleine die Bitreihenfolge, die über die Serielle Schnittstelle gesendet wird und die wird wieder deiner Zahl entsprechen.
Das ist mir im laufe des gestrigen Abends auch bewusst geworden. Dann habe ich den ganzen Abend damit zugebracht, zu Rätzeln wo den dan mein Fehler noch liegen könnte. Da ich nicht drauf gekommen bin geb ich das Rätzel jetzt an euch weiter. Ich geb zu das das eine harte Nuss ist da der Fehler sowohl bei LabVIEW als auch in meinem Microkontroller Programm liegen kann. Und beide habt ihr nicht vorliegen. Naja villeicht hat doch jemand eine Idee mit den folgenden Hinweisen:
Also wie gesagt ich wandle eine Integer Zahl in ein ASCII-Zeichen und schike es dann über RS232 zu meinem Controller. Das was dort ankommt gebe ich ohne umschweife auf einem Display aus. Ein speicheroszy besitze ich leider keines, kann mir also die Daten dazwischen nicht ansehen. Das Ergebniss: Ich stelle fest das einige Zaheln korrekt ankommen, andere nicht. Ich hab mal eine kleine ( nicht vollständige liste gemacht) Villeicht erkennt ja jemand einen Algorythmus der auf das Problem schliesen lässt. Danke und viel Spass beim Rätzeln!
Da in Deiner Liste 16 UND 24 die selbe Zahl zu erzeugen scheint muß hier ein Logikfehler in der Interpretation der Bits vorliegen. Wertest Du evtl. Start und Stoppbits mit aus?
Einige von uns sind aber auch C-Programmiertauglich. Vielleicht postest Du einfach mal Dein VI und den Empfangssourcecode Deines Controlers - dann kann Dir sicher geholfen werden. Oder Du Postest hier Dein VI und im http://www.cplusplus-forum.de den C-Code. Ich gehe jetuzt einfach mal davon aus, dass der Controller in C/C++/C# Programmiert wurde.
Gruß und programmiere in Zukunft einfach auch die Controller mit LabVIEW - dann klappts einfacher !
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Wenn es wirklich wiederholbar ist, dann tippe ich auf die Darstellung. Im Mikrocontrollerprogramm, musst du die empfangenen Zeichen mit printf() ausgeben (wenn du in C programmierst) aber vorher auf BYTE casten. Ich will wirklich, wie Mr.T. schon gesagt hat deine Empfangs- und Sende-routinen in LV als auch in C anschauen.
Der Denkfehler steckt wie immer in der Vorstellung (Binär <-> ASCII).