PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASCII in Byte umwandeln ( Servo über RS232)



mechatron
25.06.2007, 20:13
Hallo,
vieleicht kann mir jemand helfen.
Hab mir eine Platine gebaut an der ich Servos anschließen kann.
Auf dieser ist ein Atmega zur Steuerung. Jetzt will ich mit dem PC über
RS232 Daten an den Atmega senden. Das geht auch soweit ganz gut. Leider
sind das aber ASCII zeichen. SO versteh ich das. Wenn ich z.B den Wert
"50" per Hyperterminal sende kommen die Zahlen "13,10,53,48" an.
Ich brauche aber die Zahl 50. Das ganze hab ich in Bascom geschrieben.
Der Servo braucht ja den wert als Byte. Hoffe jemand kann mir da
weiterhelfen. Leider kenn ich mich nicht so gut aus.

Danke
Matthias

eugengraf
25.06.2007, 20:17
Nimm dir z.B. einen HEX-Converter, schreibe dort die Zahlen als HEX rein, bekommst den Chinesischen ähnlichen Zeichen raus. Diese Zeichen musst du über einen Terminal dann abschicken.

Normalerweise macht man eine kleine Bedienoberfläche dazu. Mit einem normalen Terminal ist es richtige Quellerei.

Eugen

P.S. übrigens die Zahl "50" sollte eigentlich laut ASCII-Tabelle 0x35 0x30 sein.

JanB
25.06.2007, 21:01
Hallo,
ich denke du hast die Zahlen verkehrt herum aufgeschrieben.
Es müsste eigentlich 53, 48, 10, 13 sein.

Die beiden letzten Zahlen (10,13) kannst du einfach weglassen bzw. ignorieren.
Das ist nur die Ascii-Sequenz für CR-LF = Return.
Für die Umwandlung in ein Byte brauchst die die 53 und die 48.
die 53 steht für die "5" und die 48 für die "0".

Angenommen du hast die beiden Zahlen in zwei Variablen:
A = 53
B = 48

Die Umwandlung geht dann in Bascom ganz einfach:
A = A - 48
A = A * 10
B = B - 48
C = A + B

fertig, das Byte steht jetzt in C

Gruß Jan

eugengraf
25.06.2007, 21:06
Das mit Carrage Return und Line Feed sollte stimmen, aber das andere verstehe ich irgendwie nicht. Die Dezimalzahlen von 0 bis 9 entsprechen soweit ich weiss 30 bis 39.

Oder?

mechatron
25.06.2007, 21:06
und wie bekomm ich die zahlen in die einzellnen variablen?

eugengraf
25.06.2007, 21:11
Wenn du Interesse an LabVIEW hast, gibt es eine freie Version davon, wir zusammen kriegen das in einer halben Stunde fertig.
Ansonsten irgendeine Programmiersprache lernen.

Übrigens hier ist eine ASCII Tabelle und da sind die ASCII Zeichen von 0 bis 9 gleich den HEX-Zahlen von 30 bis 39.

http://www.torsten-horn.de/techdocs/ascii.htm

Eugen

JanB
25.06.2007, 21:11
Hallo,
@eugengraf:
Die Zahlen 0-9 sind den ASCII Codes 48 bis 57 dezimal zugeordnet.
Das sind die Hex-Zahlen 30 - 39.

@mechatron:
>>und wie bekomm ich die zahlen in die einzellnen variablen?
Sorry, das muss dir jemand anderes erklären...
>>Das ganze hab ich in Bascom geschrieben.
Was hast du denn in Bascom geschrieben ?
Kannst du den Code mal hier posten ?

Gruß Jan

eugengraf
25.06.2007, 21:14
Hallo,
@eugengraf:
Die Zahlen 0-9 sind den ASCII Codes 48 bis 57 dezimal zugeordnet.
Das sind die Hex-Zahlen 30 - 39.

@mechatron:
>>und wie bekomm ich die zahlen in die einzellnen variablen?
Sorry, das muss dir jemand anderes erklären...

Gruß Jan

Zu 1) Stimmt allerdings.

2) Ja und die Zahlen in Variablen bekommt man durch die Zuweisung.

Eugen

mechatron
25.06.2007, 21:16
sorry wenn ich so dumm frage aber wie sieht das in basecom aus?

eugengraf
25.06.2007, 21:19
Ich denke es heisst Bascom und nicht Basecom.

Ich kenne mich mit Bascom zwar nicht sehr gut aus, aber ich glaube es ist für uC-Programmierung und nicht für PC-Programmierung geschaffen.

Eugen

mechatron
25.06.2007, 21:33
ich will ja das bei einem uC machen. Wenn ich vom Pc 50 sende,
dann kommen vier werte vom uC zurück. Die vier Werte muss ich jetzt in vier eigene Variablen abspeicher ( im uC) damit ich diese umrechnen und auswerten kann.

eugengraf
25.06.2007, 21:36
Ok, ich denke andersrum geht es auch.
Dann musst du mit "sscanf" arbeiten (so heisst es in C).

Eugen