Routine: Visc
Function: Reads the absolute, uncalibrated viscosity, does a least squares best fit on the data
Called by: Calib, meas
Calls: Add, Divide, Equals, Fpint, Mult, Range, Read, Regld, Regsv, Sub
Entry: HL points to address of viscosity variable
Exit: C flag is set on error; viscosity is stored at HL
Preserved: All
VISC CALL REGSV
PUSH HL
; Set the statistical variables initially equal to zero.
LD DE,STATXX
LD HL,ZERO
CALL EQUALS
LD DE,STATXY
CALL EQUALS
LD DE,STATYY
CALL EQUALS
LD DE,STATX
CALL EQUALS
LD DE,STATY
CALL EQUALS
CALL RANGE
; Call subroutine Range to find the range of measurement.
RET C
XOR A
OUT (143),A
LD DE,NUM6
LD HL,NUM7
LD B,10
; Call read with ten revolutions at maximum speed.
CALL READ
LD B,10
; Use B as an index variable, to count the 10 readings.
VISC1 PUSH BC
LD IX,RNGMIN
Convert Rngmin to integer and output this motor speed to the DAC.
CALL FPINT
LD A,L
OUT (142),A
LD A,H
OUT (143),A
LD DE,NUM6
LD HL,NUM7
LD B,10
; Take the reading, with 10 revolutions.
CALL READ
; Now compute the various statistical variables that are required for the best fit. See text for explanation.
LD BC,NUM7
LD DE,NUM7
LD HL,NUM8
CALL MULT
LD BC,STATXX
LD DE,NUM8
LD HL,STATXX
CALL ADD
LD BC,NUM7
LD DE,NUM6
LD HL,NUM8
CALL MULT
LD BC,STATXY
LD DE,NUM8
LD HL,STATXY
CALL ADD
LD BC,NUM6
LD DE,NUM6
LD HL,NUM8
CALL MULT
LD BC,STATYY
ÖD DE,NUM8
LD HL,STATYY
CALL ADD
LD BC,NUM7
LD DE,STATX
LD HL,STATX
CALL ADD
LD BC,NUM6
LD DE,STATY
LD HL,STATY
CALL ADD
LD BC,RNGMIN
LD DE,RNGINC
LD HL,RNGMIN
; Add the range increment to Rngmin to get the new motor speed.
CALL ADD
POP BC
; Loop if 10 readings have not yet been taken.
DJNZ VISC2
JR VISC3
VISC2 JP VISC1
VISC3 LD BC,STATX
; Final calculation of the best fit.
LD DE,STATX
LD HL,NUM8
CALL MULT
LD BC,NUM8
LD DE,TEN
CALL DIVIDE
LD BC,STATXX
LD DE,NUM8
LD HL,STATXX
CALL SUB
LD BC,STATX
LD DE,STATY
LD HL,NUM8
CALL MULT
LD BC,NUM8
LD DE,TEN
CALL DIVIDE
LD BC,STATXY
LD DE,NUM8
LD HL,STATXY
CALL SUB
LD BC,STATY
LD DE,STATY
LD HL,NUM8
CALL MULT
LD BC,NUM8
LD DE,TEN
CALL DIVIDE
LD BC,STATYY
LD DE,NUM8
LD HL,STATYY
CALL SUB
LD BC,STATXY
LD DE,STATXX
POP HL
; Viscosity now returned in HL.
CALL DIVIDE
LD A,255
OUT (143),A
CALL REGLD
OR A
RET