Цитата(LeDima @ May 14 2015, 16:54)
Есть 1 передатчик 1 приемник нужно передавать 2 16-битных числа(значащих 12бит) т.е. 4 байта.
Как наиболее оптимально с вашей точки зрения организовать передачу так что бы данные корректно воспринимались приемником при периодически пропадающей связи?
Мой излюбленный метод - использовать старшие биты для маркировки начала посылки. Т.е. формирую посылку такого типа:
Код
1-ый байт:
1 - 0 - 0 - 0 - 0 - 0 - D15 - D14
2-ый байт:
0 - D13 - D12 - D11 - D10 - D9 - D8 - D7
3-ый байт:
0 - D6 - D5 - D4 - D3 - D2 - D1 - D0
При этом стартовый байт легко отличим по старшей единичке, а срыв синхронизации легко определяется, если эта единичка встретилась во 2-ом или 3-ем байте (в последнем случае байт единичкой считается началом новой посылки).
Правда, у меня таких байт больше трех, т.к. АЦП у меня 24-разрядный, но суть та же самая.
Есть и альтернативный вариант (более простой для МК, т.к. не требует сдвига) - выносить старшие биты числа в 1-ый байт. Выглядит это так:
Код
1-ый байт:
1 - 0 - 0 - 0 - 0 - 0 - D15 - D7
2-ый байт:
0 - D14 - D13 - D12 - D11 - D10 - D9 - D8
3-ый байт:
0 - D6 - D5 - D4 - D3 - D2 - D1 - D0
Дешифровка только кажется сложной, тогда как на самом деле все биты, за исключением D15 и D7, уже стоят на своих местах, а D15 и D7 нужно только к ним добавить.