1 REM ********************************* 2 REM * * 3 REM * PROGRAMME NICAD TO MONITOR * 4 REM * * 5 REM * BATTERY DISCHARGE TEST * 6 REM * * 7 REM * Version 1.5 27.10.85 * 8 REM * * 9 REM * Copyright P.W.H. Moon * 10 REM * 11 REM ********************************* 20 : 30 REM BBC BASIC (Z80) 50 : 60 REM CONNECTIONS TO 7-PIN DIN PLUG FOR ANALOGUE 1 PORT M014 ARE AS FOLLOWS USING 6-CORE SCREENED CABLE. 70 REM VIEW LOOKING INTO SOCKET OR INTO CONNECTION SIDE OF PLUG. 80 REM SEE EINSTEIN MANUAL PAGE 216. 90 : 100 : 110 REM black +5v 7* U *6 0v white 120 : 130 REM red channel 1 3* *1 channel 0 green 140 : 150 REM blue Vref 5* *4 fire 1 yellow 160 REM * 170 REM 2 screen 180 : 190 REM BATTERY POSITIVE TO PIN 1 200 REM " NEGATIVE TO PIN 6 210 REM MICROSWITCH TO PINS 2 AND 4 220 REM CONNECT PINS 2 AND 6 TOGETHER 230 : 240 REM INITIALISE VARIABLES, DIMENSION ARRAYS, ETC. 250 DATA 2.845, 2.96, 2.91, 2.88, 2.90, 2.89, 2.85, 2.89, 2.85, 2.93, 2.89, 2.93, 2.98, 2.93, 2.92, 2.82, 2.90, 2.91, 2.95, 2.89 260 DIM R(20),AH(20),STATUS(20),LAST_TIME(20) 270 FOR J=1 TO 20 280 READ R(J) 285 AH(J)=0 290 STATUS(J)=0 300 LAST_TIME(J)=0 310 NEXT J 330 : 340 REM DISPLAY INITIAL INSTRUCTIONS 350 PRINT TAB(10);"NICAD Version 1.1" 360 PRINT TAB(10);"__________________" 370 PRINT 380 INPUT "JOB TITLE ";JOB$ 390 INPUT "LIMITING VOLTAGE ";VLIM 400 PRINT "VOLTAGE CONVERSION FACTOR:" 410 PRINT "DEFAULT VALUE=0.00003066" 420 PRINT "ENTER NEW VALUE OR 0 FOR DEFAULT" 430 INPUT "V.C. FACTOR ";K 440 IF K=0 THEN K=0.00003066 450 PRINT 460 PRINT "SET STEPPING SWITCH TO 01" 470 PRINT "SET STRIKER SO THAT NEXT CLOSURE OF MICROSWITCH WILL OCCUR AT POSITION 01" 480 PRINT "START MOTOR AND IMMEDIATELY RUN PROGRAMME BY PRESSING ANY KEY" 490 START$=GET$ 500 CLS 510 TIME=0 520 REM START THE MAIN LOOP 530 PRINT 540 NOW=TIME 550 HRS=NOW/360000 560 PRINT " TIME ELAPSED = ";HRS;" HOURS" 570 PRINT 580 FOR CELL=1 TO 20 590 PROC_VOLTAGE 600 PROC_AMPERE_HOURS 610 REM NEXT STEP DEPENDS ON CELL STATUS 611 REM STATUS 0: NORMAL 612 REM 1: LOW VOLTAGE, STILL IN PLACE 613 REM 2: REMOVED 620 ON STATUS(CELL)+1 GOTO 720,630,780 630 PROC_WARNING 634 REM HAS CELL BEEN REMOVED? 635 IF V>0.1 THEN 780 650 REM CELL HAS BEEN REMOVED; SET STATUS 2 670 CLS 680 COLOUR 132 690 STATUS(CELL)=2 700 SOUND 1,-15,100,0 710 GOTO 780 720 IF V>VLIM THEN 750 730 PROC_WARNING 740 GOTO 780 750 REM DISPLAY INTERIM RESULT IN THE ABSENCE OF STATUS 1 OR 2 760 @%=&0002030A 770 PRINT "CELL ";CELL;" VOLTAGE = ";V;" Ah = ";AH(CELL) 780 NEXT CELL 790 REM ARE ALL CELLS DISCHARGED? 800 PROC_STATUS_TEST 810 IF SIGMA=40 THEN 820 ELSE530 820 PROC_FINAL_DISPLAY 830 IF A$="E" THEN 850 840 PROC_PRINT 850 END 860 : 870 DEF PROC_VOLTAGE 880 REM PROCEDURE MUST BE CARRIED OUT IRRESPECTIVE OF CELL STATUS. 900 REM DELAYS ARE INCLUDED TO ENSURE THAT MICROSWITCH HAS CLOSED BEFORE MEASUREMENT AND HAS OPENED BEFORE EXIT FROM PROCEDURE, TO PRESERVE SYNCHRONISATION WITH STEPPING SWITCH. 910 : 920 REM WAIT FOR MICROSWITCH TO CLOSE 930 IF ADVAL(0)=1 THEN 970 940 FOR DELAY=1 TO 100: NEXT DELAY 950 GOTO 930 960 : 970 REM SAMPLE 100 READINGS 980 SUM=0 990 FOR J=1 TO 100 1000 V=K*ADVAL(1) 1010 SUM=SUM+V 1020 FOR DELAY=1 TO 10:NEXT DELAY 1030 NEXT J 1040 V=0.01*SUM 1050 : 1060 REM WAIT FOR MICROSWITCH TO OPEN 1070 IF ADVAL(0)=0 THEN 1100 1080 FOR DELAY=1 TO 100:NEXT DELAY 1090 GOTO 1070 1100 ENDPROC 1110 : 1120 DEFPROC_AMPERE_HOURS 1130 REM IF STATUS=1 OR 2, OMIT PROCEDURE 1135 IF STATUS(CELL)=1 OR STATUS(CELL)=2 THEN 1200 1140 REM CALCULATE TIME ELAPSED SINCE LAST MEASUREMENT ON THIS CELL 1150 NOW=TIME 1160 TIME_INCREMENT=(NOW-LAST_TIME(CELL))/360000 1170 LAST_TIME(CELL)=NOW 1180 CURRENT=V/R(CELL) 1190 AH(CELL)=AH(CELL)+CURRENT*TIME_INCREMENT 1200 ENDPROC 1210 : 1220 DEF PROC_WARNING 1230 STATUS(CELL)=1 1250 CLS 1260 COLOUR 134 1270 DISCHARGE_TIME=TIME/360000 1280 PRINT TAB(8,5);"CELL ";CELL;" VOLTAGE = ";V 1290 PRINT 1300 PRINT TAB(10);"Ah = ";AH(CELL) 1310 PRINT 1320 PRINT TAB(5);"DISCHARGE TIME = ";DISCHARGE_TIME;" HOURS" 1330 PRINT 1340 PRINT TAB(10);"REMOVE CELL ";CELL;" NOW." 1350 SOUND 1,-15,100,-1 1360 ENDPROC 1370 : 1380 DEF PROC_FINAL_DISPLAY 1390 COLOUR 132 1400 SOUND 1,-15,100,0 1410 @%=&0002030A 1420 PRINT " CELL Ah" 1430 PRINT 1440 FOR J=1 TO 20 1450 PRINT J,AH(J) 1460 NEXT J 1470 PRINT 1480 INPUT "ENTER P FOR PRINTOUT, E FOR EXIT";A$ 1490 ENDPROC 1500 : 1510 DEF PROC_PRINT 1520 *OPT2 1530 L=LEN(JOB$) 1540 A$=STRING$(L,"-") 1550 PRINT JOB$ 1560 PRINT A$ 1570 PRINT:PRINT 1580 PRINT " CELL Ah" 1590 PRINT 1600 REM PRINT WITH 3 DECIMAL PLACES, 12 PRINT ZONE 1610 @%=&0002030A 1620 FOR I= 1 TO 20 1630 PRINT I, AH(I) 1640 NEXT I 1650 *OPT0 1660 PRINT 1670 PRINT TAB(10);"RUN COMPLETE" 1680 ENDPROC 1690 : 1700 DEF PROC_STATUS_TEST 1710 SIGMA=0 1720 FOR I= 1 TO 20 1730 SIGMA=SIGMA+STATUS(I) 1740 NEXT I 1750 ENDPROC 1751 REM THIS VERSION SAVED AS NICAD2