Устройство КС-017А-1 на перфоленте
- Войдите на сайт для отправки комментариев
Пнд, 28/12/2020 - 17:13
Подскажите может кто нибудь сталкивался вот с такой штуковиной (КС-017А-1), на перфоленте.
Хочу его выкинуть, а вместо него ардуино.
На нем три входа: питание, вход Ш4, вход Ш5.
Ш4 подключен к СЦВМ, Ш5 к пульту оператора.
А расшифровка всяких ДУ КиП НГЛ НГП СД есть? 8 данных и управление. Что с ним сделать то ? Если программы куда то посылать вместо него то проще с ПК. winlpt/mavju.com/ru/lpt
з.ы. Интернет выдал https://www.elmic.ru/?q=node/28
Есть пульт оператора на котором набирается например цифра 2, тогда на магнитофоне перематывается перфолента, цифра 5 загрузка программы в СЦВМ. Программ всего две. Расшифровки контактов увы нет. Только могу рассчитывать на Вашу логику. Буду осцилографом снимать показания.
Тогда один канал на любую линию данных (желательно, что бы дырка на этой линии данных была в первом ряду) и осциллограммы всех управляющих сигналов относительно начала программы на ленте. Ленту заправалять примерно первой дыркой у входа. Развертку по горизонтали 1 мс по вертикали 1вольт.
Для начала, открой один из разъемов (или прозвони), и отметь на схеме используемые пины. Еще вопрос, у тебя в электронном виде есть содержимое перфолент? Есть ли возможность "забить" перфоленту своими данными? Посмотри какого стандарта перфолента (какая ширина и сколько дырок данных)?
И попробуй в архиве (или интернете) отыскать схему вундервафли которая к этому читальщику перфолент подключена. Оттуда нужна только схема разъема идущего к этому перфоленточному ридеру.
Прежде всего, нужно определить задействованные сигналы.
Разъем вход в СЦВМ
В электронном виде содержимого перфолент нету. Забить в перфоленту данные возможности нет.
И всё? 8 данных и строб? Прочитайте пою ссылку. Подключите к lpt разъёму и считайте в компьютер ленту.
Я бы первым делом воспользовался этим
Проверь, сигнал соединен землей "(30-1)" пин 30? В принципе все пины с наименованиями в скобках должны быть соединены с землей. Проверь так ли это. Сними во время чтения осциллограмму сигнала "30-1" (пин 13) по первому лучу и какого-нибудь из сигналов "ЛД" по второму. Желательно на тестовой ленте где на этом сигнале все "дырки", что бы видно было синхронизацию.
А вот ещё на другой схеме нашёл продолжение этого разъема Ш72-2.
Хотя это один разъем, но разбросан по схемам, как Ш72-1 и Ш72-2
Тогда снова рекомендация снимать все управляющие сигналы относительно данных. Синхронизация по переднему фронту данных .
Сигнал тот, что в скобках не заземлен. Они лежат парами в экранировке. Т.е. 30-1 и (30-1) в экранировке. Сделал отводы из шлейфа, который идёт на СЦВМ. Проверил пока на осциллографе во время загрузки программы только ЛД4 И 30-1(желтый)
Первые выводы:
1. Данные передаются инверсно.
2. Сигнал "30-1" не является синхроимпульсом.
Остается точно так-же проверить сигналы "ОИ", "ДУ", "УПР", "КнПVИД", "СД", "НГП", "НПД". Какой из них будет совпадать с данными, тот и будет кандидатом в синхроимпульсы.
Упр-Лд2
Ду-Лд2
КнП-Уд2
Нгп-Уд2
Нпд-Уд2
Ои-Уд2
Сд-Лд2
Ну есть несколько кандидатов на синхроимпульсы. Нужно увеличить частоту развертки, так что-бы импульсы были хорошо видны, и скорее всего использовать однократное срабатывание, или если есть тестовая лента, смотреть на участке где все дырочки пробиты. Задача разглядеть положение импульсов синхронизации относительно импульсов данных.
p/s Начни с линии "Сд" уж больно название подходит под синхронизацию данных :)
Ндп-Лд2
Нгп-Лд2
Сд-Лд2
Мне НГП нравиться - очень похоже, что это маленькие дырочки по середине ленты - синхро точки ряда. Теперь надо найти управляющие моторчиками прокрутки.
На втором шлейфе который идёт от пульта до магнитофона сигналы пробиваются такие же только добавился УПР срабатывает в начале и в конце загрузки и при перемотке.
В начале загрузки
В конце загрузки
Попробуй код:
Для проверки придется вручную декодировать кусок ленты и сравнить полученные коды.
В качестве синхросигнала возможно вместо "СД" придется использовать "НГП"
Если все пойдет, строку "Serial.println(bufferCh, HEX);" выводящую шеснадцатиричные коды, нужно будет заменить на "Serial.write(bufferCh);" для вывода непосредственно символов.
Расшифруй начало перфоленты, что-бы сравнить что должно быть. Если не умеешь, отскань самое начало (что-бы было как привязаться к коду), и выложи сюда.
Добавьте в прерывание первой строкой delayMicroseconds(1) или (2). Может быть будет лучше?
Понял. Но уже только в понедельник. Доступа нет, выходные. Спасибо за помощь.
Совершенно не похоже. На перфоленте именно загружавшееся начало?
В начале пару иероглифов потом точки посередине и этот отрезок.
В вики есть https://commons.wikimedia.org/wiki/File:Papertape-Wikipedia-example-dark1.svg?uselang=ru рисунок кусочка перфоленты с дырочками. Особенно радуют 0xD 0xA или 13 10 или В1101 В1010 или cr lf. Видно где расположены дырочки. Там где 3 это нижние биты. Ленту на Вашем рисунке надо перевернуть, а то тяжело считывать. По крайней мере первый ряд это 0x0F или В1111, второй 0x50 или В1010000 и так далее 0х88,0хBB,0x80,0x17 - первый верхний иероглиф. Что то где то попутано. Первый ряд дырочек вообще очень показательный 0x0F - ровно половина дырочек. Все пробитые дырочки - должно быть FF , без дырочек 00 . А пробить перфоленту есть чем? Я б даже пробойником попробовал пробить восемь рядов по одной дырочке слева на право, что бы посмотреть к чему перемещение дырочки по ряду приводит. Должно получиться 0102040810204080 если всё правильно соединено и дешифруется с правильным младшим битом. Здесь нарисовано где должны быть дырочки https://files.stroyinf.ru/Data/212/21222.pdf
Кстати, не нашёл ни одного 0х00 - это наводит на грустные размышления. Если вручную загнать дырочки под считыватель с остановленной лентой будут ли сигналы на лини данных?
Попробуй немного изменить код:
Здесь добавлена небольшая задержка перед чтением байта.
Вот что получилось. Кусок пройденный программы и что получилось.
Что означает стрелочка? Очень хочется видеть на фото вертикально, сверху дырки, которые первые въезжают в считыватель и три дырки до дорожки справа. Много не надо. Достаточно того, что на распечатке - каждые 2 символа - одна дырочка дорожки. У Вас начало BF 00 80 - это значит, что первые дырки 10111_111 должны быть отделены пробелом от третьего ряда 10000_000 ( подчеркивание - транспортная дорожка) ничего похожего не нашёл. Можно вставить в конце прерывания Serial.print(" "); ? что бы отделить на распечатке один ряд от другого?
Всё вверх ногами - 0F 50 88 FF 40 50 00 00 00 00 00 00 00 00 0F 90 B8 ....
Откройте каклькулятор вин10, переключите в режим програмиста, щёлните по двоичной системе и вводите 1 для дырки, 0 без дырки для каждого ряда слева на право. После введения восьми знаков в строке HEX увидите результат. Левая дырка верхний бит для первой строки 00001111, для второй 01010000 и.т.д
Но это всё равно победа! Соответствует.
Проверил, все соответствует.
Что чему соответствует? nik182 правильно расшифровал, но чему это соответствует в полученном дампе?
Кстати, там Serial.println стоит, почему у тебя переводов строки нету? Ты их в настройках выключил? Включи, удобнее будет.
Соответствуют биты с конца 8 строки распечатки HEX из #30 (в байте младший разряд распечатки соответствует старшему разряду байта ленты) . Надо провода данных перевернуть 0->7 1->6 ... 7->0 и всё станет на место.
Прошу прощения imp, я для того что бы вы всю картину увидели менял на Serial.print. Я уже то же разобрался, как расшифровывается. Что значит в дампе?
Соответствуют биты с конца 8 строки распечатки HEX из #30 (в байте младший разряд распечатки соответствует старшему разряду байта ленты) . Надо провода данных перевернуть 0->7 1->6 ... 7->0 и всё станет на место.
Но вроде все же получается и пока сходится, что не так?
Под дампом имелись в виду данные полученные с устройства. Строка "0F 50 88 FF 40 50 00 00 00 00 00 00 00 00 0F 90 B8" В нем не наблюдается. Кстати, на всякий случай проверьте не перепутаны ли между собой линии данных.
Я уже считаю по разному, где основа не пойму
Вроде же все правильно, просто перевернуто.
to 61732 младшие биты с той стороны где меньше отверстий.
to nik182 (#36) если мы выпишем в столбик эти коды, то увидим, что это не так:
00001111 0F 0F 00001111
01010000 50 0A 00001010
10001000 88 11 00010001
11111111 FF FF 11111111
01000000 40 2A 00101010
01010000 50 00 00000000
И где загвоздка?
Что я не так делаю?
У тебя все так, (не так это я nik182) в правом столбике. Разве что ведущие нули принято писать (что-бы было видно разрядность).
Что то я тогда не понял. На бумаге от руки из #40 вверху над битами 12345678, a должно быть написано 76543210. Левый бит самый старший со значением 0х80. Тогда это будет соответствовать ленте из 32. Можно ничего не перепаивать, а программно перевернуть биты в байте. Это конечно придирки, исключительно что бы если встретиться на ленте текстовая информация её можно было посмотреть. А так как копир ленты и так сойдёт. Вот если что то новое сгенерить и отправить уже не получится. Надо сразу сделать единообразно.
to 61732 младшие биты с той стороны где меньше отверстий.
to nik182 (#36) если мы выпишем в столбик эти коды, то увидим, что это не так:
00001111 0F 0F 00001111
01010000 50 0A 00001010
10001000 88 11 00010001
11111111 FF FF 11111111
01000000 40 2A 00101010
01010000 50 00 00000000
Этой таблички совсем не понял. Что Вы хотели показать? Если вподряд написать символы напечатанные справа от ленты, то такую последовательность можно найти на большой распечатке. Именно это я называл соответствием.
to nik182. В табличке приведены коды в двоичном и шестнадцатиричном виде для перфоленты и вероятно соответствующие им коды из дампа (в щестнадцатиричном и двоичном) сравнивая двоичные представления по строкам, сразу видно, что получить из одного другое при помощи сдвига можно не для всех значений. Т.е. дело не в перепутанных проводах (или по меньшей мере не только в них).
Я говорил про то, что надо делать не сдвиг, а переворот. Сейчас биты данных подключены в обратной последовательности. Младший бит считывается ардуиной старшим. Второй седьмым, третий шестым, четвёртый пятым... Отобразите в Вашей табличке левые двоичные коды зеркально, типа
00001111 0F F0 11110000
01010000 50 0A 00001010
Сейчас код 01010000 считается как 0А.
to nik182 Кажется я понимаю Вашу мысль. У нас не выводятся ведущие нули, а так как дамп без пробелов, получилась каша.
to 61732 нужно вернуть
Serial
.println(bufferCh, HEX);
и посмотреть как выведется этот кусочек перфоленты. Если так как в #32, то nik182 прав и нужно поменять подключение как он пишет.Все показывает, как #32 это я проверял в ручном режиме.