Форум программистов, компьютерный форум, киберфорум
Измерительная техника
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Измерительная техника Входное сопротивление осциллографа https://www.cyberforum.ru/ measuring-devices/ thread2494483.html
При добавлении цифровому осциллографу(1Мегаом), входное сопротивление 50 Ом(адаптер) http://intes.spb.ru/files/images/catalog/4650/615mo9f88cl._sl1067_.jpg нужно ли включать в настройках осциллографа программный делитель напряжения https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRK-DljsjdL7KF-RlVufP8G3_PI9qDOiM72ACqpHR8F8AmXLAEuTQ 1х, 20х, 100х и.т.п.? Если нужно, то какой именно?...
Измерительная техника Замена КП305Е в В3-36,В3-43
Возможна ли замена КП305Е в В3-36,В3-43 на HEF4066B? Эффективна ли такая замена? Гасящие резисторы питания подбирают под ток через стабилитрон около 8...15 мА.
Измерительная техника Доработка дискриминатора частотного 5.404.010 в старых СК3-45 https://www.cyberforum.ru/ measuring-devices/ thread2491113.html
В некоторых партиях измерителей девиации СК3-45 до 1988 года выпуска когда-то ставились дискриминаторы частотные 5.404.010 с перемычкой , терморезистором , диодами КД522Б вместо 4 2Д922А ,5 реле вместо 6 включением звена с фильтрацией в режиме калибровки и неэффективной W(s) кольца АПЧ и ЧД на частотах свыше 2,8 МГц и ДМШ в качестве ограничителя без впаянных схем ЧД малошумящего на...
Измерительная техника Формат выходных данных LiDAR Ouster 1-16 Здравствуйте. Кто-нибудь знает, какого формата выходные данные у LiDAR Ouster 1-16? Знаю, что для хранения облака лазерных точечных данных используется формат .las, верно ли это и для данной модели? https://www.cyberforum.ru/ measuring-devices/ thread2488468.html
Тестер Измерительная техника
Доброго часа. Посоветуйте тестер или прибор для измерения витой пары на затухание и на обрыв. Для таких ситуаций как, например для теста камеры видеонаблюдения. Воткнул тестер и он показал на каком метре обрыв или затухание. Где какой коннектор RG45 плохо обжат. Что-то в этом роде.
Измерительная техника мультиметр dt700d Доброе время суток! Кто знает - подскажите номинал этого резистора. Дал, соседу напряжение померять, он DCV и ACV перепутал, сжег в положении =1000v. Спасибо! https://www.cyberforum.ru/ measuring-devices/ thread2482292.html
Измерительная техника Задающий генератор на ОУ для Г3-36А https://www.cyberforum.ru/ measuring-devices/ thread2479725.html
Вариант замены нестабильно работающего задающего генератора на основе моста Вина в ГЗЧ Г3-36А на схему с ОУ (с позистором и полевым транзистором ).
Замена транзисторов 2П301Б1 в токовых ключах В7-38 Измерительная техника
Замена транзисторов 2П301Б1 в токовых ключах В7-38: какие импортные аналоги с подложкой отдельно от истока (для подведения энергии отдельно от стока и истока симметрично ) существуют ? (какие микросхемы аналогичны или не хуже по сопротивлению открытого и закрытого ключа, симметрии , двунаправленности , отсутствию электризации выводов канала от подведения управляющих напряжений )....
Измерительная техника Нужна подсказка с измерителем сетевого напряжения, пожалуйста https://www.cyberforum.ru/ measuring-devices/ thread2467003.html
Очень нужна схема или литература по этому вопросу!!! пропаду без вас, форумчане...
Измерительная техника Модель АЦП на AM2504 и AD7541A Модель на Си++ АЦП на AM2504 и AD7541A с поразрядным уравновешиванием #include <iostream> #include <stdint.h> #include <math.h> using namespace std; https://www.cyberforum.ru/ measuring-devices/ thread2466854.html
Измерительная техника OpenSource аналог АЛС КОП 814 на микроконтроллере
У кого есть схема и прошивка OpenSource DIY-аналога анализатора логических состояний КОП (GPIB) 814 на микроконтроллере PIC18F4550 + буферные элементы с открытым коллектором стандарта КОП (GPIB )? Поместится ли программа в PIC16F877A или ATMEGA16A...ATMEGA48A (DIP)? Внедрить анлгоязычное обозначение , как в GPIB . (For education only ).
Измерительная техника Измерительный тракт солнечного коллектора Измерительный тракт блока управления солнечным коллектором. Здравствуйте, делаю задание и у меня возникли некоторые трудности. Мне нужно сделать следующее: есть три аналоговых датчика температуры (T, T1, T2). Есть три условия, если условие верно - загорается светодиод. Условия: 1) T>T1+10°. Как я понимаю нужно использовать компаратор, на + подавать напряжение с датчика T, на минус - с T1. Но... https://www.cyberforum.ru/ measuring-devices/ thread2457174.html
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
09.03.2020, 05:06  [ТС] 0

Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК - Измерительная техника - Ответ 14316328

09.03.2020, 05:06. Показов 21786. Ответов 228
Метки (Все метки)

Ответ

Данные с КОП
Код
Int3=1 
 
Bit=/0=1 (don't read )

1)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB0   (poke to nD0)
2)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB1   (poke to nD1)
3)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB2  (poke to nD2)
4)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB3  (poke to nD3)
5)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB4 (poke to nD4)
6)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB5 (poke to nD5)
7)
 prepare to read from LD using PIN34 
Send SyncLD      
read nDB6 (poke to nD6)
8)
 prepare to read from LD using PIN34 
Send SyncLD      
read /0=1   (poke to nD7)


DBInput=~DBDBInput;
// теперь DBInput в положительной логике, как в посылаемых исходных кодах 
// (на переключателях , логически ), старший бит равен 0   
Send_data_accept
Добавлено через 42 минуты
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
uint8_t GetBitInformLD ( )
{
SetPinsDefault1();
SetPin34Input();   
SetAddrInformInLD();
//SetPin34Input(); 
if(  CheckPin34In()==0) { return 0x00  ;   } else  { return 0x01  ; }
 
}
 
 
 
 
uint8_t GetByteLD(  )
{
 
 
uint8_t db ;
// nLD0 ,nLD1,nLD2,nLD3,nLD4,nLD4,nLD5,nLD6, 1 
 
 db=0; 
 
SetPin34Input();  
//fix SendStrobeSync to 50 us only for  LD  ,remove set pin 34 out  for this subroutine 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x01; } //nLD0
 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x02; } //nLD1
 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x04; } //nLD2  
 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x08; } //nLD3  
 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x10; } //nLD4 
 
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x20; } //nLD5
  
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x40; } //nLD6   
   
SendPulseSync50us(ADDR_SYNC);  //Pin36 to multiplexer ,Sync 
//if (GetBitInformLD ( ) ==0) { db|=0x80; } //n0    
 
 //SendPin38_Pulse1_20uS();
return db;
}
Добавлено через 14 минут
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
 
void  SendPin36Pulse1()
{
delay_us(1);
SetPin36High();  //send pulse 
delay_us(50);  //fix
SetPin36Low();   //not active  
delay_us(40);  //fix 
}
 
 
void  SendPin36Pulse2()
{
delay_us(1);
SetPin36High();  //send pulse 
delay_us(40);  //fix
SetPin36Low();   //not active  
delay_us(40);  //fix 
}
 
void SendPulseSyncInLD( )
{
SetPinsDefault1();
SetPin34In(); 
SetAddrSync (ADR_SYNC); 
SendPin36Pulse1(); 
}
 
 
void SendPulseSyncInGCD( )
{
SetPinsDefault1();
SetPin34In(); 
SetAddrSync ( ADDR_SYNC_POOL); 
SendPin36Pulse2(); 
}
Добавлено через 9 минут
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
uint8_t GetByteLD(  )
{
 
 
uint8_t db ;
// nLD0 ,nLD1,nLD2,nLD3,nLD4,nLD4,nLD5,nLD6, 1 
 
 db=0; 
 
SetPin34Input();  
 
SendPulseSyncInLD( );  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x01; } //nLD0
 
SendPulseSyncInLD( );  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x02; } //nLD1
 
SendPulseSyncInLD( );  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x04; } //nLD2  
 
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x08; } //nLD3  
 
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x10; } //nLD4 
 
SendPulseSyncInLD( );  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x20; } //nLD5
  
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x40; } //nLD6   
   
SendPulseSyncInLD( );  //Pin36 to multiplexer ,Sync 
if (GetBitInformLD ( ) ==0) { db|=0x80; } //n0    
  
 
 
SendPulse_data_accept(); //optimize plce of this subroutine 
return db;
}
 
uint8_t GetByteGCd(  )
{
 
 
uint8_t db ;
//
 
 db=0; 
 
 
 
  
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )==0) { db|=0x01; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x02; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x04; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x08; } //  
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )==0) { db|=0x10; } // 
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x20; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x40; } //
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool    
if (GetBitInformGCd ( ) ==0) { db|=0x80; } //   
 //fix sub
 
//optimize inversion of the data 
 
 
return db;
}
Добавлено через 40 минут
В нашей программе в сообщениях при нажатии кнопок бит ,посылаемый первым , отображается слева , когда валкодер крутят на 1 позицию по часовой стрелке, посылка равна восемь нулей. При ДУ ( при совпадении МАП , ложном ОИ, если ДУ истинно ,нет разадресации,нет ПНМ,ВНМ , когда горит светодиод ДУ ) прерывания с клавиатуры закрыты , опрос для кодов от валкодера и клавиатуры программно не подается.

Добавлено через 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
uint8_t GetByteGCd(  )
{
 
 
uint8_t db ;
//
 
 db=0; 
 
//nr0;nc0;nr2;nr1;nc1;x;x;x
 
  
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x01; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x02; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x04; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) !=0) { db|=0x08; } //  
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x10; } // 
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x20; } // 
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x40; } //
SendPulseSyncInGCD( );  //Pin36 to multiplexer ,SyncPool    
if (GetBitInformGCd ( )!=0) { db|=0x80; } //   
 
 
7 6  5  4    3     2     1      0 
x;x;x;nc1;nr1;nr2;nc0;nr0;      
 
return db;
}
, первый бит будет добавляться в младший разряд , последний в последние , а на положительность направления приращения проверяют сравнением байта скан-кода по прер 1 после приема 8 бит (каждый после СИ ОПР ) с нулем. Тогда записать скан -коды задом наперед и перевести в двоичные , обрабатывать по маске без 3 последних . Если с этим определились , программу можно упростить до "гридликовых" кодов, занося их в дефайны правильно .

Добавлено через 26 минут
Доработать эмулятор для возможности ввода с 2 и 3 дочерних окон ( делать окно активным, или уточнить как это сделать ) .

Добавлено через 14 минут
посмотреть в книге Петзольда (и т.д. ) .

Добавлено через 3 часа 54 минуты
В виртуалку можно добавить хендлеры контролов, заменяющих светодиоды, пробросив их от заданного дочернего окна
при вызове, а вот из окна в окно и с активным дочерним окном пока проблемы (не вводится, не делается активным, но кнопка нажимается, переписать ) :
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
uint8_t GPIB_BYTE;
int ADL=0;  //you can temporary set it into 1 and build  alt.  edition  without ATN=1 layer 
 
void SetLed(  HWND hwnd  , int ItemId, int led_on)
{
if(led_on){ SendMessage(GetDlgItem(  hwnd, ItemId ) ,  BM_SETCHECK ,TRUE,  0);}
else { SendMessage(GetDlgItem(  hwnd, ItemId ) ,  BM_SETCHECK ,FALSE,  0);}
return;
}
 
 
void SetRENLed(HWND hwnd, int ledren_on )
{
SetLed( hwnd,  IDC_LED_REN,   ledren_on);
return;
}
 
void SetPLLSegment(HWND hwnd,int segpll_on )
{
SetLed(  hwnd,  IDC_PLL_SEGMENT_M,   segpll_on);
return;
}
 
 
void SetTextOutLD(HWND hwnd, uint8_t byte_ttl)
{
uint8_t  byteout=~byte_ttl;
char    edittxt[25]    ;
int b[8];
 
byteout|=0x80;
 
if((byteout&0x01)!=0) {  b[0]= 1 ;  } else  {  b[0]= 0 ;  }
if((byteout&0x02)!=0) {  b[1]= 1 ;  } else  {  b[1]= 0 ;  }
if((byteout&0x04)!=0) {  b[2]= 1 ;  } else  {  b[2]= 0 ;  }
if((byteout&0x08)!=0) {  b[3]= 1 ;  } else  {  b[3]= 0 ;  }
if((byteout&0x10)!=0) {  b[4]= 1 ;  } else  {  b[4]= 0 ;  }
if((byteout&0x20)!=0) {  b[5]= 1 ;  } else  {  b[5]= 0 ;  }
if((byteout&0x40)!=0) {  b[6]= 1 ;  } else  {  b[6]= 0 ;  }
if((byteout&0x80)!=0) {  b[7]= 1 ;  } else  {  b[7]= 0 ;  }
sprintf(edittxt, "(8th)%d%d%d%d%d%d%d%d(1st)",b[7],b[6],b[5],b[4],b[3],b[2],b[1],b[0]      );
//snprintf()
SetDlgItemText(hwnd,IDC_OUT_LD , edittxt );
 
}
 
 
 
 
 
int CheckMLA(HWND hwnd , uint8_t ByteVal )
{
if (ByteVal  ==0x3F) {return 0; }
if(  ((ByteVal &0x01)!=0)&&   (IsDlgButtonChecked(hwnd, IDC_A1_TTL) )){  
if(  ((ByteVal &0x02)!=0)&&   (IsDlgButtonChecked(hwnd, IDC_A2_TTL) )){   
if(  ((ByteVal &0x04)!=0)&&   (IsDlgButtonChecked(hwnd, IDC_A3_TTL) )){ 
if(  ((ByteVal &0x08)!=0)&&  (IsDlgButtonChecked(hwnd, IDC_A4_TTL) )){ 
if(  ((ByteVal &0x10)!=0)&&  (IsDlgButtonChecked(hwnd, IDC_A5_TTL) )){ 
return 1;
}}}}}
return 0;
}
 
 
void GetByteGPIBFromEditbox( HWND hwnd )
{
int editlength;
char edittxt[3]={'2','0',0};
uint8_t ByteVal=0x00;
 GetDlgItemText(hwnd, IDC_INPUT_DB_GPIB , edittxt, 3);
editlength=strlen(edittxt);
 
ByteVal =(uint8_t ) atoi(edittxt ) ;
 
 
 
if(IsDlgButtonChecked(hwnd, IDC_REN_TTL) ){ 
if(!IsDlgButtonChecked(hwnd, IDC_IFC_TTL) ){
if( IsDlgButtonChecked(hwnd, IDC_ATN_TTL) ){
 
if( ByteVal  ==0x01){        ADL=0;SetRENLed( hwnd,0 );  }
// if( ByteVal  ==0x14){   /* DCL   restart controller */   ADL=0;  SetRENLed( hwnd,0 );}
//if(( ByteVal  ==0x04)&&(ADL==1)     ){  /* SDC restart controller */     ADL=0;  SetRENLed( hwnd,0 );}
if((ByteVal&0b11110000)==0x20)
{
if(CheckMLA( hwnd ,  ByteVal )) {   ADL=1; } 
 
//fix logic
 
 }
 
}}}
 
if   (ADL==1) { SetRENLed( hwnd,1 ); }   else {   SetRENLed( hwnd,0 );  }
 
if( IsDlgButtonChecked(hwnd, IDC_REN_TTL) ){ 
if(! IsDlgButtonChecked(hwnd, IDC_IFC_TTL) ){
if(! IsDlgButtonChecked(hwnd, IDC_ATN_TTL) ){
if(ADL==1){    // ~   , after  ACDS, for handshake successful , if ADL =1 check 
 
SetTextOutLD(hwnd, ByteVal);
SendMessage(GetDlgItem(  hwnd,  IDC_DATA_ACCEPT ) ,  BM_SETCHECK ,TRUE,  0);
  
 Beep(523,500); //only for emulator, to view  accept  
SendMessage(GetDlgItem(  hwnd,  IDC_DATA_ACCEPT ) ,  BM_SETCHECK ,FALSE,  0);
 
MessageBox(NULL, edittxt,  " DB  ", 0);
 
 
}}}}
 
 
}
Добавлено через 3 часа 42 минуты
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
bool CompareAddress(uint8_t DB, uint8_t MLA     )
{
//D5_2 and D10
if (DB&1F)==MLA)  { return TRUE ;}  else {return FALSE; }
 
}
 
 
 
void DC_D9(uint8_t DB_TTL, bool *DC1, bool *DC9) 
{
switch(DB_TTL&0x0F)
{
case 1:  *DC1=1; *DC9=0; break;
case 9: *DC1=0;   *DC9=1; break;
default : *DC1=0; *DC9=0; break;  
}
return;
}
 
 
 
 
bool  Get_KD15(uint8_t DB_TTL, bool DC9  )
{
bool y1,y2,y3;
y1= (!( (DC9)&&((DB_TTL&0x02)!=0)&&((DB_TTL&0x04)!=0) ));
y2=1^(DB_TTL&0x10);
y3=((!y1)&(!y2));
return y3;
}
 
 
 
void DC_D8_D11_D3  ( uint8_t DB_TTL,  bool ATN_TTL ,bool D13_12, bool Q_D15,bool *y1_D13 )
{
uint8_t inDC;
bool  DC0  ;
 
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08;   }
switch(inDC)
{
case 0:   DC0=1;   break;
default :   DC0=0;  break;
}
 
bool  x1_D13= (!(Q_D15& DC0))  ;
if(D13_12) { *y1_D13=0;    }
else {  *y1_D13=(!x1_D13);     }
 
return;
}
 
 
void DC_D8_D7_2_CD15 ( uint8_t DB_TTL,  bool ATN_TTL ,bool D13_12,  bool *y2_D13 , bool *y3_D13  )
{
uint8_t inDC;
bool   DC2,    DC3  ;
 
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08;   }
switch(inDC)
{
case 0:      DC2=0; DC3=0;   break;
case 2:     DC2=1;  DC3=0; break;
case 3:     DC2=0;  DC3=1; break;
default :   DC2=0;  DC3=0; break;
}
 
 
bool  x2_D13=(!(DC2& DC3))  ; 
bool  x3_D13=FALSE;
if(D13_12) { *y2_D13=0; *y3_D13=0;  }
else {    *y2_D13=(!x2_D13); *y3_D13=(!x3_D13); }
 
return;
}
 
 
 
 
 
/*
C      J     K    R    Qn       nQn
rise  0      0     0    Qn-1    !Qn-1
rise  1      0     0    1           0
rise  0      1     0    0           0
rise  1      1     0    !Qn-1   !Qn-1
x      x      x     1    0           1
 
 
*/
void TriggerD15( bool R, bool S,  bool J1, bool K1, bool Crise1  ,    bool *Qout1, bool *nQout1     )
{
static  bool Q1, nQ1;
//static  bool C1;
 
 
 
//problem with rise detection
if (Crise1) 
{
  
if((J1)&(K1))  { Q1= Q1;      nQ1=nQ1;        } 
if((J1)&(!K1)) { Q1=TRUE; nQ1=FALSE; }
if((K1)&(!J1)) { Q1=FALSE; nQ1=TRUE; } 
if((J1)&(K1))  { Q1=nQ1;      nQ1=Q1;         } 
 if(S1) { Q1=TRUE; nQ1=FALSE; }
if(R1) { Q1=FALSE; nQ1=TRUE; }
}
 
if(S1) { Q1=TRUE;   nQ1=FALSE; }
if(R1) { Q1=FALSE; nQ1=TRUE;  }
 
 
return;
}
 
 
 
void TriggerD15_2( bool R2, bool S2, bool J2, bool K2, bool Crise2  ,    bool *Qout2, bool *nQout2     )
{
static  bool Q2, nQ2;
 
 
  
//problem with rise detection
 
if (Crise2) 
{
 //C1=C;
if((J2)&(K2))  { Q2= Q2;      nQ2=nQ2;        } 
if((J2)&(!K2)) { Q2=TRUE; nQ2=FALSE; }
if((K2)&(!J2)) { Q2=FALSE;nQ2=TRUE; } 
if((J2)&(K2))  { Q2=nQ2;       nQ2=Q2;         } 
 if(S2) { Q2=TRUE;  nQ2=FALSE; }
if(R2) { Q2=FALSE; nQ2 =TRUE; }
}
 
if(S2) { Q2=TRUE;   nQ2=FALSE; }
if(R2) { Q2=FALSE; nQ2=TRUE;  }
 
 
return;
}
 
bool RD15_D6( bool nrtl,  bool REN_TTL ,bool dc1, bool   d13_y1 )
{
return ( (!nrtl)|(!REN_TTL )|( !((dc1)&(d13_y1))) );
}
 
 
 
void ParseDCD12_D3(  bool ATN_TTL , inNQD15    , bool *y1_pin3, bool *y2_pin8)
{
 bool y1= ((!ATN_TTL)&(!inNQD15 ));
*y1_pin3=y1;
 bool y2=(y1 |ATN_TTL);
 *y2_pin8=(!y2);
 
}
 
bool  D12_D16_PARSEElement(bool ATN_TTL, bool inNQD15 , bool inA, bool inB)
{
bool inAE,inBE;
ParseDCD12_D3( ATN_TTL , inNQD15    , inBE, inAE);
return(  ((inA)&(inAE))    |    ((inB)&(inBE))   );
}
 
void ParseD14_2( bool S , bool C,  bool inD, bool *outQ  )
{
static  bool Q1 ;
if(C) {  Q1=inD;  }   
if(S) {  Q1=0;       }
 
 
*outQ =Q1;
}
 
void ParseD14_1( bool S , bool C,  bool inD, bool *outQ  )
{
static  bool Q1 ;
if(C) {  Q1=inD;  }   
if(S) {  Q1=0;       }
 
 
*outQ =Q1;
}
Добавлено через 2 часа 30 минут
Проверить отрицательность логики по прер1, прер2 и прер3 (особенно ).
Инд ДУ =0 ( полож. )(выход 14 = 1 ), когда триггер сброшен (прибор разадресован, хотя бы по кнопке на передней панели ),
на выходе 11 D11.4 приоритетно лог. 1 от нуля , тогда прер3=1 ТТЛ , нет сигнала (отрицательная логика ).

Добавлено через 48 секунд
Схему прерываний дорабатывать.

Добавлено через 30 минут
decode.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
...
 
 
 
bool CompareAddress(uint8_t DB, uint8_t MLA     )
{
//D5_2 and D10
if (DB&1F)==MLA)  { return TRUE ;}  else {return FALSE; }
 
}
 
 
 
void DC_D9(uint8_t DB_TTL, bool *DC1, bool *DC9) 
{
switch( (DB_TTL&0x0F))
{
case 1:  *DC1=1; *DC9=0; break;
case 9: *DC1=0;   *DC9=1; break;
default : *DC1=0; *DC9=0; break;  
}
return;
}
 
void DC_D9_DC1 (uint8_t DB_TTL, bool *DC1 ) 
{
switch(DB_TTL&0x0F)
{
case 1:  *DC1=1;   break;
case 9: *DC1=0;    break;
default : *DC1=0;   break;  
}
return;
}
 
void DC_D9_DC9(uint8_t DB_TTL,  bool *DC9) 
{
switch(DB_TTL&0x0F)
{
case 1:    *DC9=0; break;
case 9:    *DC9=1; break;
default :  *DC9=0; break;  
}
return;
}
 
 
 
 
 
bool  Get_KD15(uint8_t DB_TTL, bool DC9  )
{
bool y1,y2,y3;
y1=(bool)(!( (DC9==TRUE)&&((DB_TTL&0x02)!=0)&&((DB_TTL&0x04)!=0) ));
y2=(bool)(1^( DB_TTL &(0x10) )  );
y3=(bool)((!(y1==TRUE))&(!(y2==TRUE)));
return y3;
}
 
 
void DC_D8_D11_1  ( uint8_t DB_TTL,  bool ATN_TTL , bool Q_D15, bool *x1_D13 )
{
uint8_t inDC;
bool  DC0  ;
 
inDC=(DB_TTL&0x07);
if(!(ATN_TTL)) { inDC|=0x08;   }
switch(inDC)
{
case 0:   DC0=1;   break;
default :   DC0=0;  break;
}
 
bool  x1__D13= (!(Q_D15& DC0))  ;
*x1_D13 =(!(x1__D13));
return;
}
 
 
void DC_D8_D11_D13_1  ( uint8_t DB_TTL,  bool ATN_TTL , bool D13_12, bool Q1_D15, bool *y1_D13 )
{
uint8_t inDC;
bool  DC0  ;
 
inDC=(DB_TTL&0x07);
if(!(ATN_TTL) ) { inDC|=0x08;   }
switch(inDC)
{
case 0:    DC0=1;   break;
default :   DC0=0;  break;
}
 
bool  x1_D13= (!((Q1_D15)& (DC0)) )  ;
if(D13_12==TRUE) { *y1_D13=FALSE;    } else {  *y1_D13=(!(x1_D13));     }
 
return;
}
 
 
 
 
void DC_D8_D7_2_D13_2 ( uint8_t DB_TTL,  bool ATN_TTL ,bool D13_12,  bool *y2_D13   )
{
uint8_t inDC;
bool   DC2, DC3   ;
 
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08;   }
switch(inDC)
{
case 0:      DC2=0; DC3=0;   break;
case 2:     DC2=1;  DC3=0; break;
case 3:     DC2=0;  DC3=1; break;
default :   DC2=0;  DC3=0; break;
}
 
bool  x2_D13=(!((DC2)&(DC3)))  ; 
 
if(D13_12==TRUE) { *y2_D13=FALSE;   } else {    *y2_D13=(!(x2_D13));   }
 
return;
}
 
void DC_D13_3 (  bool D13_12,    bool *y3_D13  )
{
 
bool  x3_D13=FALSE;
if(D13_12) { *y3_D13=0;  }  else {  *y3_D13=(!(x3_D13)); }
 
return;
}
 
 
 
 
 
 
 
 
bool RD15_D6( bool nrtl,  bool REN_TTL ,bool dc1, bool   d13_y1 )
{
return ( (!nrtl)|(!(REN_TTL) )|( !((dc1)&(d13_y1))) );
}
 
 
 
void ParseDCD12_D3(  bool ATN_TTL , inNQD15    , bool *y1_pin3, bool *y2_pin8)
{
 bool y1= ((!ATN_TTL)&(!inNQD15 ));   *y1_pin3=y1;
 bool y2=(y1 |ATN_TTL);   *y2_pin8=(!(y2));
return; 
}
 
bool  D12_D16_PARSEElement(bool ATN_TTL, bool inNQD15 , bool inA, bool inB)
{
bool inAE,inBE;
ParseDCD12_D3( ATN_TTL , inNQD15    , inBE, inAE);
return(  ((inA)&(inAE))    |    ((inB)&(inBE))   );
}
 
 
 
 
/*******************************************************/
bool GetC( uint8_t DB_TTL, bool ATN_TTL , bool D13_12)
{
bool Y2_D13 ;
DC_D8_D7_2_D13_2 ( DB_TTL, ATN_TTL , D13_12,  &Y2_D13   );
return (bool)Y2_D13;
}
 
bool GetJ_minterm(uint8_t DB_TTL , uint8_t MLA_switch  )
{
return CompareAddress( DB_TTL,  MLA_switch );
}
 
bool GetK1_minterm(uint8_t DB_TTL   )
{
bool DC9;
DC_D9_DC9( DB_TTL,  &DC9); 
Get_KD15(uint8_t DB_TTL, bool DC9  );
}
 
bool GetR1( bool  IFC_TTL) { return (!(IFC_TTL)) ;   }
 
 
bool GetR2(uint8_t DB_TTL,   bool REN_TTL , bool ATN_TTL,  bool nrtl    , D13_12,  Q1_D15    )
{
bool dc1,   d13_y1;
DC_D9_DC1(DB_TTL, &dc1 ); 
DC_D8_D11_D13_1  ( DB_TTL, ATN_TTL , D13_12,  Q1_D15, &d13_y1   );
return RD15_D6  ( nrtl, REN_TTL , dc1, d13_y1 );
}
 
 
 
 
bool GetInt3OutTTL( bool ATN_TTL, bool DAV_TTL, bool  Q2_D15  )
{
 // If  Q2_D15=0 -local , Q2_D15=1 remote,  
bool y3_d16=(bool)   D12_D16_PARSEElement(ATN_TTL,  nQ1D15 , FALSE , DAV_TTL);  
return (bool)  (!((Q2_D15)&(y3_d16)))    ;  
 
} 
 
 
 
bool GetIndREN(  bool  Q2_D15)
//bool GetIndREN(  bool nQ2_D15)
{
//1 remote 0 local    
//return (bool)(!nQ2_D15);
return (bool)( Q2_D15);
}
Добавлено через 2 часа 46 минут
Кнопка ДУ на передней панели обычно выполняет функцию внм (rtl), светодиод ДУ (REN, или прибор адресован). минтерм nrtl- это инверсия от rtl, истинного когда кнопка ДУ нажата (там на корпус замыкается, поэтому у нас nrtl=0, когда кнопка нажата) . Это обрабатывается без процессора , как и сигнал сегмента ошибки ФАПЧ (там из ЧФД провод, хотя от неправильных кодов это косвенно зависит).

Вернуться к обсуждению:
Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК Измерительная техника
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2020, 05:06
Готовые ответы и решения:

Замена микросборок 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
09.03.2020, 05:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2020, 05:06
Помогаю со студенческими работами здесь

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;);...

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