Easyelectronics.ru

Электроника для всех
Текущее время: 20 сен 2018, 12:18

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 15:07 
Заглядывает иногда

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

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 15:15 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4808
A^N^N=A
))
Два раза XOR и будет исходное число.

Теперь по сути.
Сделайте табличку из 128 элементов и поместите в нее 128 правильных преобразований "из-в"
В программе, будете декодирование делать как: x=tbl[y];


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 15:26 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4808
Если у вас lpt, то нет никакой нужды делать какое-то кодирование. Если делать на "рассыпухе", то подключаете к LPT 1-много регистров типа 74HC374 - данные к данным, строб к стробу. Работать в режиме LPT-EPP. Схожим образом можно сделать и чтение.
Если это MCU, то к данным подключается один порт MCU, а строб заводится на другой порт и на него вешается ext. interrupt. Далее, обычный байтовый обмен между LPT и MCU.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 15:41 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
geodx, ну, что "исключающее или" само себе обратное - вам уже сказали. А вот насчёт того, чтобы обратное преобразование выполнить как "сперва обратное исключающее ИЛИ, потом сдвиг на позицию вправо" - это ерунда. Запишите формулу y = x^(x>>1) и попробуйте из неё выразить x - сами поймёте. Обратное преобразование - или медленное (побитовая обработка от старшего бита к младшему), или требует таблички.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 15:45 
Заглядывает иногда

Зарегистрирован: 23 апр 2015, 13:58
Сообщения: 38
А как медленное преобразование делается?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:00 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
geodx, а как в википедии написано :-).
(там с примером кода даже)


Последний раз редактировалось aamonster 18 июн 2018, 16:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:00 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1640
geodx писал(а):
А как медленное преобразование делается?
так
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:02 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4808
https://rsdn.org/article/alg/gray.xml


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:31 
Старожил

Зарегистрирован: 15 янв 2018, 18:52
Сообщения: 668
я не врубился. изначальная задача - передать на мк значение для шим? ради этого еботня с каким-то левым протоколом на 7ми проводах? 0_0
возьмите любой простенький протокол. типа DCON. сделайте проверку CRC. и передавайте по 1му/2м проводам. если взять чет типа 1wire вообще


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:43 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
Кстати да. Код Грея - ни разу не помехозащищённое кодирование, он лишь гарантирует, что "соседние" числа отличаются лишь одним битом - но не наоборот, изменение одного бита может сильно изменить число.

Если надо помехозащищённое - или Рида-Соломона (если надо восстанавливать одиночную ошибку), или какую-нибудь контрольную сумму, если достаточно игнорировать неправильные посылки (или перезапрашивать их).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 16:57 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4808
Забыли господина Хемминга, ну что же вы. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 17:04 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 3593
Откуда: Кемеровская область, Киселевск
Передаете 3 раза число. Следующее на 1 больше. И будет стойкость к помехам. При любой помехе восстанавливается число.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 18 июн 2018, 17:33 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1640
В дальние доэзернет времена мы практиковали передачи данных между компами по быстрому порту принтера (ещё не ЕРР/ЕСР) на расстояния до 15 метров... 80 килобайт/сек (640 килобит, что было значительно быстрее COM-портов)
кабель самодельный из проводков МГТФ, засунутый в экран и кембрик. Экран припаян на корпус штекера с двух сторон... при отсутствии розеток с заземлением (были у нас в НИИ - их позже почему то назвали евророзетками) через экран при втыкании могло шибануть разностью потенциалов.
Работало и в Нортон Командире и в играх на двоих
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 23 июн 2018, 15:43 
Старожил

Зарегистрирован: 02 июл 2010, 23:41
Сообщения: 402
Насколько знаю, компьютер, точнее, его ОС (виндоус) плохо подходят для оперативного управления.
Думаю, нормальное решение этой задачи – сделать связь между компьютером и микроконтроллером через СОМ-порт. В этом случае можно сделать и опторазвязку, и контролировать состояние «штуковины», можно использовать распространённый USB с помощью адаптера и т.д.
Для связи компа с МК использовать программы с гарантированной доставкой пакетов.
Для связи понадобятся всего 2 провода.
Думаю, это проще, а возможностей больше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 23 июн 2018, 16:07 
Старожил

Зарегистрирован: 02 май 2015, 16:16
Сообщения: 1640
Alexandr_1 писал(а):
Насколько знаю, компьютер, точнее, его ОС (виндоус) плохо подходят для оперативного управления.
Думаю...
почему многие на веру принимают чужие глупые суждения ?
Про Винду, про Ардуину, про Куб ?
Оглянись вокруг... узри суть реальности:
Принтер из под нереальной Винды печатает ?
Домашний ЧПУ/лазерный гравировщик на стареньком AVR в Ардуине управляется с компа из ОС реального времени QNX/RTX или из под нереальной Винды ?
Системы управления производством СКАДА типа WinCC работают в нереальной Винде - оператор нажимает экранную кнопку... дальше уже всё идёт согласно программе.
Программные Программируемые Логические Контролллеры типа WinAC RTX или S7-1507S работают в ОС реального времени на выделенном Ядре многоядерного процессора и взаимодействуют со СКАДой в нереальной Винде, крутящейся на остальных ядрах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 23 июн 2018, 17:44 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3515
Alexandr_1 писал(а):
нормальное решение этой задачи – сделать связь между компьютером и микроконтроллером через СОМ-порт. В этом случае можно сделать и опторазвязку, и контролировать состояние «штуковины», можно использовать распространённый USB с помощью адаптера и т.д.
Поддерживаю это мнение абсолютно.
Сам очень давно так делаю; приемопередача по COM, с опторазвязкой. Причем в качестве оптронов наладил использовать связку H11L1 + HCPL3120.
С помехами проблем еще ни разу не было.

Стандартные библиотечные функции для приемопередачи - есть, думаю, на любой МК.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 01 июл 2018, 15:41 
Старожил

Зарегистрирован: 02 июл 2010, 23:41
Сообщения: 402
petrplc писал(а):
почему многие на веру принимают чужие глупые суждения ?
Про Винду, про Ардуину, про Куб ?
Оглянись вокруг... узри суть реальности:
Принтер из под нереальной Винды печатает ?
Домашний ЧПУ/лазерный гравировщик на стареньком AVR в Ардуине управляется с компа из ОС реального времени QNX/RTX или из под нереальной Винды ?
Системы управления производством СКАДА типа WinCC работают в нереальной Винде - оператор нажимает экранную кнопку... дальше уже всё идёт согласно программе.
Программные Программируемые Логические Контролллеры типа WinAC RTX или S7-1507S работают в ОС реального времени на выделенном Ядре многоядерного процессора и взаимодействуют со СКАДой в нереальной Винде, крутящейся на остальных ядрах.


Пересмотрел свой пост, сочетания «нереальная Винда» в нём не нашёл.
У меня было «для оперативного управления Винда плохо подходит», написал так по следующим соображениям.
1 Оперативное управление (от слова «оперативно» - быстро) подразумевает быструю реакцию на события.
А как быстро отреагирует Винда? При связи по USB через виртуальный СОМ-порт, наверно, 10-20 мсек. Это никак не оперативно, к тому же, скорее всего, это время вроде как ещё и не регламентировано. Как проектировать какую-нибудь быструю следящую систему, когда не знаешь, через какое время Винда выработает управляющий сигнал.
2 Сейчас у компьютера нет большого количества выводов для управления, LPT-порт – это из далёкого прошлого.
3 Винда может в неподходящий момент зависнуть, что для некоторых систем неприемлемо.
Вот такую «суть реальности» я «узрел», в связи с чем для оперативного управления использую МК.
Ваши примеры: принтер, управление производством не требуют скорости. Запускаю на принтер печать – иногда приходится ждать далеко не одну секунду – это не оперативное управление.
Винда зависла при управлении домашним ЧПУ – да и бог с ним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 02 июл 2018, 14:19 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 758
У виндоуса проблема в нестабильности. Тот же прием байт по rs232 в пользовательской программе может плавать +-30мс. Линуксы работают горазда стабильнее.

Насколько я понимаю, 3д принтеры и станки ЧПУ, буферируют gcode на своей стороне. Это позволяет немного развязаться и не зависеть от реалтаймовости.

[OFF]ПС. Было довольно обидно, когда винда начала обновляться на третьем часу шестичасовой работы 3д принтера. После этого окончательно свалил на убунту. А потом и вовсе перестал запускать трансляцию gcode с компа. Только с sd карты...[/OFF]

[OFF]На большинстве материнок LPT все еще есть. На корпус его, правда, не выносят.[/OFF]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 02 июл 2018, 17:21 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3739
Откуда: г. Липецк
Mirmik писал(а):
У виндоуса проблема в нестабильности...

Это не совсем так, кроме настольных существует Windows CE.
В промышленности применяют в основном эту версию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Код Грея. Обратное преобразование.
СообщениеДобавлено: 02 июл 2018, 23:07 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3515
Mirmik писал(а):
ПС. Было довольно обидно, когда винда начала обновляться на третьем часу шестичасовой работы 3д принтера. После этого окончательно свалил на убунту.
Гмм. Каждый конечно решает сам - куда свалить. Я избрал иной вариант: запретил Винде обновляться. (Всем установленным программам - тоже.)
И Убунтовать у меня нету причины)))))))))))))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 5 часов


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB