Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 2: Live electronics
Hogeschool Gent - Departement Muziek en Drama
[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