Mein selbst erfundenes UART Protokoll (Ping Pong Spiel, ähnlich deinem) wollte anfangs nicht laufen. Da kamm nur Datenmüll raus. Im Nachhinein hatte ich einen Fehler in meiner Routine die den ADC-Wert verrechnet. Also wartet jetzt die Fernbedienung (BT Master) auf einem Empfang vom BT Slave. Danach startet kontinuierlich die Übertragung. Beginnend mit 2 Byte um den Anfang der Sequenz zu dedektieren. gefolgt von 4 x 2 Byte für die ADC (4 Kanäle a 11bit), da wäre noch platz um das ein oder Andere Bit mit unterzuschieben. Danach kommen noch 2 Byte von der Tastatur-Matrix. Zum Schluß kommen nochmal 2 Byte mit der Quersumme, damit prüft der BT-Slave die richtigkeit der Daten und gibt diese im Programm frei. Mit den Status-Ausgängen am BT-Modul dedektiere ich die aufgebaute BT-Verbindung.
Ich muß jetzt nur noch im Empfänger feststellen das die Daten nicht schon veraltet sind. Wenn die Verbindung gestört wird, dauert es eine Weile ehe mir das BT-Modul das per Hardwarepin meldet. Da werde ich einfach schauen ob aller paar Millisekunden die Empfangs-ISR aufgerufen wird.
Gesendet wird immer bei leeren Sende-Register mittels ISR. Da die Tastatur nur alle 90ms fertig ausgelesen ist, sollten mir ca. 10 Übertragungen pro Sekunde reichen.
(14 Byte = 112 Bit | + 14 Stopbits = 126 bit | 11 Übertragungen * 126 bit = 1386 baud) Stimmt das so?
Eingestellt habe ich 57600 baud.
Zum Thema "Der Sender prüft die zurückgesendeten Daten vom Empfänger":
Das hatte ich in meiner "Ping Pong UART Übertragung" mal getestet. Festgestellt habe ich das ich nie eine Fehlübertragung hatte, solange Sender und Empfänger eingeschwungen sind. Deswegen sendet bei mir immer der Empfänger ein O.K. und erst dann beginnt der Sender mit der Übertragung.
Ich werd wohl nochmal prüfen ob wirklich die geänderten Daten so schnell der UART-ISR bereit stehen.
vielen Dank für deinen Code.
Lesezeichen