'-- ltc1290.bas ------------------------------------------------ >>fst'01<< - ' - Das Programm holt Messwerte von allen 8 Kanaelen der ' 12 Bit AD - Wandlerplatine aus dem Vertrieb von Conrad Elektronik ' (BestNr 96 76 53) und stellt sie dar. ' - Die Routinen zur Kommunikation mit dem Wandler befinden sich in der ' SUB "AlleKan". ' - Auf die weiteren Konfigurationsmoeglichkeiten des Wandlers wurde der ' Einfachheit halber verzichtet. In der SUB befinden sich jedoch Hinweise, ' wie die Konfigurationsbits zu setzen sind. '-- V 20010904 ------------------------------ http://home.arcor.de/steini63 - DECLARE SUB AlleKan (Port%, D%()) DIM D%(1 TO 8) 'Die Messwerte befinden sich in D%(1) - D%(8) CLS LOCATE 5, 5 PRINT ">> Einleseprogramm fuer die 8 Kanaele der LTC 1290 AD-Wandlerplatine <<" LOCATE 10, 8 PRINT "Wie lautet die Nummer der seriellen Schnittstelle (1 bis 4) ?" Taste$ = INPUT$(1) SELECT CASE Taste$ 'Basisadresse der ser. Schnittstelle festlegen CASE "1" Port% = &H3F8 CASE "2" Port% = &H2F8 CASE "3" Port% = &H3E8 CASE "4" Port% = &H2E8 CASE ELSE END END SELECT CLS LOCATE 2, 5 PRINT ">> Einleseprogramm fuer die 8 Kanaele der LTC 1290 AD-Wandlerplatine <<" LOCATE 22, 5 PRINT "Zum Beenden eine Taste betaetigen.." DO UNTIL INKEY$ <> "" 'Hauptschleife CALL AlleKan(Port%, D%()) '8 Messwerte holen LOCATE 5, 5 PRINT USING "KANAL 1 = ##### mV "; D%(1) '... und anzeigen LOCATE 7, 5 PRINT USING "KANAL 2 = ##### mV "; D%(2) LOCATE 9, 5 PRINT USING "KANAL 3 = ##### mV "; D%(3) LOCATE 11, 5 PRINT USING "KANAL 4 = ##### mV "; D%(4) LOCATE 13, 5 PRINT USING "KANAL 5 = ##### mV "; D%(5) LOCATE 15, 5 PRINT USING "KANAL 6 = ##### mV "; D%(6) LOCATE 17, 5 PRINT USING "KANAL 7 = ##### mV "; D%(7) LOCATE 19, 5 PRINT USING "KANAL 8 = ##### mV "; D%(8) LOOP END SUB AlleKan (Port%, D%()) '--------------------------------------------------------------- '8 Kanaele konfigurieren und zeitversetzt 8 Kanaele auslesen. 'Weil der erste Wert des Wandlers erst nach einem Durchlauf 'zur Verfuegung steht, werden 9 Durchgaenge benoetigt. '--------------------------------------------------------------- MStR% = Port% + 4 'Basisadresse des Modem-Steuer-Registers Faktor = 5000 / 4096 'Anpassung an die Referenzspannung 5000 mV FOR K% = 1 TO 9 '9 Durchgaenge Vout% = 0 'Datenbit 11 / Konfigurationsbit 7 (differentiell/massebezogen) OUT MStR%, (&HFE AND INP(MStR%)) 'OUT MStR%, (&HFD AND INP(MStR%)) '0 - differentiell OUT MStR%, (&H2 OR INP(MStR%)) '1 - massebezogen OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 2048 * D% 'Datenbit 10 / Konfigurationsbit 6 (Kanalselektor-Bit 2) OUT MStR%, (&HFE AND INP(MStR%)) IF K% = 1 OR K% = 3 OR K% = 5 OR K% = 7 THEN OUT MStR%, (&HFD AND INP(MStR%)) '0 - Kanalwahl 2 ELSE OUT MStR%, (&H2 OR INP(MStR%)) '1 - Kanalwahl 2 END IF OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 1024 * D% 'Datenbit 9 / Konfigurationsbit 5 (Kanalselektor-Bit 1) OUT MStR%, (&HFE AND INP(MStR%)) IF K% = 1 OR K% = 2 OR K% = 3 OR K% = 4 THEN OUT MStR%, (&HFD AND INP(MStR%)) '0 - Kanalwahl 1 ELSE OUT MStR%, (&H2 OR INP(MStR%)) '1 - Kanalwahl 1 END IF OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 512 * D% 'Datenbit 8 / Konfigurationsbit 4 (Kanalselektor-Bit 0) OUT MStR%, (&HFE AND INP(MStR%)) IF K% = 1 OR K% = 2 OR K% = 5 OR K% = 6 THEN OUT MStR%, (&HFD AND INP(MStR%)) '0 - Kanalwahl 0 ELSE OUT MStR%, (&H2 OR INP(MStR%)) '1 - Kanalwahl 0 END IF OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 256 * D% 'Datenbit 7 / Konfigurationsbit 3 (bipolar/unipolar) OUT MStR%, (&HFE AND INP(MStR%)) 'OUT MStR%, (&HFD AND INP(MStR%)) '0 - bipolar OUT MStR%, (&H2 OR INP(MStR%)) '1 - unipolar OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 128 * D% 'Datenbit 6 / Konfigurationsbit 2 (Bitreihenfolge) OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) '1 - MSB zuerst OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 64 * D% 'Datenbit 5 / Konfigurationsbit 1 (Wortlaenge-Bit 1) OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) '1 - Wortlaenge 12 Bit OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 32 * D% 'Datenbit 4 / Konfigurationsbit 0 (Wortlaenge-Bit 2) OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&HFD AND INP(MStR%)) '0 - Wortlaenge 12 Bit OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 16 * D% 'Datenbit 3 / Blindbit OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 8 * D% 'Datenbit 2 / Blindbit OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 4 * D% 'Datenbit 1 / Blindbit OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 2 * D% 'Datenbit 0 / Blindbit OUT MStR%, (&HFE AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) OUT MStR%, (&H1 OR INP(MStR%)) IF (INP(MStR% + 2) AND &H10) = &H10 THEN D% = 0 ELSE D% = 1 Vout% = Vout% + 1 * D% 'Nachlauf OUT MStR%, (&HFD AND INP(MStR%)) OUT MStR%, (&H2 OR INP(MStR%)) Vout% = Faktor * Vout% 'Referenzspannung = 5000 mV IF K% > 1 THEN D%(K% - 1) = Vout% 'Messwert in D%(1)-D%(8) ablegen 'Wandlungszeit abwarten; hier kann durch andere Methoden verkuerzt werden 'auf min. 120 Mikrosekunden (z.B. mit Interrupt 15h, Funktion 86h "Wait") DEF SEG = 0: T1% = PEEK(&H46C) DO: LOOP WHILE PEEK(&H46C) = T1% NEXT K% 'naechsten Kanal auslesen END SUB