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

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

Странно это. Программа должна выводить все данные пока не встретит команду. Я считал, что пока идут данные с ленты команд нет, а как возникнет команда, то это уже хвост. Последующий после ввода информации обмен завершения передачи. По крайней мере у меня после строк данных программа выводила  хвост - такой же как в начале. Его я у Вас не вижу. Попробуйте просто потыкать во вторую ногу СД землёй. На мониторе должна вывалиться голова, потом строчки. Когда строчек наберётся штук 5-6 закоротите на землю вывод 5. Дальнейшее тыкание землёй в ногу 2 приведёт к показу хвостаи останову программы. Это же я ожидал увидеть на натуре.   

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

На Сд коротить во время загрузки с ленты или когда загрузка остановиться?

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

Когда лента остановится. Но если программа останавливается до окончания ленты , то коротить бесполезно. Что то пошло не так.
Было бы хорошо найти в документации что означают команды.

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

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

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

1 раз

Start test:
01    5284644 c FD
02         20 c FB
03         24 c 83
04         20 d 1
05         28 d 1
06         36 d 1
07        120 d 1
08         88 c FB
09         64 c FD
10         20 c FB
11         28 c 83
12         20 d 1
13         28 d 1
14         32 d 1
15         32 d 1
16         36 d 1
17         32 d 1
18        148 d 1
19         32 d 1
20         36 c FB
21        100 c FD
22         20 c FB
23         24 c 85
24         36 d 10
25         32 d 1
26         40 d 1
27         24 d 1
28         32 d 1
29         24 d 1
30         28 d 1
31         24 d 1
32         24 d 0
33         24 d 1
34         28 d 1
35         24 d 1
36         20 d 1
37         36 d F1
38         20 d F1
39         36 d 1
40         32 d 1
41         24 d 1
42         36 d 19
43         44 d 1
44         24 c FD
45         48 c 19
46         24 c 83
47         20 d 1
48         28 c 98
49         24 c FB
50        164 c 45
51         24 d 40
52         24 c FD
53         32 c 43
54     146132 d 0
55       8188 d 0
56       4708 d 0
57       5600 d 0
58       7540 d 0
59       4240 d 0
60       3360 d 0
61       3228 d 0
62       3064 d 0
63       3984 d 0
64       4228 d 0
65       5412 d 0
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00
001    5491184 c 0
67         24 c 0
68        236 c 0
69         16 c 0
70        148 c 0
71         20 c 0
72         28 c 0
73       -412 c 0
74   36875796 c 0
75       1108 c 0
76    1697864 c 0
77        320 c 0
78     434164 c 0
79         16 c 0
80     277076 c 0
81     159620 c 0
82     327504 c 0
83        144 c 0
84     182988 c 0
85     288704 c 0
86        912 c 0
87     309824 c 0
88       1972 c 0
89     902296 c 0
90     686968 c 0
91     274860 c 0
92     759884 c 0
93         28 c 0
94         28 c 0
95         44 c 0
96   22050832 c 0
97        332 c 0
98        372 c 0
99        120 c 0
100       1364 c 0
101         20 c 0
102        812 c 0
103    1620732 c 0
104         24 c 0
105        232 c 0
106       1048 c 0
107       3268 c 0
108        960 c 0
109     838996 c 0
110        532 c 0
111     269608 c 0
112        940 c 0
113        304 c 0
114       1616 c 0
115     235936 c 0
116        456 c 0
117     193536 c 0
118        460 c 0
119     442244 c 0
120         68 c 0
121     268912 c 0
122         72 c 0
123         16 c 0
124        208 c 0
125         60 c 0
126        996 c 0
127        616 c 0
128         16 c 0
129         28 c 0
130        200 c 0
131        192 c 0
132         20 c 0
133     287620 c 0
134         16 c 0
135     151228 c 0
136         16 c 0
137         24 c 0
138         64 c 0
139    4370580 c 0
140       1296 d 0
141     417552 d 0
142         16 d 0
143         48 d 0
144     289380 d 0
145     478468 d 0
146        600 d 0
147         20 d 0
148        288 d 0
149     511240 d 0
150         20 d 0
Stop, wait for RESET!

2 раз

Start test:
01    1360008 c FD
02         20 c FB
03         28 c 83
04         20 d 1
05         28 d 1
06         36 d 1
07         32 d 1
08        164 c FB
09         24 d 0
10         48 c FD
11         20 c FB
12         28 c 83
13         20 d 1
14         28 d 1
15         32 d 1
16         36 d 1
17         32 d 1
18         20 d 1
19         16 d 1
20        144 d 1
21         32 d 1
22         40 c FB
23         96 c FD
24         20 c FB
25         28 c 85
26         32 d 10
27         36 d 1
28         40 d 1
29         24 d 1
30         28 d 1
31         24 d 1
32         32 d 1
33         20 d 1
34         20 d 8
35         32 d 1
36         24 d 1
37         24 d 1
38         20 d 1
39         40 d F1
40         20 d F1
41         36 d 1
42         28 d 1
43         28 d 1
44         36 d 19
45         40 d 1
46         28 c FD
47         44 c 19
48         28 c 83
49         20 d 1
50         24 c 98
51         28 c FB
52        160 c 45
53         24 d 40
54         28 c FD
55         32 c 43
56         28 d 0
57     162304 d 0
58       4928 d 0
59       4372 d 0
60       5920 d 0
61       4180 d 0
62       3404 d 0
63       3044 d 0
64       2804 d 0
65       2936 d 0
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001    1560096 c 0
67         20 c 0
68        236 c 0
69         20 c 0
70        152 c 0
71         16 c 0
72         28 c 0
73       -412 c 0
74   24068964 c 0
75        340 d 0
76        680 d 0
77        136 d 0
78         16 d 0
79         12 d 0
80        172 d 0
81        308 d 0
82      46468 d 0
83     197956 d 0
84         16 d 0
85     128848 d 0
86       1340 d 0
87     147296 d 0
88        128 d 0
89        784 d 0
90     101500 d 0
91         32 d 0
92         16 d 0
93        260 d 0
94        120 d 0
95         72 d 0
96     763200 d 0
97     693448 d 0
98         16 d 0
99         16 d 0
100       1088 d 0
101         44 d 0
102         36 d 0
103         12 d 0
104      57656 d 0
105     448560 d 0
106        228 d 0
107        132 d 0
108         36 d 0
109         48 d 0
110         36 d 0
111        112 d 0
112         16 d 0
113         36 d 0
114         12 d 0
115     311696 d 0
116         16 d 0
117        152 d 0
118         16 d 0
119        140 d 0
120        496 d 0
121     194700 d 0
122         16 d 0
123      84668 d 0
124     213644 d 0
125     188096 d 0
126         12 d 0
127         44 d 0
128         16 d 0
129       3256 d 0
130       1116 d 0
131     119212 d 0
132       1960 d 0
133         40 d 0
134         16 d 0
135      55940 d 0
136        764 d 0
137         56 d 0
138         60 d 0
139         12 d 0
140        368 d 0
141         36 d 0
142        696 d 0
143        192 d 0
144         64 d 0
145     118428 d 0
146         16 d 0
147        196 d 0
148     122212 d 0
149         72 d 0
150         52 d 0
Stop, wait for RESET!

3 раз

Start test:
01   11461780 c FD
02         20 c FB
03         24 c 83
04         20 d 1
05         28 d 1
06         36 d 1
07         36 d 1
08        164 c FB
09         20 d 0
10         52 c FD
11         20 c FB
12         28 c 83
13         20 d 1
14         28 d 1
15         32 d 1
16         36 d 1
17         32 d 1
18         32 d 1
19        148 d 1
20         32 d 1
21         36 c FB
22        100 c FD
23         20 c FB
24         24 c 85
25         36 d 10
26         32 d 1
27         40 d 1
28         24 d 1
29         32 d 1
30         24 d 1
31         28 d 1
32         24 d 1
33         20 d 8
34         28 d 1
35         28 d 1
36         24 d 1
37         20 d 1
38         36 d F1
39         20 d F1
40         36 d 1
41         32 d 1
42         24 d 1
43         36 d 19
44         44 d 1
45         24 c FD
46         48 c 19
47         24 c 83
48         20 d 1
49         28 c 98
50         24 c FB
51        164 c 45
52         24 d 40
53         24 c FD
54         32 c 43
55     154936 d 0
56       6972 d 0
57       4520 d 0
58       6060 d 0
59       5052 d 0
60       3648 d 0
61       3312 d 0
62       3052 d 0
63       4696 d 0
64       5348 d 0
65       4128 d 0
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00
001   11672536 c 0
67         20 c 0
68       -788 c 0
69         20 c 0
70        148 c 0
71         20 c 0
72         28 c 0
73       -412 c 0
74   48344120 c 0
75     219560 d 0
76      93568 d 0
77         60 d 0
78     118348 d 0
79     192516 d 0
80      98500 d 0
81        792 d 0
82         20 d 0
83        336 d 0
84       1004 d 0
85     215364 d 0
86         16 d 0
87     220932 d 0
88         20 d 0
89         16 d 0
90         12 d 0
91     193168 d 0
92      81852 d 0
93         16 d 0
94     130356 d 0
95     207512 d 0
96         16 d 0
97      94384 d 0
98         20 d 0
99         56 d 0
100        396 d 0
101      93112 d 0
102        112 d 0
103        144 d 0
104     106916 d 0
105         12 d 0
106      94788 d 0
107         72 d 0
108       1144 d 0
109      72636 d 0
110       1132 d 0
111      83160 d 0
112         12 d 0
113        168 d 0
114        116 d 0
115       1708 d 0
116      84160 d 0
117        648 d 0
118       1332 d 0
119      84228 d 0
120        136 d 0
121        580 d 0
122        668 d 0
123      82164 d 0
124         72 d 0
125        196 d 0
126        432 d 0
127        300 d 0
128       1068 d 0
129      82988 d 0
130         60 d 0
131         64 d 0
132        232 d 0
133         72 d 0
134        516 d 0
135         16 d 0
136         20 d 0
137         76 d 0
138         28 d 0
139         28 d 0
140         24 d 0
141     125232 d 0
142      82928 d 0
143        488 d 0
144         40 d 0
145       1124 d 0
146        572 d 0
147     210736 d 0
148      90464 d 0
149       1272 d 0
150     219652 d 0
Stop, wait for RESET!

 

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

Руками помогли программе закончиться или сама?

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

Коротил на СД

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

А какая у Вас самая короткая лента? Нет ли у Вас платы блюпил на stm32f103c8 или какой либо другой? Нужно запомнить всю ленту. В уне только 2к памяти. Этого мало на Ваши ленты. 

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

Это самая короткая лента. Платы никакой нет. Но если без неё никак буду мониторить да покупать.

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

Тут два варианта. Или найти в документации команды обмена информацией между ЦВМ и магнитофоном или снять весь протокол обмена по всем линиям от начала до конца. Уной снять протокол не получится из за малого объёма памяти. Нужен или логический анализатор - ссылку я давал #189 или плату с большим объёмом памяти, лучше всего блакпилл на stm32f411.
Замерьте напряжения на линиях НГП и НПД перед нажатием кнопки пуск.

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

Не очень понял какие данные вы пытались получить, но вполне можно использовать вывод через UART притормаживая обмен по шине сигналом НПД.

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

На НГП 3.3 В, а НПД ничего.

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

imp пишет:
Не очень понял какие данные вы пытались получить, но вполне можно использовать вывод через UART притормаживая обмен по шине сигналом НПД.

За миллисекунду между магнитофоном и ЦВМ перед стартом считывания пробежало более 50 байт. Как команд, так и данных. Мы выводим строку почти 2 мс. Тормозить обмен конечно можно попробовать. Но мне хотелось, что бы считав головные команды в режиме накопления данных, программа считала ленту полностью и при первой команде после окончания ленты перешла в режим быстрого набора данных, чтобы посмотреть чем обмениваются магнитофон и ЦВМ после окончания ленты. Согласно второй осциллограмме #19 в конце тоже идёт интенсивный обмен за 1 мс. Кроме того обмен командами идёт при перемотке ленты, про это есть упоминание в #19, но осциллограммы нет и данных тоже нет. А этот режим, как я понимаю то же может понадобиться, что бы ЦВМ знала что магнитофон готов к обмену. 

И всё же я не понимаю, почему последняя программа не дочитывает данные ленты до конца. В программе за это отвечает второй кейс и он эквивалентен приему в предыдущих программах. Остановиться он может только после приёма команды - обнуления линии УПР.    

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

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

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

volatile bool flDat = false;
volatile unsigned char Ch, cb ;
volatile uint32_t tm, tmo, dt;
char buf[32];

void setup()
{
  PORTB = 0;
  PORTD = 0;
  DDRD = 0x0;
  DDRB = 0x0;
 
  EIFR = bit (INTF0);
  attachInterrupt(INT_NUM, input_char, FALLING);

  flDat = false;
  tmo = 0;

  Serial.begin(115200);
  Serial.println("Start test:");
}

void input_char ()
{
  tm = micros();
  flDat = true;
  bitSet(DDRD, NGP);
  bitSet(DDRD, NPD);
  Ch = ~((PINB & ~MASK) | (PIND & MASK));
  cb = (PIND & 0x20);
  bitClear(DDRD, NPD);
  
}


void loop()
{
  if (flDat)
  {
    dt = tm - tmo;
    sprintf(buf, "%10ld %c %X", dt, ((cb != 0 ) ? 'd' : 'c' ), Ch);
    Serial.println(buf);
    tmo=tm;
    flDat = false;
    bitClear(DDRD, NGP);
  };
}

 

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

Завтра  попробуем. Логический анализатор заказал, но будет не раньше чем через неделю.

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

При включении начать загрузку программы загорается неисправность, магнитофон не срабатывает.

 

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

Все загрузка прошла, но после загрузки загорелась неисправность.

Очень много строк, не хочет сюда копировать.

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

НПД был подключен? Я просил в  #214 землю, восемь линий данных(D6-D13), СД(D2), УПР(D5) и НГП(D3). НПД(D4) подключать не надо. В любом случае начало получилось совсем не как в #205 и #198. Кроме того не видно когда стартанула лента. Было бы не плохо сравнить дырки на ленте, хотя бы вначале ленты, с полученными данными, что бы увидеть есть пропуски полученных данных или нет. Желательно использовать ту же ленту что раньше в #107 и далее, что бы можно было сравнивать. Сейчас есть вопрос - откуда берётся отрицательное время? Программа приложена та же, но с защитой контроля времени. 

После подключения платы не должно быть ошибки. Как и после окончания ввода. С этим надо разбираться. С помощью осциллографа. Смотреть, какие сигналы изменились при подключении платы и возникновении ошибки.  

/***********************************************************
  Подключение:
  СД  - 2
  НПД - 3
  НГП - 4
  УПР - 5
  ЛД0 - 7
  ЛД1 - 6
  ЛД2 - 13
  ЛД3 - 12
  ЛД4 - 11
  ЛД5 - 10
  ЛД6 - 9
  ЛД7 - 8
***********************************************************/
#include <util/atomic.h>
const int PIN_CD = 2; //  Пин Данные действительны.
const int INT_NUM = 0; // Номер прерывания синхроимпульсов.
const int NPD = 4; // Пин НПД.
const int NGP = 3; // Пин НГП
const int UPR = 5; // Пин для сигнала УПР.
const unsigned char MASK = 0b11000000; // Маска для формирования байта.

volatile bool flDat = false;
volatile unsigned char Ch, cb ;
volatile uint32_t tm, tmo;
int32_t dt;
char buf[32];

void setup()
{
  PORTB = 0;
  PORTD = 0;
  DDRD = 0x0;
  DDRB = 0x0;

  EIFR = bit (INTF0);
  attachInterrupt(INT_NUM, input_char, FALLING);

  flDat = false;
  tmo = 0;

  Serial.begin(115200);
  Serial.println("Start test:");
}

void input_char ()
{
  tm = micros();
  flDat = true;
  bitSet(DDRD, NGP);
  bitSet(DDRD, NPD);
  Ch = ~((PINB & ~MASK) | (PIND & MASK));
  cb = (PIND & 0x20);
  bitClear(DDRD, NPD);
  
}


void loop()
{
  if (flDat)
  {
    ATOMIC_BLOCK(ATOMIC_FORCEON)
      {
    dt = tm - tmo;
    tmo = tm;
      };
    sprintf(buf, "%10ld %c %X", dt, ((cb != 0 ) ? 'd' : 'c' ), Ch);
    Serial.println(buf);
    flDat = false;
    bitClear(DDRD, NGP);
  };
}

 

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

Прошу прощения, НПД подключал, не внимательно прочитал. Завтра переделаю. Логический анализатор обещали в понедельник доставить.

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

Притормозить не получилось. Получилась полная хрень. Особенно время напрягает. Где то что то не так. 

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

С первой попытки магнитофон не срабатывал загоралось неисправность, только  с третьего раза. На все  влияет НГП.

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

В #91 в документации написано, что НГП НДП СД пассивные абоненты не должны выдавать, а считыватель пассивный, это значит, что мы не можем тормозить время этими командами, поэтому возникают ошибки при их использовании. Надо вернуться к программе из #192 но модифицировать её на предмет более короткой записи и запустить без магнитофона с управлением по линиям НГП НДП. Смоделировать полностью магнитофон. Именно для этого нужен логический анализатор. Подключив его к линиям НГП НДП СД УПР КиП и нескольким данных можно понять как происходит общение. Получить времена и соотнести их с тем, что получаем в программе. Подождем понедельника.      

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

Спасибо. Ждём понедельника.

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

Вот что получилось.

https://cloud.mail.ru/public/7QZf/e9Ro1vCs3

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

Отлично получилось. Всё видно. Увидел главное - УНА не успевает даже в самой быстрой программе отследить весь протокол обмена.  Если сравнить голову и запись программы #205 то видно, что есть данные через 11 мкс, которых не видит УНА. 

Есть сигнал КнП, который выступает в двух ипостасях - из документации:

1.3.16.  Сообщения на линию КпП V ЕД выдам источники или контроллер.  Источник выдает на линию сообщение КнП одновременно о выдачей последнего байта данных, свидетельствуя таким образом о заваершени цикла передачи.

Выдача сообщения КнП контроллерам одновременно о сообщением УПР интерпретируется как команда идентификации (ИД) ■ которая вызывает выдачу абонентами ШиД сообщений, 0ТВЕТ НА ПАРАЛЛЕЛЬНЫЙ ОПРОС СОЛО), определяющих являются ли они источником запроса обслуживания.
==============
Т.Е. начинать надо с ожидания сигнала УПР, по его приходу опустить НПД и до сигнала КнП одновременно с УПР надо только моргать НГП и НПД правильно и следить за КнП - тоже в прерывании, потому что он не связан с СД. Встретив КнП одновременно с УПР надо что то ответить ЦВМ какими то из этих байт из#205
50        164 c 45
51         24 d 40
52         24 c FD
53         32 c 43
И начинать передачу данных. 
Хвост тоже есть. Там тоже есть КнП, вот кто выдаёт надо разбираться. 
 
Заключение моё такое - на УНЕ сделать замену магнитофону будет сложно. Я бы смотрел в сторону блакпила или самой простой милинки.   

 

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

Отключите магнитофон совсем и снимите ещё раз. Нужно точно знать какие сигналы гонит ЦВМ до ошибки. Меня напрягает 83 наносекунды между УПР и первым провалом НПД. 

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

Значит буду мониторить где купить, из Китая это не вариант в настоящее время из-за коронавируса. Может надо второй шлейф посмотреть тоже, который идёт от магнитофона к пульту.

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

Мне из Китая непрерывно идут посылки. Последний рекорд - 4 дня и посылка у нас на таможне. Никаких проблем с короновирусом. Они его победили. А у нас почта работает. 

Но это пока без магнитофона не сняли  - не актуально. Вдруг не всё так плохо.  

Да тот шлейф тоже надо снять сигналы. И почему то я не нашёл сигналы данных. Они были не подключены? Попробуйте ещё снять не Д6 Д7 а Д0 Д1

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

Не понял: не Д6 Д7 а Д0 Д1 - это что?

Сигналы данных не подключал, потому что логический анализатор 8 пиновый.

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

Есть 2 свободных пина. 6 и 7. К ним можно подключить линии данных. Например 0 и 1.

ЗО не используется. Можно не подключать. Ещё один канал для данных. Нужны ЛД7 ЛД6 ЛД4

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

От СЦВМ до магнитофона:

https://cloud.mail.ru/public/tDxk/r6xT2oBiE

https://cloud.mail.ru/public/LpXC/MvisX26aY

Без магнитофона:

https://cloud.mail.ru/public/T4Pr/nmSvbYNi7

От магнитофона до пульта второй шлейф:

https://cloud.mail.ru/public/td7e/CBSRh37fe

https://cloud.mail.ru/public/HxS6/bge5RUSk2

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

Картинка понятна. На запрос ЦВМ сразу отвечает магнитофон. Я б даже сказал долбит подтверждением, пока ЦВМ дважды не повторяет запрос. Потом они договариваются и начинается передача данных. Следить надо за сигналами УПР КиП СД и на них реагировать. К сожалению реагировать не одинаково, а в зависимости от ситуации. Что дополнительно добавляет сложностей и с количеством необходимых прерываний и банально ног процессора. УНА не справиться. У блакпила не хватит мощности дергать шину. Надо будет делать адаптер на транзисторах. По одному транзистору типа кт315 или кт3102 на каждую линию. Сейчас есть все данные, чтобы реализовать замену. Если бы было описание протокола обмена, то проблем не было бы вообще. А так надо много телодвижений, что бы протокол восстановить. Делать это удалённо можно, но займёт очень много времени. Идеально было бы найти Вам человека, который мог приехать к Вам и поработать несколько дней.   

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

Рядом я точно никого не найду. С Вами и Imp (правда куда-то пропал, может решил, что я проигнорировал его последний скейтч, да нет, выбило: ошибку и FD 00, прошу прощения не отписался) уже два месяца работаем, бросать тоже жалко. 

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

Тогда ищите блакпилл и программатор к нему ST-Link - в китае обойдётся всё рублей 600, но надо как минимум по паре, а то горят при не правильном втыкании в комп  или купите за 2000 руб Nucleo на stm32F411re https://www.chipdip.ru/product/nucleo-f411re-2 . У ней и программатор правильный на борту есть, и в ардуно иде программировать можно.   

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

Никуда я не исчез, просто не совсем понимаю идею которую вы пытаетесь реализовать. На сколько я понял, вы пытались абсолютно точно воспроизвести все временные характеристики протокола. ИМХО, в ситуации когда протокол предназначен для общения с электромеханическим устройством, точное (и даже более-менее примерное) соблюдение таймингов в принципе не возможно. И протокол должен это учитывать. При этом, при реализации для конкретного случая, понимание протокола в принципе не нужно (не, ну конечно хотелось бы, но можно обойтись). В простейшем подходе нужно с имитировать правильные (т.е. взятые из дампа общения реальных устройств) ответы, и передать так, что бы было более-менее похоже на настоящий обмен.

Судя по описанию, обмен состоит из трех частей. Первая - когда ЦВМ указывает настройки чтения, вторая когда идет сплошной поток байт данных из ридера в ЦВМ. И третий когда ЦВМ завершает прием, отменяя настройки. Сложность в том что-бы сымитировать ответы ридера во время настройки и завершения. Сама передача данных тупая и к таймаутам не критичная (электромеханика другого не подразумевает).

По этому мое мнение - для начала нужно получить дамп первых 20 байт обмена, выделить из них ответы и попробовать их подсовывать привязав по номеру в дампе. Так как есть логический анализатор можно действовать "тупо в лоб". Отключаем ридер, подключаем анализатор, запускаем чтение - получаем ошибку. Смотрим какой байт был последним (по позиции), пишем скетч отчитывающий нужное количество переданных байт (по импульсу синхронизации) и подставляем на "пустое" место байт из дампа. Так последовательно получим скетч имитации начала передачи. Дальше тупая передача строки байт (самая короткая лента, забитая в прошивку), и так же подбираем завершение.

В результате получаем данные для написания начала и конца обмена.

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

Это уже частично сделано. Получены байты которыми обмениваются ЦВМ и магнитофон перед началом обмена данными. Задача не временное соответствие, а логическое. Например на снятие линии УПР магнитофон реагирует установкой НГП и без магнитофона ошибка возникает сразу здесь. С магнитофоном после снятия УПР магнитофон долбит байт 01 до тех пор, пока не появится снова УПР . Причём это может быть 5- 6 раз. Это повторяется ещё 2 раза, но с вариациями на ответ. Тут пробегает сигнал КнП 2 раза без УПР и при третьем повторе обмена КнП приходит очень короткий в момент активного УПР , после чего идёт обмен тремя байтами - кто их посылает надо разобраться, и собственно начинается пересылка байт ленты. Что происходит в конце пока не понятно. Через какое-то время после окончания ленты дергается УПР и КнП и несколько байт обмена.
Таким образом получается что надо следить за СД - по нему идёт обмен данными, следить за УПР и реагировать на его изменения, следить за КнП и менять протокол обмена и режим работы в зависимости от того пришёл КнП с УПР или без. При этом СД никак не связан с УПР и КнП и получать информацию о изменении УПР и КнП надо в отдельных прерываниях. И надо разделить ноги входа-выхода, что бы разделить реакцию на пришедшие байты.

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

Вот рисунок на котором наложены сигналы линий с магнитофоном и без (более блёклые линии). К сожалению последовательность каналов разная и приходится глазами бегать по разным строкам.  61732 в будущем старайтесь каналы логанализатора использовать в одной и той же последовательности?  Видно, что на первое снятие УПР магнитофон реагирует активным НГП (красная стрелка 1) при этом без магнитофона ЦВМ ждет всего 25 мкс (!!!) и снова выставляет УПР (красная стрелка 2), после чего идет ОШИБКА. У нас всего 25 микросекунд, что бы отреагировать на первое снятие УПР. Магнитофон реагирует через 2 мкс и ещё перед этим выставляет СД. Затем начинает долбить байтом 01 - зелёная стрелка. 

   

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

61732! Можете разобрать байты хвоста? В Вашем файле 24 MHz, 1 B Samples [5].logicdata есть данные - 8 линий данных. Их надо превратить в НЕХ. Если файл открыть в программе Saleae Logic то видно импульсы головы, пробел, тело данных, пробел хвост. Первый байт хвоста 0х34 начинается через 0.37 секунды от тела данных, второй 0х20 через 0.255 мс далее 0х34, 0х20, 0хfd, 0xfb.... и из файла 24 MHz,1 B Samples [1].logicdata восстановить сигналы УПР и КнП к данным хвоста.   

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

Пытаюсь  разобраться, но не получается.

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

Как собирать байт.  Наложенные данные и управление.  Судя по первому СД первый байт 0х00. 

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

Поправил скетч для загрузки байтов предшествующих обмену. Он принимает в буфер 32 байта, выводи их в консоль, и зависает. Нужно проверить, что ранее снятые дампы приняты правильно.

/***********************************************************
Подключение:
ЛД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; // Маска для формирования байта.

const int maxCount = 0x20;

unsigned char bufferTable[maxCount];
int count = 0;

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

  pinMode(DOP_6, INPUT);
  pinMode(DOP_7, INPUT);

  DDRB = MASK;

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

void input_char ()
{
  unsigned char ch;
  
  if(maxCount > count) {
    ch = ~((PINB & ~MASK) | (PIND & MASK));
    bufferTable[count++] = ch;
  }
}

void loop()
{
  int i,j;
  unsigned char n;
  
  if(maxCount == count)
  {
    for (i = 0; i < maxCount/0x10; i++) {
      Serial.println();
      for(j = 0; j < 16; j++) {
        n = bufferTable[i * 0x10 + j];
        if (n < 0x10) {
          Serial.write('0');
        }
        Serial.print(n, HEX);
        Serial.write(' ');
      }
    }
    while (true);
  }
}

 

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

Появляется только Start test и все.

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

imp пишет:

Поправил скетч для загрузки байтов предшествующих обмену. Он принимает в буфер 32 байта, выводи их в консоль, и зависает. Нужно проверить, что ранее снятые дампы приняты правильно.

Посмотрите снятые логером данные #233. Там есть все данные. Все байты и управляющие сигналы до обмена и после .  Время ответа магнитофона  1.125 мкс.  . Отвечает не только на данные, а на снятие сигнала УПР после байта 0xFB. Причём 3 раза в подряд. Третий раз после КнП.  Затем после ещё обмена выдается КнП вместе с УПР, после чего 2 байта 0хFD 0x43 и собственно далее идёт поток данных.

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

61732 пишет:

Пытаюсь  разобраться, но не получается.

Снимите логером обмен по шине данных ЛД0 - ЛД7, только замените сигнал ЛД0 на СД. Это необходимо, что бы точно понять, где данные передаются. 

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

Это белорусские рубли. Вас они устраивают? Плата правильная. 

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

В понедельник обещали прислать #247