Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.


Experiment: Digitalvoltmeter

In diesem Experiment soll ein einfaches 8-Kanal-Digitalvoltmeter aufgebaut werden, dessen Eingangsspannungsbereich und Messkanal über die auf der Platine uP1 vorhandenen DIP-Schalter eingestellt werden können. Der Eingangsverstärker kann in 7 binären Stufen eingestellt werden, wobei die niedrigste Stufe einem Eingangsspannungsbereich von +/- 1 V (bzw. +/- 2 V, je nach Stellung des Jumpers J1 auf der Platine ADAC12) entspricht, alle anderen Messbereiche sind jeweils um die Hälfte kleiner. Zu beachten ist, dass die maximale Dynamik aufgrund der Steuersoftware auf 16 Bit begrenzt ist.

In der folgenden Tabelle sind die Schalterstellungen für alle Messbereiche und alle Eingangskanäle aufgelistet.

S3

S2

S1

Spannungsbereich

0

0

0

+/- 1.000 V

0

0

1

+/- 0.500 V

0

1

0

+/- 0.250 V

0

1

1

+/- 0.125 V

1

0

0

+/- 0.063 V

S7

S6

S5

Kanal

0

0

0

0

0

0

1

1

0

1

0

2

0

1

1

3

1

0

0

4

1

0

1

5

1

1

0

6

1

1

1

7

 

Die Abbildung zeigt den Aufbau des Digitalvoltmeters. Es verwendet die Platinen uP1, SERPAR, ADAC12 und 7SGDSP. Der Mikroprozessor misst die Werte der Eingangsspannung mit Hilfe des ADCs auf der Platine ADAC12 und gibt sie auf dem 6stelligen Display aus.

Das Digitalvoltmeter kann auf einfache Weise geeicht werden. Dazu wird der Eingangsspannungsbereich auf +/- 1 V gesetzt und eine Spannung von etwa 0.8 V angelegt. Mit dem Potentiometer 'Full Scale' auf der Platine ADAC12 wird nun die Referenz für den AD-Wandler so angepasst, dass auf der Anzeige genau der entsprechende Wert angezeigt wird. Zu beachten ist, dass die Eingänge der Kanäle 0 bis 3 als Differenzeingänge konstruiert sind. Für Messungen gegen Massepotential ist der negative Eingang auf Masse zu legen.

Aufbau eines 8-Kanal-Digitalvoltmeters

Das unten abgedruckte Listing zeigt die Implementierung des DVMs. Das Programm läuft in einer Endlosschleife, in der folgende Aktionen durchgeführt werden: Zuerst wird entsprechend der Stellung der DIP-Schalter der Multiplexer und der programmierbare Verstärker (PGA) eingestellt und die S&H-Schaltung aktiviert. Darauf wird der AD-Wandler gestartet und das Ergebnis der Konversion entsprechend dem Verstärkungsfaktor des PGA angepasst. Dieser Wert wird nun mit einem Skalierungsfaktor multipliziert und das Resultat auf dem 7-Segment-Display ausgegeben.

Der Skalierungsfaktor zur Skalierung des Ergebnisses ist meist eine reelle Zahl (in diesem Beispiel 0.0000305), für deren Verarbeitung man eine Gleitkommaroutine benötigen würde. Um den Aufwand für eine solche Routine zu vermeiden, wird der Skalierungsfaktor mit dem Faktor 10000 (vier Kommastellen) multipliziert und - um die Genauigkeit zu erhöhen - weiter mit 216. Nach der Berechnung des skalierten Messwertes wird dieser wieder durch 216 dividiert, indem vom 32-Bit-Ergebnis der Multiplikation nur das höherwertige Wort verwendet wird.

;===================================================
;---- 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


Last Update: 2008-05-31