Hallo,
Zitat Zitat von opc Beitrag anzeigen
vielen Dank für die ausführliche und gute Erkärung! Jetz habe ich auch ziemlich verstanden wie der U(S)ART funktioniert.
Ich verwende dann wohl UART also asynchron ohne extra Taktleitung mit diesen Stop-Bits.
Richtig!
Das U steht für universal, weil das Ding eben mehrere Modis kann.
Es gibt auch UARTs, die können dann kein synchron.

Zitat Zitat von opc Beitrag anzeigen
In welche Richtung sollte ich nun versuchen am Code etwas zu ändern? Wenn ich das richtig verstehe muss eine Zeit lang gewartet werden, bis das erste Byte übertragen ist bevor ich das zweite senden kann oder?
Also sollte beim Empfänger sichergestellt sein, dass das erste Byte komplett eingegangen ist bevor das zweit angesetzt wird... puh
Zuerst einmal hast du ein Problem mit deinem Übertragungsprotokoll! Wenn du den Datenstrom loggst siehst du folgendes:
.... Byte, Byte, Byte, Byte, Byte ....
Tja, nun weiss aber keiner, und dein µC erst recht nicht, welche zwei Bytes zusammen gehören!
Ein weiteres Problem ist noch, dass auch mal ein Byte verloren gehen kann oder gestört ist, dann wird eine andere ISR aufgerufen, welche die ganzen Fehler behandelt.

Man braucht also etwas in der Form:
.... Byte, sync, Byte, Byte, sync, Byte, Byte ....
Dann weiss man, dass immer die zwei Bytes nach sync ein Paar bilden.
Und wenn eine Byte verloren geht erkennt man das auch, dann fehlt entweder das sync oder nach sync kommt nur ein Byte.

Jetzt kommt das nächste Problem:
Du willst binäre Daten übertragen, die Datenwerte können also zwischen 0x00 und 0xFF liegen, das geht so nicht, weil du kein eindeutiges Zeichen für sync verwenden kannst.
Das einfachste ist, die Daten als Hex-Werte zu übertragen, dazu gibt es auch eine Menge Funktionen in C, um diese umzuwandeln. Dann hast du nur die Werte '0' ... '9', 'A' ... 'F' belegt kannst aber, theoretisch alle anderen als sync verwenden.
Der Nachteil bei ASCII-Hex ist halt, dass du doppelt so viele Zeichen senden musst, wie binär.
Bei ASCII-Hex bietet es sich dann aber an, CR oder LF als Sync-Zeichen zu verwenden, diese werden bei Text als Zeilenabschluss verwendet. Ein weiterer Vorteil ist, dass du zum Testen ein Terminal anschliessen kannst (PC mit Terminal-Emulation) und alles im Klartext lesen kannst.

MfG Peter(TOO)