V2.2 Serieller AD Wandler - public.fh

Transcrição

V2.2 Serieller AD Wandler - public.fh
V2.2 Serieller AD Wandler
1 Theorie
Ein Verfahren zum Umwandeln eines analogen Spannungswertes in eine digitale Zahl ist das
Wägeverfahren (eng. Successive Approximation). Bei diesem Verfahren fallen die Ergebnisse
während der Wandlung als serielle Daten an und stehen am Ende als paralleles Datenwort zur
Verfügung.
In dem Laborversuch wird an einem PC mittels eines kleinen C-Programms ein serieller 10bitAD-Wandler aktiviert, der nach diesem Wägeverfahren wandelt. Die nacheinander eintreffenden
Bitwerte (MSB zuerst) werden eingelesen, daraus das Datenwort gebildet und gespeichert. Mit
dem Aufbau werden dann Messreihen für eine Gleichspannung und zwei Wechselspannungen
unterschiedlicher Frequenz aufgezeichnet.
Für die Software ist für die Vorbereitung und den Software-Test am Laborplatz ein Turbo-C 3.1
für DOS des RZ vorgesehen.
1.1
Analog / Digital-Schnittstellen
Die Verbindung der analogen Welt zu digitalen RechnerUa (z)
systemen läuft über Schnittstellen, die analoge
Spannungen oder Ströme in einen Zahlenwert umwandeln. Dabei wird der analoge Messbereich in eine
Anzahl N Schritte aufgeteilt, die die neue digitale
Kennlinie bilden. Aus dem stetigen linearen „analogen“
Verlauf wird eine Treppenfunktion, bei der es nur die
Stufenwerte ohne Zwischengrößen gibt.
ULSB
Die Anzahl der Schritte N beziehungsweise die daraus
Ue
entstehende Schritthöhe bestimmt die maximal erreichULSB
bare Genauigkeit der Umwandlung, denn Werte
1
zwischen den Stufen werden dem nächsten größeren oder
Ue-Ua(z)
+ /2 ULSB
kleineren Wert zugeschlagen. Die Differenz zwischen
Ue
der stetigen Eingangskennlinie und der Treppenfunktion
als Ausgangsfunktion ist der Quantisierungsfehler, eine
- 1/2 ULSB
Sägezahn-förmige Fehlerfunktion mit der Höhe von +/Abb. 1 Kennlinie der Digitalisierung
½ Treppenstufe.
Übliche Auflösungen (Stufenhöhen) für AD-Wandler, bezogen auf den Messbereich (MB) sind
Binärstellen
Schritte
8 bit = 256 Schritte,
10 bit = 1024 Schritte,
12 bit = 4096 Schritte,
14 bit = 16384 Schritte
mtlab2v207.doc / 10.11.2005 23:10
Auflösung
3906
977
244
61
10-6
10-6
10-6
10-6
/MB
/MB
/MB
/MB
Seite 1/9
Serieller AD Wandler
Eine Erhöhung der Stellenzahl bei der Wandlung (höhere Auflösung) erhöht nicht immer
merklich die Genauigkeit des Gesamtsystems, solange daneben die Unsicherheiten von
angeschlossenen Sensoren, Verstärkern und Referenzquellen merklich zum Gesamtfehler
beitragen. Für viele Mess- und Regelungsaufgaben werden heute 8 bit- und 10 bit-Wandler
eingesetzt.
1.2 Wandlungsmethode: Wägeverfahren
Bei der Wandlung des analogen Spannungswertes in eine Binärzahl wird hier ähnlich vorgegangen wie bei einer Balkenwaage und einem Gewichtssatz - die Eingangsspannung wird mit
intern erzeugen Teilen einer Referenzspannung UREF (1/2,1/4,1/8…⋅UREF) verglichen, entsprechend der Entscheidung das Stellenbit gesetzt („0“ oder „1“) und danach werden weitere
Anteile hinzugefügt.
Zuerst wird die Eingangsspannung mit der halben Referenzspannung verglichen (512/1024). Ist
die Spannung größer, wird der Anteil ´dringelassen´ (MSB 512= „1“ , MSB: most significant
bit,), ist er kleiner, wieder entfernt (MSB 512= „0“). Im nächsten Schritt wird ein Viertel der
Referenz (256/1024) dazugetan und wieder verglichen. Ist die Eingangsspanung immer noch
größer als die Vergleichsspannung, bleibt der Anteil erhalten, sonst nicht. So wird schrittweise
jeweils ein neuer kleinerer Anteil dazugetan (oder nicht), bis alle Stellen benutzt wurden. Je nach
Komparator-Entscheidung ist die jeweilige Bitposition dann „0“ oder „1“, die Reihenfolge der
Bits ergibt die Binärzahl des Eingangsspannungswertes.
Das erste gewandelte Bit gilt für die erste wichtigste
U (z)
Stelle im Binärwort (MSB), das letzte ist die
geringstwertige Stelle (LSB, least significant bit). Für
U (zmax)
die Wandlung sind so viele Vergleichsschritte notwendig wie das Datenwort Bits aufweist, bei einem
Messbereich von 10 bits = 1024 Stufen = 10
Vergleichsoperationen.
Ue
In der technischen Ausführung gibt es AD-Umsetzer,
die den Messwert nach der Wandlung parallel auf so
vielen Anschlussbeinen ausgeben wie der Wert
z7 z6 z5 z4 z3 z2 z1 z0
Binärstellen hat, so dass der gemessene Wert mit
=1=0=0=1=1=1=1 =0
einem Lesevorgang vom Wandlerbaustein in die CPU
1
2
3 4 5 6 7 8
Schritt übernommen werden kann. Ein seriell angeAbb. 2 Ablauf des Wägeverfahrens
schlossener Wandler (hier der LTC 1092) hingegen
kommt mit wenigen Leitungen aus, muss aber die Bits
des Messwertes nacheinander übertragen. Aus einem Befehl „read AD_wert“ mit einem CPUTakt wird eine kleine Programmstruktur, die nacheinander die Bits erkennt. Damit erhöht sich
die Programmgröße und der Zeitbedarf für eine Wandlung.
1.3 Abtastung
Bei der Umwandlung einer stetigen analogen Spannung in eine
Zahlenfolge wird nicht nur der einzelne Augenblickswert in eine
abgerundete nächste Zahl umgewandelt, auch der stetige zeitliche
Verlauf der Spannung wird durch eine Folge von
Punktmessungen ersetzt - die Eingangsspannung wird punktweise
abgetastet.
Nach dem Abtast-Theorem von Shannon ist ein periodisches
Signal dann eindeutig erkennbar, wenn die Abtastung mit mehr
als dem 2fachen der höchsten Signal-Frequenz erfolgt. In der
Abb. 3Abtastung einer Funktion
mtlab2v207.doc / 10.11.2005 23:10
Seite 2 /9
Serieller AD Wandler
Praxis muss die Abtastfrequenz erheblich höher sein, um den Zeitverlauf eines veränderlichen
Signals praktisch zu erkennen.
Zur Vermeidung zusätzlicher Fehler muss die Abtastung mit möglichst gleichen zeitlichen
Abständen von Messpunkt zu Messpunkt erfolgen. Dies kann durch ein Timer-Signal des
Rechners oder bei einfachen Rechnern durch eine SW-Warteschleife erfolgen.
1.4 Der AD-Wandler Baustein LTC1092
Der verwendete AD-Wandler Baustein ist ein integrierter Schaltkreis im 8pin-Gehäuse. Er wird
mit 5,12 Volt als Versorgungs- und Referenzspannung betrieben, d.h. die Schritte des Datenworts sind über einen Spannungsbereich wie die LTC1092 Versorgungsspannung verteilt. Die
Steuersignale sind ‚low-aktiv‘, d.h. eine angelegte ‚0‘ gilt als Signal, eine ‚1‘ als Ruhezustand.
Als Interface benötigt der Baustein nur 3 digitale Leitungen:
PC -> AD-Wandler: CS*
PC -> AD-Wandler: CLOCK
AD-Wandler -> PC: DOUT
Chip Enable invertiert, „low“ aktiviert den Baustein
Takt für die Wandlungsoperationen
Datenbits des gewandelten Wertes, seriell, MSB first.
Abb. 4 Funktionsdiagramm des seriellen AD Wandlers
Das Diagramm zeigt die Pulsfolgen zum Übertragen eines Messwertes vom AD-Wandler zum
PC. Der Baustein LTC1092 wird mit einem Nullpegel auf der Chip Select*-Leitung aktiviert.
Die Wandlung und Übertragung funktioniert für Taktraten von ca. 1 kHz bis ca. 2 MHz und
benötigt eine Folge von Clock-Impulsen entsprechend dem oben stehenden Zeit-Diagramm.
Jeweils bei oder nach der fallenden Flanke des CLK Signals ändert sich das Dout Signal, es kann
stabil zum Zeitpunkt der steigenden Flanke des CLK Signals gelesen werden. Zu Beginn der
Auslesung müssen die ersten Clock-Pulse und der erste (leere) Dout-Puls beachtet werden.
1.5 Das Interface auf der PC-Rechner-Seite
Ein Rechner mit der Struktur der Hardware eines „IBM-PC“ hat zwei Adressräume - einen
Speicherbereich für Daten und Programme von 0..640kByte und oberhalb 1Mbyte und weiter
einen Port-Adressbereich von 1..1023, mit dem die Register von Peripheriebausteinen (Modem,
Drucker, Keyboard usw.) angesteuert werden können. Innerhalb eines Turbo-C Programms unter
DOS werden Lese- und Schreiboperationen im Bereich der Port-Adressen über spezielle PortBefehle wie outp, outport, inp, inport durchgeführt.
Die digitale Ansteuerung des LTC1092 erfolgt über Bitmuster an den Pins der ParallelSchnittstelle LPT des PC. Dieser Druckerport eines PC ist so konstruiert, dass er unter einer
ersten Port-Adresse (‚LPT‘ +0) ein Byte (=8 bit) ausgeben / schreiben kann, mit einer daneben
liegenden Adresse (‚LPT‘ +1) einzelne Datenbits lesen kann.
mtlab2v207.doc / 10.11.2005 23:10
Seite 3 /9
Serieller AD Wandler
Schreibt man also mit dem Befehl „outport(‚LPT‘ +0, <outbyte>);“ ein Byte auf die Portadresse,
so erscheint das Bitmuster an den Ausgangspins des PC. Liest man über „ inport(‚LPT‘ +1,
<inbyte>);“ die Eingangspins, erhält man das Bitmuster der angeschlossenen Eingangs-Pins.
Entsprechend der nachstehenden Skizze ist verbunden:
CS*
Chip Select Portbyte Write
Stecker Pin 3
(LPT +0) bit 1
CLOCK
Data Clock Portbyte Write
Stecker Pin 2
(LPT +0) bit 0
Data Ausgang Portbyte Read
Stecker Pin 10
(LPT +1) bit 6
DOUT
Alle anderen Bits sind unbestimmt oder ohne Wirkung. Es ist sinnvoll, bei der Verarbeitung der
eingelesenen Werte durch Maskierung (z.B. <0x40> AND <databyte> ) die nicht signifikanten
Bits zu unterdrücken, um das aktive Bit auswerten zu können.
Da für die Ausgabe nur 3 verschiedene Datenwörter sinnvoll sind (Chip NOT Select, Chip Select
+ CLK high, Chip Select + CLK low) ist es sinnvoll, diese Bitmuster als Konstanten im
Programmkopf zu definieren.
Beim Schreiben auf den Datenport erfolgt die Datenübergabe sofort, so dass möglicherweise
Warteschleifen zwischen den Signalwechseln programmiert werden müssen, um brauchbare
Pulslängen zu erhalten.
Es kann eine Funktion mudelay(Zahl) als SW-Timer (Warteschleife) verwendet werden, ebenso
die Turbo-C-Funktion delay(Zahl) in Millisekunden.
1.6 Der Versuchsablauf
Zur Aktivierung einer solchen Schnittstelle ist es sinnvoll, schrittweise vorzugehen. Deswegen
werden als Vorbereitung des Versuches 3 Versionen des Programms [SW1]...[SW3], jeweils für
sich ablauffähig, ausgearbeitet. Alle können auf dem Rahmenprogramm (s.Anhang) aufbauen.
In der ersten (kürzesten) Version SW1 aktiviert die Software nur die Schnittstellenpins, indem
sie in einem noch erkennbaren (langsamen) Takt die beiden Ausgangsleitungen beschreibt, so
dass ein erkennbares Blinken erzeugt wird. Kontroll-LEDs zu den Leitungen CE* und CLK sind
vorhanden.
mtlab2v207.doc / 10.11.2005 23:10
Seite 4 /9
Serieller AD Wandler
Die zweite Variante [SW2] liest den AD-Wandler so aus, dass ein Messwert im Wertbereich
zwischen 0 und 1023 richtig eingelesen wird. Damit kann die richtige Folge der CLK Pulse,
Lesezeitpunkte für Dout und die Stellenwertigkeit getestet werden.
In der dritten Version [SW3] wird der aktive Teil von (2) als z.B. Funktion „get_adwert“
eingebaut, so dass das Auslesen einer Wertefolge über N Messwerte in einer Schleife und das
Speichern in einer Datei erfolgen kann (N = 50...500).
Um die Auswertung mit MS Excel oder ähnlichen Programmen zu ermöglichen, ist es
notwendig, als Datenformat in der Diskettendatei zeilenweises Schreiben von ASCII-Zeichen
mit der Folge „<laufende Nummer>; <Binärmesswert>;[CRLF]“ mit einem Semikolon als
Trennzeichen zu verwenden, da viele Auswerte-Programme Schwierigkeiten mit dem Einlesen
von Fließkommazahlen mit Dezimalpunkt haben.
1.7 Die Programmstruktur
Der einzelne Messwert wird in einer Schleife(1) über die 10/11 CLK-Pulse berechnet (MSB
first). Zur späteren Anzeige auf dem Schirm und zum Speichern auf Diskette werden die binären
Messwerte in ein vorbereitetes Array int indata[maxarray] eingetragen. Zur Anzeige können sie
ggfs. in skalierte Float-Werte (1023 => 5,12 Volt) umgerechnet werden.
Zur Programmsteuerung sind mehrfach geschachtelte Schleifen erforderlich, in der Version
[SW3] eine Schleife(1) zur Erfassung eines Spannungswertes, weiter eine Schleife(2) zum
Messen eines Blocks von NN Werten und weiter eine zum wahlweisen mehrfachen Messen von
Blöcken.
1.8 Zusatzbefehle
Zusätzlich zu dem standardisierten ANSI-C werden hier zwei weitere Erweiterungen verwendet.
Die Ansteuerung der Drucker-Schnittstelle erfolgt über die (Borland Turbo-) C Befehle
„outport“ und „inport“. Das aktivierte Bit 6 beim Lesen von (LPTx +1) kann über die
Verwendung einer „Maske“ erkannt werden.
Die Port-Befehle outp und inp leiten einen Wert an die angegebene Druckerport-Adresse (LPTx)
bzw. lesen einen Wert von der Schnittstelle (siehe auch BCC3.1 Hilfe / Index).
int outp(lptx, int out_value);
int inp(lptx +1);
Unter den vielen Port-Adressen gibt es manche, die im PC-Rechner lebenswichtige Funktionen
steuern, daher sollte die (Port-) Adresse für LPTx sorgfältig gewählt und eingestellt werden.
Auch ANSI-C ermöglicht BITweise Operationen in Befehlen, z.B. um Kombinationen oder
einzelne Bits zu erkennen oder auszublenden. Verwendet man eine bitweise logische UNDVerknüpfung (&) so erscheint im Ergebnis-Byte ein Bit nur dann als log.1, wenn das untersuchte
Byte UND die „Maske“ beide in der Bitposition eine log.1 haben. Mit eine Maske „1111 1111“
bzw. 0xFF werden alle erkannt, mit 0x04 nur das 3. Bit. Will man also den Status einer BitPosition erkennen, ob log.0 oder log.1, so kann man das fragliche Byte mit einer Maske „&“verknüpfen, die nur eine log.1 in der gefragten Bit-Position hat und anschließend das
Ergebnisbyte auf >=0 abfragen.
Wird nur ein Byte in ein int-Feld (2 Byte lang) geschrieben, so kann in der Regel keine Aussage
über den Wert der restlichen Bitpositionen 8-15 und damit den Gesamtwert gemacht werden.
Eine Abfrage "? Int-Wert = 0 ?" kann daher bei fehlender Maskierung möglicherweise ein
unerwartetes Ergebnis haben.
mtlab2v207.doc / 10.11.2005 23:10
Seite 5 /9
V2.2 Serieller A/D-Wandler
2 Vorbereitung
(1) Die Laborgruppe macht sich mit den Gebieten A/D-Wandlung eines Spannungswertes, dem
Wägeverfahren, Abtastung einer Zeitfunktion und Ansteuerung eines PC-Parallelports
vertraut.
(2) Zu dem Funktions- / Zeit-Diagramm des Bausteins LTC1092 wird eine Tabelle angefertigt,
die halbtaktweise die Werte für CS*, CLK, und Dout für einen Ansteuerzyklus /
Wandlungszyklus zeigt.
(3) In einfacher Weise wird ein Algorithmus entwickelt und dargestellt / beschrieben, wie aus
den erkannten Bit-Werten (MSB first) das Datenwort des Spannungswertes berechnet wird.
(4) Es wird ein Programm[SW1] vorbereitet, das die Leitungen CS* und CLK etwa in M/10 sec
Takt betätigt (M=2..10). Damit soll prinzipiell die Funktion der Schnittstelle PC-LPT zum
AD-Wandler nachgewiesen werden. Der Aktiv-Status der Leitungen wird durch farbige
LEDs angezeigt (activ low = an).
(5) Es wird ein Programm[SW2] vorbereitet, das mit einer Pulsfolge entsprechend dem
LTC1092 - Zeitdiagramm die Hardware ansteuert und einen Spannungswert wandelt, so dass
auf Anforderung ein gewandelter Wert indata[NN] = ad_wert auf dem Schirm angezeigt
wird.
(6) Es wird ein Programm[SW3] vorbereitet, das mit einer (funktionierenden) Routine aus (5)
eine Liste indata[] (20..500 Werte) von Messwerten erfassen kann. Die ausgetestete Routine
aus [SW2] wird im Versuch als Funktion in [SW3] eingefügt bzw. am Laborplatz angepasst.
Der zeitliche Abstand der Messwerte wird über eine einstellbare Verzögerung (z.B. Turbo-C
delay(NN); in Millisekunden) realisiert. Das Programm muss in der Lage sein, die Datenliste
als Text-Datei im angegebenen Format mit veränderlichem Dateinamen zu speichern, um sie
später mit einem anderen Programm (Excel, Lotus, StarCalc) auszuwerten und darzustellen.
3 Versuchsdurchführung
(1) Der Rechner am Versuchsplatz wird unter DOS hochgefahren und die Turbo-C 3.1
Entwicklungsumgebung aktiviert.
(2) Das vorbereitete Programm [SW1] für die Leitungs-LED’s wird geladen, fehlerbereinigt und
gestartet. Die gewünschte Funktion wird überprüft (Sichtkontrolle).
(3) Im Gespräch mit dem Betreuer wird die Vorbereitung des Versuchs besprochen und die
Grundfunktion der Schnittstelle dargestellt. Der Betreuer gibt die weitere Versuchsdurchführung frei.
(4) Das AD-Wandler-Interface wird auf „interne Referenz“ und „Gleichspannung“ gestellt.
Dabei beträgt die intern angeschlossene Eingangsspannung etwa Uein/2 = 2,6 Volt = 1024/2.
mtlab2v207.doc / 10.11.2005 23:10
Seite 6/9
Laborbericht Serieller A/D Wandler
(5) Das vorbereitete Programm[SW2] wird ausgetestet und fehlerbereinigt. Wenn es
funktioniert, wird auf „interne Referenz“ und „Sinus 1,5 s“ umgeschaltet. Dann sollte der
gemessene Ergebniswert veränderlich zwischen ca. 1,1...4,1 Volt liegen.
(6) Der funktionelle Teil dieser Mess-Routine wird als Funktion in das Programm[SW3]
eingefügt und ausgetestet. Durch Verändern des „wait“ Parameters wird ein Abtastabstand
von 10..25 ms eingestellt.
(7) Am Funktionsgenerator am Laborplatz wird eine Ausgangsspannung eingestellt, die Sinusund Dreiecksfunktionen im Spannungsbereich 0 Volt <= Uein <= 5 Volt liefert, Mittelwert
2,5 Volt (geprüft im Oszilloskop-Bild). Erst danach wird das LTC 1092 AD-Wandler
Interface angeschlossen und auf „extern“ umgeschaltet. Ein Frequenzwert von kleiner ..15
Hz hat sich als praktisch erwiesen.
(8) Durch Variation der SW und der Frequenz des Funktionsgenerators werden (mindestens)
5 Signalreihen aufgezeichnet,
....Gleichspannung, mit ca. 200..500 Werten,
....sinusförmig
mit ca. 5 Punkten pro Periode
mit ca. 150 Punkten pro Periode
....dreieckförmig mit ca. 5 Punkten pro Periode
mit ca. 150 Punkten pro Periode
und unter verschiedenen Datei-Namen auf der Versuchsdiskette abgespeichert. Die
Kennwerte der Messung und der Aufbau werden protokolliert.
(9) Auswertung
Die aufgezeichneten Datenreihen werden in ein Tabellenkalkulationsprogramm (z.B. Excel ,
Lotus, StarOffice o.ä.) eingelesen, skaliert und grafisch als Zeitfunktion dargestellt.
Es wird kommentiert, welchen Einfluss die Abtastrate und Auflösung auf die Darstellungsgenauigkeit haben und welche Anforderungen dadurch für die Messung mittlerer und höherer
Frequenzen entstehen.
Die eigenen im Versuch ausgetesteten Programm-Listings [SW1...3] werden angefügt.
4 Tips und Tricks
# Die vorbereitete Software (Quelltexte, [SW1], [SW2],[SW3]) werden auf einer frisch
formatierten virenfreien 3 ½“ Diskette (1.4 MB) zum Versuch mitgebracht. Sie sollte noch
genügend Platz für die eigenen Datenreihen haben.
# Für die Bildschirmanzeige ist es sinnvoll, den skalierten float-Wert der Messungen [Volt]
anzuzeigen. Für eine externe Auswertung in der Disketten-Datei kann ohne Genauigkeitsverlust
der gemessene binäre Wert (0…{max,) 1023} abgespeichert werden.
# Das erste Bit (startbit) in der CLK /Dout Sequenz erfordert besondere Aufmerksamkeit
#Zur Rationalisierung des Testens sei es empfohlen, die Programme[SW1..3] so zu entwerfen,
dass sie mit einem Minimum an Menüfunktion auf Tastendruck einen neuen Messzyklus starten.
# Programmieren von Hardware-Schnittstellen führt fast immer zu kleinen Anpassungen
während des Austestens. So kompatibel andere ANSI C Compiler auch sein mögen – ein
reibungsfreier Versuchsablauf ist nur mit dem vorgesehenen und am Laborplatz vorhandenen
Borland C 3.1 (DOS) Compiler im C-Modus zugesichert. Im Mittelpunkt des Versuchs steht die
Messaufgabe, nicht besondere Finessen von anderen Compilern und Sprachvarianten.
# Das angefügte Rahmenprogramm ist auch als Textdatei ( .c) auf der Intranet-Seite des PublicServers der FH (http://public.rz.fh-wolfenbuettel.de/~hamannm/general/download.htm) als download
(„C-Datei-Muster“) zu finden.
mtlab2v207.doc / 10.11.2005 23:10
Seite 7 /9
Laborbericht Serieller A/D Wandler
5 Anhang:
Rahmenprogramm
Header der Dateien und Rahmenprogramm (auch als Textfile im FH-Netz zum Runterladen)
/* Testprogramm für Serial ADC LTC1092
Laborgruppe: <name1 name2 Datum >
Version:
<XX DD.MM.YY > <XY DD.MM.YY>
Tool:
Borland C++ v3.1 fuer DOS
Data Read Write using LPT X port
LPT X offset 0 write D0
as CLK
LPT X offset 0 write D1
as *CS
LPT X offset 1 read
D6
as DOUT
<Kommentare>
*/
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<dos.h>
<string.h>
<conio.h>
// und weitere bei Bedarf
/* Festlegungen */
#define lpt1 0x3BC
#define lpt2 0x378
#define lpt3 0x278
#define port_reset 0x03
#define loopmax
50
#define wait_init 50
#define maxarray 1001
#define startarray 1
#define filename "adctest.dat"
// oder weitere nach Bedarf
/* Funktion Prototypen */
void mudelay(long);
void title_write(void);
// kurze SW-Warteschleife
// Programmkopf
/* PUBLIC variables
*/
long
wait;
// approx. 50usec with 486-33
// system tics in milliseconds
// nach Bedarf
//
//
indata[maxarray];//
*ausdatei;
//
int
FILE
Zeit zwischen Messungen der
Eingangsspannung Ue
array fuer Messdaten
Datenspeicher (z.B. Floppy)
main()
{
lpt_port = lpt2;
// dieser wird benutzt
outport(lpt_port, port_reset);
( Ihre Initialisierung...... )
mtlab2v207.doc / 10.11.2005 23:10
Seite 8 /9
Laborbericht Serieller A/D Wandler
mudelay(loopmax);
// kurze Warteschleife
( Ihr Programm............ )
delay(wait);
// wait to next READ
// use system timer;
}
……….
/*
Schreiben eines Datensatzes auf Diskette
zur Auswertung und Darstellung mit Excel oder aehnlich..,
Wunschformat Text: [laufende Nummer] ";" [Messwert]";" CRLF
*/
ausdatei = fopen(filename,"w+");
( Ihr Schreibprogramm )
fclose(ausdatei);
}
}
void mudelay(long delaycount)
/* Verzoegerung einstellbar, Dauer haengt vom Rechnertakt ab */
{
long loop;
loop = 0;
while(loop <= delaycount)
{
loop++;
}
}
void title_write(void)
{
#define zeile1 "
Messtechnik Labor II SerialADC LTC1092 "
#define zeile2 "
< Laborgruppe ….> XXXXX 20XX -"
printf( "\n \n \n %s \n", zeile1);
printf(" %s \n",zeile2 );
wait = wait_init;
( Ihre Abfragen für Schleifen und Parameter )
}
}
// **************** ende des Programms **********************************
mtlab2v207.doc / 10.11.2005 23:10
Seite 9 /9