Hallo,
ich sitz gerade vor einem sehr merkwürdigen Problem.
Ich verwende einen Arduino um eine Serielle Kommunikation zwischen einem
anderen Mikrokontroller und meinem PC herzustellen. Da mein anderer
Mikrokontroller ein 16Bit Datenwort über einen 8Bit UART sendet, muss
ich mit meinem Mikrokontroller gewährleisten, dass das Wort in ein High
und Low Byte umgewandelt wird. Beide Wörter werden dann nacheinander
über UART an den Arduino geschickt.
Das funktioniert alles soweit. Am Arduino kommen die richtigen Daten an.
Mein Arduino muss nun diese beiden Wörter wieder aneinanderreihen, aber
irgendwie funktioniert das nicht so wie es sein sollte.
Mit folgendem Beispielcode bekomme ich auf dem Seriellen Monitor diese
Ausgabe:
Der Befehl
1 | val = ( high << 8) | low;
|
setzt mir meine 8Bit Wörter wieder zusammen, aber statt
bekomme ich:
1 | 0xaa00 + 0xbb = 0xffffaabb
|
Ich hab auch schon versucht mit einer Bitmaske die vorderen 16Byte
abzuschneiden
aber auch das führt immer auf das selbe Ergebnis. Woran liegt das? Habe
ich eine Chance, das zu umgehen?
Ich hoffe ihr könnt mir helfen.
Grüße
Matthias
Code:
1 | void setup()
|
2 | {
|
3 | // Open serial communications and wait for port to open:
|
4 | Serial.begin(57600);
|
5 | while (!Serial) {
|
6 | ; // wait for serial port to connect. Needed for Leonardo only
|
7 | }
|
8 |
|
9 | Serial.println("Kommunikation initalisieren...\n");
|
10 | }
|
11 |
|
12 | void loop()
|
13 | {
|
14 | int val, high, low;
|
15 |
|
16 | high = 0xaa;
|
17 | low = 0xbb;
|
18 |
|
19 | val = ( high << 8) | low;
|
20 |
|
21 | Serial.print(val, HEX);
|
22 | Serial.print("\n");
|
23 | }
|