6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
1

Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК

31.08.2019, 07:43. Показов 21786. Ответов 228
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как заменить 1827ВЕ1-0000000 (аналог 586ВЕ1, система команд в книжке Гамкрелидзе, кажется, отрицательная логика на мультиплексированной шине адреса-данных , нестандартный UART ) в Г4-164 на AVR -МК ATMEGA8A, ATMEGA48, ATMEGA8535, используя , например, маскированные прерывания от одного из портов, битвайсовую эмуляцию пинов (шину ПЗУ можно не использовать ), подпрограммы задержки , используя С++, ассемблерные вставки ? Предусмотреть частоты , а которых переключаются фильтры, увеличение девиации в n раз в коэффициентах АЦП при включении делителей на n, таблицу коэффициентов в ЦАП в децибелах (с учетом , например, того , что 31,7-100 мВ , на 31,6 переключается аттенюатор и включается верх напряжения ЦАП ОН ), обработку прерывания от КОП и другие функции , как по инструкции (https://www.astena.ru/teh_3.html ) ?
Миниатюры
Замена  микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК  
Вложения
Тип файла: zip img012.zip (1.35 Мб, 35 просмотров)
Тип файла: zip g4-164_shems.zip (5.48 Мб, 32 просмотров)
Тип файла: zip g4-164_teh.zip (5.28 Мб, 32 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2019, 07:43
Ответы с готовыми решениями:

Замена микросборок 2.030.036 ,2.030.034 в Г4-164, Г4-176
Замена микросборок 2.030.036 в Г4-164, 2.030.034 в Г4-176 : на какие транзисторы в современных...

замена микросхемы
Нужно заменить микросхему драйвер двигателя на HDD Smooth 100369972 . На али есть такие схемки но...

Замена микросхемы AT49F002NT
Господа! Если кто знает ,какая микросхема может заменить AT49F002NT?

Замена микросхемы на аналоговую
Привет всем. Какой микросхемой можно заменить микросхему FBBHAQ DM0265RB ? Она с платы...

228
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
14.02.2020, 13:14  [ТС] 81
Author24 — интернет-сервис помощи студентам
Шаблон GUI эмулятора АЛС КОП 814 на C++ (вписать нужные программы ).
Вложения
Тип файла: zip Terminal_814emul_GUI_template.zip (185.6 Кб, 11 просмотров)
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
17.02.2020, 18:17  [ТС] 82
На поддиапазоне 316...101 мВ коды ЦАП ОН обычно меняются так: 316 мВ- 999,315 мВ -995,...102 мВ -322, 101 мВ- 319 (ближе к началу шкалы и при округлении немного меняется с 4 на 3 единицы, лучше использовать лукап-таблицу, правда она плохо помещается в памяти программ) . При лограрифмическом режиме нижняя точка может быть с кодом 320 на -9,9 дБВ. В аттенюаторе при 80 дБ секции по 40 дБ включаются там, где две, одновременно, обозначенные 80 дБ , другие ослабления к ним прибавляются.
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
18.02.2020, 00:31  [ТС] 83
На АТМега16а с INT0,INT1,INT2, ATMEGA48A с PCINTx (см. мой пост по управлению Маяком-232 на аттини2313а с прерыванием от пинов ) можно использовать переделанный шаблон
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//ATMega48
/*
PCINT0_vect is called PCINT_B_vect 
PCINT1_vect is called PCINT_A_vect 
PCINT2_vect is caleld PCINT_D_vect 
 
PCINT0_vect
PCINT1_vect (try)
PCINT2_vect
*/
 
 
 
 
//#define F_CPU 8000000 
...
 
//#define  PIN_CTRL     PINB    //fix
//#define  PORT_CTRL_Int_vect   PCINT_B_vect   //fix
 
 
 
 
#define PIN_INT1 PIN
#define PIN_INT2 PIN 
#define PIN_INT3 PIN
#define PIN_INT1DDR  PIN
#define PIN_INT2DDR  PIN 
#define PIN_INT3DDR  PIN
 
 
 
#define   IO_PORT1 
#define   IO_PORT2
 
#define   IO_PIN2 
 
 
 
#define   PIN_23_Out_6dB
#define   PIN_39_Out_memwr_RAM
#define   PIN_38_Out_dac
#define   PIN_37_Out_memwr
#define   PIN_36_Out_scmd
//#define   PIN_33_In_scmdin
#define   PIN_34_IO_Out
#define   PIN_34_IO_Input
#define   PIN_32_Out_MX0
#define   PIN_31_Out_MX1
#define   PIN_30_Out_MX2
#define   PIN_29_Out_MX3
 
#define CMD_INT3
//#define CMD_INT3_1
//#define CMD_INT3_2
#define CMD_INT2
//#define CMD_INT2_1
//#define CMD_INT2_2
#define CMD_INT1
//#define CMD_INT1_1
//#define CMD_INT1_2
 
 
 
 
 
 
 
 
 
 
 
void INIT_Int()
{
//fix ,select ports 
                        // add pull_down, pull_up  pin init
  PIN_INT1DDR&=~(1<<PIN_INT1); //pin int1 as input
  PIN_INT2DDR&=~(1<<PIN_INT2);//pin int2 as input
  PIN_INT3DDR&=~(1<<PIN_INT3);//pin int3 as input
 
 
                        //enable interrupts on  pin level  change 
//configure GICR, PCMS and GIMSK for tinterrupt from pin for user defined pins  int1, int2,int3 
//or external interrupts int0 ,int1 with diodes from some inputs pins 
   //GICR|=(1<<INT1)|(1<<INT0) ;
   //GIMSK  |=  ;
 
//PCMSK0=
//PCMSK1=
  // PCMSK  |=     (1 << PCInt1) | (1 << PCInt2)|(1 << PCInt2);   //   
   //  PCICR = (1 << PCIE0);
     //sei(); 
return;
}
 
 
 
 
//#include "subroutines.h"
 
 
//INT0_vect
 
ISR (PORT_CTRL_Int_vect)
{
cli();
SelectMode(PIN_CTRL);
 
return;
}
  
 
void SelectMode(uint8_t Mode  )
{
 
 
 
 switch( Mode&CmdMask  )
  {
  
 
   case CMD_INT3  :   //GPIB interrupt
   //case CMD_INT3_1:
   //case CMD_INT3_2:
                 doParseInt3();
                      break;
   case CMD_INT2 :  //Keyboard interrupt
  // case CMD_INT2_1:
   //case CMD_INT2_2:
                 doParseInt2();
                     break;
 
   case CMD_INT1  :   //Encoder's  interrupt
    // case CMD_INT1_1:
   //case CMD_INT_2:
                  doParseInt1();
                       break;
 
   
   // case CMD_NOCMD    :
                    //doParseNoCMD();    
           // break;
         
   default:
            // 
                 break;
  }
 
//sei();
return  ;
 
}
 
...

На Мега8а неудобно использовать три прерывания от пинов (там, кажется , нет PCINTx, как в Мега48а и пинов трех внешних прерываний, как в мега16 ), нужно на внешние прерывания диоды подводить (на одно с валкодера и кнопок, на другое от КОП и вводить синдром в пины с его расшифровкой) , да и памяти мало.

Добавлено через 1 минуту
назначить портами и регистрам направлений псевдообозначения

Добавлено через 1 минуту
переделать шаблон , встроить подпрограммы и лукап-табличные массивы дешифраторов.

Добавлено через 2 минуты
для мега16 будет несколько
C++
1
2
3
ISR (PORT_Int0_vect) {...} 
ISR (PORT_Int1_vect) {...}
ISR (PORT_Int2_vect) {...}
Добавлено через 2 минуты
Приоритет прерывания КОП над валкодерным и от клавиатуры над от валкодера желателен. Для начала можно сформулировать без КОП, оптимизировав работу с внутренней памятью (PROGMEM,SRAM ) , потом встроить обработчики (по ТО это обязательно ).
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
22.02.2020, 03:23  [ТС] 84
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
typedef struct {
 
bool  REN;
bool  IFC;
 
bool  SRQ;
bool  ATN;
bool  EOI;
 
bool DAV;
bool NRFD;
bool NDAC;
} GPIBBUS;
 
//структура только на одно устройство при эмуляции; в настоящей  шине  выходы с открытым  коллектором ,
//  ЛОГ 1 ОЛ  соответствует низкий уровень. лог 0 -высокий (подтяжка вверх , транзистор закрыт)
// ГП с положительной  логикой соответствует NRFD  c отрицательной логикой и обратным смыслом действия  , 
// ДП с положительной  логикой соответствует NDAC  c отрицательной логикой и обратным смыслом действия ?
// поэтому уровни те же, только некоторые  особенности временных интервалов, нагрузочная способность и 
// дополнительные команды из NI488.2 не имплементованы.
   
// модифицировать и собрать на основе следующего класса  алгоритм рукопожатия со сторны 
//виртуального акцептора (источник, приемник ) и  контроллера как источника (как приемника предусмотреть, но здесь он //не потребуется), добавив шины  REN,IFC ,ATN , правильно выбрав направления  EOI , SRQ
//у нас на приборе -приемнике(акцептор) DAV input, NRFD,NDAC -output, КП и ЗО(как выход) не используются(пассивные) ,  
//идентификации нет 
 
GPIBBUS GPIB_Bus1;
 
 
...
 
 void GPIB_Read_control()
{
    uint8_t data_ctl;
     data_ctl=0;
     if (REN_Low()) { data_ctl|=0x10; }  //REN
                   if (IFC_Low()) { data_ctl|=0x20;  }  //IFC
    if (EOI_Low()) { data_ctl|=0x04; }  //EOI
    if (ATN_Low()) { data_ctl|=0x02; }  //ATN
    if (SRQ_Low()) { data_ctl|=0x01; }  //SRQ
    
}
 
void Set_IDY_0()
{
 
// EOI input, ATN =0 (high) 
 
Set_EOI_input();
Set_ATN_High();
 return;
 
}
 
void Set_IDY_1()
{
// PD2 (EOI ) - output,set   EOI =1 NL ( low) and ATN=1 ( low )
  Set_EOI_out_low();
  Set_ATN_Low();
return;
}
/********************************************************/
 
 
 
//void Delay_Timeout1_NDAC_NRFD_high_TXHS();
//void Delay_ms_Timeout2_DAV_Low_RXHS();
 
class Handshake {
byte GPIB_SendByte_HS ( uint8_t  tx_byte);
byte GPIB_Receive_byte_HS();
};
 
 
 
 
 
byte Handshake::GPIB_SendByte_HS ( uint8_t  tx_byte)
{
 
SetDBOut(); 
SetNRFD_NDAC_In() ;
SetDavHigh();
 
     //if   NRFD =0 NL, high  and   NDAC=0 NL,  high  then error
 while (Check_NRFD_and_NDAC_high())                          
 {  
  Delay_Timeout1_NDAC_NRFD_high_TXHS(); 
 //if ( Check_NRFD_and_NDAC_high()  ) {  SetDavHigh();     return 0x01; }   
 }
Out_DAB_to_bus (tx_byte);
//NRFD=0 NL,  High ? No -loop, yes -next 
 while (   !(CheckNRFD_High() )  ) {  ; }
SetDavLow();
//NDAC =0 NL, High ? If not -loop, if yes -next 
 while ( ! (CheckNDAC_High()) )     {  ; }
//if success 
  SetDavHigh(); 
return 0x00; 
}
 
 void Handshake::GPIB_Receive_byte_HS()
{
SetDBIn ();
SetNRFD_NDAC_Out();
Set_NRFD_High();
//check DAV low ? No - loop, Yes- next  (DAV high ? Yes - loop, No - next)
while (! Check_DAV_LOW()  ) 
{  
 Delay_Timeout1_NDAC_NRFD_high_TXHS();
//     if ( !Check_DAV_LOW() )  {  SendErrorRXMSG( );  return;  }
}
//set NRFD=1 NL, low
Set_NRFD_Low();
//accept data byte
uint8_t byte_rx;
byte_rx= In_DAB_from_bus();
//Set NDAC=0 NL,  high 
Set_NDAC_High();
//check DAV=0 NL (high)  No-loop ,  yes-next 
while (  Check_DAV_LOW()   ) 
{   
Delay_ms_Timeout2_DAV_Low_RXHS(); 
//if(  Check_DAV_LOW()  ) {  SendErrorRXMSG( );  return; }
}
 //SetByte(byte_rx);
//set  NDAC=1  (  low )
Set_NDAC_Low();
//insert  turn off led  sub  here , if it is used 
 
 return   byte_rx;
}
Добавлено через 57 секунд
IDY -режим у нас 0, выключен (не имплементован ).

Добавлено через 29 минут
Для эмулятора акцептора -приемника и простого контроллера в режиме источника
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
typedef struct {
 
bool  REN;
bool  IFC;
 
bool  SRQ;
bool  ATN;
bool  EOI;
 
bool DAV;
bool NRFD;
bool NDAC;
} GPIBBUS;
 
 
 
GPIBBUS GPIB_Bus1;
 
 
/*****************************************/
void SetDBOut();     //for source, controller-talker
void SetNRFD_NDAC_In();   //for  acceptor-listener , controller-listener (RX mode, listener )
void SetNRFD_NDAC_Out();  //for controller-talker (TX mode ,talker ), source(talker), 
 
 
void  Set_REN_High() {    GPIB_Bus1.REN=FALSE;  return ;  } 
void  Set_REN_Low()  {    GPIB_Bus1.REN=TRUE;  return ; } 
void Send_IFC_Low()  {    GPIB_Bus1.IFC=TRUE;   return ;  } 
void Send_IFC_High() {    GPIB_Bus1.IFC=FALSE; return ;  } 
void Set_ATN_High()  {     GPIB_Bus1.ATN=FALSE;  return ;  }
void Set_ATN_Low()   {     GPIB_Bus1.ATN=TRUE;  return ; } 
void Set_SRQ_High()  {     GPIB_Bus1.SRQ=FALSE;  return ;  } // могут не использоваться
void Set_SRQ_Low()   {     GPIB_Bus1.SRQ=TRUE;  return ; } //могут не  использоваться 
bool Check_SRQ_LOW() {    if (GPIB_Bus1.SRQ==TRUE) { return TRUE ; } else { return FALSE ; }   }  //у нас дает FALSE
void SetDavHigh()       {    GPIB_Bus1.DAV =FALSE;  return ; }
void SetDavLow()         {    GPIB_Bus1.DAV =TRUE;  return ; }
bool Check_DAV_LOW() {    if (GPIB_Bus1.DAV==TRUE) { return TRUE ; } else { return FALSE ; }   } 
 
Set_NRFD_High(){ GPIB_Bus1.NRFD=FALSE;  return ;}
Set_NRFD_Low(){  GPIB_Bus1.NRFD =TRUE;  return ;}
bool CheckNRFD_High() {    if (GPIB_Bus1.NRFD==FALSE) { return TRUE ; } else { return FALSE ; }   } 
Set_NDAC_Low() { GPIB_Bus1.NDAC=TRUE;  return ;}
Set_NDAC_High() { GPIB_Bus1.NDAC=FALSE;  return ;}
bool CheckNDAC_High() {    if (GPIB_Bus1.NDAC==FALSE) { return TRUE ; } else { return FALSE ; }  } 
bool Check_NRFD_and_NDAC_high(){ if ((GPIB_Bus1.NRFD==FALSE) &&(GPIB_Bus1.NDAC==FALSE) ) { return TRUE ; } 
else  { return FALSE ; } 
}
Добавлено через 27 минут
у
C++
1
 void Handshake::GPIB_Receive_byte_HS()
тип byte или внутри программа ввода данных с ШД в байт в глобальных переменных или классе (структуре)-хранителе состояния переменных внутренних шин в нужный момент (может быть более правильной физически ).

Добавлено через 1 час 17 минут
Можно иначе инкапсулировать данные, убрав данные ШД с глобальных переменных , выделить модуль busatomic.h, handshake.h и обращаясь к экземпляру переменной структуры типа GPIBBUS, ссылаясь на переменную типа структура в каждой подпрограмме рукопожатия и "сборных" классов на ее основе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct {
 
bool  REN;
bool  IFC;
 
bool  SRQ;
bool  ATN;
bool  EOI;
 
bool DAV;
bool NRFD;
bool NDAC;
 
byte DB;
 
} GPIBBUS;
Добавлено через 4 часа 45 минут
Для режима УП=1 в эмуляторе может потребоваться структура (метод аналогичен применяемому в дизассемблере 8085 процессора) :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/*
Адресация устройств: 
Каждое IEEE488.1 устройство имеет по крайней мере, хотя бы один адрес источника или приёмника. 
Адреса задаются выставлением уровней сигналов на шине данных в командном режиме: 
Линии DIO5..DIO1 задают адрес от 0 до 30. 
Линии DIO7..DIO6 определяют тип адреса: 
 
00-универсальная команда; 
01-адрес приёмника; 
10-адрес источника; 
11-расширение адреса до двух байт; 
Линия DIO8 не используется при адресации. 
*/
 
 
typedef struct {
 
byte  DB;
byte arg1;
byte mode;
const char *token_str;
const char *alttoken_str;
const char *comments;
} CMDARRAY_ATN1;
 
//ГПК, ГАП
 
#define   ADL_MASK 0b01100000 //x 0 1 A5 A4 A3 A2 A1
#define  ATN1_ADL_BASE 0x20  // 0...30 , A5..A1 
#define  ATN1_TOKEN_ADL_ADDR0 0x20
#define  ATN1_TOKEN_ADL_ADDR30 0x3E
#define  ATN1_TOKEN_UNL 0x3F    // Unlisten, ATN1_TOKEN_MLA_BASE+1F  
 
//ГПК,ГАИ
#define  ADT_MASK 0b01100000   //x 1 0 A5 A4 A3 A2 A1
#define  ATN1_ADT_BASE 0x40  // 0...30 , A5..A1 
#define ATN1_TOKEN_ADT_ADDR0 0x40
#define ATN1_TOKEN_ADT_ADDR30 0x5E
#define ATN1_TOKEN_UNT  0x5F //Untalk 
 
 
 
 
#define UCG_MASK 0b01100000
#define ACG_MASK 0b01100000
#define ADDR_MASK 0b00000000
#define DATA_MASK  0b01111111
#define PARITY_MASK  0b10000000 
//#define CMD_ATN   ATN=1 IFC=x REN=x SRQ=x EOI=x ,DIO=x
//#define CMD_IFC   ATN=1 IFC=1 REN=x SRQ=x EOI=x ,DIO=x
//#define CMD_REN  ATN=1 IFC=x REN=1 SRQ=x EOI=x ,DIO=x
//#define CMD_IDY  ATN=1 IFC=x REN=1 SRQ=x EOI=1, out , DIO=x
/*Identify(Идентификация) - Устройства настроенные для параллельного опроса должны среагировать на параллельный опрос(ATN=1 и EOI=1) в пределах 200ns. Контроллер может читать результат опроса через 2мкс после конфигурации.
*/
 
CMDARRAY_ATN1  TokenArrayATN1 []=
{
{ 0x01,0,0, "GTL", "ПНМ", "Go To Local" },
{ 0x04,0,0 "SDC", "СБА","Selected Device Clear"},
{ 0x05,0,0, "PPC", "КПР","Parallel Poll Configure" },
{ 0x08,0,0, "GET", "ЗАП","Group Excute Trigger"},
{ 0x05,0,0, "TCT" ,"ВУП","Group Excute Trigger" },
 
{ 0x11,0,0, "LLO","ЗПМ","Local Lockout"  },
{ 0x14,0,0, "DCL","СБУ","Device Clear"  },
{ 0x15,0,0 "PPU","ДПР","Parallel Poll Unconfigure"  },
{ 0x18,0,0 "SPE","ОПО","Serial Poll Enable" },
{ 0x19,0,0, "SPD" ,"ЗПО","Serial Poll Disable" },
 
{ 0x20, 0,0,"ADL" , "МАП","MLA =0"  },
{ 0x21,1,0, "ADL" , "МАП","MLA =1"  },
{ 0x22,2,0, "ADL" , "МАП","MLA =2"  },
{ 0x23,3,0, "ADL" ,"МАП","MLA =3"  },
{ 0x24,4,0, "ADL" ,"МАП","MLA =4" },
{ 0x25,5,0, "ADL" ,"МАП","MLA =5"  },
{ 0x26,6,0, "ADL" ,"МАП","MLA =6" },
{ 0x27,7,0, "ADL" ,"МАП","MLA =7" },
{ 0x28,8,0, "ADL" ,"МАП","MLA =8" },
{ 0x29,9,0,"ADL" ,"МАП","MLA =9" },
{ 0x2a,10,0, "ADL" ,"МАП","MLA =10" },
{ 0x2b,11,0, "ADL" ,"МАП","MLA =11" },
{ 0x2c,12,0, "ADL" ,"МАП","MLA =12" },
{ 0x2d,13,0, "ADL" ,"МАП","MLA =13" },
{ 0x2e,14,0,"ADL" ,"МАП","MLA =14" },
{ 0x2f,15,0,"ADL" ,"МАП","MLA =15" },
{ 0x30,16,0, "ADL" ,"МАП","MLA =16" },
{ 0x31, 17,0,"ADL" ,"МАП","MLA =17" },
{ 0x32,18,0, "ADL" ,"МАП","MLA =18" },
{ 0x33, 19,0,"ADL" ,"МАП","MLA =19" },
{ 0x34, 20,0,"ADL" ,"МАП","MLA =20" },
{ 0x35, 21,0,"ADL" ,"МАП","MLA =21" },
{ 0x36, 22,0,"ADL" ,"МАП","MLA =22" },
{ 0x37, 23,0,"ADL" ,"МАП","MLA =23" },
{ 0x38, 24,0,"ADL" ,"МАП","MLA =24" },
{ 0x39, 25,0,"ADL" ,"МАП","MLA =25" },
{ 0x3a, 26,0,"ADL" ,"МАП","MLA =26" },
{ 0x3b, 27,0,"ADL" ,"МАП","MLA =27" },
{ 0x3c, 28,0,"ADL" ,"МАП","MLA =28" },
{ 0x3d, 29,0,"ADL" ,"МАП","MLA =29" },
{ 0x3e, 30,0,"ADL" ,"МАП","MLA =30" },
 
{ 0x3f, 0,0,  "UNL" ,"НПМ","Unlisten" },
 
{ 0x40, 0,0,"ADT" , "МАИ","MTA =0"  },
{ 0x41,1,0, "ADT" , "МАИ","MTA =1"  },
{ 0x42,2,0, "ADT" , "МАИ","MTA =2"  },
{ 0x43,3,0, "ADT" ,"МАИ","MTA =3"  },
{ 0x44,4,0, "ADT" ,"МАИ","MTA =4" },
{ 0x45,5,0, "ADT" ,"МАИ","MTA =5"  },
{ 0x46,6,0, "ADT" ,"МАИ","MTA =6" },
{ 0x47,7,0, "ADT" ,"МАИ","MTA =7" },
{ 0x48,8,0, "ADT" ,"МАИ","MTA =8" },
{ 0x49,9,0,"ADT" ,"МАИ","MTA =9" },
{ 0x4a,10,0, "ADT" ,"МАИ","MTA =10" },
{ 0x4b,11,0, "ADT" ,"МАИ","MTA =11" },
{ 0x4c,12,0, "ADT" ,"МАИ","MTA =12" },
{ 0x4d,13,0, "ADT" ,"МАИ","MTA =13" },
{ 0x4e,14,0,"ADT" ,"МАИ","MTA =14" },
{ 0x4f,15,0,"ADT" ,"МАИ","MTA =15" },
{ 0x50,16,0, "ADT" ,"МАИ","MTA =16" },
{ 0x51, 17,0,"ADT" ,"МАИ","MTA =17" },
{ 0x52,18, 0,"ADT" ,"МАИ","MTA =18" },
{ 0x53, 19,0,"ADT" ,"МАИ","MTA =19" },
{ 0x54, 20,0,"ADT" ,"МАИ","MTA =20" },
{ 0x55, 21,0,"ADT" ,"МАИ","MTA =21" },
{ 0x56, 22,0,"ADT" ,"МАИ","MTA =22" },
{ 0x57, 23,0,"ADT" ,"МАИ","MTA =23" },
{ 0x58, 24,0,"ADT" ,"МАИ","MTA =24" },
{ 0x59, 25,0,"ADT" ,"МАИ","MTA =25" },
{ 0x5a, 26,0,"ADT" ,"МАИ","MTA =26" },
{ 0x5b, 27,0,"ADT" ,"МАИ","MTA =27" },
{ 0x5c, 28,0,"ADT" ,"МАИ","MTA =28" },
{ 0x5d, 29,0,"ADT" ,"МАИ","MTA =29" },
{ 0x5e, 30,0,"ADT" ,"МАИ","MTA =30" },
 
{ 0x5f, 0,0,"UNT" , "НПД","Untalk"  },
 
{ 0x60, 0,0,"PPE" , "ОПР","PPE S4...S1=0 "  },
{ 0x61, 0,0,"PPE" , "ОПР","PPE S4...S1=1 "  },
{ 0x62, 0,0,"PPE" , "ОПР","PPE S4...S1=2 "  },
{ 0x63, 0,0,"PPE" , "ОПР","PPE S4...S1=3 "  },
{ 0x64, 0,0,"PPE" , "ОПР","PPE S4...S1=4 "  },
{ 0x65, 0,0,"PPE" , "ОПР","PPE S4...S1=5 "  },
{ 0x66, 0,0,"PPE" , "ОПР","PPE S4...S1=6"  },
{ 0x67, 0,0,"PPE" , "ОПР","PPE S4...S1=7 "  },
{ 0x68, 0,0,"PPE" , "ОПР","PPE S4...S1=8 "  },
{ 0x69, 0,0,"PPE" , "ОПР","PPE S4...S1=9 "  },
{ 0x6a, 0,0,"PPE" , "ОПР","PPE S4...S1=10 "  },
{ 0x6b, 0,0,"PPE" , "ОПР","PPE S4...S1=11 "  },
{ 0x6c, 0,0,"PPE" , "ОПР","PPE S4...S1=12 "  },
{ 0x6d, 0,0,"PPE" , "ОПР","PPE S4...S1=13 "  },
{ 0x6e, 0,0,"PPE" , "ОПР","PPE S4...S1=14 "  },
{ 0x6f, 0,0,"PPE" , "ОПР","PPE S4...S1=15 "  },
 
 
{ 0x70, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x71, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x72, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x73, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x74, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x75, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x76, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x77, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x78, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x79, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7a, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7b, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7c, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7d, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7e, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
{ 0x7f, 0,0,"PPD" , "ЗПР","Parallel Poll Disable"  },
 
/*
Расширенная адресация. A10..A6-старшая часть адреса.
Младшая часть адреса A5..A1 передается вторичной командой.
Этот режим называется двух байтовой адресацией. 
Тип Listener/Talker задается во втором байте битами DIO7,DIO6. В данном режиме можно адресовать до 961 приборов.
*/
 
{ 0x60, 0,1," " , "МВА"," "  },
{ 0x61, 0,1," " , "МВА"," "  },
{ 0x62, 0,1," " , "МВА"," "  },
{ 0x63, 0,1," " , "МВА"," "  },
{ 0x64, 0,1," " , "МВА"," "  },
{ 0x65, 0,1," " , "МВА"," "  },
{ 0x66, 0,1," " , "МВА"," "  },
{ 0x67, 0,1," " , "МВА"," "  },
{ 0x68, 0,1," " , "МВА"," "  },
{ 0x69, 0,1," " , "МВА"," "  },
{ 0x6a, 0,1," " , "МВА"," "  },
{ 0x6b, 0,1," " , "МВА"," "  },
{ 0x6c, 0,1," " , "МВА"," "  },
{ 0x6d, 0,1," " , "МВА"," "  },
{ 0x6e, 0,1," " , "МВА"," "  },
{ 0x6f, 0,1," " , "МВА"," "  },
{ 0x70, 0,1," " , "МВА",""  },
{ 0x71, 0,1," " , "МВА",""  },
{ 0x72, 0,1," " , "МВА",""  },
{ 0x73, 0,1," " , "МВА",""  },
{ 0x74, 0,1," " , "МВА",""  },
{ 0x75, 0,1," " , "МВА",""  },
{ 0x76, 0,1," " , "МВА",""  },
{ 0x77, 0,1," " , "МВА",""  },
{ 0x78, 0,1," " , "МВА",""  },
{ 0x79, 0,1," " , "МВА",""  },
{ 0x7a, 0,1," " , "МВА",""  },
{ 0x7b, 0,1," " , "МВА",""  },
{ 0x7c, 0,1," " , "МВА",""  },
{ 0x7d, 0,1," " , "МВА",""  },
{ 0x7e, 0,1," " , "МВА",""  },
{ 0x7f, 0,1," " , "МВА"," "  },
 
 
 
 
 
{ 0,     0, 0, NULL,  NULL,  NULL }
 
};
Добавлено через 4 часа 14 минут
Строб-импульсов СИ там,кажется 8 , строб прер3, кажется, положительным импульсом (уточнить ), первый отсчет после параллельной переписи неинформативный ( лог 1), дальше ЛД0...ЛД6 (инверсные), после 8-го строба СИ лог 1 , дальше уровень лог 1 по умолчанию , пока не следующее прерывание :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
using namespace std;
typedef unsigned char byte;
int ATN_BIT;
int IFC_BIT;
int REN_BIT;
int SRQ_BIT=0;
int EOI_BIT=0;
int DB; //negative logic
byte DB_TTL; //positive logic 
 
int Int3;
int Sync;
int REN_LED;
int data_accept;
 
 
void InputByte()
{
//cout<<"Input REN statement (0 high, 1 low)";
//cin >>hex>>REN_BIT ;
//cout<<"Input IFC statement (0 high, 1 low)";
//cin >>hex>>IFC_BIT ;
//cout<<"Input ATN statement (0 high, 1 low)";
//cin >>hex>>ATN_BIT ;
cout<<"Input DB  statement (0 high, 1 low , for 0x32 input 0x32):";
cin >>hex>>DB ; //from switches , inv logic
 
 
DB_TTL=(byte)DB;    //TTL logic , from internal bus, after reading TTL buffers
}
 
 
void PrintState()
{
//cout <<"REN= ";
//cout<<hex<<REN_BIT<<"; ";
//cout <<"IFC= ";
//cout<<hex<<IFC_BIT<<"; ";
//cout <<"ATN= ";
//cout<<hex<<ATN_BIT<<"; ";         
cout <<"DB= ";
cout<<hex<<DB<<";\n";
 
 
}
 
 
byte nibble_D17=0;
byte nibble_D18=0;
 
byte Q8_D18;
byte Q8_D17;
byte JnK_D17=0;
byte JnK_D18=0;
void RegisterWrite(byte data)
{
 
JnK_D17=0; //by circuit
nibble_D17|= (((data&0b00001000)>>3)<<3); //DIO4      //8
nibble_D17|= (((data&0b00010000)>>4)<<2); //DIO5      //4
nibble_D17|= (((data&0b00100000)>>5)<<1);  //DIO6     //2
nibble_D17|= (((data&0b01000000)>>6)<<0); //DIO7      //1
nibble_D17&=0x0F;
Q8_D17=0x01&((nibble_D17&0b00001000)>>3);
JnK_D18=Q8_D17;//by circuit
 
nibble_D18|= ( 0<<3);  //8 
nibble_D18|= (((data&0b00000001)>>0)<<2); //DIO1   //4 
nibble_D18|= (((data&0b00000010)>>1)<<1); //DIO2   //2
nibble_D18|= (((data&0b00000100)>>2)<<0); //DIO3   //1
nibble_D18&=0x0F;
Q8_D18= 0x01& ((nibble_D18&0b00001000)>>3);
 Q8_D18=0x01&(~Q8_D18);// by circuit, 
 
return;
}
 
void RegisterShift1Clk()
{
    
  JnK_D18=Q8_D17;   
    
  nibble_D17=0x0f&(nibble_D17<<1);
  nibble_D17&=0b00001110;
  nibble_D17|=0x01& JnK_D17;
  Q8_D17=0x01&((nibble_D17&0b00001000)>>3);
  
 
 
 nibble_D18=0x0f&(nibble_D18<<1);
 nibble_D18&=0b00001110;
 nibble_D18|=0x01& JnK_D18;
 
 Q8_D18= 0x01& ((nibble_D18&0b00001000)>>3);
 Q8_D18=0x01&(~Q8_D18);
 
 
 
 
 
}
 
 
void OutData()
 {
byte Dataout= 0x01&Q8_D18;
cout<<" bit= "<<hex<<(int)Dataout<<" \n ";
}
 
 
int main ()
 
{
 InputByte();
PrintState();
cout<<" TTL  data  for  ATN=0, REN=1, IFC=0 after handshake \n ";
 
if(ATN_BIT==0)  {
 RegisterWrite(DB_TTL ); 
cout<<"DB_TTL=0x"<<hex<<(int)DB_TTL<<"\n";
cout<<"13D8 after parallel writing pulse :";
OutData();
 
RegisterShift1Clk();  //1
cout<<"13D8 after 1st shift pulse:(DB bit 0)";
OutData();
RegisterShift1Clk();  //2
cout<<"13D8 after 2nd shift pulse:(DB bit 1)";
OutData();
RegisterShift1Clk();  //3
cout<<"13D8 after 3rd shift pulse:(DB bit 2)";
OutData();
RegisterShift1Clk();  //4
cout<<"13D8 after 4th shift pulse:(DB bit 3)";
 
OutData();
RegisterShift1Clk();  //5
cout<<"13D8 after 5th shift pulse:(DB bit 4)";
OutData();
RegisterShift1Clk();  //6
cout<<"13D8 after 6th shift pulse:(DB bit 5)";
OutData();
RegisterShift1Clk();  //7
cout<<"13D8 after 7th shift pulse:(DB bit 6)";
OutData();
RegisterShift1Clk();  //8
cout<<"13D8 after 8th shift pulse:";
OutData();
cout<<"\n   ";
}
 
}
Добавлено через 18 секунд
Проверить осциллографом.

Добавлено через 4 минуты
Для УП=1 ОЛ , ДУ=0 ОЛ, ОИ=1 эта программа не нормируется , там хардовые дешифраторы зоны и командs ПНМ, ADL (МАП), НПМ, ЗПМ (кажется , есть), кажется, есть СБА и СБУ , другие не имплементованы, приборные по инструкции (заголовок данных -тело данных - ограничитель данных ).
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
22.02.2020, 03:43  [ТС] 85
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x41
DB=0x 41;
DB=0 1 0 0 0 0 0 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x41
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):42
DB=0x 42;
DB=0 1 0 0 0 0 1 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x42
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x43
DB=0x 43;
DB=0 1 0 0 0 0 1 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x43
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x44
DB=0x 44;
DB=0 1 0 0 0 1 0 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x44
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x45
DB=0x 45;
DB=0 1 0 0 0 1 0 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x45
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x46
DB=0x 46;
DB=0 1 0 0 0 1 1 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x46
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 1
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
 
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x4b
DB=0x 4b;
DB=0 1 0 0 1 0 1 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x4b
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x4c
DB=0x 4c;
DB=0 1 0 0 1 1 0 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x4c
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x4d
DB=0x 4d;
DB=0 1 0 0 1 1 0 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x4d
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x49
DB=0x 49;
DB=0 1 0 0 1 0 0 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x49
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x4f
DB=0x 4f;
DB=0 1 0 0 1 1 1 1  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x4f
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 0
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x48
DB=0x 48;
DB=0 1 0 0 1 0 0 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x48
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 1
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 1
 13D8 after 7th shift pulse:(DB bit 6) bit= 0
 13D8 after 8th shift pulse: bit= 1
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x2C
DB=0x 2c;
DB=0 0 1 0 1 1 0 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x2c
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 1
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 0
 13D8 after 7th shift pulse:(DB bit 6) bit= 1
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit 0
Input DB  statement (0 high, 1 low , for 0x32 input 0x32):0x2E
DB=0x 2e;
DB=0 0 1 0 1 1 1 0  (bin)
 TTL  data  for  ATN=0, REN=1, IFC=0 after handshake
 DB_TTL=0x2e
13D8 after parallel writing pulse : bit= 1
 13D8 after 1st shift pulse:(DB bit 0) bit= 1
 13D8 after 2nd shift pulse:(DB bit 1) bit= 0
 13D8 after 3rd shift pulse:(DB bit 2) bit= 0
 13D8 after 4th shift pulse:(DB bit 3) bit= 0
 13D8 after 5th shift pulse:(DB bit 4) bit= 1
 13D8 after 6th shift pulse:(DB bit 5) bit= 0
 13D8 after 7th shift pulse:(DB bit 6) bit= 1
 13D8 after 8th shift pulse: bit= 1
 
  Enter 0 for continue, 1 for exit
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
22.02.2020, 05:06  [ТС] 86
Учитывать , что выход регистров 564ИР9 (аналоги CD4035A)инверсный при С/T=0(вывод 2 D18), прямой при С/T=1 ( pin 2 D17); P/S=0(вывод 7)- serial mode, P/S=1- parallel mode, соединение J и nK дает прямой вход в младший разряд при сдвиге в последовательном режиме . В блоке передней панели иначе соединены выводы С/T.
Вложения
Тип файла: pdf CD4035A-RCA.pdf (157.0 Кб, 6 просмотров)
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
22.02.2020, 08:09  [ТС] 87
Некоторые соображения на тему программы обработки данных приборных сообщений (УП высокое) интерфейса КОП:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
using namespace std; 
typedef unsigned char uint8_t;
 
 
//DB=0 1 0 0 0 0 0 1  (bin)=0x41
 
uint8_t pin[]={ 0,1,1,1,1,1,0,1}; // nbit0 ...nbit6 , 1 , emulation of the pin statement 
#define TRUE 1
#define FALSE 0 
/*********************************/
//stubs for emulating processor pin control in the PC
int count=0; 
uint8_t GetBitnData()
{
    // set pin input, check for 0 
if(pin[count ]==0) {  count++;    return 1 ; }
else { count++;  return 0 ; }
}
void SetBit_data_mode() {
    //set pin as input, send  address of multiplexer for dataline 
}
void SendStrobeSync(){
// send strobe  pulse (L-H-L) on Strobe     
}
 
void SendStrobe_data_accept(){
 // send strobe  pulse (L-H-L) on data_accept line  (dp line), fix time 
}
 /****************************************/
uint8_t GetGPIBByte ()
{ 
 //edit it for ATMega pins , you can use assembler, bitwise operations
 
SetBit_data_mode();  // select port with data line for input
 
uint8_t Byte=0;
 
  
SendStrobeSync();  //1st pulse Sync
if (GetBitnData() ) { Byte|=0x80;} //bit0 ,set bit 7 if pin=0   ,capture after shifting 
 
 
Byte=(Byte>>1); //preparing to the next bit in bit7 
SendStrobeSync();   //2nd pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit1    
   
Byte=(Byte>>1); //preparing to the next bit in bit7 
SendStrobeSync();   //3rd pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit2
 
 
Byte=(Byte>>1);
SendStrobeSync();   //4th pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit3
 
Byte=(Byte>>1);
SendStrobeSync();   //5th pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit4
 
Byte=(Byte>>1);
SendStrobeSync();   //6th pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit5
 
 
Byte=(Byte>>1);
SendStrobeSync();   //7th pulse 
if (GetBitnData() ) { Byte|=0x80;} //bit6
 
Byte=(Byte>>1);
SendStrobeSync();   //8th pulse 
 if (GetBitnData() ) { Byte|=0x80;} //bit7 =1 
 
 
SendStrobe_data_accept(); // ? fix place of the subroutine for circuit
 
return Byte;
}
 
void SelectCommand()
{
    //call if int3
    uint8_t counter=0;
uint8_t byte=GetGPIBByte ();
    //asm("cli");
switch(byte)
{
case 0x41:  //A        , for example "A520.100." or "A520.100,"
                
            while((byte!=0x2c)||(byte!=0x2e)||(counter<=7)) //6 digits + comma
            {
             byte=GetGPIBByte (); counter++;
            }
            //add subs for parsing counter, errors, '.' and ','
           break;
case 0x42: //B    , for example  "B80." or "B80,"
           //add subs 
           break;
           
case 0x43: //C
            //add subs  here
            break;
case 0x44: //D
            //add subs  here
            break;
 
case 0x45: //E
            //add subs  here
            break;
            
case 0x46: //F   ,for example "F1,"
            //add subs  here
            break;
            
case 0x48: //H
            //add subs  here
            break;  
case 0x49: //I
            //add subs  here
            break;                      
case 0x4B: //K
            //add subs  here
            break;  
case 0x4C: //L
            //add subs  here
            break;                  
case 0x4D: //M  ,for example,"M15."
            //add subs  here
            break;      
case 0x4E: //N
            //add subs  here
            break;  
case 0x4F: //F
            //add subs  here
            break;
            
                                                                   
            //... other first chars , subroutines, end chars of commands
default :
    break;
            
 
    
}
    
        //asm("sei");
return; 
}
 
 
int main()
{
int  data;
data=(int)GetGPIBByte ();
cout<<"DB=0x"<<hex<<data<<"\n";
 
int key;
cin>>key;
}
Добавлено через 1 час 36 минут
Код

pin 29  DC_ADDR1
pin 30  DC_ADDR2
pin 31  DC_ADDR3
pin 32  DC_ADDR4
 
pin 32= 0 ттл 
СИ ОПР  0 SyncPool
СИ 1           Sync
СИ ЧМ  3   SyncFM
СИ АМ  4   SyncAM
выкл мерц 5 BlinkOff
СИ ГВЧ  6     SyncHFO //?
си статич команд 7  SyncStatic


pin 32=1 ттл 
адреес=адрес+8

СИ Мерц 0          8 SyncBlink
СИ Режим 2        10 SyncMode
СИ ДПКД  4        12 SyncDPKD
СИ ГВЧ 5            13 SyncHFO // ?
СИ Ат  6               14 SyncAtt
СИ ОЗУ 7             15 SyncRAM

before this address set pin 34 as input , read_data  /read_getcode
ВКд Адрес = 6 - если бит  pin 29 =0 
ЛД Адрес = 7 - если бит  pin 29 =1 
 адрес 8 4 2 1 (29 30 31 32 )> 0100

DC_ADDR1=0     8    
DC_ADDR2=1     4    > 0x40  обратный порядок битов
DC_ADDR3=0     2
DC_ADDR4=0     1
1 8      0       0       0       1      1        1      1        1      1         1       1
2 4      1       1       1       0       0       0       0       1      1         1       1
4 2      0       1       1       0       0       1       1       0      0         1       1
8 1      1       0       1       0       1       0       1       0      1         0       1
           0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
           12      6       14      1       9       5       13    3      11      7        15
                    +                                                                      +
Глушение тактовой  Если адрес=8 4 2 1 (29 30 31 32 )   0100 (не используется)
0x02
DC_ADDR1=0
DC_ADDR2=1
DC_ADDR3=0
DC_ADDR4=0


Запись битов по  импульсам при адресе  мультиплексора  0x07, 
pin34  as output      send inform  bit0...bit7  (8 bit)
 
/ИМ внеш бит  1Д15.1   1_0            bit7
/ЧМ внеш бит  2 Д15.1    2_0          6
/АМ внешн бит  3 Д15.1  4_0          5
ИМ    бит 4 Д15.1   8_0                    4

ЧМ    бит 1 Д15.2   1_1                    3
АМ    бит 2 Д15.2   2_1                    2
СмесВкл    бит 3 Д15.2 4_1            1
1 кгц вкл     бит 4 Д15.2  8_1  //      bit0
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
22.02.2020, 11:25  [ТС] 88
Для проверки формирования кодовых последовательностей по прер1 и прер2, вкд, информ с передней панели можно приделать к GUI-шаблону шифратор (валкодер и ИЧФД валкодера заменена условно на 2 кнопки до уровней и импульсов от направления и нажатия вместо вращения на 1 шаг , переделать минтермы , но сформировать пакеты будет возможно, если прописать дефиниции и подпрограммы):
Вложения
Тип файла: zip fbcodetestGUItemplate.zip (67.3 Кб, 9 просмотров)
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
23.02.2020, 01:30  [ТС] 89
Там во второй микросхеме (контакт 28 )вместо опечатки СИ ГВЧ должно быть СИ ГЗЧ 5 адрес 13 dec SyncLFO

Код
Для подключения 

pin 29  DC_ADDR1 (1, МЗР ПЛ AVR )
pin 30  DC_ADDR2 (2)
pin 31  DC_ADDR3  (4)
pin 32  DC_ADDR4  (8, СЗР ПЛ AVR)


pin 32= 0 ттл 
СИ ОПР  0 SyncPool
СИ 1           Sync
СИ ЧМ  3   SyncFM
СИ АМ  4   SyncAM
выкл мерц 5 BlinkOff
СИ ГВЧ  6     SyncHFO 
си статич команд 7  SyncStatic


pin 32=1 ттл 
адрес=адрес+8

СИ Мерц 0          8 SyncBlink
СИ Режим 2        10 SyncMode
СИ ДПКД  4        12 SyncDPKD
СИ ГЗЧ 5            13 SyncLFO  
СИ Ат  6               14 SyncAtt
СИ ОЗУ 7             15 SyncRAM
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
24.02.2020, 00:20  [ТС] 90
Программа для вывода коэффициентов деления ДДПКД check_ddpkd.cpp (некоторые модули, отделенные звездочками , в программе контроллера могут работать аналогично (оптимизировать, сопрягать с дркугими правильно ) с управлением пинами , а не выводом на консоль )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#include <iostream>
using namespace std;
typedef unsigned char byte;
 
byte Data1[6];
 
void InputByte()
{
    int value;
cout<<"Input 1st digit (0...15)   (12):  ";
cin>>value;
Data1[5]=(byte)value;
cout<<"Input 2nd digit (0...9)    (7):  ";
cin>>value;
Data1[4]=(byte)value;
cout<<"Input 3rd digit (0...9)     (9):  ";
cin>>value;
Data1[3]=(byte)value;
cout<<"Input 4th digit (0...9)     (9):  ";
cin>>value;
Data1[2]=(byte)value;
cout<<"Input 5th digit (0...9)     (9):  ";
cin>>value;
Data1[1]=(byte)value;
cout<<"Input 6th digit (0...9)     (8):  ";
cin>>value;
Data1[0]=(byte)value;
 
}
 
/*****************************************/
 
 
SendStrobeSyncDPKD()
{
//send pulse 12 us on DPKD
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncDPKD(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncDPKD ;\n";
}
 
void SendBitInform(byte value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==1) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==1) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
byte ShiftNibble(byte db1 )
{
db1= (db1>>1);
return db1;
}
 
byte CheckFirstBit(byte db1)
{
 if ((db1&0x01)==1) { return 1 ;} else   { return 0 ; }
}
 
void SendDivCoefDPKD(byte digits_f[6])
{
//SetAddrSyncDPKD();
 byte db1;
 db1=digits_f[0];  //8, for D24
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0 digit1  , LSB
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit1
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit1
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit1
SendStrobeSyncDPKD();
 
 db1=digits_f[1];//9, for D26
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0  digit2
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit2
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit2
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit2
SendStrobeSyncDPKD();
 
 db1=digits_f[2];//9, for D7
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0  digit3
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit3
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit3
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit3
SendStrobeSyncDPKD();
 
 db1=digits_f[3];//9, for D10
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0  digit4
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit4
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit4
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit4
SendStrobeSyncDPKD();
 
 db1=digits_f[4];//7,for D16
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit5
SendStrobeSyncDPKD();
 
 
 db1=digits_f[5];//12, for D20
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 0  digit6
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 1  digit6
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 2  digit6
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }  //bit 3  digit6
SendStrobeSyncDPKD();
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendDivCoefDPKD(Data1);
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 1 минуту
Вариант подпрограмм управления аттенюатором check_att.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <iostream>
using namespace std;
typedef unsigned char  uint8_t;
 
uint8_t AttNum ;
uint8_t Off;
 
void InputByte()
{
    int value;
cout<<"Input att num (0...14)    :  ";
cin>>value;
AttNum =( uint8_t)value; 
cout<<"Input off bit (1 -off , 0- on)    :  ";
cin>>value;
Off =( uint8_t)value; 
}
 
/*****************************************/
 
 
SendStrobeSyncAtt()
{
//send pulse 12 us on DPKD
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncAtt();   
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncAtt ;\n";
}
 
void SendBitInform( uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==1) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==1) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 uint8_t SelectAtt2(uint8_t value)
 {
    uint8_t byte; 
    switch(value )
    {
    case 0:
            byte=0b11110000;
            
            break; // 0 dB
    case 1:
            byte=0b11100001;
            break; //10 dB
    case 2:
            byte=0b11010010;
            break; //20 dB
    case 3:
            byte=0b11000011;
            break;//30 dB
        
    case 4:
            byte=0b10110100;
            break;//40dB
    case 5:
            byte=0b10100101;
            break;//50dB
    case 6:
            byte=0b10010110;
            break;//60dB
    case 7:
            byte=0b10000111;
            break;//70dB
    case 8:
             byte=0b01111000;
             break;//80dB
    case 9:
             byte=0b01101001;
             break;//90dB
    case 10:
             byte=0b01011010;
             break;//100dB
    case 11:
               byte=0b01001011;
             break;//110dB
             
    case 12:
               byte=0b00111100;
             break;//120dB    
             
    case 13:
               byte=0b00101101;
             break;//130dB                
    case 14:
               byte=0b00011110;
             break;//140dB 
        
    }
    
 return byte;   
 }
 
 uint8_t CheckFirstBit( uint8_t db1 )
{
 if ((db1&0x01)==1) { return 1 ;} else   { return 0 ; }
}
 
void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   // 10dB
SendStrobeSyncAtt();
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //20 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //40 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //80 dB
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //10 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //20 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //40 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //80 dB off
SendStrobeSyncAtt();
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
 uint8_t byteatt;
 
byteatt=SelectAtt2(AttNum) ;
SendAttBits(byteatt, Off);
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 8 минут
При переполнении после 9,9 дБ (или при меньше 317 мВ в линейном ) , 19,9 дБ ( менее 101 мВ ), 29,9 дБ (менее 31,7 мВ) и т.д инкрементируется и декрементируется при обратном счете переменная номера ступени ступенчатого аттенюатора , при флаге включения записываются нули (уточнить, инверсная ли логика в кодах по схеме, там на выходе на каждый бит инвертор и токовый ключ на корпус , значит проинвертировать биты в CheckFirstBit( ) или в кодах , открывается при 0 в регистре ).

Добавлено через 2 минуты
На выключение записывать все 1 ( там 0 отрицательной логики) . Проверить по схеме. Значит. переставить значения в CheckFirstBit ().

Добавлено через 15 секунд
На выключение записывать все 1 ( там 0 отрицательной логики) . Проверить по схеме. Значит. переставить значения в CheckFirstBit ().

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
uint8_t SelectAtt2(uint8_t value)
 {
    uint8_t byte; 
    switch(value )
    {
    case 0:
            byte=0b11110000;
            
            break; // 0 dB
    case 1:
            byte=0b11100001;
            break; //10 dB
    case 2:
            byte=0b11010010;
            break; //20 dB
    case 3:
            byte=0b11000011;
            break;//30 dB
        
    case 4:
            byte=0b10110100;
            break;//40dB
    case 5:
            byte=0b10100101;
            break;//50dB
    case 6:
            byte=0b10010110;
            break;//60dB
    case 7:
            byte=0b10000111;
            break;//70dB
    case 8:
             byte=0b01111000;
             break;//80dB
    case 9:
             byte=0b01101001;
             break;//90dB
    case 10:
             byte=0b01011010;
             break;//100dB
    case 11:
               byte=0b01001011;
             break;//110dB
             
    case 12:
               byte=0b00111100;
             break;//120dB    
             
    case 13:
               byte=0b00101101;
             break;//130dB                
    case 14:
               byte=0b00011110;
             break;//140dB 
        
    }
    
 return byte;   
 }
 
 uint8_t CheckFirstBit( uint8_t db1 )
{
 if ((db1&0x01)==1) { return 1 ;} else   { return 0 ; }
}
 
void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
 db1=~db1;
 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   // 10dB
SendStrobeSyncAtt();
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //20 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //40 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //80 dB
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //10 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //20 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //40 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //80 dB off
SendStrobeSyncAtt();
 
 
 
SendMemWrPulse();
return;
}
Добавлено через 2 минуты
В ДДПКД регистры и триггеры неинвертирующие, значит там коды положительной логики ТТЛ (по физике работы ДДПКД).

Добавлено через 13 минут
Аналогично программе для ДПКД организуется для соответствующего адреса мультиплексора стробов и эмуляции режима вывода 34 на вывод 4-битная посылка по СИ ГЗЧ, 12-битная посылка ЦАП ЧМ и коэффициентов деления аттенюатора ЧМ для поддиапазонов, 20-битная посылка коэффициентов ЦАП АМ и ЦАП ОН (1000...317 или 999...319 или 1000...320 в логарифмическом диапазоне ) . Для 8-битной посылки кодов генераторов ВЧ , номеров фильтров, и аттенюатора ЧМ СИ ГВЧ из-за одновибратора имеются особенности уровня строба до этого (иногда эта схема могла быть надежнее, а строб правильнее , но в фирменной ЭВМ особенности реализации программы, из-за которой одновибратор в ДЧ 5.404.023 иногда сбоит, нужно использовать запоминающий двухканальный осциллограф с синхронизацией по СИ ГВЧ для оптимизации работы схемы).

Добавлено через 30 минут
В ДДПКД коды по шине Информ положительной логики, шина информ подключена к выводу 34 (двунаправленный, обычно на вывод , при приеме ЛД и ВКд на ввод ) через инвертор , вывод кодов ДПКД осуществляется в отрицательной логике, потом инвертируется, делаясь положительной , для аттенюатора коды инверсные в положительной логике, для ЦАП ОН и ЦАП АМ коды положительной логики на шине информ, для ГЗЧ коды положительной логики на шине информ, значит в пин 34 выводить отрицательной логикой и инверсными кодами , но отрицательной логикой в аттенюаторе (все 8 бит= 1 ПЛ на шине информ в аттенюаторе выключают все электромагниты , команда выкл выход ) . Контроль вывода строба по выходу 36 вводом через вывод 33 можно не имплементовывать (не подключать вывод 33 (плата) на к нашему контроллеру ).

Добавлено через 2 минуты
Код
 для ДПКД
byte CheckFirstBit(byte db1)
{
 if ((db1&0x01)==0) { return 1 ;} else   { return 0 ; }
}




...
//кодирует данные, выводимые в  пин 34 в теминах отрицательной логики , проверяя младший бит 
uint8_t CheckFirstBit( uint8_t db1 )
{
 if ((db1&0x01)==0) { return 1 ;} else   { return 0 ; }
}
 
void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
 db1=~db1;  //используется
Добавлено через 5 минут
Для мультиплексора стробов на пине 34 логика положительная для положительных импульсов стробов сдвига (на вывод), на ввод(ЛД (выход 7, 1 на пине 29), ВКД(выход 6, 0 на пине 29) с учетом других битов на схеме сравнения, разрешающих работу мультиплексора-демультиплексора ) и особенностей передней панели проверять (кажется , отрицательная, на ввод).

Добавлено через 1 час 23 минуты
тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/***************************************/
 uint8_t SelectAtt2(uint8_t value)
 {
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )
    
    
    uint8_t byte; 
    switch(value )
    {
    case 0:
            byte=0b11110000;
            
            break; // 0 dB
    case 1:
            byte=0b11100001;
            break; //10 dB
    case 2:
            byte=0b11010010;
            break; //20 dB
    case 3:
            byte=0b11000011;
            break;//30 dB
        
    case 4:
            byte=0b10110100;
            break;//40dB
    case 5:
            byte=0b10100101;
            break;//50dB
    case 6:
            byte=0b10010110;
            break;//60dB
    case 7:
            byte=0b10000111;
            break;//70dB
    case 8:
             byte=0b01111000;
             break;//80dB
    case 9:
             byte=0b01101001;
             break;//90dB
    case 10:
             byte=0b01011010;
             break;//100dB
    case 11:
               byte=0b01001011;
             break;//110dB
             
    case 12:
               byte=0b00111100;
             break;//120dB    
             
    case 13:
               byte=0b00101101;
             break;//130dB                
    case 14:
               byte=0b00011110;
             break;//140dB 
        
    }
    
 return byte;   
 }
 
 uint8_t CheckFirstBit( uint8_t db1 )
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )
 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   // 10dB
SendStrobeSyncAtt();
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   //20 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }     //40 dB
SendStrobeSyncAtt();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }     //80 dB
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }     //10 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }    //20 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }    //40 dB off
SendStrobeSyncAtt();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   //80 dB off
SendStrobeSyncAtt();
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
24.02.2020, 02:01  [ТС] 91
Код
Input 1st digit (0...15)   (12):  12
Input 2nd digit (0...9)    (7):  7
Input 3rd digit (0...9)     (9):  9
Input 4th digit (0...9)     (9):  9
Input 5th digit (0...9)     (9):  9
Input 6th digit (0...9)     (8):  8
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncDPKD ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include <iostream>
using namespace std;
typedef unsigned char byte;
 
byte Data1[6];
 
void InputByte()
{
    int value;
cout<<"Input 1st digit (0...15)   (12):  ";
cin>>value;
Data1[5]=(byte)value;
cout<<"Input 2nd digit (0...9)    (7):  ";
cin>>value;
Data1[4]=(byte)value;
cout<<"Input 3rd digit (0...9)     (9):  ";
cin>>value;
Data1[3]=(byte)value;
cout<<"Input 4th digit (0...9)     (9):  ";
cin>>value;
Data1[2]=(byte)value;
cout<<"Input 5th digit (0...9)     (9):  ";
cin>>value;
Data1[1]=(byte)value;
cout<<"Input 6th digit (0...9)     (8):  ";
cin>>value;
Data1[0]=(byte)value;
 
}
 
/*****************************************/
 
 
SendStrobeSyncDPKD()
{
//send pulse 12 us on DPKD
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncDPKD(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncDPKD ;\n";
}
 
void SendBitInform(byte value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
byte ShiftNibble(byte db1 )
{
db1= (db1>>1);
return db1;
}
 
byte CheckFirstBit(byte db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendDivCoefDPKD(byte digits_f[6])
{
//SetAddrSyncDPKD();
// for bit=1 in the register set 0  on the pin34 as output , 1-st bit of the LSB digit of the dividing coeff.  first 
 byte db1;
 db1=digits_f[0];  //8, for D24
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0 digit1  , LSB
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit1
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit1
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit1
SendStrobeSyncDPKD();
 
 db1=digits_f[1];//9, for D26
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit2
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit2
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit2
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit2
SendStrobeSyncDPKD();
 
 db1=digits_f[2];//9, for D7
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit3
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit3
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit3
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit3
SendStrobeSyncDPKD();
 
 db1=digits_f[3];//9, for D10
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit4
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit4
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit4
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit4
SendStrobeSyncDPKD();
 
 db1=digits_f[4];//7,for D16
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit5
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit5
SendStrobeSyncDPKD();
 
 
 db1=digits_f[5];//12, for D20
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit6
SendStrobeSyncDPKD();
 
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit6
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit6
SendStrobeSyncDPKD();
 
db1=ShiftNibble( db1 );
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit6
SendStrobeSyncDPKD();
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendDivCoefDPKD(Data1);
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 2 минуты
Код
Input att num (0...14)    :  2
Input off bit (1 -off , 0- on)    :  0
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit 0
Input att num (0...14)    :  0
Input off bit (1 -off , 0- on)    :  0
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAtt ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit 0
Input att num (0...14)    :  0
Input off bit (1 -off , 0- on)    :  1
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAtt ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit
Добавлено через 41 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <iostream>
using namespace std;
typedef unsigned char uint8_t;
 typedef unsigned int uint16_t;
uint16_t DACVref;
uint8_t  DACVrefH;
uint8_t DACVrefL;
 
uint16_t DAC_AM;
uint8_t DAC_AM_H;
uint8_t DAC_AM_L;
 
void InputByte()
{
 int value;
cout<<"Input DAC Vref(0 or 317...1000)   (1000):  ";
cin>>value;
DACVref=(uint16_t)value;
 
DACVrefH=(uint8_t) (DACVref>>8);  //emulate data from lookup-table counter-parser  
DACVrefL=(uint8_t) (DACVref&0x00FF);  //emulate data from lookup-table counter-parser  
 
cout<<"Input AM coefs  ";
cin>>value;
DAC_AM=(uint16_t)value;
DAC_AM_H=(uint8_t) (DAC_AM>>8);  //emulate data from lookup-table counter-parser  
DAC_AM_L=(uint8_t) (DAC_AM&0x00FF);  //emulate data from lookup-table counter-parser  
 
}
 
/*****************************************/
 
 
SendStrobeSyncAM()
{
//send pulse 12 us on AM
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncAM(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncAM ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
for  1 on the inform bus set  pin 34 low(0)
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
uint8_t CheckFirstBit(uint8_t db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendDAC_AM_VRefCoefs( uint8_t DACVrefH, uint8_t DACVrefL, uint8_t DACAMH, uint8_t  DACAML      )
{
// for send 0  to the trigger AM/Vref  set 1   on the pin 34 and send SyncAM pulse 
 
uint8_t db1;
 
//send DAC Vref 0...9 coefs , 1000= 0x03e8=0b 0000 0011 1110 1000 
 db1=DACVrefL;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit 0 DAC VRef
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 1 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC VRef  
SendStrobeSyncAM();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC VRef  
SendStrobeSyncAM();
 
db1= DACVrefH;  
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC VRef  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC VRef  
SendStrobeSyncAM();
 
 //send DAC AM coeffs 0...9
 
//send DAC Vref 0...9 coefs 
 db1=DACAML;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit 0 DAC AM
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 1 DAC AM 
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC AM  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC AM  
SendStrobeSyncAM();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC AM
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC AM  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC AM 
SendStrobeSyncAM();
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC AM 
SendStrobeSyncAM();
 
db1=DACAMH; 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC AM  
SendStrobeSyncAM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC AM 
SendStrobeSyncAM();  //20 pulses StrobeSyncAM 
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendDAC_AM_VRefCoefs(  DACVrefH,  DACVrefL,   DAC_AM_H,    DAC_AM_L      );
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 51 секунду
Код
//send DAC Vref 0...9 coefs , 1000= 0x03e8=0b 0000 0011 1110 1000 


Input DAC Vref(0 or 317...1000)   (1000):  1000
Input AM coefs  800
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit
Добавлено через 1 минуту
Код
Input DAC Vref(0 or 317...1000)   (1000):  317
Input AM coefs  0
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin34)=0, Inform=1  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;
 nInform(pin 34)=1, Inform=0  Pulse 1 SyncAM ;

 MemWr(pin 37)=1
 delay 20 us
 MemWr(pin 37)=0
  Enter 0 for continue, 1 for exit
Добавлено через 40 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include <iostream>
using namespace std;
typedef unsigned char uint8_t;
 typedef unsigned int uint16_t;
uint16_t DAC_FM;
uint8_t  DAC_FM_H;
uint8_t DAC_FM_L;
 
uint8_t DAC_Atcoefs;
 
void InputByte()
{
 int value;
 
 /*
 
 320MHz 100/80=1.25
 320MHz 800/640=1.25
 160MHz 500/800=0.625
 250/800=0.3125
 ..., fix
 800=0b 0011 0010 0000   
 */
cout<<"Input DAC_FM   (796):  ";//796/4=199 , 4/4=1 ,800, 796,640,320,160,80,796,400,80, 4 K~=5 , bit=0,bit 1=0
cin>>value;
DAC_FM=(uint16_t)value;
 
DAC_FM_H=(uint8_t) (DAC_FM>>8);  //emulate data from lookup-table counter-parser  
DAC_FM_L=(uint8_t) (DAC_FM&0x00FF);  //emulate data from lookup-table counter-parser  
 
cout<<"Input DAC coefs  ";
cin>>value;
DAC_Atcoefs=(uint8_t)value;
 
 
}
 
/*****************************************/
 
 
SendStrobeSyncFM()
{
//send pulse 12 us on FM
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncFM(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncFM ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
for  1 on the inform bus set  pin 34 low(0)
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
uint8_t CheckFirstBit(uint8_t db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendDAC_FM_DAC( uint8_t DACFMH, uint8_t DACFML, uint8_t  DACAt     )
{
// for send 0  to the trigger FM/At  set 1   on the pin 34 and send SyncAM pulse 
 
uint8_t db1;
 
 
 db1=DACAt;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit '8' DAC at, no data
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '4' DAC at
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '2' DAC at
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '1' DAC at 
SendStrobeSyncFM();
 
 
db1= DACFML;
 db1= (db1>>1); 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC FM
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC FM  
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC FM
SendStrobeSyncFM();
 
db1= DACFMH;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC FM  
SendStrobeSyncFM();  //12 pulses 
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendDAC_FM_DAC(  DAC_FM_H,  DAC_FM_L,  DAC_Atcoefs     );
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
При включении частот меньше 320 МГц, девиаций меньше 100 кГц и 10,0 кГц смотреть умножение , обратное коэффициенту деления коэффициентов , коэффициенты вводятся с учетом значений для ЦАП , 2 бита обрезано в программе , при необходимости можно переделать на только один байт ЧМ и делить на 4 абсоютные коэффициенты умножения ЦАП (так более фактически они представлены ).

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream>
using namespace std;
typedef unsigned char uint8_t;
 typedef unsigned int uint16_t;
uint8_t DAC_FM;
//uint8_t  DAC_FM_H;
//uint8_t DAC_FM_L;
 
uint8_t DAC_Atcoefs;
 
void InputByte()
{
 int value;
 
 /*
 800/4=200
 
 320MHz 100/80=1.25 
 320MHz 800/640=1.25
 160MHz 500/800=0.625
 250/800=0.3125
 ..., fix
 800=0b 0011 0010 0000   
 */
cout<<"Input DAC_FM   (199):  "; 
cin>>value;
DAC_FM=(uint8_t)value;
 
//DAC_FM_H=(uint8_t) (DAC_FM>>8);  //emulate data from lookup-table counter-parser  
//DAC_FM_L=(uint8_t) (DAC_FM&0x00FF);  //emulate data from lookup-table counter-parser  
 
cout<<"Input DAC coefs  ";
cin>>value;
DAC_Atcoefs=(uint8_t)value;
 
 
}
 
/*****************************************/
 
 
SendStrobeSyncFM()
{
//send pulse 12 us on FM
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncFM(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncFM ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
for  1 on the inform bus set  pin 34 low(0)
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
uint8_t CheckFirstBit(uint8_t db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
//void SendDAC_FM_DAC( uint8_t DACFMH, uint8_t DACFML, uint8_t  DACAt     )
void SendDAC_FM_DAC( uint8_t DACFM ,   uint8_t  DACAt     )
{
// for send 0  to the trigger FM/At  set 1   on the pin 34 and send SyncAM pulse 
 
uint8_t db1;
 
 
 db1=DACAt;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit '8' DAC at, no data
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '4' DAC at
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '2' DAC at
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '1' DAC at 
SendStrobeSyncFM();
 
 
db1= DACFM ;
 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC FM
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC FM  
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC FM
SendStrobeSyncFM();
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC FM 
SendStrobeSyncFM();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC FM  
SendStrobeSyncFM();  //12 pulses 
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendDAC_FM_DAC(  DAC_FM ,    DAC_Atcoefs     );
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
24.02.2020, 07:02  [ТС] 92
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
using namespace std;
typedef unsigned char uint8_t;
 typedef unsigned int uint16_t;
 
 
uint8_t NFO_bits;
uint8_t NFO_enabled;
 
 
 
void InputByte()
{
 int value;
cout<<"Input Nosc(0 ...7)   (1):  ";
cin>>value;
NFO_bits=(uint8_t)value;
 
 
 
cout<<"Input /E bit( 0 , 1) ";
cin>>value;
NFO_enabled=(uint8_t)value;
 
 
}
 
/*****************************************/
 
 
void SendStrobeSyncNFO()
{
//send pulse 12 us on NFO
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncNFO(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncNFO ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
for  1 on the inform bus set  pin 34 low(0)
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
uint8_t CheckFirstBit(uint8_t db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendNFOBits( uint8_t NFObits, uint8_t NFOenabled    )
{
 
 
uint8_t db1;
 
 
 db1=NFOenabled;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit nE
SendStrobeSyncNFO();
 
db1= NFObits;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '1' NFO
SendStrobeSyncNFO();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '2' NFO
SendStrobeSyncNFO();
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '4'   NFO
SendStrobeSyncNFO();
 
 
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendNFOBits( NFO_bits, NFO_enabled  );
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
25.02.2020, 00:32  [ТС] 93
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <iostream>
using namespace std;
 typedef unsigned char uint8_t ;
 
uint8_t  Bits_LFO;
uint8_t  Bits_Modul;
uint8_t  Bits_Out;
 
void InputByte()
{
    int value;
cout<<"Input Byte LFO  :  ";
cin>>value;
Bits_LFO=(uint8_t)value;
cout<<"Input Byte Mod. :  ";
cin>>value;
Bits_Modul=(uint8_t)value;
cout<<"Input Byte out :  ";
cin>>value; 
Bits_Out=(uint8_t)value; 
}
 
/*****************************************/
 
 
SendStrobeSyncMode()
{
//send pulse 12 us on 
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncMode(); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncMode ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
uint8_t  CheckFirstBit(uint8_t  db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
void SendModeBits(uint8_t BitsOut, uint8_t BitsModul , uint8_t BitsLFO)
{
//SetAddrSyncMode();
// 
 uint8_t db1;
 db1=BitsOut;  
 
 //db1= (db1>>1);
 //db1= (db1>>1);
 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1 Out 
SendStrobeSyncMode(); //1
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //8 +6dB
SendStrobeSyncMode();  //2
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //4 uV
SendStrobeSyncMode(); //3
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //2 mV
SendStrobeSyncMode();//4
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1 dBV
SendStrobeSyncMode();//5
 
 
db1= BitsModul;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // no
SendStrobeSyncMode();//6
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //no
SendStrobeSyncMode();//7
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //PM ext
SendStrobeSyncMode();//8
 
  db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //AM ext
SendStrobeSyncMode();//9
 
 
  db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //FM ext
SendStrobeSyncMode();//10
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //PM
SendStrobeSyncMode();//11
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //AM
SendStrobeSyncMode();//12
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //FM
SendStrobeSyncMode();//13
 
 
db1=BitsLFO;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //10k
SendStrobeSyncMode();//14
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //3,4k
SendStrobeSyncMode();//15
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //2,5k
SendStrobeSyncMode();//16
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1k
SendStrobeSyncMode();//17
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,4k
SendStrobeSyncMode();//18
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,3k
SendStrobeSyncMode();//19
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,2k
SendStrobeSyncMode();//20
 
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,05k
SendStrobeSyncMode();//21
 
 
 
SendMemWrPulse();
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendModeBits(Bits_Out, Bits_Modul ,  Bits_LFO);
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 14 минут
Второй регистр для СИ опроса и прерывания 2 (клавиатура ) в передней панели с инверсными выходами(вывод инверсии на корпус), первый с прямыми (вывод инверсии выхода на +5В), перед младшим битом приписывается код направления валкодера, который вдвигается в младший разряд и инвертируется вторым регистром, при вращении в соответствующую сторону на одну позицию сопровождается другим прерывнием прер1 . При сдвиге в этом участвует СИ ОПР (опрос SyncPool) вместо инициирования опроса счетчика кнопкой, читается и обрабатывается валкодерным прерыванием только последний бит .

Добавлено через 1 минуту
При ДУ коды с клавиатуры и валкодера блокируются .

Добавлено через 2 часа 58 минут
Код
#define ADDR_ATT   //подставить нужные значения
#define ADDR_NFO 
#define ADDR_AM_VREF
#define ADDR_MODE
#define ADDR_FM
#define ADDR_DPKD



void SendBitInform(byte value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/

if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}


}

void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix

}

byte CheckFirstBit(byte db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}

/********************************/
SendStrobeSync (uint8_t addr1)
{
//send pulse 12 us on  
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSync (v=addr1); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 Sync  ;\n";
}
...
 uint8_t Flag10dB=0;


 uint8_t SelectAtt2(uint8_t value)
 {
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )
	
 	
 	uint8_t byte; 
 	switch(value )
 	{
 	case 0:
	        byte=0b11110000;
	        Flag10dB=0;  //1000...317, DAC Vref decoder off
	        break; // 0 dB
	case 1:
		    byte=0b11100001;
                            Flag10dB=1; //999...319 , DAC Vref decoder on
	        break; //10 dB
    case 2:
    	    byte=0b11010010;
                       Flag10dB=0; 
	        break; //20 dB
    case 3:
    	    byte=0b11000011;
                       Flag10dB=1; 
	        break;//30 dB
    	
    case 4:
    	    byte=0b10110100;
                       Flag10dB=0; 
	        break;//40dB
    case 5:
    	    byte=0b10100101;
                       Flag10dB=1; 
	        break;//50dB
    case 6:
    	    byte=0b10010110;
                          Flag10dB=0; 
	        break;//60dB
    case 7:
    	    byte=0b10000111;
                         Flag10dB=1; 
	        break;//70dB
    case 8:
    	     byte=0b01111000;
                          Flag10dB=0; 
	         break;//80dB
    case 9:
    	     byte=0b01101001;
                            Flag10dB=1; 
	         break;//90dB
    case 10:
    	     byte=0b01011010;
                             Flag10dB=0; 
	         break;//100dB
    case 11:
               byte=0b01001011; 
                              Flag10dB=1; 
	         break;//110dB
	         
    case 12:
               byte=0b00111100;
                               Flag10dB=0; 
	         break;//120dB    
			 
    case 13:
               byte=0b00101101;
                               Flag10dB=1; 
	         break;//130dB    		      
    case 14:
               byte=0b00011110;
                              Flag10dB=0; 
	         break;//140dB 
 		
	}
 	
 return byte;	
 }

void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )

if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   // 10dB
SendStrobeSync(ADDR_ATT); 

db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //20 dB
SendStrobeSync(ADDR_ATT); 


db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //40 dB
SendStrobeSync(ADDR_ATT); 


db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //80 dB
SendStrobeSync(ADDR_ATT); 

db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //10 dB off
SendStrobeSync(ADDR_ATT); 

db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //20 dB off
SendStrobeSync(ADDR_ATT); 

db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //40 dB off
SendStrobeSync(ADDR_ATT); 

db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //80 dB off
SendStrobeSync(ADDR_ATT); 

 

SendMemWrPulse();
return;
}

удобно сделать общую подпрограмму отправки стробов с подставляемым адресом , программу отправки и приема битов с заданных адресов для данных
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
25.02.2020, 06:02  [ТС] 94
Уточнить коды адресов мультиплексоров для нашего включения МК с учетом того , что вход 6 разрешения 564КП2 инверсный (включается нулем ) , а коды напряжений на входах схемы сравнения заданы схемой (там в ЭВМ для шины с отрицательной логикой их показали, а в ЗГ инверсия показана, в некоторых сериях бывают опечатки ).
Вложения
Тип файла: pdf 564kp2.pdf (254.0 Кб, 6 просмотров)
Тип файла: pdf 564kp1.pdf (272.6 Кб, 6 просмотров)
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
25.02.2020, 06:52  [ТС] 95
Пересмотреть логику схемы сравнения с учетом подключения битов в схеме и правильно пронумеролвать .

Добавлено через 2 минуты
Да,
Код
pin 32= 0 ттл 
СИ ОПР  0 SyncPool
СИ 1           Sync
СИ ЧМ  3   SyncFM
СИ АМ  4   SyncAM
выкл мерц 5 BlinkOff
СИ ГВЧ  6     SyncHFO 
си статич команд 7  SyncStatic


pin 32=1 ттл 
адрес=адрес+8

СИ Мерц 0          8 SyncBlink
СИ Режим 2        10 SyncMode
СИ ДПКД  4        12 SyncDPKD
СИ ГЗЧ 5            13 SyncLFO  
СИ Ат  6               14 SyncAtt
СИ ОЗУ 7             15 SyncRAM
Добавлено через 42 секунды
Для схемы сравнения ,ВКД и клавиатуры (когда включает на ввод) уточнить.

Добавлено через 3 минуты
"Вес" битов нашего МК выбрать под ТТЛ обозначения на мультиплексорах D18,D19, для схемы включения D13,D14 уточнить логику работы и правильно задать адрес на ввод , в программе сопровождать включением вывода 34 на ввод( когда вывод 6 D14 равен 0 ТТЛ).

Добавлено через 41 минуту
Ключи микросхемы 564КТ3 (аналог 561 КТ3, 176КТ1( которой нужно 9 В вместо 3...15В ) ) в ключе +6дБ не оппозитные, в отличие от CD4066 . Правильный аналог (прототип ) СD4016,он же аналог 176КТ1 но он,кажется, снят с производства . Оппозитные 4066 включаются 2 последовательно вход ко входу , иначе могут повредить схему. Некоторые фирмы после реформы и внедрения ОК012-93 неправильно пишут аналог 561(5564)КТ3 или не указывают звездочку возле обозначения CD4066.
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
27.02.2020, 01:19  [ТС] 96
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream>
using namespace std;
 typedef unsigned char uint8_t ;
 
uint8_t  Bits_Addr;
uint8_t   Digit;
uint8_t  Bit_Comma;
 
void InputByte()
{
    int value;
cout<<"Input bits Addr  (0...15) :  ";
cin>>value;
Bits_Addr=(uint8_t)value;
cout<<"Input Byte digit (0...9) :  ";
cin>>value;
Digit=(uint8_t)value;
cout<<"Input Bits_Comma (0, 1):  ";
cin>>value; 
Bit_Comma=(uint8_t)value; 
}
 
/*****************************************/
 
 
SendStrobeSync(uint8_t addr)
{
//send pulse 12 us on 
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrSyncMode(addr); 
SetBit36Low();
delay_us(12);
SetPin36High();
*/
cout<<" Pulse 1 SyncMode ;\n";
}
 
void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr(pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 37)=0 ";   //fix
 
}
/***************************************/
 
 
 
uint8_t SevenSegment(uint8_t Digit  , uint8_t Comma )
{
 
/*
LSB  e; c; b; d; f; g; a; h  MSB
     a 
b        c
     d
e        f
     g
              h
1 on the inform bus means turn on segment
                                          ecbdfga; 
*/
uint8_t db=0;
 
switch (Digit){
                 //hagfdbce
case 0 :     db= 0b01110111;  break ;  // a,b,e,g,f,c=1
case 1 :     db= 0b00010010;  break ;  // c,f=1
case 2:      db= 0b01101011;  break;   // a,c,d,e,g=1
case 3:      db= 0b01111010;  break;   // a,c,d,f,g=1
case 4 :     db= 0b01011110;  break;   // a,b,c,d,f=1
case 5:      db= 0b01111100;  break;   // a,b,d,f,g=1
case 6:      db= 0b01111101;  break;   // a,b,d,e,f,g=1
case 7:      db= 0b01010010;  break;   // a,c,f =1
case 8:      db= 0b01111111;  break;   //a,b,c,d,e,f,g =1
case 9:      db= 0b01111110;  break;   //a,d,c,d,f=1
}
 
 
if(Comma==1) { db|=0b10000000; }// |= h
return db;
}  
 
void SendBitsRAM(uint8_t BitsAddr, uint8_t Digit , uint8_t BitComma)
{
/*
     a 
b        c
     d
e        f
     g
              h
1 on the inform bus means turn on segment
 
first sent bit 8; 4; 2 ; 1 ; e; c; b; d; f; g; a; h; last sent bit (total 12 pulses sync)
 
x x x x x x x      x x x         x x      x x x x
for 1 on the inform bus send 0 to pin 34 ( and send strobe after it )
*/
  
 uint8_t db1;
 
 db1=SevenSegment(Digit  , BitComma);  
 
#define ADDR_SYNCRAM 15
 
if ((BitsAddr&0x08)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 8    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM); //1
 
if ((BitsAddr&0x04)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 4    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM);  //2
 
if ((BitsAddr&0x02)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 2   ,   fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM); //3
 
if ((BitsAddr&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 1  , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM);//4
 
 
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //e
SendStrobeSync ( ADDR_SYNCRAM);//5        bit 0 ,LSB 
 
 
db1=  (db1>>1);
if ((db1&0x01)==0 ) { SendBitInform(1);  }  else { SendBitInform(0); }  //c
SendStrobeSync ( ADDR_SYNCRAM);//6        bit 1
 
 db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //b
SendStrobeSync ( ADDR_SYNCRAM);//7        bit 2
 
 db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //d
SendStrobeSync ( ADDR_SYNCRAM);//8       bit 3
 
  db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //f
SendStrobeSync ( ADDR_SYNCRAM);//9      bit 4
 
 
  db1= (db1>>1);
if ((db1&0x01)==0 ) { SendBitInform(1);  }  else { SendBitInform(0); }  //g
SendStrobeSync ( ADDR_SYNCRAM);//10     bit 5
 
 
db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //a
SendStrobeSync ( ADDR_SYNCRAM);//11    bit 6
 
db1=(db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //h
SendStrobeSync ( ADDR_SYNCRAM);//12   bit 7
 
 
 
SendMemWrRAMPulse(); //pin 39  pulse 1 WR RAM
return;
}
 
 
 /***************************************/
 
 
int main ()
 
{
    label1:
 InputByte();
SendBitsRAM( Bits_Addr,  Digit ,   Bit_Comma);
cout<<"\n  Enter 0 for continue, 1 for exit ";
int key;
cin>>key;
if (key==0) { goto label1;}
 return 0;
}
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.void SendBitInform(uint8_t value)
{
/*
SetPin37Low();
SetPin39Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrRAMPulse(){
/*
SetPin36High();
SetPin39High();
delay_us(20);
SetPin39Low();
*/
cout<<"\n MemWr(pin 39)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 39)=0 ";   //fix
 
}
Добавлено через 18 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define ADDR_SYNCBLINK 8
void SendBitsBlink(uint8_t BitsAddr)
{
/*
first sent bit 3  2   1  0 last sent bit 
for 1 on the inform bus send 0 to pin 34 ( and send strobe after it )
*/
  
 uint8_t db1;
 
 
 
if ((BitsAddr&0x08)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 8    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK); //1
 
if ((BitsAddr&0x04)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 4    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK);  //2
 
if ((BitsAddr&0x02)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 2   ,   fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK); //3
 
if ((BitsAddr&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 1  , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK);//4
 
 //without SyncWRRAM pulse , use after send all digits for blink control with TurnOnBlink(),TurnOffBlink(); 
return;
}
Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void SendBitInform(byte value)
{
/*
SetPin37Low();
SetPin39Low();
SetPin36High();
SetPin34Out(); 
SetAddrInform(); 
if(value==0) {  SetBit34Low(); } else  {  SetBit34High(); }
*/
 
if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
/*
SetPin36High();
SetPin39Low();
SetPin37High();
delay_us(20);
SetPin37Low();
*/
cout<<"\n MemWr (pin 37)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr (pin 37)=0 ";   //fix
 
}
 
 
void SendMemRAMWrPulse(){
/*
SetPin36High();
SetPin37Low();
SetPin39High();
delay_us(20);
SetPin39Low();
*/
cout<<"\n MemWr(pin 39)=1 "; 
cout<<"\n delay 20 us"; 
cout<<"\n MemWr(pin 39)=0 ";   //fix
 
}
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
27.02.2020, 02:31  [ТС] 97
siosubs.h может выглядеть примерно так (пока без статических команд и ввода , потом допишу)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
//#include <>
 
 
 
#define ADDR_SYNC_POOL 0
#define ADR_SYNC  1
 
 
#define ADDR_AM_VREF 4
#define ADDR_FM        3
#define ADDR_BLINKOFF 5
#define ADDR_HFO     6
#define ADDR_SYNCSTATIC     7
 
#define ADDR_SYNCBLINK 8
#define ADDR_MODE  10
#define ADDR_DPKD   12
#define ADDR_LFO      13
#define ADDR_ATT      14 
#define ADDR_SYNCRAM 15
 
 #define PORT_ADDR PORTB
 #define DDR_ADDR DDRB
  #define PIN_ADDR PINB
  
  #define PIN23_DDR DDRD
  #define PIN23_PORT PORTD
  #define PIN23_OUT  PORTD4
  
  
  //fix pins 
#define PIN37_DDR DDRD
#define PIN37_PORT PORTD
#define OUT_PIN37 PORTD0
#define PIN39_DDR DDRD
#define PIN39_PORT DDRD
#define OUT_PIN39 PORTD1
#define PIN36_DDR DDRD
#define PIN36_PORT PORTD
#define OUT_PIN36 PORTD2
 
#define PORT_PIN34  PORTD
#define PIN34_DDR DDRD
#define OUT_PIN34 PORTD3
#define IN_PIN34 PIND3
 
 
void SetPin23High()
{
    PIN23_DDR|=(1<<PIN23_OUT);
    PIN23_PORT|=(1<<PIN23_OUT);
}
 
void SetPin23Low()
{
    PIN23_DDR|=(1<<PIN23_OUT);
    PIN23_PORT&=~(1<<PIN23_OUT);
}
 
 
 void SetPin37Low()
 {
    PIN37_DDR|=(1<<OUT_PIN37) ;
    PIN37_PORT&=~(1<<OUT_PIN37);
     return;
     
 }
 void SetPin37High()
 {
     PIN36_DDR|=(1<<OUT_PIN36) ;
     PIN36_PORT|= (1<<OUT_PIN37);
     return;
     
 }
 
  void SetPin36Low()
 {
    PIN36_DDR|=(1<<OUT_PIN36) ;
    PIN36_PORT&=~(1<<OUT_PIN36);
     return;
     
 }
 void SetPin36High()
 {
     PIN36_DDR|=(1<<OUT_PIN36) ;
     PIN36_PORT|= (1<<OUT_PIN36);
     return;
     
 }
 
 
 
 void SetPin39Low()
 {
     PIN39_DDR|=(1<<OUT_PIN39) ;
     PIN39_PORT&=~(1<<OUT_PIN39);
     return;
     
 }
 void SetPin39High()
 {
     PIN39_DDR|=(1<<OUT_PIN39) ;
     PIN39_PORT|= (1<<OUT_PIN39);
     return;
     
 }
 
 
void SetPin34Out() 
{
    PIN34_DDR|=(1<<OUT_PIN34);
    return;
    
}
 
void SetPin34Input()
{
    PIN34_DDR&=~(1<<OUT_PIN34);
    return;
    
}
 
 
void SetPin34High()
{
     PORT_PIN34 |=(1<<OUT_PIN34);
    return;
    
}
 
void SetPin34Low()
{
    PORT_PIN34 &=~(1<<OUT_PIN34);
    return;
    
}
 
void SetAddrInform()
{
    //fix
     DDR_ADDR|=0x0f;
 PORT_ADDR|=0x0f;
     uint8_t tmp;
      tmp=PIN_ADDR&0xf0 ;
     PORT_ADDR=tmp|(0x02 );
    
}
 
 
 
void SetAddrSync(uint8_t addr)
{
    //fix
    
    DDR_ADDR|=0x0f; 
    PORT_ADDR|=0x0f;
    uint8_t tmp;
    tmp=PIN_ADDR&0xf0 ;
    PORT_ADDR=tmp|(addr&0x0f);
         
 
    
    
}
void SendBitInform(uint8_t value)
{
 
SetPin37Low();
SetPin39Low();
SetPin36High();
SetPin34Out(); 
 SetAddrInform(); 
if(value==0) {  SetPin34Low(); } else  {  SetPin34High(); }
 
 
//if(value==0) {  cout<<" nInform(pin34)=0, Inform=1 "; } else  { cout<<" nInform(pin 34)=1, Inform=0 " ;}
 
 
}
 
void SendMemWrPulse(){
 
SetPin36High();
SetPin39Low();
SetPin37High();
_delay_us(20);
SetPin37Low();
 
//cout<<"\n MemWr (pin 37)=1 "; 
//cout<<"\n delay 20 us"; 
//cout<<"\n MemWr (pin 37)=0 ";   //fix
 
}
 
 
void SendMemWrRAMPulse(){
 
SetPin36High();
SetPin37Low();
SetPin39High();
_delay_us(20);
SetPin39Low();
 
//cout<<"\n MemWr(pin 39)=1 "; 
//cout<<"\n delay 20 us"; 
//cout<<"\n MemWr(pin 39)=0 ";   //fix
return;
}
 
uint8_t CheckFirstBit(uint8_t db1)
{
 if ((db1&0x01)==0) { return 0 ;} else   { return 1 ; }
}
 
/********************************/
void SendStrobeSync (uint8_t addr1)
{
//send pulse 12 us on  
 
SetPin37Low();
SetPin39Low();
SetPin36High();
SetPin34Out(); 
 SetAddrSync ( addr1); 
SetPin36Low();
_delay_us(12);
SetPin36High();
 _delay_us(12);
//cout<<" Pulse 1 Sync  ;\n";
}
 
 
 
 
 
 
 
/*************************************/
 
 
void SendDivCoefDPKD(uint8_t digits_f[6])
{
 
// for bit=1 in the register set 0  on the pin34 as output , 1-st bit of the LSB digit of the dividing coeff.  first 
 uint8_t db1;
 
 
 
 db1=digits_f[0];  //8, for D24
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0 digit1  , LSB
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit1
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit1
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit1
SendStrobeSync(ADDR_DPKD);
 
 db1=digits_f[1];//9, for D26
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit2
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit2
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit2
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit2
SendStrobeSync(ADDR_DPKD);
 
 db1=digits_f[2];//9, for D7
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit3
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit3
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit3
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit3
SendStrobeSync(ADDR_DPKD);
 
 db1=digits_f[3];//9, for D10
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit4
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit4
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit4
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit4
SendStrobeSync(ADDR_DPKD);
 
 db1=digits_f[4];//7,for D16
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit5
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit5
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit5
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit5
SendStrobeSync(ADDR_DPKD);
 
 
 db1=digits_f[5];//12, for D20
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 0  digit6
SendStrobeSync(ADDR_DPKD);
 
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 1  digit6
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 2  digit6
SendStrobeSync(ADDR_DPKD);
 
db1=(db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //bit 3  digit6
SendStrobeSync(ADDR_DPKD);
 
SendMemWrPulse();
return;
}
 
 
 
 
void SendDAC_FM_DAC( uint8_t DACFM ,   uint8_t  DACAt     )
{
// for send 0  to the trigger FM/At  set 1   on the pin 34 and send SyncAM pulse 
 
uint8_t db1;
 
 
 db1=DACAt;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit '8' DAC at, no data
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '4' DAC at
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '2' DAC at
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '1' DAC at 
SendStrobeSync(ADDR_FM);
 
 
db1= DACFM ;
 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC FM 
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC FM
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC FM 
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC FM 
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC FM  
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC FM
SendStrobeSync(ADDR_FM);
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC FM 
SendStrobeSync(ADDR_FM);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC FM  
SendStrobeSync(ADDR_FM);  //12 pulses 
 
 
 
SendMemWrPulse();
return;
}
 
 
 
 
void SendModeBits(uint8_t BitsOut, uint8_t BitsModul , uint8_t BitsLFO)
{
 
 uint8_t db1;
 db1=BitsOut;  
 
 //db1= (db1>>1);
 //db1= (db1>>1);
 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1 Out 
SendStrobeSync(ADDR_MODE); //1
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //8 +6dB
SendStrobeSync(ADDR_MODE);  //2
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //4 uV
SendStrobeSync(ADDR_MODE); //3
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //2 mV
SendStrobeSync(ADDR_MODE);//4
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1 dBV
SendStrobeSync(ADDR_MODE);//5
 
 
db1= BitsModul;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // no
SendStrobeSync(ADDR_MODE);//6
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //no
SendStrobeSync(ADDR_MODE);//7
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //PM ext
SendStrobeSync(ADDR_MODE);//8
 
  db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //AM ext
SendStrobeSync(ADDR_MODE);//9
 
 
  db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //FM ext
SendStrobeSync(ADDR_MODE);//10
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //PM
SendStrobeSync(ADDR_MODE);//11
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //AM
SendStrobeSync(ADDR_MODE);//12
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //FM
SendStrobeSync(ADDR_MODE);//13
 
 
db1=BitsLFO;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //10k
SendStrobeSync(ADDR_MODE);//14
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //3,4k
SendStrobeSync(ADDR_MODE);//15
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //2,5k
SendStrobeSync(ADDR_MODE);//16
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //1k
SendStrobeSync(ADDR_MODE);//17
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,4k
SendStrobeSync(ADDR_MODE);//18
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,3k
SendStrobeSync(ADDR_MODE);//19
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,2k
SendStrobeSync(ADDR_MODE);//20
 
 
 db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  //0,05k
SendStrobeSync(ADDR_MODE);//21
 
 
 
SendMemWrPulse();
return;
}
 
 
void SendDAC_AM_VRefCoefs( uint16_t DACVref ,    uint16_t DACAM      )
{
// for send 0  to the trigger AM/Vref  set 1   on the pin 34 and send SyncAM pulse 
 
uint8_t db1;
 
//send DAC Vref 0...9 coefs , 1000= 0x03e8=0b 0000 0011 1110 1000 
 db1=DACVref ;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit 0 DAC VRef
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 1 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);  
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC VRef  
SendStrobeSync(ADDR_AM_VREF); 
 
 //send DAC AM coeffs 0...9
 
//send DAC Vref 0...9 coefs 
 db1=DACAM ;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit 0 DAC AM
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 1 DAC AM 
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 2 DAC AM  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 3 DAC AM  
SendStrobeSync(ADDR_AM_VREF); 
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 4 DAC AM
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 5 DAC AM  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 6 DAC AM 
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 7 DAC AM 
SendStrobeSync(ADDR_AM_VREF); 
 
db1=(db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 8 DAC AM  
SendStrobeSync(ADDR_AM_VREF); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit 9 DAC AM 
SendStrobeSync(ADDR_AM_VREF);  //20 pulses StrobeSyncAM 
 
 
 
SendMemWrPulse();
return;
}
 
 
void SendLFOBits( uint8_t LFObits, uint8_t LFOenabled    )
{
 
 
uint8_t db1;
 
 
 db1=LFOenabled;   
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); } // bit nE
SendStrobeSync(ADDR_LFO); 
 
db1= LFObits;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '1' LFO
SendStrobeSync(ADDR_LFO); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '2' LFO
SendStrobeSync(ADDR_LFO); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }  // bit '4'   LFO
SendStrobeSync(ADDR_LFO); 
 
 
 
 
 
SendMemWrPulse();
return;
}
 
 
 
/***************************************/
 uint8_t Flag10dB=0;
 
 
 uint8_t SelectAtt2(uint8_t value)
 {
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )
    
    
    uint8_t byte1=0; 
    switch(value )
    {
    case 0:
            byte1=0b11110000;
            Flag10dB=0;  //1000...317, DAC Vref decoder off
            break; // 0 dB
    case 1:
            byte1=0b11100001;
                            Flag10dB=1; //999...319 , DAC Vref decoder on
            break; //10 dB
    case 2:
            byte1=0b11010010;
                       Flag10dB=0; 
            break; //20 dB
    case 3:
            byte1=0b11000011;
                       Flag10dB=1; 
            break;//30 dB
        
    case 4:
            byte1=0b10110100;
                       Flag10dB=0; 
            break;//40dB
    case 5:
            byte1=0b10100101;
                       Flag10dB=1; 
            break;//50dB
    case 6:
            byte1=0b10010110;
                          Flag10dB=0; 
            break;//60dB
    case 7:
            byte1=0b10000111;
                         Flag10dB=1; 
            break;//70dB
    case 8:
             byte1=0b01111000;
                          Flag10dB=0; 
             break;//80dB
    case 9:
             byte1=0b01101001;
                            Flag10dB=1; 
             break;//90dB
    case 10:
             byte1=0b01011010;
                             Flag10dB=0; 
             break;//100dB
    case 11:
               byte1=0b01001011; 
                              Flag10dB=1; 
             break;//110dB
             
    case 12:
               byte1=0b00111100;
                               Flag10dB=0; 
             break;//120dB    
             
    case 13:
               byte1=0b00101101;
                               Flag10dB=1; 
             break;//130dB                
    case 14:
               byte1=0b00011110;
                              Flag10dB=0; 
             break;//140dB 
        
    }
    
 return byte1;  
 }
 
 
void SendAttBits( uint8_t bits_att ,  uint8_t FlagOff)
{
 
  uint8_t db1;
 db1=bits_att;
 
  
if (FlagOff !=0) { db1=0x00; }
  
 //0 means yoke off (  for 1 on the inform bus )
 //1 means yoke on  (  for 0 on the inform bus )
 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   // 10dB
SendStrobeSync(ADDR_ATT); 
 
db1= (db1>>1); 
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //20 dB
SendStrobeSync(ADDR_ATT); 
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //40 dB
SendStrobeSync(ADDR_ATT); 
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //80 dB
SendStrobeSync(ADDR_ATT); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }     //10 dB off
SendStrobeSync(ADDR_ATT); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //20 dB off
SendStrobeSync(ADDR_ATT); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }    //40 dB off
SendStrobeSync(ADDR_ATT); 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(1);  }  else { SendBitInform(0); }   //80 dB off
SendStrobeSync(ADDR_ATT); 
 
 
 
SendMemWrPulse();
return;
}
 
 
 
 
void SendHFObits( uint8_t FMAtt ,  uint8_t OscCode )
{
 
  uint8_t db1;
 
   
db1=FMAtt;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   // FM Att 1/10
SendStrobeSync (ADDR_HFO);
 
db1= OscCode ;
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   //OSCSEL '1'
SendStrobeSync (ADDR_HFO);
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }     //OSCSEL '2'
SendStrobeSync (ADDR_HFO);
 
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }      //OSCSEL '4'
SendStrobeSync (ADDR_HFO);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }     //FilterBand
SendStrobeSync (ADDR_HFO);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }    //BandSel '1' 
SendStrobeSync (ADDR_HFO);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }    //BandSel '2'
SendStrobeSync (ADDR_HFO);
 
db1= (db1>>1);
if (CheckFirstBit( db1)) { SendBitInform(0);  }  else { SendBitInform(1); }   //BandSel '4'
SendStrobeSync (ADDR_HFO);
 
 
 
SendMemWrPulse();
return;
}
 
 
 
 
uint8_t SevenSegment(uint8_t Digit  , uint8_t Comma )
{
 
/*
LSB  e; c; b; d; f; g; a; h  MSB
     a 
b        c
     d
e        f
     g
              h
1 on the inform bus means turn on segment
                                          ecbdfga; 
*/
uint8_t db=0;
 
switch (Digit){
                 //hagfdbce
case 0 :     db= 0b01110111;  break ;  // a,b,e,g,f,c=1
case 1 :     db= 0b00010010;  break ;  // c,f=1
case 2:      db= 0b01101011;  break;   // a,c,d,e,g=1
case 3:      db= 0b01111010;  break;   // a,c,d,f,g=1
case 4 :     db= 0b01011110;  break;   // a,b,c,d,f=1
case 5:      db= 0b01111100;  break;   // a,b,d,f,g=1
case 6:      db= 0b01111101;  break;   // a,b,d,e,f,g=1
case 7:      db= 0b01010010;  break;   // a,c,f =1
case 8:      db= 0b01111111;  break;   //a,b,c,d,e,f,g =1
case 9:      db= 0b01111110;  break;   //a,d,c,d,f=1
}
 
 
if(Comma==1) { db|=0b10000000; }//  h
return db;
}  
 
void SendBitsRAM(uint8_t BitsAddr, uint8_t Digit , uint8_t BitComma)
{
/*
     a 
b        c
     d
e        f
     g
              h
1 on the inform bus means turn on segment
 
8; 4; 2 ; 1 ; e; c; b; d; f; g; a; h;
 
x x x x x x x      x x x         x x      x x x x
for 1 on the inform bus send 0 to pin 34 ( and send strobe after it )
*/
  
 uint8_t db1;
 
 db1=SevenSegment(Digit  , BitComma);  
 
#define ADDR_SYNCRAM 15
 
if ((BitsAddr&0x08)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 8    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM); //1
 
if ((BitsAddr&0x04)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 4    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM);  //2
 
if ((BitsAddr&0x02)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 2   ,   fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM); //3
 
if ((BitsAddr&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 1  , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCRAM);//4
 
 
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //e
SendStrobeSync ( ADDR_SYNCRAM);//5        bit 0 ,LSB 
 
 
db1=  (db1>>1);
if ((db1&0x01)==0 ) { SendBitInform(1);  }  else { SendBitInform(0); }  //c
SendStrobeSync ( ADDR_SYNCRAM);//6        bit 1
 
 db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //b
SendStrobeSync ( ADDR_SYNCRAM);//7        bit 2
 
 db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //d
SendStrobeSync ( ADDR_SYNCRAM);//8       bit 3
 
  db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //f
SendStrobeSync ( ADDR_SYNCRAM);//9      bit 4
 
 
  db1= (db1>>1);
if ((db1&0x01)==0 ) { SendBitInform(1);  }  else { SendBitInform(0); }  //g
SendStrobeSync ( ADDR_SYNCRAM);//10     bit 5
 
 
db1= (db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //a
SendStrobeSync ( ADDR_SYNCRAM);//11    bit 6
 
db1=(db1>>1);
if ((db1&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //h
SendStrobeSync ( ADDR_SYNCRAM);//12   bit 7
 
 
 
SendMemWrRAMPulse();
return;
}
 
 
 
void SendBitsBlink(uint8_t BitsAddr)
{
/*
first sent bit 3  2   1  0 last sent bit 
for 1 on the inform bus send 0 to pin 34 ( and send strobe after it )
*/
  
 
 
 
 
if ((BitsAddr&0x08)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 8    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK); //1
 
if ((BitsAddr&0x04)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 4    , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK);  //2
 
if ((BitsAddr&0x02)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 2   ,   fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK); //3
 
if ((BitsAddr&0x01)==0) { SendBitInform(1);  }  else { SendBitInform(0); }  //addr 1  , fix bits mask and  logic
SendStrobeSync ( ADDR_SYNCBLINK);//4
 
 //without SyncWRRAM pulse , use after send all digits for blink control with TurnOnBlink(),TurnOffBlink(); 
return;
}
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
27.02.2020, 03:22  [ТС] 98
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void SendStaticCMDBits( uint8_t StaticCMD   )
{
    
    
    uint8_t db1;
//for 0 on the trigger out (for not inverted outputs) send 0 via the inform bus
//for 1 on the trigger out (for not inverted outputs) set 1 via the inform bus
 
//for 1 on the trigger out  for   inverted outputs AMext,FMext,PMext  send 0 via the inform bus
//for 0 on the trigger out  for   inverted outputs  AMext,FMext,PMext send 1  via the inform bus
 
//nPMext ; nFMext ; nAMext ; PM; FM; AM; MixOn; 1kHz 
 
    db1=StaticCMD ;
    if ((StaticCMD&0x01)==0) { SendBitInform(0);  }  else { SendBitInform(1); } // 1 kHz
    SendStrobeSync(ADDR_SYNCSTATIC);  //1
 
     
    if ((StaticCMD&0x02)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  // MixOn 
    SendStrobeSync(ADDR_SYNCSTATIC); //2
 
    if ((StaticCMD&0x04)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //AM 
    SendStrobeSync(ADDR_SYNCSTATIC); //3 
 
     
    if ((StaticCMD&0x08)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //FM  
    SendStrobeSync(ADDR_SYNCSTATIC); //4
     
    if ((StaticCMD&0x10)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //PM
    SendStrobeSync(ADDR_SYNCSTATIC); //5
     
    if ((StaticCMD&0x20)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //notAMext, see inverse output of the trigger D16
    SendStrobeSync(ADDR_SYNCSTATIC); //6
     
    if ((StaticCMD&0x40)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //notFMext, see inverse output of the trigger D16
    SendStrobeSync(ADDR_SYNCSTATIC); //7
     
    if ((StaticCMD&0x80)==0) { SendBitInform(0);  }  else { SendBitInform(1); }  //notPMext, see inverse output of the trigger D16
    SendStrobeSync(ADDR_SYNCSTATIC); //8 
    
 
 
 
 
    SendMemWrPulse();
    return;
}
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
27.02.2020, 03:23  [ТС] 99
даташит на 564ТМ3
Вложения
Тип файла: pdf 564tm3.pdf (158.8 Кб, 8 просмотров)
0
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
27.02.2020, 03:24  [ТС] 100
датагшит на 564ИП2 (Д13)
Вложения
Тип файла: pdf 564ip2.pdf (166.3 Кб, 8 просмотров)
0
27.02.2020, 03:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2020, 03:24
Помогаю со студенческими работами здесь

Hp pavilion g6 замена микросхемы видео-чипа
Здравствуйте, может кто-то есть из сервисного центра? Какой срок гарантии дается при замене...

Acer Aspire One D255. Замена микросхемы U13
Здравствуйте форумчане. Имеется Ноут Acer Aspire One D255 (PAV70 LA-6221P Rev:1.0) , у него...

Acer aspire 5602wlmi замена сгоревшей микросхемы PG1AY 6900AS
помогите пожалуйста в ноутбуке Acer aspire 5602wlmi сгорела микросхема &quot;PG1AY 6900AS&quot; найти такую...

СМА Samsung Q1235, Замена микросхемы STK621-015. Есть аналог!!!
Здравствуйте! Подскажите возможна ли замена Микросхемы STK621-015 на STK621-140 трёхфазный инвертор...

Модуль Whirlpool домино, замена микросхемы lnk 304 pn на lnk 305 pn
Всем прывет в модуле сгарела микросхема lnk 304 pn под рукой аказалась lnk 305 pn она падходит.

Нужно печатать число П(Пи) почему всегда печатает 4.0000000
#include &lt;stdio.h&gt; #include &lt;Windows.h&gt; int main() { int n,i; float a,PI=0; printf(&quot;n=&quot;);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru