Digitalvoltmeter
;===================================================
;---- Experiment: Digitalvoltmeter -----------------
;===================================================
;
.GLOBAL DVM
DVM: CALL SETMUX ;Multiplexer setzen
CALL GETADC ;Wert von ADC holen
IN A,(DIPSW) ;Verstärkungsfaktor
AND 07 ;Wert anpassen
JR Z,$7
LD B,A
$3: SRA H ;durch Schieben
RR L
DJNZ $3
$7: EX DE,HL
LD BC,20000 ;skalieren
CALL MLT32S
EX DE,HL
CALL DSPHL ;Ausgabe auf Display
LD C,4 ;Dezimalpunkt
CALL SETDP
LD HL,50000 ;350 ms warten
CALL DELAY
JR DVM
;
;===================================================
;---- MUX-Kanal und Verstärkung einstellen ---------
;===================================================
;
;ENTRY: DIP-switch
; Bit 0..2: Verstärkungsfaktor
; Bit 4..6: Kanalnummer
;EXIT: MUX entsprechend eingestellt, S&H gestartet
;
SETMUX: PUSH AF
PUSH BC
IN A,(DIPSW) ;Kanaladr. berechnen
LD C,MUXBAS
AND 0F0H
SRL A
SRL A
SRL A
SRL A
ADD A,C
LD C,A
IN A,(DIPSW) ;Verstärkungsfaktor
AND 07H
OUT (C),A ;MUX einstellen,
POP BC ; S&H starten
POP AF
RET
;
;===================================================
;---- AD-Wandler starten, Ergebnis lesen -----------
;===================================================
;
;ENTRY: -
;EXIT: Wert vom ADC x16 als 2er-Komplement
;
GETADC: PUSH AF
PUSH DE
LD A,0
OUT (ADCHI),A ;ADC (12 bit) starten
BIT 0,(IX) ;warten bis ADC fertig
BIT 0,(IX)
BIT 0,(IX)
BIT 0,(IX)
BIT 0,(IX)
IN A,(ADCHI) ;Wert holen
XOR 80H ;2er-Kompl. erzeugen
LD H,A
IN A,(ADCLO)
LD L,A
POP DE
POP AF
RET
|