'-- uni8ad.bas ------------------------------------------------- >>fst'02<< - ' - liest den Universal 8-Bit AD Wandler aus ' - der Messwert ist ein Mittelwert aus 127 Messungen ' - unter DOS oder im DOS-Modus ausfuehren ' - PUBLIC DOMAIN ' - Anschluss an die serielle oder parallele Schnittstelle ' - Verbindungen: (Bauanleitung im Internet; s.u.) ' - TLC549 - - COM - - LPT - - Zweck --------------------------- ' VCC <- TxD D 7 Versorgungsspannung fuer Platine ' I/O Clock <- DTR D 0 Taktleitung ' DATA OUT -> CTS SELECT Daten vom Wandler ' CS <- RTS D 1 Wandler-Aktivierung (Chip-Select) '-- V 20041129 ------------------------------- http://www.FrankSteinberg.de - DEFINT A-Z 'Standard fuer Variablen ist Integer Ref! = .128 'hier Referenzspannung angeben Delay = 120 'Delayschleifen fuer den Wandler bei schnellen PCs 'I/O Basisadressen der Schnittstellen festlegen '(Hochkomma vor der gewuenschten Zeile entfernen): BA = &H3F8 'COM1 1016 'BA = &H2F8 'COM2 760 'BA = &H3E8 'COM3 1000 'BA = &H2E8 'COM4 744 'BA = &H378 'LPT1 888 'BA = &H3BC 'LPT1 956 Alternativadresse fuer LPT1 bei manchen PCs 'BA = &H278 'LPT2 632 IF BA = &H378 OR BA = &H3BC OR BA = &H278 THEN 'wenn LPT gewaehlt ... Ausg = BA 'I/O Adresse Ausgang (Datenleitungen) an Offset 0 Eing = BA + 1 'I/O Adresse Eingang (Statusleitungen) an Offset 1 OUT Ausg, 128 'Stromversorgung des Wandlers an D7 ein CLKhigh = 1 + 128 'ByteWert fuer CS low / CLK high / VSS high (Bit0 Data0) CShigh = 2 + 128 'ByteWert fuer CS high / CLK low / VSS high (Bit1 Data1) Clow = 0 + 128 'ByteWert fuer CS low / CLK low / VSS high BitW = 16 'ByteWert des Datenbits (Bit4 SELECT) ELSE 'wenn COM gewaehlt ... Ausg = BA + 4 'I/O Adresse Ausgang (ModemSteuerRegister) an Offset 4 Eing = BA + 6 'I/O Adresse Eingang (ModemStatusRegister) an Offset 6 OUT BA + 3, 64 'Stromversorgung des Wandlers an TxD -> VSS ein CLKhigh = 1 'ByteWert fuer CS low / CLK high (Bit0 RTS) CShigh = 2 'ByteWert fuer CS high / CLK low (Bit1 DTR) Clow = 0 'ByteWert fuer CS low / CLK low BitW = 16 'ByteWert des Datenbits (Bit4 CTS) END IF CLS WIDTH 40 'groáe Schrift PRINT PRINT "Universal 8-Bit AD-Wandler >>fst'02<<" PRINT PRINT "Referenzspannung ="; Ref!; "Volt" DO 'Beginn der Hauptschleife SWert = 0 'alten Summenwert loeschen OUT Ausg, CShigh 'CS high TS! = TIMER: DO: LOOP WHILE TS! = TIMER 'Timer-Sprung abwarten TS! = TIMER: DO: LOOP WHILE TS! = TIMER 'eine Timer-Periode (55mS) warten OUT Ausg, Clow 'CS low FOR i = 1 TO 127 '127 Werte lesen FOR j = 7 TO 0 STEP -1 '8 Bits fuer einen Wert FOR p = 1 TO Delay: NEXT 'Delay bei schnellen PCs 'Wertigkeit des Datenbits summieren IF (INP(Eing) AND BitW) THEN EW = EW + 2 ^ j OUT Ausg, CLKhigh 'CLK high OUT Ausg, Clow 'CLK low NEXT j 'naechstes Bit SWert = SWert + EW 'Summe fuer Mittelwert bilden IF EW < WMin THEN WMin = EW 'Minimalwert speichern IF EW > WMax THEN WMax = EW 'Maximalwert speichern EW = 0 'letzten Einzelwert loeschen NEXT i 'naechsten Wert lesen 'Werte anzeigen LOCATE 10 PRINT USING "Minimalwert ### Digits"; WMin PRINT USING "Maximalwert ### Digits"; WMax PRINT USING "Streuung ### Digits"; WMax - WMin + 1 SWert = SWert / 127 'Mittelwert aus 127 Messungen PRINT USING "Mittelwert ### Digits"; SWert U! = SWert * Ref! / 256 'Messspannung berechnen PRINT PRINT USING "Spannung #.### Volt "; U! WMin = 333 'alten Minimalwert loeschen WMax = 0 'alten Maximalwert loeschen SWert = 0 'alten Summenwert loeschen '0,5 Sek-Delay zum Betrachten der Werte: TS! = TIMER: DO: LOOP UNTIL TIMER - TS! > .5 LOOP WHILE INKEY$ = "" 'Ende bei Tastendruck WIDTH 80 'auf Normalschrift schalten