Forum: Mikrocontroller und Digitale Elektronik bascom zahlen senden/empfangen


von Gast-0815 (Gast)


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
...

von Otto (Gast)


Lesenswert?

Umrechnen.....

Otto

von Stefan B. (stefan) Benutzerseite


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?

von Gast-0815 (Gast)


Lesenswert?

kann nicht genau sagen, was ich sende, da ich das bei dem 
terminalprogramm nicht weiß.

ich kann aber auch buchstaben senden...


@ otto
wie ?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Dann nimm doch ein Terminalprogramm bei dem du das weisst! Es gibt doch 
so viele gute... 
http://www.mikrocontroller.net/articles/RS-232#Terminalprogramme

von Gast-0815 (Gast)


Lesenswert?

mein terminalprogramm ist aber in vb6 geschrieben und das würde ich 
gerne weiter verwenden, da es später noch erweitert wird...

von Justus S. (jussa)


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...

von Gast-0815 (Gast)


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...

von STK500-Besitzer (Gast)


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?

von Helmut L. (helmi1)


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

von Justus S. (jussa)


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...

von Gast-0815 (Gast)


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.

von STK500-Besitzer (Gast)


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.

von Gast-0815 (Gast)


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...

von Axel K. (axel)


Lesenswert?

Zeichen wandelst u in Bascom mit val() um.

Also eine Variable deklarieren als byte.

z.b.

Dim dezimal as byte

dezimal = val(string)

von Gast-0815 (Gast)


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

von Tom (Gast)


Lesenswert?

wie wärs mit chr(I) ?

http://avrhelp.mcselec.com/index.html
suche nach chr, da ist ein Beispiel

von STK500-Besitzer (Gast)


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...

von MWS (Gast)


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.

von STK500-Besitzer (Gast)


Lesenswert?

>CommX1.SEND Chr(VScroll1.Value)

Das wäre auch ne Lösung...

von Gast-0815 (Gast)


Lesenswert?

DAS IST DIE LÖSUNG...


!!! D A N K E !!!

von Gast-0815 (Gast)


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.

von STK500-Besitzer (Gast)


Lesenswert?

Das Mischen von "realen" Zahlen und ASCII-Zeichen solltest du vermeiden.
Entscheide dich für ein Datenformat.

von MWS (Gast)


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.

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
Noch kein Account? Hier anmelden.