REM QUICKBASIC program to display AVR Counter data as text, bargraph and graph REM REM Software is Copyright (C) Murray Greenman ZL1BPU 2001 REM REM Expects a frame of 32 bytes, 8 x 4 ASCII chars for 8 channels, in register order. REM Each frame is received at 200 ms intervals, and is terminated by CR/LF. REM T = 0: SPEED = 0: Z% = 48: DIM dset$(6, 6): DIM dset(6, 6) start: SCREEN 12: CLS : COLOR 14 OPEN "CNTR.SET" FOR INPUT AS #1 FOR i = 0 TO 6 INPUT #1, ch%, NAME$, UNIT$, CAL, OFS dset$(ch%, 1) = NAME$ dset$(ch%, 2) = UNIT$ dset(ch%, 1) = CAL dset(ch%, 2) = OFS NEXT i INPUT #1, PNO$: PNO = VAL(PNO$) LOCATE 1, 10: PRINT "AVR Counter / Voltmeter"; LOCATE 1, 50: PRINT "Connect Counter to COM"; PNO$ CLOSE 1 KEY OFF: OPEN "com" + PNO$ + ":19200,N,8,1,cs0,ds0" FOR RANDOM AS #1 ON ERROR GOTO allerr LINE INPUT #1, reg$ 'throw away first reading GOSUB drawdvm main: Z$ = INKEY$: IF Z$ = CHR$(27) THEN END IF Z$ = "F" OR Z$ = "f" THEN SPEED = 1 IF Z$ = "S" OR Z$ = "s" THEN SPEED = 0 LINE INPUT #1, reg$ REM IF LEFT$(reg$, 1) <> CHR$(10) THEN GOTO main 'dud or special data IF LEN(reg$) > 35 THEN GOTO main IF LEN(reg$) < 30 THEN GOTO main reg$ = RIGHT$(reg$, LEN(reg$) - 1)'throw away LF at start of line debug: REM fred$ = LEFT$(reg$ + SPACE$(32), 32) REM LOCATE 29, 5: PRINT fred$; DVM: FOR ch% = 0 TO 6'step forwards to give trend graph counter highest priority COLOR ch% + 9 LOCATE (4 + ch% * 2), 3: PRINT CHR$(219); " "; COLOR 15: PRINT dset$(ch%, 1); IF ch% = 6 THEN x$ = MID$(reg$, (ch% * 4 + 1), 8): x = VAL("&H" + x$) LOCATE (4 + ch% * 2), 12: PRINT x$; " "; LOCATE (4 + ch% * 2), 20: PRINT USING " ######.## "; dset(ch%, 2) + x / dset(ch%, 1); LOCATE (4 + ch% * 2), 31: PRINT dset$(ch%, 2); : Y = x / 4096: trace = 15: GOSUB bar Y = x AND 255: trace = 15 - 2 * (T AND 1): GOSUB trend ELSE x$ = MID$(reg$, (ch% * 4 + 1), 4): x = VAL("&H" + x$) LOCATE (4 + ch% * 2), 16: PRINT x$; " "; LOCATE (4 + ch% * 2), 21: PRINT USING " +###.### "; dset(ch%, 2) + x / dset(ch%, 1); LOCATE (4 + ch% * 2), 31: PRINT dset$(ch%, 2); : Y = x / 16: trace = ch% + 9: GOSUB bar END IF NEXT ch% IF SPEED = 0 THEN T = T + .25 ELSE T = T + 1 END IF endframe: Z$ = CHR$(Z%): Z% = Z% + 1: LOCATE 1, 79: PRINT Z$; IF Z% > 57 THEN Z% = 48 GOTO main clearline: FOR i% = 6 TO 14 LOCATE i%, 3 + (T% / 8): PRINT CHR$(219); NEXT i% RETURN bar: LOCATE , 35: IF Y < 0 THEN Y = 0 IF (Y > 255) THEN Y = 255 'arrive here with y in range 0 - 255 IY = INT(Y / 6): COLOR ch% + 9 PRINT STRING$(IY, 219); COLOR ch% + 1 PRINT STRING$(43 - IY, 177); ' 6 * y; trend: IF T > 600 THEN T = 0 COLOR 7 FOR i = 22 TO 30 LOCATE i, 2: PRINT STRING$(78, CHR$(219)); NEXT i END IF PSET (T! + 10, 475), 8 PSET (T! + 10, 340), 8 PSET (T! + 10, 474 - Y / 2), trace COLOR 15 RETURN drawdvm: CLS : COLOR 14 LOCATE 1, 10: PRINT "AVR Counter / Voltmeter"; REM LOCATE 1, 58: PRINT "ESC to exit"; LOCATE 3, 2: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"; LOCATE 19, 2: PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"; FOR i% = 4 TO 18 LOCATE i%, 2: PRINT CHR$(179); LOCATE i%, 79: PRINT CHR$(179); NEXT i% COLOR 7 FOR i = 22 TO 30 LOCATE i, 2: PRINT STRING$(78, CHR$(219)); NEXT i drawcmd: COLOR 14 REM LOCATE 20, 3: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"; REM LOCATE 23, 3: PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"; REM FOR i% = 21 TO 22 REM LOCATE i%, 3: PRINT CHR$(179); REM LOCATE i%, 79: PRINT CHR$(179); REM NEXT i% COLOR 15 LOCATE 20, 5: PRINT "Commands:"; LOCATE 20, 22: PRINT "F Fast"; LOCATE 20, 42: PRINT "S Slow"; LOCATE 20, 62: PRINT "ESC Quit program"; REM LOCATE 19, 40: PRINT "Edit AVRDVM.SET to change Channel"; REM LOCATE 20, 40: PRINT "Names, units, scaling and offset."; REM LOCATE 21, 40: PRINT "Setting name to zero deletes channel."; RETURN allerr: REM PRINT ERR, ERL RESUME NEXT END