bascom zahlen senden/empfangen

Gast #1396552
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
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...
Gast
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
>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
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
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
>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
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
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
>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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.