bascom zahlen senden/empfangen

Gast #1396552
Lesenswert?

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:
1
   
2
Dim I as Byte
3
...
4
If Usr.rxc = 1 Then 
5
   I = Udr
6
   Select Case I
7
      Case I
8
      Locate 1 , 1 : Lcd I
9
   End Select
10
...
Persönliche Seite #1396565
Lesenswert?

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?
#1396595
Lesenswert?

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...
Gast #1396604
Lesenswert?

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
Private Sub VScroll1_Change()
2
   Text1 = VScroll1.Value
3
   CommX1.SEND VScroll1.Value
4
End Sub

vorher stelle ich noch die serielle schnittstelle ein und mehr nicht...
Gast #1396610
Lesenswert?

>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?
#1396611
Lesenswert?

>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
#1396613
Lesenswert?

Gast-0815 schrieb:

> wenn ich daten sende, dann sieht das so aus:
>
1
Private Sub VScroll1_Change()
2
>    Text1 = VScroll1.Value
3
>    CommX1.SEND VScroll1.Value
4
> End Sub

dann würd ich einfach mal VScroll1.Value in eine Zahl umwandeln...kA wie 
das in Basic geht, ich programmier nur C...
Gast #1396621
Lesenswert?

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.
Gast #1396623
Lesenswert?

>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.
Gast #1396631
Lesenswert?

ich verwende die mcs communication libary und im code siehts so aus:
1
Private Sub Command1_Click()
2
  CommX1.BAUDRATE = 38400
3
  CommX1.COMPORT = 1
4
  CommX1.OPEN
5
End Sub

keine ahnung, wo ich noch was umstellen kann...
Gast #1396641
Lesenswert?

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
Gast #1396644
Lesenswert?

>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...
Gast #1396645
Lesenswert?

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.
Gast #1397137
Lesenswert?

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.
Gast #1397325
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren