#include #include #define WAIT(ch) while(_getchar() != (ch)) static char *mess[] = { "DAC_1 pin B6 XS3 (DAC)", "DAC_2 pin A6 XS3 (DAC)", "DAC_3 pin B7 XS3 (DAC)", "DAC_4 pin A7 XS3 (DAC)", "ReadADC pin A6 XS4 (ADC)", "StartADC pin B7 XS4 (ADC)", "OUTRG1 pin 11 DD3 (580IR82) (motherboard)", "OUTRG2 pin 11 DD4 (580IR82) (motherboard)", "INRG pin 9 DD5 (580VA86) (motherboard)", "RELAY pins 3,11 DD7 (155TM2) (motherboard)", "TIMER1 pin 21 DD4 (580VI53) (TMRS)", "TIMER2 pin 21 DD6 (580VI53) (TMRS)", "RS-232 pin 11 DD5 (580VV51) (TMRS)" }; static char *menu[] = { " - Address selection test", " - Output registers test", " - Input register test", " - DACs test", " - Timers test", " - Communication port test", " - adJust ADC test", " - Voltage measurement test", " - Repeat last test", " - Quit"}; $$narg = 1; main() { static int choice, last_choice, i; $ttymode(2); if(( stdout=fopen("TT:","wu"))== NULL) { errmsg("Error in opening TT:"); exit(1); } while( choice != 'Q') { CLS; message("Press a key according your choice:", 1, 30, CLRLINE); for( i = 0; i <= 9; i++) message(menu[i], 5 + i, 20, CLRLINE); while((choice = _getchar())== NULL); switch( choice) { case ' ': choice = last_choice; continue; case 'A': case 'a': io_test(); break; case 'O': case 'o': outrg_test(); break; case 'I': case 'i': inprg_test(); break; case 'D': case 'd': dac_test(); break; case 'T': case 't': timer_test(); break; case 'C': case 'c': rs_test(); break; case 'J': case 'j': adj_adc(); break; case 'V': case 'v': adc_test(); break; default : break; } last_choice = choice; } } io_test() { unsigned int addr; int i, k, code; char buf[81]; NEWPAGE; message( "Testing I/O adresses:", 1, 30, MSGONLY); message( "Look for the presence of pulses with oscilloscope:", 2, 10, MSGONLY); WAIT(' ') utpeekw(TIMER_1); for( i = 0, addr = 0177000; i < 13; i++, addr += 2) { message( mess[i], 3 + i, 1, CLRLINE); sprintf(buf,"Address %6o Code ", addr); message(buf, 3 + i, 48, CLRLINE); switch ( i ) { case 10: addr = TIMER_1; break; case 11: addr = TIMER_2; break; case 12: addr = RS_DATA; break; default: break; } WAIT(' ') { code = utpeekw(addr); sprintf( buf,"%6o", code); message( buf, 3 + i, 70, CLRLINE); for(k = 0; k <= 15; k++) sprintf( buf + 2*k,"%2d", utcheckbit( code, 15 - k)); message( buf, 4 + i, 30, CLRLINE); } } } inprg_test() { char buf[81]; unsigned int i, code; NEWPAGE; message( "Testing input register < INRG1 - INRG8 >", 1, 30, MSGONLY); message( "Connect pins A15, B15, ... A12, B12 of XS2 with ground", 2, 10, MSGONLY); WAIT(' ') { code = inp_byte(INRG); sprintf( buf,"Input code %6o", code); message( buf, 5, 30, CLRLINE); for(i = 0; i <= 7; i++) sprintf( buf + 2*i,"%2d", utcheckbit( code, 7 - i)); message( buf, 7, 40, CLRLINE); } } outrg_test() { NEWPAGE; message( "Testing output registers < OURG1, OURG2 >", 1, 30, MSGONLY); message( "Check voltage on pins B18, A18 ... B25, A25 of XS2", 2, 10, MSGONLY); message( "They all must be HIGH ( logical 1 )", 5, 30, MSGONLY); outrg1( 255 ); outrg2( 255 ); WAIT(' '); message( "And now they all must be LOW ( logical 0 )", 5, 30, CLRLINE); outrg1( 0 ); outrg2( 0 ); WAIT(' '); } dac_test() { int i; float voltage; for( i = 0; i < 2; i++) { NEWPAGE; message( "Testing DAC1 - DAC3 :", 1, 30, MSGONLY); message( "At first adjust ZERO voltage (0.000 V) at DAC outputs", 3, 10, MSGONLY); set_dac( DAC_1, 0); set_dac( DAC_2, 0); set_dac( DAC_3, 0); WAIT(' '); message( "Now adjust voltage +10.000 V at DAC outputs", 5, 10, CLRLINE); set_dac( DAC_1, 10.0); set_dac( DAC_2, 10.0); set_dac( DAC_3, 10.0); WAIT(' '); message( "And now adjust voltage -10.000 V at DAC outputs", 7, 10, CLRLINE); set_dac( DAC_3, -10.0); WAIT(' '); if( i == 0) message( "Please, repeat this procedure once more...", 17, 10, CLRLINE); WAIT(' '); } NEWPAGE; message( "And now check the unipolar ramp at DAC1 output...", 7, 10, CLRLINE); WAIT(' ') { for( i = 0; i <= 4000; i++) outdac( DAC_1, i); } message( "Then check the unipolar ramp at DAC2 output...", 9, 10, CLRLINE); WAIT(' ') { for( i = 0; i <= 4000; i++) outdac( DAC_2, i); } message( "... and bipolar ramp at DAC3 output", 11, 10, CLRLINE); WAIT(' ') { for( i = -4000; i <= 4000; i++) outdac( DAC_3, i); } } adj_adc() { unsigned int code; float voltage; char buf[81]; NEWPAGE; message( "Adjusting ADC:", 1, 30, MSGONLY); utpokew(START_ADC, 0); message( "At first you have to adjust analogue 0.000 Volts", 3, 10, MSGONLY); message( "with the help of R8, R14, R9 ...", 4, 10, MSGONLY); WAIT(' '); message( "Now change input voltage near zero until you see OK", 5, 30, MSGONLY); do { utpokew(START_ADC, 0); while(( utpeekw(ADC) & 040000) == 0); code = ( utpeekw(ADC) & 0107777); if(code & 0100000) voltage = -((code & 07777) * 2.5); else voltage = code * 2.5; sprintf( buf,"Code %6o Voltage %5.1f mV", code, voltage); message( buf, 7, 30, CLRLINE); } while( ( code & 07777) != 0); message("OK", 9, 50, CLRLINE); WAIT(' '); } adc_test() { int i; float voltage; char buf[81]; NEWPAGE; message( "Testing ADC:", 3, 30, MSGONLY); message( "Put different voltages to B2, A2 ... B5, A5", 5, 10, MSGONLY); for( i = 0; i <= 7; i++) { WAIT(' ') { voltage = getadc(100, i)/3200.0; sprintf(buf,"Channel Vin%1d Voltage = %5.3f V", i + 1, voltage); message( buf, 10, 20, CLRLINE); } } } timer_test() { NEWPAGE; message("Look for the frequencies at pins 10, 13, 17 TMRS", 3, 3, CLRLINE); set_freq(TIMER_1, 0, CLOCKFREQ, 100000.0); set_freq(TIMER_1, 1, 100000.0, 10000.0); set_freq(TIMER_1, 2, 10000.0, 1000.0); WAIT(' '); } rs_test() { int i; char buf[81]; NEWPAGE; message("Testing RS-232", 3, 30, CLRLINE); WAIT(' ') { com_init(); sprintf(buf, "Status %6o",utpeekw(RS_STATUS)); message(buf, 5, 30, CLRLINE); } message("Please, shorten RD-TD and RTS-CTS ...", 5, 20, CLRLINE); message("You must examine letters ABAB...AB", 6, 20, CLRLINE); WAIT(' '); com_init(); clearline( 10, 5 ); for( i = 0; i <= 1000; i++) { _putchar('A'); timdelay(1000); com_send('B'); _putchar( com_recieve()); } NEWPAGE; message("Now all letters must be doubled", 3, 20, CLRLINE); WAIT(' '); cursor(5,1); for( i = 65; i <= 90; i++) { _putchar( i ); timdelay(1000); com_send( i ); _putchar( com_recieve()); } message("End of test", 12, 30, CLRLINE); WAIT(' '); }