Это легко проверить. Заправить и считать несколько разных лент. С разным началом. Если у всех будет одинаковая голова считанных данных, а начало данных с ленты тоже будет за кучей нулей, то это оно. Тогда надо перепаять прерывание на линию СД и можно отследить вообще все команды.
А сколько нулей после этой последовательности? Можете ещё раз описать процесс начала считывания? Точнее после нажатия кнопки считывания сразу начинается считывание или сначала лента ищет первую дырку мотаясь туда-сюда или она уже готова к моменту нажатия кнопки?
На мой взгляд, нужно посмотреть работу линии "УПР". Судя по описанию, именно она указывает что именно передается по шине данных, команды или собственно данные. Предлагаю немного модифицировать скетч:
Пока нет, предлагаю запустить ардуину после всех подготовок и ждать УПР. После получения УПР задержка на 2 мс и выдать все дырочки. При этом очень хочется читать шину другой ардуиной , что бы понять кто в конце выдаёт cFD d00 d01 d01 d00 d00 d01 d00 d00 d00 d00 d00 d00
cFD - выдается при активном УПР, т.е. выдает ЦВМ. В протоколе указано, что только она работает с шиной при активном УПР.
to 61732 Из протокола следует, что возможен режим с "ручным" управлением, по видимому тогда запуск чтения реализуется на самом считывателе. Посмотри на пульте нет ли соответствующих переключалок.
Т.е Если команда по шине FD в начале и конце то что то типа триггера для считывателя - стартуй, останавливайся?
Нет. Там все сложнее. В начале, согласно протокола, идут команды выбирающие "кто передает" и "кто принимает", только за тем команда старта. Скорее всего "FD" - команда инициализации всего-всего.
Может быть. Но нам сейчас надо определить кто что посылает. Сделать это можно, если вытащить разъём считавателя с данными и посмотреть что будет на линии данных после нажатия кнопки пуск. Что побежит по линии данных. И пробежит ли что вообще. Разъем надо снимать перед нажатием кнопки пуск.
Может быть. Но нам сейчас надо определить кто что посылает. Сделать это можно, если вытащить разъём считавателя с данными и посмотреть что будет на линии данных после нажатия кнопки пуск. Что побежит по линии данных. И пробежит ли что вообще. Разъем надо снимать перед нажатием кнопки пуск.
Вот и хорошо. Судя по протоколу, если все заряжено, то ошибка должна возникнуть после запроса на старт считывателя, когда он не ответит. Вот данные лини в это момент и интересны.
Все классно. Вот если бы ещё список команд которые выставляется на линии. И тогда всё совсем станет понятным. Например что обозначает FD первым байтом при обмене. Где то должна быть таблица с командами.
Вот что получилось: к ардуино были подключены СД и ЛД0-ЛД7. Шлейф перед тем, как нажать кнопку на загрузку программы сначала отключил от СЦВМ. После нажатия кнопки на мониторе ничего не появилось и загорелась на пульте не исправность. Потом проделал тоже самое только отключил шлейф от магнитофона. После нажатия кнопки на мониторе появилось FD 00 и загорелась на пульте не исправность.
Что ж. Отличный результат. По крайней мере ясно, кто FD 00 выдаёт. Значит надо остальное нам высыпать постепенно. Смотреть есть ещё дальше обмен или это команда на старт чтения.
Замерил напряжение тестером: 1.Перед загрузкой программы, шлейф отключен от магнитофона на НГП, НПД, ДУ, КНП, ОИ, УПР, ЗО - 3.3В. При нажатии пуск пропадает напряжение на НПД и УПР
Если отключить от СЦВМ то напряжение везде 3.3В. как перед загрузкой так и при пуске.
Ждём FB 00 от контроллера и после получения посылаем постепенно байты которые видели на линии при считывании #115 - 01 01 00 00 01 01 01 01.... в какой то момент или произойдёт ошибка или контроллер добавит что то своё. Если всё правильно отправить и принять, То должны выйти на длинную полосу нулей - тоже интересно кто их отправляет - и потом отправляем данные ленты.
"Схема контроля .. при поступлении байта...согласовывает обмен информацией...При совпадение кода по линиям ЛД5 ЛД6 ... на приём или на выдачу.* Прореженная цитата. Остаётся вопрос какой байт поступает и какой код на приём и выдачу. Должна быть таблица или по схеме определить код или методом обратно инжиниринга подбирая байты получить работающую схему + программу. По этим листам стало понятно, что всё как и предполагалось. Нужны коды. Мы их последовательность знаем - сняли. Надо разбираться Кто что посылает. Главное слово в этих бумага - договариваются об обмене информации. Нужен протокол этого обмена, описанный в байтах. В бумагах он описан с точки зрения схемы соединений. Схема есть? Смотрите её и составляйте байты, которые заставят работать так, как описано.
Я сейчас сильно занят. Совершенно нет времени. Освобожусь к концу следующей недели и постараюсь написать программу по подбору протокола обмена. Сколько у Вас плат ардуино? Легче будет если две. Если есть блюпил ещё лучше. Им можно организовать проще скорость больше. Всё таки 5 мкс на такт для уны многовато. Надо обеспечить приём, анализ и реакцию.
По моему мы забыли еще об одном сигнале - "ЗО". Скорее всего он не используется, но в одном забугорном протоколе, который шибко сильно напоминает текущий, этот сигнал имеет значение. По этому думаю надо получить дам какой-нибудь предельно коротенькой ленточки с показом этого сигнала:
/***********************************************************
Подключение:
ЛД0 - 7 // 8
ЛД1 - 6 // 9
ЛД2 - 13 // 10
ЛД3 - 12 // 11
ЛД4 - 11 // 12
ЛД5 - 10 // 13
ЛД6 - 9 // 6
ЛД7 - 8 // 7
СД - 2
УПР - 5
ЗО - 4
***********************************************************/
const int PIN_CLOCK = 2; // Пин синхроимпульсов.
const int INT_CLOCK = 0; // Номер прерывания синхроимпульсов.
const int DOP_6 = 9; //6; // Пин шестого разряда данных.
const int DOP_7 = 8; //7; // Пин седьмого разряда данных.
const int UPR = 5; // Пин для сигнала УПР.
const int ZO = 4; // Пин для сигнала ЗО.
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_7, INPUT);
pinMode(UPR, INPUT);
pinMode(ZO, INPUT);
DDRB = MASK;
pinMode(PIN_CLOCK, INPUT_PULLUP);
Serial.begin(57600);
Serial.println("Start test:");
Serial.print(" ");
for (byte i=0;i<16;i++) { Serial.print(i,HEX); Serial.print(" "); };
Serial.println();
}
void input_char ()
{
static byte nhex=0;
delayMicroseconds(3);
bufferCh = ~((PINB & ~MASK) | (PIND & MASK));
Serial.write(' ');
Serial.write( digitalRead(ZO) ? 'z' : 't' );
Serial.write( digitalRead(UPR) ? 'd' : 'c' );
if (bufferCh<16) {
Serial.write('0');
}
Serial.print(bufferCh, HEX);
if (++nhex>15) {
Serial.println();
nhex=0;
}
}
void loop()
{
}
Решил попробовать варварским способом, откусывал провода поочереди НГП, НПД, ДУ, КНП, ОИ, УПР, ЗО и результат получил такой: НГП, УПР, НПД - ВЫДАЕТ ОШИБКУ, А - ДУ, КНП, ОИ, ЗО на загрузку программы не влияет. Есть две ардуино уно.
Попробовал написать. Не уверен в правильности. Кроме того остались не охваченными НПД и НГП, но надеюсь на таймингах пока сработает. Запускаем программу, нажимаем пуск, ждём ошибки. Хорошо если второй уной контролировать шину. Нужно получить на второй уне точно такую же распечатку как #138. Закомментированные строки - это байты из распечатки. Если полчаем три байта в подряд как в голове распечатки, то отправляем 2 байта. Если после первых двух отосланных байтов ответит ЭВМ, то байты как в ответе раскомментировать не надо. Раскомментировать следующие по одному, пока не случиться чудо и ЭВМ не выставит ошибку. send_dc отправляет байт и второй параметр 1 - команда 0 - данные. Перед тем, как запускать программу, измерьте напряжение и ток в линиях ЛД0-ЛД7, СД и УПР. Ток с линии на землю. Если ток будет больше 10 мА, то запускать программу не стоит. Надо сделать адаптер линии на транзисторах.
А вторую уну с программой из #136 подключали? Моя программа считывает до передачи и после. Сейчас у Вас в руках инструмент для вскрытия протокола. Если одну уну поставить только на чтение, то второй, с записью на шину, надо сделать так, что бы первая получила те же байты на шине, что и вторая выдаёт на шину. Сейчас я допишу HГП и НПД, а вы подключите входы уны с записью D3 к НПД, Д4 к НГП. Вторую уну, которая только на чтение, ЗО можно не подключать. Ещё один момент. Я изменю программу #136 и её надо будет запустить только для получения данных с линии в начале чтения с магнитофоном. Весь дамп не нужен. Я выведу время выдачи байт на линию и мы посмотрим, тайминги какие идут между байтами до начала считывания. Нужны только первые 20 байт.
Это легко проверить. Заправить и считать несколько разных лент. С разным началом. Если у всех будет одинаковая голова считанных данных, а начало данных с ленты тоже будет за кучей нулей, то это оно. Тогда надо перепаять прерывание на линию СД и можно отследить вообще все команды.
Проверил на трех лентах начало BD 01 01 01 00 00 01 01 01 01 одинаковое.
А сколько нулей после этой последовательности? Можете ещё раз описать процесс начала считывания? Точнее после нажатия кнопки считывания сразу начинается считывание или сначала лента ищет первую дырку мотаясь туда-сюда или она уже готова к моменту нажатия кнопки?
1. BD 01 01 01 00 00 01 01 01 01 FB FB 00 00 00 01
Отлично. Будем пробовать.
На мой взгляд, нужно посмотреть работу линии "УПР". Судя по описанию, именно она указывает что именно передается по шине данных, команды или собственно данные. Предлагаю немного модифицировать скетч:
Линию "УПР" подключить к 5 пину.
У команд будет префикс "c", у данных "d".
Вот что получилось)
Дело запутывается. Вчера на трёх лентах начало было 0xBD, сегодня 0xFD. Можно ещё вчерашних лент, только начало, до первых данных дырок?
Я тоже заметил может глюк. Сейчас проверю.
На последней ленте около 32000 байт данных. Такую кучу в уну не засунуть. Есть какая-нибудь лента покороче?
Покороче есть. Но это самая главная проверка. Без неё никак.
to 61732 Давай самую маленькую. Сейчас главное с загрузкой данных разобраться, примастрячить внешнюю память особых проблем не составит.
to nik182 Ты в протоколе разобрался?
1 лента проверки
2 лента самоконтроль
3 лента проверка ЦВМ
Пока нет, предлагаю запустить ардуину после всех подготовок и ждать УПР. После получения УПР задержка на 2 мс и выдать все дырочки. При этом очень хочется читать шину другой ардуиной , что бы понять кто в конце выдаёт cFD d00 d01 d01 d00 d00 d01 d00 d00 d00 d00 d00 d00
cFD - выдается при активном УПР, т.е. выдает ЦВМ. В протоколе указано, что только она работает с шиной при активном УПР.
to 61732 Из протокола следует, что возможен режим с "ручным" управлением, по видимому тогда запуск чтения реализуется на самом считывателе. Посмотри на пульте нет ли соответствующих переключалок.
Переключений нет.
Т.е Если команда по шине FD в начале и конце то что то типа триггера для считывателя - стартуй, останавливайся?
Загрузка начинается, нажатием кнопки загрузка, в конце загрузки нажимаем кнопку исходное!ответ на вопрос, думаю что да.
Т.е Если команда по шине FD в начале и конце то что то типа триггера для считывателя - стартуй, останавливайся?
Нет. Там все сложнее. В начале, согласно протокола, идут команды выбирающие "кто передает" и "кто принимает", только за тем команда старта. Скорее всего "FD" - команда инициализации всего-всего.
Может быть. Но нам сейчас надо определить кто что посылает. Сделать это можно, если вытащить разъём считавателя с данными и посмотреть что будет на линии данных после нажатия кнопки пуск. Что побежит по линии данных. И пробежит ли что вообще. Разъем надо снимать перед нажатием кнопки пуск.
Я в понедельник попробую, но боюсь ошибку выдаст.
Вот и хорошо. Судя по протоколу, если все заряжено, то ошибка должна возникнуть после запроса на старт считывателя, когда он не ответит. Вот данные лини в это момент и интересны.
Все классно. Вот если бы ещё список команд которые выставляется на линии. И тогда всё совсем станет понятным. Например что обозначает FD первым байтом при обмене. Где то должна быть таблица с командами.
Вот что получилось: к ардуино были подключены СД и ЛД0-ЛД7. Шлейф перед тем, как нажать кнопку на загрузку программы сначала отключил от СЦВМ. После нажатия кнопки на мониторе ничего не появилось и загорелась на пульте не исправность. Потом проделал тоже самое только отключил шлейф от магнитофона. После нажатия кнопки на мониторе появилось FD 00 и загорелась на пульте не исправность.
Что ж. Отличный результат. По крайней мере ясно, кто FD 00 выдаёт. Значит надо остальное нам высыпать постепенно. Смотреть есть ещё дальше обмен или это команда на старт чтения.
Замерил напряжение тестером: 1.Перед загрузкой программы, шлейф отключен от магнитофона на НГП, НПД, ДУ, КНП, ОИ, УПР, ЗО - 3.3В. При нажатии пуск пропадает напряжение на НПД и УПР
Если отключить от СЦВМ то напряжение везде 3.3В. как перед загрузкой так и при пуске.
А вот это интересно. В инструкции было - активный уровень низкий. Т.е. на шине 3.3 вольта, а не 5 как у ардуины. Что ж, нужно нолики выставлять.
Как? Пока не понимаю. Каким образом? Через ардуино возможно определить порядок сигналов и их обмен или нет.
Ждём FB 00 от контроллера и после получения посылаем постепенно байты которые видели на линии при считывании #115 - 01 01 00 00 01 01 01 01.... в какой то момент или произойдёт ошибка или контроллер добавит что то своё. Если всё правильно отправить и принять, То должны выйти на длинную полосу нулей - тоже интересно кто их отправляет - и потом отправляем данные ленты.
"Схема контроля .. при поступлении байта...согласовывает обмен информацией...При совпадение кода по линиям ЛД5 ЛД6 ... на приём или на выдачу.* Прореженная цитата. Остаётся вопрос какой байт поступает и какой код на приём и выдачу. Должна быть таблица или по схеме определить код или методом обратно инжиниринга подбирая байты получить работающую схему + программу. По этим листам стало понятно, что всё как и предполагалось. Нужны коды. Мы их последовательность знаем - сняли. Надо разбираться Кто что посылает. Главное слово в этих бумага - договариваются об обмене информации. Нужен протокол этого обмена, описанный в байтах. В бумагах он описан с точки зрения схемы соединений. Схема есть? Смотрите её и составляйте байты, которые заставят работать так, как описано.
Я сейчас сильно занят. Совершенно нет времени. Освобожусь к концу следующей недели и постараюсь написать программу по подбору протокола обмена. Сколько у Вас плат ардуино? Легче будет если две. Если есть блюпил ещё лучше. Им можно организовать проще скорость больше. Всё таки 5 мкс на такт для уны многовато. Надо обеспечить приём, анализ и реакцию.
По моему мы забыли еще об одном сигнале - "ЗО". Скорее всего он не используется, но в одном забугорном протоколе, который шибко сильно напоминает текущий, этот сигнал имеет значение. По этому думаю надо получить дам какой-нибудь предельно коротенькой ленточки с показом этого сигнала:
Решил попробовать варварским способом, откусывал провода поочереди НГП, НПД, ДУ, КНП, ОИ, УПР, ЗО и результат получил такой: НГП, УПР, НПД - ВЫДАЕТ ОШИБКУ, А - ДУ, КНП, ОИ, ЗО на загрузку программы не влияет. Есть две ардуино уно.
Подключил ЗО, вот что получилось
Попробовал написать. Не уверен в правильности. Кроме того остались не охваченными НПД и НГП, но надеюсь на таймингах пока сработает. Запускаем программу, нажимаем пуск, ждём ошибки. Хорошо если второй уной контролировать шину. Нужно получить на второй уне точно такую же распечатку как #138. Закомментированные строки - это байты из распечатки. Если полчаем три байта в подряд как в голове распечатки, то отправляем 2 байта. Если после первых двух отосланных байтов ответит ЭВМ, то байты как в ответе раскомментировать не надо. Раскомментировать следующие по одному, пока не случиться чудо и ЭВМ не выставит ошибку. send_dc отправляет байт и второй параметр 1 - команда 0 - данные. Перед тем, как запускать программу, измерьте напряжение и ток в линиях ЛД0-ЛД7, СД и УПР. Ток с линии на землю. Если ток будет больше 10 мА, то запускать программу не стоит. Надо сделать адаптер линии на транзисторах.
Спасибо, только не понял подключение. Магнитофон отключить и запустить одну ардуино?
Да. Она должна сработать вместо магнитофона.
На мониторе появилось tcFD tc00 и загорелась ошибка
А вторую уну с программой из #136 подключали? Моя программа считывает до передачи и после. Сейчас у Вас в руках инструмент для вскрытия протокола. Если одну уну поставить только на чтение, то второй, с записью на шину, надо сделать так, что бы первая получила те же байты на шине, что и вторая выдаёт на шину. Сейчас я допишу HГП и НПД, а вы подключите входы уны с записью D3 к НПД, Д4 к НГП. Вторую уну, которая только на чтение, ЗО можно не подключать. Ещё один момент. Я изменю программу #136 и её надо будет запустить только для получения данных с линии в начале чтения с магнитофоном. Весь дамп не нужен. Я выведу время выдачи байт на линию и мы посмотрим, тайминги какие идут между байтами до начала считывания. Нужны только первые 20 байт.
Программа чтения таймингов.
И, пожалуйста, сверните последний листинг в сообщении 138, а то уже устал его перекручивать.
На мониторе второй уны zcFD zc00
Программа записи с НГП и НПД.
А программа ждёт 3 байта. Строки 98-100 исправьте на
Понял буду пробовать.
На мониторе второй уны стало cFD c00 и загорелась неисправность
Ток какой на линиях?
Если с0, то в 99 строке надо проверять на 00, сейчас 01. Исправьте. Надо добиться, то бы на шину вышло больше двух байт.