ich sende von meinem terminalprogramm ein paar zahlen und buchstaben.
am avr empfange ich die daten auch.
nur empfange ich dort immer nur die ascii zeichen.
z.b.
wenn ich eine 1 sende, dann empfange ich am avr eine 49
bei einer 2 ein 50
und bei 29 empfange ich auch 50
ich möchte aber die zahlen empfangen, die ich sende!
wie kann ich das ändern?
empfange tue ich so:
Bist du sicher, dass du Zahlen und keine Ascii-Zeichen versendest?
Was hindert dich daran, von den empfangenen Ascii-Zeichen das Störende
abzuziehen? 49 - 48 = 1 und 50 - 48 = 2.
Nach dem Senden der "29" empfängst du 50, also die "2" in Ascii. Schon
mal nachgesehen, was nach der 50 kommt? Kommt dann vielleicht eine 57?
Wie ist das erklärbar?
Gast-0815 schrieb:
> kann nicht genau sagen, was ich sende, da ich das bei dem> terminalprogramm nicht weiß.>> ich kann aber auch buchstaben senden...>>> @ otto> wie ?
wie es in Stefans Posting steht...wobei du natürlich bei mehrstelligen
Ziffern aufpassen musst, da du da natürlich mehrere ASCII-Zeichen
einlesen musst..
Alternativ ganz dreckig: einfach das ASCII-Zeichen heraussuchen, dass
der Zahl entspricht, die du senden willst, also z.B. bei 107 ein k
etc...
Gast-0815 schrieb:
> mein terminalprogramm ist aber in vb6 geschrieben und das würde ich> gerne weiter verwenden, da es später noch erweitert wird...
dann schreib das Programm doch einfach um, dass es wirklich die
eingegebenen Zahlen rausschickt...
ich möchte aber keine buchstaben senden, nur zahlen von 0 bis 100
das vb terminalprogramm ist selber nicht von mir, weiß leider auch dort
nicht, wie ich das ändern kann.
wenn ich daten sende, dann sieht das so aus:
1
PrivateSubVScroll1_Change()
2
Text1=VScroll1.Value
3
CommX1.SENDVScroll1.Value
4
EndSub
vorher stelle ich noch die serielle schnittstelle ein und mehr nicht...
>vorher stelle ich noch die serielle schnittstelle ein und mehr nicht...
Die serielle Schnittstelle kann man auf Text-Übertragung oder
Binär-Übertragung einstellen. In deinem Fall dürfte es sich um die erste
Einstellung handeln.
In welchem Bereich kannst du den Scrollbar denn einstellen?
>kann nicht genau sagen, was ich sende, da ich das bei dem>terminalprogramm nicht weiß.
Das wird wohl in 99,99% der Faelle Ascii Zeichen senden.
Du must zuerst deine ganzen Zeichen in einem String sammeln bis das
Terminierungszeichen kommt (in den Meisten Faellen wird die Eingabe mit
CR abgeschlossen). Dann hast du deine Ziffernfolge als ASCII String im
Speicher stehen. Danach must du diese Ziffernfolge noch in eine binaere
Representation der Zahl umwandeln und fertig.
Gruss Helmi
soviel ahnung habe ich von vb auch nicht, daher frage ich hier ja, damit
man das ändern kann...
mein scollbalken geht von 0 bis 100 und den jeweils eingestellten wert
will ich seriell an den avr senden.
>soviel ahnung habe ich von vb auch nicht, daher frage ich hier ja, damit>man das ändern kann...
Dann solltest du dir mal die Konfiguration der seriellen Schnittstelle
angucken.
>mein scollbalken geht von 0 bis 100 und den jeweils eingestellten wert>will ich seriell an den avr senden.
Das macht er ja auch. Nur im Text-Modus.
das kenne ich bereits...
jetzt ist mein problem ab, das ascii zeichen gesendet werden.
wie geschrieben, wenn ich ne 29 sende (oder jeden anderen wert > 9) dann
werden immer nur die ascii "zeichen" von 0 bis 9 gesendet
>Dim dezimal as byte>dezimal = val(string)
wenn dann noch chr(dezimal) schreibt, könnte auch der entsprechende Wert
an den Controller übertragen werden.
>keine ahnung, wo ich noch was umstellen kann...
das MSComm-Objekt hat noch ein paar Einstellmöglichkeiten mehr...
Ich halte es für möglich, daß das Textfeld den VScrollwert implizit in
einen darstellbaren Wert umwandelt, der Wert dagegen doch numerisch ist.
Probier' doch mal, ob Du
CommX1.SEND Chr(VScroll1.Value)
schreiben kannst, das würde bei einem Zahlenwert ein Zeichen draus
machen, der µC würd' dann dieses einzelne Zeichen empfangen, und das
hätte bereits die von Dir gewünschte Zahlenform.
PS: Chr() auf der Empfangsseite ist völlig sinnfrei.
habe da mal noch ne frage...
(schwer zu umschrieben)
wie kann ich dem gesendeten daten noch ein datenpaket anhängen
so hier:
CommX1.SEND Chr(VScroll1.Value) & "-" & "2"
der avr soll also den wert des scrollregler und das minus und die 2
empfangen
beispiel:
43-2
das soll der avr nicht ausrechnen, das trenne ich dann mit der mid
funktion wieder auf.
Da gäb's zwei Lösungen:
Eine Zeichenkette bauen, die den darauf folgenden Scrollwert eindeutig
identifiziert, und die in Deinem Terminaltext nicht vorkommen darf. Z.B.
"ScrollV="
Auf der Emfangsseite musst Du einen Puffer einrichten, damit Du die
Zeichenkette rausfischen kannst.
Du könntest auch den Wert 255 verwenden, um den Start des Scrollwertes
zu signalisieren und an anderer Stelle im Terminalprogramm dafür sorgen,
daß 255 sonst nicht gesendet werden kann.
Letzteres wäre m.E. der einfachere Weg.
Ich denke nicht, daß Mischen ein Problem ist, irgendwie muss der
Scrollwert immer gekennzeichnet werden, wenn er in der Gruppe mit
anderen Zeichen kommt.