Easyelectronics.ru

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

Часовой пояс: 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
Сообщения: 5125
A^N^N=A
))
Два раза XOR и будет исходное число.

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


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

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


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

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2527
Откуда: Санкт-Петербург
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
Сообщения: 2527
Откуда: Санкт-Петербург
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
Сообщения: 5125
https://rsdn.org/article/alg/gray.xml


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

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


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

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

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


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

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


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

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 3746
Откуда: Кемеровская область, Киселевск
Передаете 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
Сообщения: 409
Насколько знаю, компьютер, точнее, его ОС (виндоус) плохо подходят для оперативного управления.
Думаю, нормальное решение этой задачи – сделать связь между компьютером и микроконтроллером через СОМ-порт. В этом случае можно сделать и опторазвязку, и контролировать состояние «штуковины», можно использовать распространённый 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
Сообщения: 3947
Alexandr_1 писал(а):
нормальное решение этой задачи – сделать связь между компьютером и микроконтроллером через СОМ-порт. В этом случае можно сделать и опторазвязку, и контролировать состояние «штуковины», можно использовать распространённый USB с помощью адаптера и т.д.
Поддерживаю это мнение абсолютно.
Сам очень давно так делаю; приемопередача по COM, с опторазвязкой. Причем в качестве оптронов наладил использовать связку H11L1 + HCPL3120.
С помехами проблем еще ни разу не было.

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


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

Зарегистрирован: 02 июл 2010, 23:41
Сообщения: 409
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
Сообщения: 791
У виндоуса проблема в нестабильности. Тот же прием байт по rs232 в пользовательской программе может плавать +-30мс. Линуксы работают горазда стабильнее.

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

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

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


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

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

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


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

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


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

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


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

Сейчас этот форум просматривают: Eddy_Em, VladislavS


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

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

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