(12.06.2014 09:41 )Steffen.S schrieb: So ganz verstehe ich die Dekodierung noch nicht. Du machst als erstes eine UND Verknüpfung, um das MSB zu löschen, richtig?
Dann Teilst du die Daten im Array auf, so dass je zwei Bytes in einer Spalte sind und insgesamt vier Zeilen entstehen.
Anschließend werden die Daten wieder so zusammengefügt, dass die Wertigkeit stimmt.
Es fehlt aber komplett die Erkennung des Datenbeginns oder seh ich das nur nicht?
Der Erkennen des Datenbegins fehlt tatsächlich. Statt dessen ist das Datenende markiert. Das ist prakischer, weill genau zu diesem Zeitpunkt mit der Auswertung der Daten begonnen werden kann.
Habe mal ein VI angehängt, wie ich mir das Lesen der Daten etwa vorstelle. Es ist aber noch nicht professionell, z.B. fehlt die Timout-Behandlung.
Es wird angenommen, dass der µC vorher eingeschalten ist. (Andernfalls wäre eine Timeout-Behandlung fällig, mit Meldung wie z.B: "µC einschalten, Du vergessliches A..loch").
Wenn dann das VI gestartet wird, dann hört der PC gewöhnlich mitten in ein Byte hinein und es kommt zum Rahmen-Synchronisationfehler. Der wird mit der ersten Schleife abgefangen.
Wenn das ausgestanden ist, dann hört der PC wahrscheinlich immer noch mitten in den Datensatz hinein, so dass dieser unvollstandg ist. Dieser erste Datensatzt sollte also weggeschmissen werden. Dazu dient die zweite Schleife.
Damit ist die Synchronisation hergestellt.
In der inneren rechten schleife wird jeweils ein Datensatz gelesen,und zwar byteweise. Wenn ein eintreffendes Byte >63 ist, so handest es sich um das letzte Byte des Datensatzes. Die Schleife wird verlassen und die Auswertung kann beginnen. (das ab jetzt nur noch störende Datenerkennung-Bit 5 wird gleich in diesser Schleife entfernt.)
Dekodierung:
Das Low-Byte wird geshiftet und linksbündig in die U8-Zahl gesetzt, d.h. der Inhalt wird um 2 bit nach links verschoben. Dann wird aus High- und low-Byte eine U16-Zahl gebildet. In dieser Zahl befindet sich der eigentliche 10-bit Inhalt zwischen den Bits 2 und 13. Diese 12 bits müssen jetzt noch rechtbündig platziert werden, d.h der Zahl ist um 2 bit nach rechts zu shiften.