mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bascom zahlen senden/empfangen


Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
   
Dim I as Byte
...
If Usr.rxc = 1 Then 
   I = Udr
   Select Case I
      Case I
      Locate 1 , 1 : Lcd I
   End Select
...

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Umrechnen.....

Otto

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast-0815 (Gast)
Datum:

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

ich kann aber auch buchstaben senden...


@ otto
wie ?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Gast-0815 (Gast)
Datum:

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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
Private Sub VScroll1_Change()
   Text1 = VScroll1.Value
   CommX1.SEND VScroll1.Value
End Sub

vorher stelle ich noch die serielle schnittstelle ein und mehr nicht...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast-0815 schrieb:

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

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

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verwende die mcs communication libary und im code siehts so aus:
Private Sub Command1_Click()
  CommX1.BAUDRATE = 38400
  CommX1.COMPORT = 1
  CommX1.OPEN
End Sub

keine ahnung, wo ich noch was umstellen kann...

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeichen wandelst u in Bascom mit val() um.

Also eine Variable deklarieren als byte.

z.b.

Dim dezimal as byte

dezimal = val(string)

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wärs mit chr(I) ?

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>CommX1.SEND Chr(VScroll1.Value)

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

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS IST DIE LÖSUNG...


!!! D A N K E !!!

Autor: Gast-0815 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.