DECLARE SUB patest () DECLARE SUB pbtest () DECLARE SUB bpgraph () DECLARE SUB unidftest () DECLARE SUB unisetest () DECLARE SUB bipolarsetest () DECLARE SUB bipolardftest () ' This program will test the functions of EAS MiniDaq analog input board ' This program requires EAS12MQL.QLB quick library to run ' Load Quickbasic with command line QB /L EAS12MQL.QLB ' Version 2.0 Quickbasic 4.5 ' Note: Set include file to correct path ' $INCLUDE: 'd:\qb\eas12m\easmqlb.inc' ' NOTE: Set baseaddress to correct parallel port address in Hex ' Typical parallel port assignments are ' lpt1 &H3BC ' lpt2 &H378 ' lpt2 &H278 baseaddress = &H378 ' Set zero offset for A/D offset = 3 DO CLS PRINT "EAS MiniDaq 12 bit A/D test routines" PRINT "Select Test": PRINT PRINT "1 = Bipolar Single ended input test" PRINT "2 = Bipolar Differential input test " PRINT "3 = Unipolar Single ended input test" PRINT "4 = Unipolar Differential input test" PRINT "5 = Bipolar graph, Single ended channel 0 " PRINT "6 = Digital output port PA test" PRINT "7 = Read digital input port PB" PRINT "Q = QUIT" INPUT a$ SELECT CASE a$ CASE "1" CALL bipolarsetest CASE "2" CALL bipolardftest CASE "3" CALL unisetest CASE "4" CALL unidftest CASE "5" CALL bpgraph CASE "6" CALL patest CASE "7" CALL pbtest CASE "q" END CASE "Q" END END SELECT LOOP SUB bipolardftest 'bipolar differential A/D test SHARED baseaddress, offset factor = 4.096 / 4096 'bipolar input DIM dout(1000) average = 20 channel = 0 CLS PRINT "Bipolar Diffential input..." PRINT "Press 0-3 to change input channel" PRINT "Q to quit" DO temp = 0 FOR i = 1 TO average dout(i) = bpdf12(channel, baseaddress) + offset temp = temp + dout(i) NEXT i temp = INT(temp / average) LOCATE 10, 1 PRINT "ADC channel="; channel PRINT "Volts="; PRINT USING "###.###"; temp * factor PRINT "Data= "; temp a$ = INKEY$ IF a$ = "0" THEN channel = 0 ELSEIF a$ = "1" THEN channel = 1 ELSEIF a$ = "2" THEN channel = 2 ELSEIF a$ = "3" THEN channel = 3 END IF LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB SUB bipolarsetest ' Bipolar single ended a/d input test SHARED baseaddress, offset DIM dout(1000) factor = 4.096 / 4096 'bipolar input average = 20 channel = 0 CLS PRINT "Bipolar single ended input..." PRINT "Press 0-7 to change input channel" PRINT "Q to quit" DO temp = 0 FOR i = 1 TO average dout(i) = bpse12(channel, baseaddress) + offset temp = temp + dout(i) NEXT i temp = INT(temp / average) LOCATE 10, 1 PRINT "ADC channel="; channel PRINT "Volts="; PRINT USING "###.###"; temp * factor PRINT "Data= "; temp a$ = INKEY$ IF a$ = "0" THEN channel = 0 ELSEIF a$ = "1" THEN channel = 1 ELSEIF a$ = "2" THEN channel = 2 ELSEIF a$ = "3" THEN channel = 3 ELSEIF a$ = "4" THEN channel = 4 ELSEIF a$ = "5" THEN channel = 5 ELSEIF a$ = "6" THEN channel = 6 ELSEIF a$ = "7" THEN channel = 7 END IF LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB SUB bpgraph ' Plot bipolar data SHARED baseaddress, offset, factor xlength = 1000 DIM rdata%(xlength) DIM Y(xlength) 'SCREEN 3 'HERCULES SCREEN 12 'VGA VIEW (60, 50)-(600, 300), , 4 WINDOW (0, -2048)-(xlength, 2047) DO FOR i = 1 TO xlength PSET (i, rdata%(i)), 0 rdata%(i) = bpse12(channel, baseaddress) + offset PSET (i, rdata%(i)) NEXT i FOR z = 1 TO xlength PSET ((z), Y(z)), 14 NEXT z LOOP WHILE INKEY$ = "" SCREEN 0 END SUB SUB patest ' Test Digital output port PA SHARED baseaddress CLS PRINT "Digital Output Port PA test..." PRINT "Press 0-6 to toggle output port hi/lo" PRINT "Q to quit" ' initialize set all ports PA to low CALL outpalow(0, baseaddress) CALL outpalow(1, baseaddress) CALL outpalow(2, baseaddress) CALL outpalow(3, baseaddress) CALL outpalow(4, baseaddress) CALL outpalow(5, baseaddress) CALL outpalow(6, baseaddress) LOCATE 10, 1 PRINT "Port PA0 = LOW" LOCATE 11, 1 PRINT "Port PA1 = LOW" LOCATE 12, 1 PRINT "Port PA2 = LOW" LOCATE 13, 1 PRINT "Port PA3 = LOW" LOCATE 14, 1 PRINT "Port PA4 = LOW" LOCATE 15, 1 PRINT "Port PA5 = LOW" LOCATE 16, 1 PRINT "Port PA6 = LOW" port0 = 0 port1 = 0 port2 = 0 port3 = 0 port4 = 0 port5 = 0 port6 = 0 DO a$ = INKEY$ SELECT CASE a$ CASE "0" IF port0 = 1 THEN CALL outpalow(0, baseaddress) port0 = 0 LOCATE 10, 1 PRINT "Port PA0 = LOW" ELSE CALL outpahi(0, baseaddress) port0 = 1 LOCATE 10, 1 PRINT "Port PA0 = HI " END IF CASE "1" IF port1 = 1 THEN CALL outpalow(1, baseaddress) port1 = 0 LOCATE 11, 1 PRINT "Port PA1 = LOW" ELSE CALL outpahi(1, baseaddress) port1 = 1 LOCATE 11, 1 PRINT "Port PA1 = HI " END IF CASE "2" IF port2 = 1 THEN CALL outpalow(2, baseaddress) port2 = 0 LOCATE 12, 1 PRINT "Port PA2 = LOW" ELSE CALL outpahi(2, baseaddress) port2 = 1 LOCATE 12, 1 PRINT "Port PA2 = HI " END IF CASE "3" IF port3 = 1 THEN CALL outpalow(3, baseaddress) port3 = 0 LOCATE 13, 1 PRINT "Port PA3 = LOW" ELSE CALL outpahi(3, baseaddress) port3 = 1 LOCATE 13, 1 PRINT "Port PA3 = HI " END IF CASE "4" IF port4 = 1 THEN CALL outpalow(4, baseaddress) port4 = 0 LOCATE 14, 1 PRINT "Port PA4 = LOW" ELSE CALL outpahi(4, baseaddress) port4 = 1 LOCATE 14, 1 PRINT "Port PA4 = HI " END IF CASE "5" IF port5 = 1 THEN CALL outpalow(5, baseaddress) port5 = 0 LOCATE 15, 1 PRINT "Port PA5 = LOW" ELSE CALL outpahi(5, baseaddress) port5 = 1 LOCATE 15, 1 PRINT "Port PA5 = HI " END IF CASE "6" IF port6 = 1 THEN CALL outpalow(6, baseaddress) port6 = 0 LOCATE 16, 1 PRINT "Port PA6 = LOW" ELSE CALL outpahi(6, baseaddress) port6 = 1 LOCATE 16, 1 PRINT "Port PA6 = HI " END IF END SELECT LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB SUB pbtest 'Read Digital input port PB SHARED baseaddress CLS PRINT "Running digital input port PB test..." PRINT "Q to quit" LOCATE 9, 10 PRINT "PB0 PB1 PB2 PB3" DO a = readpb(0, baseaddress) b = readpb(1, baseaddress) c = readpb(2, baseaddress) d = readpb(3, baseaddress) LOCATE 10, 10 PRINT a, b LOCATE 10, 15 PRINT b LOCATE 10, 20 PRINT c LOCATE 10, 25 PRINT d a$ = INKEY$ LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB SUB unidftest 'unipolar differential A/D test SHARED baseaddress, offset DIM dout(1000) average = 20 factor = 4.096 / 4096 'unipolar input CLS PRINT "Unipolar differential input..." PRINT "Press 0-3 to change input channel" PRINT "Q to quit" DO temp = 0 FOR i = 1 TO average dout(i) = unidf12(channel, baseaddress) + offset temp = temp + dout(i) NEXT i temp = INT(temp / average) LOCATE 10, 1 PRINT "ADC channel="; channel PRINT "Volts="; PRINT USING "###.###"; temp * factor PRINT "Data= "; temp a$ = INKEY$ IF a$ = "0" THEN channel = 0 ELSEIF a$ = "1" THEN channel = 1 ELSEIF a$ = "2" THEN channel = 2 ELSEIF a$ = "3" THEN channel = 3 END IF LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB SUB unisetest 'Unipolar single ended A/D test SHARED baseaddress, offset DIM dout(1000) factor = 4.096 / 4096 'unipolar input average = 20 channel = 0 CLS PRINT "Unipolar single ended input..." PRINT "Press 0-7 to change input channel" PRINT "Q to quit" DO temp = 0 FOR i = 1 TO average dout(i) = unise12(channel, baseaddress) + offset temp = temp + dout(i) NEXT i temp = INT(temp / average) LOCATE 10, 1 PRINT "ADC channel="; channel PRINT "Volts="; PRINT USING "###.###"; temp * factor PRINT "Data= "; temp a$ = INKEY$ IF a$ = "0" THEN channel = 0 ELSEIF a$ = "1" THEN channel = 1 ELSEIF a$ = "2" THEN channel = 2 ELSEIF a$ = "3" THEN channel = 3 ELSEIF a$ = "4" THEN channel = 4 ELSEIF a$ = "5" THEN channel = 5 ELSEIF a$ = "6" THEN channel = 6 ELSEIF a$ = "7" THEN channel = 7 END IF LOOP UNTIL (a$ = "q" OR a$ = "Q") END SUB