'-- tlc549.bas ------------------------------------------------- >>fst'01<< - ' - liest den 8-Bit AD Wandler TLC549 ueber den Parallelport aus ' - Verbindungen: (Bauanleitung im Internet; s.u.) ' -- TLC549 ----- -- LPT ----------- -- Zweck ------------------------ ' Pin1 (REF+) <- Pin 5 (DATA3) = Versorgungs- & Referenzspannung ' Pin2 (ANALOG IN) - = Plus Messleitung ' Pin3 (REF-) - Pin18-19 (GND) = Masse & Minus Referenzspannug ' Pin4 (GND) - Pin18-19 (GND) = Masse & Minus Referenzspannug ' Pin5 (CS) <- Pin14 (AUTO FEED) = Chip-Select ' Pin6 (DATA OUT) -> Pin15 (ERROR) = Wandlerdaten ' Pin7 (I/O CLOCK) <- Pin16 (INIT/RESET) = Taktleitung ' Pin8 (VCC) <- Pin 5 (DATA3) = Versorgungs- & Referenzspannung '-- V 20041128 ------------------------------- http://www.FrankSteinberg.de - URef = 3.95 'Referenzspannung (messen & anpassen) Port$ = "1" 'Nummer LPT-Port vorbelegen DEF SEG = 0 'Segment setzen BA1% = PEEK(&H408) + PEEK(&H409) * 256 'LPT1-Basisadresse auslesen BA2% = PEEK(&H40A) + PEEK(&H40B) * 256 'LPT2-Basisadresse auslesen IF BA2% THEN 'Abfrage, falls LPT2 vorhanden CLS : PRINT PRINT "Welchen LPT-Port benutzen? [1] oder [2] druecken." DO: Port$ = INKEY$ LOOP UNTIL Port$ = "1" OR Port$ = "2" END IF IF Port$ = "2" THEN BA% = BA2% ELSE BA% = BA1% 'Basisadresse setzen CLS LOCATE 2, 1 PRINT "Auslesen des TLC549 8-Bit AD - Wandlers >>fst'01<<" PRINT "ueber LPT "; Port$; " I/O-Adresse ="; BA%; "/ "; HEX$(BA%); "hex"; "" PRINT PRINT "Referenzspannung ="; URef; "Volt" StatR% = BA% + 1 'Statusregister ist bei Offset 1 SteuR% = BA% + 2 'Steuerregister ist bei Offset 2 OUT BA%, 8 'Stromversorgung ueber Datenausgang 3 ein TStart = TIMER 'Startzeit festhalten WMin% = 999 'Minimalwert vorbelegen, wird sofort unter- 'schritten und erster Wert wird Minimalwert 'INIT -> I/O CLOCK auf low = Bit2 (Wert 4) auf 0: OUT SteuR%, INP(SteuR%) AND 255 - 4 DO 'Start Hauptschleife LOCATE 8, 1 'Cursor setzen WDat% = 0 'alten Wandlerwert loeschen 'AUTO FEED -> CS auf high = Bit1 (Wert 2) auf 0: OUT SteuR%, INP(SteuR%) AND 255 - 2 'AUTO FEED -> CS auf low = Bit1 (Wert 2) auf 1, OUT SteuR%, INP(SteuR%) OR 2 FOR i% = 7 TO 0 STEP -1 'Bits7-0 des TLC 549 nacheinander auslesen IF (INP(StatR%) AND 8) THEN 'Bit3 (Wert 8) DATA OUT->ERROR gesetzt? M% = 1 'wenn ja, Multiplikator auf 1 ELSE M% = 0 'wenn nein, Multiplikator auf 0 END IF 'INIT -> I/O CLOCK auf high = Bit2 (Wert 4) auf 1: OUT SteuR%, INP(SteuR%) OR 4 'INIT -> I/O CLOCK auf low = Bit2 (Wert 4) auf 0: OUT SteuR%, INP(SteuR%) AND 255 - 4 'aktuelles Bit anzeigen: PRINT USING "Bit#: ### * # = ###"; i%; 2 ^ i%; M%; 2 ^ i% * M% WDat% = WDat% + M% * 2 ^ i% 'Wert des Bits aufsummieren NEXT 'naechstes Bit holen 'hier ist eine Pause von min. 17 Mikrosek. erforderlich Volt = URef / 256 * WDat% 'Ein Digit stellt den 256'sten Teil (8 Bit) 'der Referenzspannung dar PRINT "============================" PRINT USING "Summe ### Digits"; WDat% PRINT USING "entspricht ##.## Volt"; Volt PRINT 'Maximal- und Minmalwert ermitteln; jedoch nicht in der ersten Zehntel- 'Sekunde (da kann der Wert noch schwanken, insbes. mit Stuetzkondensator). IF (TIMER - TStart) > .1 THEN IF WDat% < WMin% THEN WMin% = WDat% IF WDat% > WMax% THEN WMax% = WDat% PRINT USING "Minimalwert ### Digits"; WMin% PRINT USING "Maximalwert ### Digits"; WMax% END IF LOOP WHILE INKEY$ = "" 'Ende mit Tastendruck OUT BA%, 0 'Stromversorgung ausschalten