Funktionsweise der internen Multifunktionskarte Lab-PC Das Kernstück jeder Meßkarte ist der Analog/Digitalwandlerbaustein (zum Messen und Digitalisieren von Spannungen) und/ oder der Digital/Analogwandlerbaustein (zur Ausgabe von Spannungen) sowie eine für beide Bauelemente benötigte Spannungsreferenz. Diese drei Komponenten begrenzen die technisch mögliche Qualität der Messung. Neben der Bitbreite pro Meßbereich (dieser liegt typisch bei 10 V) die derzeit zwischen 8 Bit und 24 Bit variiert ist noch das Rauschen, die Linearität und die Temperaturstabilität wesentlich. Die Gestaltung des eigentlichen Meßsystems ist von Karte zu Karte je nach geplanten Aufgabenbereich sehr unterschiedlich und reicht von einer Billiglösung in der die Digitalanschlüsse der AD- und DA- Bausteine nahezu direkt mit der internen Datenschnittstelle des PC verbunden sind bis zu Systemen mit eigenen Mikrokontrollern, Speicherbausteinen und Taktgebern, die auch sorgfältig von elektrischen Störungen innerhalb des PCs abgeschirmt sind. Während im billigen Fall die Datenaufnahme und Signalausgabe mit der momentanen Leistung der Hardware und des Betriebssytems schwankt und daher nur für einfache Meßanwendungen geeignet sind können höherwertige Karten programmierbare Signalgeneratoren (DA Ausgang) und Transientenrekorder bzw. Oszilloskope ersetzen. Diese "internen" Meßkarten haben einige Vorteile gegenüber externen Meßgeräten aber auch Nachteile. Zu den Vorteilen zählt (i) Die schnelle Übernahme der Meßdaten in das Anwenderprogramm und (ii) Kosteneinsparung gegenüber einem Meßgerät da sowohl Gehäuse als auch Eingabe- und Ausgabeeinheit wegfallen. Weiters benötigen Einsteckkarten keine eigene Stromversorgung oder eine Datenfernübertragungsmöglichkeit (GPIB oder RS 232). Da meist viele Datenleitungen auf engem Raum aus dem Rechner geführt werden müssen ist die experimentelle Anordnung mitunter schwieriger zu gestalten. Schutzmechanismen wie Sicherungen gegen Überlastung und Überspannung fehlen in der Regel, so daß eine Fehlspannung den gesamten PC zerstören kann. So vielfältig die Kartenauswahl so vielfältig ist auch die systemnahe Registerprogrammierung (siehe Datei regprog.pdf) derartiger Komponenten für die es bestenfalls (undokumentierte), firmeninterne Standards gibt. Sehr häufig ist dazu auch die erhältliche Dokumentation einer Meßkarte ungenügend und nicht selten fehlerhaft. Im Rahmen der Experimente werden wir uns daher auf die beiden einfachen Funktionen der Meßkarte: (i) eine Spannung über den DA ausgeben und (ii) einen Meßwert am AD einlesen beschränken. Im nachfolgenden eine kurze allgemeine Zusammenfassung worauf es bei der Registerprogrammierung ankommt gefolgt von den kartenspezifischen Eigenschaften (blau hervorgehoben). Die technischen Spezifikationen der Karte LabPC finden Sie am Ende des Abschnitts. 1) Adressraum der Meßkarte 2) Datenbreite des Übertragungsmediums (verwendeter interner Bus) im Vergleich zur Bitbreite des AD bzw. DA Bausteins 3) Herstellen eines definierten Grundzustands der Karte vor Meßbeginn 4) DA - Wandlung (Analogausgang) 5) AD Wandlung (Analogeingang) Zu 1) Wie alle im PC vorhandenen Komponenten werden die Datenregister über Adressleitungen angesprochen. Das Konzept zur Registerprogrammierung können Sie in regprog.pdf nachlesen. Die Angabe einer Adresse besteht aus der Basisadresse (üblicherweise in Hexadezimaldarstellung) und dem Versatz (Offset) der einzelnen Register zur Basisadresse. Da die LabPC Meßkarte keine Plug & Play Autokonfiguration zuläßt muß Registeradresse, IRQ und DMA Belegung beim Einbau festgelegt und notiert werden. Bei Bedarf, aber nicht notwendigerweise können die belegten Ressourcen händisch in das Betriebssystem eingetragen werden. Ihre LabPC Karte hat die Basisadresse 0x300 (&H300). Alle im folgenden genannten Versatzangaben beziehen sich auf diese Basisadresse. IRQ und DMA werden bei unseren Programmen nicht benötigt. Zu 2) In diesem Seminar wird intern meist der 8 Bit breite Datenbus genützt. Will man dementsprechend an einen DA Wandler einen 12 oder 16 Bit breiten Wert übertragen, muß dieser in 2 Bytes zu 8 Bits zerstückelt werden. Das umgekehrte gilt für das Einlesen eines digitalisierten AD Werts. Hier müssen 2 Bytes zu einem Wert zusammengesetzt werden. Nachfolgend ist angegeben wie beim zerstückeln und zusammensetzen vorzugehen ist wobei Zahl der zu zerstückelnde Wert ist, Lowbyte das niederwertige Nippel (8Bit Byte) und Highbyte das hochwertige Nippel der beiden Bytes. Zerstückeln: Highbyte = Lowbyte = [ Zahl / 256] Ganze _ Zahl [ Zahl 256 Highbyte] Ganze _ Zahl Zusammensetzen: Zahl = 256 Highbyte + Lowbyte Beim Zerstückeln und Zusammensetzen ist zu beachten in welcher Reihenfolge die beiden Bytes (niederwertiges Nippel muß zwingend vor oder nach dem hochwertigen Nippel übertragen/gelesen werden). über den Bus geschrieben bzw. gelesen werden müssen. Dann kommt es auch darauf an zu wissen wie die Bits (eines 12 oder 16 wertigen Datums) in den beiden Bytes abgelegt sind (Es kann das LSB links oder rechts im Byte stehen).
Abbildung 1: Zerstückeln der Zahl 1300 (= 1024 + 256 +16 + 4) in 2 Bytes und anschließend das Zusammenfügen zur Zahl. Die UND Operation stellt sicher daß keine unerwünschten Bits zu Fehlern führen. Für die LabPC Karte sind stets die 8 niederwertigen Bits in einem Byte und die restlichen (4) im zweiten Byte. Das niedertigste Bit (LSB) des 12 Bit Datums ist Bit 0 des 1. Bytes. Das höchsterwige Bit (MSB) ist Bit 3 des 2 Bytes. Da Bit 4 bis 7 nicht definiert sind, sollten sie sicherheitshalber sowohl beim Schreiben als auch beim Lesen maskiert werden. Beim Schreiben zum DA und beim Lesen vom AD wird zuerst das niederwertige Byte und danach das höherwertige Byte übertragen. Eine Beispiel VI ist in Abb. 1 dargestellt. Zu 3) Der Aufwand zur Herstellung eines definierten Ausgangszustands hängt in der Regel vom Funktionsumfang der Karte ab. Weiters ist es wichtig zu wissen was man mit der Meßkarte nachfolgend machen will. Für einfache Karten ist es sinnvoll die DA Ausgänge in einen definierten Zustand zu versetzen und einen Dummy Wert vom AD abzulesen. Viele Karten buffern wenigstens den letzten AD Wert und senden diesen bei der nächsten Abfrage anstelle des aktuellen Meßsignals. Da die LabPC Karte über den Rahmen der Aufgabenstellung hinausgehende Funktionen verfügt sind in nachfolgender Tabelle in zeitlicher Reihenfolge die einzelnen Registeranweisungen zusammengefaßt um den Ausgangszustand für unsere Anwendung herzustellen. Die erste Spalte gibt den Adressenversatz (zu 0x300) in Hexadezimalzahlen an. In der zweiten Spalte steht ob es sich um eine Schreib (S) bzw. Leseoperation (L) des Registers handelt. Schreiben bedeutet, daß Sie die Funktion Out Port für 8 Bit Datenbreite (siehe regprog.pdf) Lesen, daß Sie die Funktion In Port anwenden. Bei Schreiboperationen ist in Klammer der zu sendende hexadezimale Wert angegeben. Die letzte Spalte kommentiert was diese Anweisung bewirkt. Um Fehlfunktionen zu vermeiden darf die Sequenz an keinem Punkt abgekürzt werden. OFFSET Registeraktion (Wert beim Schreiben) Kommentar 0x00 S (0x00) AD Kanal 0 mit Verstärkung = 1 0x01 S (0x00) DA & AD intern single getriggert 0x02 S (0x00) IRQ, DMA abschalten 0x17 S (0x34) Zähler modus 0x14 S (0x0A) Zählerregister 0x14 S (0x00) Zählerregister (interne Taktrate) 0x0A S (0x00) Interrupts löschen 0x0C S (0x00) Interrupts löschen 0x08 S (0x00) AD Buffer löschen 0x0A L Dummy AD Byte
0x0A L Dummy AD Byte 0x04 S (0x00) Byte zum 1. DA Kanal 0x05 S (0x00) Byte zum 1. DA Kanal ( 0.0V) 0x06 S (0x00) Byte zum 2. DA Kanal 0x07 S (0x00) Byte zum 2. DA Kanal ( 0.0V) Zu 4) Der DA Wandler (Analogausgang). Viele Karten besitzen mehr als einen DA Ausgang. D.h. der gewünschte Ausgang muß angewählt werden. Zu berücksichtigen ist weiters, daß der Wert den der DA Wandler erwartet eine ganze Zahl zwischen 0 und 2 (Bitanzahl) -1 ist. Während Sie eine bestimmte Spannung am Ausgang haben wollen. Diese Konversion von Spannungs- in Binärdaten können Sie entweder manuell (mit Taschenrechner) vornehmen oder Sie bauen eine entsprechende Umwandlungsroutine in Ihr Programm ein: U Binärzahl = U Ausgang max U U min min 2 ( Bi tan zahl ) ganze _ Zahl Wobei U max und U min die der Spezifikation entnommene größte bzw. kleinste ausgebbare Spannung ist. U Ausgang ist die gewünschte Ausgangsspannung. Die Schritte um eine Wandlung vorzunehmen sind dann: Wahl des Ausgangs Senden der Binärzahl Wandlung auslösen Für die LabPC Karte mit 2 DA Ausgängen zwischen 0 und 10V mit 12Bit Auflösung gilt: U max = 10, U min = 0, 2 12 = 4096. Wie oben gezeigt ist der ermittelte Binärwert in ein niederwertigs und ein höherwertiges Byte aufzuspalten. Die Kanalauswahl geschieht über die Auswahl der Register in die die beiden Bytes geschrieben werden. Für den 1. DA Ausgang wird zunächst das niederwertige Byte in das Register mit dem OFFSET = 0x04 geschrieben. Danach wird das höherwertige Byte in das Register 0x05 übertragen. Diese Übertragung löst die Wandlung aus und am Ausgang sollte die gewünschte Spannung meßbar sein. Da die Wandlung mit dem Übertragen des höherwertigen Bytes eingeleitet wird muß die Reihenfolge eingehalten werden andernfalls kommt es zu Fehlern. Für den 2. DA Kanal sind die Registeradressen 0x06 für das niederwertige und 0x07 für das höherwertige Byte. Zu 5) Ähnlich zum vorhin gesagtem werden auf Meßkarten häufig mehrere Eingänge (über einen Multiplexer) zum AD Konverter geleitet. D.h. Sie müssen festlegen welchen Eingang Sie abfragen wollen. Weiters besitzen viele Karten die Möglichkeit das Eingangssignal zu verstärken, und/oder die Auflösung der AD Wandlung einzustellen. Die Zahl die Sie von den Registern einlesen ist wiederum eine ganze Binärzahl die erst wieder skaliert werden muß um einen Spannungswert zu erhalten. Die wesentlichen Schritte einer AD Wandlung sind dann: Wahl des Eingangs (mit Optionen wie Empfindlichkeit und Auflösung) Einleiten einer Wandlung Warten bis die Wandlung fertig ist Empfangen des Binärwerts Skalieren (falls erforderlich) Für die LabPC mit 8 AD Eingängen, 12 Bit Auflösung und 7 Empfindlichkeitsbereichen zwischen ±5 V und ±0.05V geschieht der erste Schritt indem man ein Byte,cmd, zusammenstellt in dem der Eingangskanal und die Empfindlichkeit festgelegt werden. Die Empfindlichkeitseinstellungen sind nachfolgender Tabelle zu entnehmen. Die erste Spalte gibt den Verstärkungsfaktor an, die 2. Eine Zahl die mit 16 zu multiplizieren ist bevor sie zu der Kanalnummer (zwischen 0 und 7) hinzugezählt wird um die Anweisung zu komplettieren: cmd = 16 Verstärkerzahl + Kanalnummer Verstärkung Binärzahl 1 0 2 2 5 3 10 4 20 5 50 6 100 7
Die Zahl wird in das Register (OFFSET = 0x00) geschrieben. Danach wird die Wandlung eingeleitet indem in das Register 0x01 die Zahl 0x04 und anschließend in das Register 0x03 ein beliebiger Wert (0) geschrieben wird. In einer Schleife kann durch Auslesen von Register 0x00 geprüft werden wann die Wandlung beendet wurde. Da das Byte mehrere Informationen enthält uns aber nur der Status Wandlung ist beendet (Entspricht einem gesetzten Bit 0 des Bytes = 2 1 = 1) interessiert, sollte die Abfrage mit einer Maske für Bit 0 durchgeführt werden. Ist Byte UND Maske = 1? (siehe auch regprog.pdf) Danach wird zuerst das niederwertige Byte des binären AD Werts durch Lesen von Register 0x0A und dann das höherwertige Byte durch nochmaliges Lesen des Registers 0x0A in das Programm übertragen. Die beiden Bytes werden zu dem Binärwert für den gewählten AD Eingang zusammengesetzt (siehe Abb. 1 rechter Teil). Skaliert kann dann über die folgende Beziehung wobei der Verstärkungsfaktor zu berücksichtigen ist U max und U min beziehen sich auf die Einstellungen des AD Wandlers und sind für die Verstärkung von 1 +5 V und 5 V: U U 2 U Binärwert max min Eingang = + U ( Bi tan zahl ) min