Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 2: Live electronics

Hogeschool Gent - Departement Muziek en Drama


<Inhoudstafel>

2083

ADC-Konversie

 

[ref.: 10.1988] Praktische toepassing met de Elektuur I/O kaart: ADC konvertor: ICL7109

 

1. HARDWARE:

 

- INSERT: oorspronkelijk Elektuur artikel: Elektuur, mei 1988

- INSERT: data-sheet van de ICL7109

 

- 'Overdriving' the converter:

 

Het datasheet van de ICL7109 maakt gewag van de mogelijkheid om de chip te laten werken tot sampling rates van 244 samples per sekonde, heel wat sneller dus dan de 7.5 tot 30 S/s waarvoor hij normaal wordt ingezet en waarvoor de ADC op de elektuurkaart werd gedimensioneerd. De wijziging heeft wel een geringere precizie voor gevolg: 8 bits i.p.v. de oorspronkelijke 12 bits. Hiermee moet in de software tertege rekening gehouden worden.

Wanneer we alle 8 kanalen van de multiplexer willen scannen, dan wordt de maximale sampling rate per kanaal nu 244/8= 30 samples per sekonde. Dit volstaat voor de meting van een ingangssignaal waarvan de hoogste periodieke komponent niet sneller is dan 15Hz. (Nyquist-teorema) Het moet dus voldoende snel zijn om de periodiciteit van ritmes in een input-signaal te detekteren over 8 kanalen simultaan.

 

Volgende wijzigingen aan het oorspronkelijke ontwerp zijn hiervoor noodzakelijk:

1.- Volgende komponenten en verbindingen worden verwijderd:

- kristal tussen pinnen 22 en 23

- C6, 330nF

- C5, 150nF

- pin 23 wordt open gelaten

- pin 24, nu aan massa, wordt eveneens open gelaten.

Hierdoor wordt de interne 58-deler buiten werking gesteld.

2.- er moet een externe oscillator gebruikt worden.

Hiervoor komt een geintegreerde 2MHz oscillator perfekt in aanmerking.

Het uitgangssignaal van deze komponent wordt aangesloten op pin 22 (oscillator ingang) van de ICL7109.

C5 (de integratie kondensator) wordt nu opnieuw berekend:

Cint= 2048 . 5.10-7s.20.10-6A / 4V= 5.12nF

Ook de auto-zero kondensator, C6, wordt opnieuw berekend als:

Caz= 2 tot 4 keer C5= 12nF

 

 

2. SOFTWARE

 

Hier volgt dan de software waarzonder we met een dergelijke kaart natuurlijk niets kunnen doen. Ook andere delen van de kaart, worden in deze kode behandeld en van kommentaar voorzien.

 

 

' IBM-I/O kaart - interface testprogramma

' ***************************************

' hardware test-kondities voor dit programma:

' port A connected to port D

' port B connected to port C

' portA-D0 => portD-D7

' portA-D1 => portD-D6

' portA-D2 => portD-D5

' etc...

' initialisatie adres:

' &H300-&H30F of &H310-H31F afhankelijk van jumper op kaart

 

' Deklaratie van alle hardware konstanten:

CONST BaseAdr = &H300: ' R/W to base adres is illegal

CONST ADDAmsb = BaseAdr + &H1: ' AH adres voor DAC en ADC R/W

CONST ADDAlsb = BaseAdr + &H2: ' AL adres voor DAC en ADC R/W

CONST Illegal = BaseAdr + &H3: ' not used

CONST PortA = BaseAdr + &H4: ' PPI IC5 poort A - Konnektor K1 (8255-PA)

' PortA-D0 = pin16 I/O

' PortA-D1 = pin14 I/O

' PortA-D2 = pin12 I/O

' PortA-D3 = pin10 I/O

' PortA-D4 = pin8 I/O

' PortA-D5 = pin6 I/O

' PortA-D6 = pin4 I/O

' PortA-D7 = pin2 I/O

CONST PortE = BaseAdr + &H5: ' PPI IC5 poort E

' 3-bits voor multiplexer voor ADC (8255-PB)

' PortE-D0 = Mux ADC0 lsb kanaal-adres ADC

' PortE-D1 = Mux ADC1

' PortE-D2 = Mux ADC2 msb kanaal-adres ADC

' PortE-D3 = RUN start ADC-konversie

' 3-bits voor multiplexer DAC:

' PortE-D4 = Mux DAC0 pin25 ADC-konnektor lsb kanaal-adres DAC

' PortE-D5 = Mux DAC1 pin23 ADC-konnektor

' PortE-D6 = Mux DAC2 pin21 ADC konnektor msb kanaal-adres DAC

' PortE-D7 = Control DAC-konverter

CONST PortB = BaseAdr + &H6: ' PPI IC5 poort B - Konnektor K1

' PortB-D0 = pin15 I/O

' PortB-D1 = pin13 I/O

' PortB-D2 = pin11 I/O

' PortB-D3 = pin9 I/O

' PortB-D4 = pin7 I/O

' PortB-D5 = pin5 I/O

' PortB-D6 = pin3 I/O

' PortB-D7 = pin1 I/O

CONST PortABEini = BaseAdr + &H7: ' write only with 8255 ! status register PPI IC5

' when a 82C55A chip is used, the

' status register can be read back using this adres

' Bit 0 = Low nibble Port PC

' 0 = output

' 1 = input

' Bit 1 = Kontrole Port PB

' 0 = PB output-port

' 1 = PB input-port ' Bit 2 = Mode selection

' 0 = Mode 0 Basic I/O

' 1 = Mode 1 Strobed I/O

' Bit 3 = High Nibble Port PC

' 0 = output

' 1 = input

' Bit 4 = Kontrole Port PA

' 0 = PA output port

' 1 = PA input port

' Bit 5 = lsb mode

' Bit 6 = msb mode

' 00 = Mode 0 Basic I/O

' 01 = Mode 1 Strobed I/O

' 1x = Mode 2 Bidirectional bus

' Bit 7 = Mode set flag

' 0 = inactive

' 1 = active

' this bit must be 1, when the mode

' is programmed.

CONST PortC = BaseAdr + &H8: ' PPI IC6 poort C - Konnektor K1 (8255-PA)

' PortC-D0 = pin38 I/O

' PortC-D1 = pin36 I/O

' PortC-D2 = pin34 I/O

' PortC-D3 = pin32 I/O

' PortC-D4 = pin30 I/O

' PortC-D5 = pin28 I/O

' PortC-D6 = pin26 I/O

' PortC-D7 = pin24 I/O

CONST PortF = BaseAdr + &H9: ' PPI IC6 poort F (8255-PB)

' PortF-D0 = read status ADC-konverter

' PortF-D1...D7: not used

CONST PortD = BaseAdr + &HA: ' PPI IC6 poort D - Konnektor K1 (8255-PC)

' PortD-D0 = pin37 I/O

' PortD-D1 = pin35 I/O

' PortD-D2 = pin33 I/O

' PortD-D3 = pin31 I/O

' PortD-D4 = pin29 I/O

' PortD-D5 = pin27 I/O

' PortD-D6 = pin25 I/O

' PortD-D7 = pin23 I/O

CONST PortCDFini = BaseAdr + &HB: ' write only for 8255 - Register PPI IC6

' Bit 0 = Low nibble Port PC

' 0 = output

' 1 = input

' Bit 1 = Kontrole Port PB

' 0 = PB output-port

' 1 = PB input-port

' Bit 2 = Mode selection

' 0 = Mode 0 Basic I/O

' 1 = Mode 1 Strobed I/O

' Bit 3 = High Nibble Port PC

' 0 = output

' 1 = input

' Bit 4 = Kontrole Port PA

' 0 = PA output port

' 1 = PA input port

' Bit 5 = lsb mode

' Bit 6 = msb mode

' 00 = Mode 0 Basic I/O

' 01 = Mode 1 Strobed I/O

' 1x = Mode 2 Bidirectional bus

' Bit 7 = Mode set flag

' 0 = inactive

' 1 = active

' this bit must be 1, when the mode is programmed.

CONST TimPort0 = BaseAdr + &HC: ' timer0 - PIT (82C54)

CONST TimPort1 = BaseAdr + &HD: ' timer1

CONST TimPort2 = BaseAdr + &HE: ' timer2

CONST TimPortini = BaseAdr + &HF: 'timer control-register

' Read is illegal with 8253 chip

' O.K. for R/W with 82C54 chip

' Bit 0 = if 0 then Binary 16-bit count

' if 1 then 4 Decade BCD counter

' Bit 1 = Counter mode lsb

' Bit 2 = Counter mode

' Bit 3 = Counter mode msb

' 000= Mode 0 interrupt on TC

' 001= Mode 1 programmable one-shot

' x10= Mode 2 rate-generator

' x11= Mode 3 square-wave rate generator

' 100= Mode 4 software triggered strobe

' 101= Mode 5 hardware triggered strobe

' Bit 4 = RL0 lsb

' Bit 5 = RL1 msb

' 00 = Counter latching operation

' 10 = Read/Load MSB-only

' 01 = Read/Load LSB-only

' 11 = Read/Load lsb first, then msb

' Bit 6 = SC0 adres timer lsb

' Bit 7 = SC1 adres timer msb

' setting bit6 and bit7 high is illegal

' 00 = counter 0

' 01 = counter 1

' 10 = counter 2

' registerkonstanten:

CONST FreezeTim0 = 0: ' Binair = 0000 xxxx

CONST FreezeTim1 = 64: ' Binair = 0100 xxxx

CONST FreezeTim2 = 128: ' Binair = 1000 xxxx

' Mode 0

CONST PPIportsout = &H80 ' Binair = 1000 0000 PA=out,PB=out,PC=out

CONST PPIportsin = &H9B ' Binair = 1001 1011 PA=in ,PB=in , PC=in

CONST PPIacin = &H99 ' Binair = 1001 1001 PA=in ,PB=out, PC=in

CONST PPIacout = &H82 ' Binair = 1000 0010 PA=out,PB=in, PC=out

CONST PPIabin = &H92 ' Binair = 1001 0010 PA=in, PB=in, PC=out

CONST PPIabout = &H89 ' Binair = 1000 1001 PA=out,PB=out, PC=in

CONST PPIbcin = &H8B ' Binair = 1000 1011 PA=out,PB=in , PC=in

CONST PPIbcout = &H90 ' Binair = 1001 0000 PA=in ,PB=out, PC=out

 

CONST Justifleft = 0 ' left justified data input for DAC

CONST Justiright = 1 ' right justified data input for DAC

 

 

COMMON SHARED RegPPI1% ' memory voor het kontroleregister van de PPI

COMMON SHARED RegPPI2%

' if 82C55A chips are used, the status data ' can also be read from the chip as:

' RegPPI1%= INP(PortABEini)

' RegPPI2%= INP(PortCDFini)

' doing so is illegal with the 8255 chips

DECLARE SUB InitPPIforADC ()

DECLARE SUB DemoTimers ()

DECLARE SUB TestPPIs ()

DECLARE SUB TrimADC ()

DECLARE SUB TrimDAC ()

DECLARE SUB TestPPIsGWR ()

DECLARE FUNCTION OrgBits% ()

DECLARE FUNCTION ADC% (kanaal%)

' ***************************************************************************

 

'Set konfiguratie defaults:

RegPPI1% = PPIportsout

RegPPI2% = PPIportsin

 

InitPorts:

' initialisatie en konfiguratie van de binaire I/O poorten:

OUT PortABEini, PPIportsout

RegPPI1% = PPIportsout

' bepaal E , A , B als outputpoorten

OUT PortCDFini, PPIportsin

RegPPI2% = PPIportsin

' bepaal F , C , D als inputpoorten

OUT PortE, Justifleft AND 127

' left justified data-input for the DAC

' bit 7 van poort E naar de DAC CTRL-input

 

DO

CLS

LOCATE 5, 10

PRINT "Menu 1:";

LOCATE 7, 15

PRINT "1.- Test PPI's - procedure Elektuur";

LOCATE 8, 15

PRINT "2.- Test Timers in Intel 82C54 chip";

LOCATE 9, 15

PRINT "3.- Test PPI's - procedure G.-W.RAES";

LOCATE 10, 15

PRINT "4.- Trim ADC's - ICL7109 12bits ";

LOCATE 11, 15

PRINT "5.- Trim DAC - PM7548 12 bits";

LOCATE 12, 15

PRINT "6.- Kontinu multichannel test ADC's";

LOCATE 13, 15

PRINT "7.- QUIT";

INPUT keuze%

 

SELECT CASE keuze%

CASE 1

TestPPIs

CASE 2

DemoTimers

CASE 3

TestPPIsGWR

CASE 4 TrimADC

CASE 5

TrimDAC

CASE 6

GOSUB GWRTest

CASE 7

END

CASE ELSE

END SELECT

keuze% = 0

LOOP

 

' GWR-testkode:

GWRTest:

InitPPIforADC

kanaal% = 0

CLS

LOCATE 5, 10

PRINT "Continuous ADC test on 8 channels";

FOR i% = 0 TO 7

LOCATE 13, (i% + 1) * 9

PRINT i% + 1;

NEXT i%

 

DO

kanaal% = (kanaal% + 1) MOD 8

LOCATE 15, kanaal% * 9

PRINT ADC%(kanaal%);

LOOP UNTIL INKEY$ <> ""

RETURN

 

FUNCTION ADC% (kanaal%)

' returns the value read from a specified ADC-channel

' NOT tested yet, but should be free of bugs...

' PPI's must be initialized for this function to work!

byte% = (kanaal% OR 8) OR (byte% AND 247): ' set run bit (Bit 3)

' byte% = (kanaal% OR 8): ' set run bit + kanaal -other bits=0

OUT PortE, byte%

' bij slimme kode kan intussen iets anders afgewerkt worden door de processor:

DO: LOOP UNTIL INP(PortF) AND 1: ' D0 - check status ADC

WHILE INP(PortF) AND 1 = 1: WEND: ' wacht tot status 0 wordt

byte% = kanaal% OR (byte% AND 247): ' reset run-bit

OUT PortE, byte%

msb% = INP(ADDAmsb) AND &H3F: ' mask= 0011 1111

lsb% = INP(ADDAlsb)

IF (msb% AND 16) = 16 THEN ADC% = &H1000: EXIT FUNCTION: ' overflow

IF (msb% AND 32) = 0 THEN sign% = -1 ELSE sign% = 1

msb% = msb% AND &HF: ' mask= 0000 1111

ADC% = ((msb% * 256) + lsb%) * sign%

END FUNCTION

 

SUB DemoTimers

' initialisatie van de PIT-Timers

Value0% = 1

Value1% = 1

Value2% = 1

OUT TimPortini, (0 * 64 + 1 * 16 + 3 * 2 + 1):

'set counter 0 OUT TimPortini, (1 * 64 + 1 * 16 + 3 * 2 + 1):

'set counter 1

OUT TimPortini, (2 * 64 + 1 * 16 + 3 * 2 + 1): ' set counter 2

' Start de counters in 8254 chip:

' de timer-outputs kunnen op een skoop bekeken worden

OUT TimPort0, Value0%

OUT TimPort1, Value1%

OUT TimPort2, Value2%

' De uitgang van Timer0 staat op K1 - pin44 - G0 op pin 43 - klok0 op pin 40

' De uitgang van Timer1 staat op K1 - pin46 - G1 op pin 45 - klok1 op pin 41

' De uitgang van Timer2 staat op K1 - pin48 - G2 op pin 47 - klok2 op pin 42

' Het signaal op pin 39 kan met de DIP-switches ingesteld worden.

END SUB

 

SUB InitPPIforADC

' initializes the PPI's for the use of the ADC converter

' 'School'-example for 8255 register programming...

' Poort E moet OUTPUT zijn

' Bits 0,1,2 vormen het kanaaladres

' Bit 3 is het RUN kommando

' Bits 4 tot 7 zijn voor de DAC en mogen gemaskeerd worden.

' Poort E is de PB-poort van IC5

' Poort F moet INPUT zijn

' Bit 0 geeft de status van de ADC weer

' andere bits worden niet gebruikt

' Poort F is de PB-poort van IC6

' de aktuele status van de registers is opgeslagen in:

' RegPPI1% en RegPPI2%

 

' in RegPPI1% moeten volgende bits gedefinieerd worden:

' Bit 0 = dont care (PC-low port)

' Bit 1 = 0 makes PB output (= Poort E)

' Bit 2 = 0 Mode 0

' Bit 3 = dont care (PC-high port)

' Bit 4 = dont care (PA-port)

' Bit 5 = 0 Mode 0

' Bit 6 = 0 Mode 0

' Bit 7 = 1 enable register writing

' Dus binair: 100x x000

RegPPI1% = RegPPI1% OR 128: ' set bit 7

RegPPI1% = RegPPI1% AND &H98: ' masker= 1001 1000

OUT PortABEini, RegPPI1%

 

' in RegPPI2% moeten volgende bits gedefinieerd worden:

' Bit 0 = dont care (PC-low port)

' Bit 1 = 1 makes PB input (= Poort F)

' Bit 2 = 0 Mode 0

' Bit 3 = dont care (PC-high port)

' Bit 4 = dont care (PA-port)

' Bit 5 = 0 Mode 0

' Bit 6 = 0 Mode 0

' Bit 7 = 1 enable register writing

' Dus binair: 100x x010

RegPPI2% = RegPPI2% OR 130: ' set bit 7 masker= 1xxx xx1x

RegPPI2% = RegPPI1% AND &H9A: ' masker= 1001 1010

OUT PortCDFini, RegPPI2%

END SUB

 

FUNCTION OrgBits%

SHARED i%

' reorganize bits

x = 0

FOR j = 0 TO 7

IF (i% AND (2 ^ j)) <> 0 THEN x = 2 ^ (7 - j) + x

NEXT j

OrgBits% = x

END FUNCTION

 

SUB TestPPIs

' Test de digitale I/O poorten op de beide PPI-chips

' Voor deze (Elektuur-test) moet de konnektor K1 zo bedraad worden dat:

' Poort A verbinden met Poort D : alle bits omwisselen (D0 aan D7 enz...)

' Poort B verbinden met Poort C : alle bits omwisselen

CLS

LOCATE 23, 1

PRINT " Testing PPI Binary I/O ports "; SPACE$(30);

LOCATE 10, 1

Fout% = 0

FOR i% = 0 TO 255

OUT PortA, i%

OUT PortB, i%

x% = OrgBits%: ' herschik bitpatroon

IF INP(PortC) <> x% THEN

Fout% = Fout% + 1

PRINT "B out to C in error. Output was: "; i%

END IF

IF Fout% > 10 THEN EXIT FOR

IF INP(PortD) <> x% THEN

Fout% = Fout% + 1

PRINT "A out to D in error. Output was: "; i%

END IF

IF Fout% > 10 THEN EXIT FOR

NEXT i%

 

' herprogrammeer de PPI's:

OUT PortABEini, PPIacin: ' &H99 A en B input

RegPPI1% = PPIacin

OUT PortCDFini, PPIacout: ' &H82 C en D output

RegPPI2% = PPIacout

FOR i% = 0 TO &HFF

OUT PortC, i%

OUT PortD, i%

x% = OrgBits%

IF Fout% > 10 THEN EXIT FOR

IF INP(PortB) <> x% THEN

Fout% = Fout% + 1

PRINT "C out to B in error. Output was: "; i%

END IF

IF Fout% > 10 THEN EXIT FOR

IF INP(PortA) <> x% THEN

Fout% = Fout% + 1

PRINT "D out to A in error. Output was: "; i%

END IF

NEXT i%

 

' programmeer poorten C en D opnieuw als input:OUT PortCDFini, PPIportsin: &H9B = ports C and D as input-ports

RegPPI2% = PPIportsin

LOCATE 23, 1

IF Fout% = 0 THEN

PRINT "I/O section O.K."; SPACE$(20)

ELSE

PRINT "I/O section not O.K."; SPACE$(20)

END IF

END SUB

 

SUB TestPPIsGWR

' voor deze test moet op de kaart een kortsluitkonnektor ingebracht worden in K1

' Volgende tegenoverelkaarliggende pennen worden doorverbonden:

' 1 - 2

' 3 - 4

' ...

' 15-16 Hiermee zijn poorten A en B verbonden

' 23-24

' 25-26

' ...

' 37-38 Hiermee zijn poorten C en D verbonden

' Alle andere pinnen blijven open!!!

' Opgelet: A en B moeten nu een verschillende data-richting krijgen

' C en D eveneens

 

' initialisatie en konfiguratie van de binaire I/O poorten:

OUT PortABEini, PPIabout

RegPPI1% = PPIabout

' bepaal A= outputpoort (=PA in de chip)

' B= input (=PC in de chip)

' E= output (=PB in de chip)

OUT PortCDFini, PPIabin

RegPPI2% = PPIabin

' bepaal C= ingangspoort (=PA in de chip)

' D= outputpoort (=PC in de chip)

' F =ingangspoort (=PB in de chip)

FoutPPI1% = 0

FoutPPI2% = 0

DO

FOR i% = 0 TO &HFF

OUT PortA, i%

IF INP(PortB) <> i% THEN Fout% = FoutPPI1% + 1

OUT PortD, i%

IF INP(PortC) <> i% THEN Fout% = FoutPPI2% + 1

NEXT i%

Lus% = Lus% + 1

 

LOOP UNTIL INKEY$ <> "" OR Lus% > 1000

LOCATE 10, 10

PRINT "Testrezultaat PPI's voor "; Lus%; " R/W cycli:"

LOCATE 12, 10

PRINT "Aantal fouten PoortA -> PoortB:"; FoutPPI1%

LOCATE 13, 10

PRINT "Aantal fouten PoortD -> PoortC:"; FoutPPI2%

 

' omkering van het datatransport:

OUT PortABEini, PPIportsin: ' for safety...

OUT PortCDFini, PPIportsin

' herkonfiguratie van de binaire I/O poorten:

OUT PortABEini, PPIbcout

RegPPI1% = PPIbcout

' bepaal A= input poort (=PA in de chip)

' B= output (=PC in de chip)

' E= output (=PB in de chip)

OUT PortCDFini, PPIbcin

RegPPI2% = PPIbcin

' bepaal C= output poort (=PA in de chip)

' D= input poort (=PC in de chip)

' F =ingangspoort (=PB in de chip)

FoutPPI1% = 0

FoutPPI2% = 0

DO

FOR i% = 0 TO &HFF

OUT PortB, i%

IF INP(PortA) <> i% THEN Fout% = FoutPPI1% + 1

OUT PortC, i%

IF INP(PortD) <> i% THEN Fout% = FoutPPI2% + 1

NEXT i%

Lus% = Lus% + 1

 

LOOP UNTIL INKEY$ <> "" OR Lus% > 1000

LOCATE 15, 10

PRINT "Testrezultaat PPI's voor "; Lus%; " R/W cycli:"

LOCATE 17, 10

PRINT "Aantal fouten PoortB -> PoortA:"; FoutPPI1%

LOCATE 18, 10

PRINT "Aantal fouten PoortC -> PoortD:"; FoutPPI2%

SLEEP 10

END SUB

 

SUB TrimADC

 

LOCATE 1, 1

PRINT "Which ADC-Channel do you want to use for the test? (0-7)"

DO

K$ = INKEY$

LOOP UNTIL VAL(K$) >= 0 AND VAL(K$) < 8

kanaal% = VAL(K$)

 

ADCTest:

LOCATE 1, 1

PRINT "ADC Input value channel "; kanaal%; " is:";

' testing and adjusting of the ADC chip

byte% = (kanaal% OR 8) OR (byte% AND 247): ' set run bit (Bit 3)

OUT PortE, byte%

DO: LOOP UNTIL INP(PortF) AND 1: ' D0 - check status ADC

WHILE INP(PortF) AND 1 = 1: WEND: ' wacht tot status 0 wordt

byte% = kanaal% OR (byte% AND 247): ' reset run-bit

OUT PortE, byte%

msb% = ((INP(ADDAmsb) AND 48))

word% = ((((INP(ADDAmsb) AND 15) * 256) + INP(ADDAlsb)))

IF (msb% AND 16) = 16 THEN PRINT "Overflow ": GOTO jmp3

IF (msb% AND 32) = 0 THEN word% = -word%:

' sign-bit for polarity Voltage! = ((word% * 2000!) / &H800)

PRINT " ";

PRINT USING "#####.#"; INT(Voltage!);

PRINT "mV "

LOCATE 7, 1

PRINT "Adjust P1 until reading is in accordance with multimeter"

jmp3:

LOCATE 9, 1

PRINT "Press SPACE-BAR to check and adjust the DAC-chip "

IF INKEY$ <> " " THEN GOTO ADCTest

END SUB

 

SUB TrimDAC

' Test-routine voor de 12-bit DAC-chip:

DACTest:

LOCATE 7, 1

PRINT SPACE$(79)

OUT PortE, Justifleft AND 127

OUT ADDAmsb, &H80

OUT ADDAlsb, 0

LOCATE 1, 1

PRINT "Adjust P2 dor DAC output of 0.0mV"; SPACE$(20)

LOCATE 9, 1

PRINT "Press SPACE-BAR for the next DAC check..."; SPACE$(15)

WHILE INKEY$ <> " ": WEND

OUT ADDAmsb, &HFF

OUT ADDAlsb, &HF0

LOCATE 1, 1

PRINT "Adjust P3 for DAC output of 3.998 V"; SPACE$(20)

LOCATE 9, 1

PRINT "Press SPACE-BAR for the next DAC check..."; SPACE$(15)

WHILE INKEY$ <> " ": WEND

OUT ADDAmsb, &H0

OUT ADDAlsb, &H0

LOCATE 1, 1

PRINT "The output of the DAC should now read -4.000V"; SPACE$(10)

LOCATE 9, 1

PRINT "Press SPACE-BAR to QUIT program "

DO

A$ = INKEY$

LOOP UNTIL A$ <> ""

IF A$ <> " " THEN GOTO DACTest

CLS

END SUB 


Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES