gte 6 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 5 минут назад, Vladivolt сказал: Это так, но сенсор не видит ни бита соседнего кода, но должен декодировать. В большинстве случаев энкодер не попадает на один 16 битный участок, а перекрывает 2 соседних. При этом он должен четко определить положение или не определить, если предположение о кодировании неверное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба Можно придумать кодирование с более, чем 7 целыми битами (младшие назову дробными), если не использовать коды с длинными последовательностями нулей (если считать дыру единицей). То есть, добавив 8-й бит, получаем дыру отстоящую одинаково на 8 позиций от ближайших синхродыр. 7 нулей. Такой код не используем. За 127 сразу идёт 129, и дальше ещё столько же. Получаем длину ленты почти в 2 раза больше. Добавляя ещё бит и выбрасывая числа с 6 нулями получим почти в 4 раза более длинную ленту. Так, возможно, и на все 392 м наскребется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба О! Это же bit-stuffing в чистом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 2 hours ago, Plain said: Ещё немного подумал — 5 старших бит не могут быть все со сдвигом на полбита. Наиболее вероятно, что до 7 значащих бит (12 м) лента кодируется одним типом синхронизации (стробом и 8-ю нулями после него), а 392-метровая другим (двумя стробами с шагом 1,5 бита): Не, не нужен там никакой дополнительный сдвиг на 0.5 бита. Есть только 16ти разрядные числа закодированные 16ю отверстиями. 32 оптопары там только для того, чтобы нормально получать 16ти разрядное число когда линейка ровно на полбита сдвинута. Каждый код вместе с соседним при побитовом сдвиге выдаст 16 различных комбинаций, пока следующий код не встанет в целиком в энкодер. Это минус 4 бита, для кодирования сдвинутых кодов, остаётся как раз 12 значащих бит. для 8ми бит, имеем -3 бита на кодирование 8ми "сдвинутых" комбинаций для каждого кода и остаётся 5 бит для кодирования позиции. осталось только найти такую последовательность соседей у которой и побитовом сдвиге не повторяются комбинации. тупо перебором для 8ми бит получается последовательность из 32 кодов 1, 3, 5, 7, 9, 11, 13, 15, 17, 49, 81, 113, 145, 177, 209, 242, 82, 114, 178, 210, 243, 53, 55, 59, 61, 63, 85, 214, 215, 219, 221, 254, при её побитовом сдвиге через 8ми битное "окно" из оптопар, на них будет последовательность из 255 неповторяющихся значений: 1, 2, 4, 8, 16, 32, 64, 129, 3, 6, 12, 24, 48, 96, 193, 130, 5, 10, 20, 40, 80, 160, 65, 131, 7, 14, 28, 56, 112, 225, 194, 132, 9, 18, 36, 72, 144, 33, 66, 133, 11, 22, 44, 88, 176, 97, 195, 134, 13, 26, 52, 104, 208, 161, 67, 135, 15, 30, 60, 120, 241, 226, 196, 136, 17, 34, 68, 137, 19, 38, 76, 152, 49, 98, 197, 138, 21, 42, 84, 168, 81, 162, 69, 139, 23, 46, 92, 184, 113, 227, 198, 140, 25, 50, 100, 200, 145, 35, 70, 141, 27, 54, 108, 216, 177, 99, 199, 142, 29, 58, 116, 232, 209, 163, 71, 143, 31, 62, 124, 249, 242, 228, 201, 146, 37, 74, 148, 41, 82, 164, 73, 147, 39, 78, 156, 57, 114, 229, 202, 149, 43, 86, 172, 89, 178, 101, 203, 150, 45, 90, 180, 105, 210, 165, 75, 151, 47, 94, 188, 121, 243, 230, 204, 153, 51, 102, 205, 154, 53, 106, 212, 169, 83, 166, 77, 155, 55, 110, 220, 185, 115, 231, 206, 157, 59, 118, 236, 217, 179, 103, 207, 158, 61, 122, 244, 233, 211, 167, 79, 159, 63, 126, 253, 250, 245, 234, 213, 170, 85, 171, 87, 174, 93, 186, 117, 235, 214, 173, 91, 182, 109, 218, 181, 107, 215, 175, 95, 190, 125, 251, 246, 237, 219, 183, 111, 222, 189, 123, 247, 238, 221, 187, 119, 239, 223, 191, 127, 255, 254, 252, 248, 240, 224, 192, 128 то есть 16ти отверстий действительно достаточно для кодирования 6mm * 65536 = 96mm * 4096 = 392m Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_ 41 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 3 часа назад, gte сказал: Тип ленты и производитель секрет? https://www.kuebler.com/en/products/measurement/linear-measuring-systems/shaft-copying-systems Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 2 hours ago, _pv said: то есть 16ти отверстий действительно достаточно для кодирования 6mm * 65536 = 96mm * 4096 = 392m Точняк. Задачка была для студента информатики первого курса. Я правда не уверен что ваши коды правильные поскольку не совпадают с моими, а правильная кодовая последовательность вроде единственная. Это так называемые shift sequence коды. В интернетах источники в качестве изобретателя упоминают некоего исследователя с китайским именем. И да, формулы нет. Коды находятся рекурентным https://en.wikipedia.org/wiki/Backtracking методом . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 14 minutes ago, AlexandrY said: Я правда не уверен что ваши коды правильные поскольку не совпадают с моими, а правильная кодовая последовательность вроде единственная. Если она единственная, у меня для вас плохие новости, потому что тогда у энкодера который вы скопировать пытаетесь она тогда тоже неправильная, хотя и с моей последовательностью совпадает получше :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a123-flex 0 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 10 минут назад, _pv сказал: Если она единственная, у меня для вас плохие новости, потому что тогда у энкодера который вы скопировать пытаетесь она тогда тоже неправильная, хотя и с моей последовательностью совпадает получше :) Это походу спорт такой - с максимальным апломбом себя лицом бросить во всякое неприятное. В этом ТС однозначно чемпион)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gte 6 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 2 часа назад, _pv сказал: Если она единственная, у меня для вас плохие новости, потому что тогда у энкодера который вы скопировать пытаетесь она тогда тоже неправильная, хотя и с моей последовательностью совпадает получше :) А с моей совпадает до бита. Фото середины и другого конца ленты все прояснит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 2 hours ago, _pv said: Если она единственная, у меня для вас плохие новости, потому что тогда у энкодера который вы скопировать пытаетесь она тогда тоже неправильная, хотя и с моей последовательностью совпадает получше :) Я привел коды для 8-и битного окна. Думал вы тоже для 8-ми битного окна представили. Для 16-и битного и любого другого будет завтра в виде открытого проекта. 11 minutes ago, gte said: А с моей совпадает до бита. Фото середины и другого конца ленты все прояснит. У меня есть только 10 м ленты. Завтра смогу сделать фотографии другого ее конца. Этими дивайсами сейчас модно апгрэйдить лифты, поскольку они заменяют кучу конечников. Так что теперь все будут знать как на ардуине сделать, то что предлагают за полтыщи евро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gte 6 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 2 часа назад, AlexandrY сказал: У меня есть только 10 м ленты. Завтра смогу сделать фотографии другого ее конца. И, если возможно, фото середины. 2 часа назад, AlexandrY сказал: Этими дивайсами сейчас модно апгрэйдить лифты, поскольку они заменяют кучу конечников. Так что теперь все будут знать как на ардуине сделать, то что предлагают за полтыщи евро. Сколько стоит считыватель и сколько лента и как "ардуина" заменит ленту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 8 часов назад, _pv сказал: тупо перебором для 8ми бит получается Кажется я прозрел! Перебора никакого не надо! Комбинация дырок в ленте это банальный LFSR-counter. Для 8 бит, можете проверить, есть еще и такой вариант 1 , 2 , 4 , 8 , 17 , 35 , 71 , 142 , 28 , 56 , 113 , 226 , 196 , 137 , 18 , 37 , 75 , 151 , 46 , 92 , 184 , 112 , 224 , 192 , 129 , 3 , 6 , 12 , 25 , 50 , 100 , 201 , 146 , 36 , 73 , 147 , 38 , 77 , 155 , 55 , 110 , 220 , 185 , 114 , 228 , 200 , 144 , 32 , 65 , 130 , 5 , 10 , 21 , 43 , 86 , 173 , 91 , 182 , 109 , 218 , 181 , 107 , 214 , 172 , 89 , 178 , 101 , 203 , 150 , 44 , 88 , 176 , 97 , 195 , 135 , 15 , 31 , 62 , 125 , 251 , 246 , 237 , 219 , 183 , 111 , 222 , 189 , 122 , 245 , 235 , 215 , 174 , 93 , 186 , 116 , 232 , 209 , 162 , 68 , 136 , 16 , 33 , 67 , 134 , 13 , 27 , 54 , 108 , 216 , 177 , 99 , 199 , 143 , 30 , 60 , 121 , 243 , 231 , 206 , 156 , 57 , 115 , 230 , 204 , 152 , 49 , 98 , 197 , 139 , 22 , 45 , 90 , 180 , 105 , 210 , 164 , 72 , 145 , 34 , 69 , 138 , 20 , 41 , 82 , 165 , 74 , 149 , 42 , 84 , 169 , 83 , 167 , 78 , 157 , 59 , 119 , 238 , 221 , 187 , 118 , 236 , 217 , 179 , 103 , 207 , 158 , 61 , 123 , 247 , 239 , 223 , 191 , 126 , 253 , 250 , 244 , 233 , 211 , 166 , 76 , 153 , 51 , 102 , 205 , 154 , 53 , 106 , 212 , 168 , 81 , 163 , 70 , 140 , 24 , 48 , 96 , 193 , 131 , 7 , 14 , 29 , 58 , 117 , 234 , 213 , 170 , 85 , 171 , 87 , 175 , 95 , 190 , 124 , 249 , 242 , 229 , 202 , 148 , 40 , 80 , 161 , 66 , 132 , 9 , 19 , 39 , 79 , 159 , 63 , 127 , 255 , 254 , 252 , 248 , 240 , 225 , 194 , 133 , 11 , 23 , 47 , 94 , 188 , 120 , 241 , 227 , 198 , 141 , 26 , 52 , 104 , 208 , 160 , 64 , 128 и еще около 15 вариантов кодирования https://users.ece.cmu.edu/~koopman/lfsr/ , даже больше, т.к. вашего варианта там нет. AlexandrY, вероятно, нашел еще одну комбинацию. Вот код на VHDL для 8 битного случая, но для 16 бит доработать элементарно. Порождающие полиномы максимальной длины брать из источника выше. library IEEE; use IEEE.std_logic_1164.all; entity lfsr_counter is generic ( N : integer := 8 ); port ( clk_i : in std_logic; o_o : out std_logic_vector(N-1 downto 0) ); end entity; architecture ku of lfsr_counter is -- shift register -- signal r : std_logic_vector(N-1 downto 0) := b"00000001"; -- polinome -- type t_pa is array(0 to 15) of std_logic_vector(N-1 downto 0); signal p8 : t_pa := ( "10001110", -- 8E "10010101", -- 95 "10010110", -- 96 "10100110", -- A6 "10101111", -- AF "10110001", -- B1 "10110010", -- B2 "10110100", -- B4 "10111000", -- B8 "11000011", -- C3 "11000110", -- C6 "11010100", -- D4 "11100001", -- E1 "11100111", -- E7 "11110011", -- F3 "11111010" -- FA ); begin process(clk_i) variable pn : integer := -1; variable feedback : std_logic; begin if rising_edge(clk_i) then if r = "00000001" and pn < 15 then pn := pn + 1; end if; feedback := '0'; for i in 0 to 7 loop if p8(pn)(i) = '1' then feedback := feedback xor r(i); else feedback := feedback; end if; end loop; r <= r(r'left-1 downto 0) & feedback; end if; end process; o_o <= r; end architecture; Забавно, что фотография конца ленты, вероятно, ничего бы не прояснила, но вот начало ленты нужно было подлиннее выкладывать, т.к. всем казалось, что там простая бинарная последовательность, а на самом деле весьма хаотичная после нескольких итераций регистра сдвига. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 28 минут назад, Dimidrol сказал: всем казалось, что там простая бинарная последовательность, а на самом деле весьма хаотичная Я бы предпочёл прямое кодирование — для визуального контроля кем угодно без спецсредств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба 1 hour ago, Dimidrol said: Кажется я прозрел! Перебора никакого не надо! а полиномы максимальной длины каким-то другим образом находятся? при переборе же значений, следующий подходящий код берется минимальным из возможных, что и даёт для первой четверти последовательности просто нечетные коды 1,3,5,7,9,... при этом по-вашему получается что для любой разрядности полином с двумя старшими единицами (для последовательности из нечетных чисел в начале) должен быть "максимальным", что выглядит как-то сомнительно. 1 hour ago, Dimidrol said: AlexandrY, вероятно, нашел еще одну комбинацию. у него ещё последовательность с 0, а не с 1 как у оригинала начинается. 22 minutes ago, Plain said: Я бы предпочёл прямое кодирование — для визуального контроля кем угодно без спецсредств. тогда ещё столько же "разрядов" придётся потратить на "синхронизацию". а так только 4 из 16. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 10 ноября, 2019 Опубликовано 10 ноября, 2019 · Жалоба UPDATE! Сейчас перепроверил предыдущие варианты _pv и AlexandrY и не могу сопоставить полином для их чисел. (Всего нашел 16 полиномов, путем перебора) Значит ли это, что мой взгляд на эту проблему слишком узок ? Вероятно LFSR это лишь частный способ решения данной задачи. 35 минут назад, _pv сказал: а полиномы максимальной длины каким-то другим образом находятся? Я имел ввиду, что все уже придумано до нас. Полиномы перебором уже нашли многие, а вот последовательность для кодирования можно по простой формуле найти на их основе, что, кстати, и требовалось изначально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться