Код Грея. Обратное преобразование.

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
geodx
Сообщения: 54

Сообщение geodx » 18 июн 2018, 13:20

Всем привет!
Хочу управлять мощностью штуковины с компьютера с lpt-порта.
Подаю числа от 0 до 127. Преобразую числа в код Грея выражением из Википедии: y = x^(x>>1), сперва сдвиг на позицию влево, потом исключающее ИЛИ с тем, что получилось.

Подаю код Грея по семи проводам.

На обратной стороне микроконтроллер должен сделать обратное преобразование у → x, чтобы задать ширину ШИМа.

То бишь сперва обратное исключающее ИЛИ, потом сдвиг на позицию вправо.

Это возможно сделать? Есть операция "обратное исключающее ИЛИ"?

Может существуют более эффективные помехозащищенные коды с возможностью обратного преобразования? PS. Я в математике полный ноль...

Аватара пользователя
iEugene0x7CA
Адепт
Сообщения: 1570
Откуда: Киев

Сообщение iEugene0x7CA » 18 июн 2018, 14:21

Эм, кодом Грэя ни разу не пользовался – могу разве что кинуть нагугленный кусок кода конверсии: https://in.answers.yahoo.com/question/i ... 814AA8bpcE

Есть личный опыт юзания одностороннего асинхронного UART в условиях дикой загрязненности канала помехами. :geek:
Это был самодельный ИК-пульт, который должен был пробивать пакеты команд сквозь фигачащую над головой лампу накаливания или звезду Солнце из окна.
Работало так — передатчик слал 8 байт на скорости 1200 бод, байты были идентичны и содержали число команды в бинаре.
На принимающей стороне МК просто считал пришедшее подряд количество байт и после сравнивал каждый байт друг с другом — убеждался что они бит в бит одинаковы.
В итоге, с этого пульта года 4 управлял плеером на компе и ни разу не замечал ложных срабатываний. ;)

Но штука на самом деле была относительно сложная — приходилось подвязывать таймер дабы детектить что пачка байтов закончилась. При проводном соединении можно все это опустить, в случае UART просто слать через коаксиал на низком бодрейте, с битом чётности, и пару штук байтов подряд для првоерки. Или в начале статическое сообщение, а в последнем байте число.

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей