Устройство КС-017А-1 на перфоленте

61732
Offline
Зарегистрирован: 11.10.2020

Подскажите может кто нибудь сталкивался вот с такой  штуковиной (КС-017А-1), на перфоленте. 

Хочу его выкинуть, а вместо него ардуино.

61732
Offline
Зарегистрирован: 11.10.2020

На нем три входа: питание, вход Ш4, вход Ш5.

Ш4 подключен к СЦВМ, Ш5 к пульту оператора. 

nik182
Offline
Зарегистрирован: 04.05.2015

А расшифровка всяких ДУ КиП НГЛ НГП СД есть? 8 данных и управление. Что с ним сделать то ? Если программы куда то посылать вместо него то проще с ПК. winlpt/mavju.com/ru/lpt 

з.ы. Интернет выдал https://www.elmic.ru/?q=node/28

61732
Offline
Зарегистрирован: 11.10.2020

Есть пульт оператора на котором набирается  например цифра 2, тогда на магнитофоне перематывается перфолента,  цифра 5 загрузка программы  в СЦВМ. Программ всего две. Расшифровки контактов увы нет. Только  могу рассчитывать на Вашу логику. Буду осцилографом снимать  показания. 

nik182
Offline
Зарегистрирован: 04.05.2015

Тогда один канал на любую линию данных (желательно, что бы дырка на этой линии данных была в первом ряду) и осциллограммы  всех управляющих сигналов относительно начала программы на ленте. Ленту заправалять примерно первой дыркой у входа. Развертку по горизонтали 1 мс по вертикали 1вольт.    

imp
Offline
Зарегистрирован: 20.06.2020

Для начала, открой один из разъемов (или прозвони), и отметь на схеме используемые пины. Еще вопрос, у тебя в электронном виде есть содержимое перфолент? Есть ли возможность "забить" перфоленту своими данными? Посмотри какого стандарта перфолента (какая ширина и сколько дырок данных)?
И попробуй в архиве (или интернете) отыскать схему вундервафли которая к этому читальщику перфолент подключена. Оттуда нужна только схема разъема идущего к этому перфоленточному ридеру.
Прежде всего, нужно определить задействованные сигналы.

61732
Offline
Зарегистрирован: 11.10.2020

Разъем вход в СЦВМ 

В электронном виде содержимого перфолент нету. Забить  в перфоленту данные возможности нет.

nik182
Offline
Зарегистрирован: 04.05.2015

И всё? 8 данных и строб? Прочитайте пою ссылку. Подключите к lpt разъёму и считайте в компьютер ленту.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я бы первым делом воспользовался этим

imp
Offline
Зарегистрирован: 20.06.2020

Проверь, сигнал соединен землей "(30-1)" пин 30? В принципе все пины с наименованиями в скобках должны быть соединены с землей. Проверь так ли это. Сними во время чтения осциллограмму сигнала "30-1" (пин 13) по первому лучу и какого-нибудь из сигналов "ЛД" по второму. Желательно на тестовой ленте где на этом сигнале все "дырки", что бы видно было синхронизацию.

61732
Offline
Зарегистрирован: 11.10.2020

А вот ещё на другой  схеме нашёл продолжение этого разъема Ш72-2.

61732
Offline
Зарегистрирован: 11.10.2020

Хотя это один разъем, но разбросан по схемам, как Ш72-1 и Ш72-2

nik182
Offline
Зарегистрирован: 04.05.2015

Тогда снова рекомендация снимать все управляющие сигналы относительно данных. Синхронизация по переднему фронту данных .

61732
Offline
Зарегистрирован: 11.10.2020

Сигнал тот, что в скобках не заземлен. Они лежат парами в экранировке. Т.е. 30-1 и (30-1) в экранировке. Сделал отводы из шлейфа, который  идёт на СЦВМ. Проверил пока на осциллографе во время загрузки программы только  ЛД4 И 30-1(желтый)

 

imp
Offline
Зарегистрирован: 20.06.2020

Первые выводы:

1. Данные передаются инверсно.

2. Сигнал "30-1" не является синхроимпульсом.

Остается точно так-же проверить сигналы "ОИ", "ДУ", "УПР", "КнПVИД", "СД", "НГП", "НПД". Какой из них будет совпадать с данными, тот и будет кандидатом в синхроимпульсы.

61732
Offline
Зарегистрирован: 11.10.2020

Упр-Лд2

Ду-Лд2

КнП-Уд2

Нгп-Уд2

Нпд-Уд2

Ои-Уд2

Сд-Лд2

imp
Offline
Зарегистрирован: 20.06.2020

Ну есть несколько кандидатов на синхроимпульсы. Нужно увеличить частоту развертки, так что-бы импульсы были хорошо видны, и скорее всего использовать однократное срабатывание, или если есть тестовая лента, смотреть на участке где все дырочки пробиты. Задача разглядеть положение импульсов синхронизации относительно импульсов данных.

p/s Начни с линии "Сд" уж больно название подходит под синхронизацию данных :)

61732
Offline
Зарегистрирован: 11.10.2020

Ндп-Лд2

Нгп-Лд2

Сд-Лд2

nik182
Offline
Зарегистрирован: 04.05.2015

Мне НГП нравиться - очень похоже, что это маленькие дырочки по середине ленты - синхро точки ряда. Теперь надо найти управляющие моторчиками прокрутки.

61732
Offline
Зарегистрирован: 11.10.2020

На втором шлейфе который идёт от пульта до магнитофона сигналы пробиваются такие же только добавился УПР срабатывает в начале и в конце загрузки и при перемотке. 

В начале загрузки

В конце загрузки 

imp
Offline
Зарегистрирован: 20.06.2020

Попробуй код:

/***********************************************************
Подключение:
ЛД0 - 8
ЛД1 - 9
ЛД2 - 10
ЛД3 - 11
ЛД4 - 12
ЛД5 - 13
ЛД6 - 6
ЛД7 - 7
СД  - 2
***********************************************************/
const int PIN_CLOCK = 2; // Пин синхроимпульсов.
const int INT_CLOCK = 0; // Номер прерывания синхроимпульсов.
const int DOP_6 = 6;     // Пин шестого разряда данных.
const int DOP_7 = 7;     // Пин седьмого разряда данных.
const unsigned char MASK = 0b11000000; // Маска для формирования байта.

unsigned char bufferCh;
boolean bufferFlag;

void setup()
{
  attachInterrupt(INT_CLOCK, input_char, FALLING);

  bufferFlag = false;
  
  pinMode(DOP_6, INPUT);
  pinMode(DOP_6, INPUT);

  DDRB = MASK;

  pinMode(2, INPUT_PULLUP);
  Serial.begin(57600);
  Serial.println("Start test:");
}

void input_char ()
{
  bufferCh = ~((PINB & ~MASK) | (PIND & MASK));
  bufferFlag = true;
}

void loop()
{
  if(bufferFlag)
  {
    Serial.println(bufferCh, HEX);
    bufferFlag = false;
  }
}

Для проверки придется вручную декодировать кусок ленты и сравнить полученные коды.

В качестве синхросигнала возможно вместо "СД" придется использовать "НГП"

Если все пойдет, строку "Serial.println(bufferCh, HEX);" выводящую шеснадцатиричные коды, нужно будет заменить на "Serial.write(bufferCh);" для вывода непосредственно символов.

61732
Offline
Зарегистрирован: 11.10.2020
Вот что получилось первый  лист из 14
И часть строки с символоми
imp
Offline
Зарегистрирован: 20.06.2020

Расшифруй начало перфоленты, что-бы сравнить что должно быть. Если не умеешь, отскань самое начало (что-бы было как привязаться к коду), и выложи сюда.

nik182
Offline
Зарегистрирован: 04.05.2015

Добавьте в прерывание первой строкой delayMicroseconds(1) или (2). Может быть будет лучше?

61732
Offline
Зарегистрирован: 11.10.2020

Понял. Но уже только в понедельник. Доступа нет, выходные. Спасибо за помощь.

61732
Offline
Зарегистрирован: 11.10.2020

imp
Offline
Зарегистрирован: 20.06.2020

Совершенно не похоже. На перфоленте именно загружавшееся начало?

61732
Offline
Зарегистрирован: 11.10.2020

В начале пару иероглифов потом точки посередине  и этот отрезок.

nik182
Offline
Зарегистрирован: 04.05.2015

В вики есть  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 - это наводит на грустные размышления. Если вручную загнать дырочки под считыватель с остановленной лентой будут ли сигналы на лини данных?  

        

imp
Offline
Зарегистрирован: 20.06.2020

Попробуй немного изменить код:

/***********************************************************
Подключение:
ЛД0 - 8
ЛД1 - 9
ЛД2 - 10
ЛД3 - 11
ЛД4 - 12
ЛД5 - 13
ЛД6 - 6
ЛД7 - 7
СД  - 2
***********************************************************/
const int PIN_CLOCK = 2; // Пин синхроимпульсов.
const int INT_CLOCK = 0; // Номер прерывания синхроимпульсов.
const int DOP_6 = 6;     // Пин шестого разряда данных.
const int DOP_7 = 7;     // Пин седьмого разряда данных.
const unsigned char MASK = 0b11000000; // Маска для формирования байта.

unsigned char bufferCh;
boolean bufferFlag;

void setup()
{
  attachInterrupt(INT_CLOCK, input_char, FALLING);

  bufferFlag = false;
  
  pinMode(DOP_6, INPUT);
  pinMode(DOP_6, INPUT);

  DDRB = MASK;

  pinMode(2, INPUT_PULLUP);
  Serial.begin(57600);
  Serial.println("Start test:");
}

void input_char ()
{
  delayMicroseconds(3);
  bufferCh = ~((PINB & ~MASK) | (PIND & MASK));
  Serial.println(bufferCh, HEX);
}

void loop()
{
}

Здесь добавлена небольшая задержка перед чтением байта.

61732
Offline
Зарегистрирован: 11.10.2020

Вот что получилось. Кусок пройденный программы и что получилось.

nik182
Offline
Зарегистрирован: 04.05.2015

Что означает стрелочка? Очень хочется видеть на фото вертикально, сверху дырки, которые первые въезжают в считыватель и три дырки до дорожки справа. Много не надо. Достаточно того, что на распечатке - каждые 2 символа - одна дырочка дорожки. У Вас начало BF 00 80 - это значит, что первые дырки 10111_111 должны быть отделены пробелом от третьего ряда 10000_000 ( подчеркивание - транспортная дорожка) ничего похожего не нашёл. Можно вставить в конце прерывания Serial.print(" "); ? что бы отделить на распечатке один ряд от другого?

61732
Offline
Зарегистрирован: 11.10.2020

nik182
Offline
Зарегистрирован: 04.05.2015

Всё вверх ногами - 0F 50 88 FF 40 50 00 00 00 00 00 00 00 00 0F 90 B8 ....

Откройте каклькулятор вин10, переключите в режим програмиста, щёлните по двоичной системе и вводите 1 для дырки, 0 без дырки для каждого ряда слева на право. После введения восьми знаков в строке HEX увидите результат. Левая дырка верхний бит для первой строки 00001111, для второй 01010000 и.т.д

Но это всё равно победа! Соответствует.

61732
Offline
Зарегистрирован: 11.10.2020

Проверил, все соответствует.

imp
Offline
Зарегистрирован: 20.06.2020

Что чему соответствует? nik182 правильно расшифровал, но чему это соответствует в полученном дампе?

Кстати, там Serial.println стоит, почему у тебя переводов строки нету? Ты их в настройках выключил? Включи, удобнее будет.

nik182
Offline
Зарегистрирован: 04.05.2015

Соответствуют биты с конца 8 строки распечатки HEX из #30 (в байте младший разряд распечатки соответствует старшему разряду байта ленты) . Надо провода данных перевернуть 0->7 1->6 ... 7->0 и всё станет на место. 

61732
Offline
Зарегистрирован: 11.10.2020

Прошу прощения imp, я для того что бы вы всю картину  увидели менял на Serial.print. Я уже то же  разобрался, как расшифровывается. Что значит в дампе? 

61732
Offline
Зарегистрирован: 11.10.2020

nik182 пишет:

Соответствуют биты с конца 8 строки распечатки HEX из #30 (в байте младший разряд распечатки соответствует старшему разряду байта ленты) . Надо провода данных перевернуть 0->7 1->6 ... 7->0 и всё станет на место. 

Но вроде все же получается и пока сходится, что не так?

imp
Offline
Зарегистрирован: 20.06.2020

Под дампом имелись в виду данные полученные с устройства. Строка "0F 50 88 FF 40 50 00 00 00 00 00 00 00 00 0F 90 B8" В нем не наблюдается. Кстати, на всякий случай проверьте не перепутаны ли между собой линии данных.

61732
Offline
Зарегистрирован: 11.10.2020

Я уже считаю по разному, где основа не пойму

Вроде же все правильно, просто перевернуто.

imp
Offline
Зарегистрирован: 20.06.2020

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

61732
Offline
Зарегистрирован: 11.10.2020

И где загвоздка? 

61732
Offline
Зарегистрирован: 11.10.2020

Что я не так делаю?

imp
Offline
Зарегистрирован: 20.06.2020

У тебя все так, (не так это я nik182) в правом столбике. Разве что ведущие нули принято писать (что-бы было видно разрядность).

nik182
Offline
Зарегистрирован: 04.05.2015

Что то я тогда не понял. На бумаге от руки из #40 вверху над битами 12345678, a должно быть написано 76543210. Левый бит самый старший со значением 0х80. Тогда это будет соответствовать ленте из 32. Можно ничего не перепаивать, а программно перевернуть биты в байте. Это конечно придирки, исключительно что бы если встретиться на ленте текстовая информация её можно было посмотреть. А так как копир ленты и так сойдёт. Вот если что то новое сгенерить и отправить уже не получится. Надо сразу сделать единообразно.

nik182
Offline
Зарегистрирован: 04.05.2015

imp пишет:

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


Этой таблички совсем не понял. Что Вы хотели показать? Если вподряд написать символы напечатанные справа от ленты, то такую последовательность можно найти на большой распечатке. Именно это я называл соответствием.

imp
Offline
Зарегистрирован: 20.06.2020

to nik182. В табличке приведены коды в двоичном и шестнадцатиричном виде для перфоленты и вероятно соответствующие им коды из дампа (в щестнадцатиричном и двоичном) сравнивая двоичные представления по строкам, сразу видно, что получить из одного другое при помощи сдвига можно не для всех значений. Т.е. дело не в перепутанных проводах (или по меньшей мере не только в них).

nik182
Offline
Зарегистрирован: 04.05.2015

Я говорил про то, что надо делать не сдвиг, а переворот. Сейчас биты данных подключены в обратной последовательности. Младший бит считывается ардуиной старшим. Второй седьмым, третий шестым, четвёртый пятым... Отобразите в Вашей табличке левые двоичные коды зеркально, типа
00001111 0F F0 11110000
01010000 50 0A 00001010
Сейчас код 01010000 считается как 0А.

imp
Offline
Зарегистрирован: 20.06.2020

to nik182 Кажется я понимаю Вашу мысль. У нас не выводятся ведущие нули, а так как дамп без пробелов, получилась каша.

to 61732 нужно вернуть Serial.println(bufferCh, HEX); и посмотреть как выведется этот кусочек перфоленты. Если так как в #32, то nik182 прав и нужно поменять подключение как он пишет.

 

61732
Offline
Зарегистрирован: 11.10.2020

Все показывает, как #32 это я проверял в ручном режиме.