Hintergrundinfos und Download

Das vorliegende elektronische Buch "Mikroelektronik" wurde von H. Lohninger als Unterrichtsmaterial für diverse Lehrveranstaltungen an Universitäten und Fachhochschulen entwickelt und geschrieben. Die nun der Öffentlichkeit zur Verfügung gestellte online-Version ist naturgemäß gegenüber dem eigentlichen eBook deutlich eingeschränkt, sollte aber dennoch genügend Material bieten, um den Studierenden wie auch den Lehrenden einen ausreichenden Grundstock an Lehr- und Lernunterlagen zur Verfügung zu stellen.

Im Speziellen musste aus technischen und kommerziellen Gründen in der Web-Edition einerseits auf umfangreiche Navigations-Möglichkeiten verzichtet werden, andererseits sind die zahlreichen Programme, die es ermöglichen die Prinzipien der Mikroelektronik in Simulationen zu erkennen und zu erlernen, ebenfalls nicht enthalten. Einige der Simulationen sind aber am VIAS-Webserver zum freien Download verfügbar. Ein Link auf die entsprechende Download-Seite ist jeweils an passender Stelle eingebaut.

Copyright: Grundsätzlich unterliegen alle hier publizierten Seiten dem Copyright des Autors; allerdings stellt der Autor das eBook unter der Creative Commons-Lizenz zur Verfügung. Das bedeutet, dass Sie den Inhalt beliebig verbreiten und benützen dürfen, aber nicht verändern oder kommerziell verwerten. Weitere Details finden Sie in den Lizenzbedingungen.

Download: Falls Sie das gesamte Material lokal auf Ihrem Rechner benützen möchten, können Sie das Paket als kompiliertes HTML-Help laden:

mikroelektronik.zip
[2007-01-03] Version 1.20 [4.3 MB]
The zip archive contains the entire ebook as an HTMLhelp file.
After downloading please unpack the zip archive and
double click the file "mikroelektronik.chm" to open the ebook.

Wir wünschen Ihnen viel Erfolg und Spaß beim Studium,

Ihr Epina eBook-Team

Last Update: 2007-Jän-03


Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.

Home [image] Copyright
Index
Siehe auch: Hintergrundinfos und Download

Copyright

Das eBook Angewandte Mikroelektronik steht unter der Creative Commons Lizenz zur Verfügung. Klicken Sie auf das Bild unten um die Lizenzbedingungen im Detail anzusehen.

Last Update: 2005-Okt-29


Release History

Die folgende Tabelle gibt einen Überblick zu den Änderungen und Erweiterungen dieses Pakets:

Release | Datum | Anmerkungen
1.20 | 2007-01-03 | Neue Seite zur Lambda-Sonde. Kapitel Ionenselektive Elektroden verbessert. Kapitel Festplatten verbessert. Inhaltsverzeichnis verbessert (alle Kapitel sind nun im Inhaltsverzeichnis aufgeführt).
1.19 | 2006-11-27 | Download des CHM Files nun als ZIP Archiv.
1.18 | 2006-09-25 | Kapitel über DVDs und DVD-RAM hinzugefügt; Kondensatoren überarbeitet; Bauformen von Kondensatoren und Drehkondensator hinzugefügt
1.17 | 2005-11-31 | weitere Gehäusetypen: TO-254AA
1.16 | 2005-11-21 | einige Layoutverbesserungen
1.15 | 2005-11-19 | Die wichtigsten Transistorgehäuse beschrieben: TO-3, TO-5, TO-18, TO-39, TO-66, TO-72
1.14 | 2005-10-29 | Das eBook steht ab sofort unter einer Creative Commons-Lizenz zur Verfügung. Neue oder erweiterte Seiten: Abkürzungen für Spannungsbezeichnungen, Fototransistor
1.13 | 2005-10-17 | Neue Seite über Leitungsabschluss und Band-Gap-Referenzelemente; Worttrennfehler beseitigt
1.12 | 2005-10-06 | Beseitigung div. kleinerer (Tipp-)Fehler; HTML-Help-Version; Ausbau der "Siehe auch"-Referenzen und Quer-Links
1.11 | 2005-09-20 | zusätzliche Stichworte; Beseitigung div. kleinerer (Tipp-)Fehler; Ausbau der "Siehe auch"-Referenzen
1.10 | 2005-09-15 | zusätzlicher Einbau von Band 2 (Mikroprozessoren)
1.00 | 2005-08-22 | erstes vorläufiges Release von Band 1

Last Update: 2007-Jän-03


Präfixe

Da die möglichen Werte von vielen Bauteilen über mehrere Dekaden verteilt sein können, bedient man sich zur Bezeichnung von Werten, die mehr als einen Faktor von 1000 von der Grundeinheit abweichen, griechischer Präfixe. Das Präfix wird der Abkürzung der Maßeinheit vorangestellt und stellt einen Multiplikator dar.

Last Update: 2005-Okt-08


Häufig verwendete Größen

Um dem unerfahrenen Leser einen groben Überblick über die in der Mikroelektronik vorkommenden Bereiche der wichtigsten Größen zu geben, sind nachfolgend ein paar Beispiele angeführt. Außerdem wurde jeweils zum Vergleich noch eine im Alltagsleben bekannte Größe mit aufgenommen. Weitere Details zu den SI-Einheiten finden Sie bei VIAS.

SPANNUNG U | (typ. +/- 15V)
5 V | TTL-Versorgungsspannung
+/- 12 V | Versorgungsspannung für Operationsverstärker
220 V | Netzspannung
STROM I | (typ. 1 µA - 10 A)
10 µA | NMOS-Leckstrom
1.6 mA | TTL-Load
50 mA | TTL-Treiber
300 mA | 60 W Glühbirne (bei 220 V Spannung)
5 A | Stromversorgung für Mikrocomputer
LEISTUNG P | (typ. 1 uW - 300 W)
1 uW | Verlustleistung CMOS-Gatter
200 mW | Verlustleistung eines NMOS-Speichers
2 W | Verlustleistung bipolarer Multiplizierer
50 W | Personalcomputer
800 W | Bügeleisen
ZEIT t | (typ. 1 ns - 1 sec)
15 ns | Verzögerungszeit eines TTL-Gatters
120 ns | Speicherzugriffszeit
1 ms | typ. Befehlsausführungszeit eines uPs
3 msec | Floating-Point-Multiplikation (Software)
200 msec | menschliche Reaktionszeit
FREQUENZ f | (typ. 1 Hz - 30 MHz)
8 MHz | typ. Taktfrequenz eines Mikrocomputers
20 kHz | hörbarer Frequenzbereich
10 kHz | typ. Datenerfassungsrate für 8 Bit mP
50 Hz | Netzfrequenz

Last Update: 2006-Nov-27


Farbcodierung

Viele Bauteile werden nicht durch schwer lesbare Ziffernkombinationen gekennzeichnet, sondern durch Farbringe, die von allen Seiten gleich gut lesbar sind. Jede Farbe entspricht einer bestimmten Ziffer. Die Bauteilnumerierung wird von links nach rechts gelesen (bzw. von oben nach unten), wobei bei symmetrischen Bauteilen der linke Farbring ganz außen angebracht ist. Die ersten zwei oder drei Ringe (je nach Bauteiltoleranz) geben eine Ziffernkombination aus der Normreihe an, der nächste Farbring den Multiplikator und der letzte Farbring die Toleranz.

Hinweis: Manche Hersteller codieren auch Bauteilnummern mit diesem Farbcode. Bei diesen Bauelementen entfällt dadurch dann die Bedeutung von Multiplikator und Toleranz. Meist ergibt die schlichte Aneinanderreihung der Farbwerte die Bauteilnummer (siehe Beispiel mit Diode).

Farbcode eines Widerstands mit 1 % Toleranz

Ein paar kurze Beispiele sollen die Anwendung des Farbcodes erläutern:

1. Ein Widerstand hat den Farbcode braun-grün-braun-gold:

        braun   grün   braun    gold
        -----------------------------------------
        1       5      x10      5%              = 150 W, 5%
        -----------------------------------------

2. Ein Widerstand hat den Farbcode blau-grau-braun-rot-braun

        blau    grau    braun   rot     braun
        -----------------------------------------
        6       8       1       x 100   1%      = 68.1 kW, 1%
        -----------------------------------------

3. Ein Kondensator hat den Farbcode braun-schwarz-gelb

        braun   sw      gelb
        -----------------------------------------
        1       0       x 10k                   = 100000 pF (10 nF)
        -----------------------------------------

4. Eine Diode hat den Aufdruck gelb-braun-gelb-grau

        gelb    braun   gelb    grau
        -----------------------------------------
        4       1       4       8               = 1N 4148
        -----------------------------------------

Last Update: 2006-Sep-28


Normwerte

Bauteile, wie z.B. Widerstände und Kondensatoren werden mit genormten Werten angeboten. Diese Normwerte unterscheiden sich in der Feinheit der Abstufungen und in den zulässigen Toleranzen. Je feiner die Abstufungen desto geringer sind die zulässigen Toleranzen. Die untenstehende Tabelle gibt die vier wichtigsten Normreihen E12, E24, E48 und E96 wieder (die Zahl in der Bezeichnung gibt die Zahl der Werte, die pro Dekade vorkommen, an). Die Werte einer Normreihe wiederholen sich in jeder Dekade (z.B. 8.2 W, 82 W, 820 W, 8.2 kW, 82 kW, ...) und sind innerhalb der Dekade so plaziert, dass bei der angegebenen Toleranz der gesamte Wertebereich abgedeckt wird.

E96 (1%)

1.00 1.02 1.05 1.07 1.10 1.13 1.15 1.18 1.21 1.24 1.27 1.30
1.33 1.37 1.40 1.43 1.47 1.50 1.54 1.58 1.62 1.65 1.69 1.74
1.78 1.82 1.87 1.91 1.96 2.00 2.05 2.10 2.15 2.21 2.26 2.32
2.37 2.43 2.49 2.55 2.61 2.67 2.74 2.80 2.87 2.94 3.01 3.09
3.16 3.24 3.32 3.40 3.48 3.57 3.65 3.74 3.83 3.92 4.02 4.12
4.22 4.32 4.42 4.53 4.64 4.75 4.87 4.99 5.11 5.23 5.36 5.49
5.62 5.76 5.90 6.04 6.19 6.34 6.49 6.65 6.81 6.98 7.15 7.32
7.50 7.68 7.87 8.06 8.25 8.45 8.66 8.87 9.09 9.31 9.53 9.76

E48 (2%)

1.00 1.05 1.10 1.15 1.21 1.27 1.33 1.40 1.47 1.54 1.62 1.69
1.78 1.87 1.96 2.05 2.15 2.26 2.37 2.49 2.61 2.74 2.87 3.01
3.16 3.32 3.48 3.65 3.83 4.02 4.22 4.42 4.64 4.87 5.11 5.36
5.62 5.90 6.19 6.49 6.81 7.15 7.50 7.87 8.25 8.66 9.09 9.53

E24 (5%)

1.0 1.1 1.2 1.3 1.5 1.6 1.8 2.0 2.2 2.4 2.7 3.0
3.3 3.6 3.9 4.3 4.7 5.1 5.6 6.2 6.8 7.5 8.2 9.1

E12 (10%)

1.0 1.2 1.5 1.8 2.2 2.7 3.3 3.9 4.7 5.6 6.8 8.2

Last Update: 2005-Okt-08


Widerstände

Legt man an einen Widerstand R eine Spannung U, so fließt nach dem Ohmschen Gesetz der Strom

I = U/R.

Dieser Strom durch einen Widerstand verursacht eine Erwärmung des Widerstandes, die von der am Widerstand umgesetzten Leistung abhängt. Die am Widerstand auftretende Leistung P ist das Produkt aus Strom und Spannung P = I*U. Setzt man in diese Gleichung das Ohm'sche Gesetz ein, so erhält man für die Leistung die Gleichung

P = U2/R = I2R.

Welche Leistung ein konkreter Widerstand ohne Beschädigung verkraften kann, hängt von der Bauart (Draht- oder Schichtwiderstand, Lackierung oder Keramiküberzug) und von seiner Größe ab.

Last Update: 2005-Nov-03


Kennwerte

Widerstandswert

Der Widerstandswert soll - vom Temperaturkoeffizienten abgesehen - konstant sein, d.h. dass der Strom, der durch den Widerstand fließt, zur angelegten Spannung proportional ist (Ohmsches Gesetz ist gültig). Man nennt einen solchen Widerstand linear. Der Widerstandswert entspricht der internationalen Normreihe und ist durch Farbcodierung oder numerisch aufgedruckt.

Toleranz

Die Toleranz eines Widerstandes gibt an, in welchem Bereich der tatsächliche Wert des Widerstandes vom aufgedruckten abweichen darf. Bei einer Toleranz von 5% und einem aufgedruckten Wert von 12 kW darf der tatsächliche Wert zwischen 11.4 und 12.6 kW liegen. Sehr eng tolerierte Widerstände werden vor allem in Messinstrumenten und bestimmten Operationsverstärkerschaltungen eingesetzt.

Temperaturkoeffizient

Der Wert eines Widerstands ist geringfügig von der Temperatur abhängig. Die Änderung des Widerstandswertes pro Grad Celsius nennt man den Temperaturkoeffizienten. Dieser kann je nach verwendetem Material positiv oder negativ sein. Bei großem negativem Temperaturkoeffizienten besteht die Gefahr der Zerstörung eines Widerstandes, wenn die maximale Stromstärke nicht begrenzt wird. Durch die Eigenerwärmung sinkt der Widerstandswert, was zu einer weiteren Erhöhung der am Widerstand umgesetzten Leistung und damit zu einer weiteren Erwärmung führt. Dieser Prozess setzt sich so lange fort, bis entweder die Konvektionskühlung den Vorgang stabilisiert oder eine interne Strombegrenzung einsetzt oder der Widerstand zerstört wird.

Belastbarkeit

Die Belastbarkeit eines Widerstandes wird auch Nennlast genannt und ist die maximale am Widerstand umsetzbare Leistung. Wird die Nennlast überschritten, so kann es zur Zerstörung des Widerstandes kommen. Je nach Bauform verkraften Widerstände Nennlasten zwischen 0.1 und 20 Watt. Für höhere Leistungen müssen diese speziell konstruiert werden.

Spannungsfestigkeit

Die Spannungsfestigkeit gibt die maximale Spannung an, mit der der Widerstand betrieben werden darf. In der Mikroelektronik ist diese Größe von untergeordneter Bedeutung (ausgenommen Ansteuerung von Bildröhren etc.)

Last Update: 2005-Okt-17


Bauformen

Drahtwiderstände

Drahtwiderstände bestehen aus einem dünnen Draht, der auf einem Keramikträger aufgewickelt ist. Die Länge des Drahtes bestimmt den Widerstandswert. Zum Schutz gegen Oxidation bei Erwärmung und zur elektrischen Isolation wird der Draht mit einer Lackschicht überzogen oder in einen Zementüberzug eingebettet. Drahtwiderstände wirken aufgrund der Wicklungen auch als Spulen, was sich besonders bei höheren Frequenzen störend bemerkbar macht. Durch eine besondere Art der Wicklung kann dieser Effekt jedoch weitgehend zum Verschwinden gebracht werden.

Schichtwiderstände

Bei Schichtwiderständen wird auf einem Keramikkörper eine Schicht aus Kohle- oder Metallfilm aufgebracht. Zum Abgleich und zur Vergrößerung des Widerstands wird in einer Schraubenlinie das Widerstandsmaterial abgetragen. Kohleschichtwiderstände weisen einen relativ großen negativen Temperaturkoeffizienten auf, Metallfilmwiderstände haben einen geringen TK in der Nähe von Null. Schichtwiderstände können kostengünstig mit Werten zwischen 0.1 W und 1 MW gefertigt werden.

Potentiometer

Für viele Anwendungen benötigt man variable Widerstände. Eine Form ist das sogenannte Potentiometer, das drei Anschlüsse besitzt: Zwei, die mit den Enden der Widerstandsschicht verbunden sind und einer, der mit einem Schleifer verbunden ist, der zwischen den Enden bewegt werden kann. Je nach Schaltung erhält man einen variablen Widerstand oder einen Spannungsteiler. Potentiometer können sowohl mit linearem Verlauf des Widerstandswertes als auch mit logarithmischem Verlauf angefertigt werden. Letztere werden dort eingesetzt, wo eine logarithmische Größe eingestellt werden soll (z.B. Lautstärkeregler).

Last Update: 2005-Okt-29


Spezielle Widerstände

Die im folgenden beschriebenen speziellen Widerstände stellen nur eine kleine Auswahl aus der großen Vielfalt von Bauteilen mit resistivem Charakter dar. Der Leser sei für weitergehende Informationen auf die einschlägige Literatur verwiesen.

Heißleiter

Heißleiter sind Widerstände mit hohem negativem Temperaturkoeffizienten (ca. 5% pro Grad Celsius). Sie leiten bei hoher Temperatur elektrischen Strom gut, bei niedriger Temperatur schlecht. Heißleiter werden auch NTC-Widerstände genannt (NTC = negative temperature coefficient). Sie bestehen aus Halbleitermaterial und werden sowohl zur Einschaltstrombegrenzung von Röhrengeräten als auch als (ungenaue) Temperatursensoren eingesetzt. Heißleiter können im Temperaturbereich von 0 bis 220°C eingesetzt werden.

Lichtempfindliche Widerstände

Lichtempfindliche Widerstände (Fotowiderstände) bestehen aus Halbleitern (Cadmiumsulfid, Selen). Trifft Licht auf den Widerstand, so ändert dieser seinen Wert, da durch das Licht zusätzliche Ladungsträger im Halbleiter entstehen. Bei Dunkelheit haben Fotowiderstände Werte im MW-Bereich, bei starker Beleuchtung kann der Widerstand bis auf wenige W sinken. Ein großer Nachteil von Fotowiderständen ist ein Memory-Effekt, der dazu führt, dass der Widerstandswert bei einer bestimmten Beleuchtungsstärke von der Vorgeschichte abhängt

Last Update: 2005-Nov-03


Home [image] Bauteilkunde [image] Kondensatoren [image] Kondensatoren
Index
Siehe auch: Kapazitive Luftfeuchtemessung, Farbcodierung, Drehkondensator

Kondensatoren

Ein Kondensator setzt sich aus zwei Platten zusammen, die voneinander durch einen dünnen Isolator ('Dielektrikum') getrennt sind. Zumeist sind die Platten als Metallfolien ausgeführt, die aus Platzgründen zu einem Zylinder aufgewickelt sind. Ein Kondensator kann zwischen seinen Platten die Ladung Q speichern, wobei gilt, dass die gespeicherte Ladung (= Zahl der Ladungsträger) und die Spannung an den beiden Platten proportional ist.

Q = CU

Den Proportionalitätsfaktor C nennt man die Kapazität des Kondensators, er wird in Farad gemessen. Da die Einheit Farad für real existierende Kondensatoren viel zu groß ist, wird die Kapazität von Kondensatoren immer in Bruchteilen von Farad angegeben (z.B. nF oder pF).

Schließt man einen Kondensator an eine Gleichstromquelle, so fließt zu Beginn des Ladevorgangs ein großer Strom, der nur durch den Innenwiderstand der Stromquelle und den Widerstand der Zuleitungen begrenzt wird (dasselbe gilt auch für die Entladung). Obwohl der Ladestrom mit der Zeit exponentiell abnimmt, kann der Anfangsstrom so groß werden, dass der Kondensator zerstört wird. Kondensatoren müssen daher u.U. über einen Vorwiderstand betrieben werden.

Die unterschiedlichen Bauformen von Kondensatoren werden von der geforderten Spannungsfestigkeit und der Art des Dielektrikums bestimmt. Besonders hingewiesen sei auf Elektrolyt-Kondensatoren ('Elko'), deren Dielektrikum eine elektrolytisch aufgebrachte Schicht von Aluminiumoxid oder Tantaloxid ist. Diese Kondensatoren dürfen nur mit der richtigen Polung verwendet werden, da sich bei Falschpolung das Dielektrikum auflösen würde und es zu einem Kurzschluss kommen würde. Kondensatoren werden durch folgende Kennwerte charakterisiert:

Kapazitätswert

Übliche Kapazitätswerte von Kondensatoren bewegen sich zwischen 5 pF und 0.1 F und bestimmen Bauart und Größe des Kondensators. Die Nennkapazität ist meist aufgedruckt, oder als Farbcodierung angebracht, wobei die Normreihe verwendet wird. Bei veränderlichen Kondensatoren ist der Wert oft nicht aufgedruckt, so dass dieser geschätzt oder gemessen werden muss. Toleranz Die Toleranz von Kondensatoren beträgt üblicherweise 10 %, wobei in vielen Anwendungen (z.B. Sieb- und Entkopplungskondensatoren) die Toleranz ohne Bedeutung ist. Bei frequenzbestimmenden Kondensatoren kann man entweder engtolerierte Typen einsetzen oder einen Festkondensator mit einem kleinen variablen Kondensator (Trimmer) verknüpfen. Spannungsfestigkeit Die Spannungsfestigkeit ist eine wichtige Kenngröße eines Kondensators, da diese seine Einsatzmöglichkeiten bestimmt. Sie ist abhängig von der Art des Dielektrikums und ist für Wechselspannungen niedriger als für Gleichspannungen, da es bei Wechselspannungen zur Erwärmung des Kondensators kommt. Die Nennspannung gilt für Temperaturen unterhalb von 40°C. Isolationswiderstand Der Isolationswiderstand eines Kondensators ist ein Wirkwiderstand und bei Gleichspannungsanwendungen von Bedeutung. Er hängt von der Kapazität, der Bauart und dem verwendeten Dielektrikum ab. Bei Elektrolytkondensatoren ist er niedrig, in der Größenordnung von 100 kW. Verlustfaktor Sämtliche Wechselstromverluste eines Kondensators werden durch einen parallel zum Kondensator gedachten Widerstand Rp zusammengefasst. Der Verlustfaktor tan(d) wird definiert als Xc/Rp und gibt die Güte eines Kondensators wieder. Er hängt von der Temperatur, der Frequenz, der Feuchtigkeit und der Kapazität des Kondensators ab.

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Kondensatoren [image] Bauformen von Kondensatoren
Index
Siehe auch: Kapazitive Luftfeuchtemessung, Farbcodierung, Drehkondensator

Bauformen von Kondensatoren

Die Bauformen von Kondensatoren unterscheiden sich erheblich, je nach Anwendung und Höhe der Kapazität. Diese können von kleinen millimetergroßen Perlen bis zu kilogrammschweren Großelkos reichen. Die folgende Grafik gibt eine grundsätzliche Einteilung und Übersicht:

Folienkondensatoren Folienkondensatoren bestehen aus dünnen Metallfolien, die durch Isolierfolien getrennt sind. Die Isolierfolie dient gleichzeitig als Dielektrikum. Durch Aufwicklung der Folien erreicht man relativ große Kapazitätswerte bei geringem Bauvolumen. Eine weitere Verringerung des Bauvolumens kann durch Metallisierung der Isolierfolie (Aufdampfen der Metallschicht) erreicht werden. Das Bauvolumen kann noch verringert werden, wenn auf die Isolierfolie sehr dünne Metallschichten als Elektroden aufgedampft werden. Je nach Art der Folien unterscheidet man folgende Typen von Folienkondensatoren:

Kunststofffolienkondensatoren: Bei den Kunststofffolienkondensatoren unterscheidet man zwischen Bauformen mit Elektrodenfolien (Kennbuchstabe K) und Bauformen mit aufgedampften Elektroden (MK). Kunststofffolienkondensatoren sind sehr zuverlässig, die MK-Ausführung ist selbstheilend.

Papierkondensatoren: Bei Papierkondensatoren wird ein in Isolieröl oder Vaseline getränktes Spezialpapier als Dielektrikum verwendet. Zum Schutz gegen Feuchtigkeit wird der gewickelte Papierkondensator in ein Keramikröhrchen eingelötet.

Metallpapierkondensatoren (MP-Kondensatoren): Bei den Metallpapierkondensatoren sind die Elektroden als eine etwas 100 nm bis 1µm dicke Metallschicht auf das Dielektrikum aufgedampft. Als Umhüllung werden meistens Metallrohre oder Metallbecher verwendet. MP-Kondensatoren weisen eine sogenannte "Selbstheilung" auf: Bei einem Durchschlag verdampft wegen der geringen Dicke der Metallschicht der Belag an der Durchschlagstelle, wodurch ein bleibender Kurzschluss zwischen den Belägen vermieden wird.

Keramikkondensatoren Das Dielektrikum von Keramikkondensatoren besteht aus einer gesinterten Mischung von Oxiden (welche ??). Der gesinterte Grundkörper wird mit aufgedampften Metallelektroden versehen und zum Oberflächenschutz mit Kunstharz überzogen. Die Verlustfaktoren von Keramikkondensatoren liegen etwas höher als bei den Kunststofffolienkondensatoren. Elektrolytkondensatoren Um große Kapazitäten erzeugen zu können, hat man prinzipiell zwei Möglichkeiten: Man vergrößert die Fläche des Kondensators und/oder man verkleinert den Abstand zwischen den Elektroden, wobei die Verkleinerung des Abstandes durch die Spannungsfestigkeit des Dielektrikums begrenzt ist, während die Vergrößerung der Fläche durch die maximal gewünschte Bauteilgröße beschränkt ist. Elektrolytkondensatoren (kurz auch ELKO genannt) bestehen aus einer Metallelektrode, die zur Bildung eines Dielektrikums oxidiert sind. Die bei der Oxidation entstehenden Oxidschichten sind sehr dünn, so dass große Kapazitätswerte bei kleinem Bauvolumen möglich sind. Die Gegenelektrode wird eine leitfähige Flüssigkeit (Elektrolyt) eingesetzt. Elkos ins empfindlich gegen Verpolung, da es bei einer Falschpolung zur elektrochemischen Auflösung der Oxidschicht kommt und dadurch der Elko zerstört wird (die Metallelektrode ist stets der Pluspol, der Becher (der der Anschluss für den Elektrolyten ist) der Minuspol. Elkos können erhebliche Abweichungen zwischen der tatsächlichen und der Nennkapazität aufweisen. Tantal-Elkos Der Tantal-Elektrolytkondensator ist ein Elektrolytkondensator, dessen Anoden-Elektrode aus Tantal besteht. Die Oberfläche der Tantal-Anode wird in einem Formierverfahren zu Tantalpentoxid (Ta2O5) oxidiert. Dieses Oxid zeichnet sich durch eine hohe Spannungsfestigkeit aus und bildet das Dielektrikum des Kondensators. Die Tantal-Elektroden werden je nach Bauform aus Folien gewickelt oder aus Pulvermaterial gesintert.

Die folgende Tabelle gibt einen kurzen Überblick zu den wichtigsten Kondensator-Bauformen.

Typ des Kondensators | Dielektrikum | Kapazitätsbereich | Maximale Spannung | Verlustfaktor
Drehkondensator | Luft | 5 - 500 pF | 500 V | -
Keramik | Bariumtitanat | 1 - 1000 nF | 2000 V | 3.0
Papier | Papier in Öl | 10 - 1000 nF | 10000 V | 1.0
Glimmer | Glimmer | 0.1 - 5 nF | 10000 V | 0.2
Film | Polystyrrol | 50 pF - 500 nF | 1000 V | 0.02
Film | Polypropylen | 10 nF - 100 uF | 2000 V | 0.05
Elektrolyt | Aluminiumoxid | 100 nF - 1 F | 500 V | 10
Elektrolyt | Tantaloxid | 10 nF - 1 mF | 100 V | 10

Last Update: 2006-Nov-27


Drehkondensator

Für Abstimmzwecke ist es manchmal notwendig veränderbare Kondensatoren zur Verfügung zu haben. Obwohl eine einstellbare Kapazität auch durch Varaktor-Dioden erzielbar ist, gibt es nach wie vor Anwendungen bei denen man auf den klassischen mechanischen Drehkondensator nicht verzichten will (besonders wenn es um eine hohe Güte des Kondensators geht).

Drehkondensatoren bestehen aus einem parallelen Satz an Metallplatten, die kammförmig ineinandergreifen. Die Metallplatten sind abwechseln rotierbar und fixiert. Durch Drehen des Rotorpaketes werden die sich gegenüberstehenden, wirksamen Kondensatorflächen des Kondensators verändert. Die meisten Drehkondensatoren arbeiten mit Luft als Dielektrikum, es gibt aber auch Vakuumausführungen, die eine höhere Durchschlagfestigkeit aufweisen.

Trimmkondensatoren (auch Trimmer genannt) unterscheiden sich von Drehkondensatoren nur durch kleinere Bauart und durch schwerer verdrehbare Rotorplatten. Die Einstellung erfolgt mit einem Schraubenzieher. Der Kapazitätsbereich von Trimmern ist klein, sie werden daher meistens nur zum Feinabgleich auf bestimmte Kapazitätswerte eingesetzt.

Last Update: 2006-Nov-27


Schwingquarze

Schwingquarze werden überall dort eingesetzt, wo Frequenzen mit hoher Präzision und Stabilität erzeugt oder gefiltert werden müssen. Das einem Schwingquarz zugrundeliegende Prinzip ist die Piezoelektrizität. Übt man auf einen Quarzkristall Druck aus, so entsteht an seiner Oberfläche eine Ladung, die umso größer ist je größer der ausgeübte Druck ist. Die Umkehrung diese Effektes wird in Schwingquarzen ausgenutzt. Legt man an einen Quarzkristall eine elektrische Spannung, so wird dieser deformiert, bzw. bei einem Wechselfeld zu mechanischen Schwingungen angeregt.

Die Frequenz der Schwingung hängt vom Schnitt des Quarzes und seinen Dimensionen ab. Sie liegt zwischen 10 kHz und 250 MHz und lässt sich schon bei der Herstellung sehr genau einstellen (typ. 1 - 50 ppm). Ein weiterer Abgleich ist durch externe Komponenten möglich.

Die folgende Schaltung zeigt die Ansteuerung eines Quarzes im Frequenzbereich von 0.8 bis 20 MHz. Man beachte, dass für den unteren Frequenzbereich andere Werte für die Kondensatoren zu verwenden sind als für den oberen Bereich.

Ansteuerung eines Quarzes im Frequenzbereich 0.8 - 20 MHz

Für viele Anwendungen - besonders in der Digitaltechnik - ist eine andere, sehr einfache Schaltungsvariante ausreichend. Hier wird ein Gatterbaustein als Oszillator eingesetzt. Zwei Inverter vom Typ 7404 werden durch Gegenkopplungswiderstände analog betrieben und formen einen frei schwingenden Oszillator, dessen Frequenz durch den Quarz bestimmt wird.

Ansteuerung eines Quarzes durch digitale Gatter

Last Update: 2005-Okt-08


Home [image] Bauteilkunde [image] Dioden [image] Grundlagen
Index
Siehe auch: Leuchtdioden, Gleichrichterdioden, Fotodiode, Schaltdioden, Zenerdioden, Experiment: Temperaturmessung

Dioden

Die Diode ist das einfachste bipolare Halbleiterbauelement. Sie besteht aus zwei Zonen, die unterschiedlich dotiert sind. Die beiden Zonen haben je einen Anschluss, die Kathode ist mit der n-dotierten Zone verbunden, die Anode mit der p-dotierten.

Innerer Aufbau einer Diode

Verbindet man die Kathode mit dem negativen Anschluss einer Gleichspannungsquelle und die Anode mit dem positiven Pol, so leitet die Diode. Schließt man sie umgekehrt an, so sperrt sie. Die Diode funktioniert also wie ein Ventil, das den Strom nur in einer Richtung durchlässt. Dies kommt auch im Schaltsymbol zum Ausdruck; der Strom wird nur in Pfeilrichtung durchgelassen.

Schaltsymbol einer Diode

Das Verhalten der Diode wird in einer Kennlinie charakterisiert. In dieser Kennlinie wird der durch die Diode fließende Strom gegen die angelegte Spannung aufgetragen. Man erkennt, dass der Strom in Vorwärtsrichtung nicht bei null Volt zu fließen beginnt, sondern erst bei einer Spannung Ud, der sogenannten Durchlassspannung. Sie hängt vom verwendeten Halbleitermaterial ab, und beträgt für Silizium 0.6 V und für Germanium 0.3 V. Ab dieser Schwelle beginnt der Strom stark zu steigen, die Diode leitet.

Kennlinien einer Si-Diode

Polt man die Diode um, so fließt nur ein sehr kleiner Sperrstrom, man sagt, die Diode 'sperrt'. Der Sperrstrom liegt für Siliziumdioden im Bereich von 10 bis 100 nA.

Vergrössert man die angelegte Spannung bis zur Spannung Uz , so hält die Diode dem 'Druck' nicht mehr stand und der Strom beginnt sehr stark zu steigen. Man spricht von der Durchbruch- oder Zenerspannung Uz. Die Zenerspannung sollte für normale Gleichrichterdioden möglichst hoch liegen (mehrere 100 V), sie kann jedoch für bestimmte Zwecke bei der Fertigung genau eingestellt werden (siehe Zenerdioden).

Eine sehr charakteristische Eigenschaft eines jeden pn-Übergangs ist der negative Temperaturkoeffizient der Durchlassspannung. Er beträgt für Siliziumdioden ca. -2 mV/K und ist über einen weiten Temperaturbereich konstant. Dieser Temperaturkoeffizient hat zur Folge, dass Halbleiterschaltungen immer temperaturempfindlich sind. Dies führt besonders bei analogen Präzisionsschaltungen zu Problemen (AD-Wandler, Referenzelemente, etc.), die durch schaltungstechnische Tricks behoben werden müssen. Der Temperaturkoeffizient kann jedoch auch in vorteilhafter Weise dazu verwendet werden, eine Diode als Temperatursensor einzusetzen.

Last Update: 2005-Okt-29


Schaltdioden

Unter dem Begriff Schaltdioden (manchmal auch Kleinsignaldioden genannt) versteht man Dioden, die für Sperrspannungen von 25 bis 100 V und für Durchlassströme von 100 bis 500 mA ausgelegt sind. Sie sind meist in Glas eingeschmolzen und werden für alle Anwendungen der Signalverarbeitung eingesetzt.

Eine wichtige Größe ist die Sperrverzugszeit. Das ist die Zeit, die die Diode braucht, um vom leitenden in den sperrenden Zustand zu schalten. Sie liegt typisch zwischen 1 und 20 ns.

Schaltdioden werden sowohl für digitale Zwecke (z.B. zur logischen Verknüpfung von Signalen) als auch für analoge Anwendungen (z.B. als Demodulator, als Sensoren, in Präzisionsgleichrichterschaltungen, etc.) eingesetzt. Ein paar Anwendungsbeispiele von Kleinsignaldioden sind unter den Stichworten Gleichrichter und Sensoren beschrieben.

Last Update: 2005-Okt-08


Gleichrichterdioden

Allgemein gebräuchliche Gleichrichterdioden haben zulässige Sperrspannungen von einigen 100 bis 1000 V und können Ströme bis zu einigen zehn Ampere bewältigen. Bei diesen Dioden ist auf die an der Diode entstehende Verlustleistung zu achten. Da die Durchlassspannung für Si-Dioden zwischen 0.6 und 1.0 V (je nach Stromstärke und Temperatur) liegt, entsteht an einer Diode, die einen Strom von beispielsweise 10 A leitet, eine Verlustleistung von ca. 8 W. Es ist daher durch entsprechende Dimensionierung des Kühlkörpers dafür zu sorgen, dass die Temperatur der Sperrschicht 125 Grad Celsius nicht übersteigt.

Da Gleichrichterdioden oft in Brückenschaltungen eingesetzt werden, werden von den Halbleiterherstellern auch fix und fertige Gleichrichterbrücken angeboten, die entweder in einem Plastik- oder Metallgehäuse eingegossen sind.

Anordnung der Dioden in einer Gleichrichterbrücke.

In der nachfolgenden Tabelle sind die wichtigsten Daten ein paar ausgewählter Dioden aufgelistet.

Bauteil | Mat. | Fnkt. | URM [V] | I0 [mA] | Pv [mW] | IR [nA] | trr [ns]
AA143 | Ge | D | 25 | 60 | 80 | 4000 | -
AA144 | Ge | U | 90 | 45 | 80 | 25000 | -
BA170 | Si | S | 20 | 150 | 300 | 50 | 100
BAV20 | Si | U | 200 | 200 | 400 | 100 | 50
BAW75 | Si | S | 25 | 150 | 500 | 100 | 4
BAX12 | Si | K | 90 | 400 | 400 | 100 | 35
BAY80 | Si | U | 150 | 200 | - | 100 | 50
1N4148 | Si | S | 75 | 150 | 500 | 25 | 4
1N4448 | Si | S | 75 | 150 | 500 | 25 | 4
D...Demodulatordiode G...Gleichrichterdiode K...Kontaktschutzdiode S...Schaltdiode U...Universaldiode URM...Spitzensperrspannung I0...Richtstrom in Einwegschaltung Pv...maximal zulässige Verlustleistung IR...Sperrstrom trr...Sperrverzugszeit

Last Update: 2005-Okt-08


Zenerdioden

Wie oben bereits erwähnt, sperrt eine Diode nur bis zur Durchbruchspannung Uz. Wird Uz erreicht, so steigt der Strom bei nur kleiner Spannungserhöhung sehr stark an, das heißt der differentielle Widerstand ist klein - in der Gegend von 10 bis 100 W. Man kann die Durchbruch- oder Zenerspannung durch Änderung der Dotierungsstärke bei der Herstellung der Dioden nahezu beliebig zwischen 1.5 und 200 V einstellen; es werden von den Herstellern Zenerdioden mit Standardwerten der Normreihe E24 angeboten. Die Zenerdiode wird durch folgendes Schaltsymbol symbolisiert.

Sie wird vor allem zur Spannungsstabilisierung eingesetzt. Die folgende Abbildung zeigt eine einfache Schaltung zur Spannungsstabilisierung. Die Zenerdiode wird über den Vorwiderstand R von einem konstanten Strom durchflossen, der über die Diode die Zenerspannung Uz abfallen lässt. Ein Nachteil dieser Schaltung ist, dass sich die Zenerspannung mit der Belastung ändert. In realen Anwendungen muss daher dafür gesorgt werden, dass dieser einfachen Schaltung nur möglichst wenig Strom entnommen wird (Faustregel: weniger als 10 % des Querstroms).

Ein weiterer Nachteil besteht darin, dass die Spannung Uz fixiert ist und nur durch Austausch der Zenerdiode geändert werden kann. Man kann aber durch Anwendung von Operationsverstärkern (Konstantstromquelle) diese Nachteile weitgehend vermeiden und so eine variable Konstantspannungsquelle erzeugen. Zenerdioden haben einen Temperaturkoeffizienten, dessen Größe und Richtung sich mit der Zenerspannung ändert. Zenerdioden unterhalb von 5.6 V haben einen negativen Temperaturkoeffizienten, darüber einen positiven. Für temperaturstabile Referenzen kann man daher Zenerdioden mit 5.6 V Durchbruchspannung verwenden. Für höhere Ansprüche muss aber eine Thermostatisierung vorgenommen werden.

Hinweis: Beim Einsatz von Zenerdioden ist stets darauf zu achten, dass der Betriebsstrom an der Zenerdiode eine nicht unerhebliche Verlustleistung erzeugt. Bei 20 mA Betriebsstrom entsteht z.B. an einer 15-V-Diode eine Verlustleistung von 300 mW, was zu kleine Zenerdioden schon zum 'Verglühen' bringt.

Last Update: 2005-Okt-17


Leuchtdioden

Wird ein pn-Übergang in Durchlassrichtung betrieben, so kommt es zur Rekombination der positiven und negativen Ladungsträger, wobei Energie frei wird. Bei den herkömmlichen Halbleitermaterialien (Si und Ge) wird diese Energie in Form von Wärme an den Kristall abgegeben. Spezielle Halbleitermaterialien geben jedoch die freiwerdende Energie zum Teil in Form von Licht ab. Dieses Licht ist praktisch monochromatisch (typ. 30 nm Bandbreite), die Farbe des ausgesendeten Lichts hängt vom Halbleitermaterial und dessen Dotierung ab (siehe untenstehende Tabelle). Leuchtdioden (light emitting diode = LED) bestehen je nach Farbe aus GaAs, InAs, AlGaAs, GaP, GaAsP oder GaN und werden in den Farben blau, grün, gelb, orange, rot und infrarot angeboten.

Halbleiter | Wellenlänge [nm] | Farbe
InAs | 3480 | infrarot
GaAs | 900 | infrarot
GaP + ZnO | 690 | rot
GaAsP | 660 | rot
AlGaAs | 650 | rot
GaAsP + N | 645 | rot
GaAsP | 580 | gelb
GaP + N | 570 | grün
GaN | 490 | blau

Zum Betrieb werden sie in Vorwärtsrichtung mit 1 bis 20 mA geschaltet. Bei LEDs ist besonders auf die Sperrspannung zu achten, da diese sehr niedrig liegt. Ein Überschreiten der Sperrspannung führt zur Zerstörung des Bauelements.

LEDs werden in unterschiedlichen Bauformen angeboten, als Zylinder, Prisma oder Quader. Bei 7-Segment-Anzeigen werden sieben Leuchtdioden in Form eines Achters angeordnet. Durch Ansteuerung der entsprechenden Segmente kann man alle Ziffern darstellen. Die 7-Segment-Anzeigen werden mit gemeinsamer Anode oder gemeinsamer Kathode gefertigt. Für deren Ansteuerung existieren integrierte Schaltungen (7-Segment-Decoder), die die anliegende binäre Information in die entsprechenden Ziffern umsetzen. Jedoch kann man bei Verwendung eines Mikroprozessors leicht auf diese Decoder verzichten.

Bauformen von Leuchtdioden.

Last Update: 2006-Dez-05


Home [image] Bauteilkunde [image] Transistoren [image] Einleitung
Index
Siehe auch: Bipolartransistoren, Feldeffekttransistoren, Fototransistor

Transistoren

Transistoren sind stromverstärkende Bauelemente, die man zum Schalten und Verstärken eines Signals einsetzen kann. Als Halbleitermaterial wird Silizium, Germanium und Galliumarsenid verwendet. Man unterscheidet nach dem Funktionsprinzip zwischen bipolaren Transistoren und Feldeffekttransistoren.

Last Update: 2005-Okt-29


Home [image] Bauteilkunde [image] Transistoren [image] Bipolartransistoren
Index
Siehe auch: Experiment: Stromverstärkung, Feldeffekttransistoren, Transistoren

Bipolartransistoren

Ein bipolarer Transistor besteht aus drei unterschiedlich dotierten Schichten mit zwei pn-Übergängen, wobei sich die drei Schichten in zwei verschiedenen Kombinationen verbinden lassen. Man erhält dadurch npn- und pnp-Transistoren. Die drei Zonen werden als Basis und Kollektor bezeichnet. Jede Schicht ist mit einem Anschluss nach außen geführt, so dass Transistoren im allgemeinen drei Anschlüsse besitzen. Bei vier Anschlüssen ist meist auch das Substrat des Transistors mit einem Anschluss versehen.

Zum leichteren Verständnis kann man sich einen Transistor formal auch als Zusammenschaltung zweier Dioden vorstellen. Dieses Modell gibt zwar die Funktion des Transistors nicht wieder, bietet aber einen Überblick über die Sperr- und Durchlassrichtungen. Normalerweise betreibt man den Transistor so, dass die Basis-Emitter-Diode in Durchlassrichtung geschaltet ist, die Kollektor-Basis-Diode in Sperrichtung.

Interner Aufbau eines bipolaren Transistors

Dieses Diodenmodell ermöglicht es auch einen einfachen Gut-/Schlecht-Test durchzuführen. Ein funktionsfähiger Transistor muss sich (im ausgebauten Zustand) zwischen den Anschlüssen Basis/Kollektor und Basis/Emitter wie eine Diode verhalten, d.h. er leitet nur in eine Richtung. Zwischen den Anschlüssen Kollektor/Emitter muss er in beide Richtungen sperren. Ist das nicht der Fall so ist der Transistor zerstört. Der innere Aufbau eines Transistors wird auch in seinem Schaltsymbol versinnbildlicht nachfolgende Abbildung. Der kleine Pfeil im Schaltbild gibt die technische Stromrichtung im Transistor an.

Schaltsymbol eines bipolaren Transistors

Die charakteristische Eigenschaft eines Transistors ist nun, dass zwischen Kollektor und Emitter ein Strom fließt, der ein Vielfaches des Basisstroms beträgt und durch diesen gesteuert wird. Die folgende Abbildung zeigt den Zusammenhang zwischen Kollektor-Emitter-Spannung, Basis- und Kollektorstrom. Der Kollektorstrom ist nur wenig von der angelegten Kollektor-Emitter-Spannung abhängig, jedoch sehr stark vom Basisstrom.

Kennlinie eines bipolaren Transistors

Man bezeichnet das Verhältnis von Kollektor- zu Basisstrom als Stromverstärkung des Transistors. Sie ist von der Größe des Kollektorstromes abhängig und liegt typisch bei etwa 200.

Die folgende Tabelle gibt die Parameter einiger ausgewählter bipolarer Transistoren wieder:

Typ | Polarität | UCE [V] | IC [A] | Ptot [W] | ß | fG [MHz] | Gehäuse
2N2222A | NPN | 40 | 0.8 | 0.5 | 100-200 | 250 | TO-18
2N2907A | PNP | 60 | 0.6 | 0.4 | 100-200 | 200 | TO-18
2N3055 | NPN | 60 | 15 | 115 | 20-70 | 0.8 | TO-3
BC107 B | NPN | 45 | 0.1 | 0.3 | 200-450 | 300 | TO-18
BC140-6 | NPN | 40 | 1 | 3.7 | 40-100 | 50 | TO-39
BC140-10 | NPN | 40 | 1 | 3.7 | 63-160 | 50 | TO-39
BC140-16 | NPN | 40 | 1 | 3.7 | 100-250 | 50 | TO-39
BC547 A | NPN | 45 | 0.1 | 0.5 | 110-220 | 300 | SOT-54
BC547 B | NPN | 45 | 0.1 | 0.5 | 200-450 | 300 | SOT-54
BC547 C | NPN | 45 | 0.1 | 0.5 | 420-800 | 300 | SOT-54
BC557 A | PNP | 45 | 0.1 | 0.5 | 125-250 | 150 | SOT-54

Last Update: 2005-Nov-10


Home [image] Bauteilkunde [image] Transistoren [image] Feldeffekttransistoren
Index
Siehe auch: CMOS, IC-Technologie, Ionenselektive Elektroden, Bipolartransistoren, Transistoren

Feldeffekttransistoren

Im Gegensatz zu Bipolartransistoren werden Feldeffekttransistoren (FET) nicht durch einen Basisstrom sondern durch ein elektrisches Feld gesteuert. Das bedingt eine praktisch leistungslose Steuerung, die Eingangsströme liegen im Bereich von pA. Der FET besitzt ebenso wie der Bipolartransistor drei Anschlüsse: Source (S), Drain (D) und Gate (G). Sie entsprechen den Anschlüssen Emitter, Kollektor und Basis.

Man kann zwischen zwei Grundtypen von FETs unterscheiden: den Sperrschicht-FETs (Junction FET oder JFET), bei denen zwischen Gate und dem Source-Drain-Kanal ein sperrender pn-Übergang existiert, und den IGFETs (Isolated Gate FET), bei denen die Gate-Elektrode durch eine isolierende Schicht vom Source-Drain-Kanal getrennt ist. Wenn die isolierende Schicht eines IGFETs aus SiO2 besteht, nennt man diesen IGFET auch MOSFET (Metal On Semiconductor FET). Sperrschicht-FETs werden vor allem in analogen integrierten Schaltungen eingesetzt, MOSFETs in digitalen integrierten Schaltungen.

Das Arbeitsprinzip eines FETs ist in folgender Abbildung anhand eines n-Kanal-Sperrschicht-FETs gezeigt (vergleiche auch MOSFETs). Ist die Gate-Spannung gleich null, so leitet der Transistor. Bei abnehmender Gate-Spannung wird der Kanal zwischen Source und Drain immer enger, der Widerstand nimmt zu, bis bei einer bestimmten Spannung der Kanal zur Gänze eingeschnürt ist und der Transistor sperrt.

Interner Aufbau eines Feldeffelttransistors

Die verschiedenen FET-Typen kann man nach ihrem internen Aufbau in sechs Klassen einteilen: jeweils n-Kanal und p-Kanal-Versionen von Sperrschicht-FETs, Verarmungs-MOSFETs und Anreicherungs-MOSFETs. Folgende Tabelle gibt einen Überblick über die verwendeten Schaltsymbole und den wichtigsten Eigenschaften der FET-Typen:

MOSFET |  |  |  | JFET
Enhancement |  | Depletion
n-Kanal | p-Kanal | n-Kanal | p-Kanal | n-Kanal | p-Kanal
diskrete Leistungsverstärker Digitale ICs selbstsperrend |  | Diskrete Hochfrequenzverstärkter digitale ICs selbstleitend |  | diskrete Verstärker analoge ICs

Last Update: 2007-Jän-03


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-3
Index
Siehe auch: TO-18, TO-39, TO-5, TO-66, TO-72, Gehäuse TO-254AA

Gehäuse TO-3

Angaben in mm (Zoll in Klammern)

Das TO-3-Gehäuse wird typischerweise für Leistungstransistoren eingesetzt, wie z.B. 2N3055, BDX68 oder BUR50

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-5
Index
Siehe auch: TO-18, TO-3, TO-39, TO-66, TO-72, Gehäuse TO-254AA

Gehäuse TO-5

Angaben in mm (Zoll in Klammern)

Das TO-5-Gehäuse wird typischerweise für Transistoren im Leistungsbereich zwischen 0.5 und 1 W eingesetzt, wie z.B. 2N2904L, BCY30A oder BFY50L.

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-18
Index
Siehe auch: TO-3, TO-39, TO-5, TO-66, TO-72, Gehäuse TO-254AA

Gehäuse TO-18

Angaben in mm (Zoll in Klammern)

Das TO-18-Gehäuse wird typischerweise für Kleinsignaltransistoren eingesetzt, wie z.B. 2N2222, 2N2907, BC109, oder BC377

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-39
Index
Siehe auch: TO-18, TO-3, TO-5, TO-66, TO-72, Gehäuse TO-254AA

Gehäuse TO-39

Angaben in mm (Zoll in Klammern)

Das TO-39-Gehäuse wird typischerweise für Transistoren im Leistungsbereich zwischen 0.5 und 1 W eingesetzt, wie z.B. BC461 oder BF257

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-66
Index
Siehe auch: TO-18, TO-3, TO-39, TO-5, TO-72, Gehäuse TO-254AA

Gehäuse TO-66

Angaben in mm (Zoll in Klammern)

Das TO-66-Gehäuse wird typischerweise für Transistoren mittlerer Leistung eingesetzt, wie z.B. 2N3054 oder BDX14

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-72
Index
Siehe auch: TO-18, TO-3, TO-39, TO-5, TO-66, Gehäuse TO-254AA

Gehäuse TO-72

Angaben in mm (Zoll in Klammern)

Das TO-72-Gehäuse wird typischerweise für Transistoren im Leistungsbereich um 0.5 W eingesetzt, wie z.B. 2N3571 oder 2N918.

Last Update: 2006-Nov-27


Home [image] Bauteilkunde [image] Transistoren [image] Transistorgehäuse [image] TO-254AA
Index
Siehe auch: Gehäuse TO-18, Gehäuse TO-3, Gehäuse TO-66, Gehäuse TO-39, Gehäuse TO-5, Gehäuse TO-72

Gehäuse TO-254AA

Angaben in mm (Zoll in Klammern)

Das TO-254AA-Gehäuse wird typischerweise für Leistungstransistoren im Bereich um 100 W eingesetzt, wie z.B. BDS28 oder BDS29.

Last Update: 2006-Nov-27


Thyristoren

Ein Thyristor ist ein Bauelement mit bistabilem Verhalten. Er besteht aus vier hintereinander geschalteten, unterschiedlich dotierten Halbleiterschichten, so dass sich drei Sperrschichten ergeben. Die beiden äußeren Schichten tragen die Anschlüsse für Anode und Kathode, eine innere Schicht den Steueranschluss (Gate).

Interner Aufbau und das Schaltsymbol des Thyristors.

Wenn das Gate nicht angesteuert ist, sperrt der Thyristor in beide Richtungen. Ist der Thyristor in Durchlassrichtung gepolt (Anode positiver als Kathode), so kann der Thyristor durch Anlegen einer Spannung an das Gate gezündet werden und der Thyristor geht vom sperrenden in den leitenden Zustand über. Nach der Zündung kann die Steuerspannung am Gate wieder weggenommen werden, ohne dass sich der Zustand des Thyristors ändert. Es genügt für die Zündung des Thyristors also ein kurzer Spannungsimpuls am Gate. Der Thyristor bleibt so lange im leitenden Zustand, bis der Strom zwischen Anode und Kathode einen gewissen Mindestwert (Haltestrom Ih) unterschritten hat. In diesem Augenblick geht der Thyristor wieder in den sperrenden Zustand und kann nur durch einen erneuten Zündimpuls am Gate wieder leitend gemacht werden. folgende Abbildung zeigt dieses Verhalten des Thyristors anhand seiner Kennlinie.

Kennlinie eines Thyristors

Zum vollständigen Zünden des Thyristors ist ein minimaler Zündstrom und eine minimale Zündspannung notwendig. Außerdem muss der Zündimpuls bis zum vollständigen Durchschalten des Thyristors anliegen. Typische Werte für Zündstrom und Zündspannung liegen bei 20 mA und 3 V (Thyristor mit 3A Durchlassstrom). Thyristoren werden für Durchlassströme zwischen 0.5 und einigen 1000 A (!) erzeugt. Die maximalen Sperrspannungen liegen zwischen 50 und 1000V.

Vorsicht ist bei Umpolung des Thyristors gegeben. Falls der Thyristor in Sperrichtung betrieben wird, darf er nicht angesteuert werden, da sonst der Sperrstrom deutlich ansteigen würde. Dies ist besonders beim Einsatz in Wechselspannungsschaltungen zu beachten.

Last Update: 2005-Okt-08


TRIAC

Im Gegensatz zum Thyristor ist der TRIAC ein bipolares Bauelement, mit ihm können sowohl positive als auch negative Spannungen geschaltet werden.

Innerer Aufbau und das Schaltsymbol des TRIACs

An den Anschlüssen K1 und K2 liegt die zu schaltende Spannung. Der TRIAC wird leitend,sobald ein Zündimpuls im Gate G angelegt wird. Der leitende Zustand bleibt dann so lange bestehen, bis der Strom zwischen den Anschlüssen K1 und K2 unter einen bestimmten Wert gefallen ist (Haltestrom Ih).

Kennlinie eines TRIACs.

Last Update: 2007-Jän-03


Geschichte

Die Entwicklungsgeschichte der integrierten Bausteine geht zurück in die 30er Jahre dieses Jahrhunderts, wo Wilson und andere 1932 die Theorie der Halbleiter zu entwickeln beginnen. Es sollten dann allerdings bis zur Erfindung des Transistors, jenes grundlegenden Bauelements von integrierten Schaltungen, noch 15 Jahre vergehen. Denn 'erst' 1947 entwickeln J. Bardeen und W.H. Brattain den ersten Transistor auf einem Germaniumkristall. Es handelte sich um einen Punkt-Kontakt-Transistor. 1956 bekommen W. Shockley, J. Bardeen und W.H. Brattain dafür den Nobelpreis für Physik. Ende 1958 wurde bei Texas Instruments versucht, zwei Transistoren auf einem Chip unterzubringen, wodurch der erste integrierte Baustein geboren wurde. Der entstandene 'IC' war für heutige Begriffe sehr grobschlächtig aufgebaut, die Transistoren wurden manuell mit Drähten verbunden. Der nächste notwendige Schritt in Richtung moderner integrierter Schaltungen war die Entwicklung des Planartransistors bei Fairchild. Dieser Transistor enthält alle Anschlüsse auf einer Ebene des Halbleiterkristalls und erlaubt die einfache Verbindung von mehreren Transistoren durch dieselben Techniken, die bei der Transistorproduktion eingesetzt werden. Die weitere Entwicklung ging dann Schlag auf Schlag und führte letztendlich nicht nur zur Entwicklung von ganzen Logikfamilien, sondern auch zur Entwicklung von Speicherbausteinen und von Mikroprozessoren. Die folgende Tabelle soll einige Meilensteine in der weiteren Entwicklungsgeschichte von integrierten Schaltungen bis zu Beginn der 80er Jahre beleuchten.

1961 | erste Massenproduktion von integrierten Schaltungen (wenige Transistoren pro Chip)
1969 | 1k-Speicher von Intel
1970 | Entwicklung des ersten 4-Bit-Mikroprozessors 4004
1972 | Intel führt ersten 8-Bit-Mikroprozessor 8008 ein
1973 | erster Mikrocomputer angekündigt (basierend auf 8008)
1974 | Ankündigung des 8080 von Intel
1975 | Ankündigung des 6501
1976 | Ankündigung des Z80 und des 8085
1978 | Ankündigung des 8086
1979 | Ankündigung des 68000
1981 | Ankündigung des 16032

Wie allgemein bekannt, kam es durch den überwältigenden Erfolg der integrierten Bausteine zu einem exponentiellen Wachstum der Mikroelektronik-Branche. Eine Beschreibung der Entwicklung würde den Rahmen dieses Buches sprengen. Der interessierte Leser sei daher auf ein Buch hingewiesen, das die Entwicklung integrierter Bausteine kompetent beschreibt (Queisser, 1985 [image] ). Um die exponentielle Entwicklung der Leistungsfähigkeit von Mikroelektronik zu zeigen, sei zum Schluss dieser kurzen geschichtlichen Darstellung noch ein Diagramm gezeigt, das die Kosten für eine Rechenleistung von einer Million Instruktionen pro Sekunde (MIPS) bei Personalcomputern seit der Einführung des IBM PCs zeigt.

Kosten für ein MIPS bei Personalcomputern

Last Update: 2007-Jän-03


Home [image] Bauteilkunde [image] Integrierte Schaltkreise [image] Technologie der integrierten Schaltkreise
Index
Siehe auch: [], Feldeffekttransistoren

IC-Technologie

Die folgende kurze Beschreibung der Technologie der integrierten Schaltkreise soll nur exemplarisch an einer einfachen Integrationstechnik zeigen, wie integrierte Schaltkreise hergestellt werden können. Da sich die Herstellungsverfahren zur Zeit sehr schnell weiterentwickeln, kann in diesem Rahmen keine erschöpfende Darstellung aller heute existierenden Technologien gegeben werden. Der interessierte Leser sei auf die einschlägige Fachliteratur hingewiesen.

Herstellung eines integrierten PMOS-Transistors

Folgende Abbildung zeigt den Aufbau eines PMOS-Transistors. In das n-leitende Silizium sind zwei p-dotierte Zonen (Source,Drain) eingebracht. In der Mitte liegt, isoliert durch SiO2 das Gate. Angenommen am Gate liegt gegen die Source betrachtet, ein negatives Potential. Dadurch werden im Kanal unter dem Gate positive Ladungsträger (Löcher) angesammelt und ein p-leitender Kanal entsteht zwischen Source und Drain - der Transistor ist eingeschaltet.

PMOS-Transistor

Die Herstellung von integrierten Schaltungen läuft in mehreren Stufen ab. Ausgehend von einem n-dotierten Grundmaterial wird das n-Silizium mit einer Oxidschicht überzogen. In diese Oxidschicht werden mit Hilfe von fotolithographischen Techniken an jenen Stellen Löcher geätzt, an denen p-dotierte Zonen entstehen sollen. Das freigelegte Silizium wird nun über einen thermischen Diffusionsprozess mit Bor dotiert, so dass an diesen Stellen p-leitende Zonen entstehen (Source und Drain). Im nächsten Schritt wird der gesamte Kristall wieder oxidiert und es werden in die Oxidschicht Löcher für die Metallisierung geätzt. Bei der Metallisierung wird normalerweise Aluminium verwendet das in Form der die einzelnen Transistoren verbindenden Leiterbahnen aufgedampft wird. Nach der Metallisierung wird der Wafer zerschnitten und die einzelnen Bauelemente auf ihre Funktionstüchtigkeit überprüft. Die funktionierenden Bauteile werden nun im letzten Schritt in Gehäuse gegossen.

Last Update: 2007-Jän-03


Gehäuseformen

Im Laufe der Entwicklung der ICs wurden eine große Zahl von verschiedenen Gehäuseformen entwickelt. Sie unterscheiden sich sowohl in der Zahl der Anschlüsse, in der Anordnung der Pins und im Material (Kunststoff, Metall, Keramik), aus dem das Gehäuse gefertigt ist. Je nach verwendetem Material können die ICs mit unterschiedlich hohen Verlustleistungen betrieben werden.

Die Gehäuse für integrierte Schaltungen unterliegen zur Zeit einem sehr schnellen und tiefgreifenden Wandel. Der Trend geht immer mehr zu sehr hohen Anschlusszahlen (bis zu 256 Pins) mit immer höherer abzuführender Verlustleistung (bis zu 30W). Entscheidend für die Entwicklung der neuen Gehäuseformen ist das Verhältnis von Anschlüssen zur benötigten Fläche. Je größer dieses Verhältnis ist, desto mehr integrierte Bausteine lassen sich auf einer Platine unterbringen, desto größer werden aber auch die Probleme mit der Wärmeableitung.

Im folgenden sind die wichtigsten Gehäuseformen, wie sie für den ambitionierten Amateur wichtig sind, zusammengestellt. Neuere Entwicklungen wie TapeAutomatedBonding oder die Flip-Chip-Technik sind bewußt weggelassen, da sie ohne Bestückungsautomaten nicht anwendbar sind.

DIL, DIP

DIL steht für 'dualinline', DIP für 'dualinlinepackage' und bezeichnen ein Gehäuse, das die Anschlüsse in zwei Reihen nach außen führt ). Diese Gehäuseform ist die älteste Form und ist immer noch sehr weit verbreitet. Sie wird vor allem für ICs mittlerer Integrationsdichte eingesetzt. Es gibt Gehäuse mit 8, 14, 16, 18, 20, 24, 28, 32, 40 und 64 Anschlüssen, wobei der Abstand zwischen benachbarten Pins 0.1 Zoll ist, zwischen gegenüberliegenden Pins 0.3, 0.6 oder 0.9 Zoll. Manche Firmen verpacken ihre ICs (vor allem die großen mit 40 und mehr Anschlüssen) auch in DIL-Gehäusen mit geringerem Abstand zwischen den Pins (0.07 Zoll). Die DIL-Gehäuse sind entweder aus Kunststoff oder Keramik gefertigt. Hybridschaltungen sind meist in Metallgehäusen untergebracht. Das DIL-Gehäuse bietet das schlechteste Verhältnis von Anschlusszahl zu Fläche, und verbraucht daher viel Platz auf der Platine.

SIL, SIP

Eine Gehäuseform, die sich besonders bei Speicherbausteinen immer stärker durchsetzt ist das Single-In-Line-Gehäuse oder auch SIP (single in line package). Diese Anschlussform besitzt nur mehr eine Kontaktreihe mit 0.1 Zoll Abstand zwischen den Pins. Die Speicherchips sind auf einer kleinen Trägerplatine vertikal montiert, wodurch sich große Speichermengen auf kleinem Raum unterbringen lassen.

SMD, SMT

Eine der wesentlichen Entwicklungen auf dem Gebiet der Gehäusetechnik ist das Aufkommen von Surface Mounted Devices (SMD). Bei der Surface Mount Technology (SMT) wird das jeweilige Bauteil nicht mehr in entsprechend gebohrte Lochraster gesteckt und verlötet, sondern direkt auf der Oberfläche der Platine verlötet. Dies ergibt, was die Packungsdichte auf einer Platine betrifft, zwei verstärkende Faktoren. Zum einen können SMD-Gehäuse wesentlich kleiner gemacht werden, zum anderen können Bausteine in diesen Gehäusen auf beiden Seiten einer Platine aufgelötet werden.

Pin Grid Array

Beim Pin Grid Array werden die Anschlussstifte nicht mehr in ein oder zwei Reihen nach außen geführt, sondern in einem quadratischen Feld, in dem die Pins jeweils 0.1 Zoll Abstand besitzen. Typische Anschlusszahlen sind 68, 84 oder 132 Pins.

PLCC

Beim Plastic Leadless Chip Carrier (PLCC) werden die IC-Anschlüsse nicht mehr auf Pins geführt, sondern auf Anschlussfahnen, die sich am Rand des quadratischen Gehäuses befinden.

Gehäuseformen von integrierten Schaltungen

Last Update: 2005-Okt-08


Home [image] Bauteilkunde [image] Kühlkörper [image] Kühlkörper
Index
Siehe auch: Berechnungsbeispiel, Gebräuchliche Kühlkörperprofile, Gehäuseformen

Kühlkörper

Viele elektronische Schaltungen erzeugen soviel Verlustleistung, dass die entstehende Wärme ohne Verwendung von Kühlkörpern nicht mehr ausreichend abgeführt werden kann. Die Kühlkörper bestehen meist aus Aluminium, Messing, Kupfer oder Stahl oder aus einer Legierung aus Aluminium, Magnesium und Silizium. Sie haben oft bizarre Formen, um die kühlende Oberfläche möglichst groß zu halten. Für besonders große Wärmemengen ist eventuell ein zusätzlicher Lüfter notwendig. Jeder Halbleiterkristall, egal ob Transistor oder hochintegriertes Bauelement, darf nur maximal bis zu einer bestimmten Temperatur des Kristalls betrieben werden (Tj). Diese beträgt je nach verwendetem Material zwischen 90° Celsius für Germanium und 175° Celsius für Silizium. Bei integrierten Bausteinen ist die maximal zulässige Temperatur meist mit 125° Celsius festgelegt. Ist nun die entstehende Verlustleistung so groß, dass die entstehende Wärme nicht mehr ausreichend abgeführt werden kann, so muss ein Kühlkörper verwendet werden. Die Wirksamkeit eines Kühlkörpers wird durch seinen Wärmewiderstand beschrieben. Dieser gibt die Temperaturerhöhung des Kühlkörpers pro Watt zugeführter Verlustleistung an. Er wird in Kelvin/Watt (K/W) gemessen. Der Zusammenhang zwischen abzuführender Verlustleistung Pv, Sperrschichttemperatur Tj, Temperatur der Umgebung Tu und dem Wärmewiderstand Rth zwischen Kristall und Umgebung ergibt sich zu

Pv = (Tj-Tu)/Rth. (1)

Der Wärmewiderstand Rth setzt sich zusammen aus dem Wärmewiderstand zwischen Sperrschicht und Bauteilgehäuse Rg und dem Wärmewiderstand zwischen Gehäuse und Kühlkörper Rk. Außerdem muss bei Verwendung eines Isolierplättchens zwischen Gehäuse und Kühlkörper auch dessen Wärmewiderstand Ri mit berücksichtigt werden. Somit ergibt sich Gleichung (1) zu

Pv = (Tj-Tu)/(Rg+Rk+Ri). (2)

Damit lässt sich die Dimensionierung eines Kühlkörpers vornehmen. Unter der Voraussetzung, dass die Wärmewiderstände Rg und Ri bekannt sind, ergibt sich für Rk

Rk = (Tj-Tu)/Pv - Rg - Ri. (3)

Die Größen Tj und Rg sind im jeweiligen Datenblatt angegeben, Ri beträgt je nach verwendetem Isoliermaterial zwischen 0.1 und 0.3 K/W und Tu und Pv sind bekannt. Die folgende Tabelle gibt die Wärmewiderstände, Dicken und maximal zulässigen Isolierspannungen Umax von Isolierscheiben an.

Material | Dicke [mm] | Rth [K/W] | Umax [kV]
Glimmer | 0.05 | 0.3 | 2
Silikon | 0.18 | 0.3 | 3.5
Aluminiumoxid | 1 | 0.1 | 23
Aluminiumoxid | 3 | 0.3 | 69

Um einen Anhaltspunkt für den Wärmewiderstand einer Kühlfläche zu geben, ist in folgender Abbildung der Wärmewiderstand einer quadratischen, senkrecht montierten Kühlfläche in Abhängigkeit der Seitenlänge des Bleches angegeben. Das Blech befindet sich in ruhender Luft und besteht aus blankem Aluminium. Das Bauteil muss in der Mitte des Bleches montiert sein. Bei horizontaler Montage des Bleches müssen die angegebenen Wärmewiderstände mit 1.3 multipliziert werden, bei schwarzer Farbgebung müssen die Werte mit dem Faktor 0.7 multipliziert werden.

Wärmewiderstand einer quadratischen Alu-Platte

Last Update: 2005-Okt-08


Home [image] Bauteilkunde [image] Kühlkörper [image] Berechnungsbeispiel eines Kühlkörpers
Index
Siehe auch: Gebräuchliche Kühlkörperprofile, Kühlkörper

Berechnungsbeispiel eines Kühlkörpers

Angenommen es soll ein Spannungsregler vom Typ 7812 eingesetzt werden. Dieser erzeugt eine fixe Ausgangsspannung von 12 V und soll mit einer Eingangsspannung von 19 V versorgt werden. Er soll in einer Umgebungstemperatur von 0..50°C betrieben werden und soll 1 A Strom liefern. Aus dem Datenblatt entnimmt man, dass die maximal zulässige Kristalltemperatur 125° Celsius beträgt, und der Wärmewiderstand zwischen Kristall und Bauteilgehäuse Rg 5 K/W.

Aus der Spannungsdifferenz zwischen Ein- und Ausgang und dem geregelten Strom lässt sich die Verlustleistung berechnen: Pv = (19-12)*1 = 7 W. Da das Bauteil direkt ohne Isolierplättchen auf den Kühlkörper montiert werden soll, wird Ri = 0. Damit ergibt sich nach Gleichung (3) für den geforderten Wärmewiderstand Rk folgender Wert:

Rk = (125-50)/7-5-0 = 5.7 K/W.

Der Wärmewiderstand des Kühlkörpers darf also höchstens 5.7 K/W betragen. Sieht man in der Kennlinie für ein einfaches Blech nach, so findet man, dass dazu ein vertikal montiertes Alublech mit der Seitenlänge von 13 cm notwendig wäre. Färbt man das Blech schwarz, so ergibt sich eine Seitenlänge von 10cm. Man sieht also, dass für diesen Fall die Wärmeabfuhr mit einem einfachen Blech höchst unpraktisch ist, man wird daher einen Kühlkörper mit den geforderten Werten verwenden (z.B. Profil 88/25 mit 35 mm Länge).

Last Update: 2005-Okt-08


Gebräuchliche Kühlkörperprofile

Nachfolgend sind für ein paar gebräuchliche Kühlkörperprofile, deren Ausmaße und die entsprechenden Wärmewiderstände in Abhängigkeit der Länge der Profile angegeben.

Kühlkörperprofil 29/12
Kühlkörperprofil 43/12
Kühlkörperprofil 88/25
Kühlkörperprofil 180/48

Last Update: 2005-Okt-08


Home [image] Bauteilkunde [image] Gedruckte Schaltungen [image] Anfertigung gedruckter Schaltungen
Index
Siehe auch: Belichten und Ätzen der Platine

Gedruckte Schaltungen

Wer für seine Versuchsaufbauten nicht auf Stecksysteme zurückgreifen möchte, oder über kein Werkzeug für die Wire-Wrap-Technik verfügt, kann entweder Universal-Experimentierplatinen im Fachhandel kaufen, oder die entsprechende Platine selbst anfertigen. Für die Selbstanfertigung von gedruckten Schaltungen spricht, dass diese Methode preiswert ist und dass man dadurch gleich das Layout einer Platine testen kann. Als Nachteil ist das Arbeiten mit ätzenden Chemikalien anzusehen. Wer aber die Vorteile einer selbstentworfenen Platine ohne die Nachteile des Ätzen ausnützen möchte, kann reprofähige Vorlagen (z.B. mit Plotter erstellt, Maßstab 2:1) auch zu Firmen bringen, die sich auf die Herstellung gedruckter Schaltungen spezialisiert haben.

Viele Elektronik-Fans verwenden zum Ätzen ihrer Platinen Eisen(III)-chlorid, weil es leicht erhältlich und relativ ungefährlich ist. Die Ergebnisse, die durch diese Methode erzielt werden, sind jedoch nicht zufriedenstellend, da es häufig zu Unterbrechungen der Leiterbahnen und zu Kurzschlüssen kommt. In diesem Abschnitt wird ein Ätzverfahren beschrieben, das wesentlich bessere Ergebnisse in kürzerer Zeit liefert, jedoch auch aufgrund der Aggressivität der verwendeten Ätzmittel um einiges gefährlicher sind.

Last Update: 2005-Okt-08


Home [image] Bauteilkunde [image] Gedruckte Schaltungen [image] Herstellung des Platinenfilms
Index
Siehe auch: Belichten und Ätzen der Platine, Platinenlayouts

Herstellung des Platinenfilms

Die Herstellung der Platinenfilme kann je nach dem finanziellen Aufwand, den man treiben möchte, mit sehr unterschiedlichen Methoden erfolgen. Entsprechend sind die Ergebnisse unterschiedlich.

Die einfachste und billigste Methode ist, Kopien von Platinenlayouts (die z.B. in Zeitschriften veröffentlicht worden sind) mit einem Klarpausspray zu behandeln und davon den Print zu erstellen.

Eine weitere einfache Methode, die akzeptable Ergebnisse liefert, ist das Kleben von speziellen, für die Layouterstellung hergestellten, Klebesymbolen auf durchsichtige Folien.

Allen diesen Methoden ist gemeinsam, dass man immer eine 1:1-Vorlage erstellen muss, die naturgemäß ungenau ist. Möchte man bessere Ergebnisse erzielen, so kann man Vorlagen im Maßstab 2:1 oder 4:1 erstellen und diese fotographisch verkleinern. Der auf den Maßstab 1:1 verkleinerte Film dient dann als Belichtungsmaske für die Printherstellung. Diese Methode ist besonders dann zu empfehlen, wenn ein Personalcomputer und ein Plotter zur Verfügung stehen, da es inzwischen durchaus preisgünstige und brauchbare Graphiksoftware zum Printentwurf gibt.

Der aufwendigste und zugleich teuerste Weg zur Printplattenerstellung ist die Verwendung eines CAD-Systems (CAD= computer aided design). Mit solchen Systemen können die Layouts in digitaler Form (auf Diskette oder Lochstreifen) an einen Printplatten-Hersteller übergeben werden, der dann mittels Belichter und numerisch gesteuerter Bohr- und Fräsmaschine Platinen in Industrie-Qualität anfertigen kann.

Last Update: 2005-Okt-29


Home [image] Bauteilkunde [image] Gedruckte Schaltungen [image] Belichten und Ätzen der Platine
Index
Siehe auch: Herstellung des Platinenfilms, Gedruckte Schaltungen, Platinenlayouts

Belichten und Ätzen der Platine

Zur Herstellung von gedruckten Schaltungen gibt es zwei prinzipielle Verfahren, das additive und das subtraktive Verfahren. Beim additiven Verfahren werden auf das unbeschichtete Trägermaterial die Leiterbahnen galvanisch aufgebracht. Dieses Verfahren liefert die besten Ergebnisse, ist jedoch selbst für den ambitionierten Amateur ungeeignet, da es zu aufwendig ist.

Beim subtraktiven Verfahren wird von einer mit 35 mm Kupfer beschichteten Platte (1.5 mm Dicke) aus Hartpapier oder Epoxy-Harz das nicht benötigte Kupfer weggeätzt, so dass nur die Leiterbahnen übrig bleiben. Im folgenden wird dieses Verfahren näher beschrieben, so dass es vom Leser nachvollzogen werden kann.

Bevor die gedruckte Schaltung geätzt werden kann, muss ein Film im Maßstab 1:1 angefertigt werden (siehe oben). Als Basismaterial verwendet man die rohe mit Kupfer beschichtete Epoxy- oder Hartpapierplatte (im Fachhandel erhältlich) und schneidet sie auf die erforderliche Größe zu. Als nächstes wird die Rohplatine mit einem UV-empfindlichen Fotolack beschichtet. Dazu eignet sich z.B. der Positiv-20 der Firma Kontakt-Chemie. Vor der Beschichtung mit dem Fotolack muss die Kupferoberfläche von Kupferoxid und Fett befreit werden. Dazu verwendet man am besten einen harten Schwamm und ein Scheuermittel. Die Kupferoberfläche wird mit dem nassen Schwamm so lange gescheuert, bis die gesamte Oberfläche eine gleichmäßig helle Kupferfarbe zeigt. Die Platine wird nun gut gespült und getrocknet (am besten mit dem Föhn); ab nun darf sie nur mehr an den Rändern angefasst werden.

Die trockene Platine wird nun mit dem Fotolack beschichtet. Dazu wird sie waagrecht gelegt (Zeitungspapier unterlegen) und aus ca. 30 cm Entfernung mit Fotolack besprüht, bis die Oberfläche gleichmäßig bedeckt ist. Die Platine soll nicht im Fotolack schwimmen!

Die beschichtete Platine kann man nun an einem abgedunkelten Ort trocknen lassen (dauert mehrere Stunden) oder aber besser in einem Trockenschrank (zur Not geht auch ein Backrohr) bei 100 °C (ca. 15 min) trocknen. Nach dem Trocknen muss die Platine mit einem gleichmäßig glatten und nicht klebenden Film überzogen sein.

Im nächsten Schritt wird die Platine belichtet. Dazu legt man den Film des Layouts seitenrichtig (!) auf die beschichtete Oberfläche und beschwert ihn mit einer Glasplatte. Wichtig ist, dass der Film überall auf der Platine aufliegt. Die Belichtung muss mit einer Lampe, deren Licht UV-Licht enthält, geschehen (z.B. OSRAM Höhensonne, Ultra Vitalux 300W). Die Belichtungszeit richtet sich nach der Intensität der Lampe, sie beträgt z.B. für die erwähnte OSRAM-Höhensonne ca. 3min bei 30 cm Abstand der Lampe von der Platine.

Nach dem Belichten muss das Bild des Layouts entwickelt werden. Das Rezept des Entwicklers ist normalerweise dem Fotolack beigelegt. Für den Positiv-20 verwendet man 5 g Ätznatron (Natriumhydroxid) auf 1 l Wasser. Die Zusammensetzung des Entwicklers ist relativ kritisch. Ist die Konzentration zu niedrig, so dauert die Entwicklung zu lange, ist die Konzentration zu hoch, so wird das Bild zerstört. Der Entwickler löst den belichteten Fotolack auf, zurück bleiben die unbelichteten Teile, die den Leiterbahnen entsprechen. Für den nachfolgenden Ätzvorgang sind damit die Leiterbahnen mit Fotolack bedeckt und werden dadurch vor der Ätzlösung geschützt.

Zum Ätzen kann man verschiedene Chemikalien verwenden, z.B. Eisen(III)chlorid, Ammoniumpersulfat oder Salzsäure mit Wasserstoffperoxid. Der Autor hat sehr gute Erfahrungen mit dem System Salzsäure/Wasserstoffperoxid gemacht. Dazu wird die im Handel erhältliche 37 %ige Salzsäure 1:1 mit Wasser verdünnt und mit ca. 10 Volumsprozent Wasserstoffperoxid (H2O2, 30 %ig) versetzt.

ACHTUNG! Diese Lösung ist sehr agressiv und darf nicht mit der Haut in Berührung kommen. Falls dies doch passiert, sofort unter fließendem Wasser waschen.

Die Lösung gießt man in eine Plastikwanne (z.B. Entwicklerschale aus dem Fotohandel) und legt die belichtete Platine hinein. Sie wird mit einem Plastik- oder Glasstab leicht hin- und herbewegt. Ist die Konzentration des Ätzmittels richtig, so ist die Platine in ca. 15 Minuten fertig geätzt. Sie wird dann aus dem Bad genommen, gründlich gespült und getrocknet. Nun werden die Löcher gebohrt und die Platine ist fertig zum Bestücken.

Die Ätzlösung kann man aufheben für weitere Ätzvorgänge, die Entwicklerlösung muss man jedesmal neu ansetzen. Ist die Ätzflüssigkeit längere Zeit nicht verwendet worden, oder wird die Ätzgeschwindigkeit deutlich kleiner, so muss man das Oxidationspotenial der Lösung wieder erhöhen, indem man erneut Wasserstoffperoxid zusetzt. Diese Zugabe von H2O2 kann so lange wiederholt werden, bis der Ätzvorgang damit nicht weiter beschleunigt werden kann. In diesem Falle bildet sich meist eine weiße Schicht auf der Kupferoberfläche.

VORSICHT: Bei der Zugabe von H2O2 Vorsicht walten lassen, da besonders bei frischen Lösungen ein Zuviel an H2O2 den Ätzvorgang so stark beschleunigt, dass das Ätzbad zu kochen beginnt und giftige HCl-Dämpfe entweichen.

Zum Schluss noch ein Wort zur Mahnung: Den Ätzvorgang sollte man möglichst im Freien oder in gut durchlüfteten Räumen durchführen. Man sollte immer daran denken, dass die Lösungen aggressiv sind, die Dämpfe sowohl Gegenstände als auch Lebewesen schädigen können, und nicht zuletzt sollte man für eine ordnungsgemäße Entsorgung der Abfälle sorgen (Sondermüll). Auf keinen Fall die Abfälle übers Klosett entsorgen oder den Entwickler und die Ätzlösung in ein gemeinsames Gefäß gießen.

Last Update: 2005-Okt-29


Terminologie der Operationsverstärkertechnik

Um die Eigenschaften eines idealen Operationsverstärkers exakt beschreiben zu können, seien zuerst ein paar Begriffe erläutert:

  • Eingangs- und Ausgangswiderstand
    Das ist jener Widerstand, den man am Ein- oder Ausgang einer Schaltung mißt; diese Impedanz belastet eine etwaige Signalquelle (Eingangsimpedanz zin) oder wird von externen Teilen belastet (Ausgangsimpedanz zout). Wie wichtig der Begriff der Impedanz ist, zeigt folgendes Beispiel: Es soll die Spannung an einer hochohmigen Spannungsquelle gemessen werden (z.B. Glaselektrode mit Ri=10 MW). Würde man eine normales Messinstrument (Ri=10 kW) anschließen, so würde der größte Teil der Spannung am Innenwiderstand der Glaselektrode abfallen und das Instrument würde nur 0.1 % der EMK anzeigen. Um eine Genauigkeit von 1 % zu erreichen, muss das Instrument eine 100-fach größere Eingangsimpedanz haben als der Innenwiderstand der Signalquelle.

  • Offene Verstärkung (open loop gain) Avo
    Verstärkung des Operationsverstärkers ohne Rückkopplung

  • Rückkopplung (feedback)
    Die Rückführung eines Signals vom Ausgang zum Eingang eines Verstärkers; bei Rückkopplung zum invertierenden Eingang spricht man von Gegenkopplung, bei Rückkopplung zum nicht invertierenden von Mitkopplung.

  • Bandbreite (bandwidth) BW
    Die Bandbreite ist definiert als die Differenz der Frequenzen, bei denen die Verstärkung auf 70% des Nennwertes gefallen ist.

  • Eingangs-Offsetspannung (input offset voltage) U0
    U0 ist jene Spannung, die man anlegen muss, um den Ausgang auf Null zu bringen.

Last Update: 2005-Okt-08


Home [image] Operationsverstärker [image] Konzept der Operationsverstärker
Index
Siehe auch: Datenerfassungssysteme, CMOS-Gatter als lineare Schaltungen, Operationsverstärker - Typenübersicht, Terminologie der Operationsverstärkertechnik, Operationsverstärker

Konzept der Operationsverstärker

Unter einem Operationsverstärker versteht man einen universell anwendbaren Gleichspannungsverstärker, der ohne äußere Beschaltung bestimmte, standardisierte Eigenschaften zeigt. Erst die Beschaltung mit externen Bauelementen ergibt die gewünschten Eigenschaften der Schaltung.

Schaltbild des Operationsverstärkers

Der ideale Operationsverstärker hat zwei Eingänge und einen Ausgang. Die Ausgangsspannung des Operationsverstärkers wird durch

Uout = Av * (Uin1 - Uin2)

beschrieben, es wird also die Differenz der Eingangsspannungen verstärkt. Der Eingang 1 wird als 'nicht invertierender Eingang' bezeichnet und durch das Zeichen '+' gekennzeichnet, der Eingang 2 wird als 'invertierender Eingang' bezeichnet und mit dem Zeichen '-' gekennzeichnet. Auf den restlichen Seiten des Buches wird der invertierende Eingang immer mit '(-)Eingang' und der nicht invertierende Eingang immer mit '(+)Eingang' bezeichnet. Im folgenden sollen die wichtigsten Größen eines idealen Verstärkers beschrieben werden. Außerdem werden jeweils die typischen Werte von real existierenden Operationsverstärkern angegeben.

  • Verstärkung
    Die Verstärkung eines idealen Operationsverstärkers wird mit Av=ì definiert. Reale Verstärker weisen Verstärkungen zwischen 104 und 108 auf.

  • Eingangswiderstand
    Die Eingangswiderstand eines idealen Verstärkers ist als zin=ì definiert. Dies bedeutet, dass kein Strom in den Eingang des Verstärkers fließt und somit die angeschlossene Signalquelle nicht belastet wird. Reale Verstärker besitzen einen Eingangswiderstand zwischen 100 kW und 1000 GW.

  • Ausgangswiderstand
    Der Ausgangswiderstand eines idealen Operationsverstärkers ist definitionsgemäß gleich null. Das bedeutet, dass der Ausgang beliebig viel Strom liefern kann und somit beliebig belastet werden kann. Reale Verstärker besitzen typische Ausgangswiderstände von 1 bis 10 W.

  • Offsetspannung
    Die Offsetspannung eines idealen Operationsverstärkers ist gleich null, das heißt, wenn man null Volt Spannungsdifferenz an die Eingänge legt, erzeugt er eine Ausgangsspannung von null Volt. Die Offsetspannung von realen Verstärkern liegt im Bereich von -10 mV bis +10 mV. Präzisionsverstärker können jedoch Offsetspannungen von nur einigen mV aufweisen.

  • Bandbreite
    Die Bandbreite eines idealen Verstärkers ist unendlich, das heißt, er verstärkt alle Signale unabhängig von der Signalfrequenz mit der gleichen Verstärkung. Bei realen Operationsverstärkern hängt jedoch die Verstärkung von der Signalfrequenz ab, was sich in einem konstanten Produkt aus Verstärkung und Frequenz ausdrückt. Ein typischer Verstärker besitzt ein Bandbreite-Verstärkungs-Produkt von 106.

  • Anstiegsgeschwindigkeit
    Ein Parameter der eng mit der Bandbreite verknüpft ist, ist die maximale Anstiegsgeschwindigkeit des Ausgangssignals (slew rate). Das Ausgangssignal eines idealen Operationsverstärkers besitzt eine unendlich hohe Anstiegsgeschwindigkeit; reale Verstärker bieten Anstiegsgeschwindigkeiten zwischen 0.5 und 1000 V/ms, oder anders formuliert, ein langsamer Operationsverstärker (z.B. mA741) benötigt für das Einstellen des Ausgangs von -15 V auf +15 V ca. 60 ms.

Die sehr hohe Verstärkung eines Operationsverstärkers bedingt, dass die Eigenschaften einer Schaltung weitgehend nicht von den Eigenschaften des jeweiligen Operationsverstärkers, sondern zum größten Teil von der Beschaltung abhängen. In fast allen Operationsverstärkerschaltungen wird ein Teil des Ausgangssignals auf den Eingang rückgekoppelt. Die Rückkopplung ist in den meisten Schaltungen eines der zentralen Elemente und soll daher an dieser Stelle ausführlich besprochen werden. Je nachdem, ob das Ausgangssignal auf den (-)Eingang oder den (+)Eingang zurückgeführt wird, unterscheidet man zwischen Gegenkopplung und Mitkopplung. Als Faustregel kann man sagen, dass Gegenkopplungen generell zu mehr Stabilität und besseren Parametern einer Schaltung führen, Mitkopplungen jedoch zu Instabilitäten, die nur bei sehr gezieltem Einsatz nutzbringend verwendet werden können.

Last Update: 2005-Okt-08


Gegenkopplung

Gegenkopplung eines Operationsverstärkers

Bei der Gegenkopplung wird ein Teil des Ausgangssignals auf den (-)Eingang zurückgeführt (s. Abb.). Die Höhe des rückgeführten Signals wird durch den Kopplungsfaktor k bestimmt. Für die Schaltung gilt, dass die Ausgangsspannung gleich der Differenz der Eingangsspannungen multipliziert mit dem Verstärkungsfaktor Av ist:

Uout = Av [image] (Uin-Uneg) (4)

Die Spannung am (-)Eingang Uneg wird nun durch das Rückkopplungsnetzwerk aus der Ausgangsspannung Uout erzeugt:

Uneg = k [image] Uout (5)

Damit folgt durch Einsetzen von Gleichung (5) in Gleichung (4):

Uout = Uin / (1 + k [image] Av) (6)

oder

Uout/Uin = A = Av/(1 + k [image] Av) ~ 1/k,

was der Gesamtverstärkung der Schaltung entspricht. Da für alle Operationsverstärker Av sehr groß ist, kann näherungsweise die Gesamtverstärkung A mit 1/k angegeben werden. Damit sind die Eigenschaften der Schaltung unabhängig von den Eigenschaften des Operationsverstärkers und nur mehr abhängig von den Eigenschaften des Rückkopplungsnetzwerkes. Im einfachsten Fall kann das Rückkopplungsnetzwerk ein Spannungsteiler sein, so dass sich ein linearer Gleichspannungsverstärker ergibt. Verwendet man zur Rückkopplung ein frequenzabhängiges Netzwerk (z. B. eine RC-Schaltung), so hat die Gesamtschaltung dann genau die Eigenschaften des Netzwerks (also z. B. ein Tiefpassfilter).

Wie wichtig das Konzept der Gegenkopplung ist, soll nun noch an einem kleinen Rechenbeispiel gezeigt werden. Nehmen wir an, ein nicht invertierender Verstärker wird mit einem fabrikneuen Operationsverstärker aufgebaut, der eine Verstärkung Av von 200000 aufweist. Im Gegenkopplungszweig liegt ein Spannungsteiler der 50 % der Ausgangsspannung auf den (-)Eingang zurückführt (k=0.5). Dadurch besitzt der Verstärker eine Gesamtverstärkung von

A = Av / (1 + k [image] Av) = 1.99998.

Nach einem Jahr beträgt die offene Verstärkung des Operationsverstärkers bedingt durch Alterungserscheinungen nur mehr 50000. Für dieses Av berechnet sich die Gesamtverstärkung zu 1.99992. Man sieht also, dass, obwohl die offene Verstärkung des Operationsverstärkers auf ein Viertel gesunken ist, die Gesamtverstärkung sich nur um 0.003 % geändert hat.

Auf einen weiteren wichtigen Aspekt der Gegenkopplung sei hier noch hingewiesen, der die Analyse von gegengekoppelten Schaltungen sehr erleichtert:

Aufgrund der Gegenkopplung ist jeder Operationsverstärker bestrebt, die Spannungsdifferenz an seinen Eingängen durch entsprechendes Einstellen des Ausgangs gegen Null gehen zu lassen. Erst wenn bei diesem Vorgang das Ausgangssignal durch eine der beiden Versorgungsspannungen begrenzt wird, versagt der Operationsverstärker; man nennt diesen Zustand 'übersteuert'.

Für nicht übersteuerte Operationsverstärker in gegengekoppelten Schaltungen gilt also, dass die Spannungsdifferenz an den Eingängen immer gleich null ist.

Last Update: 2005-Nov-18


Mitkopplung

Führt man einen Teil des Ausgangssignals auf den (+)Eingang zurück, so spricht man von Mitkopplung. Bei Anwendungen des Operationsverstärkers in Verstärkerschaltungen sollten Mitkopplungen nur vorsichtig eingesetzt werden, da sie zu Instabilitäten führen können, die dann die Schaltung (meist) zum Schwingen bringen.

Es gibt jedoch trotzdem Anwendungen, wo die Mitkopplung erfolgreich eingesetzt werden kann, wie z. B. bestimmte Filtertypen, Oszillatoren und Komparatoren.

Last Update: 2005-Okt-08


Home [image] Anhang [image] Platinenlayouts [image] Universal-Experimentierplatine LINMLT
Index
Siehe auch: Platine DIGMLT, Experiment: Spannungsfolger, Platinenlayouts

Universal-Experimentierplatine LINMLT

Zur Durchführung der Experimente mit Operationsverstärkern wurde eine Universal-Platine entworfen, die den Aufbau aller in diesem Kapitel beschriebenen Schaltungen ermöglicht. Die Platine bietet vier 8-poligen und einem 16-poligen IC Platz. Alle Anschlüsse der Sockel sind auf Printstifte herausgeführt, so dass mit Hilfe von kleinen Steckverbindern beliebige Schaltungen aufgebaut werden können (vergleiche auch Platine DIGMLT). Neben den Sockeln für integrierte Schaltungen bietet die Platine auch noch fünf Potentiometer und drei Cermet-Trimmer mit unterschiedlichen Werten. Außerdem sind noch zwei Leistungstransistoren mit kleinen Kühlkörpern vorgesehen (z.B. BD439 und BD440).

Layout der Experimentierplatine LINMLT

Die Abbildung zeigt den Bestückungsplan der Platine. Die Platine wird in der Regel mit +/- 12 V Versorgungsspannung betrieben werden (z.B. mit dem Fixspannungsnetzteil). Die Entkopplungskondensatoren C1 - C4 (33 uF, Tl) müssen für die höchste vorgesehene Spannung geeignet sein.

Last Update: 2005-Okt-08


Spannungsfolger

Der Spannungsfolger stellt die einfachste Beschaltung eines Operationsverstärkers dar:
Spannungsfolger

Da für gegengekoppelte Verstärker die Eingangsspannungsdifferenz immer gleich null ist, muss die Eingangsspannung am (-)Eingang gleich der Spannung am (+)Eingang sein. Da der (-)Eingang jedoch mit dem Ausgang verbunden ist, muss die Ausgangsspannung gleich der Eingangsspannung sein (Uin = Uout).

Man erreicht durch diese einfache Schaltung eine Pufferung der Signalspannung - die Eingangsimpedanz ist sehr hoch, die Ausgangsimpedanz sehr niedrig (Impedanzwandler). Der Verstärkungsfaktor ist gleich 1. Da die Ausgangsspannung der Eingangsspannung folgt, nennt man diese Schaltung auch Spannungsfolger (voltage follower).

Last Update: 2005-Okt-08


Home [image] Operationsverstärker [image] Nicht invertierender Verstärker
Index
Siehe auch: Experiment: Variabler Verstärker, Komparator, Invertierender Verstärker

Nicht invertierender Verstärker

Der nicht invertierende Verstärker ist so beschaltet, dass das Ausgangssignal aus dem Eingangssignal durch Multiplikation mit einem konstanten positiven Faktor erzeugt wird.

Nicht invertierender Verstärker

Am (+)Eingang liegt die Eingangsspannung Uin, die wegen der Gegenkopplung auch am (-)Eingang auftritt und damit am Knotenpunkt zwischen R1 und Rf. Diese Spannung verursacht durch R1 einen Stromfluss I = Uin/R1, der definitionsgemäß (die Eingänge eines Operationsverstärkers haben ja eine unendlich hohe Eingangsimpedanz) auch durch Rf fließen muss. Es tritt also eine Ausgangsspannung von Uout=I(R1+Rf) auf. Die Spannungsverstärkung beträgt daher

Av = Uout/Uin = I(R1+Rf)/IRf = (R1+Rf)/R1.

Der Eingangswiderstand zi ist unendlich. Man beachte, dass bei dieser Schaltung die Verstärkung nie kleiner eins werden kann. Im Extremfall wird sie gleich eins, wenn R1 gegen unendlich geht und Rf gleich null wird - dann liegt ein Spannungsfolger vor.

Last Update: 2005-Okt-08


Home [image] Operationsverstärker [image] Invertierender Verstärker
Index
Siehe auch: Experiment: Invertierender Verstärker, Differenzverstärker, Nicht invertierender Verstärker

Invertierender Verstärker

Beim invertierenden Verstärker liegt der (+)Eingang auf einem Referenzpotential Uref, wodurch, bedingt durch die Gegenkopplung, der (-)Eingang ebenfalls auf Uref gehalten wird. Die Eingangsspannung Uin verursacht durch Rin einen Strom von I=(Uin-Uref)/Rin, der auch durch Rf fließt, was wiederum einen Spannungsabfall von I.Rf bedingt. Dadurch ergibt sich die Ausgangsspannung zu

Uout = Uref-I.Rf = -Uin*Rf/Rin + Uref(Rin+Rf)/Rin.

Legt man den (+)Eingang auf Masse (Uref=0), so ergibt sich für die Ausgangsspannung des invertierenden Verstärkers folgender Zusammenhang:

Uout = -Uin*Rf/Rin.

Da bei dieser vereinfachten Schaltung (die üblicherweise der Regelfall ist) aufgrund der Gegenkopplung der (-)Eingang des Operationsverstärkers auf Massepotential gehalten wird, spricht man auch vom 'virtual ground' des (-)Eingangs.

Invertiernder Verstärker

Das Anlegen einer Referenzspannung an den (+)Eingang kann vorteilhaft in Schaltungen eingesetzt werden, die sowohl das Signal verstärken (oder abschwächen), als auch um einen gewissen Betrag verschieben sollen. Ein Nachteil dieser Schaltung besteht jedoch darin, dass sich der Offset nicht unabhängig von der Verstärkung einstellen lässt, was bei Gleichspannungsverstärkern mit einstellbarer Verstärkung Probleme macht. In diesem Fall muss man zum Verschieben des Signals einen Summierer verwenden.

Last Update: 2005-Nov-18


Home [image] Operationsverstärker [image] Summierverstärker
Index
Siehe auch: Experiment: Summierverstärker, Experiment: Vollwellengleichrichter, Differenzverstärker

Summierverstärker

Will man mehrere Spannungen summieren, so kann man folgende Schaltung verwenden. Die Eingangsspannungen Uin1 bis Uin3 erzeugen durch die Eingangswiderstände einen Strom, der im Knotenpunkt am (-)Eingang des Operationsverstärkers summiert wird und über den Rückkopplungswiderstand Rf einen Spannungsabfall produziert. Die Ausgangsspannung ist durch die Gleichung

Uout = -Rf*(Uin1/Rin1 + Uin2/Rin2 + Uin3/Rin3)

bestimmt.

Summierverstärker
Jeder der Eingänge weist eine Eingangsimpedanz auf, die dem jeweiligen Eingangswiderstand Rin,i entspricht.

Last Update: 2006-Dez-05


Gleichrichter

Legt man in den Gegenkopplungszweig eine Diode, so bekommt man einen Gleichrichter, der je nach der Polung der Diode entweder nur die positive oder nur die negative Halbwelle durchlässt. Die Schleusenspannung der Diode wird durch den Verstärker kompensiert, so dass nur Gleichrichtungsfehler in der Größenordnung von Ud auftreten.

Präzisionsdiode

Ein Problem dieser Schaltung besteht jedoch darin, dass der Ausgang der Schaltung hochohmig wird, wenn die Diode in Sperrichtung betrieben wird. Um dem abzuhelfen, muss an den Ausgang ein Lastwiderstand gegen Masse angeschlossen werden. Dadurch wird der Ausgang auf Massepotential gezogen wenn die Diode sperrt.

Ein weiterer Nachteil ist, dass der Verstärker während des Betriebs der Diode in Sperrichtung übersteuert wird, und dadurch eine gewisse Zeit braucht, bei einem Signalwechsel die Diode von der sperrenden in die leitende Richtung zu schalten. Je nach Typ des Operationsverstärkers kann diese Zeit mehrere ms betragen, so dass die Gleichrichtung eines Signals mit mehr als ein paar hundert Hertz mit großen Signalverzerrungen verbunden ist.

Eine etwas umfangreichere Schaltung, die den oben erwähnten Nachteil der Übersteuerung nicht hat, zeigt die folgende Abbildung. Falls die Eingangsspannung Uin negativ ist, wird die Diode D1 in Vorwärtsrichtung betrieben und die Ausgangsspannung Uout ist gleich der Eingangsspannung Uin. Bei positiver Eingangsspannung sperrt D1 und der Ausgang des Operationsverstärkers versucht gegen die negative Versorgungsspannung zu gehen. Bei -0.6 V wird jedoch D2 leitend und verhindert damit eine Übersteuerung des Operationsverstärkers.

Halbwellengleichrichter

Die gezeigte Schaltung invertiert das Signal und erzeugt ein positives Ausgangssignal. Möchte man ein negatives Ausgangssignal, so müssen die Dioden in der Polarität geändert werden.

Last Update: 2005-Okt-08


Differenzierer

Legt man eine Spannung Uin an den Eingang der Schaltung, so fließt durch Rf der Ladestrom des Kondensators, der dem Differential der angelegten Spannung entspricht.

Differenzierer

Die gezeigte Schaltung ist in der Praxis nur schlecht oder gar nicht anwendbar, da sie sehr anfällig gegen hochfrequente Störungen ist und zu Schwingungen neigt. Eine praktisch anwendbare Form eines Differenzierers zeigt die folgende Abbildung. Hier wurde durch Hinzufügen von Dämpfungselementen die Wirkung des Differenzierers im oberen Frequenzbereich unterdrückt, was jedoch zu keiner Verschlechterung des Verhaltens der Schaltung führt, da im oberen Frequenzbereich die Schaltung wegen der abfallenden Schleifenverstärkung ohnehin nicht mehr korrekt funktioniert.

Praxisgerechter Differenzierer

Für die Berechnung der Werte der einzelnen Bauelemente kann man folgende Faustregel angeben:

100*fc ~ 10*fh ~ fu

wobei fu die Grenzfrequenz des Operationsverstärkers angibt, bei der die offene Schleifenverstärkung gleich eins wird, fh die Frequenz bis zu der der Differenzierer korrekt funktioniert und fc die Grenzfrequenz für die der Differenzierer dimensioniert wurde. Die Grenzfrequenz des Operationsverstärkers wird dem Datenblatt entnommen, die Frequenzen fc und fh berechnen sich nach folgenden Gleichungen:

1/fc = 2p*R2*C1

1/fh = 2p*R1*C1 = 2p*R2*C2

Last Update: 2005-Okt-08


Integrator

Verwendet man anstatt des Rückkopplungswiderstandes Rf einen Kondensator C, so bekommt man einen Integrierer). Dies kann man so erklären: Der Knotenpunkt von Kondensator, Rin und dem (-)Eingang des Operationsverstärkers liegt wieder auf demselben Potential wie der (+)Eingang, also auf Masse. Legt man nun eine Spannung Uin an den Widerstand Rin, so fließt durch ihn ein Strom I = Uin/Rin, der den Kondensator proportional der Zeit auflädt; die Ausgangsspannung steigt also linear an, was dem Integral von Uin = konstant entspricht.

Ein real existierender Integrator benötigt zum korrekten Funktionieren jedoch noch eine Möglichkeit, diesen zu initialisieren. Da jede Eingangsspannung ungleich null ein steigendes (oder fallendes) Ausgangssignal erzeugt, würde der Integrator schon nach kurzer Zeit unbrauchbar, da die Ausgangsspannung gegen eine der Versorgungsspannungen laufen würde und dort fixiert ist. Um einen funktionsfähigen Integrator aufzubauen, verwendet man einen Schalter mit Doppelkontakten, mit dem der Kondensator entladen, und der Ausgang des Integrators auf null gebracht werden kann. Öffnet man diesen Schalter, so beginnt die Integrationsperiode, schließt man ihn, so wird der Operationsverstärker als Spannungsfolger betrieben und die Ausgangsspannung wird gleich null.

Integrierer

Eine häufig auftretende Fehlerquelle beim Aufbau von Integratoren ist der Eingangsoffsetstrom (Bias-Strom) des Operationsverstärkers. Dieser Strom wird natürlich mitintegriert und erzeugt einen Fehler im Integrationsergebnis. Um den Bias-Strom des Operationsverstärkers gering zu halten, sollte man erstens einen Operationsverstärker mit niedrigem Eingangsoffsetstrom auswählen und zweitens für die Widerstände R1 und R2 die gleichen Werte verwenden.

Last Update: 2005-Okt-08


Differenzverstärker

Eine in der Messtechnik oft benötigte Variante einer Operationsverstärkerschaltung ist der Differenzverstärker. Dieser Verstärker ist so beschaltet, dass am Ausgang die Differenz der Eingangsspannungen multipliziert mit dem Verstärkungsfaktor auftritt. Der Verstärkungsfaktor wird durch das Verhältnis der Widerstände R1 und R3 bestimmt.

Eine den beiden Eingängen gleichermaßen überlagerte Spannung (Gleichtaktspannung oder common mode voltage) darf nur einen sehr geringen Beitrag zur Ausgangsspannung liefern. Für eine optimale Unterdrückung der Gleichtaktspannung ist es wichtig, dass die Widerstände R1 und R2 und die Widerstände R3 und R4 genau gleiche Werte besitzen (möglichst auf 0.1 % genau).

Differenzverstärker

Ein wesentlicher Nachteil in der obigen Abbildung gezeigten Schaltung ist der niedrige Eingangswiderstand bei größerer Verstärkung. Dies führt dazu, dass eine nur kleine Abweichung der Innenwiderstände der Signalquellen eine starke Verschlechterung der Gleichtaktunterdrückung ergibt. Diesen negativen Effekt kann man unterdrücken, indem man den Eingängen des Differenzverstärkers je einen Spannungsfolger vorschaltet. Diese Schaltung wird auch als Elektrometerverstärker (instrumentation amplifier) bezeichnet.

Instrumentenverstärker

Last Update: 2005-Okt-08


Home [image] Operationsverstärker [image] Komparator
Index
Siehe auch: Inverter, Experiment: Auswirkungen der Slew-Rate des Komparators, Mitkopplung, Nicht invertierender Verstärker

Komparator

Möchte man zwei Spannungen vergleichen, so bedient man sich eines Komparators. Komparatoren sind im Prinzip Operationsverstärker, deren Eigenschaften durch spezielle schaltungstechnische Maßnahmen für die Vergleichsaufgabe optimiert wurden (Ansprechzeit möglichst kurz, keine Übersteuerung, etc.). Man kann jedoch für viele Anwendungen auch Operationsverstärker einsetzen.

Lässt man einen Operationsverstärker ohne äußere Beschaltung, so kommt seine offene Verstärkung voll zur Geltung. Dadurch schwingt die Ausgangsspannung schon bei wenigen Millivolt Eingangsspannungsänderung von einem in den anderen gesättigten Zustand. Man legt also an den (-)Eingang eine Referenzspannung Uref und an den (+)Eingang die Signalspannung Uin. Ist nun Uin größer als Uref, so ist die Ausgangsspannung ungefähr gleich der positiven Versorgungsspannung, ist Uin kleiner als Uref, ist die Ausgangsspannung gleich der negativen Versorgungsspannung.

In der Praxis ist diese Schaltung jedoch nicht besonders günstig, da sich bei langsam ändernder Eingangsspannung Uin im Umschlagspunkt Schwingungen am Ausgang ergeben können, die vom Rauschen der Eingangsspannung herrühren.

Abhilfe schafft hier ein Komparator mit Hysterese (Schmitt-Trigger). Durch die Hysterese wird bewirkt, dass bei ansteigender Eingangsspannung Uin das Umschalten bei höherer Spannung erfolgt als das Umschalten bei abfallender Eingangsspannung.

Schmitt-Trigger

Hint: Schmitt-Trigger verwendet man auch in der Digitaltechnik, um z.B. verschmierte Digitalsignale zu regenerieren, oder um Kontakte zu entprellen.

Dieses Verhalten wir durch eine Mitkopplung erreicht. Es wird zum Signal am (+)Eingang ein Teil des Ausgangs addiert, wodurch sich die Schaltschwellen in der oben erwähnten Weise verschieben. Die folgende Abbildung zeigt das Verhalten eines mit einer Hysterese versehenen Komparators. Die Größe der Hysterese wird durch

dUin = R1/R2*(Upos-Uneg)

bestimmt, wobei Upos und Uneg die maximale positive und negative Ausgangsspannung des Operationsverstärkers bezeichnen.

Die obere Schaltschwelle UH liegt bei R1/R2*(Uref-Upos) + Uref, die untere Schaltschwelle UL bei R1/R2*(Uref-Uneg) + Uref.

Verhalten eines Schmitt-Triggers

Die folgende Tabelle beinhaltet die wichtigsten Parameter von allgemein gebräuchlichen Komparatoren.

Typ | Uoff [mV] | Rin [kW] | Gain | td [ns]
LM261 | 3 | 17 | 3000 | 20
LF311 | 10 | >106 | 200000 | 200
LM339 | 5 | 4000 | 200000 | 1300
LM360 | 5 | 17 | 3000 | 14
NE529 | 10 | 5 | 4000 | 22
LM710 | 5 | 40 | 1500 | 40
uA760 | 6 | 5 | 3000 | 22
Uoff.... Eingangsoffsetspannung Rin.... Eingangswiderstand td.... Verzögerungszeit

Last Update: 2005-Okt-08


Spannungsquelle

Für viele Zwecke benötigt man eine justierbare Spannungsquelle, die möglichst unabhängig von der Versorgungsspannung sein soll und eine möglichst niedrige Temperaturdrift aufweisen soll. Eine einfache Schaltung wurde schon anhand der Zenerdiode gezeigt. Diese Schaltung hat aber den Nachteil, dass die erzeugte Spannung stark von der Versorgungsspannung und der Belastung abhängt und obendrein nicht beliebig einstellbar ist. Bei folgender Schaltung ist eine Zenerdiode in den Gegenkopplungszweig eines Operationsverstärkers geschaltet. Die Ausgangsspannung lässt sich über das Potentiometer R3 einstellen und ist immer größer als die Zenerspannung. Da der Strom durch die Zenerdiode vom (stabilisierten) Ausgang des Operationsverstärkers geliefert wird, ist dieser konstant und sowohl von der Versorgungsspannung als auch vom Laststrom unabhängig. Der Temperaturkoeffizient der Ausgangsspannung wird im wesentlichen vom Temperaturkoeffizienten der Zenerdiode bestimmt. Es ist deshalb ratsam, eine Zenerdiode mit niedrigem TK zu verwenden (Uz = 5.6 V) und den Betriebsstrom der Zenerdiode optimal einzustellen. Dieser kann mit R1 justiert werden, hängt aber außerdem von der eingestellten Ausgangsspannung ab.

Spannungsquelle

Für viele Zwecke (z.B. Netzteil) ist es notwendig, höhere Ausgangsströme zur Verfügung zu stellen, wobei der Temperaturkoeffizient eher unbedeutend ist. In diesem Fall wird man sich integrierter Spannungsregler bedienen.

Last Update: 2006-Dez-05


Stromquelle

Bei der Anwendung von Stromquellen muss man sich zweier Fehlerquellen bewußt sein. Zum einen sind einfache Stromquellen entweder als Quelle oder Senke ausgeführt, d.h. der Strom kann nur in eine konstruktionsbedingte Richtung fließen und zum anderen ist der Spannungsbereich, den die Quelle (oder Senke) annehmen kann, begrenzt. Wird dieser überschritten, so sinkt der Strom unter den eingestellten Wert.

Die folgende Abbildung zeigt den Aufbau einer steuerbaren Stromquelle. Der Strom wird durch die Eingangsspannung Uin eingestellt und errechnet sich aus Iout = Uin / R1. Er sollte etwa 500 mA nicht überschreiten. Diese Schaltung zeigt zwei Grenzen: Zum einen kann die Ausgangsspannung nur negative Werte annehmen und zum anderen funktioniert diese Schaltung nur für Ströme die wesentlich höher sind als der Basisstrom des Darlingtontransistors. Der zweite Nachteil kann durch Ersatz des Transistors T1 durch einen Feldeffekttransistor behoben werden.

Um auch eine positive Ausgangsspannung erzeugen zu können, kann man den Widerstand R1 statt auf Masse auf die positive Versorgungsspannung legen. Dies führt jedoch dazu, dass die Stabilität des Ausgangsstroms von der Stabilität der Versorgungsspannung abhängt. Die Steuerspannung bezieht sich nun nicht mehr auf Masse sondern auch auf die positive Versorgungsspannung.

Stromquelle

Last Update: 2005-Okt-08


Home [image] Operationsverstärker [image] Operationsverstärker - Typenübersicht
Index
Siehe auch: Konzept der Operationsverstärker, Operationsverstärker

Operationsverstärker - Typenübersicht

Die folgende Typenübersicht stellt nur einen kleinen Ausschnitt aus den am Markt verfügbaren Operationsverstärkern dar. Dem Leser sei empfohlen, ein paar verschiedene Operationsverstärker zu kaufen, und diese in den oben beschriebenen Experimenten einzusetzen. Besonders die Wahl von Verstärkern mit verschiedenen Anstiegsgeschwindigkeiten zeigt sehr schön den Einsatzbereich eines Operationsverstärkers. Die unten stehende Tabelle listet die wichtigsten Parameter ausgewählter Operationsverstärker auf. Das Anschlussschema kann aus dem Anhang entnommen werden.

Typ Ub,max
[V] 		Rin
[MW] 		sr
[V/ms] 		Io,max
[mA] 		Vos
[mV] 		Drift
[mV/C] 		Gain BW
[MHz]
OP20 | +/-18 | >106 | 0.05 | 0.7 | 0.2 | 0.75 | 106
OP08 | +/-18 | >107 | 0.12 | 5 | 0.1 | 1.0 | 2x105
LM308A | +/-20 | 70 | 0.2 | 5 | 2 | 6 | 3x105 | 0.5
LM324 | +/-15 | 0.25 | 40 | 4 | 7 | 15000 | 1
OP07 | +/-22 | >107 | 0.3 | 12 | 0.01 | 0.2 | 4x105 | 0.6
uA741 | +/-22 | 2 | 0.5 | 25 | 2 | 15 | 2x105 | 1.5
OP27 | +/-22 | 6 | 2.8 | 15 | 0.01 | 0.2 | 106 | 8
LM301 | +/-22 | 2 | 10 | 25 | 2 | 6 | 1.6x105 | 1
LF411 | +/-18 | 106 | 10 | 25 | 0.5 | 10 | 2x105 | 3
LF351 | +/-18 | 106 | 13 | 20 | 5 | 10 | 105 | 4
AM543 | +/-15 | 13 | 1 | 0.005 | 30 | 7
LM310 | +/-18 | 1012 | 30 | 2.5 | 6 | 1 | 20
LM344 | +/-34 | 30 | 20 | 2 | 105 | 1
LM318 | +/-20 | 3 | 70 | 6 | 4 | 2x105 | 15
LM6313 | +/-15 | 250 | 300 | 35
AD843 | +/-15 | 250 | 50 | 1 | 34
AM500 | +/-15 | 1000 | 50 | 3 | 5 | 100
CLC404 | +/-7 | 1 | 2300 | 70 | 2 | 30 | 175
CLC205 | +/-20 | 3 | 2400 | 75 | 3.5 | 11 | 170
Ub,max .... Maximale Versorgungsspannung; Rin .... Eingangswiderstand; sr .... Slew Rate;
Io,max .... Maximaler Ausgangsstrom; Vos .... Eingangsoffsetspannung;
BW .... Verstärkungs-Bandbreite-Produkt

Last Update: 2005-Okt-08


Grundlagen der Digitaltechnik

In diesem Kapitel sollen die Grundlagen der Digitaltechnik besprochen und experimentell zugänglich gemacht werden. Die Grundlagen der Digitaltechnik ruhen auf zwei Pfeilern:

  1. Die mathematischen Regeln zur Verknüpfung von logischen Variablen (Boole'sche Algebra)
  2. Die Standardisierung der Hardware

Aufbauend auf diese beiden Punkte soll nun zuerst ein kurzer Überblick über die Boole'sche Algebra gegeben werden und dann die Art der Standardisierung der Hardware und deren Grenzen besprochen werden.

Boole'sche Algebra

Eine logische Variable (manchmal auch Boole'sche Variable genannt) kennt nur zwei Zustände, die mit TRUE und FALSE (T und F) beschrieben werden können. In einer realen digitalen Schaltung werden den beiden Zuständen bestimmte Spannungspegel zugewiesen (z. B. TRUE = 5V, FALSE = 0V). Möchte man nun das Ergebnis einer digitalen Schaltung bestimmen, so kann man sich der Boole'schen Algebra (auch Schaltalgebra genannt) bedienen.

Logische Grundoperationen
Synthese logischer Funktionen
Karnaugh-Veitch Diagramme

Digitale Darstellung von Daten

Im folgenden soll eine kurze Übersicht zur binären Codierung von Daten gegeben werden.

Zahlensysteme
Ganze Zahlen
Gleitkommazahlen
BCD-codierte Zahlen
Gray-Codierung
Buchstaben und Zeichenketten

Technologien

Einen wesentlichen Beitrag zum ungeheuren Erfolg digitaler Schaltungen hat sicherlich die Tatsache geschaffen, dass Bausteine einer Familie ohne externe Bauteile verbunden werden dürfen. Diese Möglichkeit ist durch eine Quasi-Standardisierung der Hardware bedingt, die für jede Bauteilfamilie Spannungspegel, Stromaufnahme und Belastbarkeit der Ausgänge definiert. Probleme kann es jedoch geben, falls man Bausteine verschiedener Familien verbinden möchte oder zuviele Eingänge an einen Ausgang angeschlossen werden.

TTL
ECL
CMOS

Lange Signalleitungen
Platine DIGMLT

Gatter

Jede digitale Schaltung ist im Grunde aus Gattern aufgebaut. Gatter sind Schaltungen, die die in der Boole'schen Algebra definierten logischen Grundoperationen ausführen. Jedes Gatter verfügt über ein oder mehrere Eingänge und meist einen Ausgang. Die Eingangssignale werden gemäß der für das jeweilige Bauelement definierten Verknüpfung zum Ausgangssignal verarbeitet.

Reale ICs mit Gattern können je nach Baustein sowohl einfache elementare Operationen (wie UND, ODER, NICHT) ausführen, als auch komplexere Verknüpfungen, die der Kombination von mehreren Gattern entsprechen.

Jede logische Grundoperation wird durch ein eigenes Operatorzeichen dargestellt. Für Gatter existieren ein oder mehrere zugehörige Schaltsymbole. In diesem Buch sollen die amerikanischen und die alten deutschen Symbole Verwendung finden, obwohl eine DIN-Norm existiert. Dies ist darin begründet, dass die meisten Schaltpläne von digitalen Geräten mit diesen Symbolen gezeichnet werden und die Symbole der DIN-Norm schwerer zu lesen sind.

Der funktionelle Zusammenhang zwischen den Eingängen und den Ausgängen einer einfachen digitalen Schaltung lässt sich vorteilhaft durch eine Wahrheitstafel darstellen. In dieser Tafel werden für alle Kombinationen der Eingangssignale die entsprechenden Ausgangszustände aufgelistet.

Gatterübersicht
Treiber
Inverter (NOT)
AND
NAND
OR
NOR
XOR CMOS-Gatter als analoge Schaltungen

Weitere digitale Grundbausteine

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Boole'sche Algebra [image] Logische Grundoperationen
Index
Siehe auch: Synthese logischer Funktionen, Grundlagen der Digitaltechnik

Logische Grundoperationen

Es gibt drei Grundoperationen, aus denen alle anderen Operationen abgeleitet werden können: Konjunktion (UND) Disjunktion (ODER) und Negation (NICHT). Für diese Operationen sind folgende Operatorzeichen definiert:

Logische Funktion | Zeichen
UND | Ç
ODER | v
NICHT | ~ oder /

Für die Operatoren gelten verschiedene algebraische Gesetze:

Gesetz | Logische Gleichung
Kommutation | p v q = q v p p Ç q = q Çq
Assoziation | (p v q) v r = p v (q v r) (p Ç q) Ç r = p Ç (q Çr)
Distribution | p v (q Ç r) = (p v q) Ç (p v r) p Ç (q v r) = (p Çq) v (p Ç r)
Identität | p v FALSE = p p v TRUE = TRUE p Ç FALSE = FALSE p Ç TRUE = p
Komplement | p v ~p = TRUE ~~p = p p Ç ~p = FALSE ~TRUE = FALSE ~FALSE = TRUE
DeMorgan-Regeln | ~(p v q) = ~p Ç ~q ~(p Ç q) = ~p v ~q

Man kann das Ergebnis einer digitalen Schaltung in einer sogenannten Wahrheitstafel darstellen. Diese enthält auf der linken Seite alle möglichen Zustände der Eingänge und auf der rechten Seite die entsprechenden Zustände der Ausgänge. Für die Grundoperationen ergeben sich folgende Wahrheitstafeln:

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Boole'sche Algebra [image] Synthese logischer Funktionen
Index
Siehe auch: Logische Grundoperationen, Karnaugh-Veitch Diagramme, Von der Wahrheitstafel zur logischen Funktion

Synthese logischer Funktionen

Für die Diskussion in diesem Abschnitt werden die Eingänge einer logischen Schaltung mit Kleinbuchstaben bezeichnet (IN1 = a, IN2 = b, ...). Meist sind Problemstellungen für die eine bestimmte Schaltung gefunden werden soll, in Form einer Wahrheitstafel festgelegt. Bei der Synthese einer der Wahrheitstafel entsprechenden logischen Funktion geht man folgendermaßen vor:

1) Man zählt die Nuller und Einser in der Ausgangsspalte der Wahrheitstafel. 2) Überwiegt die Zahl der Nuller, so konstruiert man die 'disjunktive Normalform', andernfalls die 'konjunktive Normalform' (siehe unten). 3) Dieser Ausdruck wird nun durch Anwendung der Boole'schen Algebra vereinfacht. Bei der Vereinfachung benötigt man entweder viel Erfahrung oder man hat ein Computerprogramm zur Verfügung oder man verwendet sogenannte Karnaugh-Veitch-Diagramme.

Disjunktive Normalform

Zur Konstruktion der disjunktiven Normalform eines logischen Ausdrucks aus der Wahrheitstafel geht man so vor: Man konstruiert für jede Zeile der Wahrheitstafel in der eine Eins in der Ausgangsspalte steht, einen Term der alle Eingangsvariablen durch UND verbindet. Jene Eingangsvariablen, die in dieser Zeile eine Null haben, werden invertiert eingesetzt. Alle diese Terme werden durch ODER verbunden. Ein Beispiel soll das Verfahren veranschaulichen. Gegeben ist eine Wahrheitstafel die in einen logischen Ausdruck umgewandelt werden soll.

Disjunktive Normalform

Die oben angeführte Wahrheitstafel kann also durch den logischen Ausdruck (~aÇb) v (aÇ~b) beschrieben werden.

Konjunktive Normalform

Zur Konstruktion der konjunktiven Normalform eines logischen Ausdrucks geht man so vor: Man konstruiert für jede Zeile der Wahrheitstafel, in der eine Null in der Ausgangsspalte steht, einen Term der alle Eingangsvariablen durch ODER verbindet. Jene Eingangsvariablen, die in dieser Zeile eine Eins haben, werden invertiert eingesetzt. Alle diese Terme werden durch UND verbunden. Für das oben gezeigte Beispiel soll die konjunktive Normalform ermittelt werden.
Konjunktive Normalform

Die oben angeführte Wahrheitstafel kann also durch den logischen Ausdruck (avb) Ç (~av~b) beschrieben werden. Konjunktive und disjunktive Normalform sind äquivalent.

Last Update: 2005-Okt-11


Home [image] Digitaltechnik [image] Boole'sche Algebra [image] Von der Wahrheitstafel zur logischen Funktion
Index
Siehe auch: Synthese logischer Funktionen

Von der Wahrheitstafel zur logischen Funktion

Das folgende Beispiel soll den Weg von der Wahrheitstafel zur logischen Funktion beschreiben. Gegeben sei die Wahrheitstafel
a | b | c | OUT
0 | 0 | 0 | 1
0 | 0 | 1 | 1
0 | 1 | 0 | 1
0 | 1 | 1 | 0
1 | 0 | 0 | 0
1 | 0 | 1 | 0
1 | 1 | 0 | 1
1 | 1 | 1 | 0

Da die Zahl der Einsen überwiegt, wird die konjunktive Normalform gebildet. Dazu liefern die Zeile 4, 6 und 8 drei Terme die mit UND zu folgendem Ausdruck verknüpft werden:

(a v ~b v ~c) Ç (~a v b v ~c) Ç (~a v ~b v ~c).

Im ersten Schritt wird auf die ersten beiden Terme das Distributivgesetz angewendet und man erhält einen Ausdruck, der zur besseren Lesbarkeit geklammert wurde:

((a Ç ~a) v (~b Ç ~a) v (c Ç ~a) v (a Ç b) v (~b Ç b) v
(~c Ç b) v (a Ç ~c) v (~b Ç ~c) v (~c Ç ~c)) Ç (~a v ~b v ~c).

Nach Vereinfachung der UND-Terme und der weiteren Anwendung des Distributivgesetzes erhält man folgenden Ausdruck:

(~a Ç ~b) v (~c Ç ~a) v (~a Ç ~b Ç ~c) v (~a Ç b Ç ~c) v
(a Ç ~c Ç ~b) v (~b Ç ~c) v (a Ç b Ç ~c) v (b Ç ~c) v (a Ç ~c) v ~c.

Durch weitere Anwendung des Distributivgesetzes kann man den obigen Ausdruck umformen in

(~a Ç ~b) v (~c Ç ~a) v (~b Ç ~c) v (b Ç ~c) v ~c

und weiter in

(~a Ç ~b) v (~c Ç ~a) v ~c,

was sich weiter vereinfachen lässt zu

(~a Ç ~b) v ~c.

Durch Anwendung der DeMorgan-Regel kann man diesen Ausdruck weiter in

~((a v b) Ç c)

umwandeln. Dieser nun recht einfache Term lässt sich durch zwei Gatter darstellen (s. Abb. ORNAND). Zur Kontrolle sollte man für die gefundene logische Schaltung die Wahrheitstafel konstruieren und mit der Wahrheitstafel der Problemstellung vergleichen. Beide Tafeln müssen übereinstimmen.

Logische Funktion aus OR und NAND

Die gefundene Schaltung besteht also aus zwei Gattern, einem OR-Gatter und einem NAND-Gatter. Man benötigt zum Aufbau dieser Schaltung zwei ICs (z.B. 7432 und 7400). Möchte man den Bauteilaufwand noch weiter reduzieren, so kann man versuchen, das OR-Gatter durch eine entsprechende Kombination von NAND-Gattern zu konstruieren. Führt man dies bei dieser Schaltung durch, so kommt man auf folgende logisch äquivalente Schaltung:

Logische Funktion aus NAND-Gattern

Man sieht, dass nun zum Aufbau dieser Schaltung mehr Gatter Verwendung finden, diese jedoch alle vom gleichen Typ sind. Dadurch kann sich, wie in unserem Fall trotz der Erhöhung der Gatterzahl eine Erniedrigung der Zahl der Bauelemente ergeben. Die vier NAND-Gatter sind alle auf einem Baustein enthalten. Ein Nachteil dieser logisch äquivalenten Schaltung ist die erhöhte Durchlaufzeit des Signals, die in diesem Beispiel (bei Verwendung von LS-Bausteinen) von 25 ns auf 30 ns steigt.

Der oben beschriebene Weg zur Synthese einer logischen Funktion kann für eine größere Zahl von Eingangsvariablen relativ aufwendig werden. Verfügt man über kein Computerprogramm zur Vereinfachung logischer Ausdrücke (siehe auch C. Schneider [image] ), so kann man auch die graphische Methode verwenden.

Last Update: 2005-Okt-08


Karnaugh-Veitch Diagramme

Wie bereits erwähnt, kann man aus den Grundelementen UND, ODER und NICHT jeden beliebigen anderen logischen Ausdruck zusammenstellen. Wir haben des weiteren gesehen, wie man aus einer beliebigen Wahrheitstafel zu einer logischen Funktion kommt. Angesichts der doch relativ aufwendigen und vor allem fehleranfälligen Methode der Vereinfachung mit Hilfe der Boole'schen Algebra stellt sich jedoch die Frage, ob es nicht einfachere Methoden gibt, eine möglichst kompakte logische Funktion zu bestimmen. Eine dieser Methoden beruht auf einer graphischen Darstellung der Wahrheitstafel und heißt Karnaugh-Veitch-Diagramm (KV-Diagramm).

Im KV-Diagramm wird die Wahrheitstafel nur in etwas veränderter Form aufgetragen. Das Diagramm hat die Form eines Schachbrettes, wobei jedes Feld des Schachbrettes eine hexadezimale Nummer trägt, die der Bitkombination der Wahrheitstafel entspricht. Die Felder sind so angeordnet, dass sich jedes benachbarte Feld nur durch jeweils eine Variable unterscheidet. Je nachdem, wieviele Eingangsvariablen vorhanden sind, ist das KV-Diagramm unterschiedlich groß. Die Grenzen für 2 bis 6 Eingangsvariablen sind in folgender Abbildung mit stärkeren Linien markiert.

Die Verbindung zwischen KV-Diagramm und Wahrheitstafel ergibt sich wie folgt: Jede Eingangsvariable wird mit einem Buchstaben, beginnend mit a, von rechts nach links benannt. Jede Zeile der Wahrheitstafel entspricht nun jenem Feld des KV-Diagramms, dessen hexadezimale Nummer der Bitkombination der Eingangsvariablen entspricht.

Karnaugh-Veitch-Diagramm für maximal 6 Variable

Die Anwendung des KV-Diagramms zur Reduktion der logischen Gleichung geschieht nun so:

  1. Für jede Zeile der Wahrheitstafel, die als Ausgangsgröße eine Eins enthält, wird im KV-Diagramm jenes Feld angekreuzt, dass die Nummer trägt, die sich aus den Eingangsvariablen ergibt. Zeilen der Wahrheitstafel, die als Ausgangsgröße eine Null enthalten, bleiben unberücksichtigt.
  2. Es werden die angekreuzten Felder zu zusammenhängenden Blöcken zusammengefasst, wobei die Zahl der Felder eine Potenz von zwei sein muss (2, 4, 8, 16, 32, ...). Dabei muss man sich das KV-Diagramm an den Seiten zusammenhängend vorstellen, das heißt, ein Feld an einer Diagrammgrenze ist zu einem Feld an der gegenüberliegenden Grenze benachbart. Beim Zusammenfassen von Blöcken kann es vorkommen, dass zwei Blöcke sich gegenseitig überdecken. Generell sollte man möglichst große und möglichst wenige Blöcke finden, auch wenn sich diese zum Großteil überlagern.
  3. Für jeden dieser Blöcke (dies gilt auch für 'Blöcke', die nur aus einem Feld bestehen) werden nun die logischen Ausdrücke wie folgt ermittelt: Jene Variablen, die für diesen Block sowohl Null als auch Eins sind, werden eliminiert. Die restlichen Variablen werden mit UND zu einem Ausdruck verknüpft, wobei Variablen, deren Wert in der Wahrheitstafel mit Null angegeben ist, invertiert werden müssen, Variablen, die mit Eins angegeben sind, bleiben unverändert.
  4. Die logischen Ausdrücke der einzelnen Blöcke werden nun mit ODER zum Gesamtausdruck vereinigt. Dieser logische Ausdruck entspricht nun der Wahrheitstafel und besteht aus einer minimalen Anzahl von Termen.
  5. Eventuell kann man durch Anwendung der Boole'schen Algebra für die konkrete Schaltungsrealisierung noch günstigere Ausdrücke erzeugen.

Ein Beispiel soll die eben geschilderte Vorgangsweise verdeutlichen: Es soll eine Schaltung konstruiert werden, deren Funktion der unten abgebilteten Wahrheitstafel entspricht. Es wird dazu im ersten Schritt für jede Zeile, die in der Ausgangsspalte der Wahrheitstafel eine Eins enthält, das entsprechenden Feld des KV-Diagramms angekreuzt (Felder 1, 6, 7, 9, E, und F). Dann werden möglichst große Blöcke gebildet. Für unser Beispiel ergeben sich zwei Blöcke, einer mit vier Feldern und einer mit zwei Feldern. Für diese Blöcke ergeben sich folgende logische Ausdrücke:

b Ç c und a Ç ~b Ç ~c.

Diese werden im letzten Schritt zum Gesamtausdruck

b Ç c v a Ç ~b Ç ~c

zusammengefasst. Man sieht, dass die Eingangsvariable d keinen Einfluss auf die Ausgangsvariable hat und in der Schaltung die Signalleitung d weggelassen werden kann (außer sie wird für andere Zwecke benötigt).

Hinweis: Tritt bei der Vereinfachung eines logischen Ausdrucks (wie oben) der Fall auf, dass eine Eingangsvariable eliminiert wird, so wurde die zugrundeliegende Schaltung nicht richtig verstanden. Das Schaltungskonzept sollte dann noch einmal überprüft werden.
Beispiel für Karnaugh-Veitch-Diagramm

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] Zahlensysteme
Index
Siehe auch: Gleitkommazahlen, Ganze Zahlen und Zweier-Komplement

Zahlensysteme

Im dezimalen Zahlensystem wird jede Zahl durch n Stellen dargestellt, wobei jeder Stelle eine bestimmte 'Wertigkeit' zukommt, die von rechts nach links jeweils mit der Potenz von 10 steigt. Man kann also z.B. die Zahl 3428 auch explizit hinschreiben als 3x103 + 4x102 + 2x101 + 8x100. Entsprechend verfährt man im binären Zahlensystem, mit dem Unterschied, dass es nur zwei Ziffern gibt und die Wertigkeit einer Stelle eine Potenz von zwei ist. Da die beiden äußeren Bits einer binären Zahl eine besondere Bedeutung besitzen, werden sie oft auch mit speziellen Abkürzungen bezeichnet: MSB (most significant bit) für das linke Bit, das den höchsten Stellenwert besitzt und LSB (least significant bit) für das rechte Bit, das den niedrigsten Stellenwert besitzt.

Beispiel: Die binäre Zahl 1011001 entspricht explizit geschrieben dem Ausdruck

1x26 + 0x25 + 1x25+ 1x23 + 0x22 + 0x21 + 1x20,

was der Dezimalzahl 89 entspricht.

Für das hexadezimale Zahlensystem gilt dasselbe, jedoch gibt es 16 Ziffern und als Wertigkeit wird die Potenz von 16 verwendet. Zur Darstellung der 16 Ziffern werden die Symbole 0-9 und A-F verwendet. Das hexadezimale System wird in der Mikroprozessortechnik sehr viel verwendet, da sich aus einer hexadezimalen Zahl mit ein wenig Übung sehr leicht die binäre Darstellung (und umgekehrt) bilden lässt. Die folgende Tabelle gibt die Zusammenhänge zwischen dezimalem, binärem und hexadezimalem Zahlensystem wieder.

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] Ganze Zahlen und Zweierkomplement
Index
Siehe auch: Datencodes bei AD- und DA-Wandlern, BCD-codierte Zahlen, Gleitkommazahlen, Zahlensysteme

Ganze Zahlen und Zweier-Komplement

Je nachdem, wieviele Bits man zur Darstellung ganzer Zahlen verwendet, kann man einen unterschiedlichen Bereich von ganzen Zahlen darstellen. Zweckmäßigerweise wird man 16 oder 32 Bits verwenden. Zur Darstellung negativer Zahlen gibt es zwei Möglichkeiten: Entweder man reserviert ein Bit zur Darstellung des Vorzeichens oder man verwendet die sogenannte Zweierkomplement-Darstellung. Dabei wird für negative Zahlen die binäre Darstellung des positven Zahlenwertes bitweise invertiert und dann 1 addiert. Dies hat den Vorteil, dass man dann ohne Einschränkung binär addieren und subtrahieren kann. Die Zweierkomplement-Darstellung ist die am häufigsten verwendete Darstellungsart. Für spezielle Anwendungsfälle werden auch noch andere Darstellungen eingesetzt (vgl. auch AD-Wandler).

Beispiel:

Die Dezimalzahl 2318 wird in binärer Form durch das Bitmuster 0000100100001110 dargestellt. -2318 entsteht durch bitweise Inversion und Addition von 1:

 | 0000100100001110 | 2318
Inversion | 1111011011110001 |
Addition von 1 | +0000000000000001 |
 | =1111011011110010 | = -2318

Durch erneute Bildung des Zweierkomplements erhält man wieder die positive Zahl:

 | 1111011011110010 | -2318
Inversion | 0000100100001101 |
Addition von 1 | +0000000000000001 |
 | =0000100100001110 | = 2318

Last Update: 2005-Okt-11


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] Gleitkommazahlen
Index
Siehe auch: Ganze Zahlen und Zweier-Komplement, Zahlensysteme

Gleitkommazahlen

Für die binäre Darstellung von Gleitkommazahlen gibt es einen IEEE-Standard (IEEE P754); die meisten Arithmetik-Prozessoren und Gleitkomma-Softwarepakete arbeiten damit. In diesem Standard sind zwei Formate definiert, die unterschiedliche Genauigkeit und einen unterschiedlichen Wertebereich zulassen (einfache und doppelte Genauigkeit; single und double precision). Diese beiden Formate sind als 32-Bit-Zahl bzw. 64-Bit-Zahl definiert. Das 32-Bit-Format ist ein Kompromiss zwischen Rechengeschwindigkeit und Genauigkeit (6 Dezimalstellen) zugunsten der Ausführungsgeschwindigkeit, während das 64-Bit-Format eine Genauigkeit von etwa 17 Dezimalstellen ermöglicht.

Neben diesen beiden dem Benutzer zugänglichen Formaten, wird vom IEEE-Standard zur Berechnung von Zwischenergebnissen eine noch höhere Genauigkeit (extended precision) gefordert, um Rundungsfehler zu verhindern. Dieses Format ist jedoch nicht spezifiziert - es wird dem Anwender überlassen ein geeignetes Format zu verwenden. Intel und Motorola verwenden für ihre Arithmetikprozessoren ein 80-Bit-Format.

Nachstehende Abbildung zeigt die Spezifikation der Formate für single und double precision. Jede Gleitkommazahl nach dem IEEE-Standard besteht aus einer binär dargestellten vorzeichenlosen Mantisse, einem binären Exponenten und einem Vorzeichenbit.
Gleitkommadarstellung nach IEEE P754

Das Vorzeichenbit ist null bei einer positiven Zahl, eins bei einer negativen. Der Exponent ist eine binäre, ganze, positive Zahl. Um dennoch Zahlen mit negativem Exponenten darstellen zu können, wird zum Exponenten ein fixer Wert (Offset oder Bias) addiert, der genau die Hälfte des Wertebereichs des Exponenten ausmacht.

Die Mantisse der Gleitkommazahl wird immer normiert dargestellt, d.h. dass das erste Bit der Mantisse immer gleich eins ist. Ein Beispiel soll das verdeutlichen:

Beispiel

Ist eine Zahl vor der Normalisierung mit

0.00010110110110 (Exp. = 0)

angegeben, so wird sie nach der Normalisierung durch

1.0110110110000 (Exp. = -4)

dargestellt. Es wird also die Mantisse solange nach links geschoben, bis das erste Bit vor dem Komma gleich eins ist. Der Exponent wird bei jedem Schritt um eins erniedrigt. Bei Zahlen die größer gleich zwei sind geschieht dasselbe in die umgekehrte Richtung: Die Mantisse wird nach rechts geschoben und der Exponent jeweils um eins erhöht.

Die Forderung, dass Gleitkommazahlen nach dem IEEE-Standard immer normalisiert sein müssen, ermöglicht es, das erste Bit beim Speichern einfach wegzulassen, da es ohnehin immer gleich eins sein muss. Dadurch gewinnt man für die Genauigkeit der Darstellung der Mantisse ein Bit. Der Wert einer Gleitkommazahl nach IEEE-Format ergibt sich also zu

(-1)Vorzeichen x Mantisse x 2Exponent-Offset.

Die Zahl Null wird durch Vorzeichen=0, Exponent=0 und Mantisse=0 dargestellt.

Last Update: 2005-Okt-11


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] BCD-codierte Zahlen
Index
Siehe auch: Gray-Codierung, Datencodes bei AD- und DA-Wandlern, Ganze Zahlen und Zweier-Komplement

BCD-codierte Zahlen

Die Gleitkommadarstellung hat trotz der vielen Vorteile einen Nachteil, der sich vor allem bei Programmen in der Finanzwelt nachteilig auswirkt: Durch die begrenzte Genauigkeit kommt es zu Rundungsfehlern, die z.B. bei Buchhaltungen nicht tolerierbar sind. Abhilfe schafft hier die sogenannte BCD-Codierung (BCD = binary coded decimal). Dabei wird die entsprechende Dezimalzahl nicht ins binäre System umcodiert, sondern jede Ziffer wird binär angeschrieben. Da man pro Ziffer (0-9) vier Bit benötigt, können in ein Byte zwei Ziffern codiert werden.

Die Rechenoperationen mit BCD-Zahlen sind für den Mikroprozessor sehr viel aufwendiger als binäre Operationen, wodurch die Verarbeitungsgeschwindigkeit drastisch sinkt.

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] Gray-Codierung
Index
Siehe auch: BCD-codierte Zahlen, Experiment: Aufbau eines Gray-Codierers

Gray-Codierung

Für manche Anwendungen (z.B. Winkelresolver) ist es notwendig, dass sich die Datencodes von zwei benachbarten Zahlen jeweils in genau einem und nur in einem Bit unterscheiden. Diese Forderung erfüllt der Gray-Code. Er wird durch Verknüpfung der einzelnen Bits des Binärcodes mit Hilfe von XOR-Gattern erzeugt. Die folgende Tabelle gibt den Gray-Code für die Zahlen 0-15 wieder.

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Digitale Zahlendarstellung [image] Buchstaben und Zeichenketten
Index
Siehe auch: ASCII-, ANSI- und EBCDIC-Code

Buchstaben und Zeichenketten

Zur binären Darstellung von Buchstaben ordnet man einem Muster von üblicherweise sieben oder acht Bit jeweils einen Buchstaben zu. Von den bekannten Codes (Baudot, EBCDIC und ASCII) wird im Mikrocomputerbereich hauptsächlich der ASCII-Zeichensatz (ASCII = American Standard of Information Interchange) verwendet.

Klicken Sie auf das Bild oben um die Simulation zu starten. Sie können mit unterschiedlichen Signalformen und verschiedenen Abtastraten experimentieren. Auf der rechten Seite wird das jeweils korrespondierende Fourierspektrum dargestellt.

Der ASCII-Zeichensatz ist ein 8-Bit-Code mit 256 Zeichen (siehe Anhang), ebenso der EBCDIC-Zeichensatz. Dieser wird hauptsächlich im Bereich der IBM-Mainframes verwendet. Der Baudot-Code ist obsolet; er ist ein 5-Bit-Code und wurde früher für Fernschreiber verwendet.

Möchte man zusammengehörige Zeichenketten (strings) speichern, so werden im wesentlichen zwei Verfahren angewendet. Das eine speichert einen String in der Reihenfolge der Buchstaben ab. Das Ende des Strings wird durch eine binäre 00 gekennzeichnet (oder durch ein anderes, sonst nicht verwendetes Zeichen). Das zweite Verfahren speichert die Zahl der folgenden Zeichen im ersten Byte des Strings ab.

Beispiel: Der Satz 'Das ist ein Haus' wird wie folgt abgespeichert:

Last Update: 2005-Okt-29


TTL

Die Bezeichnung TTL ist eine Abkürzung für 'Transistor-Transistor-Logic'. Bei der TTL-Bausteinfamilie werden als aktive Elemente nur Transistoren verwendet, die im Sättigungsbereich betrieben werden. Die Eingangsstufen weisen meist Mehrfachemitter auf, die Ausgangsstufen werden meist durch Gegentaktschaltungen gebildet. Typische Gatterverzögerungszeiten liegen um 10 ns. Es gibt eine Reihe von Untergruppen der TTL-Familie, die unterschiedlich schnell sind und unterschiedlich viel Strom benötigen. Die wichtigsten Gruppen sind Schottky-TTL (S-TTL) und Low-Power-Schottky-TTL (LS-TTL). Bei diesen Bauelementen liegen Schottky-Dioden parallel zu den Basis-Kollektor-Strecken, was eine Steigerung der Arbeitsgeschwindigkeit bewirkt. Die LS-TTL-Gruppe ist die am häufigsten eingesetzte Variante der TTL-Familie.

Die notwendigen Eingangsströme und die maximal möglichen Ausgangsströme werden nicht in mA angegeben, sondern in 'Unit-Loads'. Die Unit-Load ist für LOW-Pegel und HIGH-Pegel unterschiedlich definiert und beträgt für den L-Pegel 1.6 mA und für den H-Pegel 40 uA. Durch dieses Konzept ist es möglich die Stromaufnahme eines Eingangs, bzw. die Belastungsfähigkeit eines Ausgangs, relativ als Eingangslastfaktor (Fan-In) bzw. als Ausgangslastfaktor (Fan-Out) anzugeben. Die typischen Werte für Fan-In und Fan-Out hängen von der Bausteinfamilie ab und liegen im Bereich zwischen 10 und 50.

Open-Collector Ausgang

Für manche schaltungstechnischen Probleme ist der in TTL-Schaltungen vorhandene Ausgangstreiber nachteilig, da er an die vorgegebenen Spannungspegel gebunden ist und auch nicht mit anderen Ausgängen parallel geschaltet werden kann. Daher hat man für die wichtigsten Gatter auch Bausteine geschaffen, deren Ausgangstransistoren einen offenen Kollektor besitzen. Diese Bausteine dürfen parallel geschaltet werden und können auch Spannungspegel, die größer sind als die bei TTL-Familien definierten Werte (bis zu 30 V), schalten. Die Parallelschaltung von mehreren Bausteinen mit offenem Kollektor entspricht einem logischen UND, man nennt dies auch 'verdrahtetes UND' (wired AND). Das wired AND ist von großem Vorteil, wenn viele Ausgänge durch ein logisches UND verknüpft werden sollen.

Open-Collector-Ausgänge benötigen zur korrekten Funktion einen Pull-Up-Widerstand, der den jeweiligen Ausgang mit der Versorgungsspannung verbindet (typ. 1 kW). Die Anstiegszeiten von Open Collector-Ausgängen sind länger und hängen vom Pull-Up-Widerstand ab.

Tri-State Ausgang

In Bussystemen, wo mehrere Ausgänge auf einer Signalleitung liegen, ist die Verwendung von sogenannten Tri-State-Ausgängen unumgänglich. Man könnte zwar auch Open-Collector-Ausgänge verwenden, diese sind jedoch für Bussysteme zu langsam. Tri-State-Ausgänge weisen hingegen die normale Arbeitsgeschwindigkeit von TTL-Ausgängen auf.

Ein Tri-State-Ausgang kann über eine Steuerleitung in den hochohmigen Zustand versetzt werden, so dass er keinen Einfluss mehr auf die angeschlossene Signalleitung hat. Im eingeschalteten Zustand verhält er sich wie ein normaler TTL-Ausgang. Wenn man nun Vorkehrungen trifft, dass zu einem bestimmten Zeitpunkt immer nur ein Tri-State-Ausgang eingeschaltet wird, so kann man mehrere Ausgänge parallel schalten.

Last Update: 2005-Okt-08


Emitter Coupled Logic

ECL ist die Abkürzung für 'Emitter Coupled Logic' und bezeichnet eine Bauelement-Familie, die einerseits die kürzesten Gatterverzögerungszeiten bietet, andererseits aber auch die größte Verlustleistung aufweist. Ein ECL-Gatter arbeitet mit einem Differenzverstärker als Eingangsstufe, wobei die Signalpegel für LOW (-1.7 V) und HIGH (-0.9 V) so gewählt sind, dass die Transistoren nie in die Sättigung gelangen. Dies verkürzt ähnlich wie bei der Schottky-TTL-Technologie die Schaltzeiten der Transistoren. Darüber hinaus sorgt der niedrige Signalpegel von nur 0.8 V dafür, dass unvermeidliche Schaltkapazitäten schnell umgeladen werden.

Die Ausgänge von ECL-Schaltungen sind sehr niederohmig und benötigen einen externen Widerstand gegen die negative Versorgungsspannung. Dieser Widerstand verbraucht zusätzlich Energie, so dass die Verlustleistung eines ECL-Gatters in der Größenordnung von 35 bis 50 mW liegt.

Vorteile von ECL-Schaltungen:

  • kürzeste Gatterverzögerungszeiten
  • Stromaufnahme unabhängig von Schaltzustand
  • symmetrische Ausgänge für störsichere Signalübertragung

Nachteile:

  • hohe Verlustleistung
  • externe Ausgangswiderstände
  • negative Versorgungsspannung
  • Kombination mit anderen Logik-Familien umständlich

Last Update: 2005-Okt-08


CMOS

CMOS (Complementary MOS) Bausteine zeichnen sich durch sehr niedrige Stromaufnahme auf. Die Schaltungen sind aus komplementären, selbstsperrenden MOSFETs aufgebaut, deren Schwellenspannungen bei ca. 1.5 V liegen. Die folgende Abbildung zeigt zur Verdeutlichung den internen Aufbau eines Inverters. Die beiden Inverter liegen in Serie zwischen Versorgungsspannung und Masse, die beiden Gates sind miteinander verbunden.

Interner Aufbau eines CMOS-Inverters

Bei einer Versorgungsspannung von 5 V ist zumindest ein Transistor immer leitend, der andere dient jeweils als Arbeitswiderstand fürden leitenden Transistor. Aus der Schwellenspannung von 1.5 V ergeben sich einige Konsequenzen für das Verhalten von CMOS-Schaltungen:

  1. Die Betriebsspannung darf nicht unter 3V sinken. Im allgemeinen können CMOS-Schaltungen mit Betriebsspannungen zwischen 3 und 15 V betrieben werden. Die maximale Schaltgeschwindigkeit steigt mit der Versorgungsspannung.

  2. Im Bereich zwischen 1.5 V und Vcc-1.5 V leiten beide Transistoren. Dies bedeutet, dass beim Übergang von LOW auf HIGH oder umgekehrt für kurze Zeit ein Querstrom fließt. Da die Stromaufnahme von CMOS-Schaltungen im statischen Betrieb sehr gering ist, wird die Verlustleistung hauptsächlich von diesen Umschaltverlusten bestimmt. Je größer die Zahl der Pegelübergänge pro Sekunde ist, desto höher ist auch die Verlustleistung; die Verlustleistung ist also frequenzabhängig. Als Richtwert gilt, dass CMOS-Schaltungen bei etwa 4 MHz die gleiche Verlustleistung aufweisen wie LS-TTL-Schaltkreise, im statischen Betrieb ist sie jedoch etwa um den Faktor 10000 kleiner.

  3. Die Spannung für den HIGH-Zustand beträgt bei 5 V Versorgungsspannung 3.5 V und ist somit nicht TTL-kompatibel. Ein TTL-Gatter, das definitionsgemäß einen minimalen HIGH-Pegel von 2.4 V aufweist, kann also ein CMOS-Gatter nicht ansteuern (umgekehrt sehr wohl). Als Abhilfe ist bei Kombination von TTL- und CMOS-Gattern ein Pull-up-Widerstand zwischen den Ausgang des TTL-Gatters und der Versorgungsspannung zu schalten.

Die Schaltzeiten von Metal-Gate-CMOS-Schaltungen (4000er-Serie) sind im Vergleich zu TTL-Schaltungen relativ groß (ca. 100 ns), was den Einsatz solcher Gatter in digitale Schaltungen mit typischen Taktfrequenzen von 10-20 MHz unmöglich macht. Eine neuere Entwicklung sind die Silicon-Gate-CMOS-Schaltungen, die zwar nur einen Betriebsspannungsbereich von 3-6 V aufweisen, jedoch eine um den Faktor zehn höhere Schaltgeschwindigkeit besitzen (HCMOS). Eine spezielle Gruppe dieser HCMOS-Familie stellen die HCT-Bauelemente dar, die durch eine spezielle Eingangsschaltung TTL-kompatibel sind.

CMOS-Schaltungen sind sehr empfindlich gegen statische Aufladung. Es sind daher zum Schutz der empfindlichen Gate-Elektroden Dioden integriert, die Überspannungen ableiten sollen.

Die folgende Tabelle gibt einen Überblick zu den wichtigsten Kenngrößen der verschiedenen Bausteinfamilien.

Last Update: 2005-Okt-11


Home [image] Digitaltechnik [image] Lange Signalleitungen
Index
Siehe auch: Experiment: Reflexionen an langen Leitungen, Leitungsabschluss

Lange Signalleitungen

Elekrische Signale breiten sich (im Vakuum) mit Lichtgeschwindigkeit aus, das entspricht etwa 30 cm pro ns. Will man Signale über längere Distanzen (einige Meter) übertragen, so kommt die Laufzeit des Signals in die Größenordnung der Anstiegszeit eines TTL-Signals. Dies führt dann zu Reflexionen, Impulsverzerrungen und gedämpften Schwingungen auf der Leitung, was zu starker Signalverfälschung führen kann. Als Faustregel kann man angeben, dass eine einfache Leitung maximal etwa 10 cm pro ns Anstiegszeit lang sein darf, um das Signal noch akzeptabel übertragen zu können.

Abhilfe bei diesem Problem schafft die Verwendung von Leitungen mit definiertem Wellenwiderstand, wie z.B. Koaxialkabel, verdrillte Leitungen und Microstrip-Leitungen. Diese Leitungen müssen am Ende mit ihrem Wellenwiderstand abgeschlossen sein. Dies verlangt nach Leitungstreibern, die die erforderlichen Ausgangsströme liefern können, da der Wellenwiderstand typisch bei etwa 100 W liegt.

Koaxialkabel wird man für kürzere Distanzen wegen ihrer mechanischen Schwerfälligkeit nur in Ausnahmefällen verwenden. Für einfachere Anwendungsfälle wird man Microstrip-Leitungen oder verdrillte Leitungen verwenden, da diese leicht an herkömmliche Steckerleisten anzuschließen sind.

Microstrip-Leitungen eignen sich gut zur Implementation auf gedruckten Schaltungen. Man führt die Signalleitungen auf der einen Seite der Platine, auf der anderen Seite befindet sich eine auf Bezugspotential (Masse) liegende Fläche. Solche Streifenleiter weisen einen Wellenwiderstand von ca. 100 W auf.

Verdrillte Leitungen können vorzugsweise zur Verbindung zwischen zwei Platinen verwendet werden. Bei etwa 100 Windungen pro Meter hat eine verdrillte Leitung einen Wellenwiderstand von ca. 100 W. Für die Ansteuerung von verdrillten Leitungen sollte man symmetrische Signale verwenden, die am Ende mit Hilfe eines Komparators wieder in unsymmetrische Signale umgewandelt werden. Dies hat den Vorteil, dass Störungen die auf die Leitung von außen eingestrahlt werden, sich gegenseitig aufheben und nur die Gleichtaktaussteuerung des Komparators ausnützen.

Für die Ansteuerung von verdrillten Leitungen gibt es spezielle Leitungstreiber und Empfänger, die ein unsymmetrisches Signal in ein symmetrisches umformen und am Ende wieder in ein TTL-kompatibles Signal bilden (z.B. Am26LS31 und Am26LS32). Die folgende Abbildung zeigt eine mögliche Realisierung einer verdrillten Leitung.

Ansteuerung einer verdrillten Leitung

Last Update: 2005-Okt-11


Leitungsabschluss

CMOS-Bausteine haben üblicherweise eine hohe Eingangsimpedanz (typ. 10 MW) und eine niedrige Ausgangsimpedanz (100 bis 1000 W). Diese Ungleichheit der Impedanzen kann zu Reflexionen von Signalen führen und in der Folge zu Schwingungen, die die Stabilität der digitalen Schaltung verschlechtern.

Für den Fall, dass die Länge der Signalleitung (z.B. die Leiterbahn) größer ist als

l = tr/2tpd

und die Impedanzen extrem ungleich sind, wird ein nahezu gleicher, aber negativer Puls von der Last zur Quelle gespiegelt (tr ... Anstiegszeit des Signals, tpd ..... die Verzögerungszeit der Leitung pro Längeneinheit). Man kann obige Gleichung auch so formulieren: eine Signalreflexion tritt auf, falls die Signalanstiegszeit kleiner als die doppelte Verzögerungszeit der Leitung ist.

Bei bipolaren Bausteinfamilien werden diese Reflexionen durch Klemm- oder Begrenzungsdioden abgefangen, wodurch diese Bausteinfamilien relativ unempfindlich auf Reflexionen sind. Bei CMOS-Bausteinen ist die Situation etwas anders. Um negative Effekte durch "Latch-up" zu vermeiden, wird das Substrat meist auf eine negative Vorspannung gelegt. Zusätzlich müssen Maßnahmen getroffen werden, die solche Reflexionen unterdrücken.

Dazu gibt es im Wesentlichen zwei Möglichkeiten: (1) die Verzögerungszeit auf den Leitungen zu ändern (z.B. durch verdrillte Leitungen), oder (2) die Impedanzen durch Abschluss der Leitung anzupassen. In den meisten Fällen wird aus praktischen Gründen eher die zweite Möglichkeit eingesetzt werden.

Arten der Terminierung

Es gibt drei Typen von Leitungsterminierung, wobei die AC-Terminierung die beste Lösung darstellt:
  • Seriendämpfung
  • Pull-up/Pull-down-Netzwerke
  • AC-Terminierung

Seriendämpfung

Die Seriendämpfung erreicht man, in dem man einen kleinen Widerstand (10 bis 100 W) möglichst nahe an der Signalquelle in die Übertragungsleitung einfügt. Die Idee dahinter ist, dass man den Reflexionsfaktor an der Signalquelle null macht, in dem man durch Einfügen eines Serienwiderstands die (scheinbare) Ausgangsimpedanz der Signalquelle gleich der Leitungsimpedanz macht: Rq + Rs = Z0.

Ein Nachteil der Seriendämpfung besteht darin, dass man die Signallasten ausschließlich am Ende der Leitung anschließen darf. Würde man z.B. ein zusätzliches Bauelement in der Mitte der Leitung anschließen, so würde diese Bauelement nur den halben Spannungspegel des Signals sehen und dadurch nicht korrekt ansprechen (der halbe Spannungspegel ergibt sich aus der Reflexion des Signals an der Last).

Pull-up/Pull-down Netzwerke

Obwohl Pull-up/pull-down-Netzwerke gerade für TTL-Schaltungen sehr beliebt sind, sollte man sie nur im Notfall einzusetzen, da sie ziemlich viel Energie verbrauchen. Die grundlegende Idee hinter diesen Schaltungen ist die Absorption überschüssiger Signalenergie durch Querströme am Ende einer Leitung:

Für TTL-Bauteile, die z.B. Bandkabel treiben müssen, werden Widerstände von R1 = 220 W und R2 = 330 W empfohlen. Die beiden Widerstände weisen zusammen eine Impedanz von ca. 130 W auf, was in etwa der Leitungsimpedanz eines Flachbandkabels entspricht (typ. 150 W).

Ist das Kabel nicht angeschlossen, so ergibt sich Eingang der Last ein Spannungspegel von 3 V. Da die meisten Kontrollsignale einen aktiven logischen Pegel von 0 haben, erzeugt ein nicht angeschlossenes Kabel automatisch ein nicht aktives Eingangssignal.

AC-Terminierung

Die AC-Terminierung ist die beste aller besprochenen Varianten, da sie weder halbe Spannungspegel erzeugt, noch Energie im Ruhezustand verbraucht. Allerdings werden für diese Art der Terminierung zwei Bauelemente benötigt.

Die AC-Terminierung hat darüberhinaus auch noch den Vorteil, dass sie wie ein Tiefpassfilter wirkt und kurze Störimpulse unterdrückt werden. Typischerweise werden für R und C Werte von 47 W und 47 pF genommen (das entspricht bei gedruckten Schaltungen der Unterdrückung von Impulsen, die kürzer als 9 ns sind).

Last Update: 2005-Okt-11


Home [image] Anhang [image] Platinenlayouts [image] Platine DIGMLT
Index
Siehe auch: Universal-Experimentierplatine LINMLT, Platinenlayouts

Platine DIGMLT

Um die Experimente, die in diesem Kapitel beschrieben sind, durchführen zu können, wurde die Multifunktionsplatine DIGMLT entwickelt. Sie enthält außer den drei Sockeln zum Bestücken der für das jeweilige Experiment verwendeten Bausteine ein paar Möglichkeiten, digitale Signale zu erzeugen und diese anzuzeigen.

Um statische digitale Signale erzeugen zu können, wurden acht elektronische Umschalter auf der Platine angebracht, die durch Drücken der entsprechenden Taste zwischen den Zuständen LOW und HIGH umschalten. Der aktuelle Zustand wird durch je eine rote Leuchtdiode angezeigt. Bei HIGH leuchtet diese, bei LOW nicht. Da bei mechanischen Tasten beim Schließen des Kontaktes die Kontaktzunge eine gewisse Zeit zwischen den Zuständen 'geschlossen' und 'offen' hin- und herpendelt ('prellt'), muss man die Tasten entprellen. Bei der vorliegenden Schaltung wurde ein Schmitt-Trigger zum Entprellen der Kontakte verwendet.

Zur Erzeugung dynamischer Signale (z.B. Taktfrequenzen) ist auf der Platine ein einfacher Signalgenerator untergebracht, der ein Rechtecksignal erzeugt, dessen Frequenz mit einem Potentiometer zwischen 2.8 und 14.4 kHz variiert werden kann. Sein Ausgangssignal wird auf einen Teiler geführt, der die Frequenz des Signals in 8 Stufen jeweils halbiert.

Um Zustände von bestimmten Signalleitungen anzeigen zu können, sind auf der Platine acht grüne Leuchtdioden angebracht, die über Treiber angesprochen werden, so dass interessierende Signale direkt an das Leuchtdiodenfeld angeschlossen werden können.

Schaltplan der Experimentierplatine DIGMLT, Teil 1
Schaltplan der Experimentierplatine DIGMLT, Teil 2

Zur Erzeugung von kurzen Impulsen wurde außerdem ein 2-fach-Monoflop auf der Platine untergebracht. Ein Kanal mit einer Impulsbreite von 3.3 æsek kann direkt von anderen Signalen angesteuert werden (reagiert auf die ansteigende Signalflanke). Der zweite Kanal erzeugt einen Impuls von ca. 45 ms beim Drücken einer Taste. Beide Kanäle liefern als Ausgangssignal jeweils einen negativen und einen positiven Impuls.

Die Anschlüsse der Steuerelektronik und aller Sockel sind auf Printstifte geführt, so dass durch Steckverbindungen beliebige Schaltungen aufgebaut werden können. Außerdem sind die Anschlüsse der Steuerelektronik parallel dazu auch auf Printstecker geführt, so dass man leicht mehrere Signale in einem Handgriff anschließen kann. Die Abbildung am Seitenende zeigt den Bestückungsplan der Platine DIGMLT. Für den Aufbau werden folgende Teile verwendet:

IC1,IC2,IC3,IC4 | 74LS74
IC5 | 74HCT245
IC6 | 74LS393
IC7 | LM555
IC8 | 74123
IC9, IC10 | 74LS14
D1-D8 | LED rot, z.B. TLHR 5103
D9-D16 | LED grün, z.B. TLHG 5103
S1, S2 | 16-poliger Sockel
S3 | 20-poliger Sockel
R1-R8,R25 | Widerstand 1k0
R9-R16 | Widerstand 180 W
R17-R24 | Widerstand 390 W
R26, R27 | Widerstand 3k3
R27 | Widerstand 33k
R28, R29, R30 | Widerstand 10k
R31-R38 | Widerstand 470 W
C1-C8,C10,C27 | Kondensator 100 nF
C9 | Tantal-Elko 33 uF
C11 | Kondensator 2n2
C12 | Kondensator 1n0
C13 | Tantal-Elko 15 uF
C14-C26 | Tantal-Elko 10 uF/16 V
1 Platine | DIGMLT
9 Taster | aus/ein
3 Stiftleisten | 2x5-polig
204 Printstifte |
1 Schraubenleiste | 5-polig
1 Potentiometer | 100 k, linear

Für die Anwendung der Platine DIGMLT empfiehlt es sich, eine Reihe von Steckverbindungen herzustellen, und die gängigsten diskreten Bauteile (Widerstände, Kondensatoren, Dioden, Kleinsignal-Transistoren) auch mit solchen Printsteckern zu versehen. Hat man einen entsprechenden Fundus von solchen Steckelementen, so kann man rasch eine Schaltung aufbauen und eine Schaltungsidee leicht überprüfen.

Bestückungsplan der Experimentierplatine DIGMLT

Last Update: 2005-Okt-08


Treiber

Das einfachste Gatter ist der Treiber (oder Puffer). Dieser Baustein wird in Schaltplänen durch folgendes Symbol veranschaulicht:

Schaltsymbol eines Treibers

Der Baustein hat einen Eingang und einen Ausgang und hat 'nur' die Aufgabe, das Eingangssignal unverändert am Ausgang wieder auszugeben. Seine Funktion ist darin begründet, dass er das Ausgangssignal mit vergleichsweise großen Strömen erzeugen kann, so dass entweder viele weitere integrierte Schaltungen an das Signal angeschlossen, oder lange Signalleitungen betrieben werden können. Bei geschickter Konstruktion einer Schaltung kann man jedoch oft auf eigene Treiberbausteine verzichten, da es viele digitale Bauelemente gibt, die schon Treiber mit integriert haben.

Eine erweiterte Funktion eines Treibers, stellt der sogenannte Tri-State-Treiber zur Verfügung. Sein Ausgang kann außer den beiden normalen Arbeitszuständen LOW und HIGH auch hochohmig werden. Der Tri-State-Treiber wird durch folgendes Symbol dargestellt. Je nachdem, ob der Steuereingang invertierend ist, wird die rechte oder die linke Darstellung verwendet.

Schaltsymbol eines Tri-State-Treibers

Meist sind vier bis acht Treiber auf einem Chip untergebracht. Die Steuerleitungen von mehreren Treibern eines Chips sind meist auf einen Eingang zusammengefasst.

Wahrheitstafel eines Tri-State-Treibers

Falls der Select-Eingang des Treibers aktiv ist, verhält sich der Baustein wie ein normaler Treiber; bei inaktivem Select-Eingang (/SEL = HIGH) ist der Ausgang des Treibers hochohmig, also abgeschaltet. Solche Tri-State-Treiber werden überall dort benötigt, wo mehrere Ausgänge auf eine gemeinsame Leitung geschaltet werden sollen (z.B. Busleitungen). Durch eine entsprechende Beschaltung der Select-Eingänge muss dabei sichergestellt werden, dass immer nur ein Ausgang aktiv ist.

Neben den oben erwähnten TTL-Treibern, die meist innerhalb eines digitalen Gerätes eingesetzt werden, existieren aber noch eine Reihe von Treiber-Bausteinen, die neben der Pufferung des Signals auch eine Änderung der Ausgangsspannung vornehmen. Solche Treiber werden eingesetzt um entweder Logikfamilien mit unterschiedlichen Spannungspegeln miteinander zu verbinden (z.B. ECL und TTL), oder um Leitungen für bestimmte Schnittstellen zu treiben (z.B. RS-232).

Beipiele einiger Treibertypen und deren wichtigste Daten

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Gatter [image] Inverter
Index
Siehe auch: Komparator, Gatter: XOR, Experiment: Inverter mit Tri-State-Ausgang, Treiber, Experiment: 8fach-Inverter

Inverter

Dieses Gatter hat auch nur einen Eingang und einen Ausgang. Das Eingangssignal wird invertiert am Ausgang wieder ausgegeben. Meist sind sechs oder acht Inverter auf einem integrierten Schaltkreis untergebracht. Der Inverter wird durch folgendes Schaltbild dargestellt:

Schaltsymbol eines Inverters

Auch der Inverter wird als Tri-State-Version angeboten; für ihn gilt folgende Wahrheitstafel:

Schaltsymbol und Wahrheitstafel eines Tri-State-Inverters

Bei aktivem Select-Eingang (/SEL = LOW) wird das Eingangssignal am Ausgang invertiert ausgegeben, bei inaktivem Select-Eingang wird der Ausgang ausgeschaltet.

Schmitt-Trigger

Eine spezielle Version des Inverters wird mit Eingangshysterese angeboten. Dieser Baustein (z.B. 74LS14) verhält sich wie ein Schmitt-Trigger - die Schaltschwelle für das Umschalten von LOW auf HIGH liegt höher als die Schaltschwelle von HIGH auf LOW. Dieses Verhalten ist besonders dann von Vorteil, wenn ein Signal mit geringer Flankensteilheit in ein schnell ansteigendes Signal umgewandelt werden soll. Ein Beispiel für diesen Fall ist die Entprellung von Tasten:

Schaltkreis zur Tastenentprellung mit Schmitt-Trigger

Parallel zur Taste wird ein Kondensator geschaltet, der beim Schließen der Taste über R1 entladen und beim Öffnen der Taste über R2 wieder aufgeladen wird. Wählt man die Zeitkonstante des RC-Gliedes (R1-C, bzw. R2-C) so, dass sie etwa der Prellzeit der Taste (z.B. 1 ms) entspricht, so wird zwar der Prellvorgang wirksam unterdrückt, jedoch ist der Übergang von LOW auf HIGH oder umgekehrt so langsam, dass die meisten flankengetriggerten, digitalen Schaltungen nicht mehr auf das Signal reagieren. Schaltet man jedoch einen Schmitt-Trigger nach, so erzeugt dieser aus den langsamen Schaltflanken wieder ein Signal mit schneller Anstiegszeit (typ. 10 ns):

Spannungsverläufe am Eingang und am Ausgang des Schmitt-Triggers

Die folgende Tabelle gibt ein paar Beispiele von Invertern:

Typ | Techn. | G/IC | td[ns] | Bemerkungen
74LS04 | LS-TTL | 6 | 10 |
74LS05 | LS-TTL | 6 | 22 | open collector
7406 | TTL | 6 | 23 | OC für 30 V
74LS14 | LS-TTL | 6 | 22 | Schmitt-Trigger
74LS240 | LS-TTL | 8 | 18 | 3S-Treiber
74LS242 | LS-TTL | 4 | 18 | Bus-Transceiver
74LS254 | LS-TTL | 8 | 18 | 3S-Transceiver
74LS540 | LS-TTL | 8 | 18 | 3S-Treiber
CD4009 | CMOS | 6 | 100 |
CD4049 | CMOS | 6 | 85 |
CD4069 | CMOS | 6 | 90 |
74HC04 | HCMOS | 6 | 8 |
74HC245 | HCMOS | 8 | 15 | Treiber
G/IC .... Gatter pro IC; td .... Verzögerungszeit

Last Update: 2005-Okt-17


Gatter: AND

Dieses Gatter liefert am Ausgang ein Signal das dem logischen UND der Eingangssignale entspricht. Je nachdem wieviele Eingänge ein Gatter hat, sind zwischen einem und vier Gatter pro IC enthalten.

Schaltsymbol eines UND-Gatters

Die folgende Wahrheitstafel zeigt das Verhalten des Ausgangs eines UND-Gatters mit drei Eingängen. Der Ausgang ist nur auf HIGH-Pegel, wenn alle Eingänge auf HIGH sind. Der Leser möge dieses Verhalten durch ein Experiment mit Hilfe der Platine DIGMLT nachprüfen.

IN1 | IN2 | IN3 | OUT
0 | 0 | 0 | 0
0 | 0 | 1 | 0
0 | 1 | 0 | 0
0 | 1 | 1 | 0
1 | 0 | 0 | 0
1 | 0 | 1 | 0
1 | 1 | 0 | 0
1 | 1 | 1 | 1

In der unten stehenden Tabelle sind einige kommerziell erhältliche UND-Gatter aufgeführt.

Last Update: 2005-Okt-11


Gatter: NAND

Dieses Gatter stellt eine Kombination aus einem UND-Gatter und einem nachfolgenden Inverter dar. Es wird im Englischen als NAND (NOT-AND) bezeichnet und ist ein sehr oft verwendetes Gatter, da mit diesem Gattertyp alle anderen Gatter leicht nachgebildet werden können.

Schaltsymbol eines NAND-Gatters

Die folgende Wahrheitstafel zeigt das Verhalten des Ausgangs eines NAND-GAtters mit zwei Eingängen. Der Ausgang ist nur auf LOW-Pegel, wenn beide Eingänge auf HIGH sind.

IN1 | IN2 | OUT
0 | 0 | 1
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

In der folgenden Tabelle sind ein paar NAND-Gatter aufgeführt.

Last Update: 2005-Okt-08


Gatter: OR

Das ODER-Gatter liefert am Ausgang ein Signal das dem logischen ODER der Eingangssignale entspricht. Die folgende Wahrheitstafel zeigt das Verhalten des Ausgangs eines ODER-Gatters mit zwei Eingängen. Der Ausgang ist nur auf LOW-Pegel, wenn beide Eingänge auf LOW sind. Der Leser möge dieses Verhalten durch ein Experiment mit Hilfe der Platine DIGMLT nachprüfen.

Schaltsymbol eines ODER-Gatters

Die folgende Wahrheitstafel zeigt das Verhalten des Ausgangs eines ODER-Gatters mit zwei Eingängen. Der Ausgang ist auf HIGH-Pegel, wenn mindestens ein Eingang auf HIGH ist.

In der folgenden Tabelle sind ein paar ODER-Gatter aufgeführt.

Last Update: 2005-Okt-08


Gatter: NOR

Dieses Gatter stellt eine Kombination aus einem ODER-Gatter und einem nachfolgenden Inverter dar. Es wird im Englischen als NOR (NOT-OR) bezeichnet.

Schaltsymbol eines NOR-Gatters

Die folgende Wahrheitstafel zeigt das Verhalten des Ausgangs eines NOR-Gatters mit zwei Eingängen. Der Ausgang ist auf LOW-Pegel, wenn mindestens einer der beide Eingänge auf HIGH ist.

IN1 | IN2 | OUT
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 0

In der folgenden Tabelle sind ein paar NOR-Gatter aufgeführt.

Typ | Techn. | G/IC | td [ns] | Bemerkungen
74LS02 | TTL | 4 | 10 |
74LS27 | TTL | 3 | 13 | 3 Eingänge
74LS33 | TTL | 4 | 22 | open collector
74LS260 | TTL | 2 | 12 | 5 Eingänge
74HC02 | HCMOS | 4 | 8 |
74HC27 | HCMOS | 3 | 8 | 3 Eingänge
CD4000 | CMOS | 2 | 70 | + Inverter
CD4001 | CMOS | 4 | 65 |
CD4002 | CMOS | 2 | 65 | 4 Eingänge
G/IC .... Gatter pro IC td .... Verzögerungszeit

Last Update: 2005-Okt-08


Gatter: XOR

Das Exklusiv-Oder ist eine interessante logische Funktion, die zwei Eingangssignale vergleicht. Die Ungleichheit der Eingangssignale wird am Ausgang durch ein logisches HIGH angezeigt.

Schaltsymbol eines XOR-Gatters

Die unten angeführte Wahrheitstafel zeigt dieses Verhalten für ein Gatter mit zwei Eingängen.

Exklusiv-Oder-Gatter werden aber nicht nur zum Vergleich von logischen Signalen herangezogen, sie können auch sehr effizient zur Addition von binären Zahlen, zur Berechnung der Parität oder als Codewandler zwischen binärer Darstellung und Gray-Codierung verwendet werden. Die Funktion des XOR kann mit Hilfe von zwei AND-, zwei NOT- und einem OR-Gatter nachgebildet werden. Da jedoch XOR-Gatter auch als fertige SSI-Bausteine (z.B. 7486) erhältlich sind, wird man nur selten zu der Konstruktion aus den Grundgattern greifen. In der folgenden Tabelle sind ein paar XOR-Gatter aufgeführt.

Typ | Techn. | G/IC | td [ns] | Bemerkungen
74LS86 | TTL | 4 | 17 | -
74LS136 | TTL | 4 | 23 | open collector
CD4030 | CMOS | 4 | 100 | -
CD4070 | CMOS | 4 | 110 | -
74HC86 | HCMOS | 4 | 9 | -
G/IC.... Gatter pro IC td .... Verzögerungszeit

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Gatter [image] Gatterübersicht
Index
Siehe auch: Grundlagen der Digitaltechnik, Experiment: Emulation von Gattern

Gatterübersicht

In der folgenden Abbildung seien nochmals die wichtigsten Grundtypen von Gattern zusammengefasst. In der Abbildung sind für jeden Typ das Schaltsymbol, die Wahrheitstafel, ein typischer Vertreter aus der 74er-Serie und eine äquivalente Schaltung aus NAND-Gattern aufgeführt.

Last Update: 2005-Okt-17


CMOS-Gatter als lineare Schaltungen

Viele einfache CMOS-Gatter (z.B. 74C04, 74C00, 74C02) bestehen nur aus wenigen komplementären CMOS-Transistoren, die einen invertierenden Verstärker ohne Gegenkopplung aufbauen. Diese Gatter können in analogen Schaltungen eingesetzt werden, wenn man durch Hinzufügen einer entsprechenden Gegenkopplung die Gesamtverstärkung entsprechend herabsetzt. Ein Schaltbeispiel zeigt die folgende Abbildung. Ein Inverter des Bausteins 74C04 wird mit zwei Widerständen und einem Kondensator beschaltet, um einen invertierenden Wechselspannungs-Verstärker mit der Verstärkung 10 zu erhalten.

CMOS-Gatter als analoger Verstärker

Der Kondensator dient zur Entkopplung der Gleichspannung. Die Bandbreite eines solchen Verstärkers ist von der Versorgungsspannung abhängig und liegt in der Größenordnung 106 bis 107 Hz bei 10 V Versorgungsspannung und Verstärkung=1.

Ein interessanter Anwendungsbereich von linear betriebenen digitalen Gattern ergibt sich bei der Erhöhung des maximal möglichen Ausgangsstroms eines konventionellen Operationsverstärkers. Da viele Operationsverstärker nur geringe Ausgangsströme (ca. 5 mA bei maximaler Ausgangsspannung) liefern können, bietet sich in vielen Fällen der Einsatz von digitalen CMOS-Gattern zur Stromverstärkung an. Da man solche CMOS-Gatter parallel schalten darf, kann mit einem Baustein, der vier Gatter enthält, ein Strom von etwa 50 mA erreicht werden (bei Ausnutzung der durch die Versorgungsspannung begrenzten maximalen Ausgangsspannung). Die Abbildung unten zeigt den Einsatz der Gatter 74C00 und 74C02 zur Stromverstärkung.

CMOS Gatter als Stromverstärker

Last Update: 2005-Okt-08


Digitaler Multiplexer

Oft steht man vor dem Problem, mehrere digitale Signale abwechselnd auf eine Leitung zu legen. Dies kann man durch sogenannte Multiplexer (MUX) erreichen. Einen einfachen aus wenigen Gattern aufgebauten Multiplexer zeigt folgende Abbildung:
Multiplexer aufgebaut aus Gattern

Die beiden Eingangssignale IN1 und IN2 können wahlweise auf den Ausgang OUT gelegt werden, indem die Auswahlleitung SEL entweder auf LOW oder HIGH gelegt wird. Falls an SEL LOW-Pegel liegt, wird das Gatter G2 gesperrt, da an einem seiner Eingänge dauernd LOW-Pegel anliegt und ein logische UND mit LOW immer LOW ergibt. Das Gatter G1 lässt das Eingangssignal unverändert durch, da an seinen Eingängen das Auswahlsignal SEL invertiert anliegt (also HIGH). Die Ausgänge der beiden UND-Gatter werden mit einem ODER verknüpft.

Man kann die Funktionen des oben abgebildeten Multiplexers auch in Form einer Wahrheitstafel darstellen

SEL | IN1 | IN2 | OUT
0 | 0 | 0 | 0
0 | 0 | 1 | 0
0 | 1 | 0 | 1
0 | 1 | 1 | 1
1 | 0 | 0 | 0
1 | 0 | 1 | 1
1 | 1 | 0 | 0
1 | 1 | 1 | 1

Hat man mehr als zwei Eingänge, die auf einen Ausgang geschaltet werden, so benötigt man mehrere Auswahlleitungen, wobei jede Kombination der Select-Leitungen der Auswahl eines Eingangs entspricht.

In der Praxis wird man Multiplexer nie aus einzelnen Gattern aufbauen (oder nur, falls der Aufbau unkritisch ist und noch die nötigen Gatter frei sind), sondern auf integrierte Schaltungen zurückgreifen, die dann auch in Hinblick auf die Verzögerungszeiten optimiert sind. Es gibt eine Menge verschiedener MUX-Typen (Zahl der Eingänge, Art des Ausgangs, Zahl der Multiplexer pro IC, etc.), die folgende Tabelle gibt einen kurzen Überblick auf gebräuchliche Multiplexer:

Typ | Techn. | KZ | td [ns] | Bemerkungen
74150 | TTL | 16-1 | 20 | nur TTL-Version
74LS151 | TTL | 8-1 | 21 |
74LS153 | TTL | 4-1 | 20 | 2-fach
74LS157 | TTL | 2-1 | 14 | 4-fach
74LS158 | TTL | 21- | 13 | 4-fach, invertierend
74LS251 | TTL | 81- | 15 | tri-state
74LS253 | TTL | 4-1 | 20 | 2-fach, tri-state
74LS257 | TTL | 2-1 | 18 | 4-fach, tri-state
74LS258 | TTL | 2-1 | 18 | 4-fach, tri-state
CD4016 | CMOS | 1-1 | 20 | 4-fach analog Schalter
CD4066 | CMOS | 1-1 | 25 | 4-fach analog Schalter
CD4512 | CMOS | 8-1 | 225 | analog MUX
74HC151 | HCMOS | 8-1 | 26 |
74HC253 | HCMOS | 4-1 | 24 | 2-fach
KZ .... Zahl der Kanäle; td .... Verzögerungszeit

Last Update: 2005-Okt-08


Decoder

Der umgekehrte Fall zum Multiplexer liegt beim sogenannten Demultiplexer vor. Dabei wird ein digitales Eingangssignal auf einen von mehreren Ausgängen geschaltet, der mit Auswahlleitungen ausgewählt wird.

Ein Sonderfall eines Demultiplexers ist der Decoder. Er stellt einen Demultiplexer dar, bei dem der Eingang auf einen fixen Wert gelegt worden ist. Dadurch kann man mit den Auswahlleitungen gezielt einen Ausgang vom inaktiven in den aktiven Zustand versetzen. Der Decoder dient hauptsächlich zur Auswahl von mehreren gleichen Bausteinen (z.B. Speicherchips) in Mikrocomputerschaltungen (Decodierung von Adressen). Die folgende Tabelle gibt einen kurzen Überblick zu Decoderbausteinen:

Typ | Techn. | KZ | td [ns] | Bemerkungen
74LS42 | TTL | 4-10 | 27 | BCD adressiert
74LS138 | TTL | 3-8 | 28 |
74LS139 | TTL | 2-4 | 27 |
74154 | TTL | 4-16 | 31 |
74LS155 | TTL | 1-4 | 27 |
74LS156 | TTL | 1-4 | 34 | Open collector
74LS259 | TTL | 1-8 | 30 | adressierbares Latch
74HC154 | HCMOS | 4-16 | 21 |
74HC259 | HCMOS | 1-8 | 18 | adressierbares Latch
CD4514 | CMOS | 4-16 | 550 | aktiv HIGH
CD4515 | CMOS | 4-16 | 550 | aktiv LOW
td .... Verzögerungszeit; KZ .... Zahl der Kanäle

Last Update: 2005-Okt-08


Home [image] Digitaltechnik [image] Flip-Flop
Index
Siehe auch: Zähler, Experiment: Einsatz eines Registers zur Datenspeicherung, Experiment: Aufbau eines RS-Flip-Flops aus NAND-Gattern

Flip-Flop

Verschaltet man zwei NAND-Gatter in der in Abbildung dargestellten Form, so erhält man die einfachste Form eines Flip-Flops. Ein Flip-Flop ist eine Schaltung, die zwei stabile Zustände kennt und die durch Anlegen eines Signals von außen vom einen in den anderen Zustand geschaltet werden kann. Ein Flip-Flop kann also Information (1 Bit) speichern.

RS-Flip-Flop aus zwei NAND-Gattern

Für das oben dargestellte Flip-Flop sei, um seine Funktion zu verstehen, die Wahrheitstafel betrachtet:

/S | /R | Q | /Q
0 | 0 | 1 | 1
0 | 1 | 1 | 0
1 | 0 | 0 | 1
1 | 1 | Q | /Q

Sind beide Eingänge /S und /R (Set und Reset, aktiv LOW) auf HIGH, so ändert sich der Zustand der Ausgänge nicht, es sind sowohl der Zustand (Q=0,/Q=1) als auch (Q=1,/Q=0) erlaubt. Welche der beiden Zustände aktiv ist, hängt von der Vorgeschichte ab. Die Vorgeschichte könnte z.B. ein kurzer Impuls am Eingang /S von HIGH auf LOW und wieder auf HIGH gewesen sein. Dadurch erhalten die Ausgänge den Zustand (Q=1, /Q=0) und dieser Zustand wird beibehalten, solange beide Eingänge auf HIGH-Pegel liegen. Umgekehrt können durch einen kurzen Impuls am Eingang /R die Ausgänge in den Zustand (Q=0, /Q=1) geschaltet werden. Sind beide Eingänge auf LOW, so sind beide Ausgänge auf HIGH. Dieser Zustand ist aber instabil, da beim Wechsel von einem oder beiden Eingangssignalen von LOW auf HIGH die Ausgänge wieder einen der oben besprochenen Zustände aufweisen. Man nennt das gezeigte Flip-Flop auch RS-Flip-Flop.

Das RS-Flip-Flop hat jedoch einen entscheidenden Nachteil: Es behält seinen Zustand nur bis zum nächsten Puls an einem der Eingänge bei. Diese Eigenschaft ist oft unerwünscht, da man beliebige Eingangszustände zu definierten Zeitpunkten übernehmen möchte (zwischendurch muss sich das Eingangssignal ändern dürfen, ohne den Ausgang zu beeinflussen). Dieser Nachteil wird durch das JK-Flip-Flop behoben. Das JK-Flip-Flop verfügt neben den Dateneingängen (J,K) auch noch über einen Takteingang (CK) und meist auch über Set- und Reset-Eingänge (R,S). Die Ausgänge Q und /Q übernehmen den Eingangszustand nun nur mehr bei Erscheinen eines Taktimpulses. Dazwischen kann sich der Eingang beliebig ändern, ohne den Ausgang zu beeinflussen. Ein JK-Flip-Flop wird durch folgendes Schaltbild dargestellt:

JK-Flip-Flop

Eine etwas veränderte, jedoch sehr häufige Spielart eines JK-Flip-Flops ist das D-Flip-Flop. Bei diesem Flip-Flop sind die Eingänge J & K mit einem Inverter verbunden und als ein Eingang (D) herausgeführt:

D-Flip-Flop

Am Eingang D kann entweder 0 oder 1 anliegen; der jeweilige Zustand wird durch einen Impuls an CK in den Ausgang übernommen. Man kann mehrere D-Flip-Flops parallel schalten und erhält damit ein n Bit breites Register (latch), das die Information am Eingang beim Auftreten eines Taktimpulses in den Ausgang übernimmt:

Register aus D-Flip-Flops

Last Update: 2005-Okt-08


Zähler

Verwendet man ein D-Flip-Flop und verbindet seinen invertierten Ausgang /Q mit dem Eingang D,

Teiler aus D-Flip-Flops

so hat das D-Flip-Flop folgendes Verhalten: bei jedem Impuls am Takteingang kippt der Ausgang Q in den jeweils anderen Zustand:

Man erkennt, dass der Ausgang Q seinen Zustand nur halb so oft ändert wie der Eingang CK. Die Frequenz des Eingangssignals wird also durch zwei geteilt. Man kann nun mehrere D-Flip-Flops in dieser Art hintereinanderschalten (s. nächste Abb.) und erhält damit einen mehrstufigen Teiler.

Mehrstufiger Teiler aus D-Flip-Flops

Verfolgt man die Zustände der Ausgänge Q0-Q3, so bekommt man folgende Tabelle:

Q3 | Q2 | Q1 | Q0 | dezimal
0 | 0 | 0 | 0 | 1
0 | 0 | 0 | 1 | 2
0 | 0 | 1 | 0 | 3
0 | 0 | 1 | 1 | 4
0 | 1 | 0 | 0 | 5
0 | 1 | 0 | 1 | 6
0 | 1 | 1 | 0 | 7
0 | 1 | 1 | 1 | 8
1 | 0 | 0 | 0 | 9
1 | 0 | 0 | 1 | 10
1 | 0 | 1 | 0 | 11
1 | 0 | 1 | 1 | 12
1 | 1 | 0 | 0 | 13
1 | 1 | 0 | 1 | 14
1 | 1 | 1 | 0 | 15
1 | 1 | 1 | 1 | 0
0 | 0 | 0 | 0 | 1
0 | 0 | 0 | 1 | 2
... | ... | ... | ... | ...

Fasst man die vier Ausgänge als vier Stellen einer binären Zahl auf, so sieht man, dass der gezeigte Teiler fortlaufend von 0 bis 15 zählt und dann wieder bei 0 beginnt. Man kann nun durch ein paar zusätzliche Gatter diesen Zähler dazu bringen, dass er nur von null bis neun, also dezimal zählt. Dazu wird das binäre Muster von zehn (1010) mit einem NAND-Gatter abgefragt und falls es auftritt, wird der Zähler auf Null zurückgesetzt.

Dezimalzähler durch Rückkopplung

Da der Zähler eine sehr häufig benötigte Komponente darstellt, werden Zähler als integrierte Schaltkreise angeboten. Bei Zählern unterscheidet man zwei Typen: Die synchronen Zähler ändern den Ausgangszustand alle gleichzeitig mit dem Taktsignal, asynchrone Zähler tun dies nicht. Das kann besonders bei Verwendung des Zählers zur Adressierung zu unangenehmen Konsequenzen führen, da die Durchlaufzeit bei langen Flip-Flop-Ketten sehr groß wird. Asynchrone Zähler werden im Englischen auch als 'ripple carry counter' bezeichnet. Die folgende Tabelle gibt eine Übersicht zu verfügbaren Zählern.

Last Update: 2005-Okt-08


Speicher

Speicher kann man nach deren Funktionalität in System- und Massenspeicher unterteilen. Systemspeicher sind als Halbleiterspeicher ausgeführt und müssen einen schnellen und direkten Zugriff des Mikroprozessors auf den Speicherinhalt gewährleisten. Die Größe des Systemspeichers richtet sich nach dem verfügbaren Adressbereich des Prozessors und nach den Erfordernissen der konkreten Anwendung. Sie bewegt sich bei Mikrocomputern zwischen einigen Byte einigen MByte.

Massenspeicher haben eine große Speicherkapazität, sind nicht flüchtig und haben meist eine um einige Größenordnungen langsamere Zugriffszeit als Systemspeicher. Sie sind meist nicht direkt vom Mikroprozessor ansteuerbar, sondern benötigen einen speziellen Kontroller. Die meisten Massenspeicher basieren auf dem magnetischen Speicherprinzip und bieten Speicherkapazitäten zwischen einigen MByte und mehreren hundert GByte.

Last Update: 2005-Okt-17


Halbleiterspeicher

Halbleiterspeicher kann man einteilen in Speicher, die im Computersystem sowohl beschrieben als auch gelesen werden können (Schreib-Lese-Speicher, read/write-memory, R/W), und Speicher, die im Betrieb nur gelesen werden können(Festwertspeicher, read only memory, R/O). Nachstehende Abbildung zeigt eine grobe Systematisierung der Speichertypen.

Einteilung der Halbleiterspeicher

Die verschiedenen Typen von Halbleiterspeichern werden mit Abkürzungen bezeichnet, wobei die Akronyme 'RAM' und 'ROM' besonders häufig vorkommen. Sie bedeuten 'Random Access Memory' (RAM) und 'Read Only Memory' (ROM). Je nach Typ des Bausteins werden diesen Abkürzungen noch ein oder mehrere Buchstaben voran gestellt, um die konkrete Funktion anzugeben (siehe unten).

Jeder Halbleiterspeicher besitzt im Grunde dieselben Anschlüsse zur Ansteuerung: die Adressleitungen zur Adressierung der gewünschten Speicherzelle, eine oder mehrere Datenleitungen, und zwei oder drei Steuerleitungen, die das Bauelement aktivieren und anzeigen, ob Daten geschrieben oder gelesen werden sollen. Bei Festwertspeichern kommen eventuell noch extra Anschlüsse zur Steuerung des Schreibvorganges vor.

Halbleiterspeicher sind üblicherweise in einer Matrix von A x D Bits organisiert, wobei 'A' die Zahl der adressierbaren Speicherplätze angibt und 'D' die Zahl der Bits pro Speicherplatz. A und D sind Potenzen von 2 und liegen für A typischerweise zwischen 210 (1 KBit) und 222 (4 MBit) und für D zwischen 1 und 16. Ist ein Speicher z. B. in der Form 16k x 4 organisiert, so enthält er also 16384 Speicherzellen zu je 4 Bit.

Last Update: 2005-Okt-11


RAM

Die Abkürzung RAM steht für 'Random Access Memory' und bedeutet, dass auf den Inhalt des Speichers, sowohl schreibend als auch lesend in beliebiger Reihenfolge zugegriffen werden kann. RAMs sind Halbleiterspeicher und verlieren ohne besondere Vorkehrungen beim Abschalten der Spannungsversorgung ihren Inhalt. Bei den RAMs unterscheidet man zwischen zwei Bauarten, den statischen und den dynamischen RAMs.

Last Update: 2005-Okt-17


Statische RAMs

Statische RAMs werden auch als 'SRAM' abgekürzt. Sie sind aus Flip-Flops aufgebaut und behalten dadurch ihre Information ohne weitere Vorkehrungen bis zum Ausschalten der Versorgungsspannung. Eine Speicherzelle eines statischen RAMs benötigt vier bis sechs Transistoren und ist daher etwa viermal so groß, wie eine dynamische Speicherzelle (siehe dynamische RAMs).

Die Ansteuerung eines SRAMs geschieht in folgender Weise:

Beim Schreiben wird zuerst die gewünschte Adresse an die Adressleitungen gelegt und dann der Schreibbefehl ausgeführt. Dies verhindert, dass Daten in die falschen Zellen geschrieben werden. Der Schreibvorgang wird durch Aktivierung des Bauteils mit der Steuerleitung 'Chip-Select' eingeleitet. Dann werden die Daten an die Datenleitungen gelegt und ein Schreibimpuls auf der Read-/Write-Leitung abgegeben. Die Daten werden vom Speicher am Ende des Schreibimpulses übernommen:

Schreibzugriff

Beim Lesen wird die gewünschte Adresse angelegt, der Bauteil aktiviert und nach einer bestimmten Zeit (typ. 10-150 ns) gibt das Bauelement die gespeicherten Daten auf den Datenleitungen aus. Die Zeit von der Aktivierung des Chips bis zur Gültigkeit der Daten nennt man Zugriffszeit (siehe auch untenstehende Tabelle):

Lesezugriff

SRAMs die in CMOS-Technologie hergestellt sind, benötigen nur sehr kleine Ruheströme (typ. 100 µA), so dass sich diese Typen von RAMs besonders zur Absicherung von Daten mit Hilfe eines Akkumulators (NC-Akku mit 3.6 V) eignen. Im Falle eines Ausfalls der Versorgungsspannung übernimmt der Akkumulator die Versorgung des RAMs (Datenerhalt einige Wochen). Nachstehende Abbildung zeigt eine einfache Schaltung zur Datensicherung mittels NC-Akku:

Datenerhalt eines SRAMs mittels NC-Akku

Bei anliegender Versorgungsspannung wird der Akku mit einem kleinen Dauerstrom von 1 mA geladen. Beim Ausfall der Versorgungsspannung wird das RAM durch die Diode von der Versorgungsspannung abgekoppelt und vom Akku versorgt. Wichtig für einen langen Datenerhalt ist, dass das RAM bis zu sehr kleinen Spannungen (ca. 2 V) die Daten nicht verliert. Außerdem muss die Write-Leitung über einen Treiber (z.B. 7400, keine LS-Typen !) angeschlossen werden, dessen Ausgang beim Wegfall der Versorgungsspannung hochohmig wird und dann vom Widerstand R1 auf HIGH gezogen werden kann.

Manche Hersteller bieten so genannte Zero-Power-RAM an, die mit Hilfe einer im Gehäuse des ICs integrierten Lithium-Batterie die Daten für 10 Jahre erhalten können (z.B. MK48Z02)

Die folgende Tabelle listet ein paar statische RAMs mit ihren wichtigsten Parametern auf. Besonders hingewiesen sei auf den Unterschied zwischen Betriebs- und Standby-Leistung bei manchen Typen. Unter Standby-Leistung versteht man die aufgenommene Leistung, wenn der Chip nicht selektiert ist. Bei CMOS-RAMs kann ein Unterschied um den Faktor 100000 bestehen.

Typ | Technologie | Speicher-kapazität [bit] | Betriebsleistung [mW] | Standby-Leistung [mW] | Zugriffszeit [ns]
74LS218 | TTL | 32x8 | 230 | 230 | 30
CY7C122-25 | CMOS | 256x4 | 330 | 330 | 25
MBM10422A-7 | ECL | 256x4 | 1040 | 1040 | 7
CY2147-35 | CMOS | 4kx1 | 690 | 140 | 35
i2114AL-1 | NMOS | 1kx4 | 200 | 200 | 100
i2148H-2 | NMOS | 1kx4 | 900 | 150 | 45
HM6116LP2 | CMOS | 2kx8 | 350 | 5 | 120
TMM2016AP10 | NMOS | 2kx8 | 325 | 35 | 100
TMM2018D-45 | NMOS | 2kx8 | 750 | 100 | 45
IMS1423 | NMOS | 16kx1 | 550 | 150 | 35
MBM100480-15 | ECL | 16kx1 | 1200 | 1200 | 15
CY7C164-35 | CMOS | 16kx4 | 550 | 220 | 35
TMM5564PL15 | CMOS | 8kx8 | 27.5 | 0.005 | 150
HM6264LP10 | CMOS | 8kx8 | 500 | 0.005 | 100
TMM2064P12 | NMOS | 8kx8 | 400 | 50 | 120
CY7C186-35 | CMOS | 8kx8 | 825 | 220 | 35
IMS1600-45 | CMOS | 64kx1 | 400 | 45 | 45
TMM5561P70 | CMOS | 64kx1 | 500 | 0.5 | 70
TMM55257PL10 | CMOS | 32kx8 | 27.5 | 0.5 | 100
CXK581000 | CMOS | 128kx8 | 35 | 0.01 | 100

Last Update: 2005-Okt-11


Dynamische RAMs

Im Gegensatz zu statischen RAMs besitzen die dynamischen RAMs (DRAMs) Speicherzellen, die eine regelmäßige Auffrischung der Information benötigen, damit ihr Inhalt nicht verloren geht. Dies bedingt natürlich einen erhöhten Aufwand bei der Ansteuerung der RAMs, hat aber den Vorteil, dass eine Speicherzelle im DRAM nur ein Viertel des Platzes einer statischen Speicherzelle benötigt. Dadurch kann bei etwa gleichem Preis und Stromverbrauch die vierfache Menge an Information pro Chip untergebracht werden.

Dynamische RAMs werden im Multiplexverfahren adressiert, was die Zahl der Adressanschlüsse halbiert, und damit die Größe des ICs entsprechend herabsetzt. Dabei wird die Adressinformation in zwei Schritten eingegeben. Zuerst wird die untere Hälfte der Adresse angelegt und im Chip zwischengespeichert und dann die obere Hälfte. Da die Bits dynamischer Speicher ähnlich einer Matrix angeordnet sind, spricht man von Zeilen und Spalten des Speichers, wobei die Zeilen mit der unteren Hälfte des Adressbusses adressiert werden (row address) und die Spalten mit der oberen Hälfte (column address). Entsprechend dem Multiplexbetrieb gibt es zwei Anschlüsse zur Übergabe der Adressinformation, RAS(row address strobe) und CAS (column address strobe).

Die Speicherzelle eines DRAMs speichert die Information als Ladung in einem kleinen Kondensator, der auf den Chip integriert ist. Falls der Kondensator eine Ladung trägt, entspricht dies einer logischen Eins, wenn er keine Ladung besitzt, entspricht dies einer logischen Null. Die Information im Kondensator wird über einen Transistor ausgelesen. Da dieser Transistor nie ganz 'dicht' für die im Kondensator gespeicherten Ladungsträger ist, kommt es zu einer Selbstentladung des Kondensators und damit zum Verlust der Information. Da die Kapazität des Kondensators sehr klein ist, geht die gespeicherte Information schon nach etwa 2 ms verloren, wenn sie nicht durch eine spezielle Schaltung wieder aufgefrischt wird. Um diese Schaltung zu aktivieren, müssen alle 2 ms alle Zeilenleitungen aktiviert werden.

Da beim normalen Einsatz in Mikroprozessor-Schaltungen nicht gewährleistet ist, dass innerhalb von 2 ms alle Zeilenadressen angesprochen werden, muss durch spezielle Refresh-Controller sichergestellt werden, dass die Auffrischung des Speicherinhalts innerhalb der vorgeschriebenen Zeiten geschieht. Diese Controller fügen während des normalen Betriebs zusätzliche Lesevorgänge ein, die alle Zeilenadressen innerhalb von 2 ms ansprechen. Dieser Vorgang benötigt natürlich eine gewisse Zeit, bei der der Speicher nicht für den Mikroprozessor zur Verfügung steht. Sie ist jedoch vernachlässigbar gering, die Verfügbarkeit reduziert sich um 2 bis 5 %. Manche Mikroprozessoren (z.B. Z80 oderHD64180) haben den Refresh-Controller eingebaut, und bieten daher einen besonders einfachen Anschluss an dynamische RAMs.

Es gibt verschiedene Methoden, den Refresh durchzuführen. Die drei wichtigsten seien kurz beschrieben:

Burst-Refresh | Bei dieser Refresh-Methode wird alle 2 ms der normale Betrieb unterbrochen und der Refresh für alle Speicherzellendurchgeführt. Das blockiert jedoch den Speicher für ca. 40 µs, was in Systemen, die zeitkritische Steuerungen durch führen, nicht akzeptabel ist.
Cycle-Stealing | Beim Cycle-Stealing-Verfahren werden die Refresh-Zugriffe auf 2 ms verteilt, d.h. es wird alle 15 µs auf eine der 128 Zeilenadressen zugegriffen. Während des Refresh-Vorgangs wird der Mikroprozessor durch ein WAIT-Signal für etwa 300 ns angehalten.
Hidden Refresh | Beim Hidden-Refresh wird der Zugriff zum Speicher mit dem Takt des Prozessors so synchronisiert, dass der Refresh-Zyklus nur abläuft, wenn der Prozessor ohnedies nicht auf den Speicherzugreifen kann. Dadurch wird keine Prozessorzeit verschwendet.

Die Ansteuerung von DRAMs geschieht in der folgenden Weise:

Ansteuerung von dynamischen RAMs

Beim Lesen von Information wird zuerst die Zeilenadresse angelegt und mit dem Signal RAS vom Speicherchip in einen internen Zwischenspeicher übernommen. Als nächstes wird die Spaltenadresse angelegt und mit dem Signal CAS vom Chip übernommen. Gleichzeitig mit der fallenden Flanke von CAS wird intern eine Ablaufsteuerung gestartet, die die gesuchte Information an den Datenbus legt. Beim Schreiben funktioniert der Vorgang ähnlich, wobei die einzuschreibenden Daten mit einem Impuls auf der WRITE-Leitung übernommen werden.

Die folgende Tabelle gibt eine Übersicht zu einigen gebräuchlichen DRAMs

Typ | Technologie | Speicher-Kapazität [bit] | Betriebsleistung [mW] | Standby-Leistung [mW] | Zugriffszeit [ns]
4116-15 | NMOS | 16kx1 | 460 | 20 | 150
i2118-12 | NMOS | 16kx1 | 150 | 11 | 120
i2164-15 | NMOS | 64kx1 | 300 | 25 | 150
4164-10 | NMOS | 64kx1 | 200 | 30 | 100
TMS4416-15 | NMOS | 16kx4 | 300 | 30 | 150
TMM41256P-12 | NMOS | 256kx1 | 330 | 28 | 120
i51C256-10 | CMOS | 256kx1 | 185 | 0.3 | 100
TMS4464-15 | NMOS | 64kx4 | 550 | 30 | 150
TMM41464P-12 | NMOS | 64kx4 | 385 | 28 | 120
HM65256-15 | CMOS | 32kx8 | 300 | 7 | 150
TMM411000C10 | NMOS | 1Mx1 | 385 | 22 | 100
TMM511000C10 | CMOS | 1Mx1 | 330 | 5.5 | 100

Last Update: 2005-Okt-11


ROM

Die Bezeichnung ROM hat neben der oben erwähnten allgemeinen Bedeutung auch eine spezielle Bedeutung, mit der eine ganz bestimmte Art von ROMs bezeichnet wird. Zur Verdeutlichung wird diese Art von ROMs auch oft Masken-ROM genannt. In einem Masken-ROM ist die gespeicherte Information durch die Verdrahtung festgelegt, die durch die Fotomaske bei der Herstellung erzeugt wird.

Solche Masken-ROMs können sehr viel Information speichern, sind jedoch für den Einsatz in Geräten mit kleineren Stückzahlen unrentabel, da die Herstellung der Maske teuer ist.

Üblicherweise werden Masken-ROMs dort eingesetzt, wo sehr große Stückzahlen verwendet werden, und die Information die im ROM gespeichert werden soll, sich sicher nicht mehr ändert (z.B. in Zeichengeneratoren o. ä.).

Last Update: 2005-Okt-29


Programmable ROMs

Die Abkürzung 'PROM' steht für 'Programmable Read Only Memory' und bezeichnet Bauelemente, in die einmal Information hineingeschrieben (programmiert) werden kann. Die Programmierung kann nicht rückgängig gemacht werden. Zur Programmierung benötigt man spezielle Programmiergeräte ('PROMMER').

Die Speicherzelle eines PROMs besteht aus einer Schmelzsicherung aus Nickel-Chrom oder polykristallinem Silizium, die bei Bedarf durchgeschmolzen wird. Diese Speicherzellen sind in einer Matrix angeordnet und können durch Anlegen der Adressinformation und der Chip-Select- und Read-Signale gelesen werden.

PROMs besitzen sehr schnelle Antwortzeiten (typ. 15-50 ns), so dass man sie als Ersatz für Gatter verwenden kann. Dazu wird die Wahrheitstabelle einer Schaltung aus Gattern einfach in das PROM geschrieben, wonach sich das PROM wie die Kombination dieser Gatter verhält.

Ein Nachteil von PROMs ist die fehlende Wiederprogrammierbarkeit, was dazu führt, dass man bei Änderung der gewünschten Funktion das PROM wegwerfen muss. Abhilfe schaffen in diesem Fall EPROMs (siehe unten), die aber bis auf wenige(sehr teure) Ausnahmen deutlich langsamer sind. Logische Funktionen können auch durch wiederprogrammierbare Logikbausteine (z.B. GALs) nachgebildet werden.

Die folgende Tabelle gibt eine Übersicht zu einigen gebräuchlichen PROMs.

Typ | Technologie | Speicher-Kapazität [bit] | Verlustleistung [mW] | Zugriffszeit [ns]
DM74S288 | TTL | 32x8 | 625 | 15
MB7117E | TTL | 256x8 | 700 | 45
F10416 | ECL | 256x4 | 780 | 20
DM74S472 | TTL | 512x8 | 775 | 60
i3628A-1 | TTL | 1kx8 | 1000 | 50
TBP28S166 | TTL | 2kx8 | 800 | 75
HM6616 | CMOS | 2kx8 | 100 | 200
MB7134Y | TTL | 4kx4 | 850 | 35
DM87S321 | TTL | 4kx8 | 950 | 55
HM76641 | TTL | 8kx8 | 950 | 85

Last Update: 2005-Okt-11


Erasable Programmable ROM

EPROMs (Erasable Programmable Read Only Memory) sind vom Benutzer programmierbare, UV-löschbare Speicher. Nach der Herstellung eines EPROMs sind alle Speicherzellen im gelöschten Zustand (logisch 1) und werden vom Benutzer mit Hilfe von speziellen Programmiergeräten programmiert. Die gespeicherte Information kann durch Bestrahlung mit ultraviolettem Licht, das durch ein Quarzfenster im Gehäuse des Bausteins auf den Chip fällt, wieder gelöscht werden, so dass die EPROMs dann wieder von neuem programmiert werden können.

Jede EPROM-Speicherzelle besteht aus einem Transistor, dessen Gate von isolierendem SiO2 vollständig umschlossen ist. Gelingt es nun, auf dieses Gate Ladung zu transferieren, so kann die Ladung nicht wieder abfließen und bleibt sehr lange auf dem Gate erhalten, da das umgebende SiO2 ein sehr guter Isolator ist. Die gespeicherte Ladung erzeugt aber durch Influenz im nahe liegenden Kanal des Transistors eine entgegengesetzte Ladung, wodurch der Transistor leitend wird. Man kann dadurch also feststellen, ob im Gate eine Ladung gespeichert ist, ohne die Ladung selbst zu verändern.

EPROM-Speicherzelle

Das Einbringen der Ladung kann man durch Anlegen einer hohen Spannung bewirken, wodurch die Ladungsträger (Elektronen) in das Gate injiziert werden. Je nach Typ des EPROMs benötigt man verschiedene Programmierspannungen, wobei ältere Typen mit 25 V programmiert werden, neuere Typen mit 21 V oder 12.5 V. Bestrahlt man das Gate mit UV-Licht, so werden die Elektronen angeregt und können ihr Gefängnis wieder verlassen; das EPROM wird wieder gelöscht.

Zum Löschen benötigt man UV-Licht mit einer Wellenlänge von 253 nm (Quecksilberdampf-Lampe) mit einer gesamten Dosis von 15 Ws/cm2. Bei herkömmlichen UV-Lampen benötigt man dazu etwa 15 Minuten. Da die meisten Lichtquellen auch Anteile von UV-Licht enthalten (der Löschvorgang setzt unterhalb von 400 nm ein), werden EPROMs auch von diesen Lichtquellen gelöscht (direktes Sonnenlicht: ca. 1 Woche, Leuchtstoffröhre: ca.3 Jahre). Man sollte daher das Fenster von EPROMs stets mit einer undurchsichtigen Etikette bekleben.

Seit einiger Zeit werden auch EPROMs ohne Fenster angeboten. Sie sind dann wie PROMs nur einmal programmierbar. Da ein großer Teil der Kosten eines EPROMs aber durch das aufwendige Gehäuse mit Fenster bedingt sind, können fensterlose EPROMs sehr billig produziert werden, und bilden daher eine preisgünstige Alternative zu PROMs, vor allem, wenn die Zugriffszeit eines EPROMs ausreicht.

Die Programmierung von EPROMs ist je nach Typ des EPROMs verschieden, die Hersteller geben in den Datenblättern die entsprechenden Angaben. Dabei sind die angegebenen Zeiten und Spannungspegel sehr genau einzuhalten, da es sonst zur Zerstörung des EPROMs kommen kann. Der Grundalgorithmus, der aber nur für die älteren Typen verwendet wird, funktioniert so, dass pro Speicherzelle bei angelegter Adresse und angelegten Daten ein Programmierimpuls von 50 ms die Information im EPROM an entsprechender Stelle abspeichert. Für große EPROMs kommt man mit diesem einfachen Verfahren jedoch auf sehr lange Programmierzeiten (man würde zur vollständigen Programmierung z.B. eines 27256 mit32 KByte Kapazität 27 Minuten benötigen!). Aus diesem Grund wurden effizientere Programmieralgorithmen entwickelt, die es ermöglichen, auch große EPROMs in annehmbarer Zeit zu programmieren (weniger als 2 Minuten). Dabei wird versucht, jedes Byte zuerst mit kurzen Impulsen zu programmieren (typ. 1 ms).Nach jedem Impuls werden die Daten wieder gelesen; stimmen diese mit der gewünschten Information überein, wird noch einmal ein Impuls von der Gesamtlänge aller bis jetzt verwendeten Impulse angelegt. Dadurch kommt man im kürzesten Fall zu einer Programmierzeit von 2 ms/Byte (im Gegensatz zu 50 ms/Byte mit dem Standardimpuls).

Die folgende Tabelle gibt eine Übersicht zu einigen gebräuchlichen EPROMs. EPROMs werden von fast allen Halbleiterherstellern erzeugt und entsprechend viele (kompatible) Typen gibt es. In der Tabelle sind daher nur einige Typen aufgeführt, die angegebenen Parameter (besonders die Verlustleistungen) können aber je nach Hersteller variieren.

Typ | Technologie | Speicher-Kapazität [bit] | Betriebsleistung [mW] | Standby-Leistung [mW] | Zugriffszeit [ns]
i2716-1 | NMOS | 2kx8 | 525 | 132 | 350
CY7C245-35 | CMOS | 2kx8 | 450 | 450 | 35
TMM2764D-2 | NMOS | 8kx8 | 500 | 125 | 200
CY7C261-35 | CMOS | 8kx8 | 550 | 110 | 35
TMM27128D-20 | NMOS | 16kx8 | 500 | 125 | 200
TMM27256D-15 | NMOS | 32kx8 | 500 | 125 | 150
TC57256D-20 | CMOS | 32kx8 | 150 | 0.5 | 200
NMC27C512A-120 | CMOS | 64kx8 | 220 | 0.55 | 120
NMC27C1023-120 | CMOS | 128kx8 | 275 | 0.55 | 120
NMC27C1024-120 | CMOS | 64kx16 | 275 | 0.55 | 120

Last Update: 2005-Okt-11


Electrically Erasable Programmable ROM

Die Bezeichnung 'EEPROM' steht für 'Electrically Erasable Programmable Read Only Memory'. Dies sind Bausteine, die zwar wie EPROMs programmiert werden, aber nicht mit UV-Licht, sondern elektrisch gelöscht werden können. EEPROMs werden manchmal auch als 'E2PROM' oder als 'EAROMs' ('Electrically Alterable ROM') bezeichnet.

Der Schreibvorgang benötigt etwa die 50000-fache Zeit (typ. 10 ms) des Lesevorgangs (typ. 200 ns) und kann außerdem nicht beliebig oft wiederholt werden (typ. 104 bis 106 erlaubte Schreibvorgänge). Darum wird das EEPROM gelegentlich auch als 'fast-nur-Lesespeicher' (read mostly memory) bezeichnet. Die Speicherzelle eines EEPROMs besteht aus einem Transistor mit einem 'floating gate', ähnlich dem Transistor eines UV-löschbaren EPROMs. Zum Transfer der Elektronen vom und zum Gate macht man sich den Fowler-Nordheim-Tunneleffekt zunutze, der beim Auftreten sehr hoher Feldstärken(107 V/cm) eintritt und es den Elektronen ermöglicht, die sonst undurchdringliche Isolierschicht aus SiO2 zu durchdringen.

Eine andere Technologie der EEPROM-Speicherzellen verwendet eine Schicht ausSi3N4 zwischen zwei Schichten polykristallinem Silizium, um Information als Ladung zu speichern (MNOS-Transistor, MNOS = metal nitride oxide semiconductor). Der MNOS-Transistor wird aber nur von wenigen Herstellern verwendet, da der Datenerhalt nicht so lange gesichert ist, wie bei EEPROMs mit Floating-Gate-Transistoren.

EEPROMs können überall dort eingesetzt werden, wo man oft auf bestimmte Parameter zurückgreifen muss, diese aber nur selten geändert werden. So besitzen viele Geräte (z.B. Terminals) ein EEPROM, in dem ihre Setup-Parameter abgespeichert sind. EEPROMs neueren Typs benötigen keine externe höhere Spannung, da sie die notwendigen Programmierspannungen intern aus der 5V-Versorgungsspannung erzeugen.

Die folgende Tabelle gibt eine Übersicht zu einigen gebräuchlichen EEPROMs. EEPROMs werden sowohl als Bausteine mit getrenntem Adress- und Datenbus gefertigt, als auch als Bausteine mit serieller Ansteuerung.

Typ | Technologie | Speicher-Kapazität [bit] | Betriebsleistung [mW] | Standby-Leistung [mW] | Zugriffszeit [ns]
X24C04 | CMOS | 512x8 | 10 | 0.25 | seriell
i2808 | NMOS | 1kx8 | 525 | 185 | 350
X2616 | NMOS | 2kx8 | 400 | 400 | 45
i2816 | NMOS | 2kx8 | 496 | 132 | 250
X2864A-20 | NMOS | 8kx8 | 700 | 350 | 200
X28C64 | CMOS | 8kx8 | 300 | 0.375 | 150
X28256 | NMOS | 32kx8 | 500 | 250 | 150

Last Update: 2005-Okt-11


Non Volatile RAM

NOVRAM ist die Abkürzung für 'Non Volatile RAM' (manchmal auch NVRAM abgekürzt)und bezeichnet einen Baustein, der sich wie ein normales statisches RAM verhält, dessen Information aber durch Anlegen eines Programmierimpulses in ein internes EEPROM kopiert werden kann. Beim Ausfall der Versorgungsspannung bleibt die Information erhalten und kann zu einem späteren Zeitpunkt wieder in RAM geladen werden.

Der große Vorteil von NOVRAMs liegt darin, dass Schreib- und Lesegeschwindigkeitgleich sind, und NOVRAMs daher genau wie normale RAMs eingesetzt werden können. Kritische Daten kann man vor ungewollten Ausfällen der Versorgungsspannung sichern, indem man im Netzteil des Geräts, in dem das NOVRAM eingesetzt wird, ein Power-Down-Signal vorsieht. Ist dieses Signal aktiv, so kann mit Hilfe der Restenergie der Kondensatoren des Netzteils noch schnell ein Schreibzyklus im EEPROM des NOVRAMs ausgelöst und die im RAM stehende Information ins EEPROM übertragen werden.

Last Update: 2005-Okt-11


Magnetische Speicher

Magnetische Speicher haben sich als Massenspeicher bei allen Arten von Computern durchgesetzt. Das Speicherprinzip beruht auf dem Ferromagnetismus. Dabei wird auf kleinen, eng begrenzten Zonen die Magnetisierungsrichtung des ferromagnetischen Materials entsprechend den einzelnen Datenbits eingestellt. Die Magnetisierungsrichtung bleibt für lange Zeiträume bestehen und kann zerstörungsfrei gelesen werden.

Von den vielen Typen von Magnetspeichern (Kernspeicher, Trommel, Platte, Floppy-Disk, Blasenspeicher, Band, etc.) seien in der folgenden Darstellung die drei wichtigsten Vertreter besprochen.

Last Update: 2005-Okt-11


Magnetband

Das Magnetband bietet eine große Speicherkapazität bei relativ großer Zugriffszeit. Dabei wird ein Kunststoffband, das ähnlich einem Audio-Tonband mit einer Eisenoxid-Schicht beschichtet ist, auf einer Spule aufgewickelt. Zum Lesen und Schreiben wird das Band auf eine zweite Spule umgespult und dabei am Schreib-/Lese-Kopf vorbeigezogen.

Es haben sich im Wesentlichen drei verschieden breite Bandtypen etabliert: Das1/2-Zoll-Band im traditionellen Computerbereich, das 1/4-Zoll-Band und das0.15-Zoll-Band im Mikrocomputerbereich. Da Bänder aufgrund des seriellen Zugriffsmechanismus langsam sind, werden sie nur als Backup-Speicher für größere Platten eingesetzt.

Im Mikrocomputerbereich kann man weiterhin drei Typen von Bandlaufwerken unter scheiden, die unterschiedliche Zugriffszeiten bieten (aber auch unterschiedlich viel kosten). Das teuerste und schnellste System entspricht den Band maschinen von Großcomputern. Diese Systeme besitzen als Antrieb einen Capstan-Motor, mit dem das Band präzise zwischen den Datenblöcken gestoppt werden kann. Damit kann das Band im wahlfreien Zugriff beschrieben und gelesen werden.

Ein sehr häufig im Mikrocomputerbereich vertretenes Bandlaufwerk ist der so genannte Streamer (streaming tape drive). Der Name dieses Typs leitet sich von seiner Eigenschaft ab, Daten in einem Strom ohne Stopp des Bandes abzuspeichern und zu laden. Streamer-Tapes sind vor allem für das Sichern von ganzen Platten gut geeignet, wo nicht einzelne Files auf Band gespielt werden. Natürlich können Streamer auch zur Abspeicherung von einzelnen Files verwendet werden (wenn die Software dies erlaubt), jedoch ist die Zugriffsgeschwindigkeit auf Einzelfiles sehr niedrig, da kein wahlfreier Zugriff möglich ist.

Eine dritte Art von Bandmaschinen sind so genannte Floppy-Tape-Drives, die so konstruiert sind, dass sie vom Floppy-Controller des Computers angesteuert werden können. Diese Bandsysteme sind in der Regel die billigsten, sie weisen jedoch, was die Zugriffszeit und die Verwaltung betrifft, einige gravierende Nachteile auf, so dass sie sich nicht am Markt durchsetzen konnten.

Last Update: 2007-Jän-03


Home [image] Speicher [image] Magnetische Speicher [image] Floppy-Disk [image] Grundlagen
Index
Siehe auch: Festplatten, Magnetband, Floppy Disk - Aufzeichnungsverfahren, Floppy Controller

Floppy Disk

Die Floppy-Disk ist sicherlich eines der am meisten verbreiteten Medien zur Datenspeicherung. Das Prinzip der Datenspeicherung auf Floppy-Disk ist einfach: Für jedes abgespeicherte Bit wird auf der Floppy-Disk ein Punkt mit einer entsprechenden Magnetisierung (genauer: Flusswechsel) erzeugt. Die Bits sind auf der Floppy-Disk in konzentrischen Kreisen (Spuren) angelegt, wobei die Dichte der Bits und die Zahl der Spuren die Kapazität des Mediums bestimmen.

Floppy-Disks sind zurzeit in 4 verschiedenen Größen (Durchmesser der rotierenden Scheibe) eingeführt: 8 Zoll, 5.25 Zoll, 3.5 Zoll und 2 Zoll. 5.25"-und 3.5"-Disketten machen zurzeit den Hauptanteil an den Disketten aus.

Aufgrund der historischen Entwicklung existiert eine große Zahl von verschiedenen Aufzeichnungsformaten, die meist untereinander inkompatibel sind. Erst mit der Einführung von Personalcomputern, die in großen Stückzahlen hergestellt werden (IBM-PC, Apple MacIntosh, Atari etc.)hat sich eine gewisse De-facto-Standardisierung eingestellt, wobei die Disketten zwischen den einzelnen Computermarken wieder nur mit Hilfe von Spezialsoftware ausgetauscht werden können. Es soll im Folgenden daher kein spezielles Format eines Computers besprochen werden, sondern nur ein allgemeiner Überblick zu den möglichen Floppy-Formaten gegeben werden.

Wenn man sich eine frisch produzierte Diskette als Scheibe ohne jede Magnetisierung vorstellt, so tritt unweigerlich die Frage auf, wie die Datenbits auf der Diskette physikalisch angeordnet werden, damit sie wieder gefunden werden können und bereits beschriebene Stellen nicht überschrieben werden.

Wie oben bereits erwähnt, sind die Datenbits in konzentrischen kreisförmigen Spuren angeordnet, deren Abstand durch den Mechanismus des Schreib-/Lese-Kopfes bestimmt wird. Hier gibt es zwei Varianten: 48 TPI (tracks per inch) und 96 TPI. Jede dieser Spuren ist nun in mehrere Sektoren geteilt, wobei zu Beginn eines jeden Sektors in einem eigenen Abschnitt die Kennummern für Spur, Seite und Sektor abgespeichert sind. Jeder Sektor enthält - je nach Art des Formats - 128 bis 4096 Byte für Daten bereit.

Will man nun Daten abspeichern, so wird der nächste freie Sektor gesucht und indessen Datenfeld die Daten eingetragen. Zugleich wird in einem eigenen Teil der Diskette (Directory) eine Aufzeichnung mitgeführt, die den Namen der Datei und die dafür verwendeten Sektoren enthält.

Da besonders in der PC-Welt eine Reihe von verschiedenen Floppy-Disks mit unterschiedlichen Speicherkapazitäten verwendet wird, sei in der folgenden Tabelle eine Auflistung der wichtigsten Parameter dieser Disk-Formate angegeben. Alle Angaben beziehen sich auf zweiseitig beschriebene Disketten.

Typ | Kapazität [KByte] | n track | n rev [U/min] | Codierung | Bitrate [kBit/s]
Single Density | 180 | 40 | 300 | FM | 125
Double Density 5.25" | 360 | 40 | 300 | MFM | 250
Double Density 3.5" | 720 | 80 | 300 | MFM | 250
High Density 5.25" | 1200 | 80 | 360 | MFM | 500
High Density 3.5" | 1440 | 80 | 300 | MFM | 500
ntrack: Zahl der Spuren, nrev: Zahl der umdrehungen pro Minute

Last Update: 2007-Jän-03


Home [image] Speicher [image] Magnetische Speicher [image] Floppy-Disk [image] Floppy Disk - Aufzeichnungsverfahren
Index
Siehe auch: Floppy Controller, Floppy Disk

Floppy Disk - Aufzeichnungsverfahren

Die Daten werden auf Diskette in serieller Form abgespeichert, wobei für ein LOW-Bit kein Flusswechsel der Magnetisierung erfolgt, für ein HIGH-Bit sehr wohl. Ein Problem bei dieser Methode besteht darin, dass bei Aufzeichnung von vielen aufeinander folgenden LOW-Bits leicht die Information verloren geht, wie viele LOW-Bits vorhanden sind. Um dies zu verhindern, wird in den gängigen Aufzeichnungsverfahren zwischen jedem Datenbit entweder explizit oder implizit ein Taktbit eingefügt. Für Floppy-Disks existieren zwei unterschiedliche Aufzeichnungsverfahren - FM(frequency modulation) und MFM (modified FM) - die auch als Single und Double Density bezeichnet werden.

Frequency Modulation (FM)

Beim FM-Verfahren wird zusätzlich zu den Datenbits zwischen jedem Datenbit ein Taktbit mit aufgezeichnet. Dies erlaubt es, beim Lesen der Diskette die Synchronisation auch dann aufrecht zu erhalten, wenn sehr viele LOW-Bits auf gezeichnet wurden. Die Impulse der Taktbits haben einen zeitlichen Abstand von 8 µs, ebenso die Datenbits, was einer Datenrate von 125 kBaud entspricht.

Die Bezeichnung 'Frequency Modulation' kommt von der Tatsache, dass bei Vorliegen von vielen aufeinander folgenden LOW-Bits die Impulsfrequenz auf der Diskette 125 kHz ist, bei vielen aufeinander folgenden HIGH-Bits die Impulsfrequenz aber 250 kHz beträgt. Oder anders betrachtet, die Impulsfrequenz wird in Abhängigkeit des Datenstromes moduliert.

Aufzeichnung eines bit-serieller Datenstroms auf Diskette im FM-Verfahren

Modified Frequency Modulation (MFM)

Beim MFM-Verfahren geht man von der Überlegung aus, dass es eigentlich Verschwendung von Speicherkapazität ist, immer alle Taktbits mit aufzuzeichnen. Daher hat man ein Verfahren entwickelt, das Taktbits nur dann aufzeichnet, wenn es zur Aufrechterhaltung der Synchronisation unbedingt notwendig ist. Dieses Verfahren erlaubt es, genau die doppelte Menge an Daten auf einer Diskette unterzubringen.

Die Aufzeichnung geschieht nach folgendem Prinzip: Die Datenbits werden wie gewohnt aufgezeichnet, Taktbits werden aber nur dann eingefügt, wenn zwei LOW-Bits aufeinander folgen. Durch dieses Verfahren kann der zeitliche Abstand der Datenbits von 8 auf 4 µsec gesenkt werden, was einer Verdopplung der Speicherkapazität bei gleich bleibender Flusswechseldichte entspricht:

Zeitdiagramm der MFM-Codierung

Last Update: 2005-Okt-11


Home [image] Speicher [image] Magnetische Speicher [image] Floppy-Disk [image] Floppy Controller
Index
Siehe auch: Floppy Disk - Aufzeichnungsverfahren, Floppy Disk

Floppy Controller

Neben den oben beschriebenen Verfahren zur Codierung der Daten müssen die Daten auf der Diskette natürlich auch verwaltet werden. Da diese Verwaltung einen Mikroprozessor überfordern oder zumindest sehr stark belasten würde, hat man für diese Aufgabe spezielle Bausteine, so genannte Floppy-Controller, entwickelt.

Der Floppy-Controller sorgt nicht nur für die Codierung bzw. Decodierung des Bitstromes beim Schreiben oder Lesen, sondern auch für die Erkennung der Sektoren, die Formatierung der Diskette, die Ansteuerung des Laufwerkes und noch einiges mehr. Neuere Floppy-Controller haben die notwendige PLL (phase locked loop) und die Schaltung für die Prekompensation mit auf dem Chip integriert, so dass mit einem hoch integrierten Baustein und ein paar Treibern ein Floppy-Interface aufgebaut werden kann.

Zum Schluss sei noch als Anregung für eigene Experimente der Schaltplan einer möglichen Implementation eines Floppy-Controllers gezeigt. Dieser Controller vereinigt alle wesentlichen Funktionen auf einem Chip. Als externe Bauelemente werden lediglich ein Register zur Selektion des jeweiligen Laufwerkes, ein Monoflop zur Aktivierung des Schreib-/Lese-Kopfes (head load) und ein Quarz zur Erzeugung der Referenzfrequenzen benötigt. Der Abgleich des Controllers ist dem Datenblatt des Chips zu entnehmen.

Schaltplan eines Floppy-Controllers

Last Update: 2005-Okt-11


Harddisk

Im Gegensatz zu den Floppy-Disks ist bei Festplatten die informationstragende, magnetisierbare Schicht auf einer steifen Aluminiumplatte aufgetragen. Bedingt durch die Rigidität des Trägermaterials kann die Datendichte gegenüber Floppy-Disks um einen Faktor 1000 erhöht werden.

Harddisks besitzen intern meist ein bis acht Platten (jeweils doppelseitig verwendet), die alle auf einer gemeinsamen Antriebsachse montiert sind. Für jede Plattenoberfläche ist ein eigener Schreib-/Lese-Kopf vorgesehen. Die Köpfe werden von einem gemeinsamen Antriebsmechanismus (Schrittmotor oder Voice Coil mit Servosystem) bewegt und fliegen ähnlich einem Luftkissenfahrzeug über die Plattenoberfläche.

Die auf einer Festplatte erzielbare Speicherdichte hängt von drei Parametern ab: Der Spaltbreite des Schreib-/Lese-Kopfes, der Dicke der magnetisierbaren Schicht und der Flughöhe des Kopfes. Diese drei Parameter sollen etwa dieselbe Größe haben. Je kleiner diese Abmessungen, desto höher ist die mögliche Speicherdichte.

Die Daten sind auf der Harddisk in konzentrischen Kreisen gespeichert, die jeweils in Sektoren unterteilt werden. Man nennt die kreisförmigen Spuren auch Zylinder, da die Spuren mehrerer Einzelplatten exakt übereinander liegen und so einen Zylinder bilden. Eine typische Harddisk enthält einige tausend Zylinder und 50 bis 200 Sektoren pro Spur. Bei älteren Harddisks war die Zahl der Sektoren für alle Spuren gleich groß, was zu einer Verschwendung von Speicherplatz in den äußeren Zylindern führt. Deshalb wurde auf eine variable Sektorunterteilung umgestellt, so dass äußere Spuren (die ja länger sind) mehr Sektoren enthalten als innere (LBA = logical block addressing).
Links: Winkelgleiche Aufteilung in Sektoren. Rechts: LBA-Adressierung bei der alle Sektoren gleich groß sind.

Die kleinste adressierbare Einheit auf der Platte ist also ein Sektor, der in der Regel 512 Byte Daten enthält. Je nach dem welches Betriebssystem man verwendet, kann allerdings der kleinste tatsächlich verwendbare Speicherblock deutlich größer sein. So fassen z.B. die verschiedenen Windows-Varianten immer mehrere Sektoren (z.B. 8 oder 16) zu einem "Cluster" zusammen, der dann über eine eindeutige Nummer angesprochen werden kann. Die Clusterbildung führt aber zu einer Verschwendung von Speicherplatz, da selbst bei sehr kleinen Dateien, die z.B. nur wenige Byte umfassen, immer ein ganzer Cluster für die Datei verwendet wird. Dadurch kommte es bei der Speicherung von sehr vielen, sehr kleinen Dateien zu einem erheblichen und unnötigen Platzverbrauch. So wird man bei einer Clustergröße von 8 kByte (16 Sektoren) für 1000 Dateien, die jeweils 50 Byte groß sind, auf der Harddisk nicht 50 kB (1000*50 Byte) benötigen, sondern 8 MB (1000*8000 Byte). Abhilfe schafft in diesem Fall nur das Packen der vielen kleinen Dateien in ein einziges Archiv. Dabei gewinnt man doppelt Speicherplatz, da einerseits die vielen Dateien nur mehr als eine Datei im Dateisystem geführt werden, und jede einzelne Datei auch noch komprimiert wird.

Last Update: 2007-Jän-03


Schnittstellen

Die Leistungsfähigkeit einer Harddisk hängt nicht nur von ihren physikalischen und elektrischen Parametern, sondern in großem Maße auch von der Art des verwendeten Interfaces ab. Mit zunehmenden Anforderungen haben sich am Markt verschiedene Schnittstellen etabliert, die im folgenden kurz besprochen werden sollen.

ST506/ST412

Die ST506-Schnittstelle war der erste Standard für 5.25"-Systeme und wurde aus dem Floppy-Interface SA450 und dem SA1000-Interface für 8"-Harddisks entwickelt. Diese Schnittstelle wurde zu Beginn der 80er Jahre mit dem LaufwerkST506 von Shugart Technology (später Seagate Technology) eingeführt und ist bis heute eine der am weitesten verbreiteten Schnittstellen für Platten der unteren Preis- und Leistungsklasse.

Eine dem ST506-Interface sehr ähnliche Schnittstelle ist die ST412-Schnittstelle, die sich im Wesentlichen nur dadurch unterscheidet, dass sie 'buffered seek' unterstützt. Dabei braucht der Harddisk-Controller nicht mehr auf die maximal mögliche Schrittgeschwindigkeit des Kopfmotors Rücksichtnehmen, sondern kann die zur Bewegung des Schreib-/Lese-Kopfes notwendigen Impulse mit großer Geschwindigkeit an das Laufwerk senden. Die Laufwerkselektronik führt dann die entsprechende Zahl von Schritten durch.

ESDI (enhanced small device interface)

Da der Durchsatz des ST506-Interfaces für manche Anwendungen zu gering ist, wurde schon bald nach dessen Einführung ein neuer Standard entwickelt, der nicht nur eine doppelt so hohe Datentransferrate erlaubt, sondern durch einen intelligenten Controller auf der Platte auch die Ansteuerung z.B. von optischen Platten ermöglicht.

Die höhere Datenübertragungsrate des ESDI-Interfaces wird erreicht, indem der Datenseparator auf der Plattenelektronik untergebracht ist. Dadurch brauchen zwischen Platte und Controller keine analogen Signale mehr übertragen werden. ESDI-Platten werden normalerweise mit 10 MBit/s Datenrate betrieben, können aber theoretisch bis zu 24 MBit/s erreichen.

SCSI (small computer system interface)

Die SCSI-Schnittstelle wurde Ende der 70er Jahre (damals unter dem Name SASI-Interface) entwickelt und schirmt die physikalischen und elektrischen Parameter einer Platte weitgehend vom ansteuernden Computer ab. Dadurch erreicht man eine große Flexibilität und Unabhängigkeit von der Art der eingesetzten Platte. Diese Geräteunabhängigkeit geht soweit, dass der SCSI-Bus nicht nur für Festplatten eingesetzt wird, sondern auch zur Ansteuerung von Bernoulli-Laufwerken, optischen Platten, CD-ROMs, Druckern und anderen Geräten.

Die Weiterentwicklung der SCSI-Schnittstelle (SCSI-2) bietet eine Datentransferrate von bis zu 800 MBit/s, sodass die SCSI-Schnittstelle in Zukunft verstärkt in einem weiten Bereich der Computer-Technik eingesetzt werden wird.

SMD (storage module device interface)

Diese hauptsächlich im Minicomputer-Bereich (früher auch im Mainframe-Bereich) angesiedelte Interface-Technik wurde von Control Data entwickelt und war lange Zeit das Interface für Platten mit hoher Kapazität und großem Durchmesser. Wie das ESDI-Interface haben Platten mit SMD-Interface den Daten-Separator auf der Plattenelektronik untergebracht. Im Mikrocomputerbereich wird das SMD-Interface nur selten verwendet, es sei denn für File Server mit sehr großen Platten.

Die folgende Tabelle gibt einen kurzen Überblick über die wichtigsten Betriebsparameter der meistverwendeten Schnittstellen.

Interface | Kabelsatz | Kabellänge [m] | Busbreite [bit] | Transferrate [MBit/s] | Einsatzgebiet
ST506 | 34+20 | 3 | 1 | 5 | Mikrocomputer
ST412 | 34+20 | 3 | 1 | 5 | Mikrocomputer
ST506/RLL | 34+20 | 3 | 1 | 7.5 | Mikrocomputer
ST412/RLL | 34+20 | 3 | 1 | 7.5 | Mikrocomputer
ESDI | 34+20 | 3 | 1 | 10 | Mikro/Minicomputer
SASI | 50 | 3 | 8 | 12 | Mikro/Minicomputer
SMD | 60+26 | 15 | 1 | 14.4 | Minicomputer
SCSI | 50 | 25 | 8 | 32 | Mikro/Minicomputer
IPI-3 | 50 | 125 | 16 | 80 | Mini/Mainframes

Last Update: 2005-Okt-11


Aufzeichnungsverfahren

Neben dem MFM-Verfahren, das in fast allen Standard-Harddisks zur Anwendung kommt, wurden und werden auch andere Verfahren entwickelt, die zum Teil durch Kompressionstechniken oder durch bessere Ausnutzung der Plattenoberfläche eine höhere Gesamtkapazität bei gleicher Flusswechseldichte erreichen. Eines dieser Verfahren soll kurz erwähnt werden.

RLL-Verfahren

Das RLL-Verfahren (run length limited) ermöglicht eine Kapazitätssteigerung einer Platte um 50%. Dies wird dadurch erreicht, dass die abzuspeichernden Daten so umcodiert werden, dass die Zahl der für das Abspeichern notwendigen Flusswechsel um den Faktor 3 herabgesetzt wird. Da jedoch das Codierungsverfahren die Zahl der Bits verdoppelt, ergibt sich in Summe eine 50%-ige Erhöhung der Speicherkapazität.

Es gibt verschiedene RLL-Verfahren, die jeweils unterschiedliche Kompressionsfaktoren erzeugen. Das gängigste Verfahren ist das2,7-RLL-Verfahren, das bei der Codierung zwischen den Eins-Bits mindestens zwei, aber höchstens sieben Null-Bits erzeugt. Dabei wird der zu codierende Bitstrom nach folgender Tabelle übersetzt:

uncodierte Bitkombination | RLL-Bit-Folge
0 0 | 1 0 0 0
0 1 | 0 1 0 0
1 0 0 | 0 0 1 0 0 0
1 0 1 | 1 0 0 1 0 0
1 1 0 0 | 0 0 0 0 1 0 0 0
1 1 0 1 | 0 0 1 0 0 1 0 0
1 1 1 | 0 0 0 1 0 0

Last Update: 2005-Okt-11


Beispiele für Festplatten

Die folgende Tabelle gibt einen Überblick zu den wichtigsten Daten von einigen am Markt verfügbaren Festplatten. Die angegebenen Kapazitäten beziehen sich auf die Gesamtspeicherkapazität nach dem Formatieren.

Fabrikat | Kapazität [MB] | Zylinder | Köpfe | Codierung | Schnittstelle
Seagate ST225 | 21 | 615 | 4 | MFM | ST506
NEC D5126 | 21 | 615 | 4 | MFM | ST506
Seagate ST138R | 33 | 615 | 4 | RLL | ST506
Seagate ST238R | 33 | 615 | 4 | RLL | ST506
Rodime RO203E | 33 | 640 | 6 | MFM | ST506
Toshiba MK53 | 36 | 833 | 5 | MFM | ST506
Seagate ST251 | 43 | 820 | 6 | MFM | ST506
NEC D3146H | 43 | 615 | 8 | MFM | ST506
Rodime RO204E | 45 | 640 | 8 | MFM | ST506
Rodime RO3057S | 45 | 680 | 5 | RLL | SCSI
Seagate ST157 | 48 | 615 | 6 | RLL | SCSI
Toshiba MK54 | 51 | 833 | 7 | MFM | ST506
Micropolis 1324 | 53 | 1024 | 6 | MFM | ST506
Maxtor XT1065 | 56 | 918 | 7 | MFM | ST506
Micropolis 1324A | 62 | 1024 | 7 | MFM | ST506
NEC D5147H | 64 | 615 | 8 | RLL | ST506
Seagate ST277N | 65 | 818 | 6 | RLL | SCSI
Seagate ST277R | 65 | 820 | 6 | RLL | ST506
Maxtor XT1085 | 71 | 1024 | 8 | MFM | ST506
NEC D5452 | 72 | 823 | 10 | MFM | ST506
Seagate ST4096 | 80 | 1024 | 9 | MFM | ST506
Rodime RO5125E | 113 | 1224 | 5 | RLL | ESDI
Maxtor XT1140 | 120 | 918 | 15 | MFM | ST506
Seagate ST4144R | 122 | 1024 | 9 | RLL | ST506
Micropolis 1374A | 127 | 1016 | 7 | RLL | SCSI
Maxtor XT4170S | 150 | 1224 | 7 | RLL | SCSI
Micropolis 1355 | 151 | 1024 | 8 | RLL | ESDI
NEC D5652 | 152 | 823 | 10 | RLL | ESDI
Maxtor XT2190 | 160 | 1224 | 15 | MFM | ST506
Maxtor XT8380S | 320 | 1632 | 8 | RLL | SCSI
Micropolis 1578-15 | 328 | 1220 | 15 | RLL | SCSI
Micropolis 1558-15 | 338 | 1224 | 15 | RLL | ESDI
Maxtor XT8760S | 600 | 1632 | 15 | RLL | SCSI
Maxtor 6L040J2 | 40000 | 58970 | 2 | - | ATA
IBM Deskstar 180GXP | 185000 | 70553 | 6 | - | ATA

Last Update: 2006-Sep-25


CD-ROM

CD-ROMs haben sich aus den Audio Compact-Disks (CD) entwickelt. Bei diesen wird die digitale (Audio-)Information durch Vertiefungen in einem transparenten Kunststoff abgespeichert (Pits). Der abtastende Laserstrahl wird nun durch die Pits verändert, wodurch die Information wieder gelesen werden kann. Die Information auf CDs wird im Gegensatz zu magnetischen Platten nicht in zylindrischer Anordnung, sondern in Form einer Spirale abgelegt.

CD-ROMs und Compact Disks sind physikalisch identisch (Geometrie der Pits, Rotationsgeschwindigkeit der Platte etc.), wodurch sich für CD-ROMs ein großer Preisvorteil ergibt, da bei der Herstellung von CD-ROMs dieselbe Technologie verwendet werden kann, wie für die Massenproduktion der Audio-CDs. Ein Unterschied, der für die Herstellung belanglos, für den Anwender aber sehr wichtig ist, ist der bei CD-ROMs viel höhere Aufwand für die Korrektur von Fehlern.

Die Daten auf CD-ROMs sind folgendermaßen organisiert: Alle Daten auf CD-ROMs sind Byte-orientiert abgespeichert, wobei jeweils 24 Byte Daten, 1 Byte Hilfsdaten (Timing, Disk-Info, etc.) und 8 Byte Fehlerkorrektur-Daten zu einem 'Frame' zusammengefasst sind. 98 Frames bilden einen Block, jedes CD-ROM enthält 270 000 Blöcke.

Auf der Block-Ebene liegt nun auch der wesentliche Unterschied zwischen Audio-CDs und CD-ROMs. Von den 2352 Byte eines Blocks werden 288 Byte für eine zweite Ebene der Fehlerkorrektur verwendet, 12 Byte zur Synchronisation und 4 Byte als absolute Blockadresse. Dadurch bleiben für die Benutzerdaten 2048 Byte pro Block über, was bei 270 000 Blocks eine nutzbare Gesamtspeicherkapazität von ca. 550 MByte ergibt. Durch die zusätzliche Ebene der Fehlerkorrektur in den Blocks (erste Ebene in den Frames) wird eine sehr niedrige, nicht korrigierbare Fehlerrate (kleiner 10-13) erreicht.

Last Update: 2006-Sep-25


DVD

Anfang der 1990er konnte sich die Compact-Disc (CD) als Massenspeicher-Medium bei Computern durchsetzen. Dadurch wuchsen nicht nur die Anwendungsfelder, sondern auch die Bedürfnisse der Verbraucher und der Unterhaltungsindustrie auf der ganzen Welt. Da die Kapazität einer CD aber für Filme zu gering war, wurde als neues Speichermedium die DVD entwickelt. Sie war zunächst als reines Speichermedium für Videodaten gedacht, (DVD = "Digital Video Disc"), es stellte sich eber schnell heraus, dass das Anwendungsgebiet von DVDs viel breiter ist. Es wurde daher als Alternative der Name "Digital Versatile Disc" diskutiert, konnte sich aber nicht durchsetzen.

DVD-Brenner können meist mit 2- bis 16-facher Geschwindigkeit schreiben, wobei die Standardgeschwindigkeit bei 1,35 MB/s (ca. 10,8 MBit/s) liegt. Die Standardgeschwindigkeit entspricht also bereits der 9-fachen CD-Geschwindigkeit. Achtung, ab 6-facher Schreibgeschwindigkeit sind spezielle Medien nötig, man kann also "langsame" Medien nicht einfach in einem schnellen Brenner entsprechend schneller beschreiben. Anmerkung: Die Gesamtzeit zum Schreiben ist bei DVD-RAM aber doppelt so lang als es der Schreibgeschwindigkeit entspricht, da bei diesem Format die geschriebenen Daten zur Kontrolle auch gelesen werden.

DVD-Formate

Einige Verwirrung stiften die vielen verschiedenen angebotenen Formate: DVD-RAM, DVD-R, DVD-RW (sprich: "DVD minus RW") und DVD+RW (sprich: "DVD plus RW"), wobei das verwendete Format egal ist, so lange man nicht Daten zwischen PCs austauschen möchte oder die DVD auch am DVD-Player abspielen möchte. Die Vielzahl an Formaten kommt daher, dass einerseits unterschieden werden muss zwischen einmal (R) und mehrfach (RW) beschreibbaren Medien und andererseits zwei Konsortien aus verschiedenen Firmen (das "DVD Forum" und die "DVD Allianz") unterschiedliche Standards entworfen haben. Zusätzlich können die einmal beschreibbaren Medien auch in zweilagiger Ausführung gefertigt werden (DL = "double layer") um die Kapazität der DVD zu verdoppeln. Dadurch ergeben sich folgende DVD-Formate:

 | Minus-Standard (DVD Forum) | Plus-Standard (DVD Allianz)
einmal beschreibbar | DVD-R DVD-R DL | DVD+R DVD+R DL
mehrfach beschreibbar | DVD-RW | DVD+RW
mehrfacher, wahlfreier Zugriff | DVD-RAM DVD-RAM DL (zweiseitig) |

Neben der verwirrenden Zahl an unterschiedlichen DVD-Formaten gibt es für manche Formate noch Untertypen, die sich durch die Speicherkapazität unterscheiden und durch den eingesetzten Kopierschutz. Grundsätzlich bieten DVDs eine Kapazität von 4.7 GB pro Schicht (DL Medien haben damit eine Gesamtkapazität von 9.4 GB).

Die drei DVD-Formate, die vom DVD-Forum stammen, werden auch als Minus-Standard bezeichnet. Nur diese Formate dürfen auch das offizielle DVD-Logo tragen. Entsprechend werden die zwei DVD-Formate von der DVD-Allianz als Plus-Standard bezeichnet (man beachte das Pluszeichen in der jeweiligen Formatbezeichnung). Die DVD-Formate nach dem Plus-Standard sind technisch einfacher aufgebaut und die Lizenzgebühren für die Patentnutzung sind bedeutend niedriger.

Last Update: 2006-Sep-26


DVD-RAM

DVD-RAM-Medien können bis zu 100000-mal beschrieben werden und sind vorformatiert, damit ein wahlfreier Zugriff wie auf ein RAM (natürlich viel langsamer) möglich ist. Die DVD-RAM weist von allen beschreibbaren DVD-Formaten die höchste Datensicherheit auf, weil diese eine eingeprägte Sektorierung besitzt und dasselbe Defektmanagement wie bei Harddisks eingesetzt wird. Es gibt bei DVD-RAM keine versteckten Schreibfehler, wie etwa bei DVD±R oder DVD±RW. Die Speicherschicht basiert nicht auf organischen Farbstoffen sondern auf anorganischen Substanzen. Dadurch wird die Haltbarkeit der Daten mit 30 Jahre spezifiziert.

Grundsätzlich gibt es zwei verschiedene DVD-RAM-Typen, die sich in den Speicherkapazitäten unterscheiden. Typ 1 mit 2.6 (einseitig) bzw. 5.2 GB (beidseitig) und Typ 2 mit 4.7 GB (einseitig) und 9.4 GB (zweiseitig). Der Typ 1 ist bereits veraltet, zur Zeit (2006) werden praktisch ausschließlich Typ 2-Medien eingesetzt. Zusätzlich gibt es für Camcorder Mini-DVD-RAMs (80 mm Durchmesser) mit einer Speicherkapazität von 2.8 GB.

Die DVD-RAM ist klar durch die Sektorierung erkennbar.

Last Update: 2006-Sep-26


Magneto-Optische Platten

Die magneto-optische Speichertechnik bietet die Möglichkeit, sehr große Daten mengen auf kleinem Raum abzuspeichern (vergleichbar den CD-ROMs) und auch wieder zu löschen. Das Speicherverfahren von magneto-optischen Platten beruht auf zwei Effekten: dem Verlust der Magnetisierung eines Permanentmagneten bei Überschreiten einer bestimmten Temperatur und der Drehung von polarisiertem Licht bei Spiegelung an magnetisierten Flächen (magneto-optischer Kerreffekt).

Speichern

Jeder Dauermagnet verliert seine Magnetisierung, wenn er entweder starken Erschütterungen, einem starken Magnetfeld oder einer hohen Temperatur ausgesetzt ist. Bei herkömmlichen magnetischen Speichern wird die Information geschrieben, indem lokal ein starkes magnetisches Feld angelegt wird. Dies führt dazu, dass sich die Magnetisierung des Bereichs, der dem Magnetfeld ausgesetzt ist, entsprechend der äußeren Magnetisierung ausrichtet. Da aber ein starkes Magnetfeld nicht sehr klein gebündelt werden kann, bedingt diese Technik eine geringere Speicherdichte als die neuen thermomagnetischen Methoden.

Erwärmt man einen Dauermagneten über eine bestimmte Temperatur, so verliert er seine Magnetisierung. Man nennt diese Temperatur den Curie-Punkt der betreffenden Substanz. Magneto-optische Platten benützen diesen Effekt, um Daten abzuspeichern. Dabei wird mit Hilfe eines Laser-Strahls ein kleiner Bezirk der Plattenoberfläche über den Curie-Punkt aufgeheizt. Dadurch verliert das permanentmagnetische Material der Plattenoberfläche seine Orientierung und nimmt die Magnetisierungsrichtung eines von außen angelegten Magnetfeldes an. Schaltet man den Laserstrahl ab, ohne das äußere Magnetfeld wegzunehmen, so kühlt der erhitzte Bereich ab und speichert die aktuell vorhandene Magnetisierungsrichtung. Nach dem Unterschreiten des Curie-Punktes kann das äußere Magnetfeld weggenommen werden und die Magnetisierungsrichtung des Punktes bleibt trotzdem erhalten. Wenn man sicherstellt, dass die Feldstärke des äußeren Magnetfeldes nicht größer wird als die zur Ummagnetisierung notwendigen Feldstärke, so wird bei dem oben beschriebenen Vorgang nur der kleine durch den Laser aufgeheizte Bereich ummagnetisiert.

Da man einen Laser sehr fein fokussieren kann, sind die einzelnen Daten-Punkte sehr klein. Entsprechend viel Information kann man also mit dieser Methode pro cm2 Plattenoberfläche unterbringen. Eine 5.25"-Platte kommt so pro Seite aufeine Kapazität von 325 MB, während herkömmliche Festplatten lediglich eine Kapazität von typ. 20 MB pro Seite erreichen. Allerdings sind in Forschungslabors bereits herkömmliche magnetische Disks in Entwicklung, die ähnlich hohe Speicherdichten wie magneto-optische Platten erreichen.

Lesen

Beim Lesen wird der magneto-optische Kerr-Effekt ausgenutzt. Trifft ein linear polarisierter Lichtstrahl auf eine ferromagnetische Oberfläche, so ist der reflektierte Strahl elliptisch polarisiert. Die Richtung der Hauptachse der Ellipse wird von der Magnetisierungsrichtung bestimmt.

Während des Lesevorgangs wird also das linear polarisierte Laserlicht durch Reflexion an der magnetischen Oberfläche elliptisch polarisiert. Die Drehrichtung der Hauptachse des elliptisch polarisierten Strahls wird zur Detektion der Magnetisierung eingesetzt.

Die in magneto-optischen Laufwerken eingesetzten Laser haben typisch eine optische Ausgangsleistung von 10 mW bei einer Wellenlänge von 830 nm (nahes IR). Die Wellenlänge bestimmt auch die theoretische Bitdichte einer optischen Platte, da jedes Bit auf einer kreisförmigen Fläche gespeichert wird, deren Durchmesser mindestens so groß sein muss wie die Wellenlänge des verwendeten Lichts. Damit ergibt sich eine theoretisch mögliche Speicherdichte von 108 bits/cm2.

Last Update: 2006-Sep-25


Fehlerkorrektur

Mit der Tendenz zu sehr großen Massenspeichersystemen wird die Notwendigkeit der Fehlerkorrektur immer größer. Da einerseits die Fehlerrate möglichst niedrig sein soll, um eine verlässliche Reaktion eines Systems zu bekommen, andererseits aber die Fehlerrate steigt, wenn man die Abstände zwischen den gespeicherten Bits erniedrigt (= höhere Speicherkapazität), ist es notwendig, nicht nur Fehlererkennung sondern auch Fehlerkorrektur zu betreiben.

Ein kurzes Beispiel möge eine Vorstellung vermitteln, welche Fehlerraten im täglichen Gebrauch von Massenspeichern noch akzeptabel sind. Angenommen man ist im Besitz eines Speichersystems, das 5 MBit pro Sekunde lesen und schreiben kann (also eine gewöhnliche Harddisk). Würde diese Harddisk ununterbrochen verwendet werden, so würde bei einer Fehlerrate von 10-6 alle 0.2 Sekunden ein Fehler auftreten, bei einer Fehlerrate von 10-9 alle 3 Minuten und bei einer Fehlerrate von 10-12 alle 2 Tage. Erst eine Fehlerrate von 10-14 gewährleistet einen fehlerfreien Betrieb von ca. 8 Monaten.

Im Gegensatz zur Fehlererkennung, die im einfachsten Fall mit Hilfe von Parity-Bits bewerkstelligt wird, können Fehlerkorrekturverfahren nicht nur Fehler erkennen, sondern diese auch bis zu einem bestimmten Maß korrigieren. Solche Fehlerkorrekturverfahren können die Fehlerrate eines Speichermediums um den Faktor 103 bis 1010 (!) erniedrigen. Mit Hilfe dieser Verfahren kann man also eine Rohfehlerrate von z.B. 10-9 auf eine nicht korrigierbare Fehlerrate von z.B. 10-15 absenken.

Die ersten Fehlerkorrekturverfahren wurden um 1950 entwickelt (R.W. Hamming, M.J.E. Golay) und konnten zum Teil nur Einzelbitfehler korrigieren. Erst zehn Jahre später wurden Korrekturverfahren entwickelt, die auch mehrere Fehler, die womöglich noch nebeneinander liegen (Fehler-Burst), korrigieren können. Eines dieser Verfahren ist das Verfahren nach I.S. Reed und G. Solomon, das inzwischen eines der am meisten verwendeten Verfahren ist.

Um zu zeigen, wie Fehlerkorrekturverfahren im Prinzip arbeiten, sei wegen seiner Einfachheit im Folgenden kurz das Verfahren nach Hamming (Hamming-7/4-Code) beschrieben. Es kann Einzelbitfehler korrigieren und arbeitet nach folgendem Prinzip: Es werden jeweils vier Datenbits zu einer Einheit zusammengefasst und zu den vier Datenbits drei Prüfbits errechnet. Daten- und Prüfbits werden zusammen auf der Platte abgespeichert. Beim Lesen der Daten werden nun wieder die Prüfbits errechnet und mit den abgespeicherten Prüfbits verglichen. Aus dem Vergleich dieser Bits kann man erkennen, ob ein Bit falsch gelesen wurde, und welches Bit falsch ist.

Im Einzelnen funktioniert der Hamming-7/4-Code so: Angenommen es sind die Datenbits a, b, c und d gegeben, so werden die drei Prüfbits p1-p3 errechnet, indem man aus jeweils drei der Datenbits die Parität ermittelt:

            p1 := Par(a,b,c)
            p2 := Par(a,b,d)
            p3 := Par(a,c,d)

Die Datenbits a-d und die Prüfbits p1-p3 werden abgespeichert. Tritt nun ein Fehler beim Lesen auf, so kann dieser Fehler entweder in den Datenbits auf getreten sein oder in den Prüfbits. Man errechnet nun die Prüfbits aus den gelesenen Datenbits und vergleicht diese mit den gelesenen Prüfbits. Nach der folgenden Tabelle kann nun das Fehlerhafte Bit ermittelt werden.

Unterschied zwischen gelesenen und errechneten Prüfbits | Fehler in Bit
p1,p2,p3 | a
p1,p2 | b
p1,p3 | c
p2,p3 | d
p1 | p1
p2 | p2
p3 | p3

Der Hamming-Code kann keine Mehrbitfehler erkennen oder korrigieren. Da aber gerade bei magnetischen oder optischen Speichern Mehrbitfehler sehr häufig sind(z.B. ein Teil der Oberfläche beschädigt), ist diese Art der Fehlerkorrektur nur schlecht für diese Zwecke einsetzbar. Es wurden in der Folge jedoch Verfahren entwickelt, die es gestatten, auch aufeinander folgende Mehrbitfehler zu korrigieren. Eines dieser Verfahren ist das Reed-Solomon-Verfahren.

Die folgende Tabelle führt ein paar gebräuchliche Fehlerkorrekturverfahren an.

Erfinder | Typ der Fehlerkorrektur | Anwendungen
R.W. Hamming | Einzelfehler | Halbleiterspeicher
P. Fire | kurze einzelne Bursts | Magnetische Speicher
M.J. Golay | 3 Fehler pro 23 Bit | manche Teletypes (US-Navy)
R.C. Bose, D.K. Ray-Chaudhuri, A. Hocquenghem | n Fehler pro Block | sehr große Halbleiterspeicher
I.S. Reed, G. Solomon | n Fehler pro Block | Optische Platten, Satelliten

Last Update: 2005-Okt-11


Mikroprozessoren

In diesem Kapitel soll der Weg von der Theorie zur Praxis etwas anders als im ersten Band dieses Buches vor sich gehen. Während in Band 1 zu jedem behandelten Teilaspekt eines Themas auch gleich Experimente angeführt wurden, soll hier zuerst eine knappe Gesamtdarstellung des Themas Mikrocomputer gegeben werden. Dies deshalb, weil Mikrocomputer nur dann funktionieren, wenn Hardware und Software perfekt zusammenspielen. Erst wenn man dieses Zusammenspiel im Kopf hat, kann man daran gehen, Experimente durchzuführen.

Es wird zuerst der innere Aufbau eines Mikroprozessors besprochen, der anhand des konkreten Prozessors Z80 veranschaulicht werden soll. Dann werden die Anforderungen an ein Minimalsystem beschrieben; nach einer Einführung in grundlegende Techniken der Programmierung eines Mikrocomputers werden die Experimentierplatine und die damit durchzuführenden Experimente beschrieben.

Last Update: 2005-Okt-08


Home [image] Mikroprozessoren [image] Interner Aufbau eines Mikroprozessors
Index
Siehe auch: Zentrale Recheneinheit - CPU, Register, Kontrolleinheit, Adressierung

Interner Aufbau eines Mikroprozessors

Jeder Mikroprozessor besteht zumindest aus drei grundlegenden Einheiten: Die arithmetisch-logische Einheit (ALU), die für die Berechnungen an den Daten verantwortlich ist, ein oder mehrere Register zur Handhabung der Daten und die Kontrolleinheit, die für die Befehlsausführung und sonstige Steueraufgaben zuständig ist:

Aufbau eines typischen Mikroprozessors

Last Update: 2005-Okt-11


Home [image] Mikroprozessoren [image] Zentrale Recheneinheit - CPU
Index
Siehe auch: Interner Aufbau eines Mikroprozessors, Arithmetisch-Logische Einheit

Zentrale Recheneinheit - CPU

Die zentrale Recheneinheit (CPU - central processing unit oder Mikroprozessor) ist das Herz eines jeden Mikrocomputers. Der Begriff 'zentrale Recheneinheit' suggeriert zugleich auch Herrschaft und Macht im Mikrocomputer, was jedoch nicht richtig ist. Die CPU hat die Befehle, die im Speicher abgelegt sind (das 'Programm'), abzuarbeiten, stur und sklavisch nach den vorgegebenen Regeln, auch wenn diese Befehle sinnlos oder gar zerstörerisch sind.

Der Mikroprozessor ist also als eine Maschine zu verstehen, die Daten im weitesten Sinne bearbeiten kann. Welcher Art diese Verarbeitung ist, hängt sowohl vom jeweiligen Typ des Mikroprozessors als auch vom zugrunde liegenden Programm ab.

Last Update: 2005-Okt-17


Arithmetisch-Logische Einheit

Die ALU hat die Aufgabe, arithmetische und logische Verknüpfungen vorzunehmen. Je nach Typ des Mikroprozessors sind die arithmetischen Befehle unterschiedlich stark ausgeprägt. Das Spektrum der Befehle reicht von der Addition und der Subtraktion über Befehle zur Unterstützung von BCD-Arithmetik bis zu Gleitkomma befehlen in sehr leistungsfähigen Mikroprozessoren.

Die logischen Befehle sind in allen Mikroprozessoren ziemlich gleich, so kommen praktisch in allen Prozessoren Befehle zur Bildung der logischen Grundfunktionen vor (UND, ODER, NICHT, XOR) oder Befehle zum Links- oder Rechtsschieben von Daten.

Üblicherweise besitzt die ALU zwei Eingänge und einen Ausgang. Außerdem erzeugt die ALU in Abhängigkeit der durchgeführten Rechenoperation verschiedene Statusmeldungen, die in einem Statusregister gespeichert werden. Im Statusregister besitzt jedes Bit eine bestimmte Bedeutung (im Englischen werden diese Bits auch 'flags' genannt). Einige wenige, sehr oft verwendete Statusbits seien im Folgenden kurz beschrieben.

Carry, C

Das Carry-Flag (dt: Übertrag) hat die Funktion, einen Übertrag bei arithmetischen Operationen aufzunehmen, der bei Additionen und Subtraktionen auftreten kann. Addiert man z.B. die in einem Byte dar ge stell ten Zahlen 166 und 239, so kann das Ergebnis nicht mehr in einem Byte aufgenommen werden, da es neun Bit zur Dar stellung benötigt. In binärer Schreibweise stellt sich die Situation wie folgt dar:

                        1 0 1 0 0 1 1 0         (166)
               +        1 1 1 0 1 1 1 1         (239)
               =     1  1 0 0 1 0 1 0 1         (405)

Um nun trotzdem beliebige acht Bit breite Zahlen addieren zu können, wird das entstehende neunte Bit in das Carry-Flag übernommen. Das Carry-Flag kann dann von speziellen Befehlen weiterverwendet werden. Bei größeren Mikroprozessoren (z.B. 16 oder 32 Bit) tritt ein Übertrag erst bei entsprechend größeren Zahlen auf. Das Carry-Flag wird außerdem zur Aufnahme von Bits bei Schiebeoperationen verwendet.

Zero, Z

Das Zero-Bit zeigt an, ob das Ergebnis einer Operation null ist. Es wird immer dann auf 1 gesetzt, wenn das Ergebnis einer arithmetischen oder logischen Operation gleich null ist. So wird z.B. beim Befehl COMPARE, der zwei Zahlen vergleicht, das Zero-Flag auf eins gesetzt, wenn die Zahlen gleich sind.

Sign, S

Das Sign-Flag (dt.: Vorzeichen) ist unmittelbar mit dem MSB (most significant bit) eines Registers verbunden und zeigt bei Zweierkomplementdarstellung das Vorzeichen der dargestellten Zahl an.

Overflow, V

Das Overflow-Flag (dt: Überlauf) wird nur für Berechnungen mit Zahlen in Zweierkomplementdarstellung benötigt. Es zeigt an, dass ein Überlauf der arithmetischen Operation zu einer Vorzeichenänderung der dargestellten Zahl geführt hat. Das Overflow-Bit wird durch exklusives Oder aus dem Carry-Flag und dem Sign-Flag gebildet.

Last Update: 2005-Okt-17


Register

Jeder Mikroprozessor benötigt zur Bearbeitung der Daten und zur Adressierung von Daten interne Register . Diese Register sind meist genauso oder doppelt so breit wie der Datenbus. Je nach Typ des Prozessors besitzt dieser einige allgemeine Rechenregister (typ. 1 bis 32), einige Register zum Adressieren (1bis 32) und einige spezielle Register, von denen drei praktisch in jedem Mikroprozessor anzutreffen sind: der Programmzähler (program counter, PC), der Stapelzeiger (stack pointer, SP) und das Statusregister (flags).

Es gibt Typen von Prozessoren, bei denen die allgemeinen Rechenregister und die Register zur Adressierung nicht unterschieden werden, bei anderen ist wiederum eine strenge Trennung dieser Register vorgesehen. Bei den meisten älteren Mikroprozessoren ist ein spezielles Register vorhanden, mit dem alle Rechenoperationen abgewickelt werden, der so genannte Akkumulator . Bei moderneren Prozessoren ist dieses Akkumulator-Konzept mehr oder minder aufgehoben, sodass jedes Datenregister zur Berechnung verwendet werden kann.

Auf Register kann normalerweise in einem Taktzyklus zugegriffen werden, das heißt, dass sie die schnellsten Speicher in einem System darstellen. Je mehr interne Register ein Mikroprozessor besitzt, desto mehr Variable kann man in diesen Registern bearbeiten und desto schneller wird ein Programm abgearbeitet. Daher sind Prozessoren mit vielen Registern in der Regel Prozessoren mit wenigen Registern in der Ausführungsgeschwindigkeit überlegen.

Last Update: 2005-Okt-17


Kontrolleinheit

Die Kontrolleinheit ist das Steuerwerk der CPU. Sie sorgt für den richtigen Ablauf aller Aktionen innerhalb des Prozessors. So werden Befehle eines Programms entschlüsselt, Adressen berechnet, der Befehl ausgeführt und die notwendigen Signale erzeugt, um den Daten- und Befehlstransfer zu bewerkstelligen.

Die Befehle eines Programms werden der Reihe nach aus dem Speicher geholt und abgearbeitet. Dies geschieht für jeden Befehl immer wieder in Programmausführung derselben Reihenfolge:

  1. Der Programmzähler wird inkrementiert, sodass er auf den nächsten Befehl zeigt.
  2. Der Befehl wird aus dem Speicher eingelesen und decodiert.
  3. Der Befehl wird ausgeführt.
  4. Die Ergebnisse werden, wenn verlangt, im Speicher abgelegt.

Diese Abfolge wird für jeden Befehl wiederholt.

Last Update: 2005-Okt-11


Befehlssatz

Der Befehlssatz eines Mikroprozessors ist einer der zentralen Punkte, an denen ein Mikroprozessor beurteilt wird. Bei der Implementierung von Befehlssätzen können zwei verschiedene Richtlinien verfolgt werden. Entweder man implementiert viele verschiedene, sehr mächtige und komplexe Befehle, die möglichst gut schon auf Maschinenebene die Verarbeitung von Hochsprachen unter stützen. Man nennt solche Maschinen CISC -Prozessoren (complex instruction setcom puting).

Die andere und neuere Philosophie vertritt die Ansicht, dass man mit wenigen einfachen, jedoch sehr schnell ausführbaren Befehlen (meist in einem Taktzyklus) höhere Rechenleistungen erzielt. Man nennt Prozessoren nach diesem Konzept RISC -Prozessoren (reduced instruction set computing).

Für den Programmierer, der einen Mikroprozessor in Assembler-Sprache programmieren möchte, ist es nicht nur wichtig, den Befehlssatz zu kennen, sondern auch das so genannte 'Programmiermodell'. Dieses Programmiermodell enthält alle im Prozessor vorhandenen Ressourcen und Einschränkungen, z.B. Art und Anzahl der Register, die Belegung der Memory-Map, Interrupteinrichtungen, spezielle Steuerungen für externe Speicher (MMU, DMA) oder eventuell vorhandene I/O-Möglichkeiten.

Sieht man sich den Befehlssatz eines Mikroprozessors genauer an, so kann man zwei Ebenen unterscheiden: 1) die Funktionalität eines einzelnen Befehls und 2)die Adressierungsmöglichkeiten des betrachteten Befehls. Wünschenswert für die Adressierungsmöglichkeiten eines Befehlssatzes ist die so genannte Orthogonalität . Ein orthogonaler Befehlssatz bedeutet, dass jeder Befehl auf jedes Register angewendet werden kann und jede Adressierungsart zugelassen ist. Die Orthogonalität ist bei vielen Prozessoren, die in neuerer Zeit von Grund auf neu entworfen worden sind, in hohem Maße vorhanden (z.B. M68000 oder NS32032), bei älteren Prozessoren, die zum Teil aufwärtskompatibel zum Vorgänger sind, musste naturgemäß auf Orthogonalität des Befehlssatzes verzichtet werden (z.B. Z80 oder i8086).

Last Update: 2005-Okt-10


Befehlstypen

Im Folgenden sollen die wichtigsten Befehlsarten eines Mikroprozessors, wie sie in fast allen Prozessoren implementiert sind, besprochen werden.

Laden, Speichern, Kopieren

Bei weitem die am meisten verwendeten Befehle sind Befehle zum Transfer von Daten zwischen Registern, Speicherplätzen und innerhalb des Speichers. Je nach Mikroprozessor bewirken diese Befehle Transfers von Bytes, Worten oder Doppelworten. Neben den allgemeinen Ladebefehle n bieten die meisten Mikroprozessoren noch komplexere Befehle zum Transfer von Daten, wie zum Beispiel Blocktransfer, Transferbefehle mit Abfrage nach bestimmten Codes und ähnliches mehr.

Logische Operationen

Die gängigen Mikroprozessoren bieten alle logischen Grundoperationen, wie NOT, AND, OR, XOR etc., an, die jeweils bitweise über die Wortbreite des Mikroprozessors ausgeführt werden. Darüber hinaus sind in vielen Mikroprozessoren Befehle zur Bit-Manipulation und zum Vergleichen von zwei Größen implementiert.

Arithmetik

Je nach dem Alter eines Mikroprozessors und dessen Hauptanwendungsgebiet sind unterschiedliche Arithmetikbefehle implementiert. Jeder Mikroprozessor weist Befehle zur Durchführung von Addition und Subtraktion von ganzen Zahlen auf. Darüber hinaus sind in neueren Prozessoren Multiplikation und Division implementiert. Die Prozessoren der letzten Generation haben zum Teil sogar Gleitkomma-Koprozessoren mit auf den Chip integriert (z.B. Transputer T800, i80486, M68040).

Zu den Arithmetik-Befehlen sind auch Schiebeoperationen zu zählen, da ein Schieben um ein Bit einer Multiplikation bzw. Division entspricht. Neuere Mikroprozessoren können den Operanden auch um mehr als ein Bit verschieben.

Programmflussbefehle

Unter Programmflussbefehlen versteht man Befehle, mit deren Hilfe man den Programmablauf steuern kann. Dazu zählen Befehle, die einen absoluten oder relativen Sprung ausführen, die es erlauben, ein Unterprogramm aufzurufen und die bei bestimmten Bedingungen eine Verzweigung im Programmfluss durchführen.

Spezielle hardwareabhängige Befehle

Neben den oben beschriebenen allgemein implementierten Befehlen gibt es in jeder CPU noch Befehle, die es erlauben, die spezielle Hardware entsprechend zusteuern. Zu diesen zählen Befehle zur Beeinflussung von Flags, zur Initialisierung der Interruptsteuerung und zur Handhabung eingebauter Peripheriebausteine.

Last Update: 2005-Okt-11


Adressierung

Jeder der Befehle eines Mikroprozessors wirkt auf irgendwelche Operanden, sei es auf Register oder auf Speicherzellen oder auf I/O-Bausteine. Die Art der Angabe dieser Operanden nennt man Adressierungsart. Da nahezu jeder Hersteller für seine Mikroprozessoren eine eigene Bezeichnung für die zur Verfügung stehenden Adressierungsarten erfunden hat, existiert für jeden Typus von Adressierung eine Menge von Namen. Da jedoch die genaue Bezeichnung einer Adressierungsart unerheblich ist, sollen an dieser Stelle nur die paar wichtigsten Adressierungsmethoden besprochen werden. Die genauen Details muss man ohnehin beim Studium des jeweiligen Prozessors erarbeiten.

Implizite Adressierung

Von impliziter Adressierung spricht man, wenn der Operator bereits Quell- und Zieloperanden enthält. Dies trifft für alle Operationen zu, die nur auf Register wirken und auf manche Operationen, die eine Kurzkonstante enthalten. Außerdem bedienen sich Operationen, die CPU-interne Vorgänge (z.B. das Setzen eines Flags) auslösen, der impliziten Adressierung.

Beispiele

            EI                  ;Interrupt erlauben
            LD      A,C         ;Inhalt von Register C nach A laden
            CCF                 ;Carry Flag invertieren

Direkte Adressierung

Bei der direkten Adressierung wird die Adresse des Quell- oder Zieloperanden direkt als numerische Adresse angegeben. Die Angabe der Adresse kann entweder numerisch oder in Form eines Labels erfolgen (das der Assembler in eine binäre Zahl umsetzt).

Beispiele:

            LD      (352EH),A   ;Inhalt von Register A auf
                                ;  Speicherzelle 352EH laden
            LD      HL,Start    ;Register HL mit Adresse von
                                ;  'Start' laden

Indirekte Adressierung

Bei der indirekten Adressierung wird die Adresse des Quell- bzw. Zieloperanden aus einem Register entnommen, d. h. dass die Adresse in einem Adressregister steht. Diese Art der Adressierung ist die flexibelste Form. Sie wird in vielen Mikroprozessoren in einigen Varianten(z.B. mit Displacement) angeboten.

Beispiel:

            LD      (HL),A      ;Speicherzelle, die durch Register
                                ;  HL adressiert wird, mit Inhalt
                                ;  von Register A laden

Last Update: 2005-Okt-11


Der Prozessor Z80

Der Mikroprozessor Z80, unterschiedliche Typen wird von vielen Herstellern in verschiedenen Technologien erzeugt und trägt - trotzfunktioneller Äquivalenz - zum Teil unterschiedliche Bezeichnungen.

Außerdem werden von manchen Herstellern auch Bausteine angeboten, die neben allen Z80-Befehlen einige Erweiterungen aufweisen, und/oder die auf dem Chip auch Peripherie-Elemente mit integriert haben. Diese Bauteile eignen sich aufgrund ihrer hohen Funktionalität sehr gut zum Aufbau von Mikroprozessor gesteuerten Schaltungen, da man für die Realisierung des Mikrocomputers meist nur mehr den entsprechenden Speicher zur Verfügung stellen muss.

Die folgende Tabelle enthält einige Z80-Mikroprozessoren von verschiedenen Herstellern.

Hersteller | Bezeichnung | Techn. | Strom | Bemerkungen
Zilog | Z8400A | NMOS | 90 mA | -
Mostek | MK3880-4 | NMOS | 90 mA | -
NEC | uPD780-1 | NMOS | 90 mA | -
NEC | uPD70008A | CMOS | 9 / 0.08 mA | -
Sharp | LH5080 | CMOS | 10 mA | -
National | NSC800A | CMOS | 15 / 2 mA | nicht pinkomp.
Hitachi | HD64180 | CMOS | 15 / 3.8 mA | Timer, SIO, MMU, DMA
Zilog | Z8208 | NMOS | - | Timer, SIO, MMU, Cache
Toshiba | TMPZ84C013 | CMOS | 13 / 1 mA | Timer, SIO, WDT
Toshiba | TMPZ84C011 | CMOS | 15 / 1 mA | Timer, PIO

Last Update: 2005-Okt-17


Pinbelegung Z80

Folgende Abbildung zeigt die Pinfunktionen und das Anschlussschema des Bausteins. Die Anschlüsse können in mehrere Gruppen zusammengefasst werden, die im folgenden kurz besprochen werden sollen.

Z80-CPU Anschlussschema

Zur Stromversorgung benötigt der Baustein eine einzige Spannung von 5 V. Die Stromaufnahme beträgt je nach verwendeter Halbleitertechnologie und Taktfrequenz zwischen 10 und 200 mA.

Datenbus

Der Datenbus besteht aus acht bidirektionalen Datenleitungen D0 - D7 , auf denen der Transfer von Daten und Befehlen zwischen dem Mikroprozessor und der Außenwelt vor sich geht. D0 ist das LSB, D7 das MSB. Die Datenleitungen sind als Tri-State-Anschlüsse ausgeführt.

Adressbus

Der Adressbus besteht aus 16 Leitungen A0 - A15 , mit denen maximal 64 KByte adressiert werden können. Zur Adressierung von größeren Speichern müssen durch externe Hardware (z.B. Bank Switching oder MMU) zusätzliche Adressleitungen angesteuert werden. Die Adressleitungen sind Tri-State-Leitungen, damit eventuelle externe Prozessoren auf den Bus zugreifen können (siehe /BUSRQ).

System-Steuerleitungen

Die Steuerleitungen dienen zur Kontrolle des angeschlossenen Systems. Folgende Anschlüsse sind dazu vorgesehen:

/M1 | Machine Cycle One (Ausgang, aktiv = LOW). /M1 zeigt an, dass der aktuelle Maschinenzyklus einen Befehl aus dem Speicher holt und zur Ausführung bringt. Bei Befehlen mit zwei Befehlsbytes wird /M1 zweimal hintereinander auf LOW gebracht. /M1wird auch zur Kennzeichnung eines Interrupt-Acknowledge-Zyklus zusammen mit dem Pin /IORQ verwendet.
/MREQ | Memory Request (Tri-State-Ausgang, aktiv = LOW). Ein LOW Signal auf der Leitung /MREQ zeigt an, dass auf dem Adressbus ine gültige Adresse anliegt und entweder ein Byte gelesen (/RD=LOW)oder geschrieben (/WR=LOW) werden soll.
/WR | Write (Tri-State-Ausgang, aktiv = LOW). Ein LOW-Signal auf der Leitung /WR zeigt an, dass der Mikroprozessor m Datenbus gültige Daten ausgibt, die entweder in den Speicher oder n einen Peripheriebaustein geschrieben werden sollen.
/RD | Read (Tri-State-Ausgang, aktiv = LOW). Der Pin /RD wird von der CPU aktiviert, wenn Daten oder Befehle wischen Speicher bzw. Peripherie und der CPU transferiert werden ollen.
/REF | Refresh (Ausgang, aktiv = LOW). /REF zeigt an, dass die CPU auf den Adressleitungen A 0 -A 6 eine gültige Refreshadresse gelegt hat. Mit dieser Refreshadresse soll beim Auftreten von /MREQ=LOW ein Refresh aller RAMs durchgeführt werden.
/HALT | Halt (Ausgang, aktiv = LOW). /HALT zeigt an, dass die CPU den Befehl HALT ausgeführt hat und nun auf einen Interrupt (/NMI oder /INT) wartet, um wieder weiterzuarbeiten. Während der Haltperiode werden fortlaufend NOP-Befehle (no operation) ausgeführt, um den Refresh der Speicher zu gewährleisten.
/IORQ | Input Output Request (Ausgang, aktiv = LOW). Wenn dieses Signal auf LOW geht, enthält die untere Hälfte des Adressbusses eine gültige I/O-Adresse. Mit Hilfe der Signale /RD und /WR werden dann Daten geschrieben oder gelesen. /IORQ wird auch in einem Interrupt-Acknowledge-Zyklus (zusammen mit /M1) eingesetzt.

CPU-Steuerleitungen

/WAIT | Wait (Eingang, aktiv = LOW). Wird die Leitung /WAIT aktiviert, so wird die CPU während eines Speicher- oder eines I/O-Zugriffs angehalten, bis /WAIT wieder auf HIGH geht. Mit diesem Signal können langsame Speicher oder Peripheriebausteine mit einer zu schnellen CPU synchronisiert werden. Das /WAIT-Signal kann auch dazu verwendet werden, die CPU im Single-Step-Verfahren zu betreiben. ACHTUNG !! Solange die CPU im WAIT-Zustand ist, wird der Refresh unterdrückt.
/RESET | Reset (Eingang, aktiv = LOW). Ist dieser Anschluss aktiviert, wird die CPU initialisiert, wobei der Programmzähler auf null gesetzt wird, der maskierbare Interrupt deaktiviert wird, der Interruptmodus auf null gesetzt wird und die Register I und R mit dem Wert null geladen werden.
/BUSRQ | Bus Request (Eingang, aktiv = LOW). Das Signal /BUSRQ wird dazu verwendet, der CPU mitzuteilen, dass sie den Adressbus, den Datenbus und die Kontrollsignale mit Tri-State-Ausgang in den hochohmigen Zustand schaltet, damit ein anderer Prozessor auf den Bus zugreifen kann. Wenn /BUSRQ aktiviert worden ist, setzt die CPU nach der Beendigung des aktuellen Maschinenzyklus diese Leitungen in den hochohmigen Zustand und zeigt dies durch Aktivierung der Leitung /BUSAK an.
/BUSAK | Bus Acknowledge (Ausgang, aktiv = LOW). Zeigt an, dass der Busanforderung (siehe /BUSREQ) eines anderen Prozessors stattgegeben wurde und die entsprechenden Busleitungen sich im hochohmigen Zustand befinden. ACHTUNG !! Während /BUSAK aktiv ist, erfolgt kein Refresh der dynamischen RAMs.
CLK | Clock (Eingang). Der Anschluss CLK dient zur Synchronisation der internen Abläufe. Der Takt wird extern erzeugt und bestimmt die Arbeitsgeschwindigkeit des Mikroprozessors. Der Takt darf eine gewisse Maximalfrequenz (2.5 bis 8 MHz) nicht überschreiten, die in der Bauteilspezifikation angegeben ist. Außerdem darf diese Frequenz auch einen Minimalwert von 250 kHz nicht unterschreiten, da sonst die Register ihren Inhalt verlieren würden.

Interruptleitungen

/INT | Interrupt Request (Eingang, aktiv = LOW). Am Anschluss /INT können externe Bausteine eine Interruptanforderung an die CPU abgeben. Diese Anforderung wird akzeptiert, wenn das Interrupt-Enable-Flip-Flop auf 'Enable' steht und das /BUSRQ-Signal nicht aktiv ist. Der genaue Ablauf eines Interruptzyklus und die verschiedenen Arten der Interruptsteuerung sind auf Seite beschrieben.
/NMI | Non Maskable Interrupt Request (Eingang, aktiv = negative Flanke). Die nicht maskierbare Interruptanforderung hat eine höhere Priorität als die maskierbare (/INT) und wird immer am Ende eines Befehls angenommen. Beim Auftreten eines Signals an /NMI wird die CPU gezwungen, an die Stelle $0066 im Adressraum zu springen und dort die Programmausführung fortzusetzen. ACHTUNG!! Ein permanentes/WAIT-Signal verhindert die Beendigung eines Befehls und damit auch die Ausführung des NMI. Zur genaueren Beschreibung siehe Interruptverarbeitung.

Last Update: 2006-Jän-19


Registerstruktur

Die CPU besitzt 18 8-Bit-Register und vier 16-Bit-Register, wobei einige der 8-Bit-Register zu 16-Bit-Registern kombiniert werden können (je nach Befehl). Diese Register können in drei Gruppeneingeteilt werden:

  • Hauptregister
  • Alternative Register
  • Spezialregister
Z80 Registerstruktur

Hauptregister und alternative Register sind vollkommen gleich, wobei per Software zwischen den beiden Registersätzen umgeschaltet werden kann. Dies kann z.B. beim Auftreten von Interrupts vorteilhaft ausgenützt werden. Der Hauptregistersatz besteht aus acht 8-Bit-Registern (A, B, C, D, E, H, L, Flags), wobei sich sechs davon zu drei 16-Bit-Registern kombinieren lassen (BC, DE, HL). Spezielle Bedeutung dieser Register besitzen der Akkumulator und das Flag-Register.

Die Spezialregister beinhalten zwei allgemein verwendbare Pointer-Register (IX,IY), den Stack-Pointer (SP) und den Programm-Zähler (PC). Außerdem werden in je einem 8-Bit-Register der Interrupt-Vektor (I) und die aktuelle Refresh-Adresse(R) gespeichert.

Last Update: 2005-Okt-17


Interruptverarbeitung

Die CPU besitzt zwei Interruptleitungen (/NMI und /INT), die zur Entgegennahme von Unterbrechungsanforderungen vorgesehen sind. Die Unterschiede zwischen /NMI und /INT bestehen in der unterschiedlichen Priorität (Priorität des /NMI höher als von /INT) und in der Unmöglichkeit, die NMI-Anforderung per Software zu blockieren.

Der Eingang /NMI (non maskable interrupt) ist flankengetriggert (negative Flanke) und kann nicht ausgeschaltet (maskiert) werden. Eine NMI-Anforderung wird immer am Ende eines Befehlszyklus erkannt und führt zum Aufruf der NMI-Service-Routine, die fix an der Adresse 0066H stehen muss. Der nichtmaskierbare Interrupt wird normalerweise nur für Aufgaben eingesetzt, für die unter allen Umständen sichergestellt sein muss, dass sie rechtzeitig erledigt werden (z.B. Rettung des CPU-Zustandes bei drohendem Verlust der Versorgungsspannung).

Beim Auftreten einer NMI-Anforderung wird der Zustand des Interrupt-Enable-Flip-Flops (IEFF) abgespeichert und dann der maskierbare Interrupt (Eingang /INT) blockiert. Damit wird sichergestellt, dass die NMI-Service-Routine nicht unterbrochen wird. Am Ende der Service-Routine wird der Befehl RETN (return from non maskable interrupt) durchgeführt, der den ursprünglichen Zustand des IEFF wieder herstellt. Dieses Verfahren birgt jedoch die Gefahr in sich, dass der Inhalt des IEFF verloren geht, falls die NMI-Service-Routine durch eine zweite NMI-Anforderung unterbrochen wird.

Die Anforderung eines maskierbaren Interrupts (Leitung /INT) kann auf drei verschiedene Arten beantwortet werden. Welcher Interruptmodus verwendet wird, kann per Software eingestellt werden (Befehle IM0, IM1 und IM2). Modus 0entspricht dem Interruptzyklus der CPU 8080; hier muss das anfordernde Gerät im Interrupt-Acknowledge-Zyklus einen Befehl auf den Datenbus legen. Modus 1gleicht dem Verhalten auf eine NMI-Anforderung. Die CPU beginnt die Ausführungder Service-Routine bei einer fixen Adresse (0038H). Modus 2 stellt die flexibelste Art der Interruptanforderung zur Verfügung, indem die Adresse der Service-Routine aus dem CPU-internen Interruptvektorregister (high byte) und einer vom peripheren Chip erzeugten Adresse (low byte) gebildet wird. Dieser Modus wird aber nur von Z80-Peripheriebausteinen unterstützt.

Last Update: 2005-Okt-11


Befehlssatz

Im Folgenden ist der Befehlssatz der CPU beschrieben, wobei Befehle, die das gleiche bewirken, aber auf verschiedene Registerangewendet werden können, zusammengefasst sind. Eine alphabetisch sortierte Tabelle aller Z80-Befehle mit Maschinencode und Ausführungszeiten findet sich im Anhang.

Die Syntax der Befehlsbeschreibung hält sich an die von Zilog vorgeschlagenen Mnemotischen Codes. Dabei steht zuerst der Code für den Befehl (z.B. 'PUSH') und dann, durch ein Blank oder durch einen Tabulator getrennt, die Operanden. Wirkt ein Befehl auf zwei Operanden, so wird zuerst der Zieloperand angegeben und dann durch einen Beistrich getrennt der Quelloperand. Der Befehl 'LD A,H' lädt also den Inhalt des Registers H in das Register A.

Konstanten werden als Zahl angegeben, indirekte Adressierung wird durch zweirunde Klammern symbolisiert. Der Befehl 'LD HL,(3E8AH)' lädt das16-Bit-Register HL mit einem Wert aus dem Speicher an der Adresse 3E8AH.16-Bit-Werte ('Worte' im Gegensatz zu 'Bytes') werden im Speicher an zwei aufeinander folgenden Speicherplätzen abgelegt, wobei das nieder wertige Byte an der niedrigeren Adresse gespeichert wird, das höherwertige Byte an der höheren.

In der folgenden Befehlsbeschreibung werden für verschiedene Register Platzhalter verwendet, die dann entsprechend eingesetzt werden müssen:

String | Platzhalter für
r1, r2 | A, B, C, D, E, H, L
qq | AF, BC, DE, HL
dd | BC, DE, HL, SP
nn | Byte (8 Bit)
nnnn | Wort (16 Bit)
d | 8 Bit Offset (-128 bis +127)

Last Update: 2005-Okt-08


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Ladebefehle
Index
Siehe auch: Input/Output Befehle, Blockbefehle

Ladebefehle

Ladebefehle bewirken den Transport von Information von einer Stelle im Computersystem zu einer anderen Stelle. Die Quell- und Zieloperanden können entweder Register oder eine Stelle im Speicher sein, der Quelloperand bleibt dabei unverändert. Manche dieser Befehle bewegen jeweils ein Byte, manche ein Wort. Die Flags bleiben bei allen Ladebefehlen unverändert, ausgenommen die Befehle zum Laden der Register I und R in den Akkumulator.

Befehl | Kurzbeschreibung | Erläuterung | Flags
LD r1,r2 | r1 <-- r2 | Lädt das Register r1 mit dem Inhalt von Register r2. | unverändert
LD r1,nn | r1 <-- nnnn | Lädt das Register r1 mit der Konstante nn. unverändert |
LD r1,(HL) | r1 <-- (HL) | Lädt das Register r1 mit dem Wert, der im Speicher an der Stelle steht, die durch das Register HL adressiert wird. | unverändert
LD r1,(IX+d) LD r1,(IY+d) | r1 <-- (IX+d), r1 <-- (IY+d) | Lädt das Register r1 mit dem Wert, der im Speicher an der Stellesteht, die durch das Register IX + Offset d (bzw. IY + Offset d)adressiert wird. Beispiel: LD A,(IX+12) lädt das Register A mit dem Wert aus dem Speicher an der Adresse IX+12. | unverändert
LD (HL),r1 | (HL) <-- r1 | Speichert den Inhalt von Register r1 an der Stelle im Speicher, die durch das Register HL adressiert wird. | unverändert
LD (IX+d),r1 LD (IY+d),r1 | (IX+d) <-- r1, (IY+d) <-- r1 | Speichert den Inhalt von Register r1 an der Stelle im Speicher,die durch das Register IX + Offset d (bzw. IY + Offset d)adressiert wird. | unverändert
LD A,(BC) | A <-- (BC) | Lädt den Inhalt der Speicherzelle, die durch das Register BC adressiert wird, in das Register A. | unverändert
LD A,(DE) | A <-- (DE) | Lädt den Inhalt der Speicherzelle, die durch das Register DE adressiert wird, in das Register A. | unverändert
LD A,(nnnn) | A <-- (nnnn) | Lädt den Inhalt der Speicherzelle nnnn in das Register A. | unverändert
LD (BC),A | (BC) <-- A | Speichert den Inhalt von Register A in der Speicherzelle, die durch BC adressiert wird. | unverändert
LD (DE),A | (DE) <-- A | Speichert den Inhalt von Register A in der Speicherzelle, die durch DE adressiert wird. | unverändert
LD (nnnn),A | (nnnn) <-- A | Speichert den Inhalt von Register A in der Speicherzelle nnnn. | unverändert
LD A,I | A <-- I | Lädt den Inhalt von Register I in das Register A. | Z = 1 falls I=0
 |  |  | S = Bit 7 von I
 |  |  | P/V = Zustand des Interrupt-Enable-Flip-Flops.
LD A,R | A <-- R | Lädt den Inhalt von Register R in das Register A. | Z = 1 falls R=0
 |  |  | S = Bit 7 von R
 |  |  | P/V = Zustand des Interrupt-Enable-Flip-Flops
LD I,A | I <-- A | Das Register I wird mit dem Inhalt des Registers A geladen. | unverändert
LD R,A | R <-- A | Das Register R wird mit dem Inhalt des Registers A geladen. | unverändert
LD dd,nnnn | dd <-- nnnn | Das 16-Bit-Register dd wird mit der Konstante nnnn geladen. | unverändert
LD IX,nnnn LD IY,nnnn | IX <-- nnnn, IY <-- nnnn | Das Register IX bzw. IY wird mit der Konstante nnnn geladen. | unverändert
LD dd,(nnnn) | dd <-- (nnnn) | Das Register dd wird mit dem Wort, das an der Stelle nnnn im Speicher liegt, geladen. | unverändert
LD IX,(nnnn) LD IY,(nnnn) | IX <-- (nnnn), IY <-- (nnnn) | Das Register IX bzw. IY wird mit dem Wort, das an der Stelle nnnn im Speicher liegt, geladen. | unverändert
LD (nnnn),dd | (nnnn) <-- dd | Der Inhalt des Registers dd wird an der Stelle nnnn im Speicherabge‑legt. | unverändert
LD (nnnn),IX LD (nnnn),IY | (nnnn) <-- IX, (nnnn) <-- IY | Der Inhalt des Registers IX bzw. IY wird an der Stelle nnnn im Speicher abgelegt. | unverändert
LD SP,HL | SP <-- HL | Lädt den Stackpointer mit dem Inhalt des Registers HL. | unverändert
LD SP,IX LD SP,IY | SP <-- IX, SP <-- IY | Lädt den Stackpointer mit dem Inhalt des Registers IX bzw. IY. | unverändert
PUSH qq | (SP) <-- qq, SP <-- SP-2 | Lädt den Inhalt des Registers qq auf den Stack. Der Stackpointer wird um zwei erniedrigt. | unverändert
PUSH IX PUSH IY | (SP) <-- IX (oder IY), SP <-- SP-2 | Lädt den Inhalt des Registers IX bzw. IY auf den Stack. Der Stackpointer wird um zwei erniedrigt. | unverändert
POP qq | SP <-- SP+2, qq <-- (SP) | Lädt den Inhalt des Stacks in das Register qq. Der Stackpointer wird um zwei erhöht. | unverändert
POP IX POP IY | SP <-- SP+2, IX (oder IY) <-- (SP) | Lädt den Inhalt des Stacks in das Register IX bzw. IY. Der Stackpointer wird um zwei erhöht. | unverändert

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Austauschbefehle
Index
Siehe auch: Rotations- und Schiebebefehle

Austauschbefehle

Austauschbefehle führen einen Austausch der Inhalte von zwei Operanden durch. Die Operanden können entweder Register oder der Stack sein. Je nach Breite der Operanden werden ein Byte oder ein Wort ausgetauscht.

Befehl | Kurzbeschreibung | Erläuterung | Flags
EX DE,HL | DE <--> HL | Tauscht den Inhalt der beiden Doppelregister DE und HL aus. | unverändert
EX AF,AF' | AF <--> AF' | Tauscht den Inhalt der beiden Register AF und AF' aus. Dieser Befehl wird in Kombination mit dem Befehl EXX zum Austausch der kompletten Arbeitsregisterbank (Register AF, BC, DE und HL)verwendet. | ausgetauscht mit F'
EXX | HL <--> HL', DE <--> DE', BC <--> BC' | Tauscht die Inhalte der Register BC, DE und HL mit den Inhalten der Register BC', DE' und HL'. | unverändert
EX (SP),HL | (SP) <--> HL | Tauscht den Inhalt des zuletzt am Stack abgelegten Wertes mit dem Inhalt von HL aus. Dieser Befehl kann dazu verwendet werden, Parameter, die mit PUSH auf den Stack gelegt wurden, direkt(ohne POP und PUSH) gegen HL auszutauschen. Außerdem kann man damit bei Unterprogrammaufrufen die Rücksprungadresse bequem austauschen. | unverändert
EX (SP),IX | (SP) <--> IX oder (SP) <--> IYEX (SP),IY | Tauscht den Inhalt des zuletzt am Stack abgelegten Wertes mit dem Inhalt von IX bzw. IY aus. Dieser Befehl kann dazu verwendet werden, Parameter, die mit PUSH auf den Stack gelegt wurden, direkt (ohne POP und PUSH) gegen IX bzw. IY auszutauschen. | unverändert

Last Update: 2005-Okt-17


Blockbefehle

Blockbefehle werden verwendet, wenn man eine Reihe von Speicherzellen mit aufeinander folgenden Adressen dem gleichen Vorgang unterziehen möchte. Es gibt Blockbefehle zum Laden und zum Vergleichen von Variablen. Jeden dieser Befehle gibt es auch als Variante, bei der die angestrebte Operation nur einmal auftritt, die Wiederholung also entfällt. Die Blockbefehle, die auf die I/O-Ports wirken, werden bei den I/O-Operationen besprochen.

Befehl | Kurzbeschreibung | Erläuterung | Flags
LDI | (DE) <-- (HL), HL <-- HL+1, DE <-- DE+1, BC <-- BC-1 | Lädt den Inhalt der von HL adressierten Speicherzelle in die von DE adressierte Speicherzelle. Danach wird der Wert von HL und DEum eins erhöht und der Wert von BC um eins erniedrigt. | H=0
 |  |  | N=0
 |  |  | P/V=0, wenn BC=0
 |  |  | Alle anderen Flags bleiben unverändert
LDIR | (DE) <-- (HL), HL <-- HL+1, DE <-- DE+1, BC <-- BC-1 | Lädt den Inhalt der von HL adressierten Speicherzelle in die von DE adressierte Speicherzelle. Danach wird der Wert von HL und DE um eins erhöht und der Wert von BC um eins erniedrigt. Falls BC nach dem Dekrementieren ungleich null ist, wird der Vorgang wiederholt, bis BC gleich null ist. BC gibt also die Zahl der Verschiebe-Operationen an. | H=0
 |  |  | N=0
 |  |  | P/V=0
 |  |  | Alle anderen Flags bleiben unverändert.
LDD | (DE) <-- (HL), HL <-- HL-1, DE <-- DE-1, BC <-- BC-1 | Lädt den Inhalt der von HL adressierten Speicherzelle in die von DE adressierte Speicherzelle. Danach wird der Wert der Register HL, DE und BC um eins erniedrigt | H=0
 |  |  | N=0
 |  |  | P/V=0, wenn BC=0
 |  |  | Alle anderen Flags bleiben unverändert.
LDDR | (DE) <-- (HL), HL <-- HL-1, DE <-- DE-1, BC <-- BC-1 | Lädt den Inhalt der von HL adressierten Speicherzelle in die von DE adressierte Speicherzelle. Danach wird der Wert der Register HL, DE und BC um eins erniedrigt. Falls BC nach dem Dekrementieren ungleich null ist, wird der Vorgang wiederholt, bis BC gleich null ist. BC gibt also die Zahl der Verschiebeoperationen an. | H=0
 |  |  | N=0
 |  |  | P/V=0
 |  |  | Alle anderen Flags bleiben unverändert.
CPI | A-(HL), HL <-- HL+1, BC <-- BC-1 | Vergleicht den Inhalt der von HL adressierten Speicherzelle mit dem Inhalt des Akkumulators (Subtraktion A-(HL)). Danach wird der Wert von HL inkrementiert und der Wert von BC dekrementiert. | N=1
 |  |  | P/V=0, wenn BC = 0
 |  |  | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn A = (HL)
 |  |  | H=1, wenn kein Übertrag von Bit 4, sonst H=0
CPIR | A-(HL), HL <-- HL+1, BC <-- BC-1 | Vergleicht den Inhalt der von HL adressierten Speicherzelle mit dem Inhalt des Akkumulators. Danach wird der Wert von HL inkrementiert und der Wert von BC um eins erniedrigt. Falls BC nach dem Dekrementieren ungleich null ist, wird der Vorgang wiederholt, bis BC gleich null ist. BC gibt also die Zahl der Vergleichsoperationen an. | N=1
 |  |  | P/V=1, wenn BC <> 0, sonst P/V=0
 |  |  | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn A = (HL)
 |  |  | H=1, wenn kein Übertrag von Bit 4, sonst H=0
CPD | A-(HL), HL <-- HL-1, BC <-- BC-1 | Vergleicht den Inhalt der von HL adressierten Speicherzelle mit dem Inhalt des Akkumulators. Danach wird der Wert der Register HL und BC dekrementiert. | N=1
 |  |  | P/V=1, wenn BC <> 0, sonst P/V=0
 |  |  | S=1, wenn Ergebnis negativ
 |  |  | H=1, wenn kein Übertrag von Bit 4, sonst H=0
CPDR | A-(HL), HL <-- HL-1, BC <-- BC-1 | Vergleicht den Inhalt der von HL adressierten Speicherzelle mit dem Inhalt des Akkumulators. Danach wird der Wert der Register HL und BC um eins erniedrigt. Falls BC nach dem Dekrementieren ungleich null ist, wird der Vorgang wiederholt, bis BC gleich null ist. BC gibt also die Zahl der Vergleichsoperationen an. | N=1
 |  |  | P/V=1, wenn BC <> 0, sonst P/V=0
 |  |  | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn A = (HL)
 |  |  | H=1, wenn kein Übertrag von Bit 4, sonst H=0

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Arithmetisch-Logische Befehle
Index
Siehe auch: Bitmanipulation

Arithmetisch-Logische Befehle

Befehl | Kurzbeschreibung | Erläuterung | Flags
ADD A,r | A <-- A + r | Der Inhalt des Registers r wird zum Inhalt des Akkumulators addiert; das Ergebnis wird im Akkumulator abgelegt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADD A,nn | A <-- A + nn | Die Konstante nn wird zum Register A addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADD A,(HL) | A <-- A + (HL) | Der Inhalt der Speicherzelle, die durch HL adressiert wird, wird zum Register A addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADD A,(IX+dd) ADD A,(IY+dd) | A <-- A + (IX+dd) A <-- A + (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. IY+dd adressiert wird, wird zum Register A addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADC A,r | A <-- A + r + CF | Der Inhalt des Registers r wird zum Inhalt des Akkumulators unter Einbeziehung des Carry-Flags addiert; das Ergebnis wird im Akkumulator abgelegt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADC A,nn | A <-- A + nn + CF | Die Konstante nn wird zum Register A unter Einbeziehung des Carry-Flags addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADC A,(HL) | A <-- A+(HL)+CF | Der Inhalt der Speicherzelle, die durch HL adressiert wird, wird zum Register A unter Einbeziehung des Carry-Flags addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
ADC A,(IX+dd) ADC A,(IY+dd) | A <-- A+(IX+dd)+CF A <-- A+(IY+dd)+CF | Der Inhalt der Speicherzelle, die durch IX+dd bzw. IY+dd adressiert wird, wird unter Einbeziehung des Carry-Flags zum Register A addiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SUB A,r | A <-- A - r | Der Inhalt des Registers r wird vom Inhalt des Akkumulators subtrahiert; das Ergebnis wird im Akkumulator abgelegt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SUB A,nn | A <-- A - nn | Die Konstante nn wird vom Register A subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SUB A,(HL) | A <-- A - (HL) | Der Inhalt der Speicherzelle, die durch HL adressiert wird, wird vom Register A subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SUB A,(IX+dd) SUB A,(IY+dd) | A <-- A - (IX+dd) A <-- A - (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. IY+dd adressiert wird, wird vom Register A subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SBC A,r | A <-- A - r - CF | Der Inhalt des Registers r wird vom Inhalt des Akkumulators unter Einbeziehung des Carry-Flags subtrahiert; das Ergebnis wird im Akkumulator abgelegt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SBC A,nn | A <-- A - nn - CF | Die Konstante nn wird vom Register A unter Einbeziehung des Carry-Flags subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SBC A,(HL) | A <-- A - (HL) - CF | Der Inhalt der Speicherzelle, die durch HL adressiert wird, wird vom Register A unter Einbeziehung des Carry-Flags subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
SBC A,(IX+dd) SBC A,(IY+dd) | A <-- A-(IX+dd)–CF A <-- A-(IY+dd)-CF | Der Inhalt der Speicherzelle, die durch IX+dd bzw. IY+dd adressiert wird, wird unter Einbeziehung des Carry-Flags vomRegister A subtrahiert; das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
AND r | A <-- A AND r | Der Inhalt des Registers r wird mit dem Inhalt des Akkumulators durch ein logisches UND bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
AND nn | A <-- A AND nn | Die Konstante nn wird mit dem Inhalt des Akkumulators durch ein logisches UND bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
AND (HL) | A <-- A AND nn | Der Inhalt der Speicherzelle, die durch Register HL adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches UND bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
AND (IX+dd) AND (IY+dd) | A <-- A AND (IX+dd) A <-- A AND (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. durch IY+dd adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches UND bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
OR r | A <-- A OR r | Der Inhalt des Registers r wird mit dem Inhalt des Akkumulators durch ein logisches ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
OR nn | A <-- A OR nn | Die Konstante nn wird mit dem Inhalt des Akkumulators durch ein logisches ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
OR (HL) | A <-- A OR nn | Der Inhalt der Speicherzelle, die durch Register HL adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
OR (IX+dd) OR (IY+dd) | A <-- A OR (IX+dd) A <-- A OR (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. durch IY+dd adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
XOR r | A <-- A XOR r | Der Inhalt des Registers r wird mit dem Inhalt des Akkumulators durch ein logisches exklusives ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
XOR nn | A <-- A XOR nn | Die Konstante nn wird mit dem Inhalt des Akkumulators durch ein logisches exklusives ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
XOR (HL) | A <-- A XOR nn | Der Inhalt der Speicherzelle, die durch Register HL adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches exklusives ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
XOR (IX+dd) XOR (IY+dd) | A <-- A XOR (IX+dd) A <-- A XOR (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. durch IY+dd adressiert wird, wird mit dem Inhalt des Akkumulators durch ein logisches exklusives ODER bitweise verknüpft. Das Ergebnis wird im Akkumulator abgespeichert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1
 |  |  | C=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
CP r | A - r | Der Inhalt des Registers r wird mit dem Inhalt des Akkumulators verglichen. Es werden keine Register geändert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
CP nn | A - nn | Die Konstante nn wird mit dem Akkumulator verglichen. Es werden keine Register geändert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
CP (HL) | A - (HL) | Der Inhalt der Speicherzelle, die durch HL adressiert wird, wird mit Register A verglichen. Es werden keine Register geändert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
CP (IX+dd) CP (IY+dd) | A - (IX+dd) A - (IY+dd) | Der Inhalt der Speicherzelle, die durch IX+dd bzw. IY+dd adressiert wird, wird mit Register A verglichen. Es werden keine Register geändert. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Übertrag von Bit 7
 |  |  | N=1
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
INC r | r <-- r + 1 | Der Inhalt des Registers r wird um eins erhöht. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
INC (HL) | (HL) <-- (HL) + 1 | Der Inhalt der Speicherzelle, die von HL adressiert wird, wird um eins erhöht. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
INC (IX+dd) INC (IY+dd) | (IX+dd) <--(IX+dd)+1 (IY+dd) <--(IY+dd)+1 | Der Inhalt der Speicherzelle, die von IX+dd bzw. IY+dd adressiert wird, wird um eins erhöht. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 3, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Überlauf, sonst P/V=0
DEC r | r <-- r - 1 | Der Inhalt des Registers r wird um eins erniedrigt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Unterlauf, sonst P/V=0
DEC (HL) | (HL) <-- (HL) - 1 | Der Inhalt der Speicherzelle, die von HL adressiert wird, wird um eins erniedrigt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Unterlauf, sonst P/V=0
DEC (IX+dd) DEC (IY+dd) | (IX+dd)<--(IX+dd)–1 (IY+dd)<--(IY+dd)-1 | Der Inhalt der Speicherzelle, die von IX+dd bzw. IY+dd adressiert wird, wird um eins erniedrigt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn Übertrag von Bit 4, sonst H=0
 |  |  | C bleibt unverändert
 |  |  | N=0
 |  |  | P/V=1, wenn Unterlauf, sonst P/V=0
CPL | A <-- not A | Der Inhalt des Akkumulators wird Bit für Bit invertiert und wieder im Akkumulator abgelegt. | H=1
 |  |  | N=1
 |  |  | alle anderen Flags unverändert
NEG | A <-- 0 - A | Zum Inhalt des Akkumulators wird das 2er-Komplement gebildet und das Ergebnis wieder im Akkumulator abgelegt. | S=1, wenn Ergebnis negativ
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H=1, wenn kein Übertrag von Bit 4, sonst H=0
 |  |  | C=1, wenn Ergebnis <> 0, sonst C=0
 |  |  | N=1
 |  |  | P/V=1, wenn Akkumulator = 80H vor der Negation
DAA | Dezimalanpassung. | Der Inhalt des Akkumulators wird in eine gepackte BCD-Zahl umgeformt. Dieser Befehl darf nur nach einer Addition bzw. Subtraktion verwendet werden und dient zur Unterstützung von Addition und Subtraktion mit BCD-Zahlen. | S = Bit 7 des Akkumulators
 |  |  | Z=1, wenn Ergebnis = 0
 |  |  | H verändert
 |  |  | C verändert
 |  |  | N unverändert
 |  |  | P/V=1 wenn Akku‑mula‑tor gerade Anzahl von Nullbits enthält

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Rotations- und Schiebebefehle
Index
Siehe auch: Austauschbefehle

Rotations- und Schiebebefehle

Rotations- und Schiebebefehle verschieben die einzelnen Bits in einem Register um jeweils n Stellen nach links (zu höherwertigen Stellen) oder rechts (zu niederwertigen Stellen). Je nachdem, was mit den Randbits geschieht, unterscheidet man unter schiedliche Typen von Befehlen: Rotation mit und ohne Carry-Flag, logisches Schieben und arithmetisches Schieben. Beim arithmetischen Schieben bleibt das Vorzeichen einer Zahl, die im Zweierkomplement dargestellt ist, erhalten. Je nach Art des verwendeten Mikroprozessors können die Bits pro Schiebeoperation um eine oder auch mehrere Binärstellen verschoben werden. Die Z80-CPU ermöglicht nur Schiebe- und Rotationsoperationen um jeweils eine Binärstelle, wobei zwei spezielle Befehle existieren (RLD, RRD), die jeweils 4-Bit-Bewegungen ermöglichen. Die Abbildung zeigt eine Zusammenfassung aller Typen von Schiebe- und Rotationsoperationen der Z80.

Zusammenfassung der Schiebe- und Rotationsbefehle
Befehl | Kurzbeschreibung | Erläuterung | Flags
RLCA | Rotation nach links. | Der Inhalt des Akkumulators wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 des Akkumulators
 |  |  | alle anderen Flags bleiben unverändert
RLA | Rotation nach links über Carry-Flag. | Der Inhalt des Akkumulators wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 7 des Akkumulators
 |  |  | alle anderen Flags bleiben unverändert
RRCA | Rotation nach rechts. | Der Inhalt des Akkumulators wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Akkumulators
 |  |  | alle anderen Flags bleiben unverändert
RRA | Rotation nach rechts über Carry-Flag. | Der Inhalt des Akkumulators wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Akkumulators
 |  |  | alle anderen Flags bleiben unverändert
RLC r | Rotation nach links. | Der Inhalt des Registers r wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RLC (HL) | Rotation nach links. | Der Inhalt der durch das Register HL adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RLC (IX+dd) RLC (IY+dd) | Rotation nach links. | Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 von (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RL r | Rotation nach links über Carry-Flag. | Der Inhalt des Registers r wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 7 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RL (HL) | Rotation nach links über Carry-Flag. | Der Inhalt der durch HL adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 7 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RL (IX+dd) RL (IY+dd) | Rotation nach links über Carry-Flag. | Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 7 der Speicherzelle (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RRC r | Rotation nach rechts. | Der Inhalt des Registers r wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RRC (HL) | Rotation nach rechts. | Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7 übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RRC (IX+dd) RRC (IY+dd) | Rotation nach rechts. | Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. durch(IY+dd) adressiert wird, wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7übertragen wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RR r | Rotation nach rechts über Carry-Flag. | Der Inhalt des Registers r wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RR (HL) | Rotation nach rechts über Carry-Flag. | Der Inhalt der durch HL adressierten Speicherzelle wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RR (IX+dd) RR (IY+dd) | Rotation nach rechts über Carry-Flag. | Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits). | H=0
 |  |  | N=0
 |  |  | C = Bit 0 von (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SLA r | Arithmetisches Schieben nach links. | Der Inhalt des Registers r wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SLA (HL) | Arithmetisches Schieben nach links. | Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SLA (IX+dd) SLA (IY+dd) | Arithmetisches Schieben nach links. | Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 7 der Speicherzelle (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRA r | Arithmetisches Schieben nach rechts. | Der Inhalt des Registers r wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRA (HL) | Arithmetisches Schieben nach rechts. | Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRA (IX+dd) SRA (IY+dd) | Arithmetisches Schieben nach rechts. Arithmetisches Schieben nach rechts. | Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 von (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRL r | Logisches Schieben nach rechts. | Der Inhalt des Registers r wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 des Registers r
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRL (HL) | Logisches Schieben nach rechts. | Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (HL)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
SRL (IX+dd) SRL (IY+dd) | Logisches Schieben nach rechts. | Der Inhalt der Speicherzelle, die durch (IX-dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird. | H=0
 |  |  | N=0
 |  |  | C = Bit 0 der Speicherzelle (IX+dd) bzw. (IY+dd)
 |  |  | S=1, wenn Ergebnis negativ, sonst S=0
 |  |  | Z=1, wenn Ergebnis gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität gerade, sonst P/V=0
RLD | 4-Bit-Rotation nach links. | Bei dieser 4-Bit-Rotation werden der Akkumulator und eine durch HL adressierte Speicherzelle verändert. Die unteren vier Bits der Speicherzelle werden in die obere Hälfte der Zelle kopiert. Der zuvor gerettete Inhalt der oberen Hälfte der Speicherzelle wird in die untere Hälfte des Akkumulators kopiert und dessen(zuvor gerettete) untere Hälfte wird in die untere Hälfte der Speicherzelle kopiert. Diese Operation kann vorteilhaft bei der Verarbeitung von BCD-Zahlen verwendet werden. | H=0
 |  |  | N=0
 |  |  | C unverändert
 |  |  | S=1, wenn Akkumulator negativ, sonst S=0
 |  |  | Z=1, wenn Akkumulator gleich null, sonst Z=0
 |  |  | P/V=1, wenn die Parität im Akkumulator gerade
RRD | 4-Bit-Rotation nach rechts. | Bei dieser 4-Bit-Rotation werden der Akkumulator und eine durch HL adressierte Speicherzelle verändert. Die unteren vier Bits der Speicherzelle werden in die untere Hälfte des Akkumulators kopiert. Der zuvor gerettete Inhalt der unteren Hälfte des Akkumulators wird in die obere Hälfte der Speicherzelle kopiert und die (zuvor gerettete) obere Hälfte der Speicherzelle wird in die untere Hälfte der Speicherzelle kopiert. Diese Operation kann vorteilhaft bei der Verarbeitung von BCD-Zahlen verwendet werden. | H=0
 |  |  | N=0
 |  |  | C unverändert
 |  |  | S=1, wenn Akkumulator negativ, sonst S=0
 |  |  | Z=1, wenn Akkumulator gleich null, sonst Z=0
 |  |  | P/V=1, wenn Parität im Akkumulator gerade

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Bitmanipulation
Index
Siehe auch: Arithmetisch-Logische Befehle

Bitmanipulation

Befehl | Kurzbeschreibung | Erläuterung | Flags
BIT b,r | Bit-Test. | Das Bit b (b=0-7) des Registers r wird invertiert und ins Zero-Flag kopiert. | H=1
 |  |  | N=0
 |  |  | C unverändert
 |  |  | S unbestimmt
 |  |  | Z=1, wenn spezifiziertes Bit gleich null ist
 |  |  | P/V unbestimmt
BIT b,(HL) | Bit-Test. | Das Bit b (b=0-7) der Speicherzelle, die durch das Register HL adressiert wird, wird invertiert und ins Zero-Flag kopiert. | H=1
 |  |  | N=0
 |  |  | C unverändert
 |  |  | S unbestimmt
 |  |  | Z=1, wenn spezifiziertes Bit gleich null ist
 |  |  | P/V unbestimmt
BIT b,(IX+dd) BIT b,(IY+dd) | Bit-Test. | Das Bit b (b=0-7) der Speicherzelle, die durch (IX+dd) bzw.(IY+dd) adressiert wird, wird invertiert und ins Zero-Flag kopiert. | H=1
 |  |  | N=0
 |  |  | C unverändert
 |  |  | S unbestimmt
 |  |  | Z=1, wenn spezifiziertes Bit gleich null ist
 |  |  | P/V unbestimmt
SET b,r | Bit setzen. | Das Bit b (b=0-7) des Registers r wird auf eins gesetzt. | unverändert
SET b,(HL) | Bit setzen. | Das Bit b (b=0-7) der Speicherzelle, die durch das Register HL adressiert wird, wird auf eins gesetzt. | unverändert
SET b,(IX+dd) SET b,(IY+dd) | Bit setzen. | Das Bit b (b=0-7) der Speicherzelle, die durch (IX+dd) bzw.(IY+dd) adressiert wird, wird auf eins gesetzt. | unverändert
RES b,r | Bit rücksetzen. | Das Bit b (b=0-7) des Registers r wird auf null gesetzt. | unverändert
RES b,(HL) | Bit setzen. | Das Bit b (b=0-7) der Speicherzelle, die durch das Register HL adressiert wird, wird auf null gesetzt. | unverändert
RES b,(IX+dd) RES b,(IY+dd) | Bit setzen. | Das Bit b (b=0-7) der Speicherzelle, die durch (IX+dd) bzw.(IY+dd) adressiert wird, wird auf null gesetzt. | unverändert

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] Sprungbefehle, Unterprogrammaufrufe
Index
Siehe auch: CPU-Kontrollbefehle

Sprungbefehle, Unterprogrammaufrufe

Befehl Kurzbeschreibung Erläuterung Flags

JP nnnn

PC <-- nnnn

Die Konstante nnnn wird in den Program Counter geladen, wodurch das Programm ab der Adresse nnnn weiter bearbeitet wird.

unverändert

JP cc,nnnn

Wenn Bedingung cc erfüllt:
PC <-- nnnn

Die Konstante nnnn wird in den Program Counter geladen, wenn die Bedingung cc erfüllt ist. Dadurch wird das Programm ab der Adresse nnnn weiter bearbeitet. Wenn die Bedingung cc nicht erfüllt ist, wird PC le‑dig‑lich inkrementiert und das Programm arbeitet mit der nächsten Instruktion weiter. Als Bedingungen werden die Zustände der Flags Z, C, P/V und S verwendet. Für den JP-Befehl können für cc folgende Bedingungen eingesetzt werden:

              Z          Z=1        null
              NC         C=0        kein Übertrag
              C          C=1        Übertrag
              PO         P/V=0      Parität ungerade
              PE         P/V=1      Parität gerade
              P          S=0        Vorzeichen positiv
              M          S=1        Vorzeichen negativ

unverändert

JP (HL)

PC <-- HL

Der Inhalt des Registers HL wird in den Programmzähler geladen, wodurch das Programm ab der Adresse HL weiter bearbeitet wird. Deser Befehl ist neben JP (IX), JP (IY) und RET der einzige Befehl für den Sprung an eine während der Laufzeit errechnete Stelle im Programm (computed GOTO).

unverändert

JP (IX)

JP (IY)

PC <-- IX

PC <-- IY

Der Inhalt des Registers IX bzw. IY wird in den Program Counter geladen, wodurch das Programm ab der Adresse IX bzw. IY weiterbearbeitet wird. Diese Befehle sind neben JP (HL) und RET die einzigen Befehle für den Sprung an eine während der Laufzeit errechnete Stelle im Programm (computed GOTO).

unverändert

JR nn

PC <-- PC + nn

Die Konstante nn wird zum Program Counter addiert, was einem relativen Sprung entspricht. Sie wird als 2er-Komplement notiert und kann Werte von -128 bis +127 annehmen. Die Konstante wird um Wert des PCs nach Einlesen dieses Befehls addiert, d. h. dass die tatsächlich mögliche Sprungweite (gerechnet von der Adresse es Sprungbefehls aus) von -126 bis +129 geht.

unverändert

JR cc,nn

Wenn Bedingung erfüllt: PC <-- PC + nn

Wenn die Bedingung cc erfüllt ist, wird die Konstante nn zum Program Counter addiert, was einem bedingten relativen Sprungentspricht (siehe auch JR nn). Als Bedingungen können für cc folgende Codes eingesetzt werden:

              C   C=1  Übertrag
              NC  C=0  kein Übertrag
              Z   Z=1  null
              NZ  Z=0  nicht null

unverändert

DJNZ nn

Decrement and Jump if Not Zero

Das Register B wird um eins dekrementiert und, falls B ungleich null ist, wird die Konstante nn zum Program Counter addiert, ansonsten wird der nächste Befehl abgearbeitet. Die Konstante wird als 2er Komplement notiert und kann Werte von 128 bis +127annehmen

unverändert

CALL nnnn

SP) <-- PC, SP <-- SP - 2, PC <-- nnnn

Zuerst wird der aktuelle Wert des Program Counters auf den Stack gelegt und dann wird dieser mit der Konstante nnnn geladen. Dies entspricht einem Unterprogrammaufruf an der Stelle nnnn.

unverändert

CALL cc,nnnn

Wenn Bedingung erfüllt:(SP) <-- PC, SP <-- SP-2, PC <-- nnnn

Bei Erfüllung der Bedingung cc wird zuerst der aktuelle Wert des Program Counters auf den Stack gelegt und dann dieser mit der Konstante nnnn geladen. Dies entspricht einem bedingten Unterprogrammaufruf an der Stelle nnnn. Als Bedingungen können für cc folgende Codes eingesetzt werden:

            NZ          Z=0         nicht null
            Z           Z=1         null
            NC          C=0         kein Übertrag
            C           C=1         Übertrag
            PO          P/V=0       Parität ungerade
            PE          P/V=1       Parität gerade
            P           S=0         Vorzeichen positiv
            M           S=1         Vorzeichen negativ

unverändert

RET

PC <-- (SP), SP <-- SP+2

Der Program Counter wird mit dem obersten Wert des Stacks geladen, wodurch der Mikroprozessor mit der Programmausführungan der Adresse, die am Stack abgelegt war, weitermacht

unverändert

RET cc

Wenn Bedingung erfüllt: PC <-- (SP), SP <-- SP+2

Falls die Bedingung cc erfüllt ist, wird der Program Counter mit dem obersten Wert des Stacks geladen, wodurch der Mikroprozessor mit der Programmausführung an der Adresse, die am Stack abgelegt war, weitermacht. Als Bedingungen können für cc folgende Codes eingesetzt werden:

            NZ          Z=0                     nicht null
            Z           Z=1                     null
            NC          C=0                     kein Übertrag
            C           C=1                     Übertrag
            PO          P/V=0                   Parität ungerade
            PE          P/V=1                   Parität gerade
            P           S=0                     Vorzeichen positiv
            M           S=1                     Vorzeichen negativ

unverändert

RETI

Return nach maskierbarem Interrupt

Dieser Befehl wird am Ende einer Interrupt-Service-Routine eingesetzt um den Rücksprung ins unterbrochene Hauptprogramm zu machen und um gleichzeitig dem IO-Baustein zu signalisieren, dass der Interruptzyklus abgeschlossen ist. Die IFF1- undIFF2-Flip-Flops werden zurückgesetzt

unverändert

RETN

Return nach nicht maskierbarem Interrupt

Dieser Befehl wird am Ende einer Interrupt-Service-Routine fürden nicht maskierbaren Interrupt (NMI) eingesetzt, um den Rücksprung ins unter‑brochene Hauptprogramm zu machen. Der Zustand des IFF2-Flip-Flops wird in das IFF1-Flip-Flop kopiert

unverändert

RST x

Restart

Dieser Befehl ermöglicht einen Unterprogrammaufruf, der nur ein Byte Op Code benötigt. Dabei werden in Abhängigkeit von x acht verschiedene Adressen angesprungen:

            x=0         $0000
            x=1         $0008
            x=2         $0010
            x=3         $0018
            x=4         $0020
            x=5         $0028
            x=6         $0030
            x=7         $0038

unverändert

Last Update: 2005-Okt-17


Input/Output Befehle

Mit den Input/Output-Befehle n wird der IO-Port des Z80-Mikroprozessors angesteuert. Obwohl bei jeder I/O-Operation auch die obere Hälfte des Adressbusses (Bit 8-15) angesprochen wird, sollte man fürI/O-Operationen nur die untere Hälfte des Busses verwenden (Adresse 0-255). Die Adressierungsarten sind für die Input/Output-Befehle stark eingeschränkt und beschränken sich im wesentlichen auf direkte und indirekte Adressierung.

Befehl | Kurzbeschreibung | Erläuterung | Flags
IN A,(nn | A <-- Port (nn) | Der Akkumulator wird mit dem Wert von Port nn geladen. Dazu wird die Konstante nn auf der unteren Hälfte des Adressbusses (Bit0-7) ausgegeben und der Akkumulator mit den Daten auf den Datenleitungen geladen | unverändert
IN r,(C) | r <-- Port (C) | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt, der Inhalt von Register B auf die obere. Darauf wird der Datenbus in das Register r eingelesen. | S=1, wenn gelesene Daten negativ, sonst S=0
 |  |  | Z=1, wenn gelesene Daten gleich null
 |  |  | H=0
 |  |  | N=0
 |  |  | P/V=1, wenn Parität der Daten gerade
INI | (HL) <-- Port (C), B <-- B-1, HL <-- HL+1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der Datenleitungen in die Speicherzelle, die durch das Register HL adressiert wird, gelegt. Daraufhin wird das Register B um eins erniedrigt und HL um eins erhöht. Register B kann als Byte-Zähler verwendet werden. | S unbestimmt
 |  |  | Z=1, wenn B=0 wird
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
INIR | (HL) <-- Port (C), B <-- B-1, HL <-- HL+1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der Datenleitungen in die Speicherzelle, die durch das Register HL adressiert wird, gelegt. Daraufhin wird das Register B um eins erniedrigt und das Register HL um eins erhöht. Ist der Inhalt von Register B ungleich null, so wird dieser Vorgang so lange wiederholt, bis B gleich null ist. Mit diesem Befehl kann man mehrere Bytes vom I/O-Port in ein Speicherfeld, das durch HL adressiert wird, einlesen. | S unbestimmt
 |  |  | Z=1
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
IND | (HL) <-- Port (C), B <-- B-1, HL <-- HL-1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der Datenleitungen in die Speicherzelle, die durch das Register HL adressiert wird, gelegt. Daraufhin werden die Register HL und B um eins erniedrigt. Register B kann als Byte-Zähler verwendet werden | S unbestimmt
 |  |  | Z=1, wenn B=0 wird
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
INDR | (HL) <-- Port (C), B <-- B-1, HL <-- HL-1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der Datenleitungen in die Speicherzelle, die durch das Register HL adressiert wird, gelegt. Daraufhin werden die Register HL und B um eins erniedrigt. Ist der Inhalt von Register B ungleich null, so wird dieser Vorgang so lange wiederholt, bis B gleich null ist. Mit diesem Befehl kann man mehrere Bytes vom I/O-Port in ein Speicherfeld, das durch HL adressiert wird, einlesen. | S unbestimmt
 |  |  | Z=1
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
OUT (nn),A | Port (nn) <-- A | Der Wert des Akkumulators wird auf dem Port nn ausgegeben. Dazu wird die Konstante nn auf der unteren Hälfte des Adressbusses(Bit 0-7) ausgegeben und der Wert des Akkumulators auf die Datenleitungen gelegt. | unverändert
OUT (C),r | Port (C) <-- r | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt, der Inhalt von Register B auf die obere. Darauf wird der Inhalt des Registers r am Datenbus ausgegeben. | unverändert
OUTI | Port (C) <-- (HL), B <-- B-1, HL <-- HL+1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Inhalt der durch HL adressierten Speicherzelle wird auf den Datenleitungen ausgegeben. Daraufhin wird das Register B um eins erniedrigt und HL um eins erhöht. Register B kann als Byte-Zähler verwendet werden. | S unbestimmt
 |  |  | Z=1, wenn B=0 wird
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
OTIR | Port (C) <-- (HL), B <-- B-1, HL <-- HL+1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der durch HL adressierten Speicherzelle auf dem Datenbus ausgegeben. Daraufhin wird das Register Bum eins erniedrigt und das Register HL um eins erhöht. Ist Register B ungleich null, so wird dieser Vorgang so lange wiederholt, bis B gleich null ist. Mit diesem Befehl kann man mehrere Bytes eines Speicherfeldes auf einem I/O-Port ausgeben. | S unbestimmt
 |  |  | Z=1
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
OUTD | Port (C) <-- (HL), B <-- B-1, HL <-- HL-1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Inhalt der durch HL adressierten Speicherzelle wird auf den Datenleitungen ausgegeben. Daraufhin werden die Register B und HL um eins erniedrigt. Register B kann als Byte-Zähler verwendet werden. | S unbestimmt
 |  |  | Z=1, wenn B=0 wird
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt
OTDR | Port (C) <-- (HL), B <-- B-1, HL <-- HL-1 | Der Inhalt des Registers C wird auf die untere Hälfte des Adressbusses gelegt und der Wert der durch HL adressierten Speicherzelle auf dem Datenbus ausgegeben. Daraufhin werden die Register B und HL um eins erniedrigt. Ist Register B ungleich null, so wird dieser Vorgang so lange wiederholt, bis B gleich null ist. Mit diesem Befehl kann man mehrere Bytes eines Speicherfeldes auf einem I/O-Port ausgeben. | S unbestimmt
 |  |  | Z=1
 |  |  | H unbestimmt
 |  |  | N=1
 |  |  | P/V unbestimmt

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Der Prozessor Z80 [image] Befehlssatz [image] CPU-Kontrollbefehle
Index
Siehe auch: Sprungbefehle, Unterprogrammaufrufe

CPU-Kontrollbefehle

Befehl | Kurzbeschreibung | Erläuterung | Flags
NOP | No operation. | Die CPU führt keine Operation durch. Es werden weder Register noch Flags geändert. Dieser Befehl wird eingesetzt, wenn man beider Bearbeitung eines Programms etwas Zeit gewinnen möchte, um zum Beispiel auf die Reaktion eines I/O-Bausteins zu warten. | unverändert
CCF | CF <-- not CF | Das Carry-Flag wird invertiert. | H = Kopie der Carry-Flags vor der Operation
 |  |  | N=0
 |  |  | C=0, wenn vorher 1 und umgekehrt
SCF | CF <-- 1 | Das Carry-Flag wird auf eins gesetzt. | H=0
 |  |  | N=0
 |  |  | C=1
HALT | Halt. | Dieser Befehl setzt die CPU in einen Wartezustand, der so lange dauert, bis entweder ein Interrupt auftritt oder ein Reset durchgeführt wird. Während des HALT-Zustandes führt die CPU intern NOP-Befehle aus, um den Refresh der dynamischen Speicherzu gewährleisten. Bei Ausführung des HALT-Befehls wird der Anschluss /HALT der CPU auf LOW gesetzt | unverändert
DI | Disable Interrupt. | Verhindert die Bearbeitung eines maskierbaren Interrupts durch Rücksetzen der Interrupt-Enable-Flip-Flops IFF1 und IFF2. | unverändert
EI | Enable Interrupt. | Ermöglicht die Bearbeitung eines maskierbaren Interrupts durch Setzen der Interrupt-Enable-Flip-Flops IFF1 und IFF2. | unverändert
IM 0 | Interrupt Mode 0. | Durch diesen Befehl wird der Interrupt Modus 0 gesetzt. In diesem Modus kann der Baustein, der die Unterbrechung anfordert, jeden beliebigen Opcode auf den Bus legen, den die CPU dann ausführt. | unverändert
IM 1 | Interrupt Mode 1. | Durch diesen Befehl wird der Interrupt Modus 1 gesetzt. In diesem Modus reagiert die CPU auf jede Interruptanforderung durch Ausführung eines RST 7 Befehls, d.h. dass die Interrupt-Service-Routine an der Adresse $0038 beginnen muss. | unverändert
IM 2 | Interrupt Mode 2. | Durch diesen Befehl wird der Interrupt Modus 2 gesetzt. Dieser Modus erlaubt die vektorisierte Verarbeitung von Interrupts, beider der entsprechende Baustein den Start der Adresse der Interrupt-Service-Routine (in Kombination mit dem I-Register)festlegt. | unverändert

Last Update: 2005-Okt-17


Aufbau eines Minimalsystems

Zum Aufbau eines Minimalsystems benötigt man relativ wenige Bausteine, so dass das System auch für den Ungeübten durchaus noch überblickbar ist. Ein solches Minimalsystem besteht z.B. aus einer CPU, eine dem Problem angepasste Menge an Speicher, einem Taktoszillator, einer Reset-Steuerung, minimalen Möglichkeiten, mit der Außenwelt in Kontakt treten zu können, und - falls man das System erweiterbar machen möchte - einer Bussteuerung (s. Abbildung). Im Folgenden werden die einzelnen Teile eines Minimalsystems etwas genauer besprochen, wobei sich die Schaltungsvorschläge stark an der Schaltung des Experimentiersystems orientieren.

Komponenten eines Minimalsystems

Last Update: 2005-Okt-08


Home [image] Mikroprozessoren [image] Aufbau eines Minimalsystems [image] Taktoszillator
Index
Siehe auch: Experiment: Aufbau eines Quarzoszillators

Taktoszillator

Der Taktoszillator sollte als Quarzoszillator ausgeführt sein, da nur dieser eine ausreichende Stabilität bietet. Die Anforderungen an das Taktsignal sind je nach Mikroprozessor unterschiedlich und dem Datenblatt zu entnehmen. Besonders sei darauf hingewiesen, dass manche CPUs eine bestimmte Minimalfrequenz (!) benötigen. Die verwendbare Maximalfrequenz hängt von der Art der eingesetzten Bauteile, dem Platinenlayout und natürlich dem Design der Schaltung ab. Üblicherweise kommen aber so kritische Kriterien wie Platinenlayout und Design erst zum Tragen, wenn die angestrebte Frequenz über 10 MHz liegt.

Zur Herstellung des Oszillators kann man verschiedene Verfahren verwenden. Die generell einfachste Methode besteht darin, einen integrierten Quarzoszillator einzusetzen, der sowohl den Quarz als auch die nötige Steuerschaltung in einem Gehäuse vereint. Diese Oszillatoren liefern ein symmetrisches TTL-Signal an ihrem Ausgang und können daher mit den meisten Mikroprozessoren direkt verbunden werden. Der Einsatz eines integrierten Quarzoszillators empfiehlt sich besonders bei höheren Frequenzen (über 8 MHz). Ein Nachteil dieses Oszillators besteht darin, dass er bis zu einem Faktor 20 teurer sein kann als folgende einfache Lösung.

Für niedrige Frequenzen (z.B. 3-16 MHz) kann man auch einen Inverter (7404 oder 7400) einsetzen, dessen einzelne Elemente mit dem Quarz wie in folgender Abbildung verschaltet sind.

Taktgenerator: Quarz und Inverter

Dabei werden zwei Inverter mit je einem Widerstand so stark gegengekoppelt, dass sie als invertierende Analogverstärker arbeiten. Hängt man über beide Inverter einen Quarz, so schwingt dieser mit der Resonanzfrequenz. Ein weiterer Inverter, der nun als normaler digitaler Inverter arbeitet, formt aus der Schwingung ein TTL-Signal. Diese Schaltung ist im Frequenzbereich 3-16 MHz einsetzbar. Besonders ist darauf zu achten, dass für den Inverter ein normaler TTL-Typ verwendet wird (siehe auch Band 1 dieses Buches).

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Aufbau eines Minimalsystems [image] CPU und Speicher
Index
Siehe auch: Input Output, Bussteuerung, Sprachen

CPU und Speicher

Die Wahl der CPU richtet sich nach den Anforderungen, die an die Schaltung gestellt werden, den vorhandenen Möglichkeiten, Fehler (Hardware und Software) aufzuspüren (Debugger, Logikanalysator, Emulator, etc.), und nach der Verfügbarkeit von Software.

Grundsätzlich sollte man nicht in den Fehler verfallen, immer die neueste, beste und schnellste CPU zu verwenden, da der Einsatz einer neuen, dem Entwickler unbekannten CPU immer auch mit hohem Zeit- und Kostenaufwand verbunden ist. Ein wichtiger Posten in dieser Abschätzung ist die Verfügbarkeit von Hochsprachen und Bibliotheken für den angestrebten Mikroprozessor. So ist es immer am besten auf eine altgediente CPU zurückzugreifen, für die eine große Menge von Software existiert.

Bei der Einschätzung der notwendigen Speichergröße muss man zwischen nichtflüchtigem Programmspeicher (EPROM etc.) und flüchtigem Datenspeicher (RAM) unterscheiden. Plant man den Anschluss eines Massenspeichers, so wird man im Allgemeinen das RAM entsprechend groß machen, das EPROM wird relativ klein ausfallen, da es nur Treiber für die Hardware und einen Bootstrap zu enthalten braucht. Die Betriebssoftware und Benutzerprogramme werden dann vor deren Ausführung vom Massenspeicher in das RAM geladen.

Für Kontrolleranwendungen stellen sich die Verhältnisse genau umgekehrt dar. Man wird meist nur wenig RAM benötigen, dafür aber viel Platz im EPROM-Bereich, da ja kein Massenspeicher zur Verfügung steht und alle notwendigen Programme im EPROM gespeichert sein müssen. Die Anforderungen an die EPROM-Größe steigen mit dem Einsatz von Hochsprachen üblicherweise noch um einiges an, da von diesen Laufzeitbibliotheken verwendet werden und meist auch der Programmcode nicht so kompakt ist wie bei 'handgestricktem' Assemblercode.

Im Minimalsystem, das in diesem Buch beschrieben wird, wurde ein Kompromiss zwischen EPROM- und RAM-Größe geschlossen, der sich in der Praxis für die meisten Anwendungen im Controller-Bereich als brauchbar erwiesen hat. EPROM und RAM sind gleich groß und nehmen jeweils den halben adressierbaren Speicherplatz ein (je 32 kByte). Außerdem wurde in der Schaltung vorgesehen, durch Umstecken von Jumpern unterschiedlich große EPROMs und RAMs verwenden zu können.

Minimalsystem CPU und Speicher

Die Abbildung zeigt den Schaltungsausschnitt, Speichersteuerung für die Ansteuerung der Speicher. Die Ansteuerung der Speicherbausteine geschieht mit Hilfe eines Decoders (74LS139), der aus den CPU-Signalen A15 und /MREQ zwei Chip-Select-Signale für EPROM und RAM erzeugt. Das EPROM liegt dabei im Adressraum an der untersten Adresse $0000 aufwärts bis entweder $1FFF (2764), $3FFF (27128) oder $7FFF (27256). Das RAM liegt an der Adresse $8000 und füllt den Adressraum entweder bis $9FFF (4364) oder bis $FFFF (43256).

Last Update: 2005-Okt-17


Input Output

Die Ein- und Ausgabemöglichkeiten eines Mikroprozessorsystems hängen natürlich sehr stark von der angestrebten Anwendung ab, wobei für ein Minimalsystem meist wenige spezielle Ein- und Ausgänge genügen. Das in diesem Buch vorgestellte Minimalsystem hat als Ein- und Ausgänge nur jeweils einen 8-Bit-Parallelport und einen achtfach DIP-Switch, da für andere grundlegende I/O-Möglichkeiten (wie z.B. eine serielle Schnittstelle) der ebenfalls vorhandene Bus verwendet werden kann.

Die Parallelports sind als einfache Register bzw. Treiber ausgeführt, die mit Hilfe eines Decoders (74LS138) selektiert werden. Die folgende Abbildung zeigt den Schaltungsausschnitt für die I/O Steuerung. Die Adressen A5, A6 und A7 werden an den Decoder 74LS138 geführt, der die entsprechenden Signale erzeugt. Der Decoder wird durch die Signale /IORQ und /M1 aktiviert, wenn /IORQ aktiv und /M1 inaktiv sind. Man könnte den Decoder auch nur mit /IORQ alleine ansteuern, was aber bei Interrupt-Acknowledge-Zyklen zur irrtümlichen Ansteuerung der I/O-Bausteine führen kann, da in diesem Zyklus /IORQ zusammen mit /M1 aktiviert wird. In normalen I/O-Zyklen ist /M1 inaktiv, so dass man dieses Signal an den nicht invertierenden Enable-Eingang des Decoders legt, und damit Fehlsteuerungen unterdrückt werden.

Die zwei Eingangsports sind normale Bustreiber (74LS245), die nur in einer Richtung betrieben werden. Einer der Bausteine wird zum Einlesen eines DIP-Switches benützt, der andere kann als Universal-Parallel-Eingang verwendet werden. Die Daten werden von den Eingängen beim Auftreten eines Signals aus dem Decoder auf den Datenbus geschaltet.

Steuerung der I/O-Ports

Als Ausgangsport wird ein 8-Bit-Register (74LS574) verwendet, dessen Eingänge am Datenbus hängen und dessen Ausgänge in die Außenwelt führen. Der /OE-Pin (Output Enable) liegt dauernd auf Masse, so dass die Ausgänge immer aktiv sind. Die Daten werden beim Auftreten eines Impulses auf der Select-Leitung vom Datenbus übernommen.

Da die Signale /RD und /WR nicht zur Erzeugung der Selectsignale verwendet wurden, darf für die Eingangsports kein Befehl zur Ausgabe von Daten gegeben werden. Dies würde sowohl den Datenbus der CPU als auch die Ausgänge der Eingangstreiber aktivieren und einen Kurzschluss verursachen, was jedoch keinerlei Zerstörungen anrichten kann. Gibt man andererseits einen INPUT-Befehl an den Ausgangsport, so nehmen dessen Ausgänge einen undefinierten Zustand ein.

Last Update: 2005-Okt-17


Resetsteuerung

Der Resetsteuerung eines Mikroprozessorsystems sollte besonderes Augenmerk geschenkt werden, da es beim Ein- und Ausschalten der Versorgungsspannung zu unkontrollierbaren Zuständen im System kommen kann, die zu unerwünschten Nebeneffekten führen können (z.B. die batteriegepufferte Systemuhr verstellen o.ä.). Die Art der Resetsteuerung hängt immer von der angestrebten Funktion des Systems ab. Bei einfachen Systemen, die keine Elemente enthalten, die bei abgeschalteter Versorgungsspannung mit Hilfe einer Batterie weiterarbeiten müssen, wird man auch mit einer einfachen (und billigen) Resetschaltung das Auskommen finden.

Im Folgenden seien daher zwei Resetschaltungen vorgestellt. Die eine verwendet dafür einen speziellen Baustein, die andere begnügt sich mit ein paar Gattern, die meist ohnehin auf der Platine zur Verfügung stehen.

Resetsteuerung mit TL7705A

Variante 1 verwendet den Baustein TL7705A. Dieser enthält alle wichtigen Elemente einer Resetsteuerung. Mit Hilfe einer internen Spannungsreferenz wird die Höhe der Versorgungsspannung überwacht. Sinkt sie unter 4.55 V, so wird ein Resetsignal erzeugt. Außerdem besitzt der TL7705A ein Verzögerungsglied, das das Resetsignal erst nach einer gewissen Zeit freigibt, damit nach dem Einschalten des Netzteils die Versorgungsspannungen stabil anliegen, wenn der Mikroprozessor zu arbeiten beginnt. Die Verzögerungszeit kann durch den Kondensator Ct eingestellt werden und wird nach folgender Formel berechnet:

td = 13 x Ct (Ct in µF, td in ms)

Bei einem Kondensator von 220 nF bekommt man also eine Verzögerungszeit von 13 x 0.22 = 2.86 ms. Der Baustein TL7705A besitzt zwei Ausgänge, die komplementär zueinander sind, wobei die Kollektoren der Ausgangstransistoren unbeschaltet sind (open collector).

Die Zeit, nach der der Reseteingang des Mikroprozessors freigegeben wird, hängt von der Größe des Kondensators und des Widerstandes ab (Zeitkonstante RC). Bei 10 µF und 10 kW; dauert der Resetzustand etwa 100 ms. Über den Widerstand ist außerdem noch eine Diode geschaltet, die beim Ausschalten der Versorgungsspannung den Kondensator schnell entlädt, damit die Resetschaltung auch bei kurzzeitigem Ausfall der Versorgungsspannung wirken kann.

Bei sehr langen Resetzeiten (großer Kapazität des Kondensators) empfiehlt es sich, für den Inverter einen Schmitt-Trigger (z.B. 74LS132) zu verwenden, um Oszillationen während des Durchgangs der Kondensatorspannung durch die Schwellspannung zu vermeiden.

Resetsteuerung
Resetsteuerung mit Invertern

Last Update: 2005-Okt-08


Bussteuerung

Die Implementierung einer Bussteuerung hängt sehr stark von der geplanten Anwendung, der eingesetzten CPU und dem im System bereits vorhandenen Speicher ab. Je nachdem, ob man ein einfaches System zur Steuerung von bestimmten Geräten, ein Universalsystem, wie es in jedem Personalcomputer anzutreffen ist, oder etwa gar ein Multiprozessorsystem aufbauen will, muss der Bus unter schiedliche Komplexität haben. In dem hier gezeigten Minimalsystem, wurde nur ein I/O-Bus geschaffen, da einerseits dieser Mikrocomputer nur für Steuerungszwecke eingesetzt werden soll und andererseits der ansteuerbare Speicherbereich (64 kByte) ohnehin auf der Grundplatine bereits ausgeschöpft ist.

Beim Entwurf des I/O-Busses wurde außerdem darauf geachtet, dass der Bus möglichst einfach zu verwenden ist, und gleichzeitig aber alle Möglichkeiten einer flexiblen I/O-Steuerung offen lässt. Die einzige Einschränkung besteht in der Unmöglichkeit, eine DMA-Steuerung aufzubauen.

Der hier gezeigte I/O-Bus (Abbildung IOBUS) besteht aus den Datenleitungen (D0-D7), fünf Adressleitungen (A0-A4), diversen Steuerleitungen (/M1, IORQ, /WR, /RD, /RES, CLK), den Leitungen für das Interruptsystem (/INT, IEI, IEO) und den bereits decodierten Select-Leitungen (/SEL0-/SEL3).

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Software-Entwicklung
Index
Siehe auch: Entwurfsmethoden, Programm-Dokumentation

Software-Entwicklung

Ein zentraler Punkt bei der Entwicklung von Mikroprozessor gesteuerten Schaltungen ist die Entwicklung der entsprechenden Software. Dazu benötigt man nicht nur fundiertes Wissen über die verwendete Hardware, sondern mehr noch, man benötigt umfangreiche Kenntnisse wie man eine Programmieraufgabe löst. Viele Neulinge probieren es mit der Ad-hoc-Methode, d. h. sie setzen sich hin, schreiben aus dem Gedächtnis die ersten paar hundert Programmzeilen aufs Papier (oder in den Editor ihres Computers) und kommen plötzlich zu einem Punkt, wo sie den Überblick verlieren. Mit entsprechender Anstrengung wird das Programm vollendet.

Wenn das Programm dann nach einigen Wochen verbessert oder erweitert werden soll, muss man sich erst mühselig in die vorher als genial und selbst dokumentierend angesehenen Programmzeilen einarbeiten.

Um diese Probleme so weit wie möglich zu vermindern, sollen auf den nächsten Seiten einige wichtige Methoden der Software-Entwicklung besprochen werden.

Last Update: 2005-Okt-10


Entwurfsmethoden

Eine sehr bewährte Entwurfsmethode für größere Programme stellt der so genannte Top-Down-Entwurf dar. Dabei wird die Programmieraufgabe sukzessive in immer kleinere Einheiten zerlegt, bis man zu Teilaufgaben kommt, die klein genug sind, um sie leicht zu überblicken. Der Top-Down-Entwurf führt zu linear strukturierten Programmen, die wesentlich leichter wartbar und dokumentierbar sind.

Vorteile des Top-Down-Entwurfs sind:
  • Mehrere Programmierer können an einem großen Programm zur gleichen Zeit arbeiten.
  • Jeder Programmierer braucht nur einen Teilaspekt des Problems verstehen.
  • Die Fehlersuche kann man an einem kleinen Modul vornehmen, was das Finden von Fehlern erheblich erleichtert.
  • Das Programm ist leicht erweiterbar bzw. abänderbar, da nur in einem kleinen abgeschlossenen Modul Änderungen angebracht werden müssen. Bei korrekter Formulierung der Module kann es dann niemals dazu kommen, dass eine kleine Änderung in einem Modul zu einem Fehler an einer anderen Stelle eines großen Programms führt.

Ein kleines Beispiel soll die Top-Down-Methode erläutern: Als Aufgabe sei die Regelung einer Raumheizung zu programmieren. Der einzusetzende Mikrocomputer besitzt als Peripherie einen AD-Wandler zur Ermittlung der Ist- und Sollwerte von Raumtemperatur und Luftfeuchtigkeit und einen DA-Wandler zur Ausgabe der Stellgröße (Heizleistung). Ein graphikfähiger Drucker dient zur Protokollierung des Regelvorgangs. Die Abbildung zeigt die Vorgehensweise beim Top-Down-Entwurf: Auf der ersten und obersten Stufe ist das Programm als ein Block dargestellt. Dieser wird in der zweiten Stufe in eine Initialisierungsphase und eine Regelphase aufgespaltet. Die Regelphase wiederum wird in drei Blöcke gegliedert: Das Messen der Klimaparameter, die Berechnung und Ausgabe der Stellgröße und die Protokollierung der Klimaparameter. Jede dieser Teilaufgaben greift auf der untersten Ebene auf einen Treiber für die entsprechenden Geräte zurück.

Top-Down-Entwurf einer Heizungsregelung

Die beschriebenen Teilaufgaben sind nun gut zu überblicken und somit auch leicht zu programmieren.

Last Update: 2005-Okt-11


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Programm-Dokumentation
Index
Siehe auch: Software-Entwicklung, Struktogramme, Flussdiagramme, Pseudocode, Seiteneffekte

Programm-Dokumentation

Während des Entwurfs eines Programms sollte darauf geachtet werden, dass nicht nur ein linear strukturiertes Programm entsteht, sondern dass zugleich mit dem Entwurf eine ausreichende Dokumentation angefertigt wird. Für die Dokumentation eines Programms gibt es im Wesentlichen drei Methoden, die im Folgenden beschrieben werden.

Diese Methoden sind für die Erstellung eines linear strukturierten Programms unterschiedlich gut geeignet, zumal Flussdiagramme dazu animieren, die lineare Strukturierung zu umgehen. Der Autor zieht Struktogramme als Programmdokumentation vor, da man dadurch zum Entwurf linear strukturierter Programme gezwungen ist und außerdem der Programmcode sehr leicht aus dem Struktogramm erzeugt werden kann.

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Struktogramme
Index
Siehe auch: Programm-Dokumentation, Flussdiagramme

Struktogramme

Struktogramme oder nach deren Erfindern auch Nassi-Shneiderman-Diagramme genannt, stellen dem Programmierer eine kleine Anzahl von blockorientierten Programmstrukturen zur Verfügung, mit denen jedes Problem gelöst werden kann. Diese Blöcke beinhalten einen linearen Satz von Anweisungen, Verzweigungen und Schleifen. Diese Blöcke entsprechen sehr den Programmflußoperatoren der Programmiersprache Pascal (mehr zu Pascal finden Sie u.a. im Delphi-Programmierkurs für Anfänger). Es sollen daher die Beispiele zu den Blöcken jeweils in Pascal formuliert werden.

Elemente eines Struktogramms

Anweisungen:

Anweisungen können entweder einzelne Programmbefehle oder eine lineare Reihe von Befehlen sein, wobei diese Reihe von Befehlen auch andere Strukturelemente (z.B. Schleifen) enthalten kann. Ein Anweisungsblock wird immer als ein Rechteck dargestellt. Dieser Anweisungsblock hat einen Eingang und einen Ausgang. In Pascal wird ein solcher Block mit begin und end geklammert:

              begin
              beliebige Anweisungen
              end;

Verzweigungen:

In den Struktogrammen sind zwei Arten von Verzweigungen erlaubt, die binäre Entscheidung und eine Mehrfachverzweigung. Bei der binären Entscheidung wird je nach der Antwort (ja/nein) auf eine Entscheidungsfrage entweder der eine Block von Anweisungen abge arbeitet oder der andere. In Pascal entspricht dieser Konstruktion die Anweisung IF...THEN...ELSE:

              if Bedingung = ja
                then Block 1
                else Block 2;

Die andere Art der Verzweigung ist die Mehrfachabfrage, bei der jeweils eine Alternative gültig ist. Diese Mehrfachabfrage ent spricht dem Pascal-Statement CASE..OF:

              case Bedingung of
                Alternative 1 : Block 1
                 ...
                Alternative n : Block n
              end;

Schleifen:

Bei Schleifenkonstruktionen gibt es zwei mögliche Typen: Die Schleife mit der Abfrage des Abbruchkriteriums am Beginn der Schleife und die Schleife mit dem Abbruchkriterium am Ende der Schleife.

Schleifen mit dem Abbruchkriterium am Beginn werden in Pascal mit WHILE..DO formuliert:

              while bedingung erfüllt do
                begin
                end;

Schleifen mit Abbruchkriterium am Ende der Schleife werden in Pascal mit REPEAT..UNTIL formuliert:

              repeat
                Block
              until Bedingung erfüllt;

Last Update: 2005-Okt-11


Pseudocode

Eine sehr nützliche Methode zur Programmdokumentation ist die Erzeugung von Pseudocode, der in einer Pascal-ähnlichen Sprache formuliert wird. Dies setzt allerdings voraus, dass man eine strukturierte Programmiersprache beherrscht und auch gewohnt ist, linear strukturiert zu denken. Typischen BASIC-Programmierern sei diese Methode nicht empfohlen.

Pseudocode hat besonders auf Assemblerebene den Vorteil, dass dieser direkt in den Quelltext als Kommentar mit aufgenommen werden kann. Eine empfehlenswerte Vorgangsweise ist die zweimalige Aufnahme des Pseudocodes: zuerst in geschlossener Form am Kopf des Programms und dann als einzelne Zeilen im Kommentar des Assemblerprogramms. Dadurch bleibt sowohl die Übersichtlichkeit gewahrt als auch die Zuordnung der Pseudocode-Statements zum Quellcode.

Last Update: 2005-Okt-10


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Flussdiagramme
Index
Siehe auch: Programm-Dokumentation, Struktogramme

Flussdiagramme

Flussdiagramme sind eine sehr alte Methode, um Programmabläufe zu visualisieren und werden auch heute immer noch viel verwendet. Sie besitzen jedoch einen gravierenden Nachteil: Sie verführen den Programmierer dazu, Programme zu schreiben, die nicht linear strukturiert sind. Man sollte daher die Verwendung von Flussdiagrammen vermeiden und zu Struktogrammen für die Programmerstellung greifen.

Flussdiagramme besitzen im Grunde nur zwei Strukturelemente: die Anweisung und die Verzweigung. Alle anderen Strukturelemente, wie sie für Struktogramme definiert sind, werden aus diesen beiden konstruiert. Die einzelnen Elemente werden mit Pfeilen verbunden, die den Programmfluss anzeigen. Die Abbildung zeigt die Symbole für Anweisungen und Verzweigungen.

Elemente eines Flussdiagramms

Last Update: 2005-Okt-10


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Sprachen
Index
Siehe auch: CPU und Speicher, Ablauf einer Programmentwicklung

Sprachen

Bei der Auswahl der optimalen Sprache für ein Mikrocomputer-Projekt ist eine Reihe von Punkten zu berücksichtigen, die unter Umständen im Lauf der Entwicklung der Grund zu einem totalen Desaster werden können, wenn sie falsch eingeschätzt werden. Die im Folgenden aufgezählten Punkte sollen eine Hilfestellung zur Auswahl der Programmiersprache geben.

Beherrschung der Sprache

Ein bei der Auswahl einer Programmiersprache wenig beachteter Punkt ist die Beherrschung dieser Programmiersprache. Es ist wenig empfehlenswert, für ein neu entwickeltes System, das noch nicht 100%ig ausgetestet worden ist, eine Programmiersprache zu verwenden, die man nicht total beherrscht. Die Kombination von, mit hoher Wahrscheinlichkeit, gemeinsam auftretenden Hardware- und Softwarefehlern, kann die Entwicklungsarbeit oft um Wochen, wenn nicht um Monate hinaus zögern, was sehr teuer werden kann.

Kosten der Entwicklungsumgebung

Ein weiterer Aspekt sind die Kosten der Entwicklungsumgebung. Darunter versteht man die Kosten aller die Entwicklung unterstützenden Hard- und Software, wie z.B. Emulatoren, Logikanalysatoren, Crossassembler, Crosscompiler, Debugger etc. Diese Kosten hängen zum Teil von der verwendeten Sprache ab, insbesondere wenn man keine der Standardsprachen verwenden will oder kann.

Leistungsfähigkeit der Sprache

Für viele mit Mikroprozessoren gelöste Probleme gibt es gewisse Geschwindigkeits- und/oder Genauigkeitsanforderungen an das endgültige Programm. Es ist also vorher in Testläufen zu klären, ob der ausgewählte Compiler Maschinencode erzeugt, der entsprechend leistungsfähig ist.

ROM-Fähigkeit des EXE-Programms

Ein oft übersehener Punkt ist die Frage, ob der ausgewählte Compiler Maschinencode erzeugen kann, der in einem EPROM ablaufen kann. Dies ist besonders für Controller-Anwendungen wichtig, wo meist wenig RAM, aber relativ viel ROM zur Verfügung steht.

Größe des Endprodukts

Manche Compiler erzeugen zusammen mit den notwendigen Bibliotheken einen sehr 'barocken' Code, so dass selbst für kleinste Anwendungen Programme in der Größe von 40 kByte entstehen. Man sollte daher die Größe des entstehenden Codes abschätzen und den EPROM-Adressraum entsprechend in Einklang bringen (bei den meisten Hochsprachen mit Gleitkomma-Arithmetik wird man mit 32 kByte kaum auskommen).

Vorhandene Bibliotheken

Eine sehr wichtige Frage ist die nach vorhandenen Software-Bibliotheken, deren Qualität und deren Preis.

Zugriffe auf Hardware möglich?

Viele Anwendungen von Mikroprozessoren verlangen einen direkten Zugriff auf Hardware, die nicht standardmäßig als I/O-Kanal in der mit dem Compiler mitgelieferten Bibliothek vorhanden ist. Für solche Hardware muss ein spezieller Treiber geschrieben werden, der den Zugriff ermöglicht.

Interrupt-Behandlung möglich?

Ein sehr wichtiger Punkt ist die Frage, ob in der gewählten Sprache eine Verarbeitung von Interrupts möglich ist. Sollte das nicht der Fall sein, so ist dies ein Grund, das gewählte Sprachprodukt nicht zu verwenden.

Die folgende etwas eingehendere Beschreibung einer Programmiersprache beschäftigt sich ausschließlich mit der Assemblersprache, da eine Großzahl von Mikroprozessoranwendungen in Assembler geschrieben ist, und man in Assembler praktisch jedes mit einem Mikroprozessor lösbare Problem lösen kann. Außerdem sind Assembler für jede CPU erhältlich, während dies für Hochsprachen nicht immer der Fall ist. Ein Nachteil der Assemblerprogrammierung ist aber sicherlich die schlechtere Effizienz bei der Entwicklung eines Programms.

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Ablauf einer Programmentwicklung
Index
Siehe auch: Sprachen, Unterprogramme

Ablauf einer Programmentwicklung

Im Folgenden soll der typische Programmierzyklus während einer Programmentwicklung beschrieben werden. Jedes Programm muss zuerst mit Hilfe eines Editors geschrieben werden, dann wird es übersetzt und gebunden und am Schluss erfolgt der Test. Ist der Test nicht zufrieden stellend verlaufen, so benützt man wieder den Editor, verbessert das Programm, und der oben beschriebene Ablauf beginnt von vorne. Dieser Zyklus wird im Laufe einer Programmentwicklung meist mehrere Male durchlaufen, bis das endgültige Produkt fertig ist.

Editor

Viele (Hobby-)Programmierer machen den Fehler, einen Editor zu benützen, der zwar zum Schreiben von Briefen sehr gut brauchbar ist, der aber für die Programmentwicklung gänzlich unbrauchbar ist. Man sollte immer bedenken, dass bei der Entwicklung von mikrocomputergesteuerten Geräten die meiste Zeit mit dem Editor verbracht wird und nicht etwa mit dem Lötkolben. Gut geeignet für die Programmentwicklung sind sicherlich Editoren, die für diesen Zweck geschaffen worden sind.

Assembler

Nachdem der Source-Code (hoffentlich mit vielen Kommentaren) eingetippt worden ist, wird zuerst einmal der Assembler verwendet, um den Source-Code in ein so genanntes 'Object-File' zu übersetzen. Bei dieser Übersetzung wird Zeile für Zeile des Source-Codes in Maschinensprache übersetzt, wobei jedoch bestimmte Labels und Referenzen noch nicht in absolute Zahlen übersetzt werden, da unter Umständen das Programm noch mit anderen Programmteilen verbunden werden muss. Dieses 'Binden' übernimmt der Linker.

Linker

Der Linker verbindet nun alle Teilprogramme, die im Object-Code vorliegen müssen, zu einem lauffähigen Gesamtprogramm. Beim Link-Vorgang werden alle Referenzen, die der Assembler noch nicht auflösen konnte, aufgelöst. Gelingt dies nicht, so kann das Programm nicht gebunden und damit auch nicht lauffähig gemacht werden. Der Linker wird in diesem Fall eine Fehlermeldung mit den unaufgelösten Referenzen ausgeben.

Testphase

Das mit dem Linker erzeugte lauffähige Programm wird nun in das Zielsystem transferiert (download oder EPROM schießen) und einem Test unterzogen. Zum Test kann im einfachsten Fall das Programm einfach ausprobiert werden. Funktioniert es einwandfrei, so ist dies als ausgesprochener Glücksfall zu werten. Meist funktioniert das Programm jedoch gar nicht (stürzt ab) oder nicht zufrieden stellend.

Am schlechtesten ist der Fall, wenn das Programm gänzlich versagt. Denn dann kann man aus den (Fehl)reaktionen des Programms nicht auf den (die) Fehler schließen. In diesem Fall benötigt man entsprechende Hilfsgeräte und -programme, wie z.B. ein Oszilloskop, einen Logikanalysator, einen Debugger oder einen Simulator. Für eine effiziente Entwicklungsarbeit wird man sicherlich einen Logikanalysator benötigen, der aber aufgrund seines Preises sicherlich nur für den professionellen Einsatz geeignet ist.

Für die Fehlersuche in kleineren Programmen genügt auch ein Debugger oder besser ein Simulator, wobei man sich einfache Simulatoren auch selbst (in einer Hochsprache) schreiben kann. Der Aufwand dafür ist gar nicht so groß, wie man vermuten würde.

Last Update: 2005-Okt-17


LIFO oder Stack

Die Bezeichnung LIFO steht für 'Last In, First Out' und bezeichnet einen Puffer, bei dem die zuletzt gespeicherten Werte zuerst wieder gelesen werden. Dieses Verhalten gleicht einem Stapel, darum wird ein LIFO-Puffer meist auch als Stack bezeichnet. Der Stack hat eine zentrale Rolle in der Programmierung von Mikrocomputern und soll entsprechend ausführlich beschrieben werden.

Der Stack wird in einem reservierten Teil des Speichers angelegt. In der Initialisierungsphase eines Programms wird ein Zeiger (das ist eine Variable, die die Adresse einer Speicherzelle des Stacks enthält) auf den Beginn des Stacks gesetzt. Bei jedem Schreibvorgang wird der zu speichernde Wert in die Speicherzelle, auf die der Zeiger weist, geschrieben und der Zeiger auf die nächste Adresse gesetzt. Beim Lesen wird zuerst der Zeiger auf die vorhergehende Adresse gesetzt und der Wert der adressierten Speicherzelle zurückgegeben. Durch diesen Mechanismus wird immer der zuletzt gespeicherte Wert gelesen. Dieses Verhalten kann man dazu nutzen, vorübergehend irgendwelche Werte zu speichern.

Da der Stack eine sehr große Rolle als Zwischenspeicher und beim Unterprogrammaufruf spielt, gibt es fast in jedem Mikroprozessor entsprechend spezialisierte Befehle, die den Stack verwalten. Der Zeiger wird als 'Stack pointer' bezeichnet und ist als eigenes Register in der CPU vorhanden. Der folgende Programmausschnitt soll die Anwendung des Stacks zum Zwischenspeichern von Werten zeigen. Der Programmteil überprüft, ob der Inhalt des Registers HL kleiner als $24 ist. Da der Mikroprozessor Z80 keinen 16-Bit-Vergleichsbefehl hat, wird der Vergleich mit einer 16-Bit-Subtraktion durchgeführt. Bei der Subtraktion wird jedoch das Register HL verändert. Um den alten Wert von HL nach dem Vergleich weiterverwenden zu können, wird der Inhalt von HL vor der Subtraktion auf dem Stack zwischengespeichert und nach der Subtraktion wieder vom Stack gelesen.

            LD      DE,$0024    ;Vergleichswert
            PUSH    HL          ;HL sichern
            XOR     A           ;carry flag rücksetzen
            SBC     HL,DE       ;Subtraktion
            POP     HL          ;HL restaurieren
            JR      C,LABEL1    ;Sprung falls HL < DE

Folgende Abbildung zeigt die Vorgänge auf dem Stack. Der Stackpointer zeigt auf den ersten freien Platz im Stack. Mit dem Befehl 'PUSH HL' wird der Inhalt von HL auf den Stack geschrieben und der Stackpointer dekrementiert, so dass er auf den nächsten freien Platz zeigt. Der Befehl 'POP HL' inkrementiert den Stack pointer und liest den Wert am Stack in das Register HL ein. Damit ist der Stackpointer wieder an derselben Stelle wie zu Beginn der Programmsequenz, und HL ist unverändert.

Benützung des Stacks

Man sieht aus diesem Beispiel, dass in einem Programm immer gleich viele PUSH- und POP-Befehle vorhanden sein müssen, damit der Stack nicht voll wird. In der Tat gehört die falsche Verwendung von Stackbefehlen zu den häufigsten Programmierfehlern auf Assemblerebene. Solche Fehler wirken sich im allgemeinen fatal auf das Programm aus, da nicht nur Variable falsch zugewiesen werden, sondern auch bei Unterprogrammaufrufen (Unterprogramme verwenden auch den Stack, siehe unten) falsche Rücksprungadressen erhalten werden, was zu einem sicheren Absturz des Programms führt.

Last Update: 2005-Okt-11


FIFO

Der FIFO-Puffer oder Ringpuffer ist die zweite wichtige Pufferstruktur. Die Abkürzung FIFO steht für die Bezeichnung 'First In, First Out'. Wie der Name des FIFOs sagt, wird der zuerst abgespeicherte Wert auch wieder zuerst ausgegeben. Man kann sich ein FIFO auch als 'Durchlaufspeicher' vorstellen, in dem die abgespeicherten Werte eine gewisse Zeit verweilen und dann in derselben Reihenfolge wieder ausgelesen werden.

Die Abbildung zeigt die Funktion eines FIFO. Das FIFO wird ebenso wie der Stack in einem reservierten Speicherbereich angelegt, ist aber im Gegensatz zum Stack zyklisch organisiert. Zur Funktion des FIFOs werden zwei Pointer benötigt, ein Input-Pointer und ein Output-Pointer. Beide zeigen nach der Initialisierung auf dieselbe Stelle des Puffers. Sollen Daten geschrieben werden, so wird das jeweilige Datum in die Speicherzelle geschrieben, auf die der Input-Pointer zeigt, und dann der Input-Pointer auf die nächste Adresse gesetzt. Beim Lesen eines Datums wird der Wert aus der Speicherzelle geholt, auf die der Output-Pointer zeigt, und dann der Output-Pointer auf die nächste Speicheradresse gesetzt.

Beim Erhöhen der Pointer ist darauf zu achten, dass die Pointer in zyklischer Weise erhöht werden. Das heißt, dass der Pointer auf den Anfang des Speicher bereichs gesetzt wird, wenn er das Ende des Bereichs überschreitet. Sind Input- und Output-Pointer gleich, so ist das FIFO leer.

FIFOs werden überall dort eingesetzt, wo es notwendig ist, in einen Datenstrom eine Verzögerung einzubauen. So kommen zum Beispiel die Zeichen auf einer seriellen Schnittstelle zu beliebigen Zeiten im Computer an, können aber nur zu bestimmten Zeiten weiterverarbeitet werden. In diesem Fall leitet man den Strom der Daten in ein FIFO, aus dem dann die eingelangten Zeichen asynchron ausgelesen werden können.

Prinzip eines FIFOs

Der folgende kleine Programmausschnitt zeigt die Implementation eines FIFOs in Z80-Assembler. Es sind vier Funktionen als Unterprogramme implementiert: FIFO lesen, FIFO beschreiben, FIFO-Zustand überprüfen und FIFO löschen. Das hier gezeigte FIFO ist 256 Byte lang, die Input- und Outputpointer stehen als Bytevariable zu Beginn des Datenpuffers. Das FIFO benötigt also insgesamt 258 Bytes.

;===================================================
;----- 8-Bit-Zeichen in FIFO schreiben -------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs,
;           AKKU enthält Zeichen
;EXIT:      CF=0 --> Zeichen in FIFO eingetragen
;           CF=1 --> FIFO ist voll, Zeichen nicht
;           eingetragen
;
;Struktur des FIFOs:
;  1. Byte: FIFO input pointer (0..255)
;  2. Byte: FIFO output pointer (0..255)
;  3.-258.Byte:         FIFO Datenfeld
;  ---> Gesamtlänge: 258 Byte
;
            .GLOBAL WRFIFO
WRFIFO:     PUSH    HL
            PUSH    BC
            PUSH    AF
            LD      C,(HL)      ;Eingangspointer
            INC     HL
            LD      A,(HL)      ;Ausgangspointer
            DEC     A           ;FIFO voll ?
            CP      C
            JR      Z,FIFFUL    ;ja
            POP     AF
            DEC     HL
            INC     (HL)        ;neuer Pointer
            INC     HL
            INC     HL          ;Datenadresse
            LD      B,0         ;  berechnen
            ADD     HL,BC
            LD      (HL),A
            POP     BC
            POP     HL
            OR      A           ;Carry Flag rücksetzen
            RET
;
FIFFUL:     POP     AF          ;FIFO voll
            POP     BC
            POP     HL
            SCF                 ;Carry Flag setzen
            RET
;
;===================================================
;------ 8-Bit-Zeichen von FIFO lesen ---------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      CF=0, Daten in AKKU sind gültig
;           CF=1, FIFO ist leer
;
            .GLOBAL RDFIFO
RDFIFO:     PUSH    HL
            PUSH    BC
            LD      A,(HL)      ;FIFO Eingangspointer
            INC     HL
            LD      C,(HL)      ;FIFO Ausgangspointer
            CP      C           ;FIFO leer ?
            JR      Z,FIFMPT
            INC     (HL)
            INC     HL          ;Datenadresse
            LD      B,0         ;  berechnen
            ADD     HL,BC
            LD      A,(HL)
            POP     BC
            POP     HL
            OR      A           ;CF=0 ---> Daten OK
            RET
;
FIFMPT:     POP     BC
            POP     HL
            SCF                 ;CF=1 ---> Daten
            RET                 ;  ungültig
;
;===================================================
;----- FIFO löschen --------------------------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      FIFO ist gelöscht und leer
;
            .GLOBAL CLRFIF
CLRFIF:     PUSH    AF
            XOR     A
            LD      (HL),A
            INC     HL
            LD      (HL),A
            DEC     HL
            POP     AF
            RET
;
;===================================================
;----- FIFO Status testen --------------------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      CF=1 ---> FIFO voll
;           ZF=0 ---> if FIFO leer
;           AKKU enthält Zahl der Zeichen in FIFO
;
            .GLOBAL TSTFIF
TSTFIF:     LD      A,(HL)
            INC     HL
            SUB     (HL)
            JR      Z,TFE       ;FIFO leer
            CP      0FFH
            JR      Z,TFF       ;FIFO voll
            SCF                 ;FIFO weder voll noch
            CCF                 ;  leer
            DEC     HL
            RET
;
TFE:        SCF
            CCF
            DEC     HL          ;CF=0, ZF=1
            RET
;
TFF:        XOR     A
            LD      A,0FFH
            SCF                 ;CF=1, ZF=0
            DEC     HL
            RET

Da FIFOs sehr vielfältig eingesetzt werden können, werden von manchen Herstellern auch integrierte Schaltungen angeboten.

Last Update: 2005-Okt-08


Bedingte Verzweigungen

Bedingte Verzweigungen werden sehr häufig benötigt und entsprechen den 'IF...THEN...ELSE'-Anweisungen von Hochsprachen. Als Bedingungen werden sehr oft Vergleichsoperatoren herangezogen. Eine IF...THEN...ELSE-Konstruktion würde man beispielsweise so programmieren:

            CP          $34         ; IF A=$34
            JR          NZ,L1       ; Sprung auf ELSE-Teil, falls
                                    ; Bedingung nicht erfüllt
            bla         bla         ; THEN
            bla         bla
            bla         bla
            JR          L2
;
L1:         bla         bla         ; ELSE
            bla         bla
            bla         bla
;
L2:         bla         bla         ; nächste Anweisung nach
                                    ; IF..THEN..ELSE

Zu beachten ist, dass die Sprungbedingung komplementär zur Bedingung für den THEN-Teil ist.

Die folgenden Beispiele sollen anhand von konkretem Z80-Code zeigen, wie man die wichtigsten Vergleiche in Z80-Assembler formuliert. In den angeführten Beispielen soll der Inhalt des Registers A mit der Zahl $34 verglichen werden, und entsprechend dem gewünschten Vergleich der Programmfluß kontrolliert werden. Es wird nur jeweils der Vergleichsteil aufgelistet, der restliche Teil der bedingten Verzweigung entspricht dem obigen Beispiel.

Gleichheit, Ungleicheit

Zur Abfrage der Gleichheit kann man nach dem Compare-Befehl das Zero-Flag abfragen. Ist dieses auf eins gesetzt, so sind die Operanden gleich, ansonsten sind sie ungleich.

GLEICH

            CP          $34         ;A = $34 ?
            JP          NZ,L1       ;Sprung falls A <> $34
            bla         bla         ;THEN
L1:

UNGLEICH

            CP          $34         ;A <> $34  ?
            JP          Z,L1        ;Sprung falls A = $34
            bla         bla         ;THEN
L1:

Alle anderen Vergleiche werden mit Hilfe des Carry-Flags und eventuell gemeinsam mit dem Zero-Flag angestellt.

Kleiner, Kleiner-gleich

Zum Vergleich auf kleiner-gleich wird nach dem Compare-Befehl sowohl das Carry-Flag als auch das Zero-Flag abgefragt. Ist entweder das Zero- oder das Carry-Flag gesetzt, so ist das Register A kleiner oder gleich dem Vergleichswert $34. Möchte man nur abfragen, ob der Akkumulator kleiner als $34 ist, so genügt die Abfrage des Carry-Flags alleine.

KLEINER-GLEICH

            CP          $34         ;A <= $34 ?
            JR          Z,L3
            JR          NC,L1
L3:         bla         bla         ;THEN
L1:

KLEINER

            CP          $34         ;A < $34
            JP          NC,L1
            bla         bla         ;THEN
L1:

Größer, Größer-gleich

Die Abfrage, ob der Akkumulator größer oder gleich dem Vergleichswert ist, wird durch Abfrage des Carry-Flags bewerkstelligt. Ist dieses nicht gesetzt, so ist der Akkumulator größer oder gleich dem Vergleichswert. Etwas anders ist die Situation beim Vergleich auf größer. Für diesen Vergleich gibt es keine direkte Abfrage. Man muss zuerst die Abfrage auf Gleichheit stellen und bei gegebener Gleichheit die nachfolgende größer-gleich-Abfrage überspringen.

GRÖSSER-GLEICH

            CP          $34         ;A >= $34
            JR          C,L1
            bla         bla         ;THEN
L1:

GRÖSSER

            CP          $34         ;A > $34
            JR          Z,L1
            JR          C,L1
            bla         bla         ;THEN
L1:

Last Update: 2005-Okt-17


Schleifen

Wie schon kurz beschrieben gibt es Schleifen, die das Abbruchkriterium am Schluss abfragen, und welche, die es am Beginn der Schleife abfragen. Eine dritte Form von Programmschleifen durchläuft eine fixe, vorgegebene Zahl von Durchläufen. Die entsprechenden Formulierungen in Hochsprachen wären 'REPEAT...UNTIL', 'WHILE...DO' bzw. 'FOR...NEXT'.

Da für die Schleifentypen REPEAT...UNTIL und WHILE...DO beliebige Abbruchkriterien verwendet werden können, ist in den nachfolgenden Beispielen willkürlich angenommen, dass als Abbruchkriterium das Register A gleich null sein müsse. Unabhängig von der speziellen Abbruchbedingung läuft aber jede Schleifenüberprüfung auf einen expliziten oder impliziten Compare-Befehl hinaus. Zu beachten ist, dass bei Schleifenkörpern, die länger als 127 Byte sind, beim Mikroprozessor Z80 ein absoluter Sprung (JP statt JR) eingesetzt werden muss.

REPEAT...UNTIL

LOOP:       bla         bla         ;beliebiger Schleifenkörper
            bla         bla
            bla         bla
            CP          0           ;Abbruchbedingung A=0
            JR          NZ,LOOP

WHILE...DO

LOOP:       CP          0           ;Abbruchbedingung A=0
            JR          Z,L1
            bla         bla         ;Schleifenkörper
            bla         bla
            bla         bla
            JR          LOOP
;
L1:         bla         bla         ;nächste Anweisung nach der
                                    ;  Schleife

Zur Realisierung einer FOR...NEXT Schleife bietet der Mikroprozessor Z80 einen speziellen Befehl der für eine maximale Anzahl von 256 Schleifendurchläufen eingesetzt werden kann. Dieser Befehl (DJNZ = Decrement and Jump if Not Zero) dekrementiert den Schleifenzähler (Register B) und führt einen relativen Sprung aus, falls der Schleifenzähler nicht gleich null ist. Das folgende Programmbeispiel zeigt eine Schleife vom Typ FOR...NEXT mit 15 Durchläufen.

            LD          B,15        ;Schleifenzähler laden
LOOP:       bla         bla         ;Schleifenkörper
            bla         bla
            bla         bla
            DJNZ        LOOP        ;Abbruchbedingung (B=0)

Nach der vollständigen Ausführung der Schleife ist das Register B gleich null. Zu beachten ist, dass das Register B in der Schleife nicht verändert werden darf, da dies zu unkontrollierten Schleifendurchläufen führen würde. Benötigt man das Register B innerhalb der Schleife für andere Zwecke, so muss es am Beginn des Schleifenkörpers am Prozessorstack zwischengespeichert und am Ende des Schleifenkörpers wiederhergestellt werden. Das folgende Programmbeispiel zeigt eine mögliche Implementation:

            LD          B,15        ;Schleifenzähler laden
LOOP:       PUSH        BC          ;Zähler zwischenspeichern
            bla         bla         ;Schleifenkörper
            bla         bla
            bla         bla
            POP         BC          ;Schleifenzähler restaurieren
            DJNZ        LOOP        ;Abbruchbedingung (B=0)

Benötigt man eine Schleife, die mehr als 256 Durchgänge besitzt, so kann der Befehl DJNZ nicht eingesetzt werden. Es muss dann ein zweites Register (z.B. Register C) als erweiterter Schleifenzähler hinzugezogen werden. Da der Befehl 'DEC BC' das Zero-Flag nicht setzt, muss der Nulldurchgang durch ein logisches ODER der Register B und C abgefragt werden (BC ist ungleich null, wenn entweder Register B oder Register C ungleich null ist).

            LD          BC,388      ;Schleifenzähler laden
LOOP:       bla         bla         ;Schleifenkörper
            bla         bla
            bla         bla
            DEC         BC          ;Abbruchbedingung (BC=0)
            LD          A,B
            OR          C
            JR          NZ,LOOP

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Unterprogramme [image] Grundlagen
Index
Siehe auch: Ablauf einer Programmentwicklung

Unterprogramme

Viele Aufgaben innerhalb eines Programmablaufs verlangen dieselben Funktionen jedoch mit unterschiedlichen Parametern. So benötigt man z.B. einmal eine Ausführungspause von 100 µsek, ein andermal eine Pause von nur 40 µsek. Die Struktur des verwendeten Verzögerungsprogramms ist jedesmal gleich, nur die Verzögerungszeit ist unterschiedlich.

In solchen Fällen wird man einen Programmteil nicht zweimal in das Gesamtpro gramm einfügen, sondern ein Unterprogramm schreiben, das die gestellte Aufgabe erfüllt. Ein Unterprogramm ist ein Programm, das mit einem RET-Befehl endet und damit die Rückkehr an die Stelle des Aufrufes ermöglicht, sofern es mit einem speziellen Befehl (CALL) aufgerufen worden ist. Ein Unterprogramm (z.B. UP1) wird aus einem Hauptprogramm durch CALL aufgerufen.

            bla     bla
            bla     bla         ;Hauptprogramm
            CALL    UP1         ;Unterprogrammaufruf von UP1
            bla     bla
            bla     bla
;
UP1:        bla     bla         ;Ausführungsteil des
            bla     bla         ;  Unterprogramms
            RET                 ;Rücksprung zum Hauptprogramm

Dabei wird, wenn der Befehl CALL ausgeführt wird, zuerst die Adresse des nächsten Befehls nach CALL am Stack zwischengespeichert und dann verzweigt das Programm auf die Anfangsadresse von UP1. Am Ende des Unterprogramms steht der Befehl RET, der die zwischengespeicherte Adresse vom Stack nimmt und in den Program Counter lädt. Dies entspricht einem Rücksprung zum nächsten Befehl nach CALL im Hauptprogramm. Folgende Abbildung zeigt die Verhältnisse in graphischer Form.

Vorgänge beim Aufruf eines Unterprogramms

Mit diesem Mechanismus ist also sichergestellt, dass man ein Unterprogramm von beliebigen Stellen im Adressraum des Mikrocomputers aufrufen kann, und dass nach der Ausführung wieder mit dem nächsten Befehl nach CALL fortgesetzt wird.

Die Verwendung von Unterprogrammen ist ein sehr mächtiges Hilfswerkzeug bei der Programmierung von Mikroprozessoren, und sollte soviel wie möglich eingesetzt werden. Für die fehlerfreie Einsetzbarkeit eines Unterprogramms sollte man sich jedoch auch seiner Unzulänglichkeiten bewußt sein. Es ist daher unbedingt notwendig, bei der Dokumentation eines Unterprogramms nicht nur eventuelle Parameter und Ergebnisse abzulegen, sondern auch mögliche Gefahren und Ein schränkungen. Auch sollte man sich stets im klaren sein, welche Register und Speichervariablen vom Unterprogramm verändert werden.

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Unterprogramme [image] Parameterübergabe
Index
Siehe auch: Reentrante Unterprogramme

Parameterübergabe

Ein wichtiger Punkt bei der Gestaltung von Unterprogrammen ist die Übergabe von notwendigen Parametern. Dazu stehen im Wesentlichen drei Methoden zur Verfügung: Die Ubergabe in Registern, die Übergabe am Stack und die Übergabe durch Speichervariablen. Je nach Zahl und Art der Parameter wird man eine dieser drei Methoden oder eine Kombination davon wählen.

Die Parameterübergabe mit Registern ist die einfachste Methode, sie schränkt jedoch die Zahl der Parameter auf die Zahl der vorhandenen Register ein. Außer dem können im Allgemeinen nur einfache Integer-Parameter übergeben werden. Diese Methode wird meist dann verwendet, wenn man nur wenige Parameter benötigt (z.B. die Zahl der Durchläufe in Verzögerungsschleifen).

Das folgende Beispiel zeigt die Übergabe eines Parameters an ein Unterprogramm mit Hilfe eines Registers. Das Register HL wird mit dem gewünschten Wert geladen und dann das Unterprogramm DELAY aufgerufen. Im Unterprogramm DELAY wird HL solange dekrementiert, bis HL gleich null ist.

;
;           Hauptprogramm
;
            bla         bla
            LD          HL,1000     ;Parameter zur Übergabe
            CALL        DELAY       ;Aufruf der Verzögerung
            bla         bla
;
;           Unterprogramm
;
DELAY:      DEC         HL          ;Parameter dekrementieren
            LD          A,L         ;Überprüfung ob gleich 0
            OR          H
            JR          NZ,DELAY    ;Wiederholung bis HL=0
            RET

Für längere Parameterlisten bzw. für Unterprogramme, die von Compilern verwendet werden, wird man die Parameterübergabe via Stack einsetzen. Dazu werden vor dem Aufruf des Unterprogramms die notwendigen Parameter auf den Stack gelegt und das Unterprogramm holt die Parameter vor seiner eigentlichen Ausführung wieder vom Stack. Dabei gibt es allerdings eine kleine Hürde, die vor allem unter Anfängern immer wieder Verwirrung stiftet. Bei der Übergabe der Parameter via Stack hat man dafür zu sorgen, dass die Rücksprungadresse, die ja ganz zuoberst am Stack liegt, erhalten bleibt und trotzdem der Stack bereinigt wird. Das Unterprogramm muss also zuerst die Rücksprungadresse vom Stack nehmen, diese in einem Register zwischenspeichern, dann die übergebenen Parameter vom Stack holen und dann die Rücksprungadresse wieder auf den Stack schieben.

Dieser Vorgang klingt reichlich kompliziert und kann in der Tat zu schwer durchschaubaren Programmabstürzen führen, wenn durch einen Programmierfehler etwa der Stack nicht vollständig bereinigt wird. Trotz dieses komplizierten Vorgangs ist aber die Parameterübergabe via Stack bei bestimmten Programmen (reentrante und rekursive Programme, siehe unten) die einzig mögliche und sinnvolle.

Das folgende Beispiel zeigt an einem sehr einfachen Aufruf (nur ein Parameter) die Übergabe via Stack. Das Hauptprogramm lädt den gewünschten Parameter auf den Stack und ruft dann das Unterprogramm auf. Das Unterprogramm holt zuerst die durch den Befehl CALL gespeicherte Rücksprungadresse vom Stack. Dabei wird automatisch der Stackpointer inkrementiert, so dass er dann auf den übergebenen Parameter zeigt. Nun wird durch einen speziellen Austauschbefehl der Parameter mit der Rücksprungadresse getauscht, so dass nun die Rücksprungadresse am Stack liegt und der gewünschte Parameter im Register HL geladen ist.

;
;           Hauptprogramm
;
            bla         bla
            LD          HL,1000
            PUSH        HL
            CALL        DELAY
            bla         bla
;
;           Unterprogramm
;
DELAY:      POP         HL          ;Rücksprungadresse nach HL
            EX          (SP),HL     ;Parameter mit Rücksprung-
                                    ;   adresse tauschen
DEL1:       DEC         HL          ;Parameter dekrementieren
            LD          A,L         ;Überprüfung, ob gleich 0
            OR          H
            JR          NZ,DEL1     ;Wiederholung, bis HL=0
            RET

Die dritte Möglichkeit zur Parameterübergabe ist die Übergabe mit Hilfe von Speichervariablen. Diese Möglichkeit sollte man nur einsetzen, wenn große Felder übergeben werden, da sie leicht zu unerwünschten Nebeneffekten führen kann. Muss man an ein Unterprogramm ein Feld mit vielen Elementen übergeben, kann dies bei den anderen Methoden unmöglich sein, weil die Zahl der Register nicht ausreicht bzw. der Platz für den Stack zu klein ist. In diesem Fall übergibt man nicht das Feld selbst, sondern nur eine Zeigervariable, die die Adresse des Feldes enthält. Die Zeigervariable kann wahlweise über den Stack oder in Registern übergeben werden. Falls das Unterprogramm sehr spezielle Auf gaben erfüllt und die zu bearbeitenden Variablen ohnehin fix vereinbart sind, so kann die Übergabe eines Zeigers auch unterbleiben.

Das folgende Beispiel zeigt die Übergabe eines Parameters in einer Speicher variablen. Der gewünschte Wert des Parameters wird zuerst in einer globalen Variablen gespeichert und dann das Unterprogramm aufgerufen. Im Unterprogramm wird nun auf diese Variable zugegriffen und das Register HL mit diesem Wert initialisiert.

;
;           Hauptprogramm
;
            bla         bla
            LD          HL,1000
            LD          (ANYVAR),HL
            CALL        DELAY
            bla         bla
;
;           Unterprogramm
;
DELAY:      LD          HL,(ANYVAR) ;Parameter in HL laden
DEL1:       DEC         HL          ;Parameter dekrementieren
            LD          A,L         ;Überprüfung, ob HL = 0
            OR          H
            JR          NZ,DEL1     ;Wiederholung, bis HL = 0
            RET

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Unterprogramme [image] Seiteneffekte
Index
Siehe auch: Programm-Dokumentation

Seiteneffekte

Die Programmierung auf Assemblerebene birgt eine Menge von Fehlermöglichkeiten, die besonders von unerfahrenen Programmierern nicht oder zu wenig erkannt werden. Einer dieser Programmfehler, die oft erst sehr spät erkannt werden, sind so genannte Seiteneffekte. Darunter versteht man Wirkungen eines Unterprogramms, die neben dem eigentlichen Ziel des Unterprogramms ungewollt auftreten und meist in der aktuellen Applikation nicht in Erscheinung treten. Erst wenn man das Unterprogramm an einer anderen Programmstelle nochmals verwendet, kommt es vielleicht zu einem seltsamen Verhalten des Gesamtprogramms (z.B. läuft das Programm bei gleichen Anfangsbedingungen nicht immer gleich ab).

Solche Seiteneffekte beruhen oft auf veränderten Flags oder Registern, die dann im Hauptprogramm unterschiedliche Verhaltensweisen auslösen können. Auch ist die Veränderung von globalen Variablen oft die Ursache von Seiteneffekten. Einzige Abhilfe gegen solche unerwartete Effekte ist entweder, das jeweilige Unterprogramm rigoros zu dokumentieren, was sehr zeitaufwendig sein kann, oder sich zur Gewohnheit zu machen, Registerinhalte nur dann zu verändern, wenn dies aus der Funktion eines Unterprogramms erwartet wird. Benötigt man Register oder Variable nur innerhalb eines Unterprogramms, so sollte man diese zu Beginn eines Unterprogramms am Stack sichern und am Ende des Unterprogramms wieder vom Stack restaurieren.

Das folgende Programmbeispiel zeigt eine verbesserte Version des kleinen, oben gezeigten Delay-Programms, das nun keine Register mehr ändert. Dazu werden alle im Unterprogramm benötigten Register auf dem Stack gesichert (PUSH) und am Ende wieder hergestellt (POP).

DELAY:      PUSH        HL          ;HL sichern
            PUSH        AF          ;AF sichern
DEL1:       DEC         HL          ;Parameter dekrementieren
            LD          A,L         ;Überprüfung ob gleich 0
            OR          H
            JR          NZ,DEL1     ;Wiederholung bis HL=0
            POP         AF          ;AF wiederherstellen
            POP         HL          ;HL wiederherstellen
            RET

Last Update: 2005-Okt-17


Home [image] Mikroprozessoren [image] Programmierung eines Mikrocomputers [image] Unterprogramme [image] Reentrante Unterprogramme
Index
Siehe auch: Interruptverarbeitung, Parameterübergabe

Reentrante Unterprogramme

Reentrante Programme sind Programme, die ein zweites Mal aufgerufen werden können, bevor sie noch fertig bearbeitet sind. Reentrante (wiedereintrittsfähige) Programme sind vor allem bei der Bearbeitung von Interrupts unbedingt notwendig.

Angenommen, der Mikroprozessor bearbeitet momentan im normalen Programmablauf gerade eine Routine zur Division von zwei Zahlen. Währenddessen wird durch eine Interruptanforderung die Arbeit an der Divisionsroutine unterbrochen und die Interruptroutine abgearbeitet. Nach der Beendigung der Interrupt-Service-Routine wird dann die Divisionsroutine fortgesetzt, wo sie unterbrochen worden ist. Was geschieht aber, wenn die Interruptroutine unter anderem auch eben diese Divisionsroutine verwendet? Kann die unterbrochene Divisionsroutine wieder ordnungsgemäß fortgesetzt werden? - Ja, falls das Programm zur Division reentrant geschrieben ist.

Falls das Divisionsprogramm seine Zwischenergebnisse auf fixen Speicheradressen ablegt, würde ein zweiter Aufruf des Divisionsprogramms die alten Werte überschreiben und damit das Ergebnis des ersten zunichte machen. Reentrante Programme dürfen also ihre Zwischenergebnisse nicht in fixen Speicherpositionen ablegen, sondern müssen variable Speicheradressen verwenden, z.B. einen Stack oder eine andere Form von indizierten Speicherbereichen.

Last Update: 2005-Okt-17


Periphere Bausteine

Ein Mikroprozessor für sich alleine ist ein nutzloses Bauteil, das zwar Enthusiasten begeistern mag, das aber ohne Verbindung zur Außenwelt keinerlei Aufgaben erfüllen kann. Zum Verständnis eines Mikrocomputers gehört daher unbedingt das Verständnis seiner Schnittstellen. Diese Schnittstellen können allgemeinen Datenaustauschzwecken dienen (z.B. Parallel-Schnittstelle) oder aber spezielle Geräte ansteuern (z.B. Floppy-Disk-Controller).

In diesem Kapitel sollen die wichtigsten Schnittstellenbausteine besprochen und deren Eigenschaften durch Experimente dem Leser vermittelt werden. Dazu wurde eine kleine Karte entworfen (Platine SERPAR), die in Zusammenwirken mit dem im vorigen Kapitel beschriebenen Minimalsystem den Betrieb dieser Schnittstelle ermöglicht.

Last Update: 2005-Okt-08


Programmierbare Zähler

Der programmierbare Zähler oder Timer ist einer der wichtigsten Peripheriebausteine eines Mikrocomputers. Der Grund liegt darin, dass in einem Mikrocomputersystem sehr oft Takte mit einer bestimmten Frequenz erzeugt oder Zeiten gemessen werden müssen. Man kann alle diese Aufgaben zwar auch per Software lösen, jedoch verschwendet man dadurch meist, anderswo sinnvoller einsetzbare, Prozessorzeit. Außerdem ist die Genauigkeit von Softwaremethoden - bedingt durch Interrupts, DMA-Zugriffe oder Refresh-Zyklen - meist stark begrenzt. Ein Timer schafft hier Abhilfe und entlastet den Mikroprozessor.

Im Folgenden sollen anhand des Z80-CTCs (Counter Timer Circuit) einige Anwendungen von Zählern gezeigt werden.

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Counter und Timer [image] Z80-CTC
Index
Siehe auch: Programmierbare Zähler, Anschlüsse des CTC, Programmierung des CTC, Z80-CTC

Z80-CTC (Z8430, MK3883)

Der Z80-CTC besitzt vier programmierbare 8-Bit-Abwärts-Zähler, die wahlweise mit einem externen oder einem internen Takt versorgt werden können. Für die interne Taktversorgung steht pro Zähler ein 8-Bit-Teiler (Prescaler) zur Verfügung, der die Frequenz des CPU-Taktes (Anschluss CLK) wahlweise durch 16 oder 256 teilt, bevor dieser dem eigentlichen Zähler zugeleitet wird. Drei der vier Zähler besitzen einen Ausgang, an dem beim Nulldurchgang des Zählers ein Impuls abgegeben wird.

Die Abbildung zeigt das Blockdiagramm des Z80-CTC. Der Chip beinhaltet neben den vier Zählkanälen auch das entsprechende Bus-Interface und eine Interruptsteuerung. Jeder der Zähler wird über ein Kontroll- und ein Zeitkonstantenregister gesteuert, wobei das Kontrollregister dazu dient, die verschiedenen Betriebsarten des Zählers einzustellen. Das Zeitkonstantenregister dient zur Einstellung der Zählrate des 8-Bit-Zählers.

Z80-CTC Blockdiagramm

Last Update: 2007-Jän-03


Anschlüsse des CTC

Abbildung CTCPINS zeigt die Pinfunktionen und das Anschluss-Schema des Bausteins. Die Anschlüsse können in mehrere Gruppen zusammengefasst werden, die im folgenden kurz besprochen werden.

Anschluss-Schema

Datenbus

Der Datenbus besteht aus acht bidirektionalen Datenleitungen D0 - D7, auf denen der Transfer von Daten und Befehlen zwischen Mikroprozessor und CTC vor sich geht. D0 ist das LSB, D7 das MSB.

Steuerleitungen

Die Steuerleitungen dienen dem ansteuernden Mikroprozessor zur Kontrolle des Bausteins. Folgende Anschlüsse sind dazu vorgesehen:

CLK

Clock (Eingang).

Der Anschluss CLK wird mit dem Systemtakt des Mikroprozessors verbunden und dient zur Synchronisation der internen Abläufe.

/RES

Reset (Eingang, aktiv = LOW).TAG PINRESET

Dieser Anschluss hät alle Zähler an und setzt alle Interrupt-Enable Bits im Baustein zurück. Damit kann der CTC keine Interrupts mehr erzeugen. Die Ausgangsleitungen TOx und die Interruptleitung gehen in ihren inaktiven Zustand, der Datenbus wird hochohmig.

/RD

Read (Eingang, aktiv = LOW).

Der Pin /RD wird von der CPU aktiviert, wenn Daten oder Befehle zwischen dem Z80-CTC und der CPU transferiert werden sollen. Der CTC weist keinen entsprechenden Write-Eingang auf, sondern der Schreibvorgang wird durch ein Nichtanliegen des /RD-Signals gekennzeichnet (siehe auch /IORQ).

/IORQ

Input Output Request (Eingang, aktiv = LOW).

Die IORQ-Leitung wird in Verbindung mit den Leitungen /RD, /CE, CS0 und CS1 zur Steuerung des Daten- und Befehlstransfers zwischen CPU und CTC verwendet. Die folgende Tabelle gibt die möglichen Kombinationen dieser Signale und deren Bedeutung wieder:

/CE | /IORQ | /RD | CS0 | CS1 |
1 | X | X | X | X | CTC nicht selektiert
0 | 1 | X | X | X | CTC bereit für Transfer
0 | 0 | 0 | 0 | 0 | Lesen von Daten von Zähler 0
0 | 0 | 0 | 0 | 1 | Lesen von Daten von Zähler 1
0 | 0 | 0 | 1 | 0 | Lesen von Daten von Zähler 2
0 | 0 | 0 | 1 | 1 | Lesen von Daten von Zähler 3
0 | 0 | 1 | 0 | 0 | Ausgabe von Daten an Zähler 0
0 | 0 | 1 | 0 | 1 | Ausgabe von Daten an Zähler 1
0 | 0 | 1 | 1 | 0 | Ausgabe von Daten an Zähler 2
0 | 0 | 1 | 1 | 1 | Ausgabe von Daten an Zähler 3

/M1

Machine Cycle 1 (Eingang, aktiv = LOW).

Dieser Anschluss dient zur Synchronisation von bestimmten internen Operationen des CTC, unter anderem zur Interruptbestätigung. Er wird mit dem Anschluss M1 der CPU verbunden.

/CE

Chip Enable (Eingang, aktiv = LOW).

Ein LOW-Signal aktiviert den Baustein, so dass er Befehle oder Daten empfangen oder senden kann.

CS0

Channel Select 0 (Eingang).

Dieses Signal dient zusammen mit CS1 als Auswahlleitung zur Selektion eines der vier Zähler. CS0 und CS1 werden normalerweise an den Adressbus des Mikroprozessors angeschlossen (z.B. A0 und A1).

CS1

Channel Select 1 (Eingang).

Dieses Signal dient zusammen mit CS0 als Auswahlleitung zur Selektion eines der vier Zähler.

/M1

Machine Cycle 1 (Eingang, aktiv = LOW).

Dieser Anschluss dient zur Synchronisation von bestimmten internen Operationen des CTC, unter anderem zur Interruptbestätigung. Er wird mit dem Anschluss M1 der CPU verbunden.

/CE

Chip Enable (Eingang, aktiv = LOW).

Ein LOW-Signal aktiviert den Baustein, so dass er Befehle oder Daten empfangen oder senden kann.

CS0

Channel Select 0 (Eingang).

Dieses Signal dient zusammen mit CS1 als Auswahlleitung zur Selektion eines der vier Zähler. CS0 und CS1 werden normalerweise an den Adressbus des Mikroprozessors angeschlossen (z.B. A0 und A1).

CS1

Channel Select 1 (Eingang).

Dieses Signal dient zusammen mit CS0 als Auswahlleitung zur Selektion eines der vier Zähler.

Interruptleitungen

Die Interruptleitungen dienen zur Anforderung und Steuerung von Interruptzyklen. Eine genaue Beschreibung des Interruptablaufs ist weiter unten gegeben.

/INT | Interrupt (Ausgang, aktiv = LOW, open collector).
 | /INT wird aktiv (LOW), wenn der CTC einen Interrupt an die CPU meldet.
IEI | Interrupt Enable In (Eingang, aktiv = HIGH).
 | Eingang, der anzeigt, dass kein anderer Peripheriebaustein mit höherer Interrupt-Priorität gerade durch die CPU in einem Interruptzyklus bedient wird. Dieser Eingang wird in Verbindung mit dem Ausgang IEO (siehe unten) zur Bildung einer Daisy-Chain für die Interruptsteuerung verwendet.
IEO | Interrupt Enable Out (Ausgang, aktiv = HIGH).
 | Dieser Ausgang dient zum Blockieren von Interruptanforderungen von Bausteinen mit niedrigerer Priorität. IEO ist dann aktiv, wenn der Eingang IEI auf HIGH liegt und die CPU den angeforderten Interrupt noch nicht bearbeitet hat.

Counter

CLK/TG0 | External Clock / Trigger (Eingang, Polarität einstellbar).
 | Taktleitung für den Zähler 0. Diese Leitung fungiert als Taktleitung, wenn der Zähler im Zählermodus betrieben wird, und als Triggerleitung, wenn der CTC als Timer betrieben wird.
ZC/TO0 | Zero Count / Timeout (Ausgang, aktiv = HIGH).
 | Der Ausgang ZC/TO0 geht auf HIGH, wenn der Zähler den Wert Null erreicht. Da der Zähler beim Erreichen des Wertes Null wieder mit dem Wert des Zeitkonstantenregisters gesetzt wird, erscheint am Ausgang ZC/TO0 jeweils ein kurzer Impuls, der der Zeitdauer einer CLK-Periode entspricht.
CLK/TG1 | External Clock / Trigger (Eingang, Polarität einstellbar).
 | Taktleitung für den Zähler 1. Diese Leitung fungiert als Taktleitung, wenn der Zähler im Zählermodus betrieben wird, und als Triggerleitung, wenn der CTC als Timer betrieben wird.
ZC/TO1 | Zero Count / Timeout (Ausgang, aktiv = HIGH).
 | Der Ausgang ZC/TO1 geht auf HIGH, wenn der Zähler den Wert Null erreicht. Da der Zähler beim Erreichen des Wertes Null wieder mit dem Wert des Zeitkonstantenregisters gesetzt wird, erscheint am Ausgang ZC/TO1 jeweils ein kurzer Impuls, der der Zeitdauer einer CLK-Periode entspricht.
CLK/TG2 | External Clock / Trigger (Eingang, Polarität einstellbar).
 | Taktleitung für den Zähler 2. Diese Leitung fungiert als Taktleitung, wenn der Zähler im Zählermodus betrieben wird, und als Triggerleitung, wenn der CTC als Timer betrieben wird.
ZC/TO2 | Zero Count / Timeout (Ausgang, aktiv = HIGH).
 | Der Ausgang ZC/TO2 geht auf HIGH, wenn der Zähler den Wert Null erreicht. Da der Zähler beim Erreichen des Wertes Null wieder mit dem Wert des Zeitkonstantenregisters gesetzt wird, erscheint am Ausgang ZC/TO2 jeweils ein kurzer Impuls, der der Zeitdauer einer CLK-Periode entspricht.
CLK/TG3 | External Clock / Trigger (Eingang, Polarität einstellbar).
 | Taktleitung für den Zähler 3. Diese Leitung fungiert als Taktleitung, wenn der Zähler im Zählermodus betrieben wird und als Triggerleitung, wenn der CTC als Timer betrieben wird. Der Zähler 3 besitzt aus Platzgründen keinen Ausgang.

Last Update: 2005-Okt-17


Programmierung des CTC

Nach dem Einschalten der Versorgungsspannung ist der Zustand des CTCs nicht definiert. Erst ein Reset-Impuls setzt den CTC in einen bekannten Zustand. Nach einem Reset muss die Art der gewünschten Betriebsart eingestellt, die jeweiligen Zeitkonstanten geladen und eventuell die Interruptlogik aktiviert werden.

Jeder der vier Zähler des CTC kann unabhängig von den anderen Zählern in zwei verschiedenen Modi betrieben werden: dem Zählermodus und dem Timermodus. Beim Zählermodus wird ein externer Takt verwendet, beim Timermodus wird der Systemtakt über einen Vorteiler verwendet. Die Zählereingangsleitung steht dann als Triggerleitung zur Verfügung.

Zählermodus

Im Zählermodus werden die Schaltflanken des Signals am jeweiligen Pin CLK/TGx gezählt, wobei wahlweise die ansteigende oder die abfallende Flanke des Signals verwendet werden kann. Der 8-Bit-Zähler wird nach Auftreten einer Schaltflanke am Eingang jedoch nicht sofort weitergezählt, sondern erst synchron mit der nächsten ansteigenden Flanke des Systemtaktes (CLK). Dies bedeutet, dass der Zähler eines CTCs Signalfrequenzen bis zu einer Höchstfrequenz in der Höhe der Systemtaktfrequenz verarbeiten kann.

Bei jeder Signalflanke am Eingang CLK/TGx wird der Zählerstand um eins erniedrigt. Erreicht der Zähler den Stand Null, so wird ein Impuls auf der Ausgangsleitung ZC/TOx ausgegeben (bei Zähler drei wurde diese Leitung aus Platzgründen gespart), der Zähler mit dem Inhalt des Zeitkonstantenregisters neu geladen und eventuell ein Interrupt generiert.

Timermodus

Im Timermodus wird als Eingangssignal der interne Systemtakt (Anschluss CLK) verwendet, der über einen einstellbaren Vorteiler (/16 oder /256) auf den Eingang des Zählers gelegt wird. Die jetzt nicht benötigte Eingangsleitung CLK/TGx wird als optionale Triggerleitung verwendet, um den Timer zu einem definierten Zeitpunkt zu starten. Jeder Impuls aus dem Vorteiler dekrementiert den Zähler. Beim Nulldurchgang wird der Zähler wieder aus dem Zeitkonstantenregister geladen und außerdem ein Impuls am Ausgang TOx erzeugt. Bei Bedarf wird auch ein Interruptsignal an die CPU abgegeben. Am Ausgang TOx wird also eine regelmäßige Impulsfolge ausgegeben, wobei der zeitliche Abstand durch das Produkt aus der Periodendauer des Systemtaktes (tCLK), aus dem eingestellten Teilerverhältnis des Vorteilers (P) und dem Inhalt des Zeitkonstantenregisters TC definiert ist:

tCLK * P * TC

Die Triggerleitung kann per Software aktiviert oder deaktiviert werden. Ist sie aktiviert, so beginnt der Timer nach dem Einstellen des Timermodus und dem Laden der Zeitkonstante erst nach Eintreffen eines Triggerimpulses zu arbeiten. Die Triggerleitung ist flankengesteuert, wobei die aktive Signalflanke per Software ausgewählt werden kann.

Programmierung

Die Programmierung eines jeden der vier vorhandenen Zählerkanäle erfolgt immer in derselben Weise: zuerst muss das entsprechende Kontrollregister geladen werden und dann eventuell das Zeitkonstantenregister. Möchte man Interrupts verwenden, so muss außerdem noch das Interruptregister entsprechend gesetzt werden. Die folgende Abbildung zeigt die Bedeutung der einzelnen Bits dieser drei Register.

Z80-CTC Register

Die drei Register pro Zählerkanal werden wie folgt angesprochen: Das Kontrollregister und das Interruptregister können direkt gesetzt werden, das Zeitkonstantenregister existiert als 'Schattenregister' und kann nur indirekt über das Kontrollregister angesprochen werden. Bit 0 des Kontrollregisters entscheidet, ob die restlichen Bits ins Kontrollregister oder ins Interruptregister geladen werden. Ist dieses Bit gleich 1, so wird das Kontrollregister angesprochen, ist es gleich null, so gelten die restlichen Bits als Interruptvektor. Das Zeitkonstantenregister wird geladen, indem man zuerst im Kontrollregister das Bit 2 auf 1 setzt und dann auf die Adresse des Kontrollregisters die Zeitkonstante schreibt. Ein interner Umschaltmechanismus leitet das zweite Byte ins Zeitkonstantenregister.

Die einzelnen Bits des Kontrollregisters haben folgende Bedeutung:

Bit 7 | Interrupt enable
 | Falls dieses Bit auf eins gesetzt ist, erzeugt der betreffende Kanal bei jedem Nulldurchgang des Zählers eine Interruptanforderung an die CPU. ACHTUNG !!! Bevor dieses Bit gesetzt werden darf, muss der Interruptvektor initialisiert werden !
Bit 6 | Mode
 | Falls Bit 6 gleich eins ist, ist der Zählermodus ausgewählt. Der Zähler wird von einem externen Takt gesteuert, der Vorteiler wird nicht verwendet. Ist Bit 6 gleich null, so wird der Timermodus aktiviert und der Zähler wird über den Vorteiler mit dem Systemtakt verbunden.
Bit 5 | Range
 | Falls Bit 5 gleich eins ist, ist der Vorteiler auf 1/256 eingestellt, sonst auf 1/16. Dieses Bit hat nur im Timermodus Bedeutung (Bit 6 = 0).
Bit 4 | Slope
 | Mit diesem Bit wird die Art der aktiven Signalflanke des Takteingangs (CLK/TGx) ausgewählt. Falls Bit 4 gleich null ist, wird bei der negativen Signalflanke weitergezählt (Zählermodus) bzw. der Timer gestartet (Timermodus), andernfalls treten diese Aktionen bei der positiven Signalflanke ein.
Bit 3 | Trigger
 | Dieses Bit bestimmt, ob der Zähler im Timermodus frei laufen darf oder zuerst auf ein Triggersignal gewartet wird. Falls Bit 3 gleich eins ist, wird nach dem Laden der Zeitkonstante auf ein externes Triggersignal gewartet, bis der Timer gestartet wird. Nach dem Auftreten des Triggers läuft der Zähler frei durch. Falls Bit 3 gleich null ist, wird der Timer gleich nach dem Laden der Zeitkonstante gestartet und läuft dann frei durch.
Bit 2 | Load Time Constant
 | Falls dieses Bit gleich eins gesetzt wird, wartet der Zähler auf ein zweites Byte, das an die Adresse des Kontrollwortes geschrieben und ins Zeitkonstantenregister geladen wird. Die Zeitkonstante kann zwischen 0 und 255 liegen, wobei der Wert 0 dem Wert 256 entspricht, also die längste mögliche Zeitkonstante darstellt. Damit kann ein Zähler im Timer-Modus bei 4 MHz CPU-Takt Zeitverzögerungen zwischen 4 µs und 16.384 ms erzeugen. Für längere Werte können mehrere Zähler kaskadiert werden.
Bit 1 | Reset
 | Im Gegensatz zum Hardware-Reset (siehe Pinbeschreibung RESET, S. PAGEREF PINRESET) hält der Software-Reset nur den adressierten Zähler an. Zum Weiterzählen muss eine neue Zeitkonstante geladen werden. Werden Bit 1 und Bit 2 gleichzeigig auf eins gesetzt, so wird der Zähler angehalten und wartet auf die Eingabe einer neuen Zeitkonstante.
Bit 0 | Control/Interrupt
 | Ist dieses Bit gleich null, so wird der Interruptvektor geladen, ist es gleich eins, so werden die Bits 1-7 ins Kontrollregister geschrieben.

Interruptverarbeitung

Der Z80-CTC Interruptverarbeitung ermöglicht jedem der vier Zähler eine Interruptanforderung abzugeben, die den Interruptmodus 2 der CPU unterstützen, wobei jeder Zähler einen eindeutigen Interruptvektor generiert. Der für die Bearbeitung des Interrupts notwendige 16-Bit-Pointer (Startadresse der Interrupt-Service-Routine) wird aus dem Inhalt des CPU-Registers I (high Byte) und den Bits 3-7 des Interruptregisters des CTCs (low Byte) erzeugt. Zur eindeutigen Unterscheidung der einzelnen Zählerkanäle setzt der CTC in den Bits 1 und 2 automatisch die jeweilige Zählernummer (0-3) ein. Bit 0 des Interruptvektors ist immer gleich null.

Die Priorisierung der Interruptanforderungen erfolgt intern über eine Daisy-Chain, wobei Kanal 0 die höchste und Kanal 3 die niedrigste Priorität besitzt. Die Interruptanforderungen eines jeden Zählers können durch das Bit 7 des Kontrollregisters ein- und ausgeschaltet werden.

Eine interessante Eigenschaft des CTCs ist, dass dieser Baustein auch als Interruptcontroller eingesetzt werden kann. Dazu wird jeder Kanal in den Zählermodus gebracht und das Zeitkonstantenregister auf 1 gesetzt. Da der CTC bei jedem Nulldurchgang eines Zählers eine Interruptanforderung generieren kann, wird bei einer Zeitkonstante von 1 bei jeder Signalflanke (wahlweise fallend oder steigend, siehe Bit 4 des Kontrollregisters) ein Interrupt erzeugt. Natürlich können die Kanäle eines CTCs auch gemischt als Interruptcontroller und Zähler/Timer verwendet werden.

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Serielle Schnittstelle [image] Grundlagen
Index
Siehe auch: Programmierung des DART, Protokoll, RS-232-Standard und Verkabelungsbeispiele, Experiment: Serielle Ausgabe von Zeichen, Experiment: Empfang von Zeichen auf der seriellen Leitung, Experiment: Protokoll einer seriellen Schnittstelle

Serielle Schnittstelle

Eine der häufigsten Methoden, Daten von und zu einem Computer zu transportieren, ist die serielle Schnittstelle. Diese an sich einfache Schnittstelle wird von vielen Benutzern nicht richtig verstanden, da aufgrund einer größeren Zahl von einstellbaren Parametern und der von manchen Geräteherstellern schlampigen Verwendung des zugehörigen Standards oft für Verwirrung gesorgt ist.

Das Prinzip der seriellen Schnittstelle ist einfach und klar: ein Datenbyte, das gesendet werden soll, wird in einen seriellen Bitstrom umgewandelt und auf einer Leitung gesendet. Umgekehrt wird ein empfangener Bitstrom in ein Datenbyte zurückverwandelt.

Um die Daten fehlerfrei übertragen zu können, muss zwischen Sender und Empfänger eine Übereinkunft herrschen, in welchem Format (Geschwindigkeit, Steuerbits, etc.) die Daten übertragen werden. Man bezeichnet dieses Format als Protokoll der seriellen Schnittstelle.

Man unterscheidet bei seriellen Schnittstellen zwischen synchronen und asynchronen Verfahren. Beim schnelleren synchronen Verfahren wird ein Taktsignal parallel zum Datensignal übertragen. Das häufiger verwendete asynchrone Verfahren bietet zwar nicht eine so hohe Transferrate wie das synchrone, kommt dafür aber mit weniger Leitungen aus (Minimum drei Leitungen). Bausteine, die eine Umformung von parallel zu seriell und umgekehrt vornehmen, werden auch als USART (Universal Synchronous/Asynchronous Receiver/Transmitter) bezeichnet. Manche Bausteine beherrschen nur das asynchrone Verfahren und werden als UART bezeichnet.

Last Update: 2005-Okt-17


Protokoll

Um ein Datenbyte asynchron zu übertragen, müssen folgende Parameter bekannt sein:

  • Startzeitpunkt der Datenübertragung
  • Zeitdauer eines Bits
  • Zahl der übertragenen Bits
  • Eventuelle Prüfbits
    • Folgende Abbildung zeigt die serielle Übertragung der zwei Bytes $B7 und $89.
    Übertragung nach RS-232 Standard

    Die Übertragung beginnt mit dem Senden eines Startbits, dann werden die Datenbits beginnend mit dem LSB übertragen; es folgt ein optionales Parity-Bit, und die Übertragung wird durch ein oder zwei Stoppbits abgeschlossen. Nach dem letzten Stoppbit kann eine Pause eintreten oder aber das nächste Datenbyte übertragen werden.

    Die Geschwindigkeit der Datenübertragung wird durch die Zeitdauer eines Bits bestimmt und wird in Bit/s (Baud) angegeben; sie wird auch Baudrate genannt. Für die Baudrate gibt es standardisierte Werte, die auf +/- 2% eingehalten werden müssen.

    Das Paritätsbit dient zur Überprüfung von eventuell auftretenden Übertragungs-Fehlern. Je nachdem, wie die Parität gesetzt wurde (Odd, Even, None, Mark, Space), wird die Zahl der übertragenen Datenbits auf gerade oder ungerade Anzahl ergänzt.

    Die Verwendung eines Paritätsbits zur Fehlererkennung ist jedoch nicht sehr wirkungsvoll, da einerseits ohnehin nur Einzelfehler erkannt werden (wenn zwei Bits umkippen, bleibt die Parität erhalten) und andererseits eine bloße Fehlererkennung zu wenig ist. Beim Auftreten eines Fehlers muss die Übertragungssoftware den fehlerhaften Teil der Daten nochmals senden. Softwarepakete, die das können, verwenden aber meist wesentlich wirkungsvollere Fehlererkennungsalgorithmen (z.B. CRC), wodurch die Übertragung eines Paritätsbits überflüssig ist, da dies nur Zeit kostet.

    Die folgende Tabelle zeigt die möglichen Einstellungen des Protokolls der seriellen Schnittstelle:

    Baudrate: | 110,150,300,600,1200,2400,4800,9600,19200
Parität: | Odd, Even, None, Mark, Space
Stoppbit: | 1,2
Datenbits: | 6,7,8

    Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Serielle Schnittstelle [image] RS-232-Standard und Verkabelungsbeispiele
Index
Siehe auch: Serielle Schnittstelle

RS-232-Standard und Verkabelungsbeispiele

Für Verbindungen über serielle Leitungen gibt es mehrere Standards, der am meisten verwendete ist der RS-232C- oder V-24-Standard. Schnittstellen nach V-24-Standard arbeiten mit Pegeln kleiner als -3V und größer als +3V. Der Bereich dazwischen ist nicht definiert. Die Abbildung zeigt die Pinbelegung für die wichtigsten Pins der Schnittstelle.

RS-232-Pinbelegung

Je nachdem, ob die serielle Schnittstelle ein Modem, einen anderen Computer oder ein Terminal ansteuern soll, werden unterschiedliche Verdrahtungen verwendet. Abbildung rs232conn zeigt die Verdrahtung, um zwei Computer (beide DB-25-Anschluss) direkt (ohne Modem dazwischen) zu verbinden. Bei anderen Verbindungen dürfen die Leitungspaare 2 & 3 und 4 & 5 möglicherweise nicht gekreuzt werden.

RS-232-Verbindungskabel

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Serielle Schnittstelle [image] Z80-DART (Z8470)
Index
Siehe auch: Anschlüsse des DART, Programmierung des DART, Z80-DART

Z80-DART (Z8470)

Der Z80-DART (Dual Asynchronous Reveiver Transmitter) stellt zwei Kanäle zur Kommunikation über eine serielle Schnittstelle nach RS-232-Standard zur Verfügung. Neben den Datenleitungen verfügt dieser Baustein auch über Leitungen zur Modemkontrolle, die aber auch als 'general-purpose' I/O-Leitungen verwendet werden können. Die Datenrate kann durch zwei getrennte Taktleitungen zwischen null und 800 kHz (4 MHz-Version) eingestellt werden.

Die Abbildung zeigt den internen Aufbau des Bausteins. Jeder Kanal besitzt alle notwendigen Daten- und Steuerleitungen, die über mehrere Kontrollregister gesteuert werden. Der DART unterstützt den Interruptmodus 2 der CPU. Sender und Empfänger sind zweifach bzw. vierfach gepuffert, so dass auch bei hohen Baudraten der verwendete Mikroprozessor ohne Probleme mithalten kann.

Z80-DART Blockdiagramm

Last Update: 2007-Jän-03


Anschlüsse des DART

Folgende Abbildung zeigt die Pinfunktionen und das Anschlussschema des Bausteins. Die Anschlüsse können in mehrere Gruppen zusammengefasst werden, die im folgenden kurz besprochen werden sollen.

Z80-DART Anschlussschema

Datenbus

Der Datenbus besteht aus acht bidirektionalen Datenleitungen D0 - D7, auf denen der Transfer von Daten und Befehlen zwischen Mikroprozessor und DART vor sich geht. D0 ist das LSB, D7 das MSB.

Steuerleitungen

Die Steuerleitungen dienen dem ansteuernden Mikroprozessor zur Kontrolle des Bausteins. Folgende Anschlüsse sind dazu vorgesehen:

CLK

Clock (Eingang).

Der Anschluss CLK wird mit dem Systemtakt des Mikroprozessors verbunden und dient zur Synchronisation der internen Abläufe.

/RD

Read (Eingang, aktiv = LOW).

Der Pin /RD wird von der CPU aktiviert, wenn Daten oder Befehle zwischen dem Z80-DART und der CPU ausgetauscht werden sollen. Der DART weist keinen entsprechenden Write-Eingang auf, sondern der Schreibvorgang wird durch ein Nichtanliegen des /RD-Signals gekennzeichnet (siehe auch unter Pin /IORQ).

/IORQ

Input Output Request (Eingang, aktiv = LOW).

Die IORQ-Leitung wird in Verbindung mit den Leitungen /RD, /CE, B/A und C/D zur Steuerung des Daten- und Befehltransfers zwischen CPU und DART verwendet. Die folgende Tabelle gibt die möglichen Kombinationen dieser Signale und deren Bedeutung wieder:

/CE | /IORQ | /RD | C/D | B/A |
1 | X | X | X | X | DART nicht selektiert
0 | 1 | X | X | X | DART bereit für Transfer
0 | 0 | 0 | 0 | 0 | Lesen von Daten von Kanal A
0 | 0 | 0 | 0 | 1 | Lesen von Daten von Kanal B
0 | 0 | 0 | 1 | 0 | Befehlsregister Kanal A lesen
0 | 0 | 0 | 1 | 1 | Befehlsregister Kanal B lesen
0 | 0 | 1 | 0 | 0 | Ausgabe von Daten auf Kanal A
0 | 0 | 1 | 0 | 1 | Ausgabe von Daten auf Kanal B
0 | 0 | 1 | 1 | 0 | Befehle für Kanal A ausgeben
0 | 0 | 1 | 1 | 1 | Befehle für Kanal B ausgeben

/M1

Machine Cycle 1 (Eingang, aktiv = LOW).

Dieser Anschluss dient zur Synchronisation von bestimmten internen Operationen des DART, unter anderem zur Interruptbestätigung. Er wird mit dem Anschluss /M1 der CPU verbunden.

/CE

Chip Enable (Eingang, aktiv = LOW).

Ein LOW-Signal aktiviert den Baustein, so dass er Befehle oder Daten empfangen oder senden kann.

/RES

Reset (Eingang, aktiv = LOW).

Beide Kanäle werden zurückgesetzt, die Leitungen TxDA und TxDB werden inaktiv, die Modemkontrolleitungen gehen auf HIGH und die Interrupts werden gesperrt. Der Baustein muss nun neu initialisiert werden.

C/D

Control or Data Select (Eingang, HIGH = Control, LOW = Data).

Dieses Signal dient als Auswahlleitung zwischen Daten und Befehlen. Ist die Leitung HIGH, so werden Befehle und Statusinformationen zwischen CPU und DART ausgetauscht, ist sie LOW, werden Daten ausgestauscht.

B/A

Port B or A Select (Eingang, HIGH = Port B, LOW = Port A).

Diese Leitung dient zur Auswahl des angesprochenen Ports. Bei Anlegen eines HIGH-Signals wird Port B angesprochen, bei LOW Port A.

Interruptleitungen

Die Interruptleitungen dienen zur Anforderung und Steuerung eines Interruptzyklus.

/INT | Interrupt (Ausgang, aktiv = LOW, open collector).
 | /INT wird aktiv (LOW), wenn der DART einen Interrupt an die CPU meldet.
IEI | Interrupt Enable In (Eingang, aktiv = HIGH).
 | Eingang, der anzeigt, dass kein anderer Peripheriebaustein mit höherer Interrupt-Priorität momentan durch die CPU in einem Interruptzyklus bedient wird. Dieser Eingang wird in Verbindung mit dem Ausgang IEO (siehe unten) zur Bildung einer Daisy-Chain für die Interruptsteuerung verwendet.
IEO | Interrupt Enable Out (Ausgang, aktiv = HIGH).
 | Dieser Ausgang dient zum Blockieren von Interruptanforderungen von Bausteinen mit niedrigerer Priorität. IEO ist dann aktiv, wenn der Eingang IEI auf HIGH liegt und die CPU den angeforderten Interrupt noch nicht bearbeitet hat.

Kanal A und B

RxDA, RxDB | Receive Data (Eingänge, aktiv = HIGH).
 | Dateneingänge für den seriellen Datenstrom.
/RxCA | Receiver Clock A (Eingang).
 | Die Dateneingänge werden bei der ansteigenden Flanke der Receiver Clock abgefragt. Dieser Takt kann wahlweise das 1-, 16-, 32- oder 64fache der Datenrate betragen.
/TxCA | Transmitter Clock A (Eingang).
 | Die seriellen Daten werden mit der abfallenden Flanke der Transmitter Clock ausgegeben. Die Taktrate kann wahlweise das 1-, 16-, 32- oder 64fache der Datenrate betragen, jedoch müssen diese Faktoren mit den Faktoren des Empfängertaktes übereinstimmen.
/RxTxCB | Receiver / Transmitter Clock B (Eingang).
 | Die Dateneingänge werden bei der ansteigenden Flanke der Receiver Clock abgefragt. Die Datenausgabe erfolgt bei der abfallenden Flanke dieses Signals. Dieser Takt kann wahlweise das 1-, 16-, 32- oder 64fache der Datenrate betragen. Im Gegensatz zu Kanal A sind die Taktleitungen (aus Platzgründen) für Receiver und Transmitter zusammengefasst.
TxDA, TxDB | Transmit Data (Eingänge, aktiv = HIGH).
 | Datenausgänge für den seriellen Datenstrom.
W/RDYA, W/RDYB | Wait/Ready (Ausgänge, open drain).
 | Diese Anschlüsse haben zwei Funktionen und besitzen je nach Funktion unterschiedliche elektrische Eigenschaften. Zum einen können sie als WAIT-Leitung für die CPU dienen, um in einem Block-Transfer (Befehle INIR, OTIR, etc.) mehrere Daten zu lesen oder auszugeben. In diesem Fall sind die Ausgänge als open-drain Ausgänge geschaltet. Zum anderen können sie zur Abwicklung eines DMA-Transfers dienen und sind dann als normale TTL-kompatible Ausgänge geschaltet. Die Umschaltung zwischen den zwei Betriebsarten erfolgt per Software.
/RTSA, /RTSB | Request to Send (Ausgänge, aktiv = LOW).
 | Dieser Ausgang ist ein Modemsteuersignal, das über ein Bit im Kontrollregister gesetzt werden kann. Setzt man im Kontrollregister das entsprechende Bit auf HIGH, so wird die RTS-Leitung des Bausteins auf LOW gesetzt. Setzt man dieses Bit auf LOW, so wird die RTS-Leitung auf HIGH gesetzt, nachdem der Sender das gesamte Zeichen gesendet hat.
/CTSA, /CTSB | Clear to Send (Schmitt-Trigger-Eingänge, aktiv = LOW).
 | Die Eingänge CTS können wahlweise als universelle Eingänge oder als Handshake-Leitungen benützt werden (Auswahl durch Kontrollregister). Falls CTSx als Handshake-Leitungen programmiert sind, hält ein HIGH-Signal den Sender an und die Datenübertragung wird gestoppt.
/RIA, /RIB | Ring Indicator (Eingänge, aktiv = LOW).
 | RIx kann wahlweise als universelle Eingangsleitung oder als Modemsignal verwendet werden. Bei Verwendung als Modemsignal kann der Baustein eine Interruptanforderung generieren.
/DTRA, /DTRB | Data Terminal Ready (Ausgänge, aktiv = LOW).
 | Die Zustände dieser Leitungen werden durch das DTR-Bit in den Kontrollregistern programmiert. Sie können auch als universelle Ausgänge verwendet werden.
/DCDA, /DCDB | Data Carrier Detect (Eingänge, aktiv = LOW).
 | Diese Anschlüsse dienen als Modemsignale und schalten den Empfänger ein oder aus. Sie können auch als universelle Eingänge verwendet werden.

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Serielle Schnittstelle [image] Programmierung des DART
Index
Siehe auch: Serielle Schnittstelle, Z80-DART (Z8470)

Programmierung des DART

Die beiden Kanäle des DART sind identisch und werden auch durch die gleichen Kommandos programmiert. Welcher Kanal angesprochen wird, hängt alleine vom Signal am Pin 'A/B' ab. Einzige Ausnahme stellt das Register für den Interruptvektor dar, da dieser nur für Kanal B geladen wird, aber für beide Kanäle gilt. Die folgende Beschreibung behandelt daher nur die Programmierung von Kanal B.

Zur Programmierung stehen fünf Register zum Schreiben zur Verfügung und drei Register, die gelesen werden können. Das bedeutet, dass man (bis auf das Interruptvektorregister) Register, die beschrieben werden, nicht wieder lesen kann. Zur Behandlung von speziellen Situationen (z.B. Steuerung der Handshake-Leitungen) muss man also im Programm den jeweiligen Zustand der Register mitführen.

Da für jeden Kanal nur eine Adressleitung zur Verfügung steht, ist von außen nur das Register Null erreichbar. Alle anderen Register werden angesprochen, indem man zuerst die Nummer des gewünschten Registers ins Register Null schreibt. Dadurch wird intern der Baustein vorbereitet, so dass der nächste Wert, der hineingeschrieben wird, in das spezifizierte Register gelangt. Die untenstehende Tabelle führt alle Register eines Kanals an:

Leseregister

Register | Bit | Bedeutung
RR0: | 0 | Empfänger enthält Zeichen
 | 1 | Interrupt wartet auf Bearbeitung (nur Kanal A)
 | 2 | Sendepuffer ist leer
 | 3 | Zustand der Leitung DCD
 | 4 | Zustand der Leitung RI
 | 5 | Zustand der Leitung CTS
 | 6 | nicht verwendet
 | 7 | Break
RR1: | 0 | alle Zeichen gesendet
 | 1-3 | nicht verwendet
 | 4 | Parityfehler
 | 5 | Empfängerüberlauf
 | 6 | Protokollfehler
 | 7 | nicht verwendet
RR2: | 0-7 | Interruptvektor für Z80-Interruptmodus IM2

Schreibregister

Register | Bit | Bedeutung
WR0: | 0-2 | Registerauswahl:
 |  | 000 = Register 0
 |  | 001 = Register 1
 |  | 010 = Register 2
 |  | 011 = Register 3
 |  | 100 = Register 4
 |  | 101 = Register 5
 | 3-5 | Reset/Interrupt:
 |  | 000 = keine Aktion
 |  | 001 = nicht verwendet
 |  | 010 = Status-Interrupt rücksetzen
 |  | 011 = Kanal initialisieren
 |  | 100 = Interrupt bei nächstem Zeichen
 |  | 101 = wartenden Sender-Interrupt rücksetzen
 |  | 110 = Fehlerflags zurücksetzen
 |  | 111 = Software-RETI (nur Kanal A)
 | 6-7 | nicht verwendet
WR1: | 0 | Externen Interrupt erlauben
 | 1 | Transmitter-Interrupt erlauben
 | 2 | Status beeinflusst Interruptvektor (nur Kanal B)
 | 3-4 | Interruptmodi:
 |  | 00 = Empfänger-Interrupt abschalten
 |  | 01 = Empfänger-Interrupt beim ersten Zeichen
 |  | 10 = Interrupt bei jedem empfangenen Zeichen (Parity beeinflusst Interruptvektor)
 |  | 11 = Interrupt bei jedem empfangenen Zeichen (Parity beeinflusst Interruptvektor nicht)
 | 5 | Wait/Ready on R/T
 | 6 | Wait/Ready-Funktion
 | 7 | Wait/Ready erlauben
WR2: | 0-7 | Interruptvektor für Modus IM2 (nur Kanal B)
WR3: | 0 | Empfänger einschalten
 | 1-4 | nicht verwendet (auf null legen)
 | 5 | Auto-Modus einschalten
 | 6-7 | Zahl der Datenbits im Empfänger:
 |  | 00 = 5 Bits
 |  | 01 = 6 Bits
 |  | 10 = 7 Bits
 |  | 11 = 8 Bits
WR4: | 0 | Parity einschalten
 | 1 | Parity even/odd (1=even, 0=odd)
 | 2-3 | Zahl der Stoppbits:
 |  | 00 = ungültig
 |  | 01 = 1 Stoppbit
 |  | 10 = 1.5 Stoppbit
 |  | 11 = 2 Stoppbit
 | 4-5 | nicht verwendet
 | 6-7 | Taktfrequenzfaktor:
 |  | 00 = x1
 |  | 01 = x16
 |  | 10 = x32
 |  | 11 = x64
WR5: | 0 | nicht verwendet
 | 1 | RTS
 | 2 | nicht verwendet
 | 3 | Sender einschalten
 | 4 | Break senden
 | 5-6 | Zahl der Datenbits im Sender
 |  | 00 = 5 Bits
 |  | 01 = 6 Bits
 |  | 10 = 7 Bits
 |  | 11 = 8 Bits
 | 7 | DTR

Da die Möglichkeiten der DART-Programmierung sehr groß sind, sollen hier nur die wichtigsten Steuercodes anhand eines Beispiels erklärt werden. Die Programmierung des DART teilt sich immer in zwei Phasen, die Initialisierung und die Einstellung von Arbeitsparametern. Bei der Initialisierung werden der Interruptmodus, der Interruptvektor, die Betriebsart des DART u.ä. festgelegt. Sie wird im allgemeinen nur einmal während des Kaltstarts durchgeführt. Die Einstellung der Parameter wird öfter benötigt und sollte davon getrennt programmiert sein.

Initialisierung:

Eine typische Initialisierungssequenz könnte wie folgt aussehen:

;
; Register 2: Interruptvektor, niederwertiges Byte
;
            LD      A,2
            OUT     (DARTB),A   ;Register 2 anwählen
            LD      A,ILOW
            OUT     (DARTB),A   ;Interruptvektor laden
;
; Register 1:       Betriebsart und Interruptmodus.
;                   Wait ein, Ready aus, Status beeinflusst
;                   Interruptvektor, Interrupt bei jedem
;                   empfangenen Zeichen, Senderinterrupt
;                   ein.
;
            LD      A,1
            OUT     (DARTB),A   ;Register 1 anwählen
            LD      A,07CH
            OUT     (DARTB),A   ;Betriebsmodus setzen
;
; Register 3:       Empfänger einstellen
;                   Empfänger ein, 8 Datenbits,
;                   Auto-Modus aus
;
            LD      A,003H
            OUT     (DARTB),A   ;Register 3 anwählen
            LD      A,0C1H
            OUT     (DARTB),A   ;Empfänger einstellen
;
; Register 4:       Stoppbits, Parity und Takt
;                   1 Stoppbit, Parity aus, x16-Modus
;
            LD      A,004H
            OUT     (DARTB),A   ;Register 4 anwählen
            LD      A,044H
            OUT     (DARTB),A   ;Stoppbits und Parity
;
; Register 5:       Sender und Steuerleitungen einstellen
;                   DTR=1, RTS=0, Sender ein, 8 Datenbits
;
            LD      A,005H
            OUT     (DARTB),A   ;Register 5 anwählen
            LD      A,0E8H
            OUT     (DARTB),A   ;Sender einstellen

Einstellung der Parameter:

Die Einstellung der Parameter bezieht sich in erster Linie auf die Einstellung des Übertragungsprotokolls, wobei die Baudrate nur in geringem Maße durch Veränderung des Teilungsfaktors des Vorteilers (x1, x16, x32, x64) innerhalb des DART eingestellt werden kann.

Das folgende Programm zeigt für den Kanal A des DART eine Möglichkeit, das Protokoll einzustellen. Dabei wird angenommen, dass Kanal 2 des CTC den erforderlichen Takt für die Baudrate erzeugt (1.536 MHz). Als Parameter wird ein 8-Bit-Wert im Akkumulator übergeben. Die Kombination dieser acht Bits bestimmt die Einstellung der Schnittstelle (siehe Kommentar im Programm).

;===================================================
;--- setup protocol of DART-A ----------------------
;===================================================
;
;Eingang:   AKKU enthält Steuerzeichen
;Ausgang:   Protokoll von DART-A eingestellt
;
;           8,7,6 ... Baudrate:
;                       OFF OFF OFF = 150 Baud
;                       OFF OFF ON  = 300 Baud
;                       OFF ON  OFF = 600 Baud
;                       OFF ON  ON  = 1200 Baud
;                       ON  OFF OFF = 2400 Baud
;                       ON  OFF ON  = 4800 Baud
;                       ON  ON  OFF = 9600 Baud
;                       ON  ON  ON  = 19200 Baud
;           5 ..... Number of data bits:
;                       OFF = 7 data bits
;                       ON  = 8 data bits
;           4 ..... parity enable:
;                       ON  = parity bit wird erzeugt
;                       OFF = kein parity bit
;           3 ..... parity:
;                       OFF = even
;                       ON  = odd
;           2 ..... Zahl der Stoppbits
;                       ON  = 2 Stoppbits
;                       OFF = 1 Stoppbit
;           1 ..... unbenutzt
;
            .GLOBAL SETPDA
SETPDA:     PUSH    AF
            PUSH    HL
            LD      (PROTBK),A
            SRL     A           ;Baudrate
            SRL     A
            SRL     A
            SRL     A
            AND     0EH
            PUSH    AF          ;speichern für CLK-mode
            LD      HL,BAUDTB
            ADDHLA
;           LD      A,3
;           OUT     (CTC2),A    ;Timer stoppen
            LD      A,(HL)
            OUT     (CTC2),A    ;Modus laden
            INC     HL
            LD      A,(HL)
            OUT     (CTC2),A    ;Zeitkonstante laden
;
            LD      HL,PROTBK   ;Parität
            POP     AF
            CP      4           ;Baudrate <= 300 ?
            LD      A,044H      ;x16 Modus
            JR      NC,$6
            LD      A,0C4H      ;x64 Modus
$6:         BIT     2,(HL)      ;Parität even/odd
            JR      NZ,$1
            SET     1,A
$1:         BIT     3,(HL)      ;Parität aus/ein
            JR      Z,$2
            SET     0,A
$2:         BIT     1,(HL)      ;Zahl der Stoppbits
            JR      Z,$5
            SET     3,A
$5:         PUSH    AF          ;DART register laden
            LD      A,4
            OUT     (DARTAC),A
            POP     AF
            OUT     (DARTAC),A
;
            LD      A,5         ;Sender Datenbits
            OUT     (DARTAC),A
            LD      A,0AAH
            BIT     4,(HL)
            JR      Z,$3
            SET     6,A
$3:         OUT     (DARTAC),A
            LD      (DAREG5),A  ;Register 5 enthält RTS
;
            LD      A,3         ;Empfänger Datenbits
            OUT     (DARTAC),A
            LD      A,041H
            BIT     4,(HL)
            JR      Z,$4
            SET     7,A
$4:         OUT     (DARTAC),A
;
            POP     HL
            POP     AF
            RET
;
            .DATA
PROTBK: DEFB        0           ;Steuerbits
DAREG5:     DEFB    0           ;RTS-Kontrolle Reg.5
            .CODE
;
BAUDTB:     DEFB    47H,160     ; 150 BAUD
            DEFB    47H,80      ; 300 Baud
            DEFB    47H,160     ; 600 BAUD
            DEFB    47H,80      ; 1200
            DEFB    47H,40      ; 2400
            DEFB    47H,20      ; 4800
            DEFB    47H,10      ; 9600
            DEFB    47H,5       ; 19200 Baud

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Parallele Schnittstelle [image] Parallele Schnittstelle
Index
Siehe auch: 16-Bit-Parallelschnittstelle mit Registern, Centronics-Schnittstelle, IEEE-488-Bus

Parallele Schnittstelle

Eine der einfachsten und am häufigsten eingesetzten Schnittstellen ist die parallele Schnittstelle. Im einfachsten Fall kann man eine Parallelschnittstelle durch Register, Latches oder Treiber realisieren. Dies ist sicher immer dann von Vorteil, wenn die Anforderungen an diese Schnittstelle festliegen und nicht zu hoch sind. Ein typisches Beispiel wäre der Einsatz einer parallelen Schnittstelle zur Ansteuerung eines 7-Segment-Displays. Obwohl es für die Ansteuerung von solchen Anzeigen eigene Controller-Chips gibt, ist es oft einfacher (und billiger), diese mit ein paar Latches anzusteuern.

Solche einfachen Schnittstellen haben jedoch den Nachteil, dass deren Funktionalität stark begrenzt ist. Für den variablen Einsatz von Parallelschnittstellen wurden daher integrierte Schaltungen entwickelt, deren Funktionalität programmierbar ist. Damit wird man unabhängig von den bei der Entwicklung gestellten Anforderungen und kann nachträglich die Schnittstelle per Software den geänderten Verhältnissen anpassen.

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Parallele Schnittstelle [image] 16-Bit-Parallelschnittstelle mit Registern
Index
Siehe auch: Parallele Schnittstelle, Z80-PIO (Z8420)

16-Bit-Parallelschnittstelle mit Registern

Im Folgenden soll die einfache Realisierung einer 16-Bit-Parallelschnittstelle gezeigt werden, die nur eine Richtung der Datenübertragung ermöglicht und mit der zwei 7-Segment-Ziffern angesteuert werden. Die Schnittstelle wird durch zwei 8-Bit-Latches vom Typ 74LS574 konstruiert, die vom 8-Bit-Mikroprozessor mit zwei verschiedenen I/O-Adressen angesteuert werden. Die entsprechende Schaltung:

Einfache 16-Bit-Parallelschnittstelle

Das Select-Signal und die Adressleitung A0 decodieren zwei aufeinanderfolgende Adressen im I/O-Adressraum des Mikroprozessors. Man beachte, dass auf eine gesonderte Read/Write-Umschaltung verzichtet wurde, da mit dieser Schnittstelle Daten ohnehin nur in eine Richtung übertragen werden können. Ein Lesebefehl würde die Register zwar ansprechen, jedoch wäre der Zustand der Ausgänge nicht definiert.

Die Leuchtdiodensegmente werden über Widerstände zur Strombegrenzung direkt an die Ausgänge der Register angeschlossen. Die 7-Segment-Anzeigen müssen Typen mit gemeinsamer Anode sein, da nur in dieser Konfiguration die Register genügend Strom liefern können (der vom Baustein LS574 lieferbare Strom im LOW-Zustand beträgt maximal 24 mA pro Ausgang, im HIGH-Zustand jedoch nur 2.6 mA). Dies bedingt, dass die Ausgänge invertiert angesteuert werden müssen (LOW = Leuchtdiode ein), was aber mit Hilfe des Mikroprozessors ohne Probleme bewältigt werden kann.

Ein mögliches Programm zur Ansteuerung dieser Schnittstelle ist unten aufgelistet. Es erlaubt, eine beliebige 8-Bit-Zahl als zweistellige hexadezimale Zahl auf dem Display auszugeben. Die Ausgabe geschieht in zwei Schritten: Zuerst wird die niederwertige Ziffer ausgegeben, dann die höherwertige. Jede Ziffer wird über eine Tabelle (DIGTAB) in die entsprechenden 7-Segmentkombinationen umgesetzt und dann an die Parallelschnittstelle ausgegeben. Die Ansteuerungsroutine ist als Unterprogramm geschrieben, das als Parameter die auszugebende Zahl im AKKU erhalten muss.

;
DIG1        EQU     $xx         ;Adresse LOW digit
DIG2        EQU     $xx         ;Adresse HIGH digit
;
;====================================================
;--- Ausgabe einer hexadezimalen Zahl ---------------
;====================================================
;
;ENTRY:     AKKU enthält Zahl (0-255)
;EXIT:      Hexadezimale Repräsentation am Display
;
OUTA:       PUSH    AF          ;high digit sichern
            AND     $0F         ;low digit maskieren
            LD      HL,DIGTAB   ;Zifferntabelle
            ADD     A,L         ;Einspringpunkt
            LD      A,0         ;  berechnen
            ADC     A,H
            LD      A,(HL)      ;7-Segmentcode laden
            CPL
            OUT     (DIG1),A    ;Ziffer ausgeben
            POP     AF          ;ursprüngliche Zahl
            AND     $F0         ;high digit maskieren
            RRCA
            RRCA
            RRCA
            RRCA
            LD      HL,DIGTAB   ;Einspringpunkt
            ADD     A,L         ;  berechnen
            LD      A,0
            ADC     A,H
            LD      A,(HL)      ;7-Segmentcode
            CPL
            OUT     (DIG2),A    ;Ziffer ausgeben
            RET
;
DIGTAB:     DEFB    $3F,$06,$5B,$4F,$66,$6D,$7D,$07
            DEFB    $7F,$6F,$77,$7C,$39,$5E,$79,$71
;

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Parallele Schnittstelle [image] Z80-PIO (Z8420)
Index
Siehe auch: 16-Bit-Parallelschnittstelle mit Registern, Anschlüsse des Z80-PIO, Programmierung des PIO, Experiment: Ansteuerung einer Tastatur mit 16 Tasten, Experiment: Aufbau einer Centronics-Schnittstelle

Z80-PIO (Z8420)

Der Baustein Z8420 stellt eine programmierbare Parallelschnittstelle mit folgenden Eigenschaften zur Verfügung:

  • Zwei voneinander unabhängige 8 Bit breite Schnittstellen (Ports)
  • Unterstützung des Z80-Interruptmodus IM2
  • Möglichkeit zum Hardware-Handshake bei der Datenübergabe
  • Richtung des Datentransfers für jede Leitung definierbar
  • ein Port ist bidirektional
  • alle Ein- und Ausgänge sind TTL-kompatibel
            •

    Last Update: 2005-Okt-17


Anschlüsse des Z80-PIO

Die Abbildung zeigt die Pinfunktionen und das Anschlussschema des Bausteins. Die Anschlüsse können in mehrere Gruppen zusammengefasst werden, die im folgenden kurz besprochen werden.

Z80-PIO Anschlussschema

Datenbus

Der Datenbus besteht aus acht bidirektionalen Datenleitungen D0 - D7, auf denen der Transfer von Daten und Befehlen zwischen Mikroprozessor und PIO vor sich geht. D0 ist das LSB, D7 das MSB.

Steuerleitungen

Die Steuerleitungen dienen dem ansteuernden Mikroprozessor zur Kontrolle des Bausteins. Folgende Anschlüsse sind dazu vorgesehen:

CLK

Clock (Eingang).

Der Anschluss CLK wird mit dem Systemtakt des Mikroprozessors verbunden und dient zur Synchronisation der internen Abläufe.

/RD

Read (Eingang, aktiv = LOW).

Der Pin /RD wird von der CPU aktiviert, wenn Daten oder Befehle zwischen dem Z80-PIO und der CPU transferiert werden sollen. Der PIO weist keinen entsprechenden Write-Eingang auf, sondern der Schreibvorgang wird durch ein Nichtanliegen des /RD-Signals gekennzeichnet (siehe auch /IORQ).

/IORQ

Input Output Request (Eingang, aktiv = LOW).

Die IORQ-Leitung wird in Verbindung mit den Leitungen /RD, /CE, B/A und C/D zur Steuerung des Daten- und Befehltransfers zwischen CPU und PIO verwendet. Die folgende Tabelle gibt die möglichen Kombinationen dieser Signale und deren Bedeutung wieder:

/CE | /IORQ | /RD | C/D | B/A |
1 | X | X | X | X | PIO nicht selektiert
0 | 1 | X | X | X | PIO bereit für Transfer
0 | 0 | 0 | 0 | 0 | Lesen von Daten von Port A
0 | 0 | 0 | 0 | 1 | Lesen von Daten von Port B
0 | 0 | 0 | 1 | 0 | Befehlsregister Port A lesen
0 | 0 | 0 | 1 | 1 | Befehlsregister Port B lesen
0 | 0 | 1 | 0 | 0 | Ausgabe von Daten auf Port A
0 | 0 | 1 | 0 | 1 | Ausgabe von Daten auf Port B
0 | 0 | 1 | 1 | 0 | Befehle an Port A ausgeben
0 | 0 | 1 | 1 | 1 | Befehle an Port B ausgeben

/M1

Machine Cycle 1 (Eingang, aktiv = LOW).

Dieser Anschluss dient zur Synchronisation von bestimmten internen Operationen des PIO und zur Interruptbestätigung. Er wird mit dem Anschluss /M1 der CPU verbunden.

/CE

Chip Enable (Eingang, aktiv = LOW).

Ein LOW-Signal aktiviert den Baustein, so dass er Befehle oder Daten empfangen oder senden kann.

C/D

Control/Data Select (Eingang, HIGH=Control, LOW=Data).

Dieses Signal dient als Auswahlleitung zwischen Daten und Befehlen. Ist die Leitung HIGH, so werden Befehle und Statusinformationen zwischen CPU und PIO ausgetauscht, ist sie LOW, werden Daten ausgestauscht.

B/A

Port B or A Select (Eingang, HIGH = Port B, LOW = Port A).

Diese Leitung dient zur Auswahl des angesprochenen Ports. Bei Anlegen eines HIGH-Signals wird Port B angesprochen, bei LOW Port A.

Interruptleitungen

Die Interruptleitungen dienen zur Anforderung und Steuerung eines Interruptzyklus.

/INT | Interrupt (Ausgang, aktiv = LOW, open collector).
 | /INT wird aktiv (LOW), wenn der PIO einen Interrupt an die CPU meldet.
IEI | Interrupt Enable In (Eingang, aktiv = HIGH).
 | Eingang, der anzeigt, dass kein anderer Peripheriebaustein mit höherer Interrupt-Priorität gerade durch die CPU in einem Interruptzyklus bedient wird. Dieser Eingang wird in Verbindung mit dem Ausgang IEO (siehe unten) zur Bildung einer Daisy-Chain für die Interruptsteuerung verwendet.
IEO | Interrupt Enable Out (Ausgang, aktiv = HIGH).
 | Dieser Ausgang dient zum Blockieren von Interruptanforderungen von Bausteinen mit niedrigerer Priorität. IEO ist dann aktiv, wenn der Eingang IEI auf HIGH liegt und die CPU den angeforderten Interrupt noch nicht bearbeitet hat.

Port A und B

A0-A7 | Datenleitungen Port A (bidirektional, Tri-State).
 | Auf diesen Leitungen werden Informationen vom oder zum angeschlossenen peripheren Gerät transportiert. A0 ist das niederwertigste, A7 das höherwertigste Bit.
ARDY | Port A Ready (Ausgang, aktiv = HIGH).
 | Die Bedeutung dieses Signals hängt von der Betriebsart von Port A ab:
 | Output: | ARDY zeigt an, dass die Ausgänge mit der gewünschten Information gesetzt sind und die Leitungen A0-A7 stabil sind.
 | Input: | ARDY zeigt an, dass das Eingangsregister gelesen worden ist und das nächste Byte übernommen werden kann.
 | Bidirektional: | ARDY zeigt an, dass das Ausgangsregister von Port A Daten zum Transfer enthält. Die Daten werden aber erst auf den Port gelegt wenn /ASTB aktiviert wurde
/ASTB | Port A Strobe Pulse (Eingang, aktiv = LOW).
 | Die Bedeutung dieses Signals hängt von der Betriebsart von Port A ab:
 | Output: | Ein Impuls auf /ASTB zeigt an, dass das Peripherie-Gerät die Daten des Ports übernommen hat.
 | Input: | Das periphere Bauelement legt einen Impuls an /ASTB, um Daten in den PIO einzugeben.
 | Bidirektional: | In dieser Betriebsart werden Daten, die im Ausgangsregister von Port A stehen, auf die externen Leitungen gegeben, wenn /ASTB aktiv
B0-B7 | Datenleitungen Port B (bidirektional, Tri-State).
 | Auf diesen Leitungen werden Informationen vom oder zum angeschlossenen peripheren Gerät transportiert. B0 ist das niederwertigste, B7 das höherwertigste Bit.
BRDY | Port B Ready (Ausgang, aktiv = HIGH).
 | Die Bedeutung dieses Signals hängt von der Betriebsart von Port B ab:
 | Output: | BRDY zeigt an, dass die Ausgänge mit der gewünschten Information gesetzt sind und die Leitungen B0-B7 stabil sind.
 | Input: | BRDY zeigt an, dass das Eingangsregister gelesen worden ist und das nächste Byte übernommen werden kann.
 | BRDY hat außerdem für den bidirektionalen Modus von Port A die Aufgabe, anzuzeigen, wann das Eingangsregister von Port A leer ist.
/BSTB | Port B Strobe Pulse (Eingang, aktiv = LOW).
 | Die Bedeutung dieses Signals hängt von der Betriebsart von Port B ab:
 | Output: | Ein Impuls auf /ASTB zeigt an, dass das Peripherie-Gerät die Daten des Ports übernommen hat.
 | Input: | Das periphere Bauelement legt einen Impuls an /ASTB, um Daten in den PIO einzugeben.
 | Außerdem hat /BRDY im bidirektionalen Modus von Port A die Aufgabe, Daten beim Auftreten eines Impulses an /BSTB in Port A zu übernehmen.

Last Update: 2005-Okt-17


Programmierung des PIO

Nach dem Einschalten der Versorgungsspannung befindet sich der PIO im Reset-Zustand, bei dem alle Leitungen bis auf die Handshake-Leitungen ARDY und BRDY (diese sind auf LOW-Potential) hochohmig sind und der Interruptcontroller ausgeschaltet ist.

Die beiden Ports des PIO können unabhängig voneinander in drei verschiedenen Modi betrieben werden, wobei für Port A ein zusätzlicher bidirektionaler Modus zur Verfügung steht:

Modus 0: | Alle Leitungen eines Ports als Ausgang konfiguriert.
Modus 1: | Alle Leitungen eines Ports als Eingang konfiguriert.
Modus 2: | Bidirektionaler Betrieb von Port A.
Modus 3: | Jede Leitung eines Ports kann individuell als Eingang oder als Ausgang konfiguriert werden.

Z80-PIO Steuerwörter

Die Programmierung eines jeden PIO-Kanals geschieht in zwei Phasen. Zuerst muss die Betriebsart eingestellt werden und nach der Definition der Betriebsart muss gegebenenfalls noch der Interruptmechanismus initialisiert werden. Zur Einstellung der Betriebsart wird an den Control-Port des PIO (CD-SEL = HIGH) ein Byte mit der in der Abbildung gezeigten Bitbelegung gesendet, wobei die Bits 6 & 7 (M0 und M1) die Betriebsart definieren:

M1=0, M0=0 | Modus 0
M1=0, M0=1 | Modus 1
M1=1, M0=0 | Modus 2 (nur bei Port A gültig !)
M1=1, M0=1 | Modus 3

Modus 0 | Alle Anschlüsse eines Ports werden als Ausgänge geschaltet. Man kann nun durch Schreiben eines Bytes auf den Daten-Port des PIO (CD-SEL = LOW) die einzelnen Leitungen entsprechend der Bits dieses Bytes ansteuern. Nach einem Reset und dem Einstellen von Modus 0 sind alle Leitungen auf LOW-Potential. Die Port-Leitungen können im Modus 0 eine TTL-Unit-Load treiben.
Modus 1 | In dieser Betriebsart werden alle Anschlüsse eines Ports als Eingänge verwendet. Die anstehenden Daten werden durch einen LOW-Impuls am jeweiligen Strobe-Eingang im Eingangsregister des PIO-Kanals gespeichert und können durch Lesen des Daten-Ports des PIO (CD-SEL = LOW) abgefragt werden.
Modus 2 | Betriebsart 2 bietet einen bidirektionalen Datentransfer am Port A. Der Datentransfer wird mit Hilfe der Handshake-Leitungen ARDY, /ATSB, BRDY und /BSTB bewerkstelligt, wobei die Handshake-Leitungen für Port A zur Steuerung der Ausgabe dienen, die Handshake-Leitungen für Port B zur Steuerung der Eingabe. Port B muss im Modus 3 betrieben werden, wobei alle Datenbits maskiert werden müssen.
Modus 3 | Diese Betriebsart erlaubt das beliebige Mischen von Ein- und Ausgängen. Jeder Port-Anschluss des PIO kann beliebig als Ein- oder Ausgang definiert werden. Außerdem kann jeder Eingang auch zur Interrupterzeugung verwendet werden.

Last Update: 2005-Okt-17


Home [image] Periphere Bausteine [image] Parallele Schnittstelle [image] Centronics-Schnittstelle
Index
Siehe auch: Parallele Schnittstelle

Centronics-Schnittstelle

Eine weit verbreitete Parallelschnittstelle zur Druckersteuerung ist die Centronics-Schnittstelle. Sie ist nach der Firma Centronics benannt, die diese Schnittstelle eingeführt hat. Obwohl die Schnittstelle nicht standardisiert ist, ist sie doch weltweit als Druckerschnittstelle akzeptiert.

Pinbelegung des Centronics-Steckers

Die Centronics-Schnittstelle besteht aus 36 Leitungen, von denen 8 zur Datenübertragung verwendet werden. Die Schnittstelle kann Daten nur vom Computer zum Drucker transportieren. Es sind folgende Signale definiert:

Pin | Abkürkung | I/O | Bedeutung
1 | /STB | I | Strobe-Signal, Ruhezustand = HIGH, bei der aufsteigenden Flanke werden die Daten übernommen
2 | D0 | I | Datenbit 0
3 | D1 | I | Datenbit 1
4 | D2 | I | Datenbit 2
5 | D3 | I | Datenbit 3
6 | D4 | I | Datenbit 4
7 | D5 | I | Datenbit 5
8 | D6 | I | Datenbit 6
9 | D7 | I | Datenbit 7
10 | /ACK | O | Acknowledge, kurzer Impuls der signalisiert, dass das zuletzt übernommene Zeichen bearbeitet worden ist
11 | BUSY | O | Drucker nicht bereit, dieses Signal zeigt an, dass der Drucker nicht empfangsbereit ist
12 | PE | O | Papier Ende, PE = HIGH, wenn kein Papier vorhanden
16 | GND | - | Masse
17 | PGND | - | Chassis-Masse
19-30 | GND | - | Masse
31 | /INIT | I | Initialisierung des Druckers, Impuls mindestens 50 µsek auf LOW
32 | /ERR | O | Fehler oder Drucker off-line
33 | GND | - | Masse
34 | NC | - | unbenutzt
36 | /SLCT | I | Druckerauswahl, siehe Druckerhandbuch

Die Datenübertragung wird im einfachsten Fall mit Hilfe von zehn Signalleitungen bewerkstelligt: Den acht Datenleitungen, dem Signal /BUSY und dem Signal /STB. Die Abbildung unten zeigt den Ablauf der Übertragung eines Bytes. Zuerst wird die BUSY-Leitung abgefragt, bis der Drucker signalisiert, dass er bereit ist weitere Daten entgegenzunehmen. Daraufhin wird das zu druckende Byte auf die Datenleitungen gelegt und das Strobe-Signal kurz aktiviert. Mit der aufsteigenden Flanke des Strobe-Signals übernimmt der Drucker die Daten und setzt gleichzeitig das BUSY-Signal, falls er keine weiteren Daten übernehmen kann.

Protokoll der Centronics-Schnittstelle

Als Steckverbinder ist ein 36-poliger Stecker definiert, der manchmal auch als Centronics-Stecker bezeichnet wird (Abbildung PINCNT). Da die Centronics-Schnittstelle mit TTL-Signalen betrieben wird, ist die maximale Länge des Kabels auf etwa 2 m beschränkt. Die tatsächlich verwendbare Kabellänge hängt jedoch sehr stark von den Leitungstreibern und der ansteuernden Software ab. Die folgende Abbildung zeigt die Pinbelegung des Steckers.

Last Update: 2005-Okt-17


IEEE-488-Bus

Der IEEE-488-Bus ist eine bidirektionale 8-Bit-Parallelschnittstelle, die es erlaubt mehrere Geräte an einem Bus zu betreiben. Die ursprünglich von Hewlett-Packard eingeführte Schnittstelle wurde 1975 vom 'Institute of Electrical and Electronics Engineers' als Standard unter der Bezeichnung IEEE-488 übernommen. Der IEEE-Bus wird manchmal auch als GPIB (general purpose interface bus) oder als HPIB (Hewlett Packard interface bus) bezeichnet. Zu diesem Bus gibt es auch ein europäisches Pendant, das unter der Bezeichnung IEC-625 läuft und bis auf die Steckerdefinition dem IEEE-Bus äquivalent ist.

Am IEEE-Bus können drei verschiedene Gerätetypen aktiv sein: der Controller, der Listener (Hörer) und der Talker (Sprecher). Die Funktionen können beliebig von den angeschlossenen Geräten übernommen werden, sofern dies von der Implementierung der jeweiligen Schnittstelle erlaubt und sinnvoll ist. Es kann jedoch zu einer Zeit nur jeweils ein Controller aktiv sein. Der aktive Controller kann von sich aus die Kontrolle einem anderen Gerät zuweisen, das dann die Funktion des Controllers übernimmt. Üblicherweise ist der Controller an einem IEEE-Bus der steuernde Mikrocomputer.

Jedes Gerät, das am IEEE-Bus angeschlossen ist, hat eine eindeutige Adresse, die durch DIP-Switches an der jeweiligen Schnittstellenkarte eingestellt wird. Über diese Adresse wird jedes Gerät angesprochen. Es sind in einem Bus maximal 15 Adressen zu vergeben, so dass maximal 15 Geräte am Bus betrieben werden können.

Der IEEE-Bus besteht aus 16 Leitungen: 8 Datenleitungen und 8 Kontrollsignalen, die den Datentransfer kontrollieren. Die Datenübertragung ist asynchron und kann Übertragungsgeschwindigkeiten bis zu 1 MByte/s erreichen. Die Signalpegel auf den Leitungen entsprechen TTL-Level, so dass auch bei dieser Schnittstelle die maximale Kabellänge zwischen zwei Geräten auf 2 m begrenzt ist.

Die Signale haben im einzelnen folgende Bezeichnungen:

DIO1-DIO8 | Datenleitungen | Auf den 8 bidirektionalen Datenleitungen werden die Daten transportiert.
NDAC | Not Data Accepted | Handshake-Leitung, die anzeigt, ob die Daten übernommen worden sind.
DAV | Data Valid | Handshake-Leitung, die anzeigt, dass die Datenleitungen gültige Daten beinhalten.
NRFD | Not Ready For Data | Handshake-Leitung, die anzeigt, dass das jeweilige Gerät keine Daten entgegennehmen kann.
ATN | Attention | Wird vom Controller gesendet, um alle Talker zu unterbrechen und den Bus freizugeben und dann Adressen und Kommandos auszugeben.
EOI | End Or Identify | Wird vom Controller oder Talker gesetzt, um anzuzeigen, dass die Datenübertragung zu Ende ist.
IFC | Interface Clear | Wird vom Controller gesetzt, um alle Talker vom Bus zu entfernen.
REN | Remote Enable | Wird vom Controller gesetzt, um die Kontrolle an einen anderen Controller zu übergeben.
SRQ | Service Request | Kann von jedem Gerät gesetzt werden, um eine aktuelle Transaktion zu unterbrechen und selbst den Bus benützen zu können.

Der Ablauf einer Datenübertragung ist in folgender Abbildung dargestellt. Das Handshake-Verfahren trägt der Tatsache Rechnung, dass mehrere Listener von einem Talker Daten übernehmen können. Der Talker muss also zuerst warten, bis alle Listener das Signal /NRFD freigegeben haben. Dann kann er Daten auf die Datenleitungen legen und das Signal DAV aktivieren. Wenn alle Listener die Daten übernommen haben, wird das Signal /NDAC freigegeben, und das nächste Datenbyte kann gesendet werden, wenn alle Listener das Signal /NRFD freigegeben haben.

Handshake am IEEE-Bus

Ein Nachteil des IEEE-Busses ergibt sich aus dem oben beschriebenen Handshake-Verfahren: Die Geschwindigkeit der Datenübertragung wird vom langsamsten Gerät bestimmt.

Als Steckverbinder ist ein 24-poliger Stecker (IEEE-Stecker) definiert. Die einzelnen Geräte werden mit typischerweise 2m langen Kabeln verbunden, an deren Enden jeweils ein männlicher und ein weiblicher Stecker angebracht sind, so dass sich automatisch eine Busstruktur ergibt, ohne dass die Geräte zwei Stecker besitzen müssen. Die Pinbelegung des IEEE-Busses ist hier dargestellt:

Pinbelegung des IEEE-Busses

Last Update: 2005-Okt-17


Multifunktionelle Bausteine

Für viele kleinere Anwendungen von Mikrocomputerschaltungen benötigt man oft nur wenige Funktionen eines Bausteins, dafür aber mehrere verschiedene Bausteine. Da dies sowohl in der Entwicklung als auch in der Fertigung teuer sein kann, wurden schon sehr bald multifunktionelle Bausteine angeboten, die die am meisten benötigten Funktionen auf einem Chip integriert hatten. So sind zum Beispiel auf dem Baustein MK3801 ein Interruptcontroller, eine serielle Schnittstelle, vier Timer, und ein 8-Bit-Parallelport vorhanden.

Dadurch kann man sehr kompakte Schaltungen aufbauen, die nur mehr wenige Bausteine benötigen. Mit zunehmender Integrationsdichte geht der Trend noch weiter, und es werden - basierend auf altgedienten Prozessoren - neue Chips angeboten, die einige der oben genannten IO-Bausteine auf den Chip integriert haben (z.B. HD64180).

Da es eine sehr große Zahl von multifunktionellen Bausteinen gibt, würde es den Rahmen dieses Buches sprengen, diese hier im Detail zu besprechen. Der interessierte Leser sei auf die jeweiligen Datenblätter verwiesen. Die folgende Tabelle gibt einen kurzen Überblick über Bausteine, die das Z80-Busprotokoll unterstützen (einschließlich Interruptmodus 2).

Typ | Funktionen
Z8590 | 2kx8 PROM, 256 Byte RAM, Timer, Interruptcontroller, Parallelport
Z8536 | Parallelport, Timer
MK3801 | serielle Schnittstelle, Interruptcontroller, Timer, 8-Bit-Parallelport
XR88C681 | 2 serielle Schnittstellen, Timer/Counter, Parallelport

Last Update: 2005-Okt-08


Band-Gap-Referenzelemente

Ein sog. Band-Gap-Referenzelement ist eine Spannungsreferenz, die man meist in integrierten Schaltungen verwendet. Es liefert eine Spannung von typisch 1.25 V, die der theoretischen Bandlücke von Silizium bei 0 K entspricht.

Durch die Addition zweier Spannungen mit gegenläufigen Temperaturkoeffizienten gelingt es, eine Spannungsreferenz zu erzeugen, die weitgehend unabhängig von der Temperatur ist. Die gegenläufigen Temperaturkoeffizienten erreicht man, in dem man zwei Transistorgruppen mit unterschiedlichen Strömen betreibt (typ. um einen Faktor 10 unterschiedlich). Die Differenz der Basis-Emitterspannungen der beiden Transistorgruppen (ca. 60 mV) wird um den Faktor 10 verstärkt und zu einer weiteren Basis-Emitterspannung addiert. Da die Differenzspannung einen Temperaturkoeffizienten von ca. +2 mV/K aufweist, während die Basis-Emitterspannung einen Koeffizienten von -2 mV/K aufweist, heben sich die beiden Temperaturkoeffizienten auf und liefern eine Summenspannung von etwa 1.25 V.

Die obige Schaltung zeigt das Prinzip einer Band-Gap-Referenz: Transistor T1 wird mit einem 10-fach höheren Strom versorgt als Transistor T2. Die Differenz der beiden Basis-Emitterspannungen wird durch passende Einstellung der Widerstände R4 und R5 um den Faktor 10 verstärkt und zur Basis-Emitterspannung des Transistors T3 addiert. Die Transistoren T4 und T5 dienen zur Verstärkung, um letztendlich zwischen den Anschlüssen der Schaltung eine Spannung von ca. 1.22 V aufrecht zu erhalten, die einen niedrigen Temperaturkoeffiezienten aufweist.

Temperaturabhängigkeit der Referenzspannung

Last Update: 2005-Okt-17


Linear geregelte Netzteile

Für viele Zwecke benötigt man eine geregelte Gleichspannung, die hinsichtlich Temperaturverhalten, Toleranz der Ausgangsspannung, Ausregelung von Laststromschwankungen und Eingangsspannungsschwankungen gewissen Bedingungen genügen muss. Normale, ungeregelte Netzteile (Gleichrichter und Kondensator) können nur in seltenen Fällen eingesetzt werden. Für die notwendige zusätzliche Stabilisierung kann man verschiedene Techniken einsetzen (lineare Regler, Schaltregler, magnetische Regler). Im folgenden sollen linear geregelte Netzteile besprochen werden.

Die einfachste Ausführung eines linearen Längsreglers zeigt die folgende Abbildung. Er besteht aus einem Verstärker und einem Transistor, der als Emitterfolger geschaltet ist. Die Ausgangsspannung wird an den invertierenden Eingang des Operationsverstärkers gelegt, so dass dieser seinen Ausgang so einstellt, dass die Ausgangsspannung gleich der am nicht invertierenden Eingang anliegenden Referenzspannung ist.

Prinzipschaltung eines linear geregelten Netzteils

Diese Schaltung hat den Nachteil, dass einerseits die Referenzspannung extern zugeführt werden muss und andererseits keine Kurzschlussstrombegrenzung vorhanden ist. Ein Kurzschluss würde zumindest den Ausgangstransistor zerstören. Eine erweiterte Schaltung, die diese Nachteile nicht besitzt, zeigt folgende Abbildung

Linear geregeltes Netzteil mit Kurzschlussstrombegrenzung

Der Transistor T2 dient zur Kurzschlussstrombegrenzung. Im Normalfall, solange der Ausgangsstrom kleiner als 0.6/R3 ist, wird die am Widerstand abfallende Spannung nicht ausreichen, den Transistor T2 in den leitenden Zustand zu bringen. Erst wenn der Spannungsabfall an R3 größer als 0.6 V wird, beginnt der Transistor zu leiten und begrenzt dadurch den Ausgangsstrom. Der Kurzschlussstrom kann daher durch den Widerstand R3 auf

Ik = 0.6 / R3

eingestellt werden.

Um eine möglichst stabile Referenzspannung zu erhalten, wird als Versorgungsspannung für die Zenerdiode die stabilisierte Ausgangsspannung verwendet. Dies setzt voraus, dass der Operationsverstärker so beschaltet ist, dass er eine Verstärkung größer Eins aufweist. Dadurch wird sichergestellt, dass die Ausgangsspannung immer größer als die Referenzspannung ist. Für die Ausgangsspannung gilt

Uout = Uz * (R1 + R2) / R2.

Nimmt man also für R1 und R2 gleich große Widerstände, so stellt sich eine Ausgangsspannung von 2*Uz ein.

Der Arbeitsstrom der Zenerdiode wird durch den Widerstand R4 bestimmt. Dieser muss in Abhängigkeit von der Ausgangsspannung eingestellt werden. Für einen Arbeitsstrom von 2 mA gilt

R4 = 500 * (Uout - Uz).

Für Labor-Anwendungen benötigt man oft ein Netzteil, das nicht nur eine beliebig einstellbare Spannung erzeugt, sondern auch über eine variable Strombegrenzung verfügt. Die im folgenden beschriebene Schaltung zeigt den Aufbau eines Netzteils mit zwischen 1 und 20 V variabler Ausgangsspannung und variabler Strombegrenzung zwischen 10 mA und 1 A. Für den Aufbau wird ein integrierter Spannungsregler (LM723) mit externem Leistungstransistor eingesetzt. Das Netzteil verfügt außerdem über eine thermische Sicherung, die den Regler abschaltet, falls die Verlustleistung im Netzteil zu groß wird. Dies kann besonders bei niedriger Ausgangsspannung und hoher Stromentnahme auftreten, da in diesem Fall der Spannungsabfall am Regler und damit die Verlustleistung besonders groß ist.

Linear geregeltes Labornetzteil

Last Update: 2006-Dez-05


Home [image] Spezielle Schaltungen [image] Netzteile [image] Fixspannungsregler
Index
Siehe auch: Spannungsquelle, Experiment: Aufbau eines Fixspannungsnetzteil

Fixspannungsregler

Für viele Anwendungen genügt die Erzeugung von fixen, voreingestellten Spannungswerten. Für diese Anwendungsfälle werden von vielen Firmen Fixspannungsregler angeboten, die äußerst einfach einzusetzen sind und von der internen Schaltungstechnik so ausgelegt sind, dass sie praktisch unzerstörbar sind (ausgenommen zu hohe Spannungen an den Ein-, bzw. Ausgängen).

Sie bieten unter anderem eine sehr gute Spannungsregelung, eine eingebaute Strombegrenzung und einen Schutz vor thermischer Überlastung. Die meisten dieser Regler können Ströme bis 1.5 A regeln. Jedoch gibt es spezielle Typen, die entweder nur geringe Ströme (z.B. 100 mA) oder aber sehr viel höhere Ströme (bis 10 A) regeln.

Hinweis: Manche Regler benötigen zum korrekten Funktionieren eine Mindeststromentnahme von ca. 5 mA. Bei Leerlauf versagt die Regelung und die Regler geben eine höhere Spannung ab.

Die folgende Tabelle gibt einen kurzen Überblick über häufig verwendete Fixspannungsregler:

Typ | Ui,max [V] | Ui,min [V] | Uo [V] | Io,max [A] | Pmax [W] | Gehäuse | Pinout
uA7805 | 35 | 7.3 | 5 | 1.5 | 15 | TO-220 | A
uA7806 | 35 | 8.2 | 6 | 1.5 | 15 | TO-220 | A
uA7808 | 35 | 10.5 | 8 | 1.5 | 15 | TO-220 | A
uA7885 | 35 | 10.5 | 8.5 | 1.5 | 15 | TO-220 | A
uA7810 | 35 | 12.5 | 10 | 1.5 | 15 | TO-220 | A
uA7812 | 35 | 14.6 | 12 | 1.5 | 15 | TO-220 | A
uA7815 | 35 | 17.7 | 15 | 1.5 | 15 | TO-220 | A
uA7818 | 35 | 21.0 | 18 | 1.5 | 15 | TO-220 | A
uA7824 | 40 | 27.0 | 24 | 1.5 | 15 | TO-220 | A
uA78L02 | 30 | 4.75 | 2.6 | 0.1 | 1.6 | TO-226 | E
uA78L05 | 35 | 7.0 | 5 | 0.1 | 1.6 | TO-226 | E
uA78M05 | 35 | 7.0 | 5 | 0.5 | 7.5 | TO-220 | A
LM323 | 20 | 7.0 | 5 | 3.0 | 30 | TO-3 | C
LM330 | 26 | 5.4 | 5 | 0.15 | 20 | TO-220 | A
LM340-5 | 35 | 7.3 | 5 | 1.5 | 15 | TO-220 | A
LM340-12 | 35 | 14.5 | 12 | 1.5 | 15 | TO-220 | A
LM340-15 | 35 | 17.5 | 15 | 1.5 | 15 | TO-220 | A
LM2930-5 | 26 | 5.4 | 5 | 0.15 | 15 | TO-220 | A
LM2930-8 | 26 | 8.4 | 8 | 0.15 | 15 | TO-220 | A
uA7905 | -35 | -7.0 | -5 | 1.5 | 15 | TO-220 | B
uA7952 | -35 | -7.2 | -5.2 | 1.5 | 15 | TO-220 | B
uA7906 | -35 | -8.0 | -6 | 1.5 | 15 | TO-220 | B
uA7908 | -35 | -10.5 | -8 | 1.5 | 15 | TO-220 | B
uA7912 | -35 | -14.5 | -12 | 1.5 | 15 | TO-220 | B
uA7915 | -35 | -17.5 | -15 | 1.5 | 15 | TO-220 | B
uA7918 | -35 | -21 | -18 | 1.5 | 15 | TO-220 | B
uA7924 | -40 | -27 | -24 | 1.5 | 15 | TO-220 | B
uA79L05 | -30 | -7.0 | -5 | 0.1 | 1.6 | TO-226 | F
LM320-5 | -25 | -7.5 | -5 | 1.5 | 15 | TO-220 | B,F
LM320-12 | -35 | -14.5 | -12 | 1.0 | 15 | TO-220 | B,F
LM320-15 | -35 | -17.5 | -15 | 1.0 | 15 | TO-220 | B,F
Ui,max.... maximale Eingangsspannung Ui,min.... minimale Eingangsspannung Uo.... Ausgangsspannung Io,max.... maximaler Ausgangsstrom Pmax.... maximale Verlustleistung

Pinbelegungen von Fixspannungsregelern (Ansicht von oben)

Last Update: 2006-Dez-05


Home [image] Spezielle Schaltungen [image] Netzteile [image] Schaltnetzteile [image] Übersicht
Index
Siehe auch: Abwärtsregler, Aufwärtsregler

Schaltnetzteile

Da der Wirkungsgrad von linearen Netzteilen sehr niedrig liegen kann (kleiner 30 %), versucht man durch andere Schaltungskonzepte, den Wirkungsgrad zu erhöhen. Ein Weg zu einem besseren Wirkungsgrad ist der Einsatz von Schaltreglern, die einen Wirkungsgrad von über 80 % erreichen können. Rein theoretisch kann ein Schaltregler einen Wirkungsgrad von 100 % erreichen, da er nur reaktive Bauelemente (Spulen und Kondensatoren) und Schalter zur Spannungswandlung einsetzt. Die Ohmschen Verluste in den realen Bauelementen und die Energie zum Betrieb des Regelverstärkers erniedrigen jedoch den theoretischen Wirkungsgrad.

Zur Illustration der Vorteile eines Schaltreglers sei ein linearer Regler mit einem Schaltregler für 5V/4A verglichen. Um einen sicheren Betrieb bei 4A Laststrom zu gewährleisten muss die Eingangsspannung für 5V Ausgangsspannung nominell 14V betragen. Dies bedeutet, dass der lineare Regler 36W Verlustleistung aufweist. Der Transformator muss für ca. 62 VA ausgelegt werden. Ein Schaltregler hingegen (z.B. L296) benötigt bei diesen Bedingungen nur 7W Verlustleistung. Ein entsprechender Transformator braucht dann lediglich für ca. 33 VA ausgelegt sein. Als Folge der niedrigen Verlustleistung im Schaltregler wird für diesen außerdem ein kleinerer Kühlkörper benötigt.

 | linear | Schaltregler
Verlustleistung im Regler | 36 W | 7 W
Transformator | 62 VA | 33 VA
Kühlkörper | 1 K/W | 5 K/W

Man unterscheidet bei Schaltreglern zwischen primär und sekundär getakteten Reglern. Primär getaktete Regler erzeugen aus der Netzspannung direkt eine Gleichspannung von etwa 400 V und aus dieser hohen Gleichspannung die gewünschte niedrige Gleichspannung (z.B. 5 V). Solche Regler besitzen einen sehr hohen Wirkungsgrad und werden vor allem in Computernetzteilen verwendet. Da deren Aufbau jedoch schwierig und gefährlich ist, sollen hier nur die sekundär getakteten Schaltregler besprochen werden.

Sekundär getaktete Regler verwenden als Eingangsspannung eine niedrige Gleichspannung (z.B. 30 V), wie sie von einfachen, ungeregelten Netzteilen zur Verfügung gestellt wird. Diese Gleichspannung kann nun je nach Schaltungsart des Reglers erniedrigt (Abwärtsregler), erhöht (Aufwärtsregler) oder invertiert (invertierender Schaltregler) werden. Im folgenden sind die drei Grundtypen von sekundär getakteten Schaltreglern näher besprochen.

Last Update: 2006-Jän-19


Home [image] Spezielle Schaltungen [image] Netzteile [image] Schaltnetzteile [image] Abwärtsregler
Index
Siehe auch: Experiment: Aufbau eines Abwärtsschaltreglers, Schaltnetzteile, Invertierender Schaltregler

Abwärtsregler

Das Prinzip des Abwärtsreglers (buck converter) ist in der folgenden Abbildung dargestellt. Der Schalter verbindet alternierend die Spule mit der Eingangsgleichspannung oder mit Masse. Die Ausgangsspannung ergibt sich aus der durchschnittlichen Eingangsspannung und hängt somit vom Tastverhältnis T des Schaltvorgangs ab:

Uo = Ui * T

Aus der obigen Gleichung ergibt sich, dass die Ausgangsspannung des Abwärtsreglers immer zwischen null (T=0%) und der Eingangsspannung (T=100%) liegt.

Prinzip eines Abwärtsreglers

Um die Schaltung zu vereinfachen, kann man einen Teil des Umschalters durch eine Diode ersetzen. Dies erzeugt zwar eine geringe zusätzliche Verlustleistung (und setzt damit den Wirkungsgrad herab), jedoch sind die Kosten für den Aufbau des Reglers geringer. Wenn der Schalter geschlossen ist, sperrt die Diode, da das Potential an der Kathode der Diode größer als an der Anode ist. Bei geöffnetem Schalter erfolgt durch die Spule eine Spannungsumkehr und die Diode beginnt zu leiten und verbindet die Spule mit Masse.

Falls der Ausgangsstrom sehr niedrig ist, kann es vorkommen, dass der Strom durch die Spule auf Null geht während der Schalter offen ist. In diesem Fall beginnt die Diode zu sperren. Normalerweise wird dieser Zustand kein Problem sein, solange der Schaltregler das Tastverhältnis auf 0.0% stellen kann. Würde dies nicht der Fall sein, so würde die Ausgangsspannung bei niedriger Last langsam ungeregelt ansteigen.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Netzteile [image] Schaltnetzteile [image] Aufwärtsregler
Index
Siehe auch: Schaltnetzteile, Invertierender Schaltregler

Aufwärtsregler

Das Grundprinzip eines Aufwärtsreglers (boost converter) ist in der folgenden Abbildung dargestellt. Ist der Schalter mit Masse verbunden, so fließt Strom durch die Spule gegen Masse und die Spule baut ein Magnetfeld auf, das Energie speichert. Diese Energie wird nach dem Umschalten an den Ausgang weitergegeben. Die sich ergebende Ausgangsspannung wird durch die Gleichung

Uo = Ui / (1-T)

bestimmt. Daraus ergibt sich, dass die Ausgangsspannung des Aufwärtsreglers immer größer oder gleich der Eingangsspannung ist.

Prinzipschaltung eines Aufwärtsreglers

Ein Nachteil des Aufwärtsreglers besteht darin, dass es nicht möglich ist eine Stromregelung im Kurzschlussfall einzubauen, da die Diode Eingang und Ausgang direkt verbindet.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Netzteile [image] Schaltnetzteile [image] Invertierender Schaltregler
Index
Siehe auch: Abwärtsregler, Aufwärtsregler

Invertierender Schaltregler

Möchte man die Polarität einer Spannung umkehren, so verwendet man dazu einen invertierenden Schaltregler (buck-boost converter). Für dessen Ausgangsspannung gilt

Uo = -Ui * T / (1-T).

Sie kann also zwischen null und einem sehr hohen Wert variieren. Die folgende Abbildung zeigt die Prinzipschaltung eines invertierenden Reglers. Die Diode ist so zu polen, dass sie bei geschlossenem Schalter sperrt.

Prinzipschaltung eines invertierenden Reglers.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Frequenzgenerator [image] Konzept des Frequenzgenerators
Index
Siehe auch: Phase Locked Loop, Aufbau des Frequenzgenerators

Konzept des Frequenzgenerators

Der im folgenden beschriebene Frequenzgenerator wurde aus zwei Gründen in dieses Buch aufgenommen. Zum einen soll der Frequenzgenerator als universelle Signalquelle dienen und zum anderen stellt diese Schaltung ein gutes Anwendungsbeispiel von Operationsverstärkern dar, da sie auch vom Ungeübten noch überblickt werden kann.

Der Frequenzgenerator erzeugt zwei Signale, ein Dreiecksignal und ein Rechtecksignal. Beide sind zueinander synchron. Die Signalfrequenz kann zwischen 0 und 7000 Hz eingestellt werden, die Amplitude zwischen 0 und 5 V. Außerdem bietet er die Möglichkeit, dem Wechselspannungssignal eine Gleichspannung zu addieren (Offset).

Das Schaltbild des Frequenzgenerators ist in der Abbildung am Ende dieser Seite dargestellt. Zur Erläuterung der Funktionsweise sei zuerst der Kern des Frequenzgenerators herausgezeichnet:
Oszillator eines Frequenzgenerators
Er besteht aus den Operationsverstärkern IC3 und IC4, die einen Oszillator bilden, der wie folgt funktioniert:

IC3 bildet einen Integrator, IC4 einen Komparator. Wenn man annimmt, dass der Ausgang des Komparators nach dem Einschalten (zufällig) auf dem Potential der negativen Versorgungsspannung liegt, so liegt diese Spannung auch am Eingangswiderstand des Integrators an. Dadurch wird der Kondensator des Integrators aufgeladen und der Ausgang von IC3 geht linear gegen die positive Versorgungsspannung. Übersteigt nun die Ausgangsspannung des Integrators die obere Schaltschwelle des Komparators, so schaltet dieser, und am Ausgang des Komparators liegt nun die positive Versorgungsspannung. Da nun am Integratoreingang die entgegengesetzt gepolte Spannung anliegt, wird der Kondensator wieder in die andere Richtung umgeladen, die Spannung am Ausgang des Integrators sinkt linear. Unterschreitet nun diese Spannung die untere Schaltschwelle des Komparators, so schaltet dieser wieder um und der ganze Vorgang beginnt wieder von neuem.

Möchte man nun die Frequenz des Oszillators einstellbar machen, so kann man dazu eine der Größen, die die Frequenz bestimmen, variabel machen. Dazu würde sich anbieten, die Zeitkonstante des Integrators (R oder C verstellen) oder die Hysterese des Komparators. Auf den ersten Blick wird die Hysterese als frequenzbestimmendes Element ausfallen, da dadurch auch die Amplitude beeinflusst wird. Die zweite Möglichkeit, nämlich die Änderung der Zeitkonstante des Integrators (1/RC) ist zwar leicht zu bewerkstelligen (R durch ein Potentiometer ersetzen), hat jedoch den Nachteil, dass die Einstellung der Frequenz nicht linear erfolgt.

Aus diesem Grund wurde im vorliegenden Frequenzgenerator ein dritter Weg beschritten, der den Strom, der in den Integrator fließt, linear einstellt und damit auch eine lineare Steuerung der Frequenz ermöglicht (siehe Abbildung unten). Der Komparator legt jetzt seine Ausgangsspannung nicht mehr direkt an den Integrator, sondern steuert zwei Transistorschalter an, die ihrerseits eine variable Spannung durchschalten. Je größer diese Spannung ist, desto größer ist der Strom, der in den Integrator fließt und umso schneller schwingt der Oszillator. Da die an den Integrator angelegte variable Spannung symmetrisch um den Nullpunkt liegen muss, wird aus der mit dem Potentiometer erzeugten Spannung durch IC1 eine gleichgroße negative Spannung erzeugt (IC1 arbeitet als invertierender Verstärker). Diese beiden Spannungen werden wechselweise über die beiden Transistoren an den Integrator gelegt.

Die Amplitude der Dreieckkurve wird in einem eigenen Operationsverstärker (IC5) eingestellt. IC5 ist als invertierender Verstärker geschaltet, dessen Verstärkung zwischen null und zwei mit dem Potentiometer 'Amplitude' variiert werden kann. Außerdem wurde an IC5 die Möglichkeit vorgesehen, das Signal über einen Bereich von +/- 5 Volt verschieben zu können (Potentiometer 'Offset').

Das Ausgangssignal des Komparators (Rechteckkurve) wird über einen Transistor an die Ausgangsbuchsen geführt, um bei Belastung des Rechteckausgangs keine Änderung der Frequenz zu bewirken. Die Diode an der Basis des Ausgangstransistors dient nur zum Schutz des Transistors. Am Rechteckausgang steht eine wenig belastbare Rechteckspannung zur Verfügung, die nur als Synchronisationsausgang (z.B. für Oszilloskope) dient.

Schaltplan des Frequenzgenerators

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Frequenzgenerator [image] Aufbau des Frequenzgenerators
Index
Siehe auch: Experiment: Auswirkungen der Slew-Rate des Komparators, Phase Locked Loop, Konzept des Frequenzgenerators

Aufbau des Frequenzgenerators

Bei Verwendung der Platine 'FNCGEN' kann der Frequenzgenerator entsprechend der folgenden Stückliste aufgebaut werden. Nach dem Aufbau werden die Versorgungsspannungen angeschlossen und alle Potentiometer in Mittelstellung gebracht. Mit einem Oszilloskop muss nun an den Ausgängen ein entsprechendes Signal sichtbar sein.

Bestückungsplan des Frequenzgenerators

Stückliste
IC1, IC2, IC3, IC5 | uA471
IC4 | LF351
R1, R2, R9 | 100k
R3 | 39k
R4 | 10k
R5 | 47k
R6, R7 | 10k
R8 | 22k
R10, R11, R12 | 33k
R13 | 2k2
T1, T3 | 2N2222
T2 | 2N2907
D1 | 1N4148
P1 | 10k lin.
P2, P3 | 47k lin.
C1 | 3n3
C2, C3 | 10 uF, 26V, Tantal
Platine | PCFNCGEN

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Filter [image] Übersicht
Index
Siehe auch: Experiment: Universalfilter bei unterschiedlichen Dämpfungen, Grundlagen, Grundbegriffe der Filtertechnik

Aktive Filter

Für viele Zwecke ist es notwendig, Frequenzkomponenten eines Signal zu entfernen oder hervorzuheben. So gibt es kaum ein analog arbeitendes Gerät in dem nicht irgendeine Form eines Filters zur Anwendung kommt. Der Entwurf von Filtern ist jedoch ein schwieriges Unterfangen, das nur von wenigen Spezialisten wirklich verstanden wird. Dies bedeutet in der Praxis, dass man entweder auf bereits existierende Entwürfe zurückgreift und die entsprechend anpasst oder - bei einfachen Problemen - nur einfache Filter verwendet. Auf den folgenden Seiten sollen nur ein paar Grundtypen von Filtern vorgestellt und eine entsprechende Anleitung zu deren Aufbau gegeben werden. Eine vollständige Behandlung des Themas 'Filter' würde den Rahmen dieses Buches bei weitem sprengen. Der interessierte Leser sei auf die einschlägige Fachliteratur hingewiesen (z.B. D. Lancaster 1989 [image] )).

Last Update: 2005-Okt-08


Grundlagen

Unter einem Filter versteht man eine frequenzselektive Schaltung, die es erlaubt, bestimmte Frequenzkomponenten des Eingangssignals zu unterdrücken. Je nach Bereich des unterdrückten Signals unterscheidet man vier grundlegende Typen von Filtern: Tiefpass, Hochpass, Bandpass und Bandsperre. Folgende Abbildung zeigt die Frequenzgänge dieser Filtertypen. Andere Filter, wie z.B. Allpässe, Kammfilter etc. sollen hier nicht näher besprochen werden.

Frequenzgang verschiedener Filtertypen

Einfache Filter können leicht durch Bauteile, die ein frequenzabhängiges Verhalten aufweisen (Spulen und Kondensatoren), aufgebaut werden. Man nennt solche Filter passive Filter. In der Regel haben aber passive Filter den Nachteil, dass sie (für niedrige Frequenzen) unförmige und schwere Bauteile benötigen und außerdem nur begrenzt kaskadierbar sind. Im Gegensatz dazu kann man mit aktiven Filtern, die aus Verstärkern und Kondensatoren aufgebaut sind, nahezu jede gewünschte Form der Übertragungsfunktion erreichen und diese benötigen auch einen erheblich geringeren Aufwand an Bauteilen.

Vorteile aktiver Filter: | Nachteile aktiver Filter:
hohe Eingangsimpedanzen, niedrige Ausgangsimpedanzen | Stromversorgung notwendig
kleine Abmessungen, niedriges Gewicht | Übersteuerung möglich
niedrige Kosten | Temperaturdrift
Vermeidung von Spulen als reaktive Elemente | Bauteiltoleranzen
Kaskadierbarkeit |
Verstärkung einstellbar |

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Filter [image] Grundbegriffe der Filtertechnik
Index
Siehe auch: Experiment: Universalfilter bei unterschiedlichen Dämpfungen, Grundlagen, Aktive Filter, Sallen-Key-Filter, Variables Zustandsfilter

Grundbegriffe der Filtertechnik

Beim Entwurf und der Anwendung von Filtern treten immer wieder Begriffe auf, die im folgenden kurz definiert werden.

Grenzfrequenz

Unter der Grenzfrequenz eines Filters versteht man die Frequenz, bei der die Amplitude des Ausgangssignals gegenüber dem Ausgangssignal des Durchlassbereichs um 3 dB (Faktor 0.7) abgefallen ist.

Dämpfung

Die Dämpfung ist ein Maß für das Einschwingverhalten eines Filters. Filter mit geringer Dämpfung zeigen starkes Überschwingen bei abrupten Änderungen des Eingangssignals. Geht die Dämpfung gegen null, so wird das Filter zum frei schwingenden Oszillator. Durch Einstellen der Dämpfung kann die Form der Übertragungsfunktion beeinflusst werden. Bei einem Filter 2. Ordnung ergibt eine Dämpfung von 1.414 optimales Einschwingverhalten, höhere Dämpfungen führen zum aperiodischen Grenzfall.

Ordnung

Die Ordnung eines Filters bestimmt die Steilheit der Übertragungsfunktion beim Übergang vom Durchlassbereich in den Sperrbereich. Die Steilheit steigt mit zunehmender Ordnung um jeweils 6 db/Oktave, das heißt, ein Filter 1. Ordnung weist eine Steilheit von 6 dB/Oktave auf, ein Filter 5. Ordnung bereits eine Steilheit von 30 dB/Oktave. Die Ordnung eines Filters wird durch die Anzahl der energiespeichernden Kondensatoren in der Schaltung bestimmt. Je höher die Ordnung eines Filters ist, desto höher ist einerseits seine Qualität. Andererseits aber steigen auch der Bauteilaufwand und die Anforderungen an die Bauteiltoleranzen mit der Ordnung eines Filters. Der Aufbau eines Filters höherer Ordnung (z.B. Filter 12. Ordnung) ist ein kritisches Unterfangen, das große Erfahrung im Umgang mit Filtern verlangt.

Gütefaktor

Der Gütefaktor Q ist für Bandpässe definiert und gibt das Verhältnis der Bandbreite zur Mittenfrequenz an. Einfache Bandpässe erreichen Gütefaktoren von etwa 30. Für höhere Gütefaktoren (bis etwa 500) sind komplexere Schaltungen mit schnellen Operationsverstärkern notwendig.

Übertragungsfunktion

Unter der Übertragungsfunktion versteht man das Verhältnis der Amplitude von Eingangs- und Ausgangssignal in Abhängigkeit von der Frequenz. Die Übertragungsfunktion bestimmt die Charakteristik der Filterfunktion.

Kaskadierung

Zur Realisierung von Filtern höherer Ordnung werden Filter 1. und 2. Ordnung hintereinandergeschaltet. Dies erfordert eine gute Entkopplung, damit sich die Filter nicht gegenseitig beeinflussen. Bei der Kaskadierung von Filtern ist darauf zu achten, dass in den meisten Fällen die einzelnen Teilfilter niemals gleich dimensioniert werden dürfen, sondern ganz bestimmte Regeln eingehalten werden müssen.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Filter [image] Sallen-Key-Filter
Index
Siehe auch: Grundbegriffe der Filtertechnik, Variables Zustandsfilter

Sallen-Key-Filter

Im Folgenden soll ein einfaches Filter zweiter Ordnung besprochen werden, das wahlweise als Tiefpass oder als Hochpass geschaltet werden kann und durch ein paar einfache Regeln auf beliebige Frequenzen skaliert wird. Die folgende Abbildung zeigt die Prinzipschaltung für den Tiefpass. Zum Aufbau eines Hochpasses müssen die Widerstände R3 und R4 mit den Kondensatoren C1 und C2 getauscht werden.

Sallen-Key-Filter 2. Ordnung

Es gibt eine Reihe von Spezialfällen der Sallen-Key-Schaltung, von denen der Fall mit gleichen Bauteilkomponenten der Interessanteste sein dürfte. Für diesen Fall gilt, dass die Verstärkung der Schaltung nur von der eingestellten Dämpfung abhängt und unabhängig von der Grenzfrequenz ist. Damit können Frequenz und Dämpfung beliebig durch Veränderung von bestimmten Widerständen und/oder der Kondensatoren eingestellt werden.

Die nachfolgenden Angaben gelten für ein Sallen-Key-Filter mit gleichen Bauteilen, d.h. C1=C2 und R3=R4.

Dämpfung | Die Dämpfung d wird durch das Verhältnis der Widerstände R1 und R2 bestimmt, wobei gilt d = 2 - R2/R1. Die Verstärkung der Schaltung beträgt Av = 1+d.
Frequenz | Für die Grenzfrequenz des Filters gilt 1/f = 2p*R3*C1.

Die Auswahl des Operationsverstärkers für den Einsatz in einem Sallen-Key-Filter mit gleichen Bauteilen hängt von der maximalen Signalfrequenz ab. Als Richtwerte kann man mit Operationsverstärkern des Typs mA741 Filter bis etwa 10kHz aufbauen, mit Operationsverstärkern des Typs LM318 etwa bis 200 kHz.

Berechnungsbeispiel:

Es soll ein Sallen-Key-Tiefpass-Filter dimensioniert werden, das eine Grenzfrequenz von 12 kHz und eine Dämpfung von 1.414 (maximal flacher Amplituden-Verlauf) aufweist. Dazu wird im ersten Schritt ein Impedanzniveau von 10 kW angenommen und die Widerstände R1, R3 und R4 mit 10 kW festgelegt. Der Widerstand R2 errechnet sich aus der Gleichung für die Dämpfung zu 5.86 kW, der nächste Wert in der Normreihe E96 ist 5.90 kW. Im zweiten Schritt wird der Wert der Kondensatoren berechnet. Dafür ergibt sich ein Wert von 1.326 nF. Da dieser Wert nur sehr aufwendig zu erreichen ist, nimmt man den nächsten Wert aus der Normreihe (z.B. 1.5 nF) und berechnet die Widerstände neu. Für einen Kapazitätswert der Kondensatoren von 1.5 nF ergibt sich der Wert der Widerstände R3 und R4 zu 8.84 kW (nächster Wert der Reihe E96: 8.87 kW). In der real aufgebauten Schaltung werden die Bauteile aus der oben stehenden Abbildung folgendermaßen dimensioniert:

R1 = 10 kW, R2 = 5.90 kW

R3 = R4 = 8.87 kW

C1 = C2 = 1.5 nF

Als Operationsverstärker sollte kein uA741 verwendet werden, da dieser bei Frequenzen oberhalb von 10 kHz bereits jenseits seiner Grenzen betrieben werden würde. Geeignet sind alle Operationsverstärker mit einer 'slew-rate' größer als 2 V/ms (z.B. LM318 oder LF357). Die Verstärkung der Schaltung ist durch die Dämpfung fix vorgegeben und beträgt in diesem Beispiel 2.414. Zur Anpassung der Verstärkung sind externe Verstärker oder Abschwächer zu verwenden.

Last Update: 2005-Okt-17


Home [image] Spezielle Schaltungen [image] Filter [image] Variables Zustandsfilter
Index
Siehe auch: Sallen-Key-Filter, Grundbegriffe der Filtertechnik

Variables Zustandsfilter

Für viele Zwecke ist es praktisch, wenn mehrere Filtercharakteristiken gleichzeitig zur Verfügung stehen (z.B. zum Umschalten von Hochpass auf Tiefpass oder Bandpass). Ein Universalfilter, das dieser Forderung genügt, ist das sogenannte variable Zustandsfilter (state variable filter). Die Schaltung ist aus drei Operationsverstärkern aufgebaut und stellt das elektronische Analogon eines Pendels dar. Es bietet drei Ausgänge, die Hochpass-, Tiefpass- und Bandpasscharakterisktik aufweisen. Je nach dem gewünschten Filtertyp verwendet man einen dieser Ausgänge. Die folgende Abbildung zeigt den prinzipiellen Aufbau eines solchen Filters mit Verstärkung 1 und einem Impedanzniveau von 10 kW.

Variables Zustandsfilter 2. Ordnung

Die Dimensionierung für ein konkretes Filter geht folgendermaßen vor sich: Zuerst werden die Werte der frequenzbestimmenden Bauteile R1, C1, R2 und C2 bestimmt. Für die Grenzfrequenz gilt 1/f = 2ã*R1*C1 = 2ã*R2*C2, wobei R1 und R2 in einem ersten Versuch mit 10 kW angenommen werden und daraus die Werte der Kondensatoren berechnet werden. Nachdem die 'krummen' Werte der Kondensatoren auf Werte der Normreihe E12 gebracht sind, werden die Widerstände neu berechnet und der jeweils nächstliegende Wert aus der Reihe E96 verwendet. Die Dämpfung d des Filters wird durch den Widerstand R3 bestimmt. R3 berechnet sich aus R3 = 10000*(3-d)/d.

Die Auswahl des Operationsverstärkers für den Einsatz in einem Universalfilter der Verstärkung 1 hängt von der maximalen Signalfrequenz ab. Als Richtwerte kann man mit Operationsverstärkern des Typs mA741 Filter bis etwa 25 kHz aufbauen, mit Operationsverstärkern des Typs LM318 etwa bis 500 kHz.

Last Update: 2005-Okt-17


Regler - Grundlagen

Unter einem Regler versteht man eine Schaltung, die eine bestimmte physikalische Größe (Regelgröße) auf einen Sollwert (Führungsgröße) bringt und dort festhält. Dabei soll der Regler Störungen entgegenwirken. Die Abbildung zeigt das grundlegende Schema eines Reglers. Die Regelgröße, die von einem Messwertumformer geliefert wird, wird vom Regler mit dem Sollwert verglichen. Aus der Differenz von Soll- und Istwert wird im Regelverstärker nach einer bestimmten Übertragungsfunktion die Stellgröße abgeleitet, die auf das Stellglied ausgegeben wird. Das Stellglied verändert nun die Regelstrecke, die den Istwert entsprechend beeinflusst.

Grundschema eines Reglers
Wird der Istwert nicht aus der Regelstrecke, sondern aus einer anderen Größe gewonnen, so spricht man von einer offenen Wirkungskette (Steuerung). Bei geschlossener Wirkungskette spricht man von einer Regelung.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Regler [image] Grundtypen von Regelverstärkern
Index
Siehe auch: Regler - Grundlagen, P-Regler, PI-Regler, PID-Regler, Digitale Regler

Grundtypen von Regelverstärkern

Einen entscheidenden Einfluss auf das Verhalten der Regelung hat nun die Art und Weise, wie man aus der Differenz von Ist- und Sollwert die Stellgröße berechnet. Die Übertragungsfunktion des Regelverstärkers bestimmt also das Verhalten des Reglers. Man kann die verschiedenen Grundfunktionen von Regelverstärkern auch beliebig kombinieren, wobei sich deren Übertragungsfunktionen entweder addieren (bei Parallelschaltung) oder multiplizieren (bei Serienschaltung). Aus den Grundfunktionen können beliebig komplexe Regelverstärker aufgebaut werden, die optimal auf das jeweilige Problem zugeschnitten sind. In der folgenden Übersicht sollen nur die wichtigsten Grundfunktionen besprochen werden.

Proportionalregler (P-Regler)

Die Stellgröße y ist proportional zur Differenz xd aus Ist- und Sollwert.

y = Kp * xd

Dieser Regelkreis ist stabil, ergibt aber eine bleibende Regelabweichung vom Sollwert. Der Proportionalitätsfaktor Kp wird 'Beiwert' des Reglers genannt und entspricht dem Verstärkungsfaktor des Reglers. Die bei jedem Proportionalregler vorhandene, bleibende Regelabweichung ist um so kleiner, je größer der Beiwert gewählt wird. In der Praxis kann man aber den Beiwert nicht beliebig groß wählen, da bei hohen Verstärkungen die eingesetzten Operationsverstärker eine Phasenverschiebung einführen, die zu Schwingungen Anlass geben.

Integrierender Regler (I-Regler)

Bei diesem Reglertyp ist die Stellgröße y zum Zeitintegral der Regeldifferenz proportional.

y = Ki * [image] xd * dt

Der I-Regler ist ein instabiler Regler, es tritt aber keine bleibende Regelabweichung auf.

Differenzierender Regler (D-Regler)

Die Stellgröße y ist proportional zur ersten Ableitung der Regeldifferenz nach der Zeit.

y = Kd * d(xd) / dt

Einen reinen D-Regler kann es nicht geben, da dieser auf eine beliebig große konstante Regelabweichung nicht ansprechen und damit auch nicht ausregeln würde.

Neben den oben besprochenen Grundtypen unterscheidet man noch verschiedene Arten von Verzögerungsgliedern und Totzeitglieder. Um ein optimales Regelverhalten des Reglers zu erreichen, kann man nun einen P-Regler mit anderen Grundtypen kombinieren. So erhält man z. B. durch Parallelschaltung eines P-, I- und D-Reglers einen PID-Regler.

Last Update: 2005-Okt-08


Analoge Regelverstärker

Die im folgenden beschriebenen analogen Regelverstärker sollen nur die wichtigsten Grundtypen von Regelern beispielhaft aufzählen. Für eine weitergehende Beschreibung sei der Leser auf die einschlägige Literatur verwiesen (z. B. Ebel 1982 [image] , Föllinger 1980 [image] ).

Last Update: 2005-Okt-29


Home [image] Spezielle Schaltungen [image] Regler [image] Analoge Regelverstärker [image] P-Regler
Index
Siehe auch: Grundtypen von Regelverstärkern, PI-Regler, PID-Regler

P-Regler

Der P-Regler lässt sich in einfacher Weise durch einen Operationsverstärker realisieren. Die Verstärkung des Operationsverstärkers bestimmt den Beiwert des Reglers.

Operationsverstärker als P-Regler

In dieser einfachen Schaltung fungiert der Operationsverstärker sowohl als Vergleicher als auch als Regelverstärker. Der Operationsverstärker vergleicht die Spannung zwischen dem invertierenden Eingang (Istwert) und dem nicht invertierenden Eingang (Sollwert) und stellt seinen Ausgang so ein, dass am Emitter des Transistors eine Spannung ansteht, die über den Spannungsteiler R1/R2 den Sollwert ergibt. Die bleibende Regelabweichung dieses Reglers ist sehr gering, da der Operationsverstärker eine sehr hohe Verstärkung aufweist.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Regler [image] Analoge Regelverstärker [image] PI-Regler
Index
Siehe auch: Grundtypen von Regelverstärkern, P-Regler, PID-Regler

PI-Regler

Ein PI-Regelverstärker lässt sich mit einem Operationsverstärker realisieren. Die Widerstände R1 und R2 bestimmen die Verstärkung des P-Anteils, der Widerstand R2 und der Kondensator C bestimmen die Grenzfrequenz des Integrators.
Operationsverstärker als PI-Regler

Dieser Regler hat keine bleibende Regelabweichung, da der Restfehler des P-Anteils am Kondensator C integriert wird und nach hinreichender Zeit zu einer Ausregelung führt.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Regler [image] Analoge Regelverstärker [image] PID-Regler
Index
Siehe auch: Grundtypen von Regelverstärkern, P-Regler, PI-Regler

PID-Regler

Im PID-Regler sind alle drei grundlegenden Reglertypen kombiniert:

Prinzipschaltung eines PID-Reglers

Die Dimensionierung eines solchen Reglers ist meist insofern schwierig, als das Zeitverhalten der Regelstrecke (besonders bei langsamen Vorgängen) meist nur ungenau bekannt ist. Abhilfe schafft hier ein einstellbarer PID-Regler dessen Parameter getrennt nach P-, I- und D-Anteil eingestellt werden können. Nach der erfolgreichen Einstellung können die ermittelten Werte auf die einfache PID-Reglerschaltung aus der oberen Abbildung übertragen werden. Folgende Abbildung zeigt einen einstellbaren PID-Regler der für einen Frequenzbereich von etwa 10 kHz ausgelegt ist.

Einstellbarer PID-Regler

Der Abgleich des Reglers geht so vor sich: Zuerst wird der Schalter am integrierenden Regler geschlossen und das Potentiometer Rd auf null gedreht. Damit liefern der I- und der D-Anteil keinen Beitrag zum Regelverhalten, der Regler verhält sich wie ein reiner P-Regler. Nun wird ein Rechtecksignal an den Eingang des Reglers gelegt und die Verstärkung des P-Reglers so weit erhöht, bis der Ausgang des Reglers einen Einschwingvorgang zeigt, der nur mehr schwach gedämpft ist. Im nächsten Schritt wird nun die Frequenz des D-Reglers durch Verdrehen des Potentiometers Rd so weit erniedrigt, dass der Einschwingvorgang nicht mehr sichtbar ist. Im dritten Schritt wird das Einschwingverhalten der Regelabweichung durch Einstellen des I-Reglers optimiert. Dazu wird der Schalter geöffnet und am Oszilloskop die Differenz zwischen Eingangs- und Ausgangssignal dargestellt. Das Potentiometer Ri wird nun so eingestellt, dass die Regelabweichung in der kürzestmöglichen Zeit auf null geht.

Last Update: 2005-Okt-08


Home [image] Spezielle Schaltungen [image] Regler [image] Digitale Regler
Index
Siehe auch: Grundtypen von Regelverstärkern, Analoge Regelverstärker

Digitale Regler

Bei digitalen Reglern (auch Abtastregler genannt) wird der Regelverstärker durch einen digitalen Schaltkreis (z.B. Mikroprozessor, Signalprozessor, diskrete Logik) ersetzt. Dies verlangt natürlich, dass die Eingangsdaten (Sollwert, Istwert) in digitaler Form vorliegen und dass die errechneten Werte des Reglers (Stellgröße) in die analoge Form gebracht werden müssen. Der Regler benötigt also neben dem Mikroprozessor auch noch zwei AD-Wandler und einen DA-Wandler.

Die Vorteile eines digitalen Reglers liegen vor allem in seiner Flexibilität und der Möglichkeit, auch komplexe Systeme noch regeln zu können. Grundsätzlich gilt, dass ein digitaler Regler umso vorteilhafter eingesetzt werden kann, je komplexer die Anlage ist, die geregelt werden soll.

Die Nachteile eines digitalen Reglers liegen vor allem in seiner beschränkten Reaktionsgeschwindigkeit, da der Abtastvorgang und das Berechnen der Regelantwort Zeit kosten (je nach Typ des AD-Wandlers, des Prozessors und der Komplexität der Aufgabe zwischen einigen Mikrosekunden und einigen hundert Millisekunden). Die geringere Genauigkeit eines digitalen Reglers (typ. 12 Bit) spielt in der Regelungstechnik eine geringe Rolle, da durch Einsatz eines I-Reglers die Regelabweichung innerhalb der Grenzen des Systems ohnehin auf null geht.

Last Update: 2005-Okt-29


Home [image] Spezielle Schaltungen [image] Regler [image] Phase Locked Loop
Index
Siehe auch: Experiment: Aufbau eines Frequenzsynthesizers, Aufbau des Frequenzgenerators, Konzept des Frequenzgenerators

Phase Locked Loop

Für viele Anwendungen muss man zu einem bestehenden periodischen Signal ein zweites Signal gleicher oder vielfacher Frequenz phasenstarr synchronisieren. Für diese Aufgabe wird eine spezielle Regelschaltung verwendet, die Phase Locked Loop (PLL) oder Nachlaufsynchronisation genannt wird. Die Prinzipschaltung einer PLL ist in hier abgebildet.

Prinzip einer PLL

Eine PLL besteht aus einem spannungsgesteuerten Oszillator (VCO), einem Phasendetektor und einem Tiefpassfilter. Der Phasendetektor vergleicht das Signal des VCOs und das externe Referenzsignal und liefert an das Tiefpassfilter eine Spannung, deren Gleichanteil zur Phasendifferenz proportional ist. Das Ausgangssignal des Tiefpasses steuert nun den VCO so, dass die Frequenz des VCOs und die Bezugsfrequenz phasenstarr synchron laufen.

Die Eigenschaften einer PLL-Schaltung hängen zum Großteil von der Art des Phasendetektors und dem Typ des Tiefpassfilters ab. Man unterscheidet entsprechend des Typs des Phasendetektors zwischen linearen und digitalen PLL-Schaltungen. Lineare PLL-Schaltungen verarbeiten Sinussignale und sind nur phasenselektiv, während digitale Phasenregelschleifen ausschließlich mit Rechtecksignalen arbeiten und sowohl phasen- als auch frequenzselektiv sein können.

Im folgenden sei der einfachste digitale Phasendetektor beschrieben, der aus einem XOR-Gatter aufgebaut ist und nur phasenselektiv ist. Zu seiner optimalen Ausnutzung müssen die Eingangssignale ein Tastverhältnis von 50 % aufweisen. Nachstehende Abbildung zeigt die Signale, die am Detektor anliegen, wenn die PLL versucht, auf ein geändertes Referenzsignal einzuschwingen.

Einfacher Phasendetektor

Zum Verständnis der Funktion des Phasendetektors sei angenommen, dass Eingangsspannung und Referenzspannung phasenstarr mit 90ø Phasenwinkel synchronisiert sind. Der Phasendetektor liefert in diesem Fall ein Rechtecksignal mit einem Tastverhältnis von 50 %. Wird nun die Referenzfrequenz ein wenig verändert, so tritt eine Phasenverschiebung zum Eingangssignal auf, was zur Folge hat, dass sich das Tastverhältnis des Phasendetektors verschiebt und die mittlere Amplitude des Signals des PDs steigt oder fällt. Die geänderte Amplitude verändert nun die Frequenz des VCOs so, dass das Tastverhältnis wieder 50% beträgt. Die PLL ist wieder 'eingerastet'.

Dieser sehr einfache Phasendetektor weist jedoch den Nachteil auf, dass er auch auf Vielfache der Referenzfrequenz synchronisieren kann. Man muss daher durch geeignete Dimensionierung des Tiefpassfilters versuchen, dies zu unterdrücken. Andere Phasendetektoren vermeiden diesen Nachteil, indem sie durch Einsatz von flankengesteuerten Flip-Flops auch frequenzselektiv sind.

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] AD-Interface - Grundlagen
Index
Siehe auch: Spezifikationen von AD- und DA-Wandlern, Analog-Digital-Wandler, Nykvist-Theorem

AD-Interface - Grundlagen

Möchte man analoge Signale aus der realen Welt mit der digitalen Welt der Computer in Verbindung bringen, so benötigt man Bauteile und Geräte, die die Umwandlung der Information von analoger in digitale Form und umgekehrt zustande bringen. Bei dieser Umwandlung der Information gibt es naturgemäß Einschränkungen und mögliche Fehlerquellen, die zu einer Verringerung oder gar zum Verlust der gewünschten Information führen können.

Um die Anforderungen an ein Interface zu klären, sollte zuerst geklärt werden, welche Extremwerte das interessierende Signal in Zeit und Amplitude annehmen kann. Man sollte sich also beim Entwurf und/oder der Anwendung eines Interfaces bewusst sein, welche Größen des Signals von besonderer Bedeutung sind, und daher besondere Beachtung verdienen. Außerdem ist es wichtig, sich genau im klaren zu sein, welche Anforderungen an das Messergebnis bezüglich Genauigkeit gestellt werden. Im folgenden seien die wichtigsten Parameter eines Messsignals kurz angeführt:

Absolutwert der Amplitude

Der Absolutwert der Signalamplitude ist vor allem für die richtige Bemessung des Eingangsverstärkers (oder Abschwächers) wichtig. Da der Eingangsspannungsbereich von AD-Wandlern meist einige Volt beträgt, müssen kleine Signale entsprechend verstärkt werden. Bei sehr kleinen Signalen kann es, bedingt durch die hohe notwendige Verstärkung zu unerwünschten Nebeneffekten kommen. Besonders muss auf die Langzeit-Stabilität der Eingangsverstärker (Offset-Drift, Temperaturstabilität) geachtet werden.

Dynamik des Signals

Unter Dynamik versteht man das Verhältnis der größten vorkommenden Amplitude zur kleinsten Interessierenden. Dieses Verhältnis bestimmt u. a. die notwendige Auflösung der AD-Wandler und den Aufbau der Vorverstärker. Sie wird oft in Dezibel angegeben.

Frequenzspektrum des Signals

Das Frequenzspektrum des Messsignals ist entscheidend für die Wahl der Digitalisierungsrate, da es bei falscher Wahl zu Artefakten kommen kann (s. a. Nykvist-Theorem). Bei vielen Signalen ist das Frequenzspektrum nicht bekannt und meist schwer zu ermitteln. In diesem Fall kann man sich dadurch helfen, dass man das Signal in der Zeitdomäne betrachtet und entscheidet, welche kleinste Feinheiten des Signals noch wiedergegeben werden sollen.

Störungen (Rauschen, Brumm, Spikes)

Man sollte unterscheiden zwischen Störungen, die aus der Signalquelle stammen und Störungen, die von außen in das Messsignal eingebracht werden.

Innenwiderstand der Signalquelle

Der Innenwiderstand der Signalquelle ist für die Wahl der Vorverstärker und eventuelle schaltungstechnische Maßnahmen zur Pufferung wichtig.

Bei der Wandlung eines Signals von analoger in digitale Form und umgekehrt, wird das Signal sowohl in der Zeit als auch in der Amplitude diskretisiert, wobei das Signal vier mögliche Zustände annehmen kann. Beim Durchlauf des Signals durch eine signalverarbeitende Maschine, die typischerweise aus Sample&Hold-Schaltung, AD-Wandler, Signalprozessor und DA-Wandler besteht, kommt das Signal in allen vier Erscheinungsformen vor:

Digitale Verarbeitung eines analogen Signals

Kontinuierliche Zeit, kontinuierliche Amplitude

Dieses Signal nennt man analoges Signal, und ist aus der täglichen Erfahrung vertraut, da in der Natur vorkommende Signale analog sind (oder die diskreten Stufen so klein sind, dass sie nur unter speziellen Bedingungen beobachtet werden können). Signale aus Sensoren sind üblicherweise analog und bilden z.B. das Eingangssignal einer digitalen signalverarbeitenden Maschine.

Diskrete Zeit, kontinuierliche Amplitude

In der ersten Stufe einer signalverarbeitenden Maschine, werden nach einer Filterung vom Signal in gleichem zeitlichen Abstand 'Proben' gezogen, die nun zeitdiskret sind, aber immer noch jeden beliebigen Wert der Amplitude aufweisen können. Man nennt dieses Signal im Englischen auch 'sampled signal'.

Diskrete Zeit, diskrete Amplitude

Nach dem Sample&Hold-Baustein wird das Signal nun vom AD-Wandler in digitale Form gebracht. Es liegt nun sowohl zeit- als auch amplitudendiskret vor und kann so in einem Signalprozessor verarbeitet werden.

Kontinuierliche Zeit, diskrete Amplitude

Nach der Bearbeitung im Signalprozessor kann das Signal durch einen DA-Wandler wieder in analoge Form transformiert werden. Es liegt dann wieder in zeitkontinuierlicher, aber amplitudendiskreter Form vor. Man sieht also, dass das ursprüngliche analoge Signal nicht wieder gänzlich rekonstruiert werden kann. Bei genügend hoher Auflösung der beteiligten Komponenten (AD-Wandler, Signalprozessor, DA-Wandler) kann das Ausgangssignal aber als analog angesehen werden.

Bei der Wandlung eines analogen Signals in einen digitalen Wert geschieht eine Zuordnung (ähnlich einer Tabelle) von analogen Spannungsbereichen zu diskreten digitalen Werten. Folgende Abbildung zeigt als Beispiel einen Ausschnitt aus der idealisierten Kennlinie eines 4-Bit-AD-Wandlers. Die in der Abbildung angegebenen analogen Werte sind willkürlich gewählt.
Umsetzung von analogen in digitale Werte

Last Update: 2005-Okt-08


Nykvist-Theorem

Bei der Digitalisierung eines analogen Signals geschieht eine Diskretisierung sowohl in der Zeit- als auch in der Amplitudenrichtung. In diesem Abschnitt sollen nun die Auswirkungen der Zeitdiskretisierung gezeigt werden und daraus eine Regel zur Bestimmung der optimalen Abtastfrequenz gefunden werden.

Zuerst ein kleines Beispiel: Man betrachte zwei sinusförmige Signale, die eine Frequenz von 1000 Hz und 2500 Hz aufweisen (In folgender Abbildung: a und b). Nun werden diese beiden Signale mit einer Abtastfrequenz von 1500 Hz digitalisiert (c). Die jeweiligen Abtastwerte sind in den Kurven a) und b) durch Punkte markiert. Möchte man nun aus den Abtastwerten das ursprüngliche Signal rekonstruieren, so bekommt man in beiden Fällen die Kurve d), das heißt, bei der Digitalisierung ist die Frequenzinformation verloren gegangen, da man sonst die beiden Kurven unterscheiden können müsste.

Digitalisierung von zwei sinusförmigen Signalen

Klicken Sie auf das Bild oben um die Simulation zu starten. Sie können mit unterschiedlichen Signalformen und verschiedenen Abtastraten experimentieren. Auf der rechten Seite wird das jeweils korrespondierende Fourierspektrum dargestellt.

Die entscheidende Frage lautet nun: Wie groß muss die Abtastfrequenz mindestens sein, damit ein sinusförmiges Signal bei der Rekonstruktion wieder mit der ursprünglichen Frequenz erscheint. Dazu noch ein kleines Beispiel:

Folgende Abbildung zeigt das Ergebnis der Digitalisierung eines Sinussignals mit einer Frequenz von 1000 Hz bei unterschiedlichen Digitalisierungsraten. Man sieht, dass bei 10 KHz Digitalisierungsrate das Signal noch ganz passabel rekonstruierbar ist. Je niedriger die Abtastfrequenz ist, desto schlechter werden die Ergebnisse, sodass bei 625 Hz die Rekonstruktion eine völlig falsche Kurve ergibt. Es gibt also scheinbar eine Grenzfrequenz der Digitalisierungsrate, die unbedingt eingehalten werden muss, damit ein sinusförmiges Signal noch ausreichend genau wiedergegeben werden kann.
Digitalisierung mit unterschiedlichen Abtastraten

Hinweis: Eine Simulation des Abtast-Theorems und seiner Konsequenzen finden Sie auf den Webseiten von "Learning by Simulatons".

Diese Grenzfrequenz wurde zuerst von Nykvist 1928 und dann später nochmals von Shannon 1949 berechnet. Das folgende Theorem definiert diese Grenzfrequenz und heißt Nykvist-Theorem; die Grenzfrequenz wird manchmal auch Nykvist-Frequenz genannt.

Nykvist-Theorem Falls ein Signal keine Frequenzkomponenten oberhalb einer Frequenz fmax beinhaltet, kann dieses Signal durch Abtastwerte mit einer Frequenz von >2*fmax eindeutig wiedergegeben werden.

Das bedeutet, dass im oben erwähnten Beispiel die Abtastfrequenz mindestens 2 kHz betragen muss.

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Spezifikationen von AD- und DA-Wandlern
Index
Siehe auch: Datencodes bei AD- und DA-Wandlern, AD-Interface - Grundlagen

Spezifikationen von AD- und DA-Wandlern

In den Datenblättern von AD- und DA-Wandlern werden eine Reihe von Spezifikationen angeführt, die die Limits des jeweiligen Wandlers abstecken. Im folgenden werden die wichtigsten Spezifikationen beschrieben und erklärt.

Auflösung (resolution):

Unter der Auflösung eines Wandlers versteht man die Zahl der Stufen die ein DAC erzeugen kann, bzw. die Zahl der Spannungspegel, die ein ADC unterscheiden kann. Die Auflösung wird normalerweise als Logarithmus Dualis in Bit angegeben. Ein Wandler mit 10 Bit Auflösung kann also 1024 Stufen (=210) unterscheiden. Achtung, die Angabe einer bestimmten Auflösung bedeutet nicht, dass der Wandler auch die der Auflösung entsprechende Genauigkeit aufweist.

In manchen Datenblättern wird die Auflösung auch als Kehrwert der Zahl der Stufen angegeben. In diesem Fall bedeutet z.B. eine Auflösung von 0.0244 % des full-scale-Bereichs, dass 100/0.0244 = 4096 Quantisierungsstufen möglich sind; der Wandler besitzt also eine Auflösung von 12 Bit.

Genauigkeit (accuracy):

Unter Genauigkeit eines Wandlers versteht man die Summe aller Fehler, die ein Wandler aufweist. Die Genauigkeit eines Wandlers wird jedoch nur in seltenen Fällen angegeben, da meist die Einzelfehler spezifiziert werden.

Quantisierungsfehler (quantizing error):

Der Quantisierungsfehler gibt die maximale Abweichung der Übertragungsfunktion eines AD-Wandlers von einer geraden Linie an. Der Quantisierungsfehler beträgt bei jedem ADC ±1/2 LSB und ist unvermeidlich.

Skalierungsfehler (gain/scale error):

Unter dem Skalierungsfehler versteht man die lineare Abweichung der Übertragungsfunktion, angegeben bei full-scale-Aussteuerung. Der Skalierungsfehler wird meist durch eine falsch eingestellte Referenzspannung oder einen falsch justierten Verstärker verursacht.

Offset-Fehler (offset error):

Der Offset-Fehler gibt die Abweichung der Übertragungsfunktion bei null Volt Eingangsspannung an. Ein Offset-Fehler wird normalerweise durch den Offset-Fehler eines Eingangsverstärkers oder eines Komparators verursacht. Er kann meist durch eine einfache Schaltungsmaßnahme auf null abgeglichen werden.

Linearität (linearity):

Unter Linearität (genauer: Nicht-Linearität) versteht man die maximale Abweichung der Übertragungsfunktion eines ADCs oder DACs von der linearen Idealkurve. Bei der Angabe der Linearität sind der Quantisierungsfehler, der Skalierungsfehler und der Offsetfehler herausgerechnet. Die Linearität wird in LSB angegeben und darf bei geforderter Monotonie der Übertragungsfunktion den Wert von ±1/2 LSB nicht überschreiten. Die Angabe der Linearität eines ADCs oder DACs ist ein wichtiges Kriterium für die Güte eines Bausteins, da dieser Fehler nicht korrigiert werden kann (siehe auch Differenz-Linearität und Monotonie).

Differentielle Linearität (differential linearity):

Die differentielle Linearität beschreibt den maximalen Unterschied zwischen zwei benachbarten Digitalisierungsstufen abzüglich dem Idealwert von 1 LSB. Eine differentielle Linearität von ±1.5 LSB bedeutet also, dass zwischen zwei benachbarten Digitalisierungsstufen ein Unterschied von -0.5 bis +2.5 LSB sein kann. In diesem Falle wäre die Übertragungsfunktion nicht monoton. Die differentielle Linearität entspricht der ersten Ableitung der Übertragungsfunktion.

Monotonie:

Bei einer monotonen Übertragungsfunktion wechselt die erste Ableitung nie das Vorzeichen. Eine monotone Kurve ist also stetig steigend oder fallend. Die Monotonie eines ADCs oder DACs ist besonders bei Systemen wichtig, wo das Bauelement in Rückkopplungen eingesetzt wird (z.B. in Servoverstärkern oder Reglern). Bei fehlender Monotonie kann es zu Schwingungen in solchen Schaltungen kommen. Monotonie kann nur bei einer Linearität und einer differentiellen Linearität von ± 1/2 LSB garantiert werden.

Einschwingzeit (settling time):

Die Angabe einer Einschwingzeit gilt nur für DACs. Sie gibt die maximale Zeit an, die der Ausgang eines DACs benötigt, um nach einem Code-Wechsel auf den neuen Wert mit einer bestimmten Genauigkeit (meist 0.5 LSB) einzuschwingen.

Wandlungsgeschwindigkeit (conversion rate):

Die Wandlungsgeschwindigkeit gibt die Zahl der Konversionen pro Sekunde (DA der AD) an, die maximal erreicht werden können. Die Wandlungsgeschwindigkeit wird durch Verzögerungszeiten der internen Bauelemente und durch das Wandlungsprinzip bestimmt. Sie liegt zwischen einigen Konversionen pro Sekunde (integrierender ADC) und etwa 100 Millionen Konversionen pro Sekunde (Flash-ADC oder Video-DAC).

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Datencodes bei AD- und DA-Wandlern
Index
Siehe auch: Analog-Digital-Wandler, Spezifikationen von AD- und DA-Wandlern, BCD-codierte Zahlen, Ganze Zahlen und Zweier-Komplement

Datencodes bei AD- und DA-Wandlern

Der Datenfluss vom AD-Wandler oder zum DA-Wandler geschieht je nach der Auflösung des Wandlers mit n Bit, wobei für die Darstellung der Daten im Prinzip alle Möglichkeiten einer binären Codierung in Frage kommen. Da gerade aber bei AD/DA-Wandlern oft Formate eingesetzt werden, die normalerweise nicht für die binäre Darstellung von Zahlenwerten verwendet werden, soll hier ein kurzer Überblick zu diesen Formaten geboten werden.

Binär (natural binary):

Die binäre Darstellung eignet sich nur für die Repräsentation positiver Eingangssignale. Ein binäres Wort bei dem alle Stellen gleich null sind, entspricht dem Wert null, ein binäres Wort mit allen Bits gleich eins entspricht dem vollen Spannungsbereich des Wandlers. Beispiel: Die Zahl 182 wird als 10110110 dargestellt.

Einer-Komplement (inverted binary):

Das Einer-Komplement entspricht dem Binärcode, wobei jedoch Null und Eins ausgetauscht sind. Die Umformung von 'normalem' Binärcode und Code im Einer-Komplement erfolgt durch eine simple Inversion der Bits. Beispiel: Die Zahl 182 wird als 01001001 dargestellt.

Zweier-Komplement (two's complement binary):

Das Zweier-Komplement ermöglicht auch die Darstellung von negativen Werten und ist eine sehr häufig verwendete Form. Dabei werden positive Zahlen und die Null durch gewöhnliche Binärcodes dargestellt, negative Zahlen werden durch bitweise Inversion des entsprechenden positiven Wertes und anschließender Addition von 1 dargestellt. Die Zweier-Komplementdarstellung steht in engem Zusammenhang mit der 'offset binary' Darstellung (siehe unten). Beispiel: Die Zahl 182 wird als 000010110110 dargestellt, die Zahl -182 wird als 111101001010 dargestellt.

Binary coded decimal (BCD):

Bei der BCD-Darstellung werden die dezimalen Ziffern einer dezimalen Zahl durch vier Bit breite, binäre Zahlen dargestellt. Negative Zahlen werden mit Hilfe eines eigenen Vorzeichen-Bits dargestellt. Die BCD-Darstellung ist vor allem bei jenen AD-Wandlern hilfreich, die direkt ein Display ansteuern (z.B. in Digitalvoltmetern). Die Auflösung eines BCD-codierten Ausgangs ist geringer als bei binär codierten Ausgängen. So hat ein AD-Wandler mit 12-Bit-BCD-Ausgang eine Auflösung von 1:1000 während ein AD-Wandler mit 12-Bit-Binärausgang eine Auflösung von 1:4096 besitzt. Beispiel: Die Zahl 182 wird als 000110000010 dargestellt.

Binär mit Offset (offset binary):

Die Binärdarstellung mit Offset entspricht der binären Darstellung, mit dem Unterschied, dass die Skala um den halben Wertebereich verschoben ist. Dadurch können positive und negative Zahlen dargestellt werden. Ein Wort mit allen Bits gleich null entspricht dem maximalen negativen Wert, ein Wort mit allen Bits gleich eins entspricht den maximalen positiven Wert. Der Wert null wird durch eine Zahl dargestellt, deren höchstwertiges Bit (MSB) gleich eins ist, alle anderen Bits sind gleich null. Der 'offset binary'-Code kann durch Inversion des MSB in das Zweier-Komplement übergeführt werden und umgekehrt. Beispiel: Die Zahl 182 wird bei einer Auflösung von 12 Bit durch die binäre Zahl 100010110110 dargestellt.

Vorzeichen mit Absolutwert:

Bei dieser Darstellung wird der Absolutwert in Binärcode dargestellt. Zur Codierung des Vorzeichens wird ein eigenes Bit verwendet. Diese Darstellung hat wie die BCD-Darstellung den Nachteil, dass die Zahl Null durch zwei Werte repräsentiert werden kann (+0 und -0).

Last Update: 2005-Okt-08


Analoger Multiplexer

Bei vielen Messaufgaben müssen mehrere Signale gemeinsam gemessen und ausgewertet werden. Zu diesem Zweck kann man entweder entsprechend viele AD-Wandler einsetzen, oder aber einen Signalumschalter verwenden, der die interessierenden Signale nacheinander mit einem einzigen AD-Wandler verbindet. Wenn der Zeitraum, der für das Umschalten und die Digitalisierung benötigt wird, kleiner ist als die geforderte zeitliche Auflösung des Messsignals, so ist der zweite Weg meist der wirtschaftlichere.

Die Eigenschaften von analogen Multiplexern und Schaltern werden durch folgende Parameter charakterisiert:

On- und Off-Widerstand

Der On-Widerstand der Schalter sollte im Idealfall gleich null sein, bei realen Schaltern bewegt er sich zwischen 100 und 1000 W. Der Off-Widerstand sollte im Idealfall unendlich sein, reale Schalter haben Off-Widerstände im Bereich von 1012 W. Analogspannungsbereich Der Analogspannungsbereich gibt den Bereich der Spannung an, den das analoge Signal einnehmen darf, ohne dass es zu Verzerrungen des Signals kommt. Die meisten Schalter bieten einen Spannungsbereich von +/- 10 V, jedoch sollte man, um Einschwingzeiten, Verzerrungen und Übersprechen möglichst klein zu halten diesen Spannungsbereich nicht voll ausschöpfen. Übersprechen zwischen den Kanälen Bei Multiplexern oder bei mehreren auf einem Chip integrierten Schaltern kommt es zum Übersprechen eines eingeschalteten Kanals auf einen Ausgeschalteten. Das Übersprechen hängt außerdem stark von der Art des Einsatzes eines Schalters und vom Layout der Platine ab. Schaltzeiten Unter der Schaltzeit eines Multiplexers versteht man die Zeit vom Eintreffen des Steuersignals bis zum Erreichen des gewünschten Zustandes.

Für das Umschalten des Analogsignals werden entweder Bipolartransistoren, Dioden oder Feldeffekttransistoren verwendet, die entweder als diskrete Bauelemente eingesetzt werden oder aber als bereits fertig konfektionierte integrierte Schaltungen erhältlich sind.

Die folgende Tabelle gibt einen kleinen Überblick über kommerziell erhältliche analoge Schalter und Multiplexer.
Typ | Ron [W] | Uin [V] | ton/toff [nsec] | Bemerkungen
LF13333 | 250 | +/-15 | 90/500 | 4-fach-Schalter
TL182 | 100 | +/-10 | 175/350 | 2-fach-Schalter
CD4016 | 300 | 0 bis 15 | 20/20 | 4-fach-Schalter
CD4051 | 120 | 0 bis 15 | 150/150 | 1-aus-8-MUX
CD4052 | 120 | 0 bis 15 | 150/150 | 1-aus-4-MUX
CD4066 | 80 | 0 bis 15 | 50/50 | 4-fach-Schalter
AH5010 | 150 | +/-15 | 150/300 | 1-aus-4-MUX
DG508A | 250 | +/-15 |  | 1-aus-8-MUX
IH5341 | 75 | +/-15 |  | 2-fach-Schalter
TL601 | 100 | +/-10 | 100/400 | 1-aus-2-MUX
AD7590 | 75 | +/-15 |  | 4-fach-Schalter
MPC800 | 750 | +/-15 | 250/250 | 1-aus-16-MUX
Ron .... Durchgangswiderstand Uin .... Analogspannungsbereich ton/toff .... Ein- und Ausschaltverzögerung

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Sample & Hold
Index
Siehe auch: Analog-Digital-Wandler, Experiment: Aufbau einer Sample&Hold-Schaltung

Sample & Hold

Manche Typen von AD-Wandlern benötigen während des Konversionsvorgangs ein konstantes Eingangssignal, um zu korrekten Ergebnissen zu kommen. Unter konstantem Eingangssignal ist ein Signal gemeint, das sich innerhalb der Konversionszeit maximal um die halbe Höhe der kleinsten Stufe des AD-Wandlers ändert.

Ein Beispiel soll das illustrieren. Angenommen ein Signal wird mit einem 10-Bit-ADC digitalisiert, der eine Konversionszeit von 100 ms und einen Eingangsspannungsbereich von 5 V aufweist. Die kleinste Stufe entspricht also 5/1024 = 4.9 mV. In diesem Fall darf sich die Eingangsspannung innerhalb von 100 ms nicht um mehr als 2.45 mV ändern, um ein Ergebnis mit 10 Bit Genauigkeit zu erhalten. Angenommen, das Eingangssignal nützt den vollen Eingangsspannungsbereich von 5 V aus, so darf dieses Signal eine Frequenz von höchstens etwa 5 Hz (!) besitzen, wenn diese Bedingung erfüllt sein soll.

Man sieht aus dem obigen Beispiel, dass selbst für schnelle AD-Wandler die maximal erlaubte Grenzfrequenz sehr niedrig ist, falls man die maximal mögliche Auflösung ausschöpfen möchte. Die folgende zeigt die Grenzfrequenzen in Abhängigkeit von der Konversionszeit und der Auflösung des verwendeten AD-Wandlers.

Zusammenhang von Grenzfrequenz, Auflösung und Konversionszeit

Um nun dieses Problem zu lösen, kann man in den Signalpfad vor den AD-Wandler eine Schaltung einfügen, die für die Zeit der Konversion das Eingangssignal konstant hält. Diese Schaltung wird 'Sample & Hold'- oder auch 'Track & Hold'- Schaltung genannt (S&H oder T&H), da ihre Ausgangsspannung normalerweise dem Eingangssignal folgt, und während der Konversion die Ausgangsspannung auf dem letzten Wert konstant gehalten wird.

Nachstehende Abbildung zeigt den prinzipiellen Aufbau einer S&H-Schaltung. Nach einem Spannungsfolger, der als Impedanzwandler dient, läuft das Signal über einen elektronischen Schalter zu einem Kondensator. Mit dem Kondensator ist wiederum ein Spannungsfolger verbunden, der die Kondensatorspannung an den Ausgang weiterleitet.

Aufbau einer Sample & Hold-Schaltung

Im Sample-Modus ist der Schalter geschlossen und das Ausgangssignal ist gleich dem Eingangssignal. Wird nun der Schalter geöffnet (Hold-Modus), bleibt die Spannung am Kondensator annähernd konstant, da dieser nur mehr über den sehr großen Eingangswiderstand des zweiten Spannungsfolgers entladen werden kann. Das heißt also, dass die Eingangsspannung quasi eingefroren wird und die Ausgangsspannung den Wert der Eingangsspannung hält, der zum Zeitpunkt des Umschaltens vorhanden war. Folgende Abbildung zeigt die Eingangs- und Ausgangsspannung einer S&H-Schaltung.

Die maximal mögliche Signalfrequenz wird nun nicht mehr von der Konversionszeit des AD-Wandlers bestimmt, sondern nur mehr von der Zeit, die die S&H-Schaltung benötigt, ein Signal mit einer bestimmten Genauigkeit zu erfassen (acquisition time) und der Zeit um vom Sample- in den Hold-Modus zu schalten (aperture time). Die Summe dieser Zeiten liegt typischerweise zwischen einigen ns und einigen ms und ist damit um den Faktor 100 - 10000 kleiner als die Konversionszeit eines mittelschnellen AD-Wandlers.

Spannungsverläufe an einer Sample & Hold-Schaltung

Neben den positiven Effekten auf die Signalfrequenz sind S&H-Bausteine jedoch auch mögliche Fehlerquellen, die die Genauigkeit der Digitalisierung herabsetzen können, wenn sie nicht beachtet werden. Zum einen muss die Geschwindigkeit des Spannungsabfalls des Kondensators beachtet werden. Für schnelle AD-Wandler wird das normalerweise kein Problem darstellen, jedoch kann bei langsameren Typen mit hoher Auflösung die Kondensatorspannung innerhalb der Konversionszeit um mehr als ein halbes Bit abfallen, was zu einem Verlust der Genauigkeit der Digitalisierung führt.

Ein sehr häufig übersehener Fehlerbeitrag rührt aus Spannungsspitzen beim Umschaltvorgang her (hold step). Diese Spannungsspitzen führen zu einer Zusatzladung am Kondensator und damit zu einer Verfälschung der Spannung am Kondensator (die ja gleich der Eingangsspannung sein soll). Diesen Fehler kann man jedoch durch einen einfachen Trick ausgleichen (s. nachstehende Schaltung). Man koppelt einen kleinen Teil des Schaltsignals auf den S&H-Kondensator über ein Hochpassfilter ein. Macht man die Größe des eingekoppelten Signals einstellbar, so kann man diesen Fehler auf null abgleichen.

Ausgleich des Übersprechens des Steuersignals

Ein weiterer Fehler, der durch S&H-Bausteine eingeführt wird, ist der sogenannte 'Aperturjitter'. Darunter versteht man Unregelmäßigkeiten in der Zeit, die benötigt wird, bis der Umschaltvorgang vom Sample- in den Hold-Modus beendet wird. Der Aperturjitter wirkt sich vor allem bei hohen Frequenzen des Eingangssignals aus.

Last Update: 2005-Okt-08


Digital-Analog-Wandler

Die meisten in der Natur vorkommenden Signale sind analoger Natur. Daher ist es für eine digital arbeitende Maschine notwendig, die digitalen Werte in analoge Größen umzusetzen, wenn externe Vorgänge beeinflusst werden sollen.

Ein Digital-Analog-Wandler (DA-Wandler oder DAC) erzeugt aus einem digitalen Eingangssignal ein diskretes, analoges Ausgangssignal, das proportional zum digitalen Wert der Eingangsgröße ist. Die Wandlung kann entweder durch Summierung von entsprechend gewichteten Strömen erfolgen oder durch Schalten einer Widerstandsmatrix.

Grundsätzlich kann ein DA-Wandler das analoge Signal mit 2n Stufen erzeugen, wobei n für die Auflösung des Wandlers in Bit steht. Ein DAC mit 10 Bit Auflösung kann also 1024 verschiedene Spannungsstufen erzeugen, die sich in gleichen Abständen über den Ausgangsspannungsbereich des DACs verteilen. Die Auflösung eines DA-Wandlers kann jedoch nicht beliebig gesteigert werden, da mit steigender Auflösung auch die maximal erlaubten Bauteiltoleranzen für den Aufbau des DACs sinken. Zur Zeit sind DACs mit maximal 18 Bit Auflösung kommerziell erhältlich, was einer Abstufung von 38 mV bei 10 V Ausgangsspannungsbereich entspricht.

Summierung von binär gewichteten Strömen

Eine sehr einfache Möglichkeit, ein digitales Signal in ein analoges umzuformen, besteht in der Summation von binär gewichteten Strömen. Dazu wird an die Ausgänge eines Registers je ein Widerstand angeschlossen, dessen Wert so bemessen ist, dass der durch ihn fließende Strom proportional zur binären Wertigkeit des angeschlossenen Ausgangs ist. Die Summe aller Ströme ergibt dann über einen Abschlusswiderstand einen Spannungsabfall der proportional zum angelegten digitalen Wert ist:

Uout = (8U3 + 4U2 + 2U1 + U0)*Rf/8R,

mit U0 - U3 .... Spannung an Bit 0 bis Bit 3.

DA-Wandlung durch Summation von Strömen

DA-Wandler, die nach diesem Prinzip arbeiten, haben jedoch einige Nachteile, die hier kurz aufgezählt werden sollen. Zum einen ist es für eine korrekte Funktion des DA-Wandlers notwendig, dass die Spannungspegel des ansteuernden Registers für alle Ausgänge gleich sind, und zum anderen müssen die Widerstände bei einer Toleranz entsprechend der gewünschten Auflösung genau im Verhältnis 2:1 abgestimmt sein, was bei hohen Auflösungen schwer zu erzielen ist. Außerdem steigt die Verlustleistung an den einzelnen Widerständen vom LSB zum MSB umgekehrt proportional zum Widerstand. Das bedeutet, dass bei einem 10-Bit-Wandler der MSB-Widerstand eine 1000-fach höhere Verlustleistung aufweist, als der LSB-Widerstand. Eine Verbesserung dieser nachteiligen Eigenschaften wird durch einen DA-Wandler mit R-2R-Widerstandsleiter erreicht.

Widerstandsleiter

Das zweite Prinzip zur DA-Wandlung, benötigt nur zwei verschiedene Widerstandswerte und ist deshalb wesentlich leichter zu verwirklichen. Bei diesem Verfahren werden die Ausgänge eines Registers mit einer Widerstandsleiter verbunden, deren "Sprossen" genau doppelt so hohe Werte aufweisen wie die Widerstände entlang des "Holmes".

DA-Wandler mit Widerstandsleiter

Diese Art der DA-Wandlung wird in den meisten kommerziell verfügbaren DA-Wandlern eingesetzt, da eine solche Widerstandsleiter leicht durch Abgleich mit Lasern hergestellt werden kann, zumal der Absolutwert der Widerstände belanglos ist, solange das Verhältnis genau 2:1 beträgt.

Multiplizierende DA-Wandler

Bei der vorhergehenden Besprechung der Prinzipien zur DA-Wandlung wurde angenommen, dass die Ausgangsspannung der Registerausgänge bzw. Vcc für die Schalter konstant ist. Die erzielbare analoge Spannung des DA-Wandlers hängt von den Spannungen der Zustände LOW und HIGH ab, und muss notwendigerweise zwischen diesen Extremwerten liegen (typisch 0 und 5 Volt für CMOS-Bausteine).

Durch eine Änderung der Schaltung der Ausgangsstufen des Registers kann man die Spannung des HIGH-Zustandes variabel machen (Referenzspannung), wodurch sich ein multiplizierender DA-Wandler ergibt, da die analoge Ausgangsspannung des DA-Wandlers gleich dem Produkt aus der Referenzspannung und dem angelegten digitalen Wert ist. Falls die Referenzspannung sowohl negative als auch positive Werte annehmen darf, spricht man von einem Vierquadranten-, sonst von einem Zweiquadranten-Multiplizierer.

Die folgende Tabelle gibt eine kurze Übersicht über kommerziell erhältliche DA-Wandler.

Typ | Auflösung [Bit] | ts[ms] | Pv[mW] | Bemerkungen
HDAC10180A | 8 | 0.005 | 1000 | ECL-Eingänge
AD9700 | 8 | 0.01 | 650 | Video-DAC
DAC8408 | 8 | 0.25 | 5 | lesbares Datenregister
DAC801 | 8 | 0.1 | 33 | multiplizierend
DAC8800 | 8 | 2.0 | 12 | 8-fach-DAC, seriell
DAC8228 | 8 | 5.0 | 100 | single supply
AD7525 | 8 | 5.0 | 150 | 4-fach-DAC
AD561 | 10 | 0.25 | 300 | Stromausgang
PM7533 | 10 | 0.6 | 30 | multiplizierend
DAC-HF12B | 12 | 0.05 | 800 | sehr schnell
DAC394-12 | 12 | 0.05 | 1000 | eingebaute Referenz
DAC681 | 12 | 0.4 | 450 | Stromausgang
DAC1220 | 12 | 0.5 | 10 | multiplizierend
DAC312 | 12 | 0.5 |  | Stromausgang
AD567 | 12 | 0.5 | 300 | uP-Interface
HDAC7541Z | 12 | 0.5 | 60 | multiplizierend
PM7645 | 12 | 1.0 | 10 | 8-Bit-Businterface
DAC1210 | 12 | 1.0 | 25 | 4-Quadranten-Multiplizierer
DAC1201 | 12 | 7.0 | 700 | eingebaute Referenz
AD394 | 12 | 15.0 | 570 | 4-fach-DAC
DAC-HA14B | 14 | 7.0 | 0.005 | CMOS, multiplizierend
ICL7134 | 14 | 0.9 | 10 | CMOS, multiplizierend
HDAC52160 | 16 | 0.15 | 450 | eingebaute Referenz
DAC708 | 16 | 0.35 | 500 | eingebaute Referenz
ICL7145 | 16 | 3.0 | 6 | multiplizierend
DAC701 | 16 | 8.0 | 800 | eingebaute Referenz
DAC-HR16B | 16 | 1.0 | 1000 | geheizte Referenz
AD7118 | 17 | 1.8 | 15 | logarithmische Kennlinie
DAC1146 | 18 | 6 | 950 | eingebaute Referenz
DAC377-18 | 18 | 20.0 | 225 | interne Referenz
res.... Auflösung ts.... Einschwingzeit Pv.... Verlustleistung

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Analog-Digital-Wandler [image] Übersicht
Index
Siehe auch: Sample & Hold, Datencodes bei AD- und DA-Wandlern, Datenerfassungssysteme, AD-Interface - Grundlagen, Spannungs-Frequenz-Wandler, Experiment: Digitalvoltmeter

Analog-Digital-Wandler

Alle Methoden ein analoges Signal in ein digitales umzuwandeln, beruhen entweder auf einem Spannungsvergleich oder auf einem Zeitvergleich. Man unterscheidet nach ihrem Verhalten zwei Typen von AD-Wandlern:

  • integrierende Wandler
  • abtastende Wandler

    • Integrierende Wandler bilden über das Messintervall den Mittelwert der Eingangsspannung. Diese Eigenschaft bedingt, dass sich das Eingangssignal während der Messphase ändern darf, ohne dass es zu Verfälschungen des Messwertes kommt. Anders ist die Situation bei abtastenden Wandlern. Diese benötigen während des Wandlungsvorgangs eine konstante Eingangsspannung. Ändert sich die Spannung während der Konversion, so kann das zu total falschen Ergebnissen führen. Um die Eingangsspannung während einer Konversion quasi einzufrieren, verwendet man spezielle Schaltkreise, sog. Sample/Hold-Verstärker, die zwischen Eingangsverstärker und ADC geschaltet werden.

    In der folgenden Tabelle ist eine Auswahl von kommerziell erhältlichen AD-Wandlern zusammengestellt.

    Typ | Hersteller | r [Bit] | tc [ms] | Pv [mW] | Prinzip
    HADC77100 | SPT | 8 | 0.007 | 1930 | flash
    AD9000 | AD | 6 | 0.010 | 800 | flash
    CX20116 | Sony | 6 | 0.010 | 1200 | flash
    Am6606 | AMD | 6 | 0.010 | 1200 | flash
    AD5010 | AD | 6 | 0.010 | 450 | flash
    SDA8010 | Siemens | 8 | 0.010 | 1400 | flash
    F74F500 | Fairchild | 6 | 0.020 | 700 | flash
    HADC77600 | SPT | 10 | 0.020 | 4700 | flash
    CX20204 | Sony | 10 | 0.020 | 1100 | cascade
    TDC1025 | TRW | 8 | 0.020 | 3000 | flash
    TDC1029 | TRW | 6 | 0.020 | 1500 | flash
    TDC1048 | TRW | 8 | 0.050 | 1000 | flash
    MP7684 | MPS | 8 | 0.050 | 250 | flash
    EF8308 | Thomson | 8 | 0.050 | 400 | flash
    CX20200 | Sony | 10 | 0.050 | 360 | cascade
    TDC1019 | TRW | 9 | 0.060 | 4000 | flash
    CA3300 | RCA | 6 | 0.060 | 100 | flash
    CA3308 | RCA | 8 | 0.060 | 150 | flash
    MP7683 | MPS | 8 | 0.100 | 75 | cascade
    TDC1001 | TRW | 8 | 0.400 | 400 | SAR
    ADC-816 | AD | 10 | 0.800 | 3400 | SAR
    Am6108 | AMD | 8 | 1.0 | 600 | SAR
    ADC820 | NS | 8 | 1.0 | 35 | cascade
    MP7685 | MPS | 11 | 1.0 | 200 | cascade
    ADC803 | BB | 12 | 1.5 | 2000 | SAR
    AD579 | AD | 10 | 1.8 | 775 | SAR
    ADC810 | Datel | 12 | 2.0 | 2000 | SAR
    AD578 | AD | 12 | 3.0 | 875 | SAR
    Am6112 | AMD | 12 | 3.0 | 500 | SAR
    HADC78160 | SPT | 16 | 4.0 | 700 | SAR
    AD7572 | AD | 12 | 5.0 | 135 | SAR
    AD5240 | AD | 12 | 5.0 | 775 | SAR
    ADC847 | Datel | 8 | 9.0 | 125 | SAR
    HI5712 | HS | 12 | 10.0 | 1300 | SAR
    ADC84 | BB | 12 | 10.0 | 1500 | SAR
    ZN427 | Ferranti | 8 | 10.0 | 125 | SAR
    ADC5210 | Datel | 12 | 12.0 | 700 | SAR
    HADC674 | SPT | 12 | 15.0 | 150 | SAR
    ADC76 | BB | 16 | 15.0 | 1500 | SAR
    AD7574 | AD | 8 | 15.0 | 30 | SAR
    ZN432 | Ferranti | 10 | 15.0 | 350 | SAR
    AD376 | AD | 16 | 17.0 | 1100 | SAR
    AD571 | AD | 10 | 25.0 | 200 | SAR
    AD572 | AD | 12 | 25.0 | 900 | SAR
    MP7570 | MPS | 10 | 40.0 | 40 | SAR
    ADC71 | AD | 14 | 40.0 | 850 | SAR
    ADC1210 | NS | 12 | 100.0 | 200 | SAR
    HS9516 | HS | 16 | 100.0 | 900 | SAR
    AD651 AD - - 270 synch. VCO
    ICL7136 | Intersil | 12 | 300 ms | 0.9 | dual slope
    ICL7109 | Intersil | 12 | 10 ms | 10 | dual slope
    ICL7104-16 | Intersil | 16 | 330 ms | 10 | dual slope
    r .... Auflösung; tc .... Konversionszeit; Pv .... Verlustleistung; AD .... Analog Devices;
    BB .... Burr Brown; HS .... Harris Semiconductors; MPS .... Micro Power Systems;
    NS .... National Semiconductor; SPT .... Signal Processing Technologies;
    SAR .... successive approximation register;

    Last Update: 2005-Okt-17


Home [image] Digital-Analog-Interfaces [image] Analog-Digital-Wandler [image] Spannungs-Frequenz-Wandler
Index
Siehe auch: Experiment: Aufbau eines UF-Wandlers, Analog-Digital-Wandler

Spannungs-Frequenz-Wandler

Der Spannungs-Frequenz-Wandler (UF-Wandler) beruht auf folgendem Prinzip: Es wird die Eingangsspannung Uin durch einen spannungsgesteuerten Oszillator (VCO) in eine periodische Schwingung umgewandelt, deren Frequenz zur Eingangsspannung proportional ist. Das Ausgangssignal des Oszillators wird nun über ein UND-Gatter mit dem Signal einer Zeitbasis verknüpft und die resultierenden Impulse werden gezählt. Dieser Typ eines AD-Wandlers ist ein integrierender Wandler, dessen Auflösung auf einfache Weise durch Anpassung der Torzeit des UND-Gatters gesteuert werden kann. Bei entsprechend langen Torzeiten erreicht man Auflösungen von über 20 Bit. Es sei jedoch darauf hingewiesen, dass trotz der hohen Auflösung die Linearität des UF-Wandlers auf typisch 12 bis 14 Bit begrenzt ist.

AD-Wandler mit VCO und Zähler

Die Genauigkeit eines UF-Wandlers hängt unter anderem auch von der Stabilität des zeitbestimmenden Kondensators ab. Auf dessen Eigenschaften ist besonders bei der Konstruktion von hochauflösenden UF-Wandlern zu achten. Besser ist es jedoch, einen synchronen UF-Wandler zu verwenden, der seine Ausgangsfrequenz von einer externen Frequenz ableitet (vergleiche auch das zugehörige Experiment).

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Analog-Digital-Wandler [image] Dual-Slope-Wandler
Index
Siehe auch: Flash-Konverter, Sukzessive Approximation

Dual-Slope-Wandler

Der Dual-Slope-Wandler führt die AD-Wandlung durch einen Zeit- bzw. Ladungsvergleich durch (Prinzipschaltung siehe unten). Die Messung erfolgt in zwei Phasen: in der ersten Phase wird der Kondensator C mit einem Referenzstrom aufgeladen. Der Ladevorgang wird nach einer bestimmten, genau definierten Zeit (z.B. 20 ms) abgebrochen, und der Kondensator mit einem Strom, der der zu messenden Spannung proportional ist, wieder entladen. Der Quotient aus der Zeit für die Messung der unbekannten Spannung tin und der Referenzzeit tref ist gleich dem Quotienten aus der unbekannten Spannung Uin und der Referenzspannung Uref.

tin/tref = Uin/Uref

Da tref und Uref bekannt sind, lässt sich damit Uin aus tin berechnen.

Der Dual-Slope-Wandler ist relativ langsam (typ. 20 ms pro Umwandlung) und wird vor allem in Digitalvoltmetern eingesetzt. Durch das Verfahren heben sich Messfehler, die durch Bauteiltoleranzen verursacht werden auf, wodurch der Dual-Slope-Konverter gute Auflösung und Linearität (16 Bit und mehr) bietet. Trotzdem ist er preisgünstig und außerdem leicht anzuwenden, da er aufgrund seiner integrierenden Eigenschaften Artefakte bei der Messung unterdrückt.
Dual Slope Converter

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Analog-Digital-Wandler [image] Sukzessive Approximation
Index
Siehe auch: Dual-Slope-Wandler, Flash-Konverter

Sukzessive Approximation

AD-Wandler, die nach dem Prinzip der sukzessiven Approximation arbeiten, funktionieren folgendermaßen: Das Messsignal Uin wird in n Schritten digitalisiert, wobei die Genauigkeit bei jedem Schritt um 1 Bit steigt. Bei jedem Schritt wird die Eingangsspannung mit einer Referenzspannung Uref verglichen, die durch einen DA-Wandler erzeugt wird. Je nachdem, ob Uin größer oder kleiner als die Spannung des DA-Wandlers ist, wird die Referenzspannung im nächsten Schritt um die halbe Schrittweite des letzten Schritts nach oben oder nach unten verändert. Dadurch nähert sich die Spannung des DA-Wandlers immer mehr der Eingangsspannung an. Zum Schluss, wenn das letzte Bit des DA-Wandlers gesetzt ist, entspricht der Wert des DACs der Eingangsspannung.

AD-Wandler, Sukzessive Approximation

Die Genauigkeit eines ADCs, der nach diesem Prinzip arbeitet, wird durch die Auflösung des DA-Wandlers und durch die Genauigkeit des Komparators bestimmt. Typischerweise werden 12 bis 14 Bit erreicht. Die Wandlungsgeschwindigkeit ist deutlich höher als bei integrierenden Wandlern (typ. 10 ms).

Dieser AD-Wandler braucht für die Zeit der Wandlung ein konstantes Eingangssignal, sonst sinkt seine Auflösung. Es ist daher die Verwendung einer S&H-Schaltung notwendig.

Das Prinzip der sukzessiven Approximation eignet sich außerdem hervorragend zur Nachbildung per Software. Dazu benötigt man einen vom Mikroprozessor angesteuerten DA-Wandler und einen Komparator, dessen Ergebnis vom Mikroprozessor gelesen werden kann. Ein Experiment, indem ein AD-Wandler nach dem Prinzip der sukzessiven Approximation sowohl aufgebaut, als auch per Software nachgebildet wird, ist im zweiten Band dieses Buches beschrieben.

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Analog-Digital-Wandler [image] Flash-Konverter
Index
Siehe auch: Dual-Slope-Wandler, Sukzessive Approximation

Flash-Konverter

Mit dem Flash-Konverter werden die kürzesten Wandlungszeiten (typ. 50 ns) erreicht. Er arbeitet parallel, indem das Messsignal Uin gleichzeitig n Komparatoren zugeführt wird, die eine in n Stufen abgestufte Referenzspannung erhalten. Aus den Vergleichsergebnissen der Komparatoren ermittelt ein Prioritäts-Encoder die binäre Repräsentation des Eingangssignals. Der Flash-Wandler benötigt für die Umsetzung bei n Bit Genauigkeit 2n-1 Komparatoren, was einerseits die Auflösung beschränkt (typ. 8 Bit) und andererseits die Verlustleistung in die Höhe treibt.

Flash-AD-Wandler
Flash-AD-Wandler

Aufgrund der aufwendigen Technik ist der Flash-Konverter relativ teuer. Er wird vor allem zur Erfassung von sehr schnellen Vorgängen eingesetzt (z.B. in Digitalspeicheroszilloskopen).

Last Update: 2005-Okt-08


Home [image] Digital-Analog-Interfaces [image] Datenerfassungssysteme
Index
Siehe auch: Analog-Digital-Wandler, Analoger Multiplexer, Konzept der Operationsverstärker

Datenerfassungssysteme

Nachdem auf den vorhergehenden Seiten alle Teilkomponenten eines Datenerfassungssystems zur Messung analoger Signale besprochen worden sind, soll nun noch das Bild eines Komplettsystems vermittelt werden. Obwohl es viele verschiedene Implementationsmöglichkeiten von solchen Systemen gibt, weisen sie doch alle in etwa dieselbe Struktur auf.
Grundbausteine eines analogen Datenerfassungssystem
Jeder der Sensoren, der eine dem interessierenden Messsignal proportionale Spannung liefert, ist jeweils an einen Vorverstärker angeschlossen, der das Signal verstärken (oder abschwächen) soll, um es auf einen standardisierten Pegel zu bringen (vorzugsweise entsprechend dem Eingangsspannungsbereich des AD-Wandlers). Nach den Vorverstärkern werden die Signale über einen analogen Multiplexer dem AD-Wandler zugeführt, dort digitalisiert und in digitaler Form an den ansteuernden Mikroprozessor weitergegeben.

Beim Aufbau eines Datenerfassungssystems sind einige wichtige Eigenschaften des Signals in Zusammenhang mit den Anforderungen an Messgenauigkeit, und zeitliche Auflösung zu berücksichtigen.

Die Eingangsverstärker sind so zu bemessen, dass das Eingangssignal alle folgenden Stufen voll aussteuert aber nicht übersteuert. Bei Signalen mit einer sehr großen Dynamik (Dynamik des Eingangssignals größer als die Auflösung des AD-Wandlers) ist unter Umständen ein programmierbarer Verstärker (PGA) vorzusehen, der es dem Mikroprozessor erlaubt, die Verstärkung der Größe des Eingangssignals anzupassen. Dadurch können mit derselben Messanordnung sowohl kleine als auch große Signale gemessen werden. PGAs mit binärer Abstufung der Verstärkung sind sehr gut für diese Aufgabe geeignet.

Neben der Anpassung der Amplitude sollte in der Eingangsverstärkerstufe auch sichergestellt werden, dass die maximal erlaubte Signalfrequenz nicht überschritten wird, um Aliasing-Effekte zu verhindern. Oftmals kann man den Eingangsverstärker gleichzeitig auch als Tiefpass-Filter beschalten, so dass die unerwünschten hochfrequenten Signalanteile ausgefiltert werden. Das Filter ist so zu bemessen, dass alle Frequenzanteile oberhalb der Nykvist-Frequenz ausgefiltert werden.

Vom Eingangsverstärker gelangt das Signal dann in den Multiplexer, der zwischen mehreren Kanälen umschalten kann. Der Multiplexer kann entweder mit Relais oder meist aber mit analogen Schaltern aufgebaut sein. Relais bieten den Vorteil, dass die Eingangsspannung beliebige Werte annehmen kann, sind jedoch nur für gelegentliches Umschalten zu gebrauchen, da der Schaltvorgang erstens langsam vor sich geht und zweitens die Kontakteigenschaften verändert. Für die meisten Anwendungen wird man analoge Multiplexer verwenden, die zuverlässig und schnell schalten.

Nach dem Multiplexer wird das Signal auf eine Sample&Hold-Schaltung und weiter zum AD-Wandler geleitet. Die Auswahl der Sample&Hold-Schaltung hängt stark von den Anforderungen des AD-Wandlers ab (Konversionsgeschwindigkeit, Genauigkeit, Eingangswiderstand, etc.) und soll an dieser Stelle nicht generell erläutert werden. Viele Hersteller von AD-Wandlern geben jedoch Typen von dazu passenden S&H-Bausteinen an.

Die Auswahl des AD-Wandlers geschieht meist nach drei Kriterien: Konversionszeit, Auflösung und Preis, wobei Konversionszeit und Auflösung meist ohnehin durch die Art des Problems fix vorgegeben sind.

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Linearisierung
Index
Siehe auch: Linearisierung mittels Eichtabelle, Linearisierung mit nichtlinearem Netzwerk

Linearisierung

Die meisten zur Zeit verfügbaren Sensoren erzeugen aus dem eigentlichen Messsignal (z.B. Temperatur, Druck etc.) eine Spannung, die meist in einem nichtlinearen Zusammenhang zum Messsignal steht. Die Kennlinie der meisten Sensoren ist meist auch analytisch nicht beschrieben, sondern als empirische Kurve mit einem bestimmten Streubereich angegeben. Da man für die Interpretation des Sensorsignals jedoch eine zum Messsignal proportionale Ausgangsgröße benötigt, ist es notwendig, die Kennlinie eines Sensors zu linearisieren.

Die Art und der Aufwand der Linearisierung hängen von der Nichtlinearität und der gewünschten Genauigkeit der Messung ab. Im folgenden sollen zwei Verfahren der Linearisierung beschrieben werden, eine traditionelle Methode, die mit analoger Schaltungstechnik arbeitet und eine zweite, die mit Mikroprozessoren leicht ausgeführt werden kann.

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Linearisierung [image] Linearisierung mit nichtlinearem Netzwerk
Index
Siehe auch: Linearisierung mittels Eichtabelle, Linearisierung

Linearisierung mit nichtlinearem Netzwerk

Bei der Linearisierung mit Hilfe eines nichtlinearen Netzwerkes wird das analoge Sensorsignal bearbeitet. Dazu wird eine analoge Schaltung konstruiert, die die entgegengesetzte Kennlinie wie der Sensor besitzt. Die Kombination von Netzwerk und Sensor erzeugt ein annähernd lineares Ausgangssignal. Das nichtlineare Netzwerk baut man am einfachsten mit Hilfe von Zenerdioden und Widerständen auf. Dabei werden die Werte der Zenerdioden so gewählt, dass die Zenerspannungen als Stützpunkte der zu erzeugenden Kennlinie dienen. Die in Serie geschalteten Widerstände müssen so gewählt werden, dass sich der gewünschte Kurvenverlauf ergibt.

Nichtlineares Netzwerk zur Linearisierung von Kennlinien

Die Vorteile einer solchen Linearisierung liegen vor allem in der sehr billigen Realisierung des Netzwerkes, wobei für geringe Ansprüche an die Genauigkeit der Messung oft schon wenige Bauteile genügen. Bei höheren Anforderungen an die Genauigkeit treten jedoch sehr bald die Nachteile dieser Methode in den Vordergrund: Die Schaltung zeigt meist eine ungewünschte Temperaturabhängigkeit und muss zudem relativ aufwendig abgeglichen werden. Aus diesen Gründen wird man eine Linearisierung mit nichtlinearen Netzwerken überall dort einsetzen, wo eine geringe Genauigkeit möglich ist und die Kosten niedrig gehalten werden sollen (z.B. Temperaturanzeige des Kühlwassers im Auto).

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Linearisierung [image] Linearisierung mittels Eichtabelle
Index
Siehe auch: Linearisierung, Linearisierung mit nichtlinearem Netzwerk

Linearisierung mittels Eichtabelle

Im Gegensatz zur ersten Methode zur Linearisierung wird bei dieser Methode die Linearisierung erst nach der Digitalisierung vorgenommen. Bei modernen Anwendungen von Sensoren ist im auswertenden Gerät meist ohnehin ein Mikroprozessor vorhanden, der dann auch für die Linearisierung der Sensorkennlinie zum Einsatz gebracht werden kann. Das Prinzip dieser Linearisierungsmethode beruht auf einer gespeicherten Eichtabelle, die die Kennlinie des Sensors enthält. Wird nun der Rohwert des Sensors gemessen, so sucht der Mikroprozessor in der Eichtabelle den entsprechenden wahren Wert des Messsignals.

Die Vorteile dieser Methode liegen klar auf der Hand: Eine hohe Genauigkeit ist leicht erzielbar, es können beliebige Sensorkennlinien linearisiert werden und die Eichkurven von neuen Sensoren können einfach und bequem erstellt werden (Abgleich entfällt). Zudem können mit Eichtabellen zusätzlich auftretende Fehler, wie z.B. Offsetfehler ohne extra Aufwand korrigiert werden. Die Nachteile dieser Methode liegen in der notwendigen Anwendung eines Mikroprozessors, der (für Controller) einen relativ großen Speicher benötigt, da die Eichtabellen, vor allem bei höherer Genauigkeit speicherintensiv sind. Dies kann jedoch durch Interpolationsmethoden verbessert werden. Ein schwerer Nachteil besteht außerdem darin, dass bei sehr flach verlaufenden Kennlinienstücken, die Genauigkeit des Ausgangssignals sinkt, da in diesem Fall ein LSB des digitalen Wertes einem großen Messbereich entspricht. Diese Situation kann nur durch Anwendung eines (teuren) hochauflösenden AD-Wandlers behoben werden.

Last Update: 2005-Okt-08


Thermoelement

Thermoelemente werden sehr häufig als Temperatursensoren verwendet, da sie klein und robust sind. Obwohl sie etwas schwierig in der Anwendung sind, werden sie doch in vielen Applikationen verwendet, da sie relativ billig sind.

Das Prinzip eines Thermoelements beruht auf dem Seebeck-Effekt: Die Zahl der freien Elektronen in einem Metall hängt sowohl von der Art des Metalls als auch von dessen Temperatur ab. Falls zwei ungleiche Metalle miteinander in Kontakt kommen, bildet sich an der Kontaktstelle eine Potentialdifferenz aus, deren Höhe vom Unterschied der Zahl der freien Elektronen in beiden Metallen abhängt. Die Potentialdifferenz bewegt sich üblicherweise im mV-Bereich.

Der Tatsache, dass Thermospannungen an jeder Kontaktstelle von beliebigen verschiedenen Metallen auftreten, muss besonderes Augenmerk geschenkt werden, wenn man ein Messsystem mit Thermoelementen aufbaut. Der einfachste Weg den unerwünschten Einfluss von Thermospannungen zu unterdrücken besteht im Konstanthalten der Temperatur aller Kontakte im Messkreis (ausgenommen der Kontakt, der zur Messung dient). Da dies jedoch meist nur umständlich oder aufwendig zu erreichen ist, verwendet man üblicherweise eine spezielle Elektronik, die die sogenannte Kaltstellen-Kompensation durchführt. Dabei wird der Messspannung eine der Umwelttemperatur entsprechende entgegengesetzt gepolte Spannung addiert.

Thermoelemente haben typischerweise einen Ausgangspegel von wenigen Millivolt und eine Empfindlichkeit von ca. 10 uV/øC. Diese niedrigen Spannungen benötigen spezielle Maßnahmen, um sie auf einen Pegel zu bringen, der von AD-Wandlern oder anderen Messgeräten weiterverarbeitet werden kann. Die Kennlinie eines Thermoelements ist nichtlinear.

Die unten stehende Tabelle führt ein paar allgemein gebräuchliche Thermopaare an.

Typ | Zusammensetzung | Temperaturbereich dT [°C] | Spannungshub dU [V]
B | PtRh-PtRh | 40 - 1800 | 13.6
E | Chromel-Constantan | 0 - 980 | 75.0
J | Iron-Constantan | -180 - 760 | 49.7
K | Ni-CrNi | -180 - 1300 | 57.9
L | Fe-CuNi | -180 - 850 | 57.1
R | Pt-Pt,13%Rh | 0 - 1600 | 18.8
S | Pt-Pt,10%Rh | 0 - 1600 | 16.7
T | Cu-Constantan | -180 - 350 | 23.0
U | Cu-CuNi | -180 - 550 | 36.1

Last Update: 2005-Okt-08


Widerstandsthermometer

Widerstandsthermometer basieren auf dem Prinzip, dass Metalle ihren spezifischen Widerstand mit der Temperatur ändern. Dieser Typ von Thermofühlern ermöglicht eine sehr große Auflösung der Temperatur (0.001 K) innerhalb eines weiten Betriebsbereichs.

Das am meisten verwendete Widerstandsthermometer ist das Pt-100-Element, das aus einem dünnen Platindraht besteht, der in einen Stahlmantel mit einer Keramikmasse eingegossen ist. Das Pt-100 besitzt bei 0°C einen Widerstand von 100 W und hat eine Empfindlichkeit von ca. 0.4 %/K. Die Genauigkeit eines Pt-100-Elements hängt von der Reinheit des Platins ab. Bedingt durch die Verwendung von Platin, sind Pt-100 Elemente relativ teuer.

Last Update: 2005-Nov-03


Thermistor

Der Thermistor besteht aus einem Oxid eines Übergangsmetalls. Er verhält sich wie ein Widerstand mit einem starken negativen Temperaturkoeffizienten. Obwohl der Thermistor die höchste Empfindlichkeit (ca. 4 %/K bei 25 °C) aller Temperatursensoren aufweist, hat er doch ein paar entscheidende Nachteile, die seinen Einsatz beschränken. Zum einen stellt der kleine Arbeitstemperaturbereich von 0 bis 120 °C eine starke Beschränkung der Einsatzmöglichkeiten dar und zum anderen ist die Kennlinie eines Thermistors hyperbolisch und damit stark nichtlinear. Diese Nichtlinearität erfordert daher eine aufwendige Linearisierung, was nicht nur teuer, sondern auch fehleranfällig ist.

Der Thermistor wird deshalb nur dort eingesetzt, wo die Genauigkeit der Temperaturmessung nicht von entscheidender Bedeutung ist (z.B. Kühlwassertemperatur im Auto).

Last Update: 2005-Okt-08


Halbleiter

Die Durchlassspannung eines pn-Übergangs wie er in jeder Diode vorkommt, hat einen Temperaturkoeffizienten, der nur vom Strom durch den Übergang aber nicht von der Temperatur abhängt. Dadurch haben Sensoren, die die Temperatur mit Hilfe eines pn-Übergangs messen, eine extrem lineare Kennlinie über den gesamten Arbeitsbereich. Ein Silizium-pn-Übergang hat eine Empfindlichkeit von ca. -2 mV/K. Der Arbeitsbereich ist relativ klein, typisch zwischen -50 °C und +150 °C.

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Licht [image] Photowiderstand
Index
Siehe auch: Experiment: Aufbau einer Lichtschranke, Fototransistor, Spezielle Widerstände

Fotowiderstand

Fotowiderstände bestehen aus Halbleitern ohne Sperrschicht. Das verwendete Material hängt von der gewünschten spektralen Empfindlichkeit des Fotowiderstands ab. Für sichtbares Licht wird Cadmiumsulfid (CdS, maximale Empfindlichkeit bei 520 nm) oder Cadmiumselenid (CdSe, maximale Empfindlichkeit bei 730 nm) verwendet. Der Widerstand eines solchen Bauelements verhält sich bei konstanter Beleuchtungsstärke wie ein Ohmscher Widerstand, das heißt, der Widerstand hängt nicht von der angelegten Spannung ab. Jedoch tritt bei Fotowiderständen ein Memory-Effekt auf: Der für eine bestimmte Beleuchtungsstärke gemessene Widerstand hängt innerhalb gewisser Grenzen von der Vorgeschichte des Bauelements ab. Der Zusammenhang zwischen Widerstand und Beleuchtungsstärke ist in erster Näherung exponentiell, wobei natürlich bei den Extremwerten (keine oder sehr starke Beleuchtung) eine Abweichung vom exponentiellen Verhalten auftritt. Die unten stehende Abbildung zeigt eine typische Kennlinie eines Fotowiderstands.

Der Widerstand eines Fotowiderstandes ist bei niedrigen Beleuchtungsstärken stark von der Temperatur abhängig und kann sich bei 0.1 lx bis zu einen Faktor fünf über einen Temperaturbereich von 150 Grad ändern. Ein Fotowiderstand ist ein langsames Bauelement. Er benötigt zum Einstellen auf einen stationären Wert je nach Beleuchtungsstärke Millisekunden bis zu einigen Sekunden. All diese Eigenschaften (Memory-Effekt, starke Temperaturabhängigkeit, unterschiedliche Einstellzeit) machen den Fotowiderstand zu einem Bauelement, das nur unter ganz bestimmten Bedingungen eingesetzt wird, wenn es auf hohe Genauigkeit und Reproduzierbarkeit nicht ankommt.

Last Update: 2005-Okt-29


Home [image] Sensoren [image] Licht [image] Photodiode
Index
Siehe auch: Leuchtdioden, Dioden, Experiment: Aufbau einer Lichtschranke, Fotomultiplier, Fototransistor

Fotodiode

Der Sperrstrom einer Diode ist abhängig von der Beleuchtungsstärke. Dieser Effekt wird bei der Fotodiode ausgenutzt. Die folgende Abbildung zeigt das Kennlinienfeld einer Fotodiode. Man sieht, dass der Sperrstrom linear von der Beleuchtungsstärke abhängt und außerdem ein Kurzschlussstrom fließt, der ebenfalls linear von der Beleuchtungsstärke abhängt.

Fotodioden haben eine sehr schnelle Einstellzeit (typ. 100 ns), die jedoch von der angelegten Sperrspannung abhängt. Bei höherer Sperrspannung wird die Kapazität der Sperrschicht geringer und die Ansprechzeit der Diode kürzer. Die spektrale Empfindlichkeit einer Fotodiode hängt vom verwendeten Halbleiter ab, das Optimum liegt für Siliziumdioden bei etwa 900 nm, für Germaniumdioden bei etwa 1500 nm. Erhöht man die angelegte Sperrspannung einer Fotodiode bis nahe an die Durchbruchsspannung, so tritt aufgrund des durch Photonen ausgelösten Lawinendurchbruchs eine Verstärkung des Signals auf. Diesen Effekt macht man sich in den sogenannten 'Avalanche'-Fotodioden zunutze.

Last Update: 2005-Okt-29


Home [image] Sensoren [image] Licht [image] Phototransistor
Index
Siehe auch: Experiment: Aufbau einer Lichtschranke, Fotodiode, Fotomultiplier, Fotowiderstand, Transistoren

Fototransistor

Der Fototransistor hat als Kollektor-Basis-Strecke eine Fotodiode integriert, die den Basisstrom des Transistors erzeugt. Der Basisstrom wird mit der Stromverstärkung des Transistors multipliziert und steht in verstärkter Form am Emitter zur Verfügung. Der Basisanschluss des Fototransistors wird manchmal weggelassen. Dadurch kann der Fototransistor in ein billiges LED-Gehäuse eingegossen werden. Die Grenzfrequenz eines Fototransistors liegt mit etwa 250 kHz wesentlich niedriger als die einer Fotodiode. Bei Foto-Darlington-Transistoren liegt diese nochmals um einen Faktor zehn niedriger:

Anstiegszeiten zweier typischer Fototransistoren in Abhängigkeit vom Lastwiderstand.

Die spektrale Empfindlichkeit eines Fototransistors hängt unter anderem auch vom Gehäuse ab, in das er eingebaut ist. Infrarot-Transistoren sind meist in ein undurchsichtiges Epoxy-Gehäuse eingegossen, da das Epoxy-Harz zwar sichtbares Licht blockiert, IR aber durchlässt. Die folgende Abbildung zeigt die Emfindlichkeit eines typischen Fototransistors in Abhängigkeit der Wellenlänge des eingestrahlten Lichts.

Spektrale Empfindlichkeit eines Fototransistors.

Last Update: 2005-Okt-29


Fotomultiplier

Der Fotomultiplier ist einer der empfindlichsten Sensoren für Licht. Mit ihm können sogar einzelne Photonen detektiert werden. Das Verstärkungsprinzip eines Fotomultipliers beruht auf der lawinenartigen Vervielfachung von Elektronen an mehreren vorgespannten Elektroden.

Das einfallende Licht trifft auf eine Fotokathode und setzt aus dieser Fotokathode Elektronen frei. Die Elektronen werden nun von der ersten Elektrode (Dynode) angezogen und beschleunigt und setzen beim Aufprall auf die Dynode weitere Elektronen frei. Diese werden nun von der nächsten Dynode angezogen und so weiter. Bei jedem Aufprall erzeugt im Schnitt jedes Elektron zwei neue Elektronen, so dass sich ein exponentielles Ansteigen der Elektronenzahl ergibt. Bei 20 Dynoden und durchschnittlich zwei neuen Elektronen pro Aufprall ergibt sich so eine Verstärkung von 106 , das heißt, dass ein einzelnes Photon 106 Elektronen erzeugt. Diese 106 Elektronen entsprechen einer Ladung von 0.16 pCb. Angenommen es treffen 1000 Lichtquanten pro Sekunde auf den Fotomultiplier, so entsteht am Ausgang des Multipliers ein Strom von 160 pA. Dieser sehr niedrige Strom muss natürlich mit Verstärkern mit einem sehr hohen Eingangswiderstand (z.B. FET-Opamp) weiter verstärkt werden, um von herkömmlichen Messinstrumenten registriert werden zu können.

Hinweis: Am VIAS Webserver wird ein Programm zur Simulation eines Sekundärelektronenvervielfachers angeboten.

Last Update: 2005-Okt-29


Dehnungsmessstreifen

Der Dehnungsmessstreifen (DMS) basiert auf der Tatsache, dass fast alle Materialien ihren elektrischen Widerstand ändern, wenn sie gedehnt werden. Dehnungsmessstreifen werden durch Aufbringen eines dünnen metallischen Films auf eine Folie erzeugt. Dieser Film wird in Form eines Mäanders aufgebracht, um die Wirkung zu verstärken.

Dehnungsmessstreifen haben einen niedrigen Widerstand (typ. zwischen 120 und 350 W), was bedeutet, dass sie eine beträchtliche Leistung zur Messung benötigen. Da sich die Änderung des Widerstands in sehr kleinen Bereichen bewegt (typ. 0.1 % über den ganzen Arbeitsbereich), ist es notwendig eine aufwendige Elektronik zur Messung des Signals zu verwenden.

Dehnungsmessstreifen werden immer in Brückenschaltung betrieben, wobei eventuell ein zweiter gleicher Dehnungsmessstreifen in den anderen Brückenzweig geschaltet wird (ohne diesen der zu messenden Kraft auszusetzen), um die Temperaturabhängigkeit der Schaltung zu kompensieren.

Dehnungsmessstreifen bestehen aus Halbleitermaterial, da diese einen höhere Empfindlichkeit haben als DMS aus Metall (bis zu Faktor 30). Die Temperaturstabilität von Halbleiter-DMS ist jedoch schlechter.

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Kraft und Druck [image] Piezoelektrische Sensoren
Index
Siehe auch: Dehnungsmessstreifen, Ionisationsmanometer, Pirani Gauge

Piezoelektrische Sensoren

Piezoelektrische Kraftsensoren nützen die Tatsache aus, dass bei bestimmten Materialien Ladungsänderungen an deren Oberflächen auftreten, wenn sie einer externen Kraft ausgesetzt werden. Da piezoelektrische Sensoren eine sehr hohe Ausgangsimpedanz haben, müssen Operationsverstärker eingesetzt werden, die nur sehr geringe Eingangsströme aufweisen (FET-OpAmp). Ein piezoelektrischer Kraftsensor liefert über den vollen Arbeitsbereich etwa eine Ladungsänderung von 107 Coulomb.

Betrachtet man das Ersatzschaltbild eines piezoelektrischen Sensors, so sieht man, dass dieser aus einer Spannungsquelle mit einem Kondensator in Serie besteht. Dies zeigt, dass dieser Sensor daher nur zur Beobachtung dynamischer Vorgänge verwendet werden kann. Sie werden hauptsächlich angewendet zur Erfassung von hochfrequenten Kraft- und Druckschwankungen (z.B. Kristallmikrophon).

Last Update: 2005-Okt-08


Pirani Gauge

Bei niedrigen Drücken (10-7 bis 10-2 bar) ist die thermische Leitfähigkeit eines Gases proportional zum Druck. Nützt man diese Tatsache aus, so kann man durch Messung der Wärmeleitfähigkeit den Gasdruck messen. Lässt man durch einen Draht, der vom interessierenden Gas umspült ist, einen konstanten Strom fließen, so ist der Widerstand des Drahtes proportional zum Gasdruck.

Ein Nachteil dieses Sensors ist, dass seine Kennlinie von der Art des Gases abhängt, da unterschiedliche Gase unterschiedliche Wärmeleitfähigkeiten aufweisen. Die Genauigkeit einer Pirani-Messbrücke liegt bei etwa 3%.

Last Update: 2005-Okt-08


Ionisationsmanometer

Um den Gasdruck bei sehr niedrigen Drücken zu messen (10-11 bis 10-5 bar) verwendet man folgendes Prinzip: Heizt man einen Draht auf, so entstehen freie Elektronen, die man auf ein Gitter zu beschleunigt. Der größte Teil der Elektronen passiert das Gitter und trifft auf Gasmoleküle, die durch den Zusammenstoß ionisiert werden. Die entstandenen positiven Ionen werden von einer negativ geladenen Elektrode aufgefangen und der resultierende Strom wird gemessen. Dieser Strom ist proportional zum Gasdruck, da bei höheren Drücken natürlich auch mehr Gasmoleküle pro Volumeneinheit vorhanden sind und dadurch mehr Ionen erzeugt werden.

Last Update: 2005-Okt-08


Feuchtigkeit

In der Luft ist in Abhängigkeit von der Temperatur stets eine gewisse Menge an Wasserdampf vorhanden, die als Luftfeuchtigkeit bezeichnet wird. Man unterscheidet zwischen absoluter und relativer Luftfeuchte. Die absolute Luftfeuchte gibt die Menge an Wasser pro Kubikmeter Luft an:

Fabs = Masse des Wassers/Luftvolumen [g/m3]

Die Luft kann je nach Temperatur nur eine bestimmte maximale Menge an Wasserdampf aufnehmen. Diese Feuchte wird als Sättigungsfeuchte Fsat bezeichnet. Die Sättigungsfeuchte steigt mit der Temperatur. Kühlt man Luft einer bestimmten Temperatur ab, so wird bei einer bestimmten Temperatur die Sättigungsfeuchte überschritten und der Wasserdampf beginnt zu kondensieren (Regen, Nebel, Tau). Man bezeichnet diese Temperatur auch als Taupunkt. Die relative Feuchte wird als Verhältnis von absoluter Feuchte zur Sättigungsfeuchte bei einer bestimmten Temperatur in Prozent angegeben:

%rH = 100 * Fabs/Fsat

Es gibt verschiedene Prinzipien der Feuchtigkeitsmessung, die entweder die absolute oder die relative Feuchte messen. Bei bekannter Temperatur kann jedoch jede Messgröße in die jeweils andere umgerechnet werden.

Last Update: 2005-Okt-29


Home [image] Sensoren [image] Feuchte [image] Kapazitive Luftfeuchtemessung
Index
Siehe auch: Kondensatoren, Feuchtigkeit, LiCl-Zelle, Bauformen von Kondensatoren

Kapazitive Luftfeuchtemessung

Die Messzelle besteht aus einem Kondensator mit einem hygroskopischen Polymer als Dielektrikum. Bei Erhöhung der relativen Feuchte, steigt auch die Kapazität des Kondensators, da Wasser in das Dielektrikum eindringt. Verwendet man den Kondensator als frequenzbestimmendes Bauelement in einem Oszillator, so ist die Frequenz des Oszillators umgekehrt proportional zur relativen Feuchte.

Last Update: 2006-Sep-28


LiCl-Zelle

Im Gegensatz zu den vorher beschriebenen Prinzipien, bestimmt diese Messzelle die absolute Feuchtigkeit. Ein Widerstands-Temperatursensor wird mit eine Haube aus Glaswolle überzogen, der in eine Lithiumchlorid-Lösung getaucht wurde. An der Haube sind zwei Elektroden angebracht, an die eine Wechselspannung angelegt wird. Der resultierende Strom erwärmt die Glaswolle und verdampft das Wasser der Lösung. Dadurch sinkt der Widerstand der Lösung und die entstehende Wärme wird geringer. Da Lithiumchlorid hygroskopisch ist, versucht es den Wasserverlust durch Wasseraufnahme aus der Umgebungsluft wieder auszugleichen. Diese beiden Vorgänge - Verdampfung des Wassers und hygroskopische Wasseraufnahme - halten sich bei einer bestimmten Temperatur in Abhängigkeit von der absoluten Feuchte das Gleichgewicht, wodurch durch Messung der Temperatur der Glaswolle die absolute Feuchte bestimmt werden kann. Die LiCl-Zelle zeichnet sich durch hohe Messgenauigkeit und großen Messbereich aus. Sie ermöglicht außerdem Feuchtemessungen auch in anderen Gasen als Luft.

Last Update: 2005-Okt-29


Metalloxid-Gassensoren

Metalloxid-Gassensoren basieren auf dem Prinzip, dass sich die Leitfähigkeit von bestimmten halbleitenden Metalloxiden ändert, wenn sie einer Sauerstoff-Atmosphäre ausgesetzt werden. Obwohl dieser Typ von Gassensor primär ein Sauerstoffsensor ist, kann man ihn auch zur Detektion von anderen Gasen benützen. Um die Selektivität zu erhöhen werden die Oxide mit verschiedenen Substanzen dotiert. Ein solcher Gassensor besteht aus einem beheizten keramischen Material, auf dem das Metalloxid zwischen zwei Elektroden aufgebracht ist. Falls das Oxid in Kontakt mit einem Gas kommt, diffundiert dieses in die Schicht und ändert die Leitfähigkeit. Sowohl Selektivität als auch Empfindlichkeit hängen von der Temperatur des Substrates und der Art der Dotierung ab. Die Sensoren werden typisch auf Temperaturen von 200 bis 400 °C gebracht. Die folgende Tabelle gibt einen kurzen Überblick über Gassensoren.

Gas | Sensormaterial
Sauerstoff | SnO2 , undotiert
Wasserstoff | SnO2 + Sb-dotiert
Methan | SnO2, Pt-dotiert
Propan | SnO2 + PdCl2 + Mg(NO3)2
Butan | ZnO + Katalysator (Pt)
Kohlenmonoxid | SnO2, Cu-dotiert

Last Update: 2005-Okt-08


Lambda-Sonde

Ein kommerziell sehr erfolgreicher Sensor ist die Lambda-Sonde zur Regelung der Treibstoffverbrennung in Autos. Dabei wird im Abgas der Sauerstoffpartialdruck gemessen und daraus das Treibstoff-Luftgemisch (ca. 14.7 mal mehr Luft als Treibstoff) so eingestellt, dass eine möglichst vollständige Verbrennung stattfindet.

Das Prinzip der Lambda-Sonde beruht auf einer elekrochemischen Zelle mit einem Feststoff-Elektrolyten aus Zirkonoxid, das mit ca. 5% Yttriumoxid dotiert wird. In diesem Feststoffelektrolyten wird die Beweglichkeit von Sauerstoffionen ab etwa 400°C so groß, dass Stromleitung möglich wird. Das zudotierte Yttriumoxid dient einerseits dazu, die Leitfähigkeit für Sauerstoffionen zu erhöhen (durch Bildung von Sauerstoffleerstellen im Kristallgitter), und andererseits ermöglicht der Zusatz von Yttriumoxid erst die Ausbildung einer stabilen Phase. Reines Zirkonoxid würde beim Abkühlen nach dem Sintern bei ca. 1170°C von der tetragonalen in die monokline Form übergehen. Die damit einhergehende Volumenausdehnung (ca. 4%) würde das gesinterte Bauteil zerstören.

Die Betriebstemperatur der Lambdasonde liegt bei ca. 650°C und wird durch die Motorabgase gewährleistet. Die Abbildung links zeigt den grundsätzlichen Aufbau einer Lambdasonde. Die Sonde ist wie ein hohler Finger aufgebaut, der in den Abgasstrom hineinragt. Das Innere des Fingers ist mit der Umgebungsluft verbunden, weist also einen konstanten Sauerstoffgehalt auf. Sowohl die Innen- als auch die Aussenseite sind mit einer mikroporösen Platinelektrode überzogen, mit denen die Spannung der elektrochemischen Zelle gemessen werden kann. Die von der Lambdasonde erzeugte Spannung ergibt sich aus der Nernst'schen Gleichung und ist proportional zum Sauerstoffpartialdruck im Abgas:

Für eine gute und konstante Regelung der Abgaszusammensetzung ist es von großem Vorteil, dass die Kennlinie der Lambdasonde im Regelbereich (schattierter Bereich in der Abbildung unten) sehr steil ist, wodurch sich die Gemischzusammensetzung sehr genau einstellen lässt. Wie man aus dem Diagramm sieht, ist die genaue Einstellung der Abgaszusammensetzung von großer Wichtigkeit für die optimale Funktion des Abgaskatalysators, da nur in einem sehr schmalen Bereich von l=0.99 bis 1.01 die katalytische Oxidation von Kohlenmonoxid (CO), Kohlenwasserstoffen (HC) und Stickoxiden (NOx) vollständig gewährleistet ist.

Last Update: 2006-Dez-09


ISFET

Der Strom zwischen Source und Drain eines Feldeffekt-Transistors hängt von der Spannung zwischen diesen Elektroden und dem Potential am Gate ab, das durch Ladungsträger auf der Oberfläche der Gate-Elektrode erzeugt wird. Es macht keinen Unterschied, ob dieses Potential elektrischer oder elektrochemischer Natur ist. Das Gate wird mit der interessierenden Lösung in Kontakt gebracht. Da das elektrochemische Potential proportional zum Logarithmus der Ionenkonzentration ist, fließt durch den Feldeffekttransistor ein Strom, der die Konzentration der Ionen in der Lösung widerspiegelt. Um die Selektivität eines ISFETs zu erhöhen, kann man das Gate mit einer Substanz überziehen, die die Adsorption bestimmter Teilchen begünstigt.

Last Update: 2005-Okt-08


Home [image] Sensoren [image] Chemische Sensoren [image] Ionenselektive Elektroden
Index
Siehe auch: Feldeffekttransistoren, ISFET, Metalloxid-Gassensoren, Lambda-Sonde

Ionenselektive Elektroden

Ionenselektive Elektroden sind Sensoren, die Konzentrationen von Ionen in wässrigen Lösung in einen Spannungspegel umwandeln, wobei sie eine hohe Selektivität für bestimmte Ionen aufweisen.

Eine der erfolgreichsten Elektroden ist die Glaselektrode, die selektiv H+ anzeigt. Diese Elektrode erzeugt eine Ausgangsspannung, die proportional zum Logarithmus der Konzentration der H+-Ionen in der Lösung ist (pH-Wert). Die Glaselektrode hat einen sehr hohen Innenwiderstand (1010 bis 1014 W), wodurch ein Verstärker mit einem sehr hohen Eingangswiderstand notwendig wird.

Neben der H+-spezifischen Elektrode, sind eine große Zahl anderer selektiver Elektroden entwickelt worden (z.B. für Calcium, Flourid, Natrium, Kalium, Nitrat, Sulphat oder Sulfid-Ionen). Diese Elektroden sind jedoch mehr oder weniger anfällig auf Störionen.

Die Glaselektrode benötigt zur korrekten Funktion eine Referenzelektrode, die in modernen pH-Elektroden gleich mit eingebaut ist. Man spricht in diesem Fall von einer Einstabmesskette (siehe Abbildung rechts). Diese Einstabmesskette besteht aus zwei Rohren die ineinander geschoben sind. Das innere Rohr hat am Ende eine semipermeable Glasmembran die den Kontakt zur Messlsung herstellt. Im äußeren Rohr befindet sich die Referenzelektrode (meist eine Silberchlorid- oder eine Kalomelelektrode), die über ein Diaphragma mit der Messlösung verbunden ist. Die beiden Rohre sind mit einer Mischung aus Silber- und Kaliumchloridlösung (0.1 mol/l) als Elektrolyt gefüllt. Gemessen wird die Spannung zwischen der Referenzelektrode und der Glaselektrode.

Diese Spannung ist abhängig von der Wasserstoffionenkonzentration (pH-Wert), da an der Glaselektrode je nach Acidität der Messlösung Wasserstoffionen eingelagert oder auch ausgelagert werden. Die Glasmembran besitzt innen und außen eine Quellschicht, in der Na+-Ionen gegen H+-Ionen ausgetauscht werden. Die äußere Seite der Glasmembran hat zur messenden Lösung Kontakt, die innere Seite zu einer gepufferten, also auf einen genauen pH-Wert eingestellten Lösung. Wird nun die Elektrode in eine Lösung gehalten, so werden sich im sauren Milieu H+-Ionen in die Quellschicht des Glases einlagern, oder es werden sich im basischen Milieu H+-Ionen aus der Quellschicht herausbewegen. Auf der Glasaußenseite wird dieser Vorgang durch die Messlösung kontrolliert, auf der Glasinnenseite durch die Pufferlösung mit fest eingestelltem pH-Wert. Es bildet sich also bei niedrigen pH-Werten außen eine Quellschicht mit grösseren H+-Anteil als innen, was zur Ausbildung eines elektrochemischen Potentials führt, das sich als Spannung zu einer Referenzelektrode messen lässt.

Last Update: 2007-Jän-03


Welches Werkzeug?

Viele interessierte Laien lassen sich von der verwirrenden Vielfalt an elektronischen Messgeräten und deren Preisen abschrecken, in dieses Gebiet tiefer einzudringen. Im folgenden sei daher eine Liste von Geräten und Werkzeugen zusammengestellt, die einen Einstieg in das Gebiet ermöglichen. Hat man alle aufgeführten Werkzeuge zur Verfügung, so können alle Experimente, die in diesem Buch beschrieben sind, durchgeführt werden. Für viele Experimente kann jedoch auf ein Oszilloskop und/oder ein Terminal verzichtet werden.

  • Lötkolben 30 W
  • Zinn 0.8 mm
  • Minibohrmaschine
  • spitze Flachzange,
  • Seitenschneider
  • Universal-Messgerät
  • Oszilloskop, 2-Kanal, 20 MHz
  • Personalcomputer als alphanumerisches Terminal

Last Update: 2005-Okt-29


Liste der Experimente

Bauteilkunde
Stromverstärkung im Bipolartransistor

Operationsverstärker
Spannungsfolger
Variabler Verstärker
Invertierender Verstärker
Summierverstärker
Vollwellengleichrichter

Grundlagen der Digitaltechnik
Reflexionen an langen Leitungen
Aufbau eines Quarzoszillators
Inverter mit Tri-State-Ausgang
Aufbau eines Gray-Codierer
Aufbau eines RS-Flip-Flops aus NAND-Gattern
Einsatz eines Registers zur Datenspeicherung
Universalfilter bei unterschiedlichen Dämpfungen
Aufbau eines Frequenzsynthesizers

Spezielle Schaltungen
Aufbau eines Fixspannungsnetzteil
Aufbau eines Abwärtsschaltreglers
Auswirkungen der Slew-Rate des Komparators

Interfaces zwischen Analog und Digitaltechnik
Aufbau einer Sample&Hold-Schaltung
Aufbau eines 4-Bit-DA-Wandlers
Aufbau eines Spannungs-Frequenzwandlers

Sensoren
Temperaturmessung mit Halbleiter-Diode
Aufbau einer Lichtschranke

Mikroprozessorsystem
8fach-Inverter
RAM-Test
Lauflicht
Zähler mit einstellbarer Geschwindigkeit
Emulation von Gattern

I/O-Bausteine
Stoppuhr
Frequenzmessgerät
Serielle Ausgabe von Zeichen
Empfang von Zeichen auf der seriellen Leitung
Protokoll einer seriellen Schnittstelle
Tastatur mit 16 Tasten
Centronics-Schnittstelle

Aufbau einfacher mikroprozessorgesteuerter Geräte
Sinusgenerator, Version A
Sinusgenerator, Version B
Parallel ablaufende Programme: Sinusgenerator und Lauflicht
Programmierbarer Funktionsgenerator
Digitalvoltmeter

Last Update: 2005-Okt-29


Experiment: Stromverstärkung im Bipolartransistor

Im folgenden Experiment soll die Stromverstärkung eines Transistors getestet werden. Dazu wird eine kleine Schaltung entsprechend der Abbildung aufgebaut. Mit dem Potentiometer kann der Basisstrom zwischen 0 und ca. 50 uA eingestellt werden. Der Kollektorstrom kann zwischen 0 und 12 mA variieren; größere Kollektorströme treiben den Transistor in die Sättigung.

Stromverstärkung eines bipolaren Transistors

Nun wird für verschiedene Stellungen des Potentiometers der Basisstrom und der sich einstellende Kollektorstrom gemessen und in ein Diagramm eingetragen, das den Kollektorstrom in Abhängigkeit vom Basisstrom ergibt. In einem zweiten Diagramm wird das Verhältnis von Kollektor- zu Basisstrom (die Stromverstärkung) in Abhängigkeit des Kollektorstromes eingetragen:

Diagramme

Die zweite Abbildung zeigt das Ergebnis eines solchen Experiments. Man kann daraus die Stromverstärkung des Transistors ablesen. Man sieht daraus auch, dass die Stromverstärkung vom Kollektorstrom abhängt - man muss also bei der Angabe der Stromverstärkung auch den zugehörigen Kollektorstrom angeben.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Operationsverstärker [image] Spannungsfolger
Index
Siehe auch: Universal-Experimentierplatine LINMLT, Spannungsfolger

Experiment: Spannungsfolger

Der Spannungsfolger wird mit Hilfe der Universalplatine LINMLT aufgebaut. Legt man nun an den Eingang IN1 ein Signal an, so erscheint dieses unverändert am Ausgang OUT1. Um die Funktion des Impedanzwandlers zu zeigen, schließt man den hochohmigen Ausgang des Funktionsgenerators an den Eingang IN1. Der Funktionsgenerator wird auf eine Frequenz von ca. 1 Hz eingestellt. Versucht man nun, eine Leuchtdiode an den hochohmigen Ausgang des Funktionsgenerators anzuschließen, so wird die LED nicht oder nur wenig leuchten; schließt man die LED an den (niederohmigen) Ausgang des Operationsverstärkers, so blinkt sie im Takt der Frequenz des Funktionsgenerators.

Erklärung: Der hochohmige Ausgang des Funktionsgenerators kann nicht genug Strom liefern, um die LED zum Leuchten zu bringen. Schaltet man jedoch einen Spannungsfolger dazwischen, so kann aus dem Signal genügend Energie entnommen werden, um die Leuchtdiode zum Leuchten zu bringen.

Last Update: 2005-Okt-08


Experiment: Variabler Verstärker

Im folgenden Experiment soll ein nicht invertierender Gleichspannungsverstärker aufgebaut werden, dessen Verstärkung durch ein Potentiometer eingestellt werden kann. Der variable Verstärker wird mit Hilfe der Universalplatine LINMLT aufgebaut. Legt man an den Eingang IN1 ein Signal, so kann man am Ausgang das Signal um den Faktor 2 - 5 verstärkt beobachten, je nachdem in welcher Stellung das Potentiometer steht.

Nicht-Invertierender Verstärker

Last Update: 2005-Okt-08


Experiment: Invertierender Verstärker

Der folgende Aufbau soll einen invertierenden Verstärker ergeben, der sowohl in der Amplitude als auch im Offset einstellbar ist. Die variable Verstärkung wird durch ein Potentiometer (P1) als Rückkopplungswiderstand erzeugt (s. Abb. EXOAINV) und kann zwischen zwischen null und eins eingestellt werden. Neben der Verstärkung kann mit Potentiometer P2 auch noch eine Gleichspannung addiert werden, die eine Verschiebung (Offset) des verstärkten Signals bewirkt.

Invertierender Verstärker

Legt man an den Eingang ein Signal, so kann man am Ausgang ein Signal beobachten, dessen Amplitude von der Einstellung des Potis P1 abhängt (Uout = 0-Uin) und dessen Gleichspannungsoffset von der Stellung der Potentiometer P1 und P2 abhängt.

Last Update: 2005-Okt-08


Experiment: Summierverstärker

Im folgenden soll ein Summierverstärker aufgebaut werden, der drei Signale summieren kann. IN1 und IN2 sind Eingänge die von außen mit einem Signal angesteuert werden können. Das Signal an IN1 wird vor der Summierung um den Faktor Zwei verstärkt. Der dritte Eingang wird auf einen einstellbaren Spannungsteiler gelegt, so dass dem Ausgangssignal ein Offset gegeben werden kann (Addition einer Gleichspannung). Das Signal des Summierers (OUT1) wird durch den zweiten Operationsverstärker, der als Inverter beschaltet ist, in der Polarität umgekehrt, so dass an Ausgang OUT2 die vorzeichenrichtige Summe der drei Eingangsspannungen anliegt.

EXPERIMENT: Summierverstärker

Legt man an die Eingänge IN1 das Ausgangssignal des Funktionsgenerators TRI-LO und an IN2 das Ausgangssignal SQUARE, so bekommt man am Ausgang OUT2 ein Signal, das die Summe aus 2*TRI-LO, SQUARE und der Spannung am Potentiometer B19 darstellt. Mit dem Potentiometer kann das Ausgangssignal um einige Volt verschoben werden. Wer über ein Zweistrahloszilloskop verfügt kann parallel OUT1 und OUT2 beobachten.

Last Update: 2005-Okt-08


Experiment: Vollwellengleichrichter

Kombiniert man den oben besprochenen Halbwellengleichrichter mit einem Summierverstärker der sowohl das Eingangssignal als auch das Ausgangssignal des Halbwellengleichrichters summiert, so bekommt man einen Vollwellengleichrichter. Dieser wird so beschaltet, dass positive und negative Halbwelle mit dem gleichen Verstärkungsfaktor (=1) summiert werden.

Vollwellengleichrichter

Der Aufbau des Vollwellengleichrichters wird mit Hilfe der Platine LINMLT durchgeführt. Zu beachten ist, dass für manche Widerstände engtolerierte Typen (1%) verwendet werden müssen, um ein korrektes Funktionieren der Schaltung zu gewährleisten.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Reflexionen an langen Leitungen
Index
Siehe auch: Lange Signalleitungen

Experiment: Reflexionen an langen Leitungen

Im folgenden Experiment soll die Reflexion von schnell ansteigenden Signalen in langen Leitungen gezeigt werden. Dazu wird mit Hilfe der Platine DIGMLT ein einfacher stabiler Quarz-Oszillator mit einer Frequenz von 500 kHz aufgebaut (oder man verwendet den in diesem Buch beschriebenen Frequenzsynthesizer). Das Signal dieses Oszillators wird nun an ein Oszilloskop angeschlossen (Tastkopf mit niedriger Kapazität verwenden!) und dargestellt. Verbindet man den Oszillatorausgang mit einer langen Leitung so entsteht in Abhängigkeit von der Länge der Leitung ein immer stärker verzerrtes Signal. Am besten, man probiert das Verhalten des Signals mit Leitungen zwischen 1 und 10 m aus.

Schließt man an das Ende der Leitung einen Abschlusswiderstand, so wird die reflektierte Energie vom Widerstand absorbiert und die Schwingungen verschwinden. Zur optimalen Unterdrückung der Schwingungen muss der Abschlusswiderstand gleich dem Wellenwiderstand der Leitung sein. Um die Wirkung von unterschiedlichen Abschlusswiderständen zu sehen, kann man ein Trimmpotentiometer mit 500 W verwenden. Die Verzerrung des Signals wird bei der Stellung des Potentiometers am geringsten sein, die dem Wellenwiderstand der Leitung entspricht.

Reflexionen an einer langen Leitung

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Aufbau eines Quarzoszillators
Index
Siehe auch: Schwingquarze, Taktoszillator

Experiment: Aufbau eines Quarzoszillators

Für viele Zwecke benötigt man einen Quarzoszillator, den man leicht mit zwei Invertern aufbauen kann. Für den Aufbau des Oszillators wird die Platine DIGMLT eingesetzt. Für das korrekte Funktionieren dieser Schaltung ist es unbedingt notwendig, als Inverter entweder normale TTL-Bausteine oder Schottky-TTL zu verwenden (7404, 74S04). Die Verwendung von LS-TTL-Bausteinen (z.B. 74LS04) ergibt einen schlecht anschwingenden Oszillator, der nur bei bestimmten Quarzen (abhängig von der Serienkapazität des Quarzes) anschwingt. Die gezeigte Schaltung funktioniert für Frequenzen zwischen dreiund 16 MHz (7400) bzw. 24 MHz (74S04).

Quarzoszillator mit Hilfe eines Inverters

Als Inverter können aber auch einfache invertierende Gatter (z.B. 7400 oder 7402) eingesetzt werden. Dafür werden jeweils die Eingänge jedes Gatters verbunden, so dass sich aus einem Gatter ein Inverter ergibt.

Last Update: 2005-Okt-17


Experiment: Inverter mit Tri-State-Ausgang

Das folgende Experiment soll die Funktion eines Inverters mit Tri-State-Ausgang zeigen. Dazu wird der Baustein 74LS368 verwendet. Er enthält sechs Tri-State-Inverter, deren Select-Eingänge zu zwei Leitungen zusammengefasst sind, wobei die eine Leitung zwei Inverter umfasst und die andere vier Inverter. Zum Aufbau des Experiments wird die Platine DIGMLT verwendet. der Baustein 74LS368 wird in die Fassung 1 gesetzt und folgende Anschlüsse werden auf der Platine verbunden (s. Abb.):

 | Baustein 74LS368 | Platine DIGMLT
/SEL: | LS368/Pin 1 | mit Taste T1
IN: | LS368/Pin 2 | mit Taste T2
OUT: | LS368/Pin 3 | mit LED L1

Inverter mit Tri-State-Ausgang

Der Leser kann durch Einstellen der vier möglichen Kombinationen der Tasten T1 und T2 alle Zustände der Wahrheitstafel herstellen und an der Leuchtdiode den Ausgangszustand kontrollieren. Besonderes Augenmerk sei auf den hochohmigen Zustand gelegt (T1 = HIGH). In diesem Zustand ist der Ausgang des Inverters unabhängig vom Eingangssignal nicht definiert. Man kann durch Verbinden des Ausgangs mit GND oder VCC über einen Widerstand (1 kW) diesen sowohl auf LOW, als auch auf HIGH bringen, was bei aktivem Select-Eingang (T1 = LOW) nicht möglich ist.

Last Update: 2005-Okt-08


Experiment: Aufbau eines Gray-Codierers

Das folgende Experiment soll den Einsatz von XOR-Gattern zur Erzeugung von Gray-Codes aus binären Codes zeigen. Dazu wird mit Hilfe der Platine DIGMLT ein TTL-Baustein 74LS86, der vier XOR-Gatter enthält, gemäß der folgenden Schaltung eingesetzt. Die Eingänge werden mit den Tasten von DIGMLT verbunden, die Ausgänge mit den Leuchtdioden. Bei korrektem Aufbau der Schaltung wird an den Ausgängen des 7486 der vier Bit breite Gray-Code eines beliebigen 4-Bit-Binärcodes ausgegeben.

Gray-Codierer aus XOR-Gattern

Verbindet man die Eingänge des Gray-Codierers mit den Ausgängen F1-F4 des Frequenzgenerators der Platine DIGMLT (I0=F1, I1=F2, I2=F3, I3=F4) und zeichnet man mit Hilfe eines Oszilloskops die Zeitdiagramme der Ein- und Ausgänge auf, so erhält man die nachfolgend dargestellten Kurven. Man sieht, dass beim Übergang von einer Bit-Kombination zur nächsten, sich am Ausgang des Gray-Codierers der Zustand von jeweils nur einer Leitung ändert.

Eingangs- und Ausgangssignale eines Gray-Codierers

Der Leser sei dazu ermutigt, eine Schaltung zur Umwandlung von Gray-Codes in die entsprechenden Binärcodes zu entwerfen und diese auch mit Hilfe der Platine DIGMLT auszuprobieren.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Aufbau eines RS-Flip-Flops aus NAND-Gattern
Index
Siehe auch: Flip-Flop

Experiment: Aufbau eines RS-Flip-Flops aus NAND-Gattern

Das folgende Experiment soll die Eigenschaften eines RS-Flip-Flops zeigen. Dazu wird aus zwei NAND-Gattern (Baustein 74LS00) ein solches aufgebaut und die Ein- und Ausgänge entsprechend der folgenden Abbildung mit den Tasten und Leuchtdioden der Platine DIGMLT verbunden.

Aufbau eines RS-Flip-Flops aus zwei NAND-Gattern

Zuerst wird das RS-Flip-Flop in den stabilen Zustand gebracht, indem T1 und T2 auf LOW-Pegel gesetzt werden. Beide Ausgänge müssen nun HIGH-Potential aufweisen. Drückt man nun z.B. die Taste T1, so ändert sich der Eingangspegel des S-Eingangs von LOW auf HIGH, die Ausgänge müssen nun Q=HIGH und /Q=LOW aufweisen. Wird nun die andere Taste T2 auch auf HIGH gelegt, so ändert sich der Zustand der Ausgänge nicht, der vorhergehende Zustand bleibt erhalten. Legt man nun an den Set-Eingang durch zweimaliges Drücken der Taste T1 einen kurzen Impuls, so kippt der Zustand der Ausgänge. Dasselbe gilt für den Reset-Eingang.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Einsatz eines Registers zur Datenspeicherung
Index
Siehe auch: Flip-Flop

Experiment: Einsatz eines Registers zur Datenspeicherung

Solche Register gibt es als fertige Bauteile mit zwei bis acht Flip-Flops in einem Gehäuse und mit verschiedenen Anschlussbelegungen und Steuersignalen. Im folgenden Experiment soll ein Register mit 8 Flip-Flops, einem gemeinsamen Takteingang und einer Steuerleitung für die Tri-State-Ausgänge näher untersucht werden. Dazu werden die Anschlüsse des Bausteins 74LS574 mit Hilfe der Platine DIGMLT entsprechend der folgenden Abbildung verbunden. Die Dateneingänge werden mit den Tasten verbunden, die Ausgänge mit den Leuchtdioden. Der Tri-State-Enable-Eingang wird fix auf Masse gelegt, damit die Ausgänge dauernd aktiv sind. Der Takteingang wird mit dem Ausgang MFO2 des Monoflops verbunden. An diesem Ausgang kann durch Drücken der Taste MF ein kurzer Impuls erzeugt werden.

Experiment mit 8-Bit-Register

Ist die Schaltung korrekt aufgebaut, so kann man mit Hilfe der Tasten ein beliebiges Bitmuster an die Eingänge des Registers legen und mit einem Druck auf die Taste MF die Daten ins Register übernehmen. Die Leuchtdioden zeigen nun dasselbe Bitmuster wie die Eingänge.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Universalfilter bei unterschiedlichen Dämpfungen
Index
Siehe auch: Grundbegriffe der Filtertechnik, Aktive Filter

Experiment: Universalfilter bei unterschiedlichen Dämpfungen

Im folgenden Experiment soll das Verhalten eines Universalfilters bei unterschiedlichen Dämpfungen untersucht werden. Dazu wird ein Universalfilter aufgebaut, das eine Grenzfrequenz von 1 kHz aufweist und dessen Dämpfung zwischen den Werten 3.0 und 0.01 eingestellt werden kann. Das Filter wird mit einer Rechteckfrequenz von 100 Hz gespeist und die Filterausgänge für Tiefpass-, Hochpass- und Bandpassverhalten bei unterschiedlichen Dämpfungen beobachtet. Die Abbildung zeigt die für den Versuchsaufbau verwendete Schaltung. Mit dem Potentiometer P1 kann die Dämpfung eingestellt werden.

Universalfilter mit einstellbarer Dämpfung

Die Schaltung lässt sich mit der Platine LINMLT aufbauen, als Operationsverstärker kann man beliebige Universalverstärker verwenden (z.B. uA741). Um das Verhalten des Filters auszutesten, sollte man alle drei Ausgänge (Hochpass, Bandpass und Tiefpass) in Abhängigkeit von der Dämpfung betrachten.

Am anschaulichsten kann man den Beitrag der Dämpfung zur Sprungantwort des Filters sehen, wenn man ein Rechtecksignal mit niedriger Frequenz (z.B. 50 Hz, Rechtecksignal der Platine DIGMLT verwenden) in das Filter einspeist und die Sprungantwort des Filters in Abhängigkeit von der Dämpfung betrachtet. Bei geringer Dämpfung antwortet das Filter auf jeden Sprung des Eingangssignals mit einem langsamen Ausklingen der angestossenen Schwingung. Die Schwingung erfolgt mit der Eigenfrequenz, also etwa 1 kHz. Bei größer werdender Dämpfung beginnt der Einschwingvorgang immer kürzer zu werden, um bei einer Dämpfung von über 1 gänzlich zu verschwinden.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Grundlagen der Digitaltechnik [image] Aufbau eines Frequenzsynthesizers
Index
Siehe auch: Phase Locked Loop

Experiment: Aufbau eines Frequenzsynthesizers

Es gibt mehrere verschiedene, kommerziell erhältliche Bausteine, die alle wesentlichen Komponenten einer PLL-Schaltung (VCO und Phasendetektor) enthalten. Ein preislich sehr günstiges jedoch vergleichsweise nur für niedrige Frequenzen (max. 20 MHz) einsetzbares Bauteil ist der CMOS-Baustein 74HC4046 (bzw. CD4046 für Frequenzen bis 1.5 MHz). Dieser Baustein enthält neben dem VCO auch zwei (CD4046) oder drei (74HC4046) verschiedene Phasendetektoren - neben dem einfachen XOR-Gatter zwei verschiedene frequenzselektive PDs.

Einfacher Frequenzsynthesizer

Mit diesem Baustein soll ein einfacher Frequenzsynthesizer aufgebaut werden, der ein Rechtecksignal mit quarzstabilen Frequenzen zwischen 125 kHz und 15.9375 MHz erzeugen soll, die in 254 Stufen zu je 62.5 kHz eingestellt werden können. Die Abbildung oben zeigt die Schaltung des Synthesizers. Aus einem Quarzoszillator wird durch einen Teiler ein Referenzsignal mit 62.5 kHz abgeleitet. Dieses wird mit Hilfe der PLL und eines einstellbaren Teilers vervielfacht. Das Referenzsignal kann über den Jumper J2 eingestellt werden (125, 62.5, 31.25 und 15.625 kHz). Es sei jedoch darauf hingewiesen, dass bei einer Referenzfrequenz von 125 kHz die PLL nicht mehr über den ganzen einstellbaren Teilerbereich arbeitet, da der VCO mit höchstens 20 MHz schwingt. Außerdem müssen für andere Referenzfrequenzen als 62.5 kHz eventuell die Kondensatoren an den Pins 6 und 9 des PLL-Bausteins ausgetauscht werden. Bei niedrigeren Referenzfrequenzen wird die Auflösung der Frequenzstufen entsprechend besser, die höchste erzeugbare Frequenz erniedrigt sich jedoch entsprechend.

Der Ausgang des VCOs ist nicht gepuffert und darf mit maximal 1 LS-TTL-Last belastet werden. Falls eine höhere Strombelastbarkeit benötigt wird, ist ein Puffer zu verwenden.

Der einstellbare Teiler wird mit zwei synchronen 4-Bit-Zählern (2x HCT161) aufgebaut. Der Baustein 74HCT161 verfügt über Paralleleingänge mit denen der Wert des Zählers gesetzt werden kann. Außerdem wird beim höchsten Zählerstand der Ausgang TC (Terminal Count) auf HIGH-Pegel gelegt. Dieses Signal wird dazu verwendet, den Zähler auf einen voreingestellten Wert zu setzen. Mit dieser Methode kann man also durch Anlegen eines bestimmten Wertes an die Paralleleingänge den Zähler zwischen diesem Wert und dem Höchststand zyklisch zählen lassen.

Den Anfangswert des Zählers - und damit das Teilerverhältnis - kann man wahlweise manuell durch DIP-Switches oder durch einen Mikroprozessor über das Register 74HCT574 einstellen. Der Jumper J1 dient zur Auswahl der beiden Betriebsmodi. Ist der Pin '/OE' des Registers mit Vcc verbunden, so werden die Ausgänge des Registers hochohmig und der Frequenzsynthesizer kann manuell eingestellt werden. Wird '/OE' mit Masse verbunden, so kann der Teiler über die einfache Schnittstelle eingestellt werden. In diesem Fall müssen alle DIP-Switches auf 'OFF' gestellt sein, um einen Kurzschluss zu vermeiden.

Um den Aufbau zu erleichtern, wurde die Platine FQSYNT entworfen, die bei Verwendung der in der Stückliste angegebenen Bauteile zwischen 15 und 40 mA bei 5 V aufnimmt.

Bestückungsplan Frequenzsynthesizer

Der Aufbau erfolgt entsprechend der folgenden

Stückliste
IC1 | 74HCT574
IC2, IC3 | 74HCT161
IC4 | 74HCT393
IC5 | MM74HC4046
IC6 | 7400
R1, R2 | 1k0
R3, R4 | 100 W
R5..R12 | 8x10k SIL
C1, C4, C5 | 10 uF, 16 V, Tl-Elko
C2 | 33 uF, Tl-Elko
C3 | 15 pF
1 Platine FQSYNT
1 Stiftleiste 2x13-polig
1 Stiftleiste 2x4-polig
1 Stiftleiste 1x3-polig
1 DIP-Switch 8-fach
2 Jumper
1 Quarz 4.000 MHz

Last Update: 2005-Okt-08


Experiment: Aufbau eines Fixspannungsnetzteil

Im folgenden ist der Aufbau eines kleinen Fixspannungsnetzteils beschrieben. Es dient als Spannungsquelle für alle in diesem Buch gezeigten Experimente und liefert bei den Spannungen 5V, +12V und -12V Ströme von 1A(5V) bzw. 0.5A(+/-12V) (bei entsprechender Dimensionierung des Transformators).

Das Netzteil wird von zwei Transformatoren versorgt, einer für die 5 V und einer für die +/-12 V. Diese Transformatoren sollten einen Strom von 1.1 A bzw. 500 mA pro Wicklung (siehe Schaltbild) liefern können, damit alle Experimente, die in diesem Buch beschrieben sind, mit diesem Netzteil durchgeführt werden können. Nach der Gleichrichtung der Wechselspannung wird die Spannung jeweils einem Siebkondensator zugeführt und dann vom entsprechenden Regler auf die gewünschte Spannung geregelt. Jeder der Regler wird zur Unterdrückung von Schwingungen mit je einem Kondensator (220 nF) am Ein- und Ausgang beschaltet. Außerdem wird durch je einen Lastwiderstand den Reglern jeweils ca. 5 mA entnommen, um das oben beschriebene Leerlauf-Phänomen zu unterdrücken.

Schaltplan des Fixspannungsnetzteils

Der Aufbau des Netzteils erfolgt entsprechend des Bestückungsplans und der folgenden Stückliste. Zu beachten ist, dass die Spannung der Trafos nicht zu hoch gewählt wird, da sonst eventuell die Kühlkörper nicht ausreichen. Sind die in der Stückliste bezifferten Kühlkörper nicht erhältlich, so kann man auch mechanisch ähnliche Kühlkörper verwenden. Die Kühlkörper sollten einen Wärmewiderstand von max. 7 Grad/W (12 V Regler) bzw. max. 3 Grad/W (5 V Regler) haben. Verwendet man das Netzteil für Aufgaben, bei denen wesentlich weniger Strom benötigt wird, so kann man eventuell auch ohne Kühlkörper auskommen (die Kupferflächen der Platine kühlen auch). Besonders hingewiesen sei auf die Tatsache, dass die Kühlfläche des Reglers für die negative Spannung auf Uin liegt. Der Kühlkörper dieses Reglers sollte daher nirgends andere Teile (auch nicht ein eventuelles Gehäuse) berühren.

Bestückungsplan des Fixspannungsnetzteils

Stückliste:
IC1 | 7805CK
IC2 | 7812CT
IC3 | 7912CT
D1..D8 | 1N4001
R1, R2 | 2k7
R3 | 1k0
C1, C2 | 1000 uF, 40V
C3 | 2200 uF, 40V
C4..C9 | 220 nF
1 Platine NTFIX
3 Sicherungshalter
2 Feinsicherungen 0.5 AT
1 Feinsicherung 1.2 AT
2 Kühlkörper PR22
1 Kühlkörper PR128
2 Lötleisten 6-polig
1 Trafo 9 V, 15 VA
1 Trafo 2x12 V, 2x7 VA

Last Update: 2006-Dez-05


Experiment: Aufbau eines Abwärtsschaltreglers

Im folgenden soll ein Abwärtsschaltregler aufgebaut werden, der für Eingangsspannungen von 10 bis 40 V und für Ausgangsspannungen von 5 bis 33 V bei maximal 4 A Laststrom ausgelegt ist. Zum Aufbau wird ein kommerziell erhältlicher IC (L296) verwendet, der alle wichtigen Funktionen eines Schaltreglers auf dem Chip integriert hat. Er bietet neben Softstart und Kurzschlusssicherheit, auch einen Resetausgang (wichtig für Mikroprozessorschaltungen), einen thermischen Überlastschutz und eine Kontrollschaltung für einen Crowbar-Thyristor.

Folgende Abbildung zeigt die Schaltung des Reglers. Mit dem Potentiometer kann die Ausgangsspannung zwischen 5 und 33 V eingestellt werden. Die Eingangsspannung muss mindestens um 3V höher sein als die Ausgangsspannung. Der Widerstand Rlim bietet die Möglichkeit, den maximalen Ausgangsstrom zu begrenzen. Bei Rlim=33kW ist ein maximaler Ausgangsstrom von 2.5A möglich, lässt man Rlim weg, so liefert der Regler maximal 4A.

Die Diode am Pin 2 sollte eine sehr schnelle Diode mit Sperrverzugszeiten von kleiner 35 ns sein (Schottky-Diode) und einer Strombelastbarkeit von 8A. Die Spule wird auf einem Schalenkern mit einem AL-Wert von 3300 nH gewickelt (ca. 100 Windungen, 1 mm2 Querschnitt).

Last Update: 2005-Okt-08


Home [image] Experimente [image] Spezielle Schaltungen [image] Auswirkungen der Slew-Rate des Komparators
Index
Siehe auch: Aufbau des Frequenzgenerators, Komparator

Experiment: Auswirkungen der Slew-Rate des Komparators

Im folgenden soll die negative Auswirkung der Anstiegsgeschwindigkeit des Komparatorsignals auf die Eigenschaften des Funktionsgenerators gezeigt werden. Dazu wird der Funktionsgenerator mit der beschriebenen Bestückung eingeschaltet und seine Frequenz möglichst hoch gestellt. Am Oszilloskop wird am einen Kanal der Dreieck-Ausgang von FNCGEN beobachtet, und am anderen Kanal das Ausgangssignal des Operationsverstärkers IC4 (LF351), der als Komparator geschaltet ist. Es wird die Zeitdauer, die IC4 zum Umschalten benötigt, gemessen (typ. 1.5 ms). Dann wird IC4 gegen einen langsamen Operationsverstärker (z.B. uA741) ausgetauscht und wieder die Umschaltzeit und die Dreieckspannung gemessen. Der langsame Komparator schaltet nun in einer Zeit von etwa 35 ms.

Man beobachtet bei Verwendung eines langsamen Operationsverstärkers für IC4 eine deutliche Veränderung der Kurvenform des Dreieckausgangs. Die Spitzen werden rund, die Kurve insgesamt sieht mehr einer Sinusschwingung als einer Dreieckschwingung ähnlich. Der Grund für dieses Verhalten liegt in der, im Vergleich zur Signalfrequenz (etwa 8 kHz), sehr langen Umschaltzeit. Da die Kurvenform des Frequenzgenerators durch das Integral der Komparatorspannung bestimmt wird, ergibt sich in der Zeit des Umschaltens (linearer Anstieg des Komparatorsignals) eine parabolische Kurve am Integrator.

Für eine einwandfreie Dreiecksfunktion des Frequenzgenerators muss also die Schaltzeit des Komparators um einiges kürzer sein (Faktor 50) als die Zeitdauer einer Periode des Ausgangssignals. Bei Verwendung des Typs LF351 als Komparator ergibt sich bei einer Betriebsspannung von +/-12V eine Umschaltzeit von ca. 1.5 ms, so dass man eine akzeptable Dreieckschwingung bis zur Maximalfrequenz von

f = 2/35.10-6/50 = 6.4 kHz

erhält. Für höhere Frequenzen muss man schnellere Komparatoren verwenden oder eine Einbuße der Signalform in Kauf nehmen.

Last Update: 2005-Okt-08


Home [image] Experimente [image] Interfaces zwischen Analog und Digitaltechnik [image] Aufbau einer Sample&Hold-Schaltung
Index
Siehe auch: Sample & Hold

Experiment: Aufbau einer Sample&Hold-Schaltung

In diesem Experiment soll eine Sample&Hold-Schaltung aufgebaut werden. Dazu wird als S&H-Baustein das Bauelement LF398 eingesetzt, das leicht erhältlich und preiswert ist. Die gezeigte Schaltung wird mit Hilfe der Platinen FNCGEN und DIGMLT aufgebaut. Das Dreiecksignal TRI-LO des Funktionsgenerators dient als Eingangssignal für den S&H-Baustein. Das Sample-Signal wird vom Frequenzgenerator der Platine DIGMLT abgeleitet, indem das symmetrische Rechtecksignal F1 des Zählers auf den Hold-Eingang des Bausteins LF398 geführt wird. Dadurch wird der S&H-Baustein gleichlang jeweils in den Sample- und in den Hold-Modus geschaltet.

Der Triggereingang des angeschlossenen Zweistrahl-Oszilloskops wird mit dem Rechteck-Ausgang (SQUARE) des Funktionsgenerators verbunden, um ein stehendes Bild des Dreiecksignals zu erreichen.

Experiment mit Sample & Hold-Baustein

Für die Beobachtung der Signale sollte die Frequenz des Dreiecksignals auf etwa 500 Hz eingestellt werden, die Frequenz des Sample-Signals auf etwa 5 kHz. Da die beiden Signale nicht synchronisiert sind, wird zuerst das am Oszilloskop sichtbare Bild ein stehendes Dreiecksignal mit einer überlagerten, durchlaufenden Treppenfunktion zeigen. Um das Ausgangssignal des S&H-Bausteins stehend zu machen, muss eine der beiden Frequenzen soweit geändert werden, bis sich ein stehendes Bild ergibt.

In der Praxis sind die Zeiten für die Sample- und die Hold-Phase meist nicht gleich lang, sondern orientieren sich an der Digitalisierungsrate des nachgeschalteten AD-Wandlers und dessen Konversionszeit. Die Hold-Phase wird man zweckmäßigerweise auf die Zeit der Konversion beschränken, die restliche Zeit befindet sich der S&H-Baustein im Sample-Modus.

Der Leser sei dazu angeregt, das Übersprechen des Steuersignals auf den Speicherkondensator abzugleichen, indem er die in der Abbildung gezeigte Vorgangsweise verwendet. Dazu wird ein Inverter in die Steuerleitung gelegt und mit einem Potentiometer ein kleiner Teil des Differenzsignals am Inverter über einen Kondensator (10 pF) auf den Speicherkondensator (Anschluss 6 von LF398) geführt. Durch Verdrehen des Potentiometers kann das Übersprechen auf null abgeglichen werden.

Die folgende Tabelle gibt einen Überblick über kommerziell erhältliche S&H-Bausteine.

Bauteil | Vin [V] | r [Bit] | tacq [ms] | tap [ns] | Bemerkugen
HTS-0010 | +/- 2.5 | 10 | 0.016 | 2 | sehr schnell
SHM-HUMC | +/- 2.5 | 10 | 0.025 | 6 | sehr schnell
HTC-0500 | +/- 10 | 12 | 0.85 | 30 | schnell
SSM-2300 | +/- 7.5 | 8 | 1 |  | 8-fach-Audio-S&H
SH730 | +/- 10 | 14 | 1 | 50 |
LF398 | +/- 15 | 10 | 4 | 200 | Universaltyp, low cost
HS346 | +/- 10 | 13 | 2 | 60 |
AD585 | +/- 10 | 13 | 3 | 35 |
SMP-10 | +/- 11 | 10 | 3.5 | 50 |
SHM-LM-2 | +/- 10 | 14 | 6 | 100 | low cost
AD582 | +/- 10 | 12 | 10 | 200 | Universaltyp
LH0023 | +/- 10 | 14 | 30 | 20 |
SH725 | +/- 10 | 14 | 35 | 100 |
Vin .... maximale Eingangsspannung; r .... Auflösung; tacq .... Erfassungszeit (acquisition time); tap .... Aperturzeit

Last Update: 2005-Okt-08


Home [image] Experimente [image] Interfaces zwischen Analog und Digitaltechnik [image] Aufbau eines 4-Bit-DA-Wandlers
Index
Siehe auch: Digital-Analog-Wandler

Experiment: Aufbau eines 4-Bit-DA-Wandlers

Im folgenden Experiment soll ein 4-Bit-DA-Wandler mit Hilfe einer Widerstandsleiter aufgebaut werden und die erzeugte Analogspannung zur Steuerung einer Glühbirne dienen. Zum Aufbau wird die Platine DIGMLT eingesetzt. Der DA-Wandler wird zyklisch über den auf der Platine vorhandenen Zähler angesteuert, so dass eine sägezahnförmige Ausgangsspannung erzeugt wird.

Die Schaltung wird gemäß der folgenden Abbildung aufgebaut. Der einfache DA-Wandler wird an den auf der Platine vorhandenen Zähler angeschlossen (MSB und LSB nicht vertauschen !) und erzeugt eine periodische Sägezahnspannung, die über einen Emitterfolger an eine Taschenlampen-Glühbirne gelegt wird. Die Darlington-Schaltung des Emitterfolgers wird eingesetzt, um eine möglichst geringe Belastung des Widerstandsnetzwerkes zu erreichen. Dies hat allerdings zur Folge, dass erst ab einer Ausgangsspannung von ca. 1.2 V die Glühlampe angesteuert wird. Für höhere Ansprüche müsste man den Emitterfolger mit einem gegengekoppelten Operationsverstärker ansteuern.

Hinweis: Da bei einer Auflösung von 4 Bit ohnehin nur eine Genauigkeit von ca. 6% erreicht wird, kann man die Widerstandsleiter auch mit Widerständen aus der E12-Reihe aufbauen (z.B. 1.0kW und 2.2kW).

Lampensteuerung über 4-Bit-DA-Wandler

Wenn man die Frequenz des Rechteckgenerators möglichst niedrig einstellt, kann man das Ansteigen der Ausgangsspannung des DA-Wandlers am Anstieg der Helligkeit der Glühbirne verfolgen. Ein etwas anderer Aufbau des Experiments ermöglicht die direkte Einstellung der Helligkeit der Glühbirne über vier Tasten. Dazu werden die Eingänge des DA-Wandlers nicht mit dem Rechteckgenerator verbunden, sondern mit den Ausgängen der auf DIGMLT vorhandenen elektronischen Schalter. Nun kann man durch Eingabe einer entsprechenden 4-Bit-Kombination die Helligkeit beliebig einstellen.

Der Leser sei außerdem dazu angeregt, die Datenleitungen des DA-Wandlers zu vertauschen, oder einzelne Datenleitungen auf Masse zu legen und das Ergebnis am Oszilloskopschirm zu verfolgen. Dazu wird am besten der Frequenzgenerator auf die höchste einstellbare Frequenz gestellt. Folgende Abbildung zeigt die erzeugte Analogspannung bei korrekter Verdrahtung, bei Vertauschung von MSB und LSB und bei Ansteuerung von nur drei Datenleitungen (Bit2=0)

Ausgangsspannung bei zyklischer Ansteuerung des DA-Wandlers

Last Update: 2005-Okt-29


Home [image] Experimente [image] Interfaces zwischen Analog und Digitaltechnik [image] Aufbau eines Spannungs-Frequenzwandlers
Index
Siehe auch: Spannungs-Frequenz-Wandler

Experiment: Aufbau eines UF-Wandlers

In diesem Experiment soll ein synchroner UF-Wandler aufgebaut werden, der im Gegensatz zu den sonst üblichen UF-Wandlern eine sehr gute Stabilität aufweist. Dazu wird der VCO AD651 verwendet, der seine Ausgangsfrequenz von einer externen (quarzstabilisierten) Referenzfrequenz ableitet.

Die im folgenden beschriebene Schaltung setzt dieses Bauelement zur Wandlung von bipolaren Signalen zwischen +/- 5V ein. Es wird entsprechend eine Frequenz zwischen 0 Hz (= -5V) und 1 MHz (= +5V) erzeugt. Die Auflösung beträgt ca. 20 Bit, die Linearität des Wandler ist bei der gegebenen Referenzfrequenz von 2 MHz etwa 0.02 % (ca. 12 Bit). Eine bessere Linearität wird erreicht, wenn man die Referenzfrequenz auf 200 kHz senkt; man erreicht dann eine Linearität von ca. 16 Bit.

Synchroner Spannungs-Frequenz-Wandler mit 14 Bit Linearität

Die Ausgangsfrequenz kann mit einem handelsüblichen Frequenzzähler gemessen werden. Möchte man einen eigenen Zähler anschließen, so empfiehlt es sich, die Torzeit des dann notwendigen Gatters aus der Referenzfrequenz des VCOs abzuleiten. Dies führt zur Unabhängigkeit der Messung von Schwankungen der Referenzfrequenz und erhöht die Stabilität noch weiter.

Last Update: 2005-Okt-08


Experiment: Temperaturmessung mit Halbleiter-Diode

Das folgende Experiment soll den Einsatz einer gewöhnlichen Signaldiode zur Messung der Temperatur im Bereich von -20 bis +120 Grad Celsius zeigen. Die Durchlassspannung der Diode wird mit Hilfe einer Operationsverstärker-Schaltung um einen einstellbaren Faktor von etwa 50 verstärkt und invertiert. Durch die Offset- und Verstärkungspotentiometer lässt sich der Ausgangsspannungsbereich so verschieben, dass sich für den Temperaturbereich 0 bis 100 Grad Celsius eine Spannung von 0 bis 10 Volt einstellen lässt. Die Diode wird am besten mit zwei langen angelöteten Drähten in Kunstharz eingegossen, um Fehlmessungen durch Kriechströme zu vermeiden.

Schaltung zur Temperaturmessung mittels Diode

Das Experiment wird mit Hilfe der Platine LINMLT aufgebaut. Für den Abgleich der Schaltung verwendet man am besten die auf der Platine vorgesehenen Cermet-Trimmpotentiometer.

Ist das Experiment aufgebaut, so kann in einem ersten Versuch ein Voltmeter an den Ausgang geklemmt werden, um die zur Temperatur proportionale Spannung zu messen. Greift man die Diode an, so steigt die Spannung. Um die Temperatur exakt messen zu können, muss das Thermometer jedoch noch abgeglichen werden.

Für diesen Abgleich wird zuerst die Diode auf Null Grad gebracht und der Wert der Ausgangsspannung notiert. Dann wird die Diode auf 100 Grad gebracht und mit dem Potentiometer P1 die Ausgangsspannung so eingestellt, dass die Differenz zum Wert für null Grad gleich 10 V wird. Dieser Vorgang wird solange wiederholt, bis die Differenz zwischen null und 100 Grad genau 10 Volt beträgt. Zuletzt wird dann die Diode noch auf null Grad gebracht und das Potentiometer P1 so verdreht, dass am Ausgang 0 Volt anliegen. Nach Beendigung des Abgleichs liefert die Schaltung eine der Temperatur proportionale Spannung, wobei bei einer Temperatur von null Grad Celsius eine Ausgangsspannung von null Volt erzeugt wird und bei 100 Grad Celsius 10 Volt.

Last Update: 2006-Apr-21


Experiment: Aufbau einer Lichtschranke

Im folgenden Experiment soll eine einfache Lichtschranke aufgebaut werden, die allerdings nur in abgedunkelten Räumen oder in der Nacht funktioniert. Die folgende Abbildung zeigt den Aufbau des Empfängers der Lichtschranke. Als Fototransistor wird ein npn-Transistor im preisgünstigen Kunststoffgehäuse (z.B. BP103B) eingesetzt. Die Kollektor-Emitter-Strecke wird leitend, sobald Licht auf den Fototransistor trifft. Mit Hilfe der zweiten Transistorstufe, die vom Fototransistor aus- und eingeschaltet wird, wird ein Relais angesteuert, das bei genügend Lichteinfall anzieht. Die Ansprechschwelle der Lichtschranke kann durch das Potentiometer P1 eingestellt werden.

Empfänger einer Lichtschranke

Last Update: 2005-Okt-29


Experiment: 8fach-Inverter

Für das folgende Experiment wird die Mikrocomputerplatine uP1 und die Experimentierplatine DIGMLT benötigt. Es soll ein extrem einfaches Experiment aufgebaut werden, das die am parallelen Eingang anliegenden Logikpegel invertiert und an POUT wieder ausgibt. Dazu wird der Eingang PIN der Platine uP1 mit den Tasten der Platine DIGMLT verbunden, der Ausgang POUT mit den Leuchtdioden (Abbildung EXPINV).

Experiment: 8fach-Inverter

Das zugehörige Programm besteht aus nur vier Zeilen, die Funktion des Programms kann den Kommentaren entnommen werden:

;===================================================
;---- Experiment: Inverter -------------------------
;===================================================
;
                .GLOBAL INVERT
INVERT:  IN     A,(PIN)            ;Wert von PIN einlesen
         CPL                       ;Wert invertieren
         OUT    (POUT),A           ;Wert an POUT ausgeben
         JR     INVERT             ;nächster Durchlauf

Die Leuchtdioden der einzelnen Tasten (rot) und die Anzeige-Leuchtdioden (grün) müssen nun jeweils invertierte Zustände anzeigen. Schaltet man eine Taste von null auf eins, so muss sich der Zustand der entsprechenden Anzeige-LED von eins auf null ändern und umgekehrt.

Würde man dieses Miniprogramm an die Adresse $0000 im Speicher (EPROM im Minimalsystem) bringen, so könnte es nach dem Einschalten der Stromversorgung sofort ausgeführt werden. Man hätte dann einen (vergleichsweise sehr teuren) 8fach-Inverter zur Verfügung, der aber aufgrund der Ausführungszeiten des Mikroprozessors sehr langsam reagiert. Sieht man in der Tabelle der Z80-Befehle nach, welche Ausführungszeiten die einzelnen Befehle benötigen, so bekommt man für das obige Programm eine Ausführungszeit von 38 Taktzyklen, was bei einer Taktfrequenz von 4 MHz 9.5 µsek entspricht. Der Inverter reagiert also im schlechtesten Fall erst nach 9.5 µsek, was natürlich im Vergleich zu einem Hardware-Inverter extrem langsam ist (Faktor 1000).

Last Update: 2005-Okt-17


Experiment: RAM-Test

Dieses Experiment überprüft die Anwesenheit einer RAM-Zelle an einer bestimmten Adresse im Mikrocomputer. Dazu wird derselbe Aufbau verwendet, wie im vorigen Experiment (Abbildung EXPINV). Der von PIN eingelesene Wert wird nun an der Stelle MEMO in das RAM geschrieben. Dieser abgespeicherte Wert wird sofort wieder gelesen und am Port POUT ausgegeben. Falls an der Adresse MEMO ein funktionsfähiges RAM vorhanden ist, müssen die LED-Anzeige, die mit POUT verbunden ist, und die Tasten-LEDs für jede eingestellte Bitkombination dasselbe anzeigen.

Der Wert von MEMO - und damit die getestete Adresse - kann mit den DIP-Switches variiert werden. Mit dem DIP-Switch wird das obere Byte der Test-Adresse eingestellt, das untere Byte wird auf null gesetzt. Der RAM-Test muss im Adressbereich des EPROMs (0000H-8000H) versagen und im RAM-Bereich erfolgreich sein. In Speicherbereichen, wo kein RAM installiert ist, ändern die LEDs an POUT ihren Zustand nicht entsprechend den Eingangskombinationen.

;===================================================
;---- Experiment: RAM-Test -------------------------
;===================================================
;
            .GLOBAL RAMTST
RAMTST:     IN      A,(DIPSW)               ;Testadresse lesen
            LD      H,A
            LD      L,0                     ;HL enthält Adresse
            IN      A,(PIN)                 ;Wert von PIN einlesen
            LD      (HL),A                  ;Wert in RAM speichern
            LD      A,(HL)                  ;gespeich. Wert lesen
            OUT     (POUT),A                ;Wert an POUT ausgeben
            JR      RAMTST                  ;Schleife

Der Leser wird, falls in seinem System nur 8k x 8 RAM installiert sind, verblüfft feststellen, dass in Adressbereichen, wo der RAM-Test eigentlich versagen müsste (z.B. bei Adresse 0C000H), dieser trotzdem erfolgreich durchgeführt wird. Der Grund für dieses Verhalten liegt darin, dass die Selektionslogik für die Speicherbausteine nur unterscheidet zwischen dem Adressbereich des EPROMs und dem Adressbereich des RAMs - nicht belegte Adressen werden trotzdem selektiert. Man nennt solche scheinbar besetzten Adressen im Fachjargon auch 'gespiegelte Adressen'.

In der Praxis führt man Speichertests in ähnlicher Form durch, nur dass die Erzeugung und Überprüfung von Bitmustern der Computer übernimmt. Im Folgenden wird ein solches RAM-Testprogramm gezeigt. Es ist als Unterprogramm geschrieben, das als Eingangsparameter die erste und die letzte zu prüfende Adresse verlangt und als Ergebnis das Carry-Flag setzt, falls ein Speicherfehler aufgetreten ist. In diesem Fall gibt HL die Adresse des fehlerhaften Bytes an. Bei nicht gesetztem Carry-Flag trat innerhalb der angegebenen Grenzen kein Fehler auf.

Der folgende kleine Programmausschnitt zeigt eine Möglichkeit, diesen RAM-Test durchzuführen. Zuerst werden die Register HL und DE mit der Start- und der Endadresse geladen, dann der RAM-Test durchgeführt und dann, falls ein Fehler aufgetreten ist, wird die Adresse des fehlerhaften Bytes ausgedruckt.

...
            LD      HL,MEMST                ;Startadresse
            LD      DE,MEMEND               ;Endadresse
            CALL    RAMTST                  ;RAM-Test durchführen
            CALL    C,PRTHL                 ;Fehler: Adresse drucken
...

Das Unterprogramm RAMTST benötigt als Eingabe die Start- und die Endadresse innerhalb derer der Test durchgeführt werden soll. Beim Test werden zwei komplementäre Bitmuster in jede Speicherzelle geschrieben, so dass jedes Bit im überprüften Speicherbereich einmal auf null und einmal auf eins gesetzt wird.

;==================================================

;------ RAM-Test ----------------------------------

;==================================================

;

;ENTRY:     HL ... Startadresse
;           DE ... Endadresse
;EXIT:      CF = 0 ---> alles OK
;           CF = 1 ---> Fehler auf Adresse HL
;
RAMTST:     LD      A,055H                  ;Muster 01010101 laden
            LD      (HL),A                  ; und speichern
            CP      (HL)                    ;prüfen, ob korrekt
            JR      NZ,$L1                  ;wenn nicht ----> EXIT
            LD      A,0AAH                  ;Muster 10101010 laden
            LD      (HL),A                  ; und speichern
            CP      (HL)                    ;prüfen, ob korrekt
            JR      NZ,$L1                  ;wenn nicht ----> EXIT
            INC     HL                      ;nächste Adresse
            PUSH    HL
            XOR     A
            SBC     HL,DE                   ;vergleiche Endadresse
            POP     HL
            JR      C,RAMTST                ;nächster Durchlauf ?
            JR      Z,RAMTST
            SCF                             ;fehlerfrei ----> CF=0
            CCF
            RET
            $L1:    SCF                     ;Fehler ----> CF=1
            RET

Last Update: 2005-Okt-17


Home [image] Experimente [image] Mikroprozessorsystem [image] Lauflicht
Index
Siehe auch: Experiment: Parallel ablaufende Programme: Sinusgenerator und Lauflicht

Experiment: Lauflicht

Das folgende Experiment verwendet einen Rotationsbefehl zur Erzeugung eines Lauflichts. Der Aufbau der Versuchsanordnung entspricht der im Experiment 8fach-Inverter dargestellten Anordnung. Das Lauflicht wird erzeugt, indem zu Beginn des Programms ein Bit des Registers A auf eins und alle anderen auf null gesetzt werden. Der Inhalt des Akkumulators wird an den Port POUT ausgegeben und dann um ein Bit nach rechts rotiert. Nach einer Verzögerung von etwa 150 ms wird der Registerinhalt erneut nach rechts rotiert und wieder ausgegeben. Durch diese Schleife wird das eine gesetzte Bit dauernd im Kreis geschickt.

;===================================================
;---- Experiment: Lauflicht ------------------------
;===================================================
;
            .GLOBAL LAUFL
LAUFL:      LD      A,1         ;Initialisierung
$L1:        OUT     (POUT),A    ;Ausgabe auf POUT
            RRCA                ;Bit schieben
            LD      HL,10000    ;Länge der Verzögerung
            CALL    DELAY
            JR      $L1         ;Endlosschleife
;
;===================================================
;------ Verzögerung --------------------------------
;===================================================
;
;ENTRY:     HL ... Zahl der Schleifendurchläufe
;EXIT:      Verzögerung um 26*HL + 47 Takte,
;           falls keine Wartezyklen etc. aufgetreten sind
;
            .GLOBAL DELAY
DELAY:      PUSH    AF          ;Wert von AF sichern
            PUSH    HL          ;Wert von HL sichern
$1:         DEC     HL
            LD      A,L         ;Test, ob HL=0
            OR      H
            JR      NZ,$1       ;Schleife, falls HL<>0
            POP     HL          ;alten Wert von HL und
            POP     AF          ;  AF wiederherstellen
            RET

Dieses kleine Programm verwendet ein Unterprogramm, das die Verzögerung zwischen den einzelnen Rotationsschritten erzeugt. Da solche Programme, die eine einstellbare Verzögerung erzeugen, öfters benötigt werden, ist es sinnvoll, ein solches Programm als Unterprogramm zu formulieren, dem als Parameter die Dauer der Verzögerung übergeben wird.

Das Unterprogramm DELAY übernimmt im Register HL den Verzögerungsparameter. Dieser gibt an, wie viele Schleifendurchläufe das Programm machen soll. Pro Durchlauf benötigt es 26 Takte, was bei einer Taktfrequenz von 4 MHz einer Zeit von 7.5 µsek entspricht. Man beachte, dass der Aufruf des Programms und das Sichern der verwendeten Register auch eine gewisse Zeit benötigen, was sich in der von der Routine benötigten Gesamtzeit niederschlägt (47 zusätzliche Takte ohne CALL).

Zu Beginn des Programms werden die Register HL und A auf den Stack gelegt, da sie während der Programmausführung verändert werden. Die Verzögerungsschleife selbst besteht nur aus einem Dekrementieren von HL und der Abfrage, ob HL gleich null ist. Wenn dies der Fall ist, werden HL und A wieder in den ursprünglichen Zustand gebracht (vom Stack geladen) und das Programm wird mit RET verlassen.

Last Update: 2005-Okt-17


Experiment: Zähler mit einstellbarer Geschwindigkeit

Im Folgenden Experiment wird ein binärer 8-Bit-Zähler aufgebaut, dessen Zählfrequenz über die Parallelschnittstelle PIN eingestellt werden kann. Der Aufbau der Versuchsanordnung entspricht wieder der Abbildung des 8fach-Inverters. Zu Beginn des Programms wird das als Zähler ausgewählte Register C auf null gesetzt. Dann wird der Zählerstand auf dem Port POUT ausgegeben und das Register inkrementiert. Im letzten Teil des Programms wird auf den Eingangsport PIN zugegriffen und an eine Verzögerungsschleife der von PIN gelieferte Wert übergeben. Dadurch kann die Verzögerung bis zum nächsten Schleifendurchlauf und damit die Zählfrequenz über die an PIN angeschlossenen Tasten eingestellt werden.

;===================================================
;---- Experiment: Zähler ---------------------------
;===================================================
;
            .GLOBAL EXPCNT
EXPCNT:     LD      C,0         ;Zähler initial.
$L1:        LD      A,C         ;Zähler in A laden
            OUT     (POUT),A    ;auf POUT ausgeben
            INC     C
            IN      A,(PIN)     ;Verzögerung von PIN
            LD      H,A         ;Wert in HL bringen
            LD      L,0
            CALL    DELAY       ;Verzögerung asuführen
            JR      $L1         ;Schleife

Last Update: 2005-Okt-08


Experiment: Emulation von Gattern

Im nächsten Experiment werden verschiedene Gatterfunktionen emuliert: UND, ODER und XOR. Der Aufbau des Experiments entspricht der Abbildung EXPINV. PIN des Minimalsystems ist wieder mit den Tasten der Platine DIGMLT verbunden, POUT ist mit den Leuchtdioden von DIGMLT verbunden.

Die Abbildung zeigt den Aufbau des Experiments als Ersatzschaltbild mit den nachgebildeten logischen Funktionen. Jeweils zwei benachbarte Tasten bilden die Eingänge für das entsprechende Gatter, die Ausgänge der Gatter sind mit je einer Leuchtdiode verbunden.

Experiment: Gatteremulation

Das Programm zur Gatteremulation funktioniert folgendermaßen: In jedem Zyklus des Programms wird zuerst über PIN der Zustand der Tasten eingelesen und im Register B gespeichert. Außerdem wird eine Kopie des Tastenzustandes um ein Bit nach rechts geschoben und in Register C abgelegt. Dadurch liegen in den Registern B und C die den Eingängen der jeweiligen Gatter entsprechenden Bits an derselben Stelle. Nun wird für jedes der Gatter eine entsprechende logische Operation zwischen B und C durchgeführt und das Ergebnis mit dem Inhalt von Register E verknüpft. Am Ende wird der Inhalt von E auf POUT ausgegeben und der nächste Zyklus gestartet.

;===================================================
;---- Experiment: Gatteremulation ------------------
;===================================================
;
            .GLOBAL EXGATE
EXGATE:     IN      A,(PIN)     ;Wert von PIN einlesen
            LD      B,A         ;in B retten
            SRA     A           ;ein Bit nach rechts
            LD      C,A         ;in C retten
            LD      E,0         ;E auf null setzen
;
            LD      A,B         ;Eingangswert holen
            AND     C           ;logisches UND
            AND     01H         ;Ergebnis maskieren
            LD      E,A         ;Ergebnis in E
;
            LD      A,B         ;Eingangswert holen
            OR      C           ;logisches ODER
            AND     04H         ;Ergebnis maskieren
            OR      E           ;mit altem Erg. verknüpfen
            LD      E,A         ;Resultat in E abspeichern
;
            LD      A,B         ;Eingangswert holen
            XOR     C           ;logisches XOR
            AND     10H         ;Ergebnis maskieren
            OR      E           ;mit vorigen Erg. verknüpfen
;
            OUT     (POUT),A    ;Ausgabe des Resultats
            JR      EXGATE      ;nächster Durchgang

Last Update: 2005-Okt-17


Z80-CTC

Die nächsten zwei Experimente zeigen den Einsatz eines CTC als Stoppuhr bzw. als Frequenz-Messgerät. Bei den beiden Experimenten werden Kanal 0 und Kanal 3 des CTC eingesetzt. CTC3 wird im Timer-Modus betrieben und dient zur Erzeugung einer Zeitbasis mit 1 ms Auflösung. CTC0 wird als Zähler betrieben. Beide CTC-Kanäle erzeugen Interrupts, die im Folgenden kurz besprochen werden.

Kanal 3 des CTC wird so eingestellt, dass er den CPU-Takt (4.000 MHz) durch 4000 teilt und im Abstand von 1 ms einen Interrupt generiert. Die Interrupt-Serviceroutine ICLOCK verwaltet nun zwei zeitgesteuerte Vorgänge. Zum einen wird nach 1000 Interruptaufrufen (= alle 1.000 s) der Zählerstand für das FrequenzMessgerät ermittelt und zum anderen wird alle 10 Aufrufe (= 0.01 s) der Wert der Stoppuhr weitergezählt. Diese beiden Vorgänge bilden die Zeitbasis für die Stoppuhr und das FrequenzMessgerät.

Kanal 0 des CTC dient als Zähler bei der Frequenzmessung. Da jeder CTC-Kanal nur acht Bit breit ist und eine Kaskadierung nicht möglich ist (die Kanäle 1 und 2 werden zur Baudratenerzeugung benötigt), wird die Zählerbreite von Kanal 0 per Software erweitert. Dazu wird der CTC-Kanal so programmiert, dass nach jedem Nulldurchgang (Overflow) ein Interrupt generiert wird. Die entsprechende Serviceroutine (IFREQ) inkrementiert nun eine Variable, so dass sich der Gesamtzählerstand aus dem Wert der Variablen und dem Wert von Kanal 0 ergibt. Zu beachten ist, dass die CTC-Kanäle aus Abwärtszählern aufgebaut sind, das Ergebnis also vor der Weiterverarbeitung invertiert werden muss, wenn das Zeitkonstantenregister auf null gesetzt ist.

;===================================================
;------ INTERRUPT: CTC Kanal 0 ---------------------
;===================================================
;
IFREQ: PUSH AF
            LD      A,(FQHB)
            INC     A
            LD      (FQHB),A
            POP     AF
            EI
            RETI
;
;===================================================
;------ INTERRUPT: CTC Kanal 3 ---------------------
;===================================================
;
ICLOCK: PUSH        AF
            PUSH    HL
            LD      HL,(SEK)    ;Sekundenzähler für
            DEC     HL          ;  Zeitbasis Frequenz-
            LD      (SEK),HL    ;  zähler
            LD      A,H
            OR      L
            JR      NZ,$1
            LD      HL,1000     ;neu laden
            LD      (SEK),HL
            IN      A,(CTC0)    ;Messwert übernehmen
            NEG
            LD      (FREQ),A
            LD      A,(FQHB)
            LD      (FREQ+1),A
            LD      A,0         ;Überlaufvariable
            LD      (FQHB),A    ;  rücksetzen
            LD      A,03H
            OUT     (CTC0),A
            LD      A,C5H       ;Zähler neu laden
            OUT     (CTC0),A
            LD      A,0
            OUT     (CTC0),A
;
$1:         LD      A,(HSEK)    ;Hundertstel Sekunden
            DEC     A           ;  für Stoppuhr
            LD      (HSEK),A
            JR      NZ,$2
            LOAD    HSEK,10
            LD      HL,(CLKCNT) ;clock (10 ms)
            INC     HL
            LD      (CLKCNT),HL
$2:         POP     HL
            POP     AF
            EI
            RETI
;
            .DATA
CLKCNT:     DEFW    0           ;Zähler für Uhr
HSEK:       DEFB    0           ;10 ms Zähler
SEK:        DEFW    0           ;Sekundenzähler
FREQ:       DEFW    0           ;Frequenz
FQHB:       DEFB    0           ;Overflow - Frequenz
            .CODE

Last Update: 2007-Jän-03


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-CTC [image] Stoppuhr
Index
Siehe auch: Frequenzzähler mit CTC 0

Experiment: Stoppuhr

Im folgenden Experiment wird eine Stoppuhr aufgebaut, die mit einer Auflösung von 10 ms eine maximale Zeitdauer von ca. fünf Minuten messen kann. Folgende Abbildung zeigt den Aufbau des Experiments. Es werden die Platinen uP1, SERPAR, 7SGDSP und DIGMLT verwendet. Die Stoppuhr wird von zwei Tasten (T1 und T2 der Platine DIGMLT) bedient, wobei mit Taste T1 die Stoppuhr gestartet und angehalten werden kann, mit Taste T2 wird die Stoppuhr auf null gesetzt.

Experiment: Stoppuhr

Statt der Tasten kann natürlich auch ein beliebiges anderes elektrisches TTL-Signal verwendet werden. Zu beachten ist, dass die beiden Tastenanschlüsse verschieden reagieren. Der Anschluss für T1 ist pegelsensitiv (LOW=Uhr angehalten, HIGH=Uhr läuft), der Anschluss für T2 reagiert auf jede Veränderung des Eingangssignals.

Das unten abgedruckte Listing zeigt die Implementation der Stoppuhr. Der Kanal 3 des CTC erzeugt jede ms einen Interrupt. In der Interrupt-Serviceroutine wird ein Zähler alle 10 ms inkrementiert. Da die grundlegende Funktion der Stoppuhr, nämlich die Erzeugung eines periodisch inkrementierten Wertes, bereits in der Interruptroutine erledigt wird, beschränkt sich das Stoppuhrenprogramm lediglich auf die Manipulation der Interruptquelle und des Zeitzählers (Variable CLKCNT).

Das Programm überprüft zunächst, ob sich der Wert der Variablen CLKCNT seit dem letzten Schleifendurchgang geändert hat. Falls dies der Fall ist, wird der neue Wert am Display ausgegeben. Dann werden die Tasten T1 und T2 überprüft. Liegt T1 auf HIGH, wird dem Kanal 3 des CTC erlaubt, einen Interrupt (Routine CLKGO) zu erzeugen; liegt T1 auf LOW, wird der Interrupt von CTC-3 abgeschaltet (Routine CLKSTP). Dies entspricht dem Starten und Stoppen der Stoppuhr. Ist Taste T2 umgeschaltet worden, so wird die Zählervariable CLKCNT auf null gesetzt.

;===================================================
;------ Experiment: Stoppuhr mit CTC 3 -------------
;===================================================
;
            .GLOBAL STPCLK
STPCLK:     IN      A,(PIN)     ;Status der Tasten
            AND     03
            LD      B,A
            LD      HL,0A5A5H   ;erste Anzeige
            LD      (LASTCK),HL ;  erzwingen
$LOOP1:     LD      DE,(CLKCNT) ;Zeit anzeigen
            LD      HL,(LASTCK) ;  nur wenn Änderung
            XOR     A
            SBC     HL,DE
            JR      Z,$4
            EX      DE,HL       ;neuer Wert
            LD      (LASTCK),HL ;  = alter Wert
            CALL    DSPHL       ;Anzeige
            LD      C,2
            CALL    SETDP
$4:         IN      A,(PIN)     ;Tasten prüfen
            AND     03
            XOR     B           ;Veränderung ?
            JR      Z,$LOOP1
            BIT     1,A         ;Reset ?
            JR      Z,$1
            LD      HL,0        ;Uhr rücksetzen
            LD      (CLKCNT),HL
            IN      A,(PIN)
            AND     03
            LD      B,A         ;Tasten aktualisieren
            JR      $LOOP1
$1:         IN      A,(PIN)     ;Start/Stop ?
            AND     03
            LD      B,A         ;Tasten aktualisieren
            BIT     0,A
            CALL    NZ,CLKGO
            CALL    Z,CLKSTP
            JR      $LOOP1
;
            .DATA
LASTCK:     DEFW    0           ;letzer Zeitwert
            .CODE
;
;===================================================
;------ Start clock (CTC 3) ------------------------
;===================================================
;
CLKGO:      PUSH    AF          ;Interrupt erlauben
            LD      A,081H
            OUT     (CTC3),A
            POP     AF
            RET
;
;===================================================
;------ Stop clock (CTC 3) -------------------------
;===================================================
;
CLKSTP:     PUSH    AF          ;Interrupt abschalten
            LD      A,001H
            OUT     (CTC3),A
            POP     AF
            RET

Last Update: 2005-Okt-17


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-CTC [image] Frequenzmessgerät
Index
Siehe auch: Frequenzzähler mit CTC 0

Experiment: Frequenzmessgerät

Das im Folgenden aufgebaute Frequenzmessgerät erlaubt die Messung der Frequenz eines Rechtecksignals mit einer Auflösung von 2 Hz im Bereich von 0 bis 32 kHz. Die Abbildung zeigt den Aufbau. Es werden die Platinen uP1, SERPAR und 7SGDSP verwendet. Das Prinzip des Frequenzmessgeräts ist einfach: Es werden über den Kanal 0 des CTC alle Eingangsimpulse eine Sekunde lang gezählt und der Wert wird dann auf dem Display ausgegeben.

Experiment: Frequenzmessgerät

Das Steuerprogramm für das Frequenzmessgerät ist sehr einfach aufgebaut, da die eigentliche Messfunktion in der Interruptroutine der Zeitbasis ausgeführt wird. Das Programm braucht also nur mehr den Messwert am Display ausgeben, wenn sich dieser verändert hat. Nach der Initialisierung läuft das Programm in einer Endlosschleife, in der permanent das Display aktualisiert wird.

;===================================================
;------ Experiment: Frequenzzähler mit CTC 0 -------
;===================================================
;
            .GLOBAL FQCNT
FQCNT:      LD      A,C5H       ;Zähler initial.
            OUT     (CTC0),A
            LD      A,0
            OUT     (CTC0),A
            CALL    CLKGO       ;Zeitbasis starten
            LOAD    FQHB,0      ;Overflow rücksetzen
            LD      HL,0
            LD      (FREQ),HL
            INC     HL
            LD      (LASTFQ),HL ;Anzeige erzwingen
$1:         LD      DE,(FREQ)
            LD      HL,(LASTFQ)
            XOR     A
            SBC     HL,DE
            JR      Z,$1
            LD      (LASTFQ),DE ;Anzeige nur, wenn
            EX      DE,HL       ;  Wert geändert
            ADD     HL,HL       ;Jumper J3 auf Q0
            CALL    DSPHL
            LD      C,3
            CALL    SETDP
            JR      $1
;
            .DATA
LASTFQ:     DEFW    0           ;letzter Frequenzwert
            .CODE
Hinweis:

Zur korrekten Funktion des Programms ist es notwendig, dass Jumper J3 auf der Platine SERPAR den Zählereingang mit Q0 des Vorteilers verbindet.

Last Update: 2005-Okt-17


Z80-DART

Die folgenden Experimente beruhen auf einer interruptgesteuerten Ein- und Ausgabe von Zeichen auf der seriellen Schnittstelle. Dies hat den Vorteil, dass die Programme zur Bedienung der seriellen Schnittstelle sehr einfach aufgebaut sind, da die Verwaltung des Schnittstellenbausteins (DART) wegfällt. Aus der Sicht der Anwenderprogramme reduziert sich also der Aufwand zum Senden und Empfangen von Zeichen auf der seriellen Leitung auf den Aufruf von je einem Unterprogramm (RDV24A und WRV24A für den Kanal A des DART bzw. RDV24B und WRV24B für Kanal B). Der Aufwand in den Interruptroutinen ist dafür etwas höher. Die folgende Beschreibung soll kurz zeigen, wie die interruptgesteuerte Ein- und Ausgabe funktioniert.

Empfangen von Zeichen

Die zentrale Datenstruktur zum interruptgesteuerten Empfang von Zeichen ist ein Eingangspuffer, der als FIFO organisiert ist. Für jede serielle Schnittstelle existiert ein solcher Puffer (VARDBF, VBRDBF). Wird ein Signal auf der seriellen Schnittstelle empfangen, so sendet der DART einen Interrupt an die CPU. Die Interruptroutine (GETICA für DART-A bzw. GETICB für DART-B) liest nun das Zeichen aus dem Empfangsregister des entsprechenden DART-Kanals und schreibt dieses in den Eingangspuffer. Ein Anwenderprogramm kann nun asynchron zu den Interrupts die Zeichen aus dem Empfangspuffer mit Hilfe der Prozedur RDV24A (bzw. RDV24B) lesen.

Im Folgenden sind die interruptgesteuerte Empfangsroutine (GETICA) und die Leseroutine (RDV24A) für den Kanal A des DART abgedruckt. Für den Kanal B existieren ähnliche Routinen (siehe Source-Listing im Anhang).

;===================================================
;------ INTERRUPT: receiver DART-A full ------------
;===================================================
;
            .GLOBAL GETICA
GETICA:     PUSH    AF
            PUSH    HL
            PUSH    DE
            PUSH    BC
            IN      A,(DARTAD)  ;Zeichen einlesen
;
$5:         LD      HL,CNTRLA
            DEC     (HL)        ;Control-Bearbeitung
            INC     (HL)        ;  ein ?
            JR      Z,$2
;
            IFA.NE. 'S'-40H,$3  ;^S ?
            LD      HL,STPOTA
            LD      (HL),TRUE   ;Ausgang stoppen
            JR      $1
;
$3:         IFA.NE. 'Q'-40H,$6  ;^Q ?
            LD      HL,STPOTA
            LD      (HL),FALSE  ;Ausgang starten
            CALL    TRMDTA
            JR      $1
;
$6:         IFA.EQ. 'C'-40H,$4  ;^C ?
;
$2:         LD      HL,VARDBF   ;Zeichen in FIFO
            CALL    WRFIFO
            LD      HL,VARDBF   ;RTS gesetzt ?
            CALL    TSTFIF
            CP      0FAH        ;mehr als 250 Zeichen
            JR      C,$1        ;  im Puffer ?
            LD      A,5
            OUT     (DARTAC),A
            LD      A,(DAREG5)
            RES     1,A
            LD      (DAREG5),A
            OUT     (DARTAC),A  ;RTS rücksetzen
$1:         POP     BC
            POP     DE
            POP     HL
            POP     AF
            EI
            RETI
;
$4:         LD      HL,WARM     ;Warmstart
            PUSH    HL
            LD      HL,STPOTA   ;Ausgang ein
            LD      (HL),FALSE
            EI
            RETI
;
;===================================================
;----- read character from DART A ------------------
;===================================================
;
;ENTRY:     -
;EXIT:      CF = 1, falls kein Zeichen vorhanden
;           CF = 0, falls Zeichen gültig
;           Zeichen in Akkumulator
;
            .GLOBAL RDV24A
RDV24A:     PUSH    HL
            PUSH    BC
            LD      HL,VARDBF   ;RTS gesetzt
            CALL    TSTFIF
            CP      100         ;weniger als 100
            JR      NC,$1       ;  Zeichen im Puffer ?
            LD      A,5
            OUT     (DARTAC),A
            LD      A,(DAREG5)
            SET     1,A
            LD      (DAREG5),A
            OUT     (DARTAC),A  ;RTS rücksetzen
$1:         LD      HL,VARDBF
            CALL    RDFIFO
            POP     BC
            POP     HL
            RET

Nach dem Einlesen des Zeichens vom DART wird überprüft, ob eine Bearbeitung von Steuerzeichen erwünscht ist. Wenn dies nicht der Fall ist, wird das Zeichen in den Empfangspuffer geschrieben und die Interruptroutine beendet. Bei gewünschter Bearbeitung von Steuerzeichen (Variable CNTRLA = TRUE) wird geprüft, ob das empfangene Zeichen ^Q, ^S oder ^C ist. Darauf werden entsprechende Aktionen gesetzt. ^S und ^Q dienen zur Steuerung des Datenflusses auf dem Transmitter der Schnittstelle, ^C dient als Steuerzeichen für einen Warmstart.

Achtung! Die Steuerzeichen ^S und ^Q sind nicht für Software-Handshake vorgesehen, sie sind lediglich zur Bequemlichkeit des Benutzers implementiert, um lange Ausgaben stoppen zu können. Zur Steuerung des Datenstroms ist Hardware-Handshaking vorgesehen (Leitungen RTS und CTS). Dazu wird die Leitung RTS aktiviert, wenn mehr als 250 Zeichen im Empfangspuffer sind. RTS wird deaktiviert, wenn weniger als 100 Zeichen im Puffer sind. Durch dieses Verfahren wird der ankommende Datenfluss erst gestoppt, wenn der Empfangspuffer überzulaufen droht. Nachdem der Sender gestoppt worden ist, darf er erst wieder senden, wenn nur mehr 100 Zeichen im Puffer sind. Der Puffer wird durch die Routine RDV24A geleert.

Senden von Zeichen

Das Senden von Zeichen auf der seriellen Schnittstelle erfolgt ebenfalls über ein FIFO, das asynchron mit Zeichen gefüllt wird (WRV24A) und aus dem die Zeichen per Interrupt abgeholt werden (PUTICA). Das folgende abgedruckte Programm zeigt die beiden für die Verwaltung des Senders der Schnittstelle DART-A erforderlichen Programme (WRV24A und PUTICA).

;===================================================
;------ INTERRUPT: Zeichen auf DART-A senden -------
;===================================================
;
PUTICA:     CALL    TRMDTA      ;ein Zeichen senden
            EI
            RETI
;
            .GLOBAL TRMDTA
TRMDTA:     PUSH    AF
            PUSH    HL
            IFTRUE  STPOTA,$1   ;^S ?
            LD      HL,VAWRBF
            CALL    RDFIFO
            JR      C,$2
            OUT     (DARTAD),A  ;Zeichen ausgeben
$1:         POP     HL
            POP     AF
            RET
;
$2:         LOAD    USOTLA,TRUE
            LD      A,1         ;Interrupt abschalten
            OUT     (DARTAC),A
            LD      A,(DTAWR1)
            RES     1,A
            LD      (DTAWR1),A
            OUT     (DARTAC),A
            JR      $1
;
            .DATA
DTAWR1: DEFB        0           ;Interrupt DART A
            .CODE
;
;===================================================
;---- Ausgabe eines Zeichens auf DART-A ------------
;===================================================
;
;ENTRY: Zeichen in AKKU
;EXIT:      Zeichen in den Spooler-Puffer geschrieben
;
            .GLOBAL WRV24A
WRV24A:     PUSH    AF
            PUSH    HL
            PUSH    DE
$1:         LD      HL,VAWRBF   ;Spooler voll ?
            DI
            CALL    WRFIFO      ;Zeichen schreiben
            EI
            JR      C,$1        ;FIFO voll, warten
            DI
            IFFALSE USOTLA,$2       ;Spooler leer ?
            LOAD    USOTLA,FALSE            ;Spooler empty flag
            LD      A,1         ;  rücksetzen
            OUT     (DARTAC),A
            LD      A,(DTAWR1)
            SET     1,A
            LD      (DTAWR1),A
            OUT     (DARTAC),A
            CALL    TRMDTA      ;erstes Zeichen senden
$2:         EI
            POP     DE
            POP     HL
            POP     AF
            RET

Die Routine WRV24A übernimmt das zu sendende Zeichen und speichert es in einem FIFO (Variable VAWRBF) ab. Aus diesem Puffer werden die Zeichen von der interruptgesteuerten Routine PUTICA abgeholt und über den DART ausgegeben. Da der Sender des DART einen Interrupt erzeugt, nachdem ein Zeichen gesendet wurde, kann das erste Zeichen nicht über einen Interrupt gesendet werden. Die interruptgesteuerte Datenübertragung muss also erst durch ein erstes Zeichen gestartet werden. Dies geschieht in der Routine WRV24A, in dem ein Flag (Variable USOTLA) überprüft wird, das anzeigt, ob der Sender des DART aktiv ist. Falls dieser inaktiv ist, wird ein erstes Zeichen an den Sender ausgegeben und damit die weitere interruptgesteuerte Ausgabe gestartet.

Last Update: 2007-Jän-03


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-DART [image] Serielle Ausgabe von Zeichen
Index
Siehe auch: Serielle Schnittstelle

Experiment: Serielle Ausgabe von Zeichen

Im folgenden Experiment sollen die verschiedenen Parameter des Protokolls einer seriellen Schnittstelle untersucht werden. Dazu wird mit Hilfe der auf der Platine SERPAR vorhandenen Schnittstelle, einem Oszilloskop und der Platine DIGMLT der in der Abbildung gezeigte Aufbau gemacht. Der Eingang PIN (Platine uP1) wird über ein Flachbandkabel mit den Tasten der Platine DIGMLT verbunden, der Sender der seriellen Schnittstelle (Kanal A) wird mit dem Eingang des Oszilloskops verbunden.

Experiment: Protokoll der seriellen Schnittstelle

Im Experiment soll ein einzelnes, über die Tasten binär eingestelltes Zeichen wiederholt gesendet und am Oszilloskop dargestellt werden. Dazu wird der Trigger des Oszilloskops auf die positive Flanke eingestellt, damit das Startbit immer sichtbar ist. Das Protokoll der Schnittstelle kann über den DIP-Schalter der Platine uP1 eingestellt werden, wobei die Schalterkombinationen folgende Bedeutung haben (Voraussetzung - Jumper J2 verbindet den CTC mit 1.536 MHz):

Schalter | Bedeutung
8,7,6 | Baudrate: OFF OFF OFF = 150 Baud OFF OFF ON = 300 Baud OFF ON OFF = 600 Baud OFF ON ON = 1200 Baud ON OFF OFF = 2400 Baud ON OFF ON = 4800 Baud ON ON OFF = 9600 Baud ON ON ON = 19200 Baud
5 | Zahl der Datenbits: OFF = 7 Datenbits ON = 8 Datenbits
4 | Parity aus/ein: ON = Paritybit wird erzeugt OFF = Paritybit wird nicht erzeugt
3 | Art des Paritybits: OFF = Even Parity ON = Odd Parity
2 | Zahl der Stoppbits ON = 2 Stoppbits OFF = 1 Stoppbit
1 | unbenutzt

Das Programm zur Durchführung dieses Experiments läuft als Endlosschleife und führt die folgenden Aktionen durch. Zuerst wird der DIP-Schalter auf Platine uP1 abgefragt und geprüft, ob sich sein Zustand seit der letzten Abfrage geändert hat. Wenn die Stellung des Schalters verändert worden ist, wird das Protokoll der seriellen Schnittstelle entsprechend der Schalterstellung neu eingestellt. Dann wird die Bitkombination der Tasten auf DIGMLT eingelesen und auf der seriellen Schnittstelle gesendet. Nach dem Senden wird etwa 70 ms gewartet und das Programm wieder von vorne durchgearbeitet.

;===================================================
;---- Experiment: Zeichen seriell senden -----------
;===================================================
;
            .GLOBAL BYTSND
BYTSND:     LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;ja, neues Protokoll
            IN      A,(PIN)     ;Tasten einlesen
            CALL    WRV24A      ;serielle Ausgabe
            LD      HL,4000     ;70 ms warten
            CALL    DELAY
            JR      BYTSND      ;nächste Runde
;
            .DATA
DSIMG:      DEFB    0           ;DIPSW-Einstellung
            .CODE

Man kann nun durch Einstellen verschiedener Stellungen des DIP-Schalters das Protokoll eines Zeichens beliebig verändern und am Oszilloskop ansehen. Der Leser sei dazu angeregt, zuerst mit 8-Bit-Daten und keinem Parity-Bit zu experimentieren und nur die Baudrate zu verstellen. Im nächsten Schritt wird bei einer fixen Baudrate (z.B. 1200 Baud) für ein fixes Zeichen (z.B. 'A') das Protokoll verändert. Abbildung PROTOCA zeigt das Ergebnis für den Buchstaben 'A' (ASCII 65, binär 01000001) für verschiedene Protokolle.

Serielle Übertragung des Buchstabens 'A' bei verschiedenen Protokollen

Last Update: 2005-Okt-17


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-DART [image] Empfang von Zeichen auf der seriellen Leitung
Index
Siehe auch: Serielle Schnittstelle

Experiment: Empfang von Zeichen auf der seriellen Leitung

Das folgende Experiment stellt das komplementäre Experiment zu dem vorangegangenen Versuch dar. Es werden Zeichen auf der seriellen Schnittstelle empfangen und als binäres Muster mit Hilfe von Leuchtdioden dargestellt. Dazu wird der in folgender Abbildung gezeigte Aufbau verwendet. Als Terminal kann man auch einen Personalcomputer mit einem Kommunikationsprogramm, z.B. Kermit oder Miniterm (siehe Lohninger 1989), verwenden.

Empfang von Zeichen auf der seriellen Schnittstelle

Das Programm zur Verwirklichung dieses Experiments ist sehr einfach. Es fragt zuerst ab, ob die Stellung des DIP-Switches auf der Hauptplatine uP1 geändert worden ist oder nicht. Dieser Schalter bestimmt das Protokoll der Schnittstelle. Wenn die Stellung geändert wurde, wird das Protokoll entsprechend geändert Daraufhin wird geprüft, ob sich im Empfangspuffer ein neues Zeichen befindet und, wenn dies der Fall ist, wird dieses auf den Leuchtdioden dargestellt.

;===================================================
;---- Experiment: Zeichen seriell empfangen --------
;===================================================
;
            .GLOBAL BYTREC
BYTREC:     LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;ja, neues Protokoll
            CALL    RDV24A      ;Zeichen einlesen
            JR      C,BYTREC    ;kein Zeichen
            OUT     (POUT),A    ;Zeichen auf LEDs
            JR      BYTREC      ;nächstes Zeichen

Last Update: 2005-Okt-17


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-DART [image] Protokoll einer seriellen Schnittstelle
Index
Siehe auch: Serielle Schnittstelle

Experiment: Protokoll einer seriellen Schnittstelle

Das folgende Experiment soll das Protokoll eines seriellen Datenstromes ändern. Es werden beide Schnittstellen der Platine SERPAR verwendet und es darf sowohl der ankommende Datenstrom als auch der abgesendete Datenstrom ein beliebiges, über DIP-Switches einstellbares Protokoll aufweisen. Um das entsprechende Programm aber nicht zu kompliziert werden zu lassen, wird der Datenstrom nur in eine Richtung übertragen (von DART-B auf DART-A).

Das Protokoll der beiden Schnittstellen wird mit dem auf der Platine uP1 enthaltenen DIP-Switch eingestellt. Schalter eins wird zur Auswahl der einzustellenden Schnittstelle verwendet: OFF = DART-A, ON = DART-B. Der Datenstrom kann außerdem durch einen LOW-Pegel an Bit 0 vom Eingang PIN angehalten werden.

Bei diesem Experiment tritt ein kleines Problem auf, wenn die Baudrate des Senders größer als die Baudrate des Empfängers ist. In diesem Fall werden vom Mikrocomputer uP1 mehr Zeichen empfangen als abgesendet werden können, und der interne Empfangspuffer wird immer voller und droht überzulaufen. Um dem abzuhelfen, ist es unbedingt notwendig, dass die Handshake-Leitungen (zumindest von DART-B) korrekt verdrahtet sind.

Empfang von Zeichen auf der seriellen Schnittstelle

Die Abbildung zeigt die Versuchsanordnung bei Verwendung eines Personalcomputers als Datensender und eines Terminals als Datenempfänger. Der Leser kann z.B. das Terminal (DART-A) auf 1200 Baud einstellen und den Personalcomputer auf 9600 Baud. Wenn alles richtig verdrahtet ist, wird der Datenstrom des Personalcomputers periodisch angehalten. Wichtig ist, dass am Personalcomputer zum Senden der Daten ein Programm verwendet wird, dass die Handshake-Leitungen auch benutzt, sonst wird es immer zu einem Überlauf des Puffers und damit zu Übertragungsfehlern kommen.

Das im IBM-PC-Bereich oft verwendete Kommunikationsprogramm KERMIT ist für dieses Experiment nicht geeignet, da es Hardware-Handshaking nicht unterstützt. Falls die Versuchsanordnung entsprechend Abbildung verwendet wird, sendet man am besten ein langes Textfile mit folgenden Kommandos an den Protokoll-Umsetzer:

L 10,R 79
MODE COM1:9600,N,8,1,-
MODE LPT1:=COM1:
^P
TYPE filename.ext

Durch diese Befehle wird die Schnittstelle auf 9600 Baud eingestellt, der Druckerkanal auf die Schnittstelle gelegt und dann mit ^P alle Zeichen, die auf den Bildschirm ausgegeben werden, auch auf den Druckerkanal (COM1) gesendet. Mit 'TYPE filename.ext' wird eine Datei nun sowohl am Bildschirm als auch am Druckerkanal gesendet.

;===================================================
;---- Experiment: Protokoll-Umsetzung --------------
;===================================================
;
            .GLOBAL PROTOC
PROTOC:     IN      A,(DIPSW)   ;DIP-switch geändert ?
            LD      HL,DSWIMG
            CP      (HL)
            JR      Z,$1
            LD      (HL),A
            BIT     0,A         ;DART-A oder DART-B
            CALL    NZ,SETPDB
            CALL    Z,SETPDA
$1:         IN      A,(PIN)     ;Datenfluss stoppen ?
            BIT     0,A
            JR      Z,PROTOC    ;ja
            CALL    RDV24B      ;Zeichen von DART-B
            JR      C,PROTOC    ;kein Zeichen
$2:         CALL    WRV24A      ;Zeichen senden (DART-A)
            JR      C,$2        ;warten, wenn Puffer
            JR      PROTOC      ;  voll, nächste Runde
;
            .DATA
DSWIMG:     DEFB    0           ;DIP-Switch Stellung
            .CODE

Das Programm dieses Protokoll-Umsetzers ist sehr einfach. Zuerst wird der DIP-Switch der Platine uP1 gelesen und wenn sich die Schalterstellung geändert hat das Protokoll der ausgewählten Schnittstelle geändert. Im nächsten Schritt wird abgefragt, ob der Datenfluss gestoppt ist (Bit 0 von PIN). Fall der Datenfluss nicht gestoppt ist, wird versucht ein Zeichen von DART-B zu lesen und - falls ein Zeichen vorhanden ist - dieses auf DART-A zu senden. Der Handshake-Vorgang wird durch die Treiber der Schnittstellen vorgenommen, der Anwender braucht daran keine Zeit zu verschwenden.

Last Update: 2005-Okt-17


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-PIO [image] Tastatur mit 16 Tasten
Index
Siehe auch: Z80-PIO (Z8420)

Experiment: Ansteuerung einer Tastatur mit 16 Tasten

Das folgende Experiment soll ein Verfahren zur Ansteuerung einer Tastatur zeigen. Dazu wird entsprechend Abbildung exkeyb16 eine Tastatur aus 16 Aus-/Ein-Tastern aufgebaut. Die Tasten werden quadratisch in Reihen zu je vier Elementen angeordnet und die entstandene Tastenmatrix wird mit insgesamt acht Leitungen an die PIO angeschlossen. Die PIO wird nun so programmiert, dass vier Leitungen (in diesem Beispiel die horizontalen Leitungen) als Eingänge geschaltet sind und die anderen vier als Ausgänge.

Bedienung einer Tastatur mit 16 Tasten

Das Abtasten der Tastenmatrix geschieht nun in der Weise, dass von den Ausgangsleitungen jeweils eine auf HIGH gelegt wird und alle Eingangsleitungen gelesen werden. Sind eine oder mehrere Tasten, die mit der gerade aktiven Ausgangsleitung verbunden sind, gedrückt, so spiegelt sich dies in den Bits des Eingangsmusters wider. Nach der Ansteuerung aller Ausgangsleitungen hat man ein Abbild aller gedrückten Tasten in Form einer Bitmap.

Nachdem das unten aufgeführte Steuerprogramm die Schnittstelle entsprechend initialisiert hat, läuft es in einer Endlosschleife, in der zuerst die Tastatur entsprechend dem eben beschriebenen Verfahren abgetastet wird und dann die Bitmap (Variable INPAT) zu einer 16-Bit-Variablen zusammengefasst wird und als Zahl am Display ausgegeben wird. Ist keine Taste gedrückt, so zeigt die Anzeige den Wert null an.

;===================================================
;------ Experiment: Tastaturabfrage ----------------
;===================================================
;
            .GLOBAL PIOKEY
PIOKEY:     LD      A,0CFH      ;Modus 3
            OUT     (PIOAC),A
            LD      A,00001111B ;Eingang: Bit 0-3
            OUT     (PIOAC),A   ;Ausgang: Bit 4-7
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
$2          LD      B,4         ;4 Leitungen scannen
            LD      A,10H
            LD      (OUTPAT),A  ;Scanmuster ausgeben
            LD      HL,INPAT    ;Zeiger auf Bit-Feld
$1:         LD      A,(OUTPAT)  ;1 Leitung aktivieren
            OUT     (PIOAD),A
            ADD     A,A         ;nächste Leitung
            LD      (OUTPAT),A
            IN      A,(PIOAD)   ;Rückmeldung lesen
            AND     0FH
            LD      (HL),A      ;und speichern in
            INC     HL          ;  Bit-Feld
            DJNZ    $1
;
            LD      DE,INPAT    ;Auswertung
            LD      HL,0
            LD      B,4
$3:         ADD     HL,HL       ;Bits in HL setzen
            ADD     HL,HL
            ADD     HL,HL
            ADD     HL,HL
            LD      A,(DE)
            OR      L
            LD      L,A
            INC     DE
            DJNZ    $3
            CALL    DSPHL       ;Ergebnis anzeigen
            LD      HL,10000
            CALL    DELAY
            JR      $2
            RET
;
            .DATA
OUTPAT      DEFB    0           ;Ausgangsmuster
INPAT       DEFB    0,0,0,0     ;Eingangsmuster
            .CODE

Last Update: 2005-Okt-17


Home [image] Experimente [image] I/O-Bausteine [image] Experimente mit Z80-PIO [image] Centronics-Schnittstelle
Index
Siehe auch: Z80-PIO (Z8420)

Experiment: Aufbau einer Centronics-Schnittstelle

In diesem Experiment soll die Ansteuerung der Centronics-Schnittstelle gezeigt werden. Um den Aufbau sinnvoll einsetzen zu können, wird die Centronics-Schnittstelle mit der seriellen Schnittstelle kombiniert, so dass sich eine seriell ansteuerbare Druckerschnittstelle ergibt. Die Abbildung zeigt den Aufbau des Experiments. Es wird Kanal A der seriellen Schnittstelle zum Empfang der Zeichen benützt.

Die Centronics-Schnittstelle ist möglichst einfach implementiert. Dazu werden nur die Signale /STB, BUSY und die Datenleitungen benötigt. Das ansteuernde Programm fragt zuerst den Status der BUSY-Leitung ab. Signalisiert der Drucker, dass er nicht bereit ist, Daten zu empfangen (BUSY=HIGH), so wartet das Programm, bis das BUSY-Signal freigegeben wird. Dann wird das Datenbyte an den Port A des PIO gelegt und auf der Strobeleitung (/STB) ein kurzer Impuls gesendet.

Aufbau der seriellen Druckerschnittstelle

Das Steuerprogramm meldet sich zuerst mit der Meldung 'Serielle Druckerschnittstelle bereit' und geht dann in eine Warteschleife, in der permanent der Empfangspuffer der seriellen Schnittstelle und die Stellung der DIP-Switches auf Platine uP1 abgefragt werden. Wird ein Datenbyte empfangen, so wird dieses auf der Centronics-Schnittstelle ausgegeben. Das Protokoll der seriellen Schnittstelle kann mit Hilfe der DIP-Switches eingestellt werden.

;===================================================
;---- Experiment: Centronics-Schnittstelle ---------
;===================================================
;
            .GLOBAL CENTRX
CENTRX:     LD      A,0CFH      ;Port A - Modus 3
            OUT     (PIOAC),A
            LD      A,11111110B ;Bit 0 = /STB
            OUT     (PIOAC),A   ;Bit 1 = BUSY
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
            LD      A,0CFH      ;Port B - Modus 3
            OUT     (PIOBC),A
            LD      A,00000000B ;alle Bits Ausgang
            OUT     (PIOBC),A
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOBC),A
            LD      A,1         ;/STB auf HIGH legen
            OUT     (PIOAD),A
;
            LD      HL,CENS1    ;Startmeldung
            CALL    PRTSTR
$1:         LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;neues Protokoll
            CALL    RDV24A      ;Zeichen eingelangt ?
            JR      C,$1
            CALL    OUTCEN      ;ja ---> drucken
            JR      $1
;
CENS1:      DEFB    'Serielle Druckerschnittstelle bereit'
            DEFB    0DH,0AH,0
;
;===================================================
;---- String auf Centronics-Schnittstelle drucken --
;===================================================
;
PRTSTR:     LD      A,(HL)      ;Zeichen holen
            CP      0           ;Ende des Strings ?
            RET     Z
            CALL    OUTCEN      ;drucken
            INC     HL          ;nächstes Zeichen
            JR      PRTSTR
;
;===================================================
;--- Zeichen auf Centronics-Schnittstelle drucken --
;===================================================
;
;ENTRY:     Zeichen in A
;EXIT:      Zeichen wird auf Centronics-Schnittstelle
;           ausgegeben
;
OUTCEN:     PUSH    AF
$1:         IN      A,(PIOAD)   ;warten bis BUSY ok
            AND     02H
            JR      NZ,$1
            POP     AF
            PUSH    AF
            OUT     (PIOBD),A   ;Zeichen ausgeben
            LD      A,1
            OUT     (PIOAD),A   ;/STB-Impuls
            LD      A,0
            OUT     (PIOAD),A
            LD      A,1
            OUT     (PIOAD),A
            POP     AF
            RET

Last Update: 2005-Okt-17


Home [image] Experimente [image] Aufbau einfacher mikroprozessorgesteuerter Geräte [image] Sinusgenerator, Version A
Index
Siehe auch: Experiment: Sinusgenerator, Version B, Experiment: Parallel ablaufende Programme: Sinusgenerator und Lauflicht

Experiment: Sinusgenerator, Version A

Im folgenden Experiment soll ein sehr einfacher digitaler Sinusgenerator aufgebaut werden, der es ermöglicht, bei fixer Amplitude niederfrequente Sinuskurven mit unterschiedlicher Frequenz zu erzeugen. Dazu wird der digitale Eingang des Mikrocomputers (PIN) an die Tastatur der Platine DIGMLT angeschlossen; die Ausgabe der Analogspannung erfolgt über den DA-Wandler (DAC1) der Karte ADAC12.

Aufbau des Sinusgenerators, Version A

Das Prinzip des Sinusgenerators beruht auf der periodischen Ausgabe einer im ROM abgespeicherten Sinustabelle. Die Güte des Sinussignals hängt von der Länge der Tabelle und der Zahl der Bits, die pro Stützpunkt verwendet werden, ab. Die Zahl der Stützstellen sollte nicht größer sein als die Zahl der möglichen diskreten Spannungspegel des DA-Wandlers. Für die meisten Anwendungen wird aber die Zahl der Stützstellen ohnehin kleiner als die Zahl der möglichen analogen Werte sein.

Die Frequenz des Sinusgenerators wird durch eine Verzögerungsschleife bestimmt, die nach jeder Ausgabe eines Wertes an den DA-Wandler aktiviert wird. Die Dauer der Verzögerung wird über den Port PIN eingelesen. Mit dieser einfachen Methode kann ein Sinusgenerator mit einer Maximalfrequenz von etwa 40 Hz (bei 256 Stützstellen) erzeugt werden. Seine Frequenz lässt sich bis auf etwa 0.5 Hz durch Einstellen der Tasten einstellen. Die Periodendauer des Ausgangssignals ist proportional zum eingestellten Verzögerungswert.

Das unten abgedruckte Steuerprogramm funktioniert folgendermaßen: Zuerst wird in einem Initialisierungsschritt das Register IX mit der Anfangsadresse der Sinustabelle geladen, das Register DE mit der Endadresse. In der Ausführungsphase wird nun von der durch das Register IX bezeichneten Adresse der Sinustabelle jeweils ein Wert für den DA-Wandler gelesen und an diesen ausgegeben. Dabei wird das Register IX auf die Adresse des nächsten Wertes erhöht und geprüft, ob das Ende der Tabelle erreicht ist. Falls dies geschieht, wird IX wieder mit der Startadresse geladen, so dass sich eine zyklische Ausgabe der gespeicherten Tabelle ergibt. Bei jedem Durchlauf der Programmschleife wird außerdem der Wert am Port PIN abgefragt und der ermittelte Wert als Parameter für eine Verzögerungsschleife verwendet. Dadurch wird die Frequenz des Ausgangssignals des DA-Wandlers verändert.

;===================================================
;---- Experiment: Sinusgenerator, Version A --------
;===================================================
;
            .GLOBAL SINUSA
SINUSA:     LD      DE,STBEND   ;Ende Sinustabelle
            LD      IX,SINTAB   ;Start Sinustabelle
$L1:        LD      L,(IX)      ;Wert aus Tabelle
            INC     IX
            LD      H,(IX)
            INC     IX
            CALL    ODAC1       ;Wert an DAC ausgeben
            PUSH    IX          ;Überprüfen, ob Ende
            POP     HL          ;  der Tabelle
            XOR     A
            SBC     HL,DE
            JR      NZ,$L2
            LD      IX,SINTAB   ;ja, Pointer rücks.
$L2:        IN      A,(PIN)     ;Verzögerung einlesen
            LD      L,A
            LD      H,0
            ADD     HL,HL       ;Verzögerung = 1+4*PIN
            ADD     HL,HL
            INC     HL
            CALL    DELAY
            JR      $L1         ;nächster Durchgang
;
;===================================================
;---- Ausgabe eines Wertes auf DAC1 ----------------
;===================================================
;
;Eingang:   16-Bit-Wert in HL
;Ausgang:   vordersten 12 Bit werden an DAC1 ausgegeben
;
            .GLOBAL ODAC1
ODAC1:      PUSH    AF          ;Register AF sichern
            LD      A,L
            OUT     (DAC1LO),A  ;niederwertiges Byte
            LD      A,H
            OUT     (DAC1HI),A  ;höherwertiges Byte
            POP     AF
            RET
;
;----- Tabelle der Sinuswerte ----------------------
;
SINTAB:     DEFW    8000H, 8320H, 8640H, 8960H, 8C80H
            DEFW    8FA0H, 92C0H, 95E0H, 98F0H, 9C00H
            DEFW    9F10H, A220H, A520H, A820H, AB10H
            DEFW    AE00H, B0F0H, B3D0H, B6B0H, B980H
            DEFW    BC50H, BF10H, C1C0H, C470H, C710H
            DEFW    C9A0H, CC30H, CEB0H, D120H, D390H
            DEFW    D5F0H, D830H, DA70H, DCA0H, DED0H
            DEFW    E0E0H, E2E0H, E4E0H, E6C0H, E8A0H
            DEFW    EA60H, EC10H, EDC0H, EF50H, F0D0H
            DEFW    F240H, F3A0H, F4F0H, F630H, F760H
            DEFW    F870H, F980H, FA70H, FB50H, FC20H
            DEFW    FCD0H, FD80H, FE10H, FE90H, FF00H
            DEFW    FF50H, FF90H, FFD0H, FFE0H, FFF0H
            DEFW    FFE0H, FFD0H, FF90H, FF50H, FF00H
            DEFW    FE90H, FE10H, FD80H, FCD0H, FC20H
            DEFW    FB50H, FA70H, F980H, F870H, F760H
            DEFW    F630H, F4F0H, F3A0H, F240H, F0D0H
            DEFW    EF50H, EDC0H, EC10H, EA60H, E8A0H
            DEFW    E6C0H, E4E0H, E2E0H, E0E0H, DED0H
            DEFW    DCA0H, DA70H, D830H, D5F0H, D390H
            DEFW    D120H, CEB0H, CC30H, C9A0H, C710H
            DEFW    C470H, C1C0H, BF10H, BC50H, B980H
            DEFW    B6B0H, B3D0H, B0F0H, AE00H, AB10H
            DEFW    A820H, A520H, A220H, 9F10H, 9C00H
            DEFW    98F0H, 95E0H, 92C0H, 8FA0H, 8C80H
            DEFW    8960H, 8640H, 8320H, 8000H, 7CD0H
            DEFW    79B0H, 7690H, 7370H, 7050H, 6D30H
            DEFW    6A10H, 6700H, 63F0H, 60E0H, 5DD0H
            DEFW    5AD0H, 57D0H, 54E0H, 51F0H, 4F00H
            DEFW    4C20H, 4940H, 4670H, 43A0H, 40E0H
            DEFW    3E30H, 3B80H, 38E0H, 3650H, 33C0H
            DEFW    3140H, 2ED0H, 2C60H, 2A00H, 27C0H
            DEFW    2580H, 2350H, 2120H, 1F10H, 1D10H
            DEFW    1B10H, 1930H, 1750H, 1590H, 13E0H
            DEFW    1230H, 10A0H, 0F20H, 0DB0H, 0C50H
            DEFW    0B00H, 09C0H, 0890H, 0780H, 0670H
            DEFW    0580H, 04A0H, 03D0H, 0320H, 0270H
            DEFW    01E0H, 0160H, 00F0H, 00A0H, 0060H
            DEFW    0020H, 0010H, 0000H, 0010H, 0020H
            DEFW    0060H, 00A0H, 00F0H, 0160H, 01E0H
            DEFW    0270H, 0320H, 03D0H, 04A0H, 0580H
            DEFW    0670H, 0780H, 0890H, 09C0H, 0B00H
            DEFW    0C50H, 0DB0H, 0F20H, 10A0H, 1230H
            DEFW    13E0H, 1590H, 1750H, 1930H, 1B10H
            DEFW    1D10H, 1F10H, 2120H, 2350H, 2580H
            DEFW    27C0H, 2A00H, 2C60H, 2ED0H, 3140H
            DEFW    33C0H, 3650H, 38E0H, 3B80H, 3E30H
            DEFW    40E0H, 43A0H, 4670H, 4940H, 4C20H
            DEFW    4F00H, 51F0H, 54E0H, 57D0H, 5AD0H
            DEFW    5DD0H, 60E0H, 63F0H, 6700H, 6A10H
            DEFW    6D30H, 7050H, 7370H, 7690H, 79B0H
            DEFW    7CD0H
STBEND      EQU     $

Das in diesem Experiment vorgestellte Programm hat allerdings einige Schwachpunkte: Zum einen ist die Frequenz des Ausgangssignals nicht auf beliebige Werte und nicht einmal in gleichen Abständen einzustellen, und zum anderen ergibt sich beim Rücksetzen des Adressregisters IX auf den Startwert eine etwas längere Zeit, bis der nächste Wert der Tabelle ausgegeben werden kann. Dadurch erhöht sich natürlich der Klirrfaktor des Signals. Abhilfe zu diesen Problemen schafft eine geänderte Version des Sinusgenerators, die im Folgenden Experiment gezeigt werden soll.

Last Update: 2005-Okt-17


Home [image] Experimente [image] Aufbau einfacher mikroprozessorgesteuerter Geräte [image] Sinusgenerator, Version B
Index
Siehe auch: Experiment: Sinusgenerator, Version A

Experiment: Sinusgenerator, Version B

In diesem Experiment soll eine andere Version des Sinusgenerators aufgebaut werden, bei der eine Rechteckspannung am Eingang /NMI (nichtmaskierbarer Interrupt) des Mikroprozessors als Taktfrequenz für die Ausgabe der Sinustabelle dient. Dadurch bekommt man einen Sinusgenerator, dessen Frequenz ein ganzzahliger Teil der Taktfrequenz ist. Der Frequenzfaktor hängt von der Zahl der Stützstellen der Sinustabelle ab.

Jede negative Flanke des Rechtecksignals löst im Mikroprozessor einen Interrupt (NMI) aus, bei dessen Bearbeitung ein Wert aus einem Funktionspuffer geholt und auf den DA-Wandler DAC1 ausgegeben wird. Der Zeiger in den Puffer wird nach jeder Ausgabe erhöht und beim Erreichen des Endes des Puffers auf dessen Anfangsadresse gesetzt.

Im Hauptprogramm des Sinusgenerators wird zuerst der Funktionspuffer mit den Werten der Sinustabelle geladen und der Zeiger auf den Puffer initialisiert. Sodann beginnt der Prozessor eine unendliche Warteschleife zu bearbeiten, die von den Interrupts unterbrochen wird.

Der Aufbau des Experiments ist in Abbildung EXSINB gezeigt. Zur Erzeugung der erforderlichen Taktfrequenz kann man entweder den auf der Platine DIGMLT implementierten Rechteckgenerator oder bei Verwendung eines zwischengeschalteten Teilers auch den PLL-gesteuerten Oszillator der Platine FQSYNT einsetzen.

Aufbau des Sinusgenerators, Version B

Das hier beschriebene Experiment hat einen nicht ganz unwesentlichen Schönheitsfehler: Falls die Taktfrequenz am Eingang /NMI zu hoch wird, unterbricht sich der NMI selber, und es kommt in der Folge zu einem Stack-Overflow und zu einem Absturz des Rechners. Eine verbesserte Version dieses Experiments würde entweder den maskierbaren Interrupt (INT) verwenden, da dieser blockierbar ist (Befehle EI und DI) und damit der reentrante Aufruf verhindert wird. Oder aber es wird in die NMI-Routine ein Software-Mechanismus eingebaut, der die Unterbrechung der Bearbeitung des NMI nicht zulässt. Diese Methode löst allerdings nicht das Problem, sondern verschiebt nur die maximal erlaubte Taktfrequenz nach oben.

Man sieht also, dass es keinen absoluten Software-Schutz gegen das Selbstunterbrechen des NMI gibt. Die einzige Möglichkeit besteht darin, externe Hardware vorzusehen, die den nächsten NMI verhindert, solange ein NMI bearbeitet wird.

;===================================================
;--- non maskable interrupt - Funktionsgenerator ---
;===================================================
;
            ORG     0066H
;
            .GLOBAL NMI
NMI:        PUSH    DE          ;Register sichern
            PUSH    HL
            PUSH    AF
            LD      HL,(FBFPOI) ;Zeiger auf Funktions-
            LD      A,(HL)      ;  tabelle
            INC     HL          ;Daten lesen
            LD      H,(HL)
            LD      L,A
            CALL    ODAC1       ;Wert ausgeben
            LD      HL,(FBFPOI) ;Zeiger erhöhen
            INC     HL
            INC     HL
            LD      DE,FBFEND   ;überprüfen, ob Ende
            PUSH    HL          ;  der Tabelle
            XOR     A
            SBC     HL,DE
            POP     HL
            JR      C,$1        ;nein
            LD      HL,FNCBUF   ;ja, Zeiger rücksetzen
$1:         LD      (FBFPOI),HL
            POP     AF
            POP     HL
            POP     DE
            RETN                ;Ende NMI-Service
;
            .DATA
FNCBUF:     DEFS    512         ;Funktionspuffer
FBFPOI:     DEFW    0           ;Zeiger auf Tabelle
            .CODE
;
FBFEND      EQU     FNCBUF+512
;
;===================================================
;---- Experiment: Sinusgenerator, Version B --------
;===================================================
;
            .GLOBAL SINUSB
SINUSB:     LD      HL,SINTAB   ;Sinustabelle laden
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
SINGEN:     JR      SINGEN      ;warten auf NMI
;

Last Update: 2005-Okt-17


Home [image] Experimente [image] Aufbau einfacher mikroprozessorgesteuerter Geräte [image] Parallel ablaufende Programme: Sinusgenerator und Lauflicht
Index
Siehe auch: Experiment: Lauflicht, Experiment: Sinusgenerator, Version A

Experiment: Parallel ablaufende Programme: Sinusgenerator und Lauflicht

Im folgenden Experiment soll die Implementation von zwei Programmen, die sowohl zeitlich als auch inhaltlich voneinander unabhängig ablaufen, gezeigt werden. Es soll sowohl der im vorigen Experiment gezeigte Sinusgenerator als auch ein Lauflicht quasi parallel betrieben werden. Dazu wird das Hauptprogramm des Sinusgenerators, das ja nur aus einer Warteschleife besteht, durch ein Programm ersetzt, das die Lauflichtsteuerung übernimmt.

Zum Aufbau des Experiments werden wie im vorigen Beispiel die Platinen uP1, ADAC12 und DIGMLT verwendet (Abbildung). Der NMI-Eingang des Mikrocomputers wird mit dem Rechteckgenerator der Platine DIGMLT verbunden. Außerdem wird die 8-Bit-Parallelschnittstelle des Mikrocomputers (POUT) mit den LEDs der Platine DIGMLT verbunden.

Aufbau des Experiments 'Parallele Programme'

Das folgende Listing zeigt das kurze Hauptprogramm für das Lauflicht:

;===================================================
;---- Experiment: Sinusgenerator, Version B --------
;===================================================
;
            .GLOBAL LFLSIN
LFLSIN:     LD      HL,SINTAB   ;Sinustabelle laden
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
            LD      A,1         ;Bit 0 = 1
$1:         OUT     (POUT),A    ;Ausgabe auf LEDs
            RLCA                ;Bit rotieren
            LD      HL,10000    ;70 ms warten
            CALL    DELAY
            JR      $1          ;unendliche Schleife

Nach der Initialisierung des Zeigers auf die Sinustabelle wird das Register A auf den Wert $01 gesetzt (Bit 0 = HIGH). Dieses Bit wird in der nachfolgenden Schleife rotiert, wobei nach jedem Schieben des Bits eine Warteschleife von 70 ms aufgerufen wird.

Sperrt man den NMI-Eingang der CPU (keine Verbindung mit dem Rechteckgenerator), so kann das Lauflichtprogramm ungestört ablaufen und man sieht eine leuchtende LED jeweils von links nach rechts laufen. Hängt man nun an den NMI-Eingang den Rechteckgenerator, der auf eine niedrige Frequenz (z.B. 1 kHz) eingestellt ist, so wird am DA-Wandler die Sinuskurve in gewohnter Weise ausgegeben. Das Lauflicht läuft scheinbar unbeirrt weiter. Erhöht man die Frequenz des Rechteckgenerators, so erhöht sich entsprechend auch die Frequenz des Sinussignals, das Lauflicht wird aber langsamer - und zwar umso mehr, je höher die Frequenz des Rechteckgenerators wird.

Die Erzeugung des Sinussignals verbraucht natürlich Rechenzeit (ca. 100 µsek pro Interruptaufruf), die dann dem Programm, das das Lauflicht betreibt, abgeht, da der nicht maskierbare Interrupt die höhere Priorität besitzt. Wird das Rechtecksignal so hochfrequent, dass die Zeit zwischen zwei Impulsen nur wenig länger als die Bearbeitungszeit des NMIs ist, so sackt die Geschwindigkeit des Lauflichts bis auf null ab.

Das hier beschriebene Experiment ist im Prinzip eine sehr einfache Version eines Multitasking-Betriebs, wo mehrere Aufgaben quasi gleichzeitig vom Mikroprozessor erledigt werden.

Last Update: 2005-Okt-17


Home [image] Experimente [image] Aufbau einfacher mikroprozessorgesteuerter Geräte [image] Programmierbarer Funktionsgenerator
Index
Siehe auch: Funktionsgenerator

Experiment: Programmierbarer Funktionsgenerator

Im folgenden Experiment soll ein digitaler Funktionsgenerator aufgebaut werden, der verschiedene Funktionsverläufe auf dem DA-Wandler zyklisch ausgibt. Dieser Funktionsgenerator erlaubt nur zwei Parameter der ausgegebenen Funktion zu ändern, nämlich die Frequenz und die Funktion selbst. Die Frequenz wird, wie bereits zuvor beschrieben durch eine externe Rechteckspannung bestimmt, die als Taktsignal für den Funktionsgenerator verwendet wird. Zur Einstellung der Amplitude und des Gleichspannungs-Offsets sei der Leser auf die einschlägigen Schaltungen mit Operationsverstärkern in Band 1 dieses Buches verwiesen.

Die Funktion selbst kann aus sieben fix vorgegebenen Kurvenverläufen ausgewählt werden. Die Auswahl der Funktion geschieht über die Tasten T0-T7 der Platine DIGMLT, die über den 8-Bit-Port PIN eingelesen werden. Die Tasten haben folgende Bedeutung:

T0 | Parabel 2. Ordnung
T1 | Gaußfunktion (Glockenkurve)
T2 | Sinus
T3 | Sägezahn
T4 | Dreieck
T5 | Nadelimpuls
T6 | Rechteck
T7 | Funktionsspeicher löschen (= Nullinie)

Drückt man eine der Tasten T0-T7, so wird die ausgewählte Funktion in den Funktionspuffer geladen und ausgegeben.

Das unten aufgeführte Listing zeigt die Funktionsweise des Programms: Zuerst wird die aktuelle Tastenkombination der Platine DIGMLT von PIN eingelesen. Falls keine Taste gedrückt ist oder sich der Zustand der Tasten gegenüber der letzten Abfrage nicht geändert hat, wird keine weitere Aktion unternommen. Wenn eine der Tasten umgeschaltet wurde, wird der neue Zustand gespeichert und jene gedrückte Taste ermittelt, die die höchsten Priorität besitzt (bei mehreren gleichzeitig gedrückten Tasten wird immer nur eine Funktion aktiviert). Zu der ermittelten Taste wird nun die Ausführungsadresse des entsprechenden Unterprogramms errechnet. Dieses Unterprogramm füllt nun den Funktionspuffer mit den Werten der gewünschten Funktion und kehrt dann an den Anfang des Programms zurück.

;===================================================
;---- Experiment: Funktionsgenerator ---------------
;===================================================
;
            .GLOBAL FNCGEN
FNCGEN:     LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
FNCG1:      IN      A,(PIN)     ;Tasten einlesen
            OR      A           ;keine Taste
            JR      Z,FNCG1     ;  gedrückt ?
            LD      HL,LASTF
            CP      (HL)        ;Tasten geändert ?
            JR      Z,FNCG1
            LD      (LASTF),A   ;Tastenzustand merken
            LD      HL,FNCTAB   ;aktive Funktion
$2:         SLA     A           ;  ermitteln
            JR      C,$1
            INC     HL
            INC     HL
            JR      $2
;
$1:         LD      A,(HL)      ;Ausführungsadresse
            INC     HL          ;  des Ladeprogramms
            LD      H,(HL)      ;  berechnen
            LD      L,A
            LD      DE,FNCG1    ;Return-Adresse
            PUSH    DE
            JP      (HL)        ;do it !
;
            .DATA
LASTF:      DEFB    0
            .CODE
;
FNCTAB:     DEFW    ZEROLN      ;Nullinie
            DEFW    SQUARE      ;Rechteckfunktion
            DEFW    PULSE       ;Nadelimpuls
            DEFW    TRIANG      ;Dreiecksfunktion
            DEFW    SAWTOO      ;Sägezahn
            DEFW    SINE        ;Sinus
            DEFW    GAUSS       ;Gauá-Funktion
            DEFW    PARABO      ;Parabel
;
ZEROLN:     LD      B,0         ;Nullinie berechnen
            LD      HL,FNCBUF
$3:         LD      (HL),0
            INC     HL
            LD      (HL),80H
            INC     HL
            DJNZ    $3
            RET
;
SQUARE:     LD      B,0         ;Rechteckfunktion
            LD      HL,FNCBUF
$4:         LD      (HL),0
            INC     HL
            DJNZ    $4
$5:         LD      (HL),0FFH
            INC     HL
            DJNZ    $5
            RET
;
TRIANG:     LD      B,128       ;Dreiecksfunktion
            LD      HL,FNCBUF
$6:         LD      (HL),0
            INC     HL
            LD      A,B
            DEC     A
            ADD     A,A
            LD      (HL),A
            INC     HL
            DJNZ    $6
            LD      B,128
$7:         LD      (HL),0
            INC     HL
            LD      A,B
            DEC     A
            ADD     A,A
            CPL
            LD      (HL),A
            INC     HL
            DJNZ    $7
            RET
;
SAWTOO:     LD      B,0         ;Sägezahn
            LD      HL,FNCBUF
$8:         LD      (HL),0
            INC     HL
            LD      (HL),B
            INC     HL
            DJNZ    $8
            RET

PULSE:      LD      B,254       ;Impuls
            LD      HL,FNCBUF
$9:         LD      (HL),0
            INC     HL
            LD      (HL),0
            INC     HL
            DJNZ    $9
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            RET
;
SINE:       LD      HL,SINTAB   ;Sinus
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
GAUSS:      LD      HL,GAUSTB   ;Gauá
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
;---- Tabelle der Gauß'schen Kurve -----------------
;
GAUSTB:     DEFW    0000H, 0000H, 0000H, 0000H, 0000H
            DEFW    0000H, 0000H, 0000H, 0010H, 0010H
            DEFW    0010H, 0010H, 0010H, 0010H, 0010H
            DEFW    0010H, 0020H, 0020H, 0020H, 0020H
            DEFW    0030H, 0030H, 0040H, 0040H, 0050H
            DEFW    0050H, 0060H, 0070H, 0080H, 0090H
            DEFW    00A0H, 00B0H, 00D0H, 00F0H, 0100H
            DEFW    0120H, 0150H, 0170H, 01A0H, 01D0H
            DEFW    0200H, 0240H, 0280H, 02D0H, 0320H
            DEFW    0370H, 03D0H, 0440H, 04B0H, 0530H
            DEFW    05B0H, 0650H, 06F0H, 07A0H, 0860H
            DEFW    0920H, 0A00H, 0AF0H, 0C00H, 0D10H
            DEFW    0E40H, 0F80H, 10D0H, 1240H, 13D0H
            DEFW    1570H, 1730H, 1900H, 1B00H, 1D10H
            DEFW    1F40H, 2190H, 2410H, 26A0H, 2960H
            DEFW    2C40H, 2F40H, 3260H, 35A0H, 3910H
            DEFW    3CA0H, 4060H, 4430H, 4830H, 4C50H
            DEFW    5090H, 5500H, 5980H, 5E20H, 62F0H
            DEFW    67D0H, 6CC0H, 71E0H, 7700H, 7C40H
            DEFW    8190H, 86F0H, 8C60H, 91D0H, 9750H
            DEFW    9CD0H, A240H, A7C0H, AD30H, B290H
            DEFW    B7E0H, BD20H, C250H, C750H, CC40H
            DEFW    D100H, D5A0H, DA20H, DE60H, E270H
            DEFW    E650H, E9F0H, ED50H, F070H, F350H
            DEFW    F5E0H, F830H, FA40H, FC00H, FD60H
            DEFW    FE80H, FF50H, FFC0H, FFF0H, FFC0H
            DEFW    FF50H, FE80H, FD60H, FC00H, FA40H
            DEFW    F830H, F5E0H, F350H, F070H, ED50H
            DEFW    E9F0H, E650H, E270H, DE60H, DA20H
            DEFW    D5A0H, D100H, CC40H, C750H, C250H
            DEFW    BD20H, B7E0H, B290H, AD30H, A7C0H
            DEFW    A240H, 9CD0H, 9750H, 91D0H, 8C60H
            DEFW    86F0H, 8190H, 7C40H, 7700H, 71E0H
            DEFW    6CC0H, 67D0H, 62F0H, 5E20H, 5980H
            DEFW    5500H, 5090H, 4C50H, 4830H, 4430H
            DEFW    4060H, 3CA0H, 3910H, 35A0H, 3260H
            DEFW    2F40H, 2C40H, 2960H, 26A0H, 2410H
            DEFW    2190H, 1F40H, 1D10H, 1B00H, 1900H
            DEFW    1730H, 1570H, 13D0H, 1240H, 10D0H
            DEFW    0F80H, 0E40H, 0D10H, 0C00H, 0AF0H
            DEFW    0A00H, 0920H, 0860H, 07A0H, 06F0H
            DEFW    0650H, 05B0H, 0530H, 04B0H, 0440H
            DEFW    03D0H, 0370H, 0320H, 02D0H, 0280H
            DEFW    0240H, 0200H, 01D0H, 01A0H, 0170H
            DEFW    0150H, 0120H, 0100H, 00F0H, 00D0H
            DEFW    00B0H, 00A0H, 0090H, 0080H, 0070H
            DEFW    0060H, 0050H, 0050H, 0040H, 0040H
            DEFW    0030H, 0030H, 0020H, 0020H, 0020H
            DEFW    0020H, 0010H, 0010H, 0010H, 0010H
            DEFW    0010H, 0010H, 0010H, 0010H, 0000H
            DEFW    0000H, 0000H, 0000H, 0000H, 0000H
            DEFW    0000H
;
PARABO:     LD      HL,PARATB   ;Parabel
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
;----- Tabelle der Parabel 2. Ordnung --------------
;
PARATB:     DEFW    FE00H, FA10H, F620H, F230H, EE50H
            DEFW    EA80H, E6B0H, E2E0H, DF20H, DB70H
            DEFW    D7C0H, D410H, D070H, CCE0H, C950H
            DEFW    C5C0H, C240H, BED0H, BB60H, B7F0H
            DEFW    B490H, B140H, ADF0H, AAA0H, A760H
            DEFW    A430H, A100H, 9DD0H, 9AB0H, 97A0H
            DEFW    9490H, 9180H, 8E80H, 8B90H, 88A0H
            DEFW    85B0H, 82D0H, 8000H, 7D30H, 7A60H
            DEFW    77A0H, 74F0H, 7240H, 6F90H, 6CF0H
            DEFW    6A60H, 67D0H, 6540H, 62C0H, 6050H
            DEFW    5DE0H, 5B70H, 5910H, 56C0H, 5470H
            DEFW    5220H, 4FE0H, 4DB0H, 4B80H, 4950H
            DEFW    4730H, 4520H, 4310H, 4100H, 3F00H
            DEFW    3D10H, 3B20H, 3930H, 3750H, 3580H
            DEFW    33B0H, 31E0H, 3020H, 2E70H, 2CC0H
            DEFW    2B10H, 2970H, 27E0H, 2650H, 24C0H
            DEFW    2340H, 21D0H, 2060H, 1EF0H, 1D90H
            DEFW    1C40H, 1AF0H, 19A0H, 1860H, 1730H
            DEFW    1600H, 14D0H, 13B0H, 12A0H, 1190H
            DEFW    1080H, 0F80H, 0E90H, 0DA0H, 0CB0H
            DEFW    0BD0H, 0B00H, 0A30H, 0960H, 08A0H
            DEFW    07F0H, 0740H, 0690H, 05F0H, 0560H
            DEFW    04D0H, 0440H, 03C0H, 0350H, 02E0H
            DEFW    0270H, 0210H, 01C0H, 0170H, 0120H
            DEFW    00E0H, 00B0H, 0080H, 0050H, 0030H
            DEFW    0020H, 0010H, 0000H, 0000H, 0010H
            DEFW    0020H, 0030H, 0050H, 0080H, 00B0H
            DEFW    00E0H, 0120H, 0170H, 01C0H, 0210H
            DEFW    0270H, 02E0H, 0350H, 03C0H, 0440H
            DEFW    04D0H, 0560H, 05F0H, 0690H, 0740H
            DEFW    07F0H, 08A0H, 0960H, 0A30H, 0B00H
            DEFW    0BD0H, 0CB0H, 0DA0H, 0E90H, 0F80H
            DEFW    1080H, 1190H, 12A0H, 13B0H, 14D0H
            DEFW    1600H, 1730H, 1860H, 19A0H, 1AF0H
            DEFW    1C40H, 1D90H, 1EF0H, 2060H, 21D0H
            DEFW    2340H, 24C0H, 2650H, 27E0H, 2970H
            DEFW    2B10H, 2CC0H, 2E70H, 3020H, 31E0H
            DEFW    33B0H, 3580H, 3750H, 3930H, 3B20H
            DEFW    3D10H, 3F00H, 4100H, 4310H, 4520H
            DEFW    4730H, 4950H, 4B80H, 4DB0H, 4FE0H
            DEFW    5220H, 5470H, 56C0H, 5910H, 5B70H
            DEFW    5DE0H, 6050H, 62C0H, 6540H, 67D0H
            DEFW    6A60H, 6CF0H, 6F90H, 7240H, 74F0H
            DEFW    77A0H, 7A60H, 7D30H, 8000H, 82D0H
            DEFW    85B0H, 88A0H, 8B90H, 8E80H, 9180H
            DEFW    9490H, 97A0H, 9AB0H, 9DD0H, A100H
            DEFW    A430H, A760H, AAA0H, ADF0H, B140H
            DEFW    B490H, B7F0H, BB60H, BED0H, C240H
            DEFW    C5C0H, C950H, CCE0H, D070H, D410H
            DEFW    D7C0H, DB70H, DF20H, E2E0H, E6B0H
            DEFW    EA80H, EE50H, F230H, F620H, FA10H
            DEFW    FE00H

Last Update: 2005-Okt-17


Home [image] Experimente [image] Aufbau einfacher mikroprozessorgesteuerter Geräte [image] Digitalvoltmeter
Index
Siehe auch: Analog-Digital-Wandler

Experiment: Digitalvoltmeter

In diesem Experiment soll ein einfaches 8-Kanal-Digitalvoltmeter aufgebaut werden, dessen Eingangsspannungsbereich und Messkanal über die auf der Platine uP1 vorhandenen DIP-Schalter eingestellt werden können. Der Eingangsverstärker kann in 7 binären Stufen eingestellt werden, wobei die niedrigste Stufe einem Eingangsspannungsbereich von +/- 1 V (bzw. +/- 2 V, je nach Stellung des Jumpers J1 auf der Platine ADAC12) entspricht, alle anderen Messbereiche sind jeweils um die Hälfte kleiner. Zu beachten ist, dass die maximale Dynamik aufgrund der Steuersoftware auf 16 Bit begrenzt ist.

In der folgenden Tabelle sind die Schalterstellungen für alle Messbereiche und alle Eingangskanäle aufgelistet.

S3 | S2 | S1 | Spannungsbereich
0 | 0 | 0 | +/- 1.000 V
0 | 0 | 1 | +/- 0.500 V
0 | 1 | 0 | +/- 0.250 V
0 | 1 | 1 | +/- 0.125 V
1 | 0 | 0 | +/- 0.063 V
S7 | S6 | S5 | Kanal
0 | 0 | 0 | 0
0 | 0 | 1 | 1
0 | 1 | 0 | 2
0 | 1 | 1 | 3
1 | 0 | 0 | 4
1 | 0 | 1 | 5
1 | 1 | 0 | 6
1 | 1 | 1 | 7

Die Abbildung zeigt den Aufbau des Digitalvoltmeters. Es verwendet die Platinen uP1, SERPAR, ADAC12 und 7SGDSP. Der Mikroprozessor misst die Werte der Eingangsspannung mit Hilfe des ADCs auf der Platine ADAC12 und gibt sie auf dem 6stelligen Display aus.

Das Digitalvoltmeter kann auf einfache Weise geeicht werden. Dazu wird der Eingangsspannungsbereich auf +/- 1 V gesetzt und eine Spannung von etwa 0.8 V angelegt. Mit dem Potentiometer 'Full Scale' auf der Platine ADAC12 wird nun die Referenz für den AD-Wandler so angepasst, dass auf der Anzeige genau der entsprechende Wert angezeigt wird. Zu beachten ist, dass die Eingänge der Kanäle 0 bis 3 als Differenzeingänge konstruiert sind. Für Messungen gegen Massepotential ist der negative Eingang auf Masse zu legen.

Aufbau eines 8-Kanal-Digitalvoltmeters

Das unten abgedruckte Listing zeigt die Implementierung des DVMs. Das Programm läuft in einer Endlosschleife, in der folgende Aktionen durchgeführt werden: Zuerst wird entsprechend der Stellung der DIP-Schalter der Multiplexer und der programmierbare Verstärker (PGA) eingestellt und die S&H-Schaltung aktiviert. Darauf wird der AD-Wandler gestartet und das Ergebnis der Konversion entsprechend dem Verstärkungsfaktor des PGA angepasst. Dieser Wert wird nun mit einem Skalierungsfaktor multipliziert und das Resultat auf dem 7-Segment-Display ausgegeben.

Der Skalierungsfaktor zur Skalierung des Ergebnisses ist meist eine reelle Zahl (in diesem Beispiel 0.0000305), für deren Verarbeitung man eine Gleitkommaroutine benötigen würde. Um den Aufwand für eine solche Routine zu vermeiden, wird der Skalierungsfaktor mit dem Faktor 10000 (vier Kommastellen) multipliziert und - um die Genauigkeit zu erhöhen - weiter mit 216. Nach der Berechnung des skalierten Messwertes wird dieser wieder durch 216 dividiert, indem vom 32-Bit-Ergebnis der Multiplikation nur das höherwertige Wort verwendet wird.

;===================================================
;---- Experiment: Digitalvoltmeter -----------------
;===================================================
;
            .GLOBAL DVM
DVM:        CALL    SETMUX      ;Multiplexer setzen
            CALL    GETADC      ;Wert von ADC holen
            IN      A,(DIPSW)   ;Verstärkungsfaktor
            AND     07          ;Wert anpassen
            JR      Z,$7
            LD      B,A
$3:         SRA     H           ;durch Schieben
            RR      L
            DJNZ    $3
$7:         EX      DE,HL
            LD      BC,20000    ;skalieren
            CALL    MLT32S
            EX      DE,HL
            CALL    DSPHL       ;Ausgabe auf Display
            LD      C,4         ;Dezimalpunkt
            CALL    SETDP
            LD      HL,50000    ;350 ms warten
            CALL    DELAY
            JR      DVM
;
;===================================================
;---- MUX-Kanal und Verstärkung einstellen ---------
;===================================================
;
;ENTRY:     DIP-switch
;                Bit 0..2: Verstärkungsfaktor
;                Bit 4..6: Kanalnummer
;EXIT:      MUX entsprechend eingestellt, S&H gestartet
;
SETMUX:     PUSH    AF
            PUSH    BC
            IN      A,(DIPSW)   ;Kanaladr. berechnen
            LD      C,MUXBAS
            AND     0F0H
            SRL     A
            SRL     A
            SRL     A
            SRL     A
            ADD     A,C
            LD      C,A
            IN      A,(DIPSW)   ;Verstärkungsfaktor
            AND     07H
            OUT     (C),A       ;MUX einstellen,
            POP     BC          ;  S&H starten
            POP     AF
            RET
;
;===================================================
;---- AD-Wandler starten, Ergebnis lesen -----------
;===================================================
;
;ENTRY:     -
;EXIT:      Wert vom ADC x16 als 2er-Komplement
;
GETADC:     PUSH    AF
            PUSH    DE
            LD      A,0
            OUT     (ADCHI),A   ;ADC (12 bit) starten
            BIT     0,(IX)      ;warten bis ADC fertig
            BIT     0,(IX)
            BIT     0,(IX)
            BIT     0,(IX)
            BIT     0,(IX)
            IN      A,(ADCHI)   ;Wert holen
            XOR     80H         ;2er-Kompl. erzeugen
            LD      H,A
            IN      A,(ADCLO)
            LD      L,A
            POP     DE
            POP     AF
            RET

Last Update: 2005-Okt-17


Home [image] Anhang [image] Platinenlayouts [image] Platinenlayouts
Index
Siehe auch: Universal-Experimentierplatine LINMLT, Belichten und Ätzen der Platine, Herstellung des Platinenfilms

Platinenlayouts

Die Platinenlayouts stehen im PDF-Format zur Verfügung (jeweils Lötseite, Bauteilseite, Bohrplan und Bestückungsplan). Zum Download klicken Sie auf das entsprechende Diskettensymbol in der rechten Spalte.

Platine | PDFs
7SGDSP: 7-Segment-Display |
ADAC12: AD- und DA-Wandler |
DIGMLT: digitale Multifunktionskarte |
FNCGEN: Funktionsgenerator |
FQSYNT: Frequenzsynthesizer |
LINMLT: lineare Multifunktionskarte |
NTFIX: Fixspannungsnetzteil |
SERPAR: serielle und parallele Schnittstelle |
uP1: Mikroprozessorsystem (Z80) |

Last Update: 2005-Okt-11


Platine uP1

Die Platine uP1 ist die Verwirklichung eines Z80-Minimalsystems, das neben der CPU maximal 64 kByte Speicher, je einen parallelen 8-Bit Eingangs- und Ausgangsport und ein IO-Bussystem enthält. Die Prinzipien der einzelnen Schaltungsteile wurden schon beschrieben. Daher soll in dieser Platinenbeschreibung nur mehr die konkrete Realisierung besprochen werden.

Das in der Abbildung gezeigte Minimalsystem besteht aus folgenden Teilen: CPU und Speicher, Taktgenerator, Resetsteuerung, IO-Bus, 8-Bit-Paralleleingang, 8-Bit-Parallelausgang, 8fach DIP-Switch als 8-Bit-Eingang. Der Bestückungsplan und das Layout der Platine sind im Anhang zu finden. Aus dem Bestückungsplan sind auch die Steckerbelegungen der Platine zu entnehmen.

Die Platine wird mit den Spannungen 5V (VCC), +12V (VDD) und -12V (VEE) versorgt, wobei die Stromaufnahme von der Art der Bestückung abhängt (TTL oder CMOS). Bei Bestückung mit HCT-Bausteinen und einer normalen NMOS-CPU und NMOS-Speichern benötigt die Platine auf der 5V-Leitung etwa 400 mA.

Der Speicher teilt sich in einen RAM- und einen ROM-Bereich, wobei der ROM-Bereich bei Adresse $0000 beginnt und der RAM-Bereich bei Adresse $8000. Es stehen also jeweils 32 kByte für jeden Bereich zur Verfügung. Die Größe des tatsächlich eingesetzten Speichers hängt von den verwendeten Bauteilen ab; sie muss durch die Jumper J1 und J2 eingestellt werden:

RAM | J2
4364 | Pin 26 mit VCC verbinden
43256 | Pin 26 mit A13 verbinden
EPROM | J1
2764 | Pin 27 mit Vcc verbinden
27128 | Pin 27 mit Vcc verbinden
27256 | Pin 27 mit A14 verbinden

Schaltplan des Z80-Minimalsystems

Der IO-Adressraum der CPU wurde in 7 Teile zu je 32 Adressen aufgespalten, wobei die Adressen $60 bis $DF vom IO-Bus eingenommen werden, der Bereich von $E0 bis $FF ist unbelegt. Die drei auf der Platine angebrachten IO-Kanäle verwenden folgende Adressen:

Port | Adresse
PIN (8-Bit-Paralleleingang) | $00
DIPSW (8fach DIP-Switch) | $20
POUT (8-Bit-Parallelausgang) | $40

Der IO-Bus ist ein bidirektionaler 8-Bit-Bus, der alle notwendigen Signale enthält, um alle Z80-Interruptmodi zu unterstützen. Die Bussignale sind gepuffert, so dass auch eine größere Anzahl von externen Bausteinen angeschlossen werden kann (etwa 50 LS-TTL-Bausteine bzw. MOS-Bauelemente). Außerdem sind am Bus alle Betriebsspannungen vorhanden, so dass auf den Einsteckkarten neben den 5V auch +/- 12V zur Verfügung stehen.

Die vier Bussteckplätze unterstützen die Priorisierung von Interruptanforderungen, indem die Interrupt-Daisy-Chain über den Bus geführt wird. Steckplatz A (siehe Platinenplan) besitzt die höchste Priorität, Steckplatz D die niedrigste. Zu beachten ist, dass die Laufzeit der Signale auf der Daisy-Chain nicht beliebig lang sein darf, da es sonst Probleme bei der korrekten Erkennung von Interrupts gibt. Möchte man also die Peripherie stark ausbauen, so muss eventuell der Interruptzyklus durch Einfügen von Wait-States verlängert werden.

In der folgenden Stückliste sind alle für den Aufbau der Platine notwendigen Bauteile aufgelistet.

IC1 | Z8400A (Z80-CPU)
IC2 | EPROM2764, 27128 oder 27256
IC3 | RAM MB8464 oder MB84256 o.ä.
IC4, IC5, IC10 | 74LS245
IC6 | 74LS574
IC7 | 8fach DIP-Switch
IC8 | 74LS138
IC9, IC12 | 74LS367
IC11 | 74LS139
IC13 | 7404 (kein LS oder HCMOS !!)
IC14 | 74LS02
R1, R6 | 3k9
R2 | 10k
R3 | 8x10k SIL-Widerstandsnetzwerk
R4, R5 | 1k0
C1, C2, C3, C6, |
C7, C8 | 10 uF, Tantalelko, 16 V
C4, C5 | 10 uF Tantalelko, 25 V
D1 | 1N4148
X1 | Quarz, 4.00 MHz

Sonstiges:

1 Stk. | 40poliger DIL-Sockel
2 Stk. | 28polige DIL-Sockel
2 Stk. | 14poliger DIL-Sockel
4 Stk. | 16polige DIL-Sockel
4 Stk. | 20polige DIL-Sockel
4 Stk. | VG-64-Federleisten, ac-bestückt
1 Stk. | 5polige Lötschraubklemme
2 Stk. | 3x1polige Stiftleisten
1 Stk. | 2x1polige Stiftleiste
2 Stk. | 2x5polige Stiftleisten
1 Stk. | Platine uP1
8 Stk. | Schrauben 2.5x6 mm
8 Stk. | Muttern 2.5 mm
2 Stk. | Jumper

Layout der Platine uP1

Last Update: 2005-Okt-08


Platine SERPAR

Die Platine SERPAR wurde als Erweiterungskarte für das Minimalsystem uP1 entwickelt. Die Karte wird auf einen der Busstecker der Platine uP1 aufgesteckt. Sie enthält einen Timer (Z80 CTC), zwei serielle Schnittstellen (Z80 DART), eine Parallelschnittstelle (Z80 PIO) und einen Anschluss an den I/O-Bus, um eine 7-Segment-Anzeige anschließen zu können.

In der Abbildung ist der Schaltplan der Karte dargestellt. Die Karte belegt 32 aufeinander folgende Adressen im IO-Adressraum der Platine uP1, deren Beginn durch Jumper J2 festgelegt wird. Für alle in diesem Buch beschriebenen Experimente muss Jumper J2 mit /SEL0 verbunden sein. In der folgenden Tabelle sind die vier möglichen Basisadressen aufgeführt:

Jumper J2 | Basisadresse
/SEL0 | 60H
/SEL1 | 80H
/SEL2 | A0H
/SEL3 | C0H

Von den 32 Adressen werden aber nur 14 Adressen belegt, die sich folgendermaßen aufteilen (alle Adressangaben beziehen sich auf die über Jumper J2 eingestellte Basisadresse):

Adresse | Port
00H | CTC, Kanal 0
01H | CTC, Kanal 1 (CLK für DART-B)
02H | CTC, Kanal 2 (CLK für DART-A)
03H | CTC, Kanal 3
04H | DART, Datenregister, Kanal A
05H | DART, Datenregister, Kanal B
06H | DART, Kontrollregister, Kanal A
07H | DART, Kontrollregister, Kanal B
08H | PIO, Datenregister, Kanal A
09H | PIO, Datenregister, Kanal B
0AH | PIO, Kontrollregister, Kanal A
0BH | PIO, Kontrollregister, Kanal B
0CH | 7SGDSP, Datenlatch
10H | 7SGDSP, Dezimalpunkte

Die Karte unterstützt voll den Z80-Interruptmodus (IM 2) der CPU, wobei die Priorisierung der Interrupts über eine Daisy-Chain erfolgt. Der Timer hat hierbei die höchste Priorität, der PIO die niedrigste.

Schaltplan der Platine SERPAR

CTC

Der CTC wird von einem eigenen Quarzoszillator versorgt, der mit einer Frequenz von 6.144 MHz schwingt. Diese Frequenz ist sowohl für die Baudratenerzeugung als auch für Timingzwecke ausgezeichnet geeignet, da sie sich aus folgenden Faktoren zusammensetzt: 214 * 3 * 53. Die Frequenz des Quarzgenerators wird über einen 4-Bit-Teiler (LS393) geteilt. Drei dieser vier Frequenzen sind über den Jumper (J4) auswählbar und werden dem Kanal 1 und 2 des CTC zugeführt, die für die Baudratenerzeugung der DART zuständig sind. Außerdem wird die Frequenz 1.536 MHz dem Kanal 3 des CTC zugeführt, der als universeller Timer verwendet werden kann. Kanal 0 des CTC wird über den Eingang CNTIN und den Vorteiler angesteuert, um als universeller Zähler verwendet werden zu können. Zu beachten ist, dass die maximale Eingangsfrequenz des Teilers am Pin TG0 (Pin 23) die halbe Frequenz des Signals CLK sein darf (also 2 MHz).

DART

Die zwei voneinander unabhängigen Kanäle des DART werden über die RS-232-Treiber 1489 und 1488 auf die Stecker SERA und SERB gelegt. Die beiden seriellen Schnittstellen stellen zu den Datenleitungen jeweils zwei Handshake-Leitungen zur Verfügung, so dass eine Vierdraht-Leitung mit den Signalen Rx, Tx, CTS und RTS implementiert ist. Die Baudraten werden wie oben beschrieben mit den CTC-Kanälen 1 und 2 erzeugt.

PIO

Die PIO hat alle IO-Anschlüsse ohne Treiber auf den Stecker gelegt, so dass alle Betriebsarten der PIO voll ausgeschöpft werden können. Möchte man mit der PIO lange Leitungen treiben, sind jedoch Treiberbausteine zu verwenden.

7SGDSP

Dieser Anschluss dient zum Betrieb des sechsstelligen 7-Segment-Displays (Platine 7SGDSP). Es sind alle Steuersignale und die Versorgungsspannung so an den Stecker geführt, dass das Display direkt mit einem Flachbandkabel angeschlossen werden kann (siehe auch Beschreibung der Platine 7SGDSP).

Layout und Pinbelegung

Die Abbildung zeigt den Bestückungsplan der Platine SERPAR und die Pinbelegung der I/O-Anschlüsse. Die folgende Stückliste hilft beim Aufbau der Platine.

IC1 | Z8470A (DART)
IC2 | Z8420A (PIO)
IC3 | Z8430A (CTC)
IC4 | MC1488 oder SN75188
IC5 | MC1489 oder SN75189
IC6 | 74LS138
IC7 | 7404 (kein LS oder HCMOS !!)
IC8 | LS393
R1, R2 | 1k0
R3 | 10k
C1, C2, C3, C4 | 10 uF, Tantalelko, 16 V
C5, C6 | 10 uF Tantalelko, 25 V
X1 | Quarz 6.144 MHz

Sonstiges:

1 Stk. | VG-64-Messerleiste, ac-bestückt
2 Stk. | 40polige DIL-Sockel
1 Stk. | 28poliger DIL-Sockel
4 Stk. | 14polige DIL-Sockel
1 Stk. | 16poliger DIL-Sockel
3 Stk. | 2x5polige Stiftleisten
2 Stk. | 2x4polige Stiftleiste
1 Stk. | 2x3polige Stiftleiste
1 Stk. | 2x13polige Stiftleiste
1 Stk. | 2x10polige Stiftleiste
1 Stk. | Platine SERPAR
2 Stk. | Schrauben, 2.5x8 mm
2 Stk. | Muttern, 2.5 mm
3 Stk. | Jumper

Layout und Bestückungsplan der Platine

Last Update: 2005-Okt-08


Platine 7SGDSP

Die Platine P7SGDSP dient als sechsstellige numerische Anzeigeeinheit. Die Anzeigeeinheit ist mit Hilfe von 7-Segment-LED-Ziffern aufgebaut und enthält alle notwendigen Treiber und Steuerbausteine, so dass sie direkt am Bus eines Mikrocomputers betrieben werden kann.

Schaltplan der Platine 7SGDSP

Die Leuchtdioden werden mit den CMOS-Ziffern-Treibern CD4511 angesteuert, für die Ansteuerung der Dezimalpunkte und der Minuszeichen wurde ein 8fach CMOS-Treiber (74HCT574) verwendet. Die Zifferntreiber können alle Ziffern zwischen 0 und 9 darstellen, die Bitkombinationen 1010 bis 1111 (10 bis 15) werden als leere Ziffern angezeigt und können zum Löschen der Anzeige verwendet werden. Die Adresscodierung der Treiberbausteine ist so aufgebaut, dass mit einem Datenbyte sowohl die gewünschte Ziffer als auch die Adresse der Ziffer übergeben wird. Dabei beinhalten die Bits null bis drei die Ziffer und die Bits fünf bis sieben die Adresse.

Die Dezimalpunkte und die Minuszeichen werden mit dem Register HCT574 angesteuert. Dies erlaubt eine Anzeige von mehreren Dezimalpunkten gleichzeitig (für Spezialeffekte). Die negativen Vorzeichen können nur in den vordersten zwei Ziffern angezeigt werden. Wichtig ist, dass für diesen Treiber kein LS-TTL-Baustein verwendet wird, da dieser nicht den nötigen Strom liefern könnte.

Die Platine ist mit einer 20poligen Stiftleiste für den Anschluss der Daten- und Steuerleitungen versehen. Für die Montage der Anzeigeeinheit an einer Frontplatte kann diese Stiftleiste von der Lötseite bestückt werden, um ein leichtes Stecken ohne Ausbau des Displays zu gewährleisten. In diesem Fall ist aber darauf zu achten, dass das Verbindungskabel spiegelverkehrt zu verdrahten ist (Einpress-Steckverbinder auf den gegenüberliegenden Seiten des Flachbandkabels montieren).

Der folgende Bestückungsplan und die entsprechende Stückliste erleichtern den Aufbau des Displays. Es ist darauf zu achten, dass die angegebenen Widerstandswerte für rote Anzeigen berechnet sind. Für grüne oder gelbe LEDs müssen die Widerstände auf die in Klammern angegebenen Werte erniedrigt werden.

R1-R18 | 330 Ω (270 Ω)
R19, R31 | 220 Ω (180 Ω)
R20-R30 | 330 Ω (270 Ω)
R32-R48 | 330 Ω (270 Ω)
C1 | 10 µF/16V Tl Elko
D1-D4 | 1N4148
IC1-IC6 | CD4511
IC7 | 74HCT138
IC8 | 74HCT574 (keinen LS-Typ verwenden!)
3 Stk. | TIL815
7 Stk. | 16polige Sockel
1 Stk. | 20poliger Sockel
1 Stk. | 2x10polige Stiftleiste
1 Platine | 7SGDSP

Layout und Bestückungsplan der Platine L47SGDSP

Last Update: 2005-Okt-08


Platine ADAC12

Die Platine ADAC12 stellt eine Erweiterungskarte für das oben erwähnte Mikroprozessorsystem uP1 dar. Sie enthält einen 12-Bit-AD-Wandler mit 8-Kanal-Multiplexer und programmierbarem Verstärker. Vier Kanäle davon sind mit Eingangsvorverstärker und Eingangsfilter ausgestattet. Außerdem bietet die Platine noch zwei DA-Wandlern mit jeweils 12 Bit Auflösung Platz. Die Abbildung zeigt den Schaltplan der Platine.

Die Karte belegt 32 aufeinander folgende Adressen im IO-Adressraum der Platine uP1, deren Beginn durch den Jumper J2 festgelegt wird. Für alle in diesem Buch beschriebenen Experimente muss Jumper J2 auf /SEL1 gesetzt sein. In der folgenden Tabelle sind die vier möglichen Basisadressen aufgeführt:

Jumper J2 | Basisadresse
/SEL0 | 60H
/SEL1 | 80H
/SEL2 | A0H
/SEL3 | C0H

Schaltplan der Platine ADAC12

Von den 32 Adressen werden aber nur 14 Adressen belegt, die sich folgendermaßen aufteilen (alle Adressangaben beziehen sich auf die über Jumper J2 eingestellte Basisadresse):

Adresse | Port
00H | ADC, high byte
01H | ADC, low byte
08H | PGA, Kanal 0
09H | PGA, Kanal 1
0AH | PGA, Kanal 2
0BH | PGA, Kanal 3
0CH | PGA, Kanal 4
0DH | PGA, Kanal 5
0EH | PGA, Kanal 6
0FH | PGA, Kanal 7
12H | DAC 1, low byte
14H | DAC 1, high byte
1AH | DAC 2, low byte
1CH | DAC 2, high byte

Vorverstärker und Filter

Die Vorverstärker für die Kanäle 0 bis 3 sind Instrumentenverstärker, deren Verstärkung mit Hilfe der Widerstände R5, R13, R21 und R29 eingestellt werden können. Die Verstärkung ergibt sich aus der Gleichung

A = 1 + 40000/Rx.

Die im Schaltplan und in der Stückliste angegebenen Werte von 10 kΩ ergeben also eine Verstärkung von fünf. Bei jedem Vorverstärker kann der Offset mit Hilfe der Cermet-Potentiometer P5 bis P8 auf null abgeglichen werden.

Der Eingangswiderstand der Vorverstärker ist sehr hoch (typ. 10 10 Ω), er kann durch Einsetzen der Widerstände R3 und R4 (bzw. R11 und R12, R19 und R20, R25 und R26) auf den gewünschten Wert begrenzt werden. Diese Widerstände sollten für jeden Kanal gleich groß sein, da sonst die Gleichtaktunterdrückung herabgesetzt wird. Zum Schutz gegen zu hohe Eingangsspannungen sind die Eingänge mit Zenerdioden (12V) abgesichert.

Die bei den Kanälen 0 bis 3 eingesetzten Filter sind einfache Sallen-Key-Filter 2. Ordnung, die eine Gleichspannungsverstärkung von eins aufweisen. Die Grenzfrequenz ist auf 10 kHz eingestellt, was gut zur höchsten Datenerfassungsrate des AD-Wandlers paßt. Der Leser sollte sich jedoch im klaren sein, dass die Grenzfrequenz entsprechend dem Nyvist-Theorem der jeweiligen Abtastrate angepaßt werden muss. Dazu können (für Kanal 0) entweder die Kondensatoren C3 und C4 oder die Widerstände R6 und R8 verändert werden. Eine Erhöhung der Kapazitätswerte bzw. der Widerstandswerte ergibt niedrigere Grenzfrequenzen und umgekehrt. Zu beachten ist, dass das Verhältnis der Kapazitäten C4 zu C3 etwa gleich zwei und das Verhältnis der Widerstände genau gleich eins sein sollte.

Multiplexer und programmierbarer Verstärker

Als 8-Kanal-Multiplexer und programmierbarer Verstärker wird der Typ PGA100 herangezogen, da dieser Baustein die Verstärkung in 8 Stufen im Verhältnis von jeweils 2:1 einstellen kann. Durch die binäre Verstärkungseinstellung läßt sich mit einfachen Mitteln leicht ein großer dynamischer Bereich der AD-Konversion erzielen. Da dieser Baustein aber relativ teuer ist, kann er für Anwendungen, die nur einen Datenerfassungskanal benötigen und mit 12 Bit Dynamik auskommen, auch überbrückt werden. In diesem Fall ist eine Brücke zwischen dem aktiven Eingangskanal und dem Pin 11 von IC15 zu legen.

AD-Wandler

Als AD-Wandler wird der Baustein ADC574 eingesetzt. Dieser Wandler arbeitet nach dem Prinzip der sukzessiven Approximation und bietet eine Konversionszeit von 25 µsek bei 12 Bit Auflösung. Die Daten werden in zwei Bytes übergeben, die auf zwei verschiedenen I/O-Adressen gelesen werden können. Die Auflösung des Ergebnisses kann per Software zwischen 8 Bit und 12 Bit umgeschaltet werden. Dazu wird zum Start der Konversion wahlweise entweder das High-Byte (für 12 Bit) oder das Low-Byte (für 8 Bit) des AD-Wandlers beschrieben.

Die maximale Eingangsspannung des AD-Wandlers kann durch einen Jumper (J1) auf entweder +/- 10 V oder +/- 5 V eingestellt werden.

DA-Wandler

Die Platine ADAC12 beinhaltet auch zwei komplette 12-Bit-DA-Wandler, die eine Spannung zwischen -10V und +10V mit einer Auflösung von ca. 5 mV ausgeben können. Die DA-Wandler werden im Binary-Offset-Code angesteuert, 0000H entspricht -10 V, 8000H entspricht 0 V und FFFFH entspricht +10 V. Das Datenwort wird in zwei Bytes in folgender Weise übergeben: Der 12-Bit-Wert wird zuerst mit 16 multipliziert (4 Bits nach links schieben), dadurch rückt das MSB (Bit 11) auf die Stelle von Bit 15, die Bits 0 bis 3 werden gleich null. Dann wird zuerst das niederwertige Byte auf die Low-Byte-Adresse des gewünschten DACs ausgeben und darauf das höherwertige Byte auf die High-Byte-Adresse. Der DA-Wandler speichert intern das niederwertige Byte und erst bei der Übergabe des höherwertigen Bytes wird der neue 12-Bit-Wert in analoger Form ausgegeben.

Ablauf der Erfassung eines Messwertes

Zur Messung einer Spannung mit der Karte ADAC12 muss der ansteuernde Mikrocomputer die Karte in zwei Phasen ansteuern. Zuerst muss an den Multiplexer die gewünschte Kanalnummer und Verstärkung ausgegeben werden. Mit dieser Umschaltung wird zugleich per Hardware die S&H-Schaltung für ca. 10 µsek in den Sample-Modus geschaltet. Der Mikrocomputer muss diese Zeit abwarten (z.B. durch Ausführen von ein paar Dummy-Befehlen), bis er den AD-Wandler starten darf. Geschieht der Start des AD-Wandlers zu früh, so kann es bei Eingangssignalen mit höherer Anstiegsgeschwindigkeit zu Verfälschungen des Messergebnisses kommen. Nach dem Start der Konversion muss der Mikrocomputer die Zeit für den Digitalisierungsvorgang (je nach Typ des AD-Wandlers und Auflösung zwischen 10 und 25 µsek) abwarten. Dann kann er das Ergebnis der Konversion vom AD-Wandler lesen und weiterverarbeiten.

Die folgende Stückliste und der Bestückungsplan erleichtern den Aufbau der Platine. Da bei dieser Platine teure Bausteine verwendet werden, ist es ratsam, vor der eigentlichen Inbetriebnahme die Platine ohne Bauteile unter Spannung zu setzen und alle Pins der teuren Bausteine nochmals auf die richtigen Spannungspegel zu überprüfen (+/- 12 Volt darf nur an den dafür vorgesehenen Pins anliegen).

IC1, IC3, IC5, IC7 | INA101
IC2, IC4, IC6, IC8 | OP07
IC9 | 74LS139
IC10, IC11 | DAC1201KP
IC12 | ADC574
IC13 | 74123
IC14 | LF398
IC15 | PGA100
IC16 | 74LS04
D1 - D16 | Zenerdiode 12 V (z.B. BZX12)
D101 - D108 | Zenerdiode 12 V (z.B. BZX12)
C1, C2, C5, C6, C9, |
C10, C13, C14, C101, |
C102, C106, C107, |
C108, C109 | Tl-Elko 10 µF / 16V
C3, C7, C11, C15 | 1 nF
C4, C8, C12, C16 | 2.2 nF
C105 | 4.7 nF
C103 | 1 nF (Polystyrrol)
C104 | 10 pF
R1, R2, R9, R10, |
R17, R18, R25, R26, |
R103 - R110 | 1 kΩ
R3, R4, R11, R12, |
R19, R20, R27, R28 | 1 MΩ
R5, R13, R21, R29 | 10.0 kΩ (1%)
R6, R14, R22, R30, |
R7, R15, R23, R31, |
R102 | 10 kΩ
R8, R16, R24, R32, |
R101 | 22 kΩ
P1 | 10 kΩ Cermet-Potentiometer
P2 | 1 kΩ Cermet-Potentiometer
P3, P4 | 100 Ω Cermet-Potentiometer
P5 - P8 | 100 kΩ Cermet-Potentiometer

Sonstiges:

1 Stk. | VG-64-Messerleiste, ac-bestückt
3 Stk. | 28poliger DIL-Sockel
1 Stk. | 24polige DIL-Sockel
5 Stk. | 14polige DIL-Sockel
2 Stk. | 16poliger DIL-Sockel
5 Stk. | 8poliger DIL-Sockel
5 Stk. | 2x5-polige Stiftleisten
1 Stk. | 2x4-polige Stiftleiste
1 Stk. | 1x3-polige Stiftleiste
1 Stk. | Platine ADAC12
2 Stk. | Schrauben, 2.5x8 mm
2 Stk. | Muttern, 2.5 mm
2 Stk. | Jumper

Layout und Bestückungsplan der Platine ADAC12

Last Update: 2005-Okt-11


Operationsverstärker

Einfach-Operationsverstärker

LF357 | LF351 | LF13741 | LF441 | OP01
OP02 | P15 | uA741 | OP19 | OP21

Zweifach-Operationsverstärker

LF412 | LF353 | LF442 | LM392 | LM2924
OP03 | OP04 | OP14 |  |

Vierfach-Operationsverstärker

LF347 | LF444 | LM324 | LM2902 | LM348
LM349 | OP420 | OP421 |  |

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] TTL 7400...7432
Index
Siehe auch: TTL 7438...74107, TTL 74123...74170, TTL 74173...74299, TTL 74367...74670

TTL 7400...7432

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] TTL 7438...74107
Index
Siehe auch: TTL 7400...7432, TTL 74123...74170, TTL 74173...74299, TTL 74367...74670

TTL 7438...74107

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] TTL 74123...74170
Index
Siehe auch: TTL 7400...7432, TTL 7438...74107, TTL 74173...74299, TTL 74367...74670

TTL 74123...74170

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] TTL 74173...74299
Index
Siehe auch: TTL 7400...7432, TTL 7438...74107, TTL 74123...74170, TTL 74367...74670

TTL 74173...74299

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] TTL 74367...74670
Index
Siehe auch: TTL 7400...7432, TTL 7438...74107, TTL 74123...74170, TTL 74173...74299

TTL 74367...74670

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] CMOS 4001...4024
Index
Siehe auch: CMOS 4028...4052, CMOS 4060...4511

CMOS 4001...4024

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] CMOS 4028...4052
Index
Siehe auch: CMOS 4001...4024, CMOS 4060...4511

CMOS 4028...4052

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] CMOS 4060...4511
Index
Siehe auch: CMOS 4001...4024, CMOS 4028...4052

CMOS 4060...4511

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] EPROMs
Index

Pinbelegung: EPROMs

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] RAMs
Index

Pinbelegung: RAMs

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] Mikroprozessoren
Index

Pinbelegung: Mikroprozessoren

Last Update: 2005-Okt-08


Home [image] Anhang [image] Pinbelegung [image] Peripherie
Index

Pinbelegung: Peripherie

Last Update: 2005-Okt-08


Parameter und Globale Variable

;
;************************************************
;*                                              *
;*  Parameter und globale Variable              *
;*      Minimalsystem uP1                       *
;*                                              *
;*  Version 1.0  März 1990                      *
;*                                              *
;*  (C) 1990 H.Lohninger                        *
;*                                              *
;************************************************
;
.SPACES ON
.FILLCHAR 0
.MACLIST OFF
;
;===================================================
;------- MACRO-Definitionen ------------------------
;===================================================
;
;------- Globale Variable --------------------------
;
CVAR        .MACRO X,Y
            .GLOBAL X
X:          BLKB    Y
            .ENDM
;
;------- Globale Konstanten ------------------------
;
DEFINE      .MACRO  X,Y
X           EQU     Y
            .PUBLIC X
            .ENDM
;
;===================================================
;------ Konstanten ---------------------------------
;===================================================
;
            DEFINE  TRUE,0FFH
            DEFINE  FALSE,0
            DEFINE  STKLNG,200
;
;------ I/O configuration --------------------------
;
                                    ; C T C
            DEFINE  CTC0,060H
            DEFINE  CTC1,061H
            DEFINE  CTC2,062H
            DEFINE  CTC3,063H
                                ; P I O
            DEFINE  PIOAC,6AH   ;Steuerbyte, Kanal A
            DEFINE  PIOAD,68H   ;Daten Kanal A
            DEFINE  PIOBC,6BH   ;Steuerbyte Kanal B
            DEFINE  PIOBD,69H   ;Daten Kanal B
                                ; D A R T
            DEFINE  DARTAC,66H  ;Steuerbyte Kanal A
            DEFINE  DARTAD,64H  ;Daten Kanal A
            DEFINE  DARTBC,67H  ;Steuerbyte Kanal B
            DEFINE  DARTBD,65H  ;Daten Kanal B
;
            DEFINE  DIPSW,020H  ;DIP-Switch
            DEFINE  POUT,040H   ;Digitaler Ausgang POUT
            DEFINE  PIN,000H    ;Digitaler Eingang PIN
;
            DEFINE  DAC1HI,94H  ;DAC1, high byte
            DEFINE  DAC1LO,92H  ;DAC1, low byte
            DEFINE  DAC2HI,9CH  ;DAC2, high byte
            DEFINE  DAC2LO,9AH  ;DAC2, low byte
;
            DEFINE  MUXBAS,88H  ;PGA Basis Adresse
            DEFINE  ADCHI,80H   ;high byte ADC
            DEFINE  ADCLO,81H   ;low byte ADC
;
            DEFINE  DSPLAT,6CH  ;Display, Daten
            DEFINE  DSPDPM,70H  ;Display, Dezimalpunkte
;
;------ system configuration -----------------------
;
            DEFINE  SRAM,08000H ;SRAM
;
;===================================================
;------ Variablen ----------------------------------
;===================================================
;
            .DATA
;
            CVAR    STBUF,STKLNG            ;System Stack
            DEFINE  STACK,STBUF+STKLNG      ;Stackbeginn
            CVAR    VAWRBF,102H ;DART-A transmitter
            CVAR    VBWRBF,102H ;DART-B transmitter
            CVAR    VARDBF,102H ;DART-A receiver
            CVAR    VBRDBF,102H ;DART-B receiver
            CVAR    CNTRLA,1    ;control chars DART-A
            CVAR    CNTRLB,1    ;control chars DART-B
            CVAR    STPOTA,1    ;Flag: Datenstopp DART-A
            CVAR    STPOTB,1    ;Flag: Datenstopp DART-B
            CVAR    USOTLA,1    ;Flag: Spooler leer (A)
            CVAR    USOTLB,1    ;Flag: Spooler leer (B)
;
            .CODE
;
            .END

Last Update: 2005-Okt-08


Betriebsprogramm zum Minimalsystem uP1

;
;********************************************************
;*                                                      *
;*    MINIMON                                           *
;*  Betriebsprogramm zum Minimalsystem uP1              *
;*                                                      *
;*  (C) H.Lohninger      März 1990                      *
;*                                                      *
;********************************************************
;
.SPACES ON
.FILLCHAR 0
.MACLIST OFF
;
;===================================================
;------- MACRO-Definitionen ------------------------
;===================================================
;
;
;----- AKKU zu HL addieren -------------------------
;
ADDHLA      .MACRO
            ADD     A,L
            LD      L,A
            LD      A,0
            ADC     A,H
            LD      H,A
            .ENDM
;
;----- if Byte-Variable TRUE -----------------------
;
IFTRUE      .MACRO  X,Y
            LD      A,(X)
            CP      TRUE
            JP      Z,Y
            .ENDM
;
;----- if Byte-Variable FALSE ----------------------
;
IFFALSE .MACRO      X,Y
            LD      A,(X)
            CP      FALSE
            JP      Z,Y
            .ENDM
;
;----- if AKKU = X,  then GOTO Y -------------------
;
IFA.EQ. .MACRO      X,Y
            CP      X
            JP      Z,Y
            .ENDM
;
;----- if AKKU <> X then GOTO Y -------------------
;
IFA.NE. .MACRO      X,Y
            CP      X
            JP      NZ,Y
            .ENDM
;
;----- Speichervariable laden ----------------------
;
LOAD        .MACRO X,Y
            LD      A,Y
            LD      (X),A
            .ENDM
;
;===================================================
;----- externe Labels ------------------------------
;===================================================
;
;------ EXTERNALS: Ports ---------------------------
;
            EXTERNAL PIN, POUT, DIPSW, ADCHI, ADCLO, DAC1HI, DAC1LO
            EXTERNAL CTC0, CTC1, CTC2, CTC3, DAC2HI, DAC2LO, MUXBAS
            EXTERNAL PIOAC, PIOAD, PIOBC, PIOBD, DSPDPM, DSPLAT
            EXTERNAL DARTAC, DARTAD, DARTBC, DARTBD
;
;------ EXTERNALS: VARIABLES -----------------------
;
            EXTERNAL STACK, CNTRLA, CNTRLB, STPOTA, STPOTB
            EXTERNAL VAWRBF, VBWRBF, VARDBF, VBRDBF
            EXTERNAL TRUE, FALSE, USOTLA, USOTLB
;
            ORG     0000H
;
;===================================================
            JP      COLD        ; Kaltstart
;===================================================
;
            .INCLUDE EXSIN2.ASM
;
;===================================================
;----- I N T E R R U P T - H A N D L E R -----------
;===================================================
;
            ORG     00100H
;
ICTC:       DEFW    IFREQ       ; CTC0
            DEFW    IGNORE      ; CTC1
            DEFW    IGNORE      ; CTC2
            DEFW    ICLOCK      ; CTC3
            DEFS    8
;
IDART:      DEFW    PUTICB      ;DARTB: Sender leer
            DEFW    ITBRKB      ;DARTB: Statuswechsel
            DEFW    GETICB      ;DARTB: Empfänger voll
            DEFW    INTERB      ;DARTB: spezielle Ausnahme
            DEFW    PUTICA      ;DARTA: Sender leer
            DEFW    ITBRKA      ;DARTA: Statuswechsel
            DEFW    GETICA      ;DARTA: Empfänger voll
            DEFW    INTERA      ;DARTA: spezielle Ausnahme
;
IPIOA:      DEFW    IGNORE      ; PIO A
IPIOB:      DEFW    IGNORE      ; PIO B
;
;===================================================
;------ INTERRUPT: DART-A break --------------------
;===================================================
;
ITBRKA:     PUSH    AF
            LD      A,10H
            OUT     (DARTAC),A
            POP     AF
            EI
            RETI
;
;===================================================
;------ INTERRUPT: DART-B break --------------------
;===================================================
;
ITBRKB:     PUSH    AF
            LD      A,10H
            OUT     (DARTBC),A
            POP     AF
            EI
            RETI
;
;===================================================
;------ INTERRUPT: DART-A Fehler -------------------
;===================================================
;
INTERA:     PUSH    AF
            LD      A,30H
            OUT     (DARTAC),A
            POP     AF
            EI
            RETI
;
;===================================================
;------ INTERRUPT: DART-B Fehler -------------------
;===================================================
;
INTERB:     PUSH    AF
            LD      A,30H
            OUT     (DARTBC),A
            POP     AF
            EI
            RETI
;
;===================================================
;---- nicht initialisierte Interrupts ignorieren ---
;===================================================
;
IGNORE:     EI
            RETI
;
            .INCLUDE IDARTA.ASM
;
;===================================================
;------ INTERRUPT: Empfänger DART-B voll -----------
;===================================================
;
            .GLOBAL GETICB
GETICB:     PUSH    AF
            PUSH    HL
            PUSH    DE
            PUSH    BC
            IN      A,(DARTBD)  ;Zeichen von DART lesen
;
$5:         LD      HL,CNTRLB
            DEC     (HL)        ;Verarbeitung der
            INC     (HL)        ;  Control-Codes ein ?
            JR      Z,$2
;
            IFA.NE. 'S'-40H,$3  ;^S ?
            LD      HL,STPOTB
            LD      (HL),TRUE   ;Ausgabe stoppen
            JR      $1
;
$3:         IFA.NE. 'Q'-40H,$6  ;^Q ?
            LD      HL,STPOTB
            LD      (HL),FALSE  ;Ausgabe fortsetzen
            CALL    TRMDTB
            JR      $1
;
$6:         IFA.EQ. 'C'-40H,$4  ;^C ?
;
$2:         LD      HL,VBRDBF   ;Zeichen in FIFO schreiben
            CALL    WRFIFO
            LD      HL,VBRDBF   ;RTS rücksetzen ?
            CALL    TSTFIF
            CP      0FAH        ;mehr als 250 Zeichen ?
            JR      C,$1
            LD      A,5
            OUT     (DARTBC),A
            LD      A,(DBREG5)
            RES     1,A
            LD      (DBREG5),A
            OUT     (DARTBC),A  ;RTS rücksetzen
$1:         POP     BC
            POP     DE
            POP     HL
            POP     AF
            EI
            RETI
;
$4:         LD      HL,WARM     ;Warmstart
            PUSH    HL
            LD      HL,STPOTB   ;Ausgabe einschalten
            LD      (HL),FALSE
            EI
            RETI
;
            .INCLUDE ICLOCK.ASM
;
;===================================================
;--- Zeichen von DART B lesen ----------------------
;===================================================
;
;Eingang:   -
;Ausgang:   CF = 1, falls kein Zeichen vorhanden
;                       CF = 0, AKKU enthält gültiges Zeichen
;
            .GLOBAL RDV24B
RDV24B:     PUSH    HL
            PUSH    BC
            LD      HL,VBRDBF   ;RTS setzen ?
            CALL    TSTFIF
            CP      100         ;weniger als 100 Zeichen ?
            JR      NC,$1
            LD      A,5
            OUT     (DARTBC),A
            LD      A,(DBREG5)
            SET     1,A
            LD      (DBREG5),A
            OUT     (DARTBC),A  ;RTS setzen
$1:         LD      HL,VBRDBF
            CALL    RDFIFO
            POP     BC
            POP     HL
            RET
;
            .INCLUDE SETPDA.ASM
;
;===================================================
;--- Protokoll von DART-B einstellen ---------------
;===================================================
;
;Eingang:   AKKU enthält Steuerzeichen
;Ausgang:   Protokoll von DART-A eingestellt
;
;           8,7,6 ... Baudrate:
;                       OFF OFF OFF = 150 Baud
;                       OFF OFF ON  = 300 Baud
;                       OFF ON  OFF = 600 Baud
;                       OFF ON  ON  = 1200 Baud
;                       ON  OFF OFF = 2400 Baud
;                       ON  OFF ON  = 4800 Baud
;                       ON  ON  OFF = 9600 Baud
;                       ON  ON  ON  = 19200 Baud
;           5 ..... Zahl der Datenbits:
;                       OFF = 7 Datenbits
;                       ON  = 8 Datenbits
;           4 ..... Parität:
;                       ON  = Paritybit wird erzeugt
;                       OFF = Paritybit wird nicht erzeugt
;           3 ..... Parity:
;                       OFF = even
;                       ON  = odd
;           2 ..... Zahl der Stoppbits
;                       ON  = 2 Stoppbits
;                       OFF = 1 Stoppbit
;           1 ..... unbenutzt
;
            .GLOBAL SETPDB
SETPDB:     PUSH    AF
            PUSH    HL
            LD      (PROTBK),A
            SRL     A           ;Baudrate
            SRL     A
            SRL     A
            SRL     A
            AND     0EH
            PUSH    AF          ;speichern für CLK-mode
            LD      HL,BAUDTB
            ADDHLA
;           LD      A,3
;           OUT     (CTC1),A    ;Timer anhalten
            LD      A,(HL)
            OUT     (CTC1),A    ;Mode-Word laden
            INC     HL
            LD      A,(HL)
            OUT     (CTC1),A    ;Zeitkonstante laden
;
            LD      HL,PROTBK   ;Parität
            POP     AF
            CP      4           ;Baudrate <= 300 ?
            LD      A,044H      ;x16 Modus
            JR      NC,$6
            LD      A,0C4H      ;x64 Modus
$6:         BIT     2,(HL)      ;Parität even/odd
            JR      NZ,$1
            SET     1,A
$1:         BIT     3,(HL)      ;Parität ein/aus
            JR      Z,$2
            SET     0,A
$2:         BIT     1,(HL)      ;Stoppbits
            JR      Z,$5
            SET     3,A
$5:         PUSH    AF          ;DART laden
            LD      A,4
            OUT     (DARTBC),A
            POP     AF
            OUT     (DARTBC),A
;
            LD      A,5         ;Zahl der Sender Datenbits
            OUT     (DARTBC),A
            LD      A,0AAH
            BIT     4,(HL)
            JR      Z,$3
            SET     6,A
$3:         OUT     (DARTBC),A
            LD      (DBREG5),A  ;Backup Register 5
;
            LD      A,3         ;Empfänger Datenbits
            OUT     (DARTBC),A
            LD      A,041H
            BIT     4,(HL)
            JR      Z,$4
            SET     7,A
$4:         OUT     (DARTBC),A
;
            POP     HL
            POP     AF
            RET
;
            .DATA
DBREG5:     DEFB    0           ;Backup Register 5
            .CODE
;
;===================================================
;--- DART-A & DART-B nach DIP-Swicthes einstellen --
;===================================================
;
; Zur Funktion der Schalter siehe Routine SETPDA
;
;
            .GLOBAL SETDSW
SETDSW:     IN      A,(DIPSW)
            CALL    SETPDA      ;Protokoll DART-A
            CALL    SETPDB      ;Protokoll DART-B
            RET
;
            .INCLUDE ODARTA.ASM
;
;===================================================
;------ INTERRUPT: Zeichen auf DART-B senden -------
;===================================================
;
PUTICB: CALL            TRMDTB      ;ein Zeichen übertragen
            EI
            RETI
;
            .GLOBAL TRMDTB
TRMDTB:     PUSH    AF
            PUSH    HL
            IFTRUE  STPOTB,$1   ;^S ?
            LD      HL,VBWRBF
            CALL    RDFIFO
            JR      C,$2
            OUT     (DARTBD),A  ;Zeichen ausgeben
$1:         POP     HL
            POP     AF
            RET
;
$2:         LOAD    USOTLB,TRUE
            LD      A,1         ;Interrupt abschalten
            OUT     (DARTBC),A
            LD      A,(DTBWR1)
            RES     1,A
            LD      (DTBWR1),A
            OUT     (DARTBC),A
            JR      $1
;
            .DATA
DTBWR1: DEFB        0
            .CODE
;
;===================================================
;---- Ausgabe eines Zeichens auf DART-B ------------
;===================================================
;
;Eingang:   Daten im AKKU
;Ausgang:   Zeichen wird im Spoolerpuffer abgelegt
;
            .GLOBAL WRV24B
WRV24B:     PUSH    AF
            PUSH    HL
            PUSH    DE
$1:         LD      HL,VBWRBF   ;Spooler voll ?
            DI
            CALL    WRFIFO      ;Zeichen in Spooler
            EI
            JR      C,$1        ;FIFO voll, warten
            DI
            IFFALSE USOTLB,$2       ;Spooler leer ?
            LOAD    USOTLB,FALSE            ;Spoolerflag rücksetzen
            LD      A,1
            OUT     (DARTBC),A
            LD      A,(DTBWR1)
            SET     1,A
            LD      (DTBWR1),A
            OUT     (DARTBC),A
            CALL    TRMDTB      ;erstes Zeichen übertragen
$2:         EI
            POP     DE
            POP     HL
            POP     AF
            RET
;
;===================================================
;------ hexadezimale Ausgabe HL-Inhalt -------------
;===================================================
;
;Eingang:   HL enthält 16-Bit-Wert
;Ausgang:   Wert hexadezimal auf DART-A ausgegeben
;
OUTHXH:     LD      A,H
            CALL    OUTHXA
            LD      A,L
            CALL    OUTHXA
            RET
;
;===================================================
;------ hexadezimale Ausgabe AKKU-Inhalt -----------
;===================================================
;
;Eingang:   AKKU enthält Wert
;Ausgang:   Wert hexadezimal auf DART-A ausgegeben
;
            .GLOBAL OUTHXA
OUTHXA:     PUSH    AF
            RRA
            RRA
            RRA
            RRA
            CALL    OUTNIB      ;erstes Nibble
            POP     AF
            CALL    OUTNIB      ;zweites Nibble
            RET
;
;===================================================
;--- hexadezimale Ausgabe low nibble Register A ----
;===================================================
;
;Eingang:   AKKU enthält nibble (Bit 0..3)
;Ausgang:   hexadezimale Ausgabe auf DART-A
;
            .GLOBAL OUTNIB
OUTNIB:     AND     0FH         ;4 Bits verwenden
            ADD     A,90H
            DAA                 ;DAA-Trick
            ADC     A,40H
            DAA
            CALL    WRV24A
            RET
;
;===================================================
;---- Ausgabe eines Wertes auf DAC2 ----------------
;===================================================
;
;Eingang:   16-Bit-Wert in HL
;Ausgang:   vordersten 12 Bit werden an DAC2 ausgegeben
;
            .GLOBAL ODAC2
ODAC2:      PUSH    AF          ;Resgister AF sichern
            LD      A,L
            OUT     (DAC2LO),A  ;niederwertiges Byte ausgeben
            LD      A,H
            OUT     (DAC2HI),A  ;höherwertiges Byte ausgeben
            POP     AF
            RET
;
;===================================================
;------ 7-Segment Anzeige testen -------------------
;===================================================
;
;Eingang:   -
;Ausgang:   Display-Test, zuerst alle Dezimalpunkte und
;                       Minuszeichen, dann sukzessive alle Ziffern
;                       durchs Display schieben.
;
            .GLOBAL TSTDSP
TSTDSP:     CALL    CLRDSP
            LD      A,0FFH      ;alle Dezimalpunkte und
            OUT     (DSPDPM),A  ;  Minuszeichen aktivieren
            LD      HL,0FFFFH   ;400 ms warten
            CALL    DELAY
            CALL    CLRDSP      ;Anzeige löschen
            LD      A,9
            LD      (TSTDSD),A  ;sukzessive Ziffernreihe
TSTDS2:     LD      A,(TSTDSD)  ;  durchschieben
            INC     A
            LD      (TSTDSD),A
            LD      B,6
TSTDS1:     LD      C,B         ;sechs Ziffern anzeigen
            DEC     C
            CALL    DIGDSP
            INC     A
            DJNZ    TSTDS1
            LD      HL,3000H    ;warten bis zum nächsten
            CALL    DELAY       ;  Durchgang
            LD      A,(TSTDSD)
            AND     0FH
            CP      9
            JR      NZ,TSTDS2
            CALL    CLRDSP
            RET
;
            .DATA
TSTDSD:     DEFB    0           ;erste Ziffer der Testanzeige
            .CODE
;
;===================================================
;------ Einzelne Ziffer anzeigen -------------------
;===================================================
;
;Eingang:   AKKU = Ziffer zur Anzeige (0-9)
;                       C = Adresse der Ziffer (0-5,
;                       0 = letzte Ziffer, 5 = vorderste Ziffer)
;Ausgang:   Anzeige der Ziffer
;
            .GLOBAL DIGDSP
DIGDSP:     PUSH    AF
            PUSH    BC
            AND     0FH         ;Ziffer
            SLA     C           ;Stelle einbauen
            SLA     C
            SLA     C
            SLA     C
            SLA     C
            OR      C
            OUT     (DSPLAT),A  ;Ziffer ausgeben
            POP     BC
            POP     AF
            RET
;
;===================================================
;------ Ziffernanzeige löschen ---------------------
;===================================================
;
;Eingang:   -
;Ausgang:   Ziffernanzeige gelöscht
;
            .GLOBAL CLRDSP
CLRDSP:     PUSH    AF
            PUSH    BC
            LD      A,0
            LD      (DSPDPS),A  ;Dezimalpunkte und
            OUT     (DSPDPM),A  ;  Minuszeichen löschen
            LD      B,6
CLRDS1:     LD      A,B         ;alle Ziffern löschen
            DEC     A
            RRCA
            RRCA
            RRCA
            OR      0FH
            OUT     (DSPLAT),A
            DJNZ    CLRDS1
            POP     BC
            POP     AF
            RET
;
            .DATA
DSPDPS:     DEFB    0           ;Status Dezimalpunkte
            .CODE
;
;===================================================
;-- Ausgabe einer dezimalen Zahl am 7-Segmentdisplay
;===================================================
;
;Eingang:   HL = Zahl zur Ausgabe
;Ausgang:   Zahl wird dezimal rechts ausgerichtet ausgegeben,
;                       führende Nullen werden nicht unterdrückt
;                       max. darstellbarer Bereich: -32768 ... +32767
;
            .GLOBAL DSPHL
DSPHL:      PUSH    AF
            PUSH    BC
            PUSH    DE
            PUSH    HL
            CALL    CLRDSP      ;Anzeige löschen
            LD      B,5         ;fünf Ziffern
            LD      C,0
$1:         CALL    DIV10       ;HL = HL/10
            CALL    DIGDSP      ;Rest ausgeben
            INC     C
            DJNZ    $1
            POP     HL
            PUSH    HL
            LD      C,1         ;Vorzeichen überprüfen
            CALL    RESMIN
            BIT     7,H         ; negativ ?
            JR      Z,$2
            LD      C,1
            CALL    SETMIN      ;ja, minus setzen (MSD)
$2:         POP     HL
            POP     DE
            POP     BC
            POP     AF
            RET
;
;===================================================
;------- Division durch 10 (mit Vorzeichen) --------
;===================================================
;
;Eingang:   HL = Zahl mit Vorzeichen (2er Komplement)
;Ausgang:   HL = Quotient (2er Komplement)
;           A = Rest (Absolut !!)
;
            .GLOBAL DIV10
DIV10:      PUSH    BC
            LD      A,TRUE
            LD      (VZFLAG),A
            BIT     7,H         ;Vorzeichen testen
            JR      Z,$3
            LD      A,FALSE
            LD      (VZFLAG),A
            LD      DE,0
            EX      DE,HL
            OR      A
            SBC     HL,DE
$3:         LD      B,12        ;Divisionsroutine
$1:         LD      A,H
            SUB     50H
            CCF
            JR      NC,$2
            LD      H,A
$2:         RL      L
            RL      H
            DJNZ    $1
            LD      B,H         ;Rest in AKKU
            LD      A,H
            AND     0FH
            LD      H,A
            LD      A,B
            SRL     A
            SRL     A
            SRL     A
            SRL     A
            PUSH    AF
            IFTRUE  VZFLAG,$4   ;negative Zahl ?
            LD      DE,0
            EX      DE,HL
            OR      A
            SBC     HL,DE
$4:         POP     AF
            POP     BC
            RET
;
            .DATA
VZFLAG:     DEFB    0           ;Vorzeichen
            .CODE
;
;===================================================
;----- Dezimalpunkt setzen -------------------------
;===================================================
;
;Eingang:   C holds digit number (0..5)
;Ausgang:   DP is illuminated
;
            .GLOBAL SETDP
SETDP:      PUSH    BC
            PUSH    AF
            LD      A,C
            CP      6
            JR      NC,$1
            LD      B,C
            INC     B
            INC     B
            LD      A,1         ;adjust for error PCB
            XOR     B
            LD      B,A
            LD      A,1
$2:         ADD     A,A         ;calc. DP
            DJNZ    $2
            LD      B,A
            LD      A,(DSPDPS)
            AND     3
            OR      B
            LD      (DSPDPS),A  ;backup new DP
            OUT     (DSPDPM),A  ;output data
$1:         POP     AF
            POP     BC
            RET
;
;===================================================
;------ Minuszeichen setzen ------------------------
;===================================================
;
;Eingang:   C = Adresse des Minuszeichens (1..MSD, 0..MSD-1)
;Ausgang:   Minuszeichen gesetzt
;
            .GLOBAL SETMIN
SETMIN:     LD      A,C
            CP      0
            JR      Z,SETMI1
            CP      1
            RET     NZ
            LD      A,(DSPDPS)
            SET     1,A
SETMI2:     LD      (DSPDPS),A
            OUT     (DSPDPM),A
            RET
SETMI1:     LD      A,(DSPDPS)
            SET     0,A
            JR      SETMI2
;
;===================================================
;----- Minuszeichen rücksetzen ---------------------
;===================================================
;
;Eingang:   C = Adresse des Minuszeichens (1..MSD, 0..MSD-1)
;Ausgang:   Minuszeichen zurückgesetzt
;
            .GLOBAL RESMIN
RESMIN:     LD      A,C
            CP      0
            JR      Z,RESMI1
            CP      1
            RET     NZ
            LD      A,(DSPDPS)
            RES     1,A
RESMI2:     LD      (DSPDPS),A
            OUT     (DSPDPM),A
            RET
RESMI1:     LD      A,(DSPDPS)
            RES     0,A
            JR      RESMI2
;
            .INCLUDE FIFO.ASM
;
;===================================================
;------ Kaltstart ----------------------------------
;===================================================
;
PORTTB:     DEFB    < ICTC, CTC0            ;Interruptvektor, low byte
            DEFB    005H,CTC2   ;Baudrate 9600, DART-A
            DEFB    00CH,CTC2
            DEFB    005H,CTC1   ;Baudrate 9600, DART-B
            DEFB    00CH,CTC1
            DEFB    005H,CTC3   ;Timer, 1 ms
            DEFB    250,CTC3
;
            DEFB    02H,DARTBC
            DEFB    < IDART,DARTBC          ;Interruptvektor, low byte
            DEFB    001H,DARTBC
            DEFB    0FCH,DARTBC ;Status berücksichtigen
            DEFB    003H,DARTBC ;auto enable aus
            DEFB    0C1H,DARTBC ;Empfänger 8 Bits
            DEFB    004H,DARTBC ;X16 mode, 2 stop, no parity
            DEFB    044H,DARTBC
            DEFB    005H,DARTBC ;DTR-Control
            DEFB    0E8H,DARTBC ;Sender 8 Bits
;
            DEFB    003H,DARTAC ;Empfänger 8 Bits, auto enable aus
            DEFB    0C1H,DARTAC
            DEFB    005H,DARTAC ;Sender 8 Bits, DTR low
            DEFB    0E8H,DARTAC
            DEFB    004H,DARTAC ;X16 mode, 2 stop, no parity
            DEFB    044H,DARTAC
            DEFB    001H,DARTAC ;Interrupts einschalten
            DEFB    0FAH,DARTAC
;
            DEFB    < IPIOA,PIOAC           ;Interruptvektor
            DEFB    11001111B,PIOAC         ;Modus 3 (Bit I/O)
            DEFB    11111111B,PIOAC         ;nur Eingänge
            DEFB    00000111B,PIOBC         ;Interrupt aus
;
            DEFB    < IPIOB,PIOBC           ;Interruptvektor
            DEFB    11001111B,PIOBC         ;Modus 3 (Bit I/O)
            DEFB    11111111B,PIOBC         ;nur Eingänge
            DEFB    00000111B,PIOBC         ;Interrupt aus
;
            DEFB    000H,DAC1LO ;DAC 1
            DEFB    080H,DAC1HI
            DEFB    000H,DAC2LO ;DAC 2
            DEFB    080H,DAC2HI
            DEFB    000H,MUXBAS ;MUX, Kanal 0
;
            DEFB    0,0         ;ende der Tabelle
;
            .GLOBAL COLD
COLD:       LD      SP,STACK
            LD      HL,30000    ;Stabilisation abwarten
            CALL    DELAY
            LD      HL,PORTTB   ;Ports initialisieren
COLDNX: LD  B,(HL)  ;Daten
            INC     HL
            LD      C,(HL)      ;Port-Nummer
            INC     HL
            LD      A,B
            OR      C           ;Ende der Tabelle ?
            JR      Z,COLD1
            OUT     (C),B
            JR      COLDNX
;
COLD1:      LOAD    STPOTA,FALSE            ;Ausgang DART-A ein
            LOAD    STPOTB,FALSE            ;Ausgang DART-B ein
            LOAD    CNTRLA,TRUE ;Control-Zeichen ein
            LOAD    CNTRLB,TRUE ;Control-Zeichen ein
            LOAD    USOTLA,TRUE ;Spooler leer
            LOAD    USOTLB,TRUE ;Spooler leer
            LOAD    DTAWR1,0FAH ;Interrupt DARTA
            LOAD    DTBWR1,0FEH ;Interrupt DARTB
            LOAD    (DPBLNK),0  ;Dezimalpunkteblinker
            LD      HL,0
            LD      (CLKCNT),HL ;Uhr rücksetzen
            LD      HL,1
            LD      (SEK),HL    ;Sekundenzähler
            LOAD    FREQ,0      ;Frequenz
            LD      HL,VARDBF
            CALL    CLRFIF      ;Eingangspuffer löschen
            LD      HL,VBRDBF
            CALL    CLRFIF      ;Eingangspuffer löschen
            LD      HL,VAWRBF   ;Ausgangspuffer löschen
            CALL    CLRFIF
            LD      HL,VBWRBF   ;Ausgangspuffer löschen
            CALL    CLRFIF
;
            LD      HL,ICTC     ;Interruptstruktur einrichten
            LD      A,L
            AND     1FH
            JR      Z,CLDIOK    ;Adresse OK
            HALT
;
CLDIOK: LD  A,H
            LD      I,A         ;Interruptvektor, high Byte
            IM      2           ;Z80 - Modus (IM 2)
            EI
            CALL    SETDSW      ;Protokoll einstellen
            CALL    TSTDSP      ;7-segment Anzeige testen
;
;===================================================
;------ Warmstart ----------------------------------
;===================================================
;
WARM:       LD      SP,STACK
            IN      A,(DIPSW)   ;Experiment-Nummer abfragen
            LD      L,A
            LD      H,0
            ADD     HL,HL       ;Wortadressierung
            PUSH    HL
            LD      DE,ENDTAB-EXPTAB ;überprüfen, ob DIP-Switch
            OR      A           ;  nicht auf zu hohen Wert
            SBC     HL,DE       ;  eingestellt ist
            POP     HL
            JR      C,$1
            LD      A,(DPBLNK)  ;alle Dezimalpunkte
            XOR     A,FCH       ;  aktivieren
            LD      (DPBLNK),A
            OUT     (DSPDPM),A
            LD      HL,0FFFFH   ;700 ms warten
            CALL    DELAY
            JR      WARM        ;bis DIP-Switch ok
$1:         CALL    CLRDSP
            LD      DE,EXPTAB   ;Tabelleneintrag mit Startadresse
            ADD     HL,DE       ;ermitteln
            LD      A,(HL)
            INC     HL
            LD      H,(HL)
            LD      L,A
            JP      (HL)        ;Routine starten
;
            .DATA
DPBLNK:     DEFB    0           ;Dezimalpunkte blinken
            .CODE
;
EXPTAB:     DEFW    INVERT      ;0 = Inverter
            DEFW    RAMTST      ;1 = RAM-Test
            DEFW    LAUFL       ;2 = Lauflicht
            DEFW    EXPCNT      ;3 = Zähler
            DEFW    EXGATE      ;4 = Gatteremulation
            DEFW    STPCLK      ;5 = Stoppuhr
            DEFW    FQCNT       ;6 = Frequenzzähler
            DEFW    PIOKEY      ;7 = Tastaturscan
            DEFW    CENTRX      ;8 = Centronics Schnittstelle
            DEFW    BYTSND      ;9 = Zeichen auf DART senden
            DEFW    BYTREC      ;10 = Zeichen auf DART empfangen
            DEFW    PROTOC      ;11 = Protokoll-Umsetzung
            DEFW    DVM         ;12 = Digitalvoltmeter
            DEFW    SINUSA      ;13 = Sinusgenerator Version A
            DEFW    SINUSB      ;14 = Sinusgenerator Version B
            DEFW    LFLSIN      ;15 = Lauflicht & Sinusgenerator
            DEFW    FNCGEN      ;16 = Funktionsgenerator
ENDTAB:     EQU     $           ;Ende der Tabelle
;
DUMMYP:     JP      WARM
;
;===================================================
;------ 32-Bit-Multiplikation (mit Vorzeichen) -----
;===================================================
;
;Eingang:   BC, DE = Argumente für 32-Bit-Multiplikation
;Ausgang:   DE-HL = BC * DE (signed)
;
            .GLOBAL MLT32S
MLT32S:     LD      A,D
            XOR     B
            PUSH    AF
            BIT     7,D         ;negativ ?
            JR      Z,$1
            LD      A,D
            CPL
            LD      D,A
            LD      A,E
            CPL
            LD      E,A
            INC     DE
$1:         BIT     7,B         ;BC negativ ?
            JR      Z,$2
            LD      A,B
            CPL
            LD      B,A
            LD      A,C
            CPL
            LD      C,A
            INC     BC
$2:         CALL    MLT32U      ;vorzeichenlos multiplizieren
            POP     AF
            BIT     7,A
            RET     Z
            CALL    CMPL32
            RET
;
;===================================================
;---- Zweierkomplement einer 32-Bit-Zahl -----------
;===================================================
;
;Eingang:   HL-DE = 32-Bit signed integer
;Ausgang:   HL-DE = 32-Bit negated integer (2er Komplement)
;
.GLOBAL CMPL32
CMPL32:     LD      A,H
            CPL
            LD      H,A
            LD      A,L
            CPL
            LD      L,A
            LD      A,D
            CPL
            LD      D,A
            LD      A,E
            CPL
            LD      E,A
            LD      A,1
            ADD     A,E
            LD      E,A
            LD      A,0
            ADC     A,D
            LD      D,A
            LD      A,0
            ADC     A,E
            LD      E,A
            LD      A,0
            ADC     A,L
            LD      L,A
            LD      A,0
            ADC     A,H
            LD      H,A
            RET
;
;===================================================
;----- 32-Bit-Multiplikation (ohne Vorzeichen) -----
;===================================================
;
;Eingang:   BC, DE = Argumente für 32-Bit-Multiplikation
;Ausgang:   DE-HL = BC * DE (vorzeichenlos)
;
            .GLOBAL MLT32U
MLT32U:     PUSH    AF          ;Register sichern
            PUSH    BC
            EX      AF,AF'
            PUSH    AF
            EX      AF,AF'
            LD      A,E
            CALL    MPYABC      ;untere Hälfte multiplizieren
            PUSH    HL
            EX      AF,AF'
            LD      A,D
            CALL    MPYAB2      ;obere Hälfte multiplizieren
            LD      D,A
            EX      AF,AF'
            ADD     A,H         ;Ergebnisse kombinieren
            LD      H,L
            LD      L,E
            LD      E,A
            JR      NC,$1
            INC     D
$1:         POP     BC
            ADD     HL,BC
            JR      NC,$2
            INC     DE
$2:         EX      AF,AF'      ;Register wiederherstellen
            POP     AF
            EX      AF,AF'
            POP     BC
            POP     AF
            RET
;
MPYABC:     LD      E,0         ;A-H-L = BC*A
MPYAB2:     LD      L,E         ;Multiplikation mit A durch
            LD      H,E         ;  Schieben von A und šber-
            ADD     A,A         ;  prüfung des Carry-Bits
            JR      NC,$1       ;schnelle Version ohne
            ADD     HL,BC       ;  Schleifen-Zähler
            ADC     A,E
$1:         ADD     HL,HL
            ADC     A,A
            JR      NC,$2
            ADD     HL,BC
            ADC     A,E
$2:         ADD     HL,HL
            ADC     A,A
            JR      NC,$3
            ADD     HL,BC
            ADC     A,E
$3:         ADD     HL,HL
            ADC     A,A
            JR      NC,$4
            ADD     HL,BC
            ADC     A,E
$4:         ADD     HL,HL
            ADC     A,A
            JR      NC,$5
            ADD     HL,BC
            ADC     A,E
$5:         ADD     HL,HL
            ADC     A,A
            JR      NC,$6
            ADD     HL,BC
            ADC     A,E
$6:         ADD     HL,HL
            ADC     A,A
            JR      NC,$7
            ADD     HL,BC
            ADC     A,E
$7:         ADD     HL,HL
            ADC     A,A
            RET     NC
            ADD     HL,BC
            ADC     A,E
            RET
;
;
;===================================================
;---- Include-Dateien für die Experimente ----------
;===================================================
;
;  Die folgenden Include-Dateien werden für die Experimente verwendet:
;
            .INCLUDE EXRAMTST.ASM
            .INCLUDE EXBYTREC.ASM
            .INCLUDE EXBYTSND.ASM
            .INCLUDE EXPPCNT.ASM
            .INCLUDE EXPLAUFL.ASM
            .INCLUDE EXPINV.ASM
            .INCLUDE EXPROTOC.ASM
            .INCLUDE EXSIN1.ASM
            .INCLUDE EXLFLSIN.ASM
            .INCLUDE EXFNCGEN.ASM
            .INCLUDE EXDVM.ASM
            .INCLUDE EXCLOCK.ASM
            .INCLUDE EXFREQ.ASM
            .INCLUDE EXPIOKEY.ASM
            .INCLUDE EXCENTRX.ASM
;
            .END

Last Update: 2005-Okt-08


Inverter

;===================================================
;---- Experiment: Inverter -------------------------
;===================================================
;
            .GLOBAL INVERT
INVERT:     IN      A,(PIN)     ;Wert von PIN einlesen
            CPL                 ;Wert invertieren
            OUT     (POUT),A    ;Wert an POUT ausgeben
            JR      INVERT      ;nächster Durchlauf

Last Update: 2005-Okt-08


RAM-Test

;===================================================
;---- Experiment: RAM-Test -------------------------
;===================================================
;
            .GLOBAL RAMTST
RAMTST:     IN      A,(DIPSW)   ;Testadresse lesen
            LD      H,A
            LD      L,0         ;HL enthält Adresse
            IN      A,(PIN)     ;Wert von PIN einlesen
            LD      (HL),A      ;Wert in RAM speichern
            LD      A,(HL)      ;gespeich. Wert lesen
            OUT     (POUT),A    ;Wert an POUT ausgeben
            JR      RAMTST      ;Schleife

Last Update: 2006-Jän-19


Interrupt: Empfänger DART-B voll

;===================================================
;------ INTERRUPT: CTC Kanal 0 ---------------------
;===================================================
;
IFREQ:      PUSH    AF
            LD      A,(FQHB)
            INC     A
            LD      (FQHB),A
            POP     AF
            EI
            RETI
;
;===================================================
;------ INTERRUPT: CTC Kanal 3 ---------------------
;===================================================
;
ICLOCK:     PUSH    AF
            PUSH    HL
            LD      HL,(SEK)    ;Sekundenzähler für
            DEC     HL          ;  Zeitbasis Frequenz-
            LD      (SEK),HL    ;  zähler
            LD      A,H
            OR      L
            JR      NZ,$1
            LD      HL,1000     ;neu laden
            LD      (SEK),HL
            IN      A,(CTC0)    ;Messwert übernehmen
            NEG
            LD      (FREQ),A
            LD      A,(FQHB)
            LD      (FREQ+1),A
            LD      A,0         ;Überlaufvariable
            LD      (FQHB),A    ;  rücksetzen
            LD      A,03H
            OUT     (CTC0),A
            LD      A,C5H       ;Zähler neu laden
            OUT     (CTC0),A
            LD      A,0
            OUT     (CTC0),A
;
$1:         LD      A,(HSEK)    ;Hundertstel Sekunden
            DEC     A           ;  für Stoppuhr
            LD      (HSEK),A
            JR      NZ,$2
            LOAD    HSEK,10
            LD      HL,(CLKCNT) ;clock (10 ms)
            INC     HL
            LD      (CLKCNT),HL
$2:         POP     HL
            POP     AF
            EI
            RETI
;
            .DATA
CLKCNT:     DEFW    0           ;Zähler für Uhr
HSEK:       DEFB    0           ;10 ms Zähler
SEK:        DEFW    0           ;Sekundenzähler
FREQ:       DEFW    0           ;Frequenz
FQHB:       DEFB    0           ;Overflow - Frequenz
            .CODE

Last Update: 2005-Okt-08


Zeichen seriell empfangen

;===================================================
;---- Experiment: Zeichen seriell empfangen --------
;===================================================
;
            .GLOBAL BYTREC
BYTREC:     LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;ja, neues Protokoll
            CALL    RDV24A      ;Zeichen einlesen
            JR      C,BYTREC    ;kein Zeichen
            OUT     (POUT),A    ;Zeichen auf LEDs
            JR      BYTREC      ;nächstes Zeichen

Last Update: 2005-Okt-08


Digitalvoltmeter

;===================================================
;---- Experiment: Digitalvoltmeter -----------------
;===================================================
;
            .GLOBAL DVM
DVM:        CALL    SETMUX      ;Multiplexer setzen
            CALL    GETADC      ;Wert von ADC holen
            IN      A,(DIPSW)   ;Verstärkungsfaktor
            AND     07          ;Wert anpassen
            JR      Z,$7
            LD      B,A
$3:         SRA     H           ;durch Schieben
            RR      L
            DJNZ    $3
$7:         EX      DE,HL
            LD      BC,20000    ;skalieren
            CALL    MLT32S
            EX      DE,HL
            CALL    DSPHL       ;Ausgabe auf Display
            LD      C,4         ;Dezimalpunkt
            CALL    SETDP
            LD      HL,50000    ;350 ms warten
            CALL    DELAY
            JR      DVM
;
;===================================================
;---- MUX-Kanal und Verstärkung einstellen ---------
;===================================================
;
;ENTRY:     DIP-switch
;                       Bit 0..2: Verstärkungsfaktor
;                       Bit 4..6: Kanalnummer
;EXIT:      MUX entsprechend eingestellt, S&H gestartet
;
SETMUX:     PUSH    AF
            PUSH    BC
            IN      A,(DIPSW)   ;Kanaladr. berechnen
            LD      C,MUXBAS
            AND     0F0H
            SRL     A
            SRL     A
            SRL     A
            SRL     A
            ADD     A,C
            LD      C,A
            IN      A,(DIPSW)   ;Verstärkungsfaktor
            AND     07H
            OUT     (C),A       ;MUX einstellen,
            POP     BC          ;  S&H starten
            POP     AF
            RET
;
;===================================================
;---- AD-Wandler starten, Ergebnis lesen -----------
;===================================================
;
;ENTRY:     -
;EXIT:      Wert vom ADC x16 als 2er-Komplement
;
GETADC:     PUSH    AF
            PUSH    DE
            LD      A,0
            OUT     (ADCHI),A   ;ADC (12 bit) starten
            BIT     0,(IX)      ;warten bis ADC fertig
            BIT     0,(IX)
            BIT     0,(IX)
            BIT     0,(IX)
            BIT     0,(IX)
            IN      A,(ADCHI)   ;Wert holen
            XOR     80H         ;2er-Kompl. erzeugen
            LD      H,A
            IN      A,(ADCLO)
            LD      L,A
            POP     DE
            POP     AF
            RET

Last Update: 2005-Okt-08


8-Bit-Zeichen in FIFO schreiben

;===================================================
;----- 8-Bit-Zeichen in FIFO schreiben -------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs,
;           AKKU enthält Zeichen
;EXIT:      CF=0 --> Zeichen in FIFO eingetragen
;           CF=1 --> FIFO ist voll, Zeichen nicht
;           eingetragen
;
;Struktur des FIFOs:
;  1. Byte: FIFO input pointer (0..255)
;  2. Byte: FIFO output pointer (0..255)
;  3.-258.Byte:         FIFO Datenfeld
;  ---> Gesamtlänge: 258 Byte
;
            .GLOBAL WRFIFO
WRFIFO:     PUSH    HL
            PUSH    BC
            PUSH    AF
            LD      C,(HL)      ;Eingangspointer
            INC     HL
            LD      A,(HL)      ;Ausgangspointer
            DEC     A           ;FIFO voll ?
            CP      C
            JR      Z,FIFFUL    ;ja
            POP     AF
            DEC     HL
            INC     (HL)        ;neuer Pointer
            INC     HL
            INC     HL          ;Datenadresse
            LD      B,0         ;  berechnen
            ADD     HL,BC
            LD      (HL),A
            POP     BC
            POP     HL
            OR      A           ;Carry Flag rücksetzen
            RET
;
FIFFUL:     POP     AF          ;FIFO voll
            POP     BC
            POP     HL
            SCF                 ;Carry Flag setzen
            RET
;
;===================================================
;------ 8-Bit-Zeichen von FIFO lesen ---------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      CF=0, Daten in AKKU sind gültig
;           CF=1, FIFO ist leer
;
            .GLOBAL RDFIFO
RDFIFO:     PUSH    HL
            PUSH    BC
            LD      A,(HL)      ;FIFO Eingangspointer
            INC     HL
            LD      C,(HL)      ;FIFO Ausgangspointer
            CP      C           ;FIFO leer ?
            JR      Z,FIFMPT
            INC     (HL)
            INC     HL          ;Datenadresse
            LD      B,0         ;  berechnen
            ADD     HL,BC
            LD      A,(HL)
            POP     BC
            POP     HL
            OR      A           ;CF=0 ---> Daten OK
            RET
;
FIFMPT:     POP     BC
            POP     HL
            SCF                 ;CF=1 ---> Daten
            RET                 ;  ungültig
;
;===================================================
;----- FIFO löschen --------------------------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      FIFO ist gelöscht und leer
;
            .GLOBAL CLRFIF
CLRFIF:     PUSH    AF
            XOR     A
            LD      (HL),A
            INC     HL
            LD      (HL),A
            DEC     HL
            POP     AF
            RET
;
;===================================================
;----- FIFO Status testen --------------------------
;===================================================
;
;ENTRY:     HL zeigt auf Beginn des FIFOs
;EXIT:      CF=1 ---> FIFO voll
;           ZF=0 ---> if FIFO leer
;           AKKU enthält Zahl der Zeichen in FIFO
;
            .GLOBAL TSTFIF
TSTFIF:     LD      A,(HL)
            INC     HL
            SUB     (HL)
            JR      Z,TFE       ;FIFO leer
            CP      0FFH
            JR      Z,TFF       ;FIFO voll
            SCF                 ;FIFO weder voll noch
            CCF                 ;  leer
            DEC     HL
            RET
;
TFE:        SCF
            CCF
            DEC     HL          ;CF=0, ZF=1
            RET
;
TFF:        XOR     A
            LD      A,0FFH
            SCF                 ;CF=1, ZF=0
            DEC     HL
            RET

Last Update: 2005-Okt-08


INTERRUPT: Zeichen auf DART-A senden

;===================================================
;------ INTERRUPT: Zeichen auf DART-A senden -------
;===================================================
;
PUTICA:     CALL    TRMDTA      ;ein Zeichen senden
            EI
            RETI
;
            .GLOBAL TRMDTA
TRMDTA:     PUSH    AF
            PUSH    HL
            IFTRUE  STPOTA,$1   ;^S ?
            LD      HL,VAWRBF
            CALL    RDFIFO
            JR      C,$2
            OUT     (DARTAD),A  ;Zeichen ausgeben
$1:         POP     HL
            POP     AF
            RET
;
$2:         LOAD    USOTLA,TRUE
            LD      A,1         ;Interrupt abschalten
            OUT     (DARTAC),A
            LD      A,(DTAWR1)
            RES     1,A
            LD      (DTAWR1),A
            OUT     (DARTAC),A
            JR      $1
;
            .DATA
DTAWR1:     DEFB    0           ;Interrupt DART A
            .CODE
;
;===================================================
;---- Ausgabe eines Zeichens auf DART-A ------------
;===================================================
;
;ENTRY: Zeichen in AKKU
;EXIT:  Zeichen in den Spooler-Puffer geschrieben
;
            .GLOBAL WRV24A
WRV24A:     PUSH    AF
            PUSH    HL
            PUSH    DE
$1:         LD      HL,VAWRBF   ;Spooler voll ?
            DI
            CALL    WRFIFO      ;Zeichen schreiben
            EI
            JR      C,$1        ;FIFO voll, warten
            DI
            IFFALSE USOTLA,$2   ;Spooler leer ?
            LOAD    USOTLA,FALSE;Spooler empty flag
            LD      A,1         ;  rücksetzen
            OUT     (DARTAC),A
            LD      A,(DTAWR1)
            SET     1,A
            LD      (DTAWR1),A
            OUT     (DARTAC),A
            CALL    TRMDTA      ;erstes Zeichen senden
$2:         EI
            POP     DE
            POP     HL
            POP     AF
            RET

Last Update: 2005-Okt-08


DART A: Setup Protokol

;===================================================
;--- setup protocol of DART-A ----------------------
;===================================================
;
;Eingang:   AKKU enthält Steuerzeichen
;Ausgang:   Protokoll von DART-A eingestellt
;
;           8,7,6 ... Baudrate:
;                       OFF OFF OFF = 150 Baud
;                       OFF OFF ON  = 300 Baud
;                       OFF ON  OFF = 600 Baud
;                       OFF ON  ON  = 1200 Baud
;                       ON  OFF OFF = 2400 Baud
;                       ON  OFF ON  = 4800 Baud
;                       ON  ON  OFF = 9600 Baud
;                       ON  ON  ON  = 19200 Baud
;           5 ..... Number of data bits:
;                       OFF = 7 data bits
;                       ON  = 8 data bits
;           4 ..... parity enable:
;                       ON  = parity bit wird erzeugt
;                       OFF = kein parity bit
;           3 ..... parity:
;                       OFF = even
;                       ON  = odd
;           2 ..... Zahl der Stoppbits
;                       ON  = 2 Stoppbits
;                       OFF = 1 Stoppbit
;           1 ..... unbenutzt
;
            .GLOBAL SETPDA
SETPDA:     PUSH    AF
            PUSH    HL
            LD      (PROTBK),A
            SRL     A           ;Baudrate
            SRL     A
            SRL     A
            SRL     A
            AND     0EH
            PUSH    AF          ;speichern für CLK-mode
            LD      HL,BAUDTB
            ADDHLA
;           LD      A,3
;           OUT     (CTC2),A    ;Timer stoppen
            LD      A,(HL)
            OUT     (CTC2),A    ;Modus laden
            INC     HL
            LD      A,(HL)
            OUT     (CTC2),A    ;Zeitkonstante laden
;
            LD      HL,PROTBK   ;Parität
            POP     AF
            CP      4           ;Baudrate <= 300 ?
            LD      A,044H      ;x16 Modus
            JR      NC,$6
            LD      A,0C4H      ;x64 Modus
$6:         BIT     2,(HL)      ;Parität even/odd
            JR      NZ,$1
            SET     1,A
$1:         BIT     3,(HL)      ;Parität aus/ein
            JR      Z,$2
            SET     0,A
$2:         BIT     1,(HL)      ;Zahl der Stoppbits
            JR      Z,$5
            SET     3,A
$5:         PUSH    AF          ;DART register laden
            LD      A,4
            OUT     (DARTAC),A
            POP     AF
            OUT     (DARTAC),A
;
            LD      A,5         ;Sender Datenbits
            OUT     (DARTAC),A
            LD      A,0AAH
            BIT     4,(HL)
            JR      Z,$3
            SET     6,A
$3:         OUT     (DARTAC),A
            LD      (DAREG5),A  ;Register 5 enthält RTS
;
            LD      A,3         ;Empfänger Datenbits
            OUT     (DARTAC),A
            LD      A,041H
            BIT     4,(HL)
            JR      Z,$4
            SET     7,A
$4:         OUT     (DARTAC),A
;
            POP     HL
            POP     AF
            RET
;
            .DATA
PROTBK: DEFB        0           ;Steuerbits
DAREG5:     DEFB    0           ;RTS-Kontrolle Reg.5
            .CODE
;
BAUDTB:     DEFB    47H,160     ; 150 BAUD
            DEFB    47H,80      ; 300 Baud
            DEFB    47H,160     ; 600 BAUD
            DEFB    47H,80      ; 1200
            DEFB    47H,40      ; 2400
            DEFB    47H,20      ; 4800
            DEFB    47H,10      ; 9600
            DEFB    47H,5       ; 19200 Baud

Last Update: 2005-Okt-08


Nicht initialisierte Interrupts ignorieren

;===================================================
;------ INTERRUPT: receiver DART-A full ------------
;===================================================
;
            .GLOBAL GETICA
GETICA:     PUSH    AF
            PUSH    HL
            PUSH    DE
            PUSH    BC
            IN      A,(DARTAD)  ;Zeichen einlesen
;
$5:         LD      HL,CNTRLA
            DEC     (HL)        ;Control-Bearbeitung
            INC     (HL)        ;  ein ?
            JR      Z,$2
;
            IFA.NE. 'S'-40H,$3  ;^S ?
            LD      HL,STPOTA
            LD      (HL),TRUE   ;Ausgang stoppen
            JR      $1
;
$3:         IFA.NE. 'Q'-40H,$6  ;^Q ?
            LD      HL,STPOTA
            LD      (HL),FALSE  ;Ausgang starten
            CALL    TRMDTA
            JR      $1
;
$6:         IFA.EQ. 'C'-40H,$4  ;^C ?
;
$2:         LD      HL,VARDBF   ;Zeichen in FIFO
            CALL    WRFIFO
            LD      HL,VARDBF   ;RTS gesetzt ?
            CALL    TSTFIF
            CP      0FAH        ;mehr als 250 Zeichen
            JR      C,$1        ;  im Puffer ?
            LD      A,5
            OUT     (DARTAC),A
            LD      A,(DAREG5)
            RES     1,A
            LD      (DAREG5),A
            OUT     (DARTAC),A  ;RTS rücksetzen
$1:         POP     BC
            POP     DE
            POP     HL
            POP     AF
            EI
            RETI
;
$4:         LD      HL,WARM     ;Warmstart
            PUSH    HL
            LD      HL,STPOTA   ;Ausgang ein
            LD      (HL),FALSE
            EI
            RETI
;
;===================================================
;----- read character from DART A ------------------
;===================================================
;
;ENTRY:     -
;EXIT:      CF = 1, falls kein Zeichen vorhanden
;           CF = 0, falls Zeichen gültig
;           Zeichen in Akkumulator
;
            .GLOBAL RDV24A
RDV24A:     PUSH    HL
            PUSH    BC
            LD      HL,VARDBF   ;RTS gesetzt
            CALL    TSTFIF
            CP      100         ;weniger als 100
            JR      NC,$1       ;  Zeichen im Puffer ?
            LD      A,5
            OUT     (DARTAC),A
            LD      A,(DAREG5)
            SET     1,A
            LD      (DAREG5),A
            OUT     (DARTAC),A  ;RTS rücksetzen
$1:         LD      HL,VARDBF
            CALL    RDFIFO
            POP     BC
            POP     HL
            RET

Last Update: 2005-Okt-08


Funktionsgenerator/Sinusgenerator

;===================================================
;--- non maskable interrupt - Funktionsgenerator ---
;===================================================
;
            ORG     0066H
;
            .GLOBAL NMI
NMI:        PUSH    DE          ;Register sichern
            PUSH    HL
            PUSH    AF
            LD      HL,(FBFPOI) ;Zeiger auf Funktions-
            LD      A,(HL)      ;  tabelle
            INC     HL          ;Daten lesen
            LD      H,(HL)
            LD      L,A
            CALL    ODAC1       ;Wert ausgeben
            LD      HL,(FBFPOI) ;Zeiger erhöhen
            INC     HL
            INC     HL
            LD      DE,FBFEND   ;überprüfen, ob Ende
            PUSH    HL          ;  der Tabelle
            XOR     A
            SBC     HL,DE
            POP     HL
            JR      C,$1        ;nein
            LD      HL,FNCBUF   ;ja, Zeiger rücksetzen
$1:         LD      (FBFPOI),HL
            POP     AF
            POP     HL
            POP     DE
            RETN                ;Ende NMI-Service
;
            .DATA
FNCBUF:     DEFS    512         ;Funktionspuffer
FBFPOI:     DEFW    0           ;Zeiger auf Tabelle
            .CODE
;
FBFEND      EQU     FNCBUF+512
;
;===================================================
;---- Experiment: Sinusgenerator, Version B --------
;===================================================
;
            .GLOBAL SINUSB
SINUSB:     LD      HL,SINTAB   ;Sinustabelle laden
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
SINGEN:     JR      SINGEN      ;warten auf NMI
;

Last Update: 2005-Okt-08


Centronics-Schnittstelle

;===================================================
;---- Experiment: Centronics-Schnittstelle ---------
;===================================================
;
            .GLOBAL CENTRX
CENTRX:     LD      A,0CFH      ;Port A - Modus 3
            OUT     (PIOAC),A
            LD      A,11111110B ;Bit 0 = /STB
            OUT     (PIOAC),A   ;Bit 1 = BUSY
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
            LD      A,0CFH      ;Port B - Modus 3
            OUT     (PIOBC),A
            LD      A,00000000B ;alle Bits Ausgang
            OUT     (PIOBC),A
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOBC),A
            LD      A,1         ;/STB auf HIGH legen
            OUT     (PIOAD),A
;
            LD      HL,CENS1    ;Startmeldung
            CALL    PRTSTR
$1:         LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;neues Protokoll
            CALL    RDV24A      ;Zeichen eingelangt ?
            JR      C,$1
            CALL    OUTCEN      ;ja ---> drucken
            JR      $1
;
CENS1:      DEFB    'Serielle Druckerschnittstelle bereit'
            DEFB    0DH,0AH,0
;
;===================================================
;---- String auf Centronics-Schnittstelle drucken --
;===================================================
;
PRTSTR:     LD      A,(HL)      ;Zeichen holen
            CP      0           ;Ende des Strings ?
            RET     Z
            CALL    OUTCEN      ;drucken
            INC     HL          ;nächstes Zeichen
            JR      PRTSTR
;
;===================================================
;--- Zeichen auf Centronics-Schnittstelle drucken --
;===================================================
;
;ENTRY:     Zeichen in A
;EXIT:      Zeichen wird auf Centronics-Schnittstelle
;           ausgegeben
;
OUTCEN:     PUSH    AF
$1:         IN      A,(PIOAD)   ;warten bis BUSY ok
            AND     02H
            JR      NZ,$1
            POP     AF
            PUSH    AF
            OUT     (PIOBD),A   ;Zeichen ausgeben
            LD      A,1
            OUT     (PIOAD),A   ;/STB-Impuls
            LD      A,0
            OUT     (PIOAD),A
            LD      A,1
            OUT     (PIOAD),A
            POP     AF
            RET

Last Update: 2005-Okt-08


Tastaturabfrage

;===================================================
;------ Experiment: Tastaturabfrage ----------------
;===================================================
;
            .GLOBAL PIOKEY
PIOKEY:     LD      A,0CFH      ;Modus 3
            OUT     (PIOAC),A
            LD      A,00001111B ;Eingang: Bit 0-3
            OUT     (PIOAC),A   ;Ausgang: Bit 4-7
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
$2          LD      B,4         ;4 Leitungen scannen
            LD      A,10H
            LD      (OUTPAT),A  ;Scanmuster ausgeben
            LD      HL,INPAT    ;Zeiger auf Bit-Feld
$1:         LD      A,(OUTPAT)  ;1 Leitung aktivieren
            OUT     (PIOAD),A
            ADD     A,A         ;nächste Leitung
            LD      (OUTPAT),A
            IN      A,(PIOAD)   ;Rückmeldung lesen
            AND     0FH
            LD      (HL),A      ;und speichern in
            INC     HL          ;  Bit-Feld
            DJNZ    $1
;
            LD      DE,INPAT    ;Auswertung
            LD      HL,0
            LD      B,4
$3:         ADD     HL,HL       ;Bits in HL setzen
            ADD     HL,HL
            ADD     HL,HL
            ADD     HL,HL
            LD      A,(DE)
            OR      L
            LD      L,A
            INC     DE
            DJNZ    $3
            CALL    DSPHL       ;Ergebnis anzeigen
            LD      HL,10000
            CALL    DELAY
            JR      $2
            RET
;
            .DATA
OUTPAT      DEFB    0           ;Ausgangsmuster
INPAT       DEFB    0,0,0,0     ;Eingangsmuster
            .CODE

Last Update: 2005-Okt-11


Home [image] Anhang [image] Listing: Minimalsystem [image] Includes [image] Frequenzzähler mit CTC 0
Index
Siehe auch: Experiment: Stoppuhr, Experiment: Frequenzmessgerät

Frequenzzähler mit CTC 0

;===================================================
;------ Experiment: Frequenzzähler mit CTC 0 -------
;===================================================
;
            .GLOBAL FQCNT
FQCNT:      LD      A,C5H       ;Zähler initial.
            OUT     (CTC0),A
            LD      A,0
            OUT     (CTC0),A
            CALL    CLKGO       ;Zeitbasis starten
            LOAD    FQHB,0      ;Overflow rücksetzen
            LD      HL,0
            LD      (FREQ),HL
            INC     HL
            LD      (LASTFQ),HL ;Anzeige erzwingen
$1:         LD      DE,(FREQ)
            LD      HL,(LASTFQ)
            XOR     A
            SBC     HL,DE
            JR      Z,$1
            LD      (LASTFQ),DE ;Anzeige nur, wenn
            EX      DE,HL       ;  Wert geändert
            ADD     HL,HL       ;Jumper J3 auf Q0
            CALL    DSPHL
            LD      C,3
            CALL    SETDP
            JR      $1
;
            .DATA
LASTFQ:     DEFW    0           ;letzter Frequenzwert
            .CODE

Last Update: 2005-Okt-17


Stoppuhr mit CTC 3

;===================================================
;------ Experiment: Stoppuhr mit CTC 3 -------------
;===================================================
;
            .GLOBAL STPCLK
STPCLK:     IN      A,(PIN)     ;Status der Tasten
            AND     03
            LD      B,A
            LD      HL,0A5A5H   ;erste Anzeige
            LD      (LASTCK),HL ;  erzwingen
$LOOP1:     LD      DE,(CLKCNT) ;Zeit anzeigen
            LD      HL,(LASTCK) ;  nur wenn Änderung
            XOR     A
            SBC     HL,DE
            JR      Z,$4
            EX      DE,HL       ;neuer Wert
            LD      (LASTCK),HL ;  = alter Wert
            CALL    DSPHL       ;Anzeige
            LD      C,2
            CALL    SETDP
$4:         IN      A,(PIN)     ;Tasten prüfen
            AND     03
            XOR     B           ;Veränderung ?
            JR      Z,$LOOP1
            BIT     1,A         ;Reset ?
            JR      Z,$1
            LD      HL,0        ;Uhr rücksetzen
            LD      (CLKCNT),HL
            IN      A,(PIN)
            AND     03
            LD      B,A         ;Tasten aktualisieren
            JR      $LOOP1
$1:         IN      A,(PIN)     ;Start/Stop ?
            AND     03
            LD      B,A         ;Tasten aktualisieren
            BIT     0,A
            CALL    NZ,CLKGO
            CALL    Z,CLKSTP
            JR      $LOOP1
;
            .DATA
LASTCK:     DEFW    0           ;letzer Zeitwert
            .CODE
;
;===================================================
;------ Start clock (CTC 3) ------------------------
;===================================================
;
CLKGO:      PUSH    AF          ;Interrupt erlauben
            LD      A,081H
            OUT     (CTC3),A
            POP     AF
            RET
;
;===================================================
;------ Stop clock (CTC 3) -------------------------
;===================================================
;
CLKSTP:     PUSH    AF          ;Interrupt abschalten
            LD      A,001H
            OUT     (CTC3),A
            POP     AF
            RET

Last Update: 2005-Okt-11


Home [image] Anhang [image] Listing: Minimalsystem [image] Includes [image] Funktionsgenerator
Index
Siehe auch: Experiment: Programmierbarer Funktionsgenerator

Funktionsgenerator

;===================================================
;---- Experiment: Funktionsgenerator ---------------
;===================================================
;
            .GLOBAL FNCGEN
FNCGEN:     LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
FNCG1:      IN      A,(PIN)     ;Tasten einlesen
            OR      A           ;keine Taste
            JR      Z,FNCG1     ;  gedrückt ?
            LD      HL,LASTF
            CP      (HL)        ;Tasten geändert ?
            JR      Z,FNCG1
            LD      (LASTF),A   ;Tastenzustand merken
            LD      HL,FNCTAB   ;aktive Funktion
$2:         SLA     A           ;  ermitteln
            JR      C,$1
            INC     HL
            INC     HL
            JR      $2
;
$1:         LD      A,(HL)      ;Ausführungsadresse
            INC     HL          ;  des Ladeprogramms
            LD      H,(HL)      ;  berechnen
            LD      L,A
            LD      DE,FNCG1    ;Return-Adresse
            PUSH    DE
            JP      (HL)        ;do it !
;
            .DATA
LASTF:      DEFB    0
            .CODE
;
FNCTAB:     DEFW    ZEROLN      ;Nullinie
            DEFW    SQUARE      ;Rechteckfunktion
            DEFW    PULSE       ;Nadelimpuls
            DEFW    TRIANG      ;Dreiecksfunktion
            DEFW    SAWTOO      ;Sägezahn
            DEFW    SINE        ;Sinus
            DEFW    GAUSS       ;Gauá-Funktion
            DEFW    PARABO      ;Parabel
;
ZEROLN:     LD      B,0         ;Nullinie berechnen
            LD      HL,FNCBUF
$3:         LD      (HL),0
            INC     HL
            LD      (HL),80H
            INC     HL
            DJNZ    $3
            RET
;
SQUARE:     LD      B,0         ;Rechteckfunktion
            LD      HL,FNCBUF
$4:         LD      (HL),0
            INC     HL
            DJNZ    $4
$5:         LD      (HL),0FFH
            INC     HL
            DJNZ    $5
            RET
;
TRIANG:     LD      B,128       ;Dreiecksfunktion
            LD      HL,FNCBUF
$6:         LD      (HL),0
            INC     HL
            LD      A,B
            DEC     A
            ADD     A,A
            LD      (HL),A
            INC     HL
            DJNZ    $6
            LD      B,128
$7:         LD      (HL),0
            INC     HL
            LD      A,B
            DEC     A
            ADD     A,A
            CPL
            LD      (HL),A
            INC     HL
            DJNZ    $7
            RET
;
SAWTOO:     LD      B,0         ;Sägezahn
            LD      HL,FNCBUF
$8:         LD      (HL),0
            INC     HL
            LD      (HL),B
            INC     HL
            DJNZ    $8
            RET

PULSE:      LD      B,254       ;Impuls
            LD      HL,FNCBUF
$9:         LD      (HL),0
            INC     HL
            LD      (HL),0
            INC     HL
            DJNZ    $9
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            LD      (HL),0FFH
            INC     HL
            RET
;
SINE:       LD      HL,SINTAB   ;Sinus
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
GAUSS:      LD      HL,GAUSTB   ;Gauß
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
;---- Tabelle der Gauß'schen Kurve -----------------
;
GAUSTB:     DEFW    0000H, 0000H, 0000H, 0000H, 0000H
            DEFW    0000H, 0000H, 0000H, 0010H, 0010H
            DEFW    0010H, 0010H, 0010H, 0010H, 0010H
            DEFW    0010H, 0020H, 0020H, 0020H, 0020H
            DEFW    0030H, 0030H, 0040H, 0040H, 0050H
            DEFW    0050H, 0060H, 0070H, 0080H, 0090H
            DEFW    00A0H, 00B0H, 00D0H, 00F0H, 0100H
            DEFW    0120H, 0150H, 0170H, 01A0H, 01D0H
            DEFW    0200H, 0240H, 0280H, 02D0H, 0320H
            DEFW    0370H, 03D0H, 0440H, 04B0H, 0530H
            DEFW    05B0H, 0650H, 06F0H, 07A0H, 0860H
            DEFW    0920H, 0A00H, 0AF0H, 0C00H, 0D10H
            DEFW    0E40H, 0F80H, 10D0H, 1240H, 13D0H
            DEFW    1570H, 1730H, 1900H, 1B00H, 1D10H
            DEFW    1F40H, 2190H, 2410H, 26A0H, 2960H
            DEFW    2C40H, 2F40H, 3260H, 35A0H, 3910H
            DEFW    3CA0H, 4060H, 4430H, 4830H, 4C50H
            DEFW    5090H, 5500H, 5980H, 5E20H, 62F0H
            DEFW    67D0H, 6CC0H, 71E0H, 7700H, 7C40H
            DEFW    8190H, 86F0H, 8C60H, 91D0H, 9750H
            DEFW    9CD0H, A240H, A7C0H, AD30H, B290H
            DEFW    B7E0H, BD20H, C250H, C750H, CC40H
            DEFW    D100H, D5A0H, DA20H, DE60H, E270H
            DEFW    E650H, E9F0H, ED50H, F070H, F350H
            DEFW    F5E0H, F830H, FA40H, FC00H, FD60H
            DEFW    FE80H, FF50H, FFC0H, FFF0H, FFC0H
            DEFW    FF50H, FE80H, FD60H, FC00H, FA40H
            DEFW    F830H, F5E0H, F350H, F070H, ED50H
            DEFW    E9F0H, E650H, E270H, DE60H, DA20H
            DEFW    D5A0H, D100H, CC40H, C750H, C250H
            DEFW    BD20H, B7E0H, B290H, AD30H, A7C0H
            DEFW    A240H, 9CD0H, 9750H, 91D0H, 8C60H
            DEFW    86F0H, 8190H, 7C40H, 7700H, 71E0H
            DEFW    6CC0H, 67D0H, 62F0H, 5E20H, 5980H
            DEFW    5500H, 5090H, 4C50H, 4830H, 4430H
            DEFW    4060H, 3CA0H, 3910H, 35A0H, 3260H
            DEFW    2F40H, 2C40H, 2960H, 26A0H, 2410H
            DEFW    2190H, 1F40H, 1D10H, 1B00H, 1900H
            DEFW    1730H, 1570H, 13D0H, 1240H, 10D0H
            DEFW    0F80H, 0E40H, 0D10H, 0C00H, 0AF0H
            DEFW    0A00H, 0920H, 0860H, 07A0H, 06F0H
            DEFW    0650H, 05B0H, 0530H, 04B0H, 0440H
            DEFW    03D0H, 0370H, 0320H, 02D0H, 0280H
            DEFW    0240H, 0200H, 01D0H, 01A0H, 0170H
            DEFW    0150H, 0120H, 0100H, 00F0H, 00D0H
            DEFW    00B0H, 00A0H, 0090H, 0080H, 0070H
            DEFW    0060H, 0050H, 0050H, 0040H, 0040H
            DEFW    0030H, 0030H, 0020H, 0020H, 0020H
            DEFW    0020H, 0010H, 0010H, 0010H, 0010H
            DEFW    0010H, 0010H, 0010H, 0010H, 0000H
            DEFW    0000H, 0000H, 0000H, 0000H, 0000H
            DEFW    0000H
;
PARABO:     LD      HL,PARATB   ;Parabel
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            RET
;
;----- Tabelle der Parabel 2. Ordnung --------------
;
PARATB:     DEFW    FE00H, FA10H, F620H, F230H, EE50H
            DEFW    EA80H, E6B0H, E2E0H, DF20H, DB70H
            DEFW    D7C0H, D410H, D070H, CCE0H, C950H
            DEFW    C5C0H, C240H, BED0H, BB60H, B7F0H
            DEFW    B490H, B140H, ADF0H, AAA0H, A760H
            DEFW    A430H, A100H, 9DD0H, 9AB0H, 97A0H
            DEFW    9490H, 9180H, 8E80H, 8B90H, 88A0H
            DEFW    85B0H, 82D0H, 8000H, 7D30H, 7A60H
            DEFW    77A0H, 74F0H, 7240H, 6F90H, 6CF0H
            DEFW    6A60H, 67D0H, 6540H, 62C0H, 6050H
            DEFW    5DE0H, 5B70H, 5910H, 56C0H, 5470H
            DEFW    5220H, 4FE0H, 4DB0H, 4B80H, 4950H
            DEFW    4730H, 4520H, 4310H, 4100H, 3F00H
            DEFW    3D10H, 3B20H, 3930H, 3750H, 3580H
            DEFW    33B0H, 31E0H, 3020H, 2E70H, 2CC0H
            DEFW    2B10H, 2970H, 27E0H, 2650H, 24C0H
            DEFW    2340H, 21D0H, 2060H, 1EF0H, 1D90H
            DEFW    1C40H, 1AF0H, 19A0H, 1860H, 1730H
            DEFW    1600H, 14D0H, 13B0H, 12A0H, 1190H
            DEFW    1080H, 0F80H, 0E90H, 0DA0H, 0CB0H
            DEFW    0BD0H, 0B00H, 0A30H, 0960H, 08A0H
            DEFW    07F0H, 0740H, 0690H, 05F0H, 0560H
            DEFW    04D0H, 0440H, 03C0H, 0350H, 02E0H
            DEFW    0270H, 0210H, 01C0H, 0170H, 0120H
            DEFW    00E0H, 00B0H, 0080H, 0050H, 0030H
            DEFW    0020H, 0010H, 0000H, 0000H, 0010H
            DEFW    0020H, 0030H, 0050H, 0080H, 00B0H
            DEFW    00E0H, 0120H, 0170H, 01C0H, 0210H
            DEFW    0270H, 02E0H, 0350H, 03C0H, 0440H
            DEFW    04D0H, 0560H, 05F0H, 0690H, 0740H
            DEFW    07F0H, 08A0H, 0960H, 0A30H, 0B00H
            DEFW    0BD0H, 0CB0H, 0DA0H, 0E90H, 0F80H
            DEFW    1080H, 1190H, 12A0H, 13B0H, 14D0H
            DEFW    1600H, 1730H, 1860H, 19A0H, 1AF0H
            DEFW    1C40H, 1D90H, 1EF0H, 2060H, 21D0H
            DEFW    2340H, 24C0H, 2650H, 27E0H, 2970H
            DEFW    2B10H, 2CC0H, 2E70H, 3020H, 31E0H
            DEFW    33B0H, 3580H, 3750H, 3930H, 3B20H
            DEFW    3D10H, 3F00H, 4100H, 4310H, 4520H
            DEFW    4730H, 4950H, 4B80H, 4DB0H, 4FE0H
            DEFW    5220H, 5470H, 56C0H, 5910H, 5B70H
            DEFW    5DE0H, 6050H, 62C0H, 6540H, 67D0H
            DEFW    6A60H, 6CF0H, 6F90H, 7240H, 74F0H
            DEFW    77A0H, 7A60H, 7D30H, 8000H, 82D0H
            DEFW    85B0H, 88A0H, 8B90H, 8E80H, 9180H
            DEFW    9490H, 97A0H, 9AB0H, 9DD0H, A100H
            DEFW    A430H, A760H, AAA0H, ADF0H, B140H
            DEFW    B490H, B7F0H, BB60H, BED0H, C240H
            DEFW    C5C0H, C950H, CCE0H, D070H, D410H
            DEFW    D7C0H, DB70H, DF20H, E2E0H, E6B0H
            DEFW    EA80H, EE50H, F230H, F620H, FA10H
            DEFW    FE00H

Last Update: 2005-Okt-17


Sinusgenerator; Version A

;===================================================
;---- Experiment: Sinusgenerator, Version A --------
;===================================================
;
            .GLOBAL SINUSA
SINUSA:     LD      DE,STBEND   ;Ende Sinustabelle
            LD      IX,SINTAB   ;Start Sinustabelle
$L1:        LD      L,(IX)      ;Wert aus Tabelle
            INC     IX
            LD      H,(IX)
            INC     IX
            CALL    ODAC1       ;Wert an DAC ausgeben
            PUSH    IX          ;Überprüfen, ob Ende
            POP     HL          ;  der Tabelle
            XOR     A
            SBC     HL,DE
            JR      NZ,$L2
            LD      IX,SINTAB   ;ja, Pointer rücks.
$L2:        IN      A,(PIN)     ;Verzögerung einlesen
            LD      L,A
            LD      H,0
            ADD     HL,HL       ;Verzögerung = 1+4*PIN
            ADD     HL,HL
            INC     HL
            CALL    DELAY
            JR      $L1         ;nächster Durchgang
;
;===================================================
;---- Ausgabe eines Wertes auf DAC1 ----------------
;===================================================
;
;Eingang:   16-Bit-Wert in HL
;Ausgang:   vordersten 12 Bit werden an DAC1 ausgegeben
;
            .GLOBAL ODAC1
ODAC1:      PUSH    AF          ;Register AF sichern
            LD      A,L
            OUT     (DAC1LO),A  ;niederwertiges Byte
            LD      A,H
            OUT     (DAC1HI),A  ;höherwertiges Byte
            POP     AF
            RET
;
;----- Tabelle der Sinuswerte ----------------------
;
SINTAB:     DEFW    8000H, 8320H, 8640H, 8960H, 8C80H
            DEFW    8FA0H, 92C0H, 95E0H, 98F0H, 9C00H
            DEFW    9F10H, A220H, A520H, A820H, AB10H
            DEFW    AE00H, B0F0H, B3D0H, B6B0H, B980H
            DEFW    BC50H, BF10H, C1C0H, C470H, C710H
            DEFW    C9A0H, CC30H, CEB0H, D120H, D390H
            DEFW    D5F0H, D830H, DA70H, DCA0H, DED0H
            DEFW    E0E0H, E2E0H, E4E0H, E6C0H, E8A0H
            DEFW    EA60H, EC10H, EDC0H, EF50H, F0D0H
            DEFW    F240H, F3A0H, F4F0H, F630H, F760H
            DEFW    F870H, F980H, FA70H, FB50H, FC20H
            DEFW    FCD0H, FD80H, FE10H, FE90H, FF00H
            DEFW    FF50H, FF90H, FFD0H, FFE0H, FFF0H
            DEFW    FFE0H, FFD0H, FF90H, FF50H, FF00H
            DEFW    FE90H, FE10H, FD80H, FCD0H, FC20H
            DEFW    FB50H, FA70H, F980H, F870H, F760H
            DEFW    F630H, F4F0H, F3A0H, F240H, F0D0H
            DEFW    EF50H, EDC0H, EC10H, EA60H, E8A0H
            DEFW    E6C0H, E4E0H, E2E0H, E0E0H, DED0H
            DEFW    DCA0H, DA70H, D830H, D5F0H, D390H
            DEFW    D120H, CEB0H, CC30H, C9A0H, C710H
            DEFW    C470H, C1C0H, BF10H, BC50H, B980H
            DEFW    B6B0H, B3D0H, B0F0H, AE00H, AB10H
            DEFW    A820H, A520H, A220H, 9F10H, 9C00H
            DEFW    98F0H, 95E0H, 92C0H, 8FA0H, 8C80H
            DEFW    8960H, 8640H, 8320H, 8000H, 7CD0H
            DEFW    79B0H, 7690H, 7370H, 7050H, 6D30H
            DEFW    6A10H, 6700H, 63F0H, 60E0H, 5DD0H
            DEFW    5AD0H, 57D0H, 54E0H, 51F0H, 4F00H
            DEFW    4C20H, 4940H, 4670H, 43A0H, 40E0H
            DEFW    3E30H, 3B80H, 38E0H, 3650H, 33C0H
            DEFW    3140H, 2ED0H, 2C60H, 2A00H, 27C0H
            DEFW    2580H, 2350H, 2120H, 1F10H, 1D10H
            DEFW    1B10H, 1930H, 1750H, 1590H, 13E0H
            DEFW    1230H, 10A0H, 0F20H, 0DB0H, 0C50H
            DEFW    0B00H, 09C0H, 0890H, 0780H, 0670H
            DEFW    0580H, 04A0H, 03D0H, 0320H, 0270H
            DEFW    01E0H, 0160H, 00F0H, 00A0H, 0060H
            DEFW    0020H, 0010H, 0000H, 0010H, 0020H
            DEFW    0060H, 00A0H, 00F0H, 0160H, 01E0H
            DEFW    0270H, 0320H, 03D0H, 04A0H, 0580H
            DEFW    0670H, 0780H, 0890H, 09C0H, 0B00H
            DEFW    0C50H, 0DB0H, 0F20H, 10A0H, 1230H
            DEFW    13E0H, 1590H, 1750H, 1930H, 1B10H
            DEFW    1D10H, 1F10H, 2120H, 2350H, 2580H
            DEFW    27C0H, 2A00H, 2C60H, 2ED0H, 3140H
            DEFW    33C0H, 3650H, 38E0H, 3B80H, 3E30H
            DEFW    40E0H, 43A0H, 4670H, 4940H, 4C20H
            DEFW    4F00H, 51F0H, 54E0H, 57D0H, 5AD0H
            DEFW    5DD0H, 60E0H, 63F0H, 6700H, 6A10H
            DEFW    6D30H, 7050H, 7370H, 7690H, 79B0H
            DEFW    7CD0H
STBEND      EQU     $

Last Update: 2005-Okt-08


Sinusgenerator, Version B

;===================================================
;---- Experiment: Sinusgenerator, Version B --------
;===================================================
;
            .GLOBAL LFLSIN
LFLSIN:     LD      HL,SINTAB   ;Sinustabelle laden
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
            LD      A,1         ;Bit 0 = 1
$1:         OUT     (POUT),A    ;Ausgabe auf LEDs
            RLCA                ;Bit rotieren
            LD      HL,10000    ;70 ms warten
            CALL    DELAY
            JR      $1          ;unendliche Schleife

Last Update: 2005-Okt-08


Protokoll-Umsetzung

;===================================================
;---- Experiment: Protokoll-Umsetzung --------------
;===================================================
;
            .GLOBAL PROTOC
PROTOC:     IN      A,(DIPSW)   ;DIP-switch geändert ?
            LD      HL,DSWIMG
            CP      (HL)
            JR      Z,$1
            LD      (HL),A
            BIT     0,A         ;DART-A oder DART-B
            CALL    NZ,SETPDB
            CALL    Z,SETPDA
$1:         IN      A,(PIN)     ;Datenfluss stoppen ?
            BIT     0,A
            JR      Z,PROTOC    ;ja
            CALL    RDV24B      ;Zeichen von DART-B
            JR      C,PROTOC    ;kein Zeichen
$2:         CALL    WRV24A      ;Zeichen senden (DART-A)
            JR      C,$2        ;warten, wenn Puffer
            JR      PROTOC      ;  voll, nächste Runde
;
            .DATA
DSWIMG:     DEFB    0           ;DIP-Switch Stellung
            .CODE

Last Update: 2005-Okt-08


Zeichen seriell senden

;===================================================
;---- Experiment: Zeichen seriell senden -----------
;===================================================
;
            .GLOBAL BYTSND
BYTSND:     LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;ja, neues Protokoll
            IN      A,(PIN)     ;Tasten einlesen
            CALL    WRV24A      ;serielle Ausgabe
            LD      HL,4000     ;70 ms warten
            CALL    DELAY
            JR      BYTSND      ;nächste Runde
;
            .DATA
DSIMG:      DEFB    0           ;DIPSW-Einstellung
            .CODE

Last Update: 2005-Okt-08


Lauflicht

;===================================================
;---- Experiment: Lauflicht ------------------------
;===================================================
;
            .GLOBAL LAUFL
LAUFL:      LD      A,1         ;Initialisierung
$L1:        OUT     (POUT),A    ;Ausgabe auf POUT
            RRCA                ;Bit schieben
            LD      HL,10000    ;Länge der Verzögerung
            CALL    DELAY
            JR      $L1         ;Endlosschleife
;
;===================================================
;------ Verzögerung --------------------------------
;===================================================
;
;ENTRY:     HL ... Zahl der Schleifendurchläufe
;EXIT:      Verzögerung um 26*HL + 47 Takte,
;           falls keine Wartezyklen etc. aufgetreten sind
;
            .GLOBAL DELAY
DELAY:      PUSH    AF          ;Wert von AF sichern
            PUSH    HL          ;Wert von HL sichern
$1:         DEC     HL
            LD      A,L         ;Test, ob HL=0
            OR      H
            JR      NZ,$1       ;Schleife, falls HL<>0
            POP     HL          ;alten Wert von HL und
            POP     AF          ;  AF wiederherstellen
            RET

Last Update: 2005-Okt-08


Zähler

;===================================================
;---- Experiment: Zähler ---------------------------
;===================================================
;
            .GLOBAL EXPCNT
EXPCNT:     LD      C,0         ;Zähler initial.
$L1:        LD      A,C         ;Zähler in A laden
            OUT     (POUT),A    ;auf POUT ausgeben
            INC     C
            IN      A,(PIN)     ;Verzögerung von PIN
            LD      H,A         ;Wert in HL bringen
            LD      L,0
            CALL    DELAY       ;Verzögerung ausführen
            JR      $L1         ;Schleife

Last Update: 2005-Okt-08


Der Z80-Befehlssatz

Mnemotische Bezeichnung

Maschinen-Code

Takt-Zyklen

ADC

A,(HL)

8E

7

ADC

A,(IX+dd)

DD 8E dd

19

ADC

A,(IY+dd)

FD 8E dd

19

ADC

A,A

8F

4

ADC

A,B

88

4

ADC

A,C

89

4

ADC

A,D

8A

4

ADC

A,E

8B

4

ADC

A,H

8C

4

ADC

A,L

8D

4

ADC

A,nn

CE nn

7

ADC

HL,BC

ED 4A

15

ADC

HL,DE

ED 5A

15

ADC

HL,HL

ED 6A

15

ADC

HL,SP

ED 7A

15

ADD

A,(HL)

86

7

ADD

A,(IX+dd)

DD 86 dd

19

ADD

A,(IY+dd)

FD 86 dd

19

ADD

A,A

87

4

ADD

A,B

80

4

ADD

A,C

81

4

ADD

A,D

82

4

ADD

A,E

83

4

ADD

A,H

84

4

ADD

A,L

85

4

ADD

A,nn

C6 nn

7

ADD

HL,BC

09

11

ADD

HL,DE

19

11

ADD

HL,HL

29

11

ADD

HL,SP

39

11

ADD

IX,BC

DD 09

15

ADD

IX,DE

DD 19

15

ADD

IX,IX

DD 29

15

ADD

IX,SP

DD 39

15

ADD

IY,BC

FD 09

15

ADD

IY,DE

FD 19

15

ADD

IY,IY

FD 29

15

ADD

IY,SP

FD 39

15

AND

(HL)

A6

7

AND

(IX+dd)

DD A6 dd

19

AND

(IY+dd)

FD A6 dd

19

AND

A

A7

4

AND

B

A0

4

AND

C

A1

4

AND

D

A2

4

AND

E

A3

4

AND

H

A4

4

AND

L

A5

4

AND

nn

E6 nn

7

BIT

0,(HL)

CB 46

12

BIT

0,(IX+dd)

DD CB dd 46

20

BIT

0,(IY+dd)

FD CB dd 46

20

BIT

0,A

CB 47

8

BIT

0,B

CB 40

8

BIT

0,C

CB 41

8

BIT

0,D

CB 42

8

BIT

0,E

CB 43

8

BIT

0,H

CB 44

8

BIT

0,L

CB 45

8

BIT

1,(HL)

CB 4E

12

BIT

1,(IX+dd)

DD CB dd 4E

20

BIT

1,(IY+dd)

FD CB dd 4E

20

BIT

1,A

CB 4F

8

BIT

1,B

CB 48

8

BIT

1,C

CB 49

8

BIT

1,D

CB 4A

8

BIT

1,E

CB 4B

8

BIT

1,H

CB 4C

8

BIT

1,L

CB 4D

8

BIT

2,(HL)

CB 56

12

BIT

2,(IX+dd)

DD CB dd 56

20

BIT

2,(IY+dd)

FD CB dd 56

20

BIT

2,A

CB 57

8

BIT

2,B

CB 50

8

BIT

2,C

CB 51

8

BIT

2,D

CB 52

8

BIT

2,E

CB 53

8

BIT

2,H

CB 54

8

BIT

2,L

CB 55

8

BIT

3,(HL)

CB 5E

12

BIT

3,(IX+dd)

DD CB dd 5E

20

BIT

3,(IY+dd)

FD CB dd 5E

20

BIT

3,A

CB 5F

8

BIT

3,B

CB 58

8

BIT

3,C

CB 59

8

BIT

3,D

CB 5A

8

BIT

3,E

CB 5B

8

BIT

3,H

CB 5C

8

BIT

3,L

CB 5D

8

BIT

4,(HL)

CB 66

12

BIT

4,(IX+dd)

DD CB dd 66

20

BIT

4,(IY+dd)

FD CB dd 66

20

BIT

4,A

CB 67

8

BIT

4,B

CB 60

8

BIT

4,C

CB 61

8

BIT

4,D

CB 62

8

BIT

4,E

CB 63

8

BIT

4,H

CB 64

8

BIT

4,L

CB 65

8

BIT

5,(HL)

CB 6E

12

BIT

5,(IX+dd)

DD CB dd 6E

20

BIT

5,(IY+dd)

FD CB dd 6E

20

BIT

5,A

CB 6F

8

BIT

5,B

CB 68

8

BIT

5,C

CB 69

8

BIT

5,D

CB 6A

8

BIT

5,E

CB 6B

8

BIT

5,H

CB 6C

8

BIT

5,L

CB 6D

8

BIT

6,(HL)

CB 76

12

BIT

6,(IX+dd)

DD CB dd 76

20

BIT

6,(IY+dd)

FD CB dd 76

20

BIT

6,A

CB 77

8

BIT

6,B

CB 70

8

BIT

6,C

CB 71

8

BIT

6,D

CB 72

8

BIT

6,E

CB 73

8

BIT

6,H

CB 74

8

BIT

6,L

CB 75

8

BIT

7,(HL)

CB 7E

12

BIT

7,(IX+dd)

DD CB dd 7E

20

BIT

7,(IY+dd)

FD CB dd 7E

20

BIT

7,A

CB 7F

8

BIT

7,B

CB 78

8

BIT

7,C

CB 79

8

BIT

7,D

CB 7A

8

BIT

7,E

CB 7B

8

BIT

7,H

CB 7C

8

BIT

7,L

CB 7D

8

CALL

nnnn

CD nnnn

17

CALL

C,nnnn

DC nnnn

10/17

CALL

M,nnnn

FC nnnn

10/17

CALL

NC,nnnn

D4 nnnn

10/17

CALL

NZ,nnnn

C4 nnnn

10/17

CALL

P,nnnn

F4 nnnn

10/17

CALL

PE,nnnn

EC nnnn

10/17

CALL

PO,nnnn

E4 nnnn

10/17

CALL

Z,nnnn

CC nnnn

10/17

CCF

3F

4

CP

(HL)

BE

7

CP

(IX+dd)

DD BE dd

19

CP

(IY+dd)

FD BE dd

19

CP

A

BF

4

CP

B

B8

4

CP

C

B9

4

CP

D

BA

4

CP

E

BB

4

CP

H

BC

4

CP

L

BD

4

CP

nn

FE nn

7

CPD

ED A9

16

CPDR

ED B9

21/16

CPI

ED A1

16

CPIR

ED B1

21/16

CPL

2F

4

DAA

27

4

DEC

(HL)

34

11

DEC

(IX+dd)

DD 34 dd

23

DEC

(IY+dd)

FD 34 dd

23

DEC

A

3C

4

DEC

B

04

4

DEC

BC

03

6

DEC

C

0C

4

DEC

D

14

4

DEC

DE

13

6

DEC

E

1C

4

DEC

H

24

4

DEC

HL

23

6

DEC

IX

DD 23

10

DEC

IY

FD 23

10

DEC

L

2C

4

DEC

SP

33

6

DI

F3

4

DJNZ

10 dd

13/8

EI

FB

4

EX

(SP),HL

E3

19

EX

(SP),IX

DD E3

23

EX

(SP),IX

DD E3

23

EX

AF,AF'

08

4

EX

DE,HL

EB

4

EXX

D9

4

HALT

76

4

IM

0

ED 46

8

IM

1

ED 56

8

IM

2

ED 5E

8

IN

A,(C)

ED 78

12

IN

A,(nn)

DB nn

11

IN

B,(C)

ED 40

12

IN

C,(C)

ED 48

12

IN

D,(C)

ED 50

12

IN

E,(C)

ED 58

12

IN

H,(C)

ED 60

12

IN

L,(C)

ED 68

12

INC

(HL)

34

11

INC

(IX+dd)

DD 34 dd

23

INC

(IY+dd)

FD 34 dd

23

INC

A

3C

4

INC

B

04

4

INC

BC

03

6

INC

C

0C

4

INC

D

14

4

INC

DE

13

6

INC

E

1C

4

INC

H

24

4

INC

HL

23

6

INC

IX

DD 23

10

INC

IY

FD 23

10

INC

L

2C

4

INC

SP

33

6

IND

ED AA

16

INDR

ED BA

21/16

INI

ED A2

16

INIR

ED B2

21/16

JP

(HL)

E9

4

JP

(IX)

DD E9

8

JP

(IY)

FD E9

8

JP

nnnn

C3 nnnn

10

JP

C,nnnn

DA nnnn

10

JP

M,nnnn

FA nnnn

10

JP

NC,nnnn

D2 nnnn

10

JP

NZ,nnnn

C2 nnnn

10

JP

P,nnnn

F2 nnnn

10

JP

PE,nnnn

EA nnnn

10

JP

PO,nnnn

E2 nnnn

10

JP

Z,nnnn

CA nnnn

10

JR

dd

18 dd

12

JR

C,dd

38 dd

12/7

JR

NC,dd

30 dd

12/7

JR

NZ,dd

20 dd

12/7

JR

Z,dd

28 dd

12/7

LD

(BC),A

02

7

LD

(DE),A

12

7

LD

(HL),A

77

7

LD

(HL),B

70

7

LD

(HL),C

71

7

LD

(HL),D

72

7

LD

(HL),E

73

7

LD

(HL),H

74

7

LD

(HL),L

75

7

LD

(HL),nn

36 nn

10

LD

(IX+dd),A

DD 77 dd

19

LD

(IX+dd),B

DD 70 dd

19

LD

(IX+dd),C

DD 71 dd

19

LD

(IX+dd),D

DD 72 dd

19

LD

(IX+dd),E

DD 73 dd

19

LD

(IX+dd),H

DD 74 dd

19

LD

(IX+dd),L

DD 75 dd

19

LD

(IX+dd),nn

DD 36 dd nn

19

LD

(IY+dd),A

FD 77 dd

19

LD

(IY+dd),B

FD 70 dd

19

LD

(IY+dd),C

FD 71 dd

19

LD

(IY+dd),D

FD 72 dd

19

LD

(IY+dd),E

FD 73 dd

19

LD

(IY+dd),H

FD 74 dd

19

LD

(IY+dd),L

FD 75 dd

19

LD

(IY+dd),nn

FD 36 dd nn

19

LD

(nnnn),A

32 nnnn

13

LD

(nnnn),BC

ED 43 nnnn

20

LD

(nnnn),DE

ED 53 nnnn

20

LD

(nnnn),HL

22 nnnn

16

LD

(nnnn),IX

DD 22 nnnn

20

LD

(nnnn),IY

FD 22 nnnn

20

LD

(nnnn),SP

ED 73 nnnn

20

LD

A,(BC)

0A

7

LD

A,(DE)

1A

7

LD

A,(HL)

7E

7

LD

A,(IX+dd)

DD 7E dd

19

LD

A,(IY+dd)

FD 7E dd

19

LD

A,(nnnn)

3A nnnn

13

LD

A,A

7F

4

LD

A,B

78

4

LD

A,C

79

4

LD

A,D

7A

4

LD

A,E

7B

4

LD

A,H

7C

4

LD

A,I

ED 57

9

LD

A,L

7D

4

LD

A,R

ED 5F

9

LD

A,nn

3E nn

7

LD

B,(HL)

46

7

LD

B,(IX+dd)

DD 46 dd

19

LD

B,(IY+dd)

FD 46 dd

19

LD

B,A

47

4

LD

B,B

40

4

LD

B,C

41

4

LD

B,D

42

4

LD

B,E

43

4

LD

B,H

44

4

LD

B,L

45

4

LD

B,nn

06 nn

7

LD

BC,(nnnn)

ED 4B nnnn

20

LD

BC,nnnn

01 nnnn

10

LD

C,(HL)

4E

7

LD

C,(IX+dd)

DD 4E dd

19

LD

C,(IY+dd)

FD 4E dd

19

LD

C,A

4F

4

LD

C,B

48

4

LD

C,C

49

4

LD

C,D

4A

4

LD

C,E

4B

4

LD

C,H

4C

4

LD

C,L

4D

4

LD

C,nn

0E nn

7

LD

D,(HL)

56

7

LD

D,(IX+dd)

DD 56 dd

19

LD

D,(IY+dd)

FD 56 dd

19

LD

D,A

57

4

LD

D,B

50

4

LD

D,C

51

4

LD

D,D

52

4

LD

D,E

53

4

LD

D,H

54

4

LD

D,L

55

4

LD

D,nn

16 nn

7

LD

DE,(nnnn)

ED 5B nnnn

20

LD

DE,nnnn

11 nnnn

10

LD

E,(HL)

5E

7

LD

E,(IX+dd)

DD 5E dd

19

LD

E,(IY+dd)

FD 5E dd

19

LD

E,A

5F

4

LD

E,B

58

4

LD

E,C

59

4

LD

E,D

5A

4

LD

E,E

5B

4

LD

E,H

5C

4

LD

E,L

5D

4

LD

E,nn

1E nn

7

LD

H,(HL)

66

7

LD

H,(IX+dd)

DD 66 dd

19

LD

H,(IY+dd)

FD 66 dd

19

LD

H,A

67

4

LD

H,B

60

4

LD

H,C

61

4

LD

H,D

62

4

LD

H,E

63

4

LD

H,H

64

4

LD

H,L

65

4

LD

H,nn

26 nn

7

LD

HL,(nnnn)

2A nnnn

16

LD

HL,nnnn

21 nnnn

10

LD

I,A

ED 47

9

LD

IX,(nnnn)

DD 2A nnnn

20

LD

IX,nnnn

DD 21 nnnn

14

LD

IY,(nnnn)

FD 2A nnnn

20

LD

IY,nnnn

FD 21 nnnn

14

LD

L,(HL)

6E

7

LD

L,(IX+dd)

DD 6E dd

19

LD

L,(IY+dd)

FD 6E dd

19

LD

L,A

6F

4

LD

L,B

68

4

LD

L,C

69

4

LD

L,D

6A

4

LD

L,E

6B

4

LD

L,H

6C

4

LD

L,L

6D

4

LD

L,nn

2E nn

7

LD

R,A

ED 4F

9

LD

SP,(nnnn)

ED 7B nnnn

20

LD

SP,nnnn

31 nnnn

10

LD

SP,HL

F9

6

LD

SP,IX

DD F9

10

LD

SP,IY

FD F9

10

LDD

ED A8

16

LDDR

ED B8

21/16

LDI

ED A0

16

LDIR

ED B0

21/16

NEG

ED 44

8

NOP

00

4

OR

A,(HL)

B6

7

OR

A,(IX+dd)

DD B6 dd

19

OR

A,(IY+dd)

FD B6 dd

19

OR

A,A

B7

4

OR

A,B

B0

4

OR

A,C

B1

4

OR

A,D

B2

4

OR

A,E

B3

4

OR

A,H

B4

4

OR

A,L

B5

4

OR

nn

F6 nn

7

OTDR

ED BB

21/16

OTIR

ED B3

21/16

OUT

(C),A

ED 79

12

OUT

(nn),A

D3 nn

11

OUT

(C),B

ED 41

12

OUT

(C),C

ED 49

12

OUT

(C),D

ED 51

12

OUT

(C),E

ED 59

12

OUT

(C),H

ED 61

12

OUT

(C),L

ED 69

12

OUTD

ED AB

16

OUTI

ED A3

16

POP

AF

F1

10

POP

BC

C1

10

POP

DE

D1

10

POP

HL

E1

10

POP

IX

DD E1

14

POP

IY

FD E1

14

PUSH

AF

F5

11

PUSH

BC

C5

11

PUSH

DE

D5

11

PUSH

HL

E5

11

PUSH

IX

DD E5

15

PUSH

IY

FD E5

15

RES

0,(HL)

CB 86

15

RES

0,(IX+dd)

DD CB dd 86

23

RES

0,(IY+dd)

FD CB dd 86

23

RES

0,A

CB 87

8

RES

0,B

CB 80

8

RES

0,C

CB 81

8

RES

0,D

CB 82

8

RES

0,E

CB 83

8

RES

0,H

CB 84

8

RES

0,L

CB 85

8

RES

1,(HL)

CB 8E

15

RES

1,(IX+dd)

DD CB dd 8E

23

RES

1,(IY+dd)

FD CB dd 8E

23

RES

1,A

CB 8F

8

RES

1,B

CB 88

8

RES

1,C

CB 89

8

RES

1,D

CB 8A

8

RES

1,E

CB 8B

8

RES

1,H

CB 8C

8

RES

1,L

CB 8D

8

RES

2,(HL)

CB 96

15

RES

2,(IX+dd)

DD CB dd 96

23

RES

2,(IY+dd)

FD CB dd 96

23

RES

2,A

CB 97

8

RES

2,B

CB 90

8

RES

2,C

CB 91

8

RES

2,D

CB 92

8

RES

2,E

CB 93

8

RES

2,H

CB 94

8

RES

2,L

CB 95

8

RES

3,(HL)

CB 9E

15

RES

3,(IX+dd)

DD CB dd 9E

23

RES

3,(IY+dd)

FD CB dd 9E

23

RES

3,A

CB 9F

8

RES

3,B

CB 98

8

RES

3,C

CB 99

8

RES

3,D

CB 9A

8

RES

3,E

CB 9B

8

RES

3,H

CB 9C

8

RES

3,L

CB 9D

8

RES

4,(HL)

CB A6

15

RES

4,(IX+dd)

DD CB dd A6

23

RES

4,(IY+dd)

FD CB dd A6

23

RES

4,A

CB A7

8

RES

4,B

CB A0

8

RES

4,C

CB A1

8

RES

4,D

CB A2

8

RES

4,E

CB A3

8

RES

4,H

CB A4

8

RES

4,L

CB A5

8

RES

5,(HL)

CB AE

15

RES

5,(IX+dd)

DD CB dd AE

23

RES

5,(IY+dd)

FD CB dd AE

23

RES

5,A

CB AF

8

RES

5,B

CB A8

8

RES

5,C

CB A9

8

RES

5,D

CB AA

8

RES

5,E

CB AB

8

RES

5,H

CB AC

8

RES

5,L

CB AD

8

RES

6,(HL)

CB B6

15

RES

6,(IX+dd)

DD CB dd B6

23

RES

6,(IY+dd)

FD CB dd B6

23

RES

6,A

CB B7

8

RES

6,B

CB B0

8

RES

6,C

CB B1

8

RES

6,D

CB B2

8

RES

6,E

CB B3

8

RES

6,H

CB B4

8

RES

6,L

CB B5

8

RES

7,(HL)

CB BE

15

RES

7,(IX+dd)

DD CB dd BE

23

RES

7,(IY+dd)

FD CB dd BE

23

RES

7,A

CB BF

8

RES

7,B

CB B8

8

RES

7,C

CB B9

8

RES

7,D

CB BA

8

RES

7,E

CB BB

8

RES

7,H

CB BC

8

RES

7,L

CB BD

8

RET

C9

10

RET

C

D8

5/11

RET

M

F8

5/11

RET

NC

D0

5/11

RET

NZ

C0

5/11

RET

P

F0

5/11

RET

PE

E8

5/11

RET

PO

E0

5/11

RET

Z

C8

5/11

RETI

ED 4D

14

RETN

ED 45

14

RL

(HL)

CB 16

15

RL

(IX+dd)

DD CB 16 dd

23

RL

(IY+dd)

FD CB 16 dd

23

RL

A

CB 17

8

RL

B

CB 10

8

RL

C

CB 11

8

RL

D

CB 12

8

RL

E

CB 13

8

RL

H

CB 14

8

RL

L

CB 15

8

RLA

17

4

RLC

(HL)

CB 06

15

RLC

(IX+dd)

DD CB 06 dd

23

RLC

(IY+dd)

FD CB 06 dd

23

RLC

A

CB 07

8

RLC

B

CB 00

8

RLC

C

CB 01

8

RLC

D

CB 02

8

RLC

E

CB 03

8

RLC

H

CB 04

8

RLC

L

CB 05

8

RLCA

07

4

RLD

ED 6F

18

RR

(HL)

CB 1E

15

RR

(IX+dd)

DD CB 1E dd

23

RR

(IY+dd)

FD CB 1E dd

23

RR

A

CB 1F

8

RR

B

CB 18

8

RR

C

CB 19

8

RR

D

CB 1A

8

RR

E

CB 1B

8

RR

H

CB 1C

8

RR

L

CB 1D

8

RRA

1F

4

RRC

(HL)

CB 0E

15

RRC

(IX+dd)

DD CB 0E dd

23

RRC

(IY+dd)

FD CB 0E dd

23

RRC

A

CB 0F

8

RRC

B

CB 08

8

RRC

C

CB 09

8

RRC

D

CB 0A

8

RRC

E

CB 0B

8

RRC

H

CB 0C

8

RRC

L

CB 0D

8

RRCA

0F

4

RRD

ED 67

18

RST

0

C7

11

RST

8

CF

11

RST

10H

D7

11

RST

18H

DF

11

RST

20H

E7

11

RST

28H

EF

11

RST

30H

F7

11

RST

38H

FF

11

SBC

A,(HL)

9E

7

SBC

A,(IX+dd)

DD 9E dd

19

SBC

A,(IY+dd)

FD 9E dd

19

SBC

A,A

9F

4

SBC

A,B

98

4

SBC

A,C

99

4

SBC

A,D

9A

4

SBC

A,E

9B

4

SBC

A,H

9C

4

SBC

A,L

9D

4

SBC

A,nn

DE nn

7

SBC

HL,BC

ED 42

15

SBC

HL,DE

ED 52

15

SBC

HL,HL

ED 62

15

SBC

HL,SP

ED 72

15

SCF

37

4

SET

0,(HL)

CB C6

15

SET

0,(IX+dd)

DD CB dd C6

23

SET

0,(IY+dd)

FD CB dd C6

23

SET

0,A

CB C7

8

SET

0,B

CB C0

8

SET

0,C

CB C1

8

SET

0,D

CB C2

8

SET

0,E

CB C3

8

SET

0,H

CB C4

8

SET

0,L

CB C5

8

SET

1,(HL)

CB CE

15

SET

1,(IX+dd)

DD CB dd CE

23

SET

1,(IY+dd)

FD CB dd CE

23

SET

1,A

CB CF

8

SET

1,B

CB C8

8

SET

1,C

CB C9

8

SET

1,D

CB CA

8

SET

1,E

CB CB

8

SET

1,H

CB CC

8

SET

1,L

CB CD

8

SET

2,(HL)

CB D6

15

SET

2,(IX+dd)

DD CB dd D6

23

SET

2,(IY+dd)

FD CB dd D6

23

SET

2,A

CB D7

8

SET

2,B

CB D0

8

SET

2,C

CB D1

8

SET

2,D

CB D2

8

SET

2,E

CB D3

8

SET

2,H

CB D4

8

SET

2,L

CB D5

8

SET

3,(HL)

CB DE

15

SET

3,(IX+dd)

DD CB dd DE

23

SET

3,(IY+dd)

FD CB dd DE

23

SET

3,A

CB DF

8

SET

3,B

CB D8

8

SET

3,C

CB D9

8

SET

3,D

CB DA

8

SET

3,E

CB DB

8

SET

3,H

CB DC

8

SET

3,L

CB D0D

8

SET

4,(HL)

CB E6

15

SET

4,(IX+dd)

DD CB dd E6

23

SET

4,(IY+dd)

FD CB dd E6

23

SET

4,A

CB E7

8

SET

4,B

CB E0

8

SET

4,C

CB E1

8

SET

4,D

CB E2

8

SET

4,E

CB E3

8

SET

4,H

CB E4

8

SET

4,L

CB E5

8

SET

5,(HL)

CB EE

15

SET

5,(IX+dd)

DD CB dd EE

23

SET

5,(IY+dd)

FD CB dd EE

23

SET

5,A

CB EF

8

SET

5,B

CB E8

8

SET

5,C

CB E9

8

SET

5,D

CB EA

8

SET

5,E

CB EB

8

SET

5,H

CB EC

8

SET

5,L

CB ED

8

SET

6,(HL)

CB F6

15

SET

6,(IX+dd)

DD CB dd F6

23

SET

6,(IY+dd)

FD CB dd F6

23

SET

6,A

CB F7

8

SET

6,B

CB F0

8

SET

6,C

CB F1

8

SET

6,D

CB F2

8

SET

6,E

CB F3

8

SET

6,H

CB F4

8

SET

6,L

CB F5

8

SET

7,(HL)

CB FE

15

SET

7,(IX+dd)

DD CB dd FE

23

SET

7,(IY+dd)

FD CB dd FE

23

SET

7,A

CB FF

8

SET

7,B

CB F8

8

SET

7,C

CB F9

8

SET

7,D

CB FA

8

SET

7,E

CB FB

8

SET

7,H

CB FC

8

SET

7,L

CB FD

8

SLA

(HL)

CB 26

15

SLA

(IX+dd)

DD CB 26 dd

23

SLA

(IY+dd)

FD CB 26 dd

23

SLA

A

CB 27

8

SLA

B

CB 20

8

SLA

C

CB 21

8

SLA

D

CB 22

8

SLA

E

CB 23

8

SLA

H

CB 24

8

SLA

L

CB 25

8

SRA

(HL)

CB 2E

15

SRA

(IX+dd)

DD CB 2E dd

23

SRA

(IY+dd)

FD CB 2E dd

23

SRA

A

CB 2F

8

SRA

B

CB 28

8

SRA

C

CB 29

8

SRA

D

CB 2A

8

SRA

E

CB 2B

8

SRA

H

CB 2C

8

SRA

L

CB 2D

8

SRL

(HL)

CB 3E

15

SRL

(IX+dd)

DD CB 3E dd

23

SRL

(IY+dd)

FD CB 3E dd

23

SRL

A

CB 3F

8

SRL

B

CB 38

8

SRL

C

CB 39

8

SRL

D

CB 3A

8

SRL

E

CB 3B

8

SRL

H

CB 3C

8

SRL

L

CB 3D

8

SUB

(HL)

96

7

SUB

(IX+dd)

DD 96 dd

19

SUB

(IY+dd)

FD 96 dd

19

SUB

A

97

4

SUB

B

90

4

SUB

C

91

4

SUB

D

92

4

SUB

E

93

4

SUB

H

94

4

SUB

L

95

4

SUB

nn

D6 nn

7

XOR

(HL)

AE

7

XOR

(IX+dd)

DD AE dd

19

XOR

(IY+dd)

FD AE dd

19

XOR

A

AF

4

XOR

B

A8

4

XOR

C

A9

4

XOR

D

AA

4

XOR

E

AB

4

XOR

H

AC

4

XOR

L

AD

4

XOR

nn

EE nn

7

Last Update: 2005-Okt-08


ASCII-, ANSI- und EBCDIC-Code

dez     hex     ASCII   ANSI    EBCDIC
--------------------------------------
0       00      NUL     NUL     NUL
1       01      SOH     SOH     SOH
2       02      STX     STX     STX
3       03      ETX     ETX     ETX
4       04      EOT     EOT     -
5       05      ENQ     ENQ     HT
6       06      ACK     ACK     -
7       07      BEL     BEL     DEL
8       08      BS      BS      -
9       09      HT      HT      -
10      0A      LF      LF      -
11      0B      VT      VT      VT
12      0C      FF      FF      FF
13      0D      CR      CR      CR
14      0E      SO      SO      SO
15      0F      SI      SI      SI
16      10      DLE     DLE     DLE
17      11      DC1     DC1     DC1
18      12      DC2     DC2     DC2
19      13      DC3     DC3     TM
20      14      DC4     DC4     -
21      15      NAK     NAK     -
22      16      SYN     SYN     BS
23      17      ETB     ETB     -
24      18      CAN     CAN     CAN
25      19      EM      EM      EM
26      1A      SUB     SUB     -
27      1B      ESC     ESC     -
28      1C      FS      FS      FS
29      1D      GS      GS      GS
30      1E      RS      RS      RS
31      1F      US      US      US
32      20      spc     spc     -
33      21      !       !       -
34      22      "       "       -
35      23      #       #       -
36      24      $       $       -
37      25      %       %       LF
38      26      &       &       ETB
39      27      '       '       ESC
40      28      (       (       -
41      29      )       )       -
42      2A      *       *       -
43      2B      +       +       -
44      2C      ,       ,       -
45      2D      -       -       ENQ
46      2E      .       .       ACK
47      2F      /       /       BEL
48      30      0       0       -
49      31      1       1       -
50      32      2       2       SYN
51      33      3       3       -
52      34      4       4       -
53      35      5       5       -
54      36      6       6       -
55      37      7       7       EOT
56      38      8       8       -
57      39      9       9       -
58      3A      :       :       -
59      3B      ;       ;       -
60      3C      <       <       DC4
61      3D      =       =       NAK
62      3E      >       >       -
63      3F      ?       ?       SUB
64      40      @       @       spc
65      41      A       A       -
66      42      B       B       -
67      43      C       C       -
68      44      D       D       -
69      45      E       E       -
70      46      F       F       -
71      47      G       G       -
72      48      H       H       -
73      49      I       I       -
74      4A      J       J       [
75      4B      K       K       .
76      4C      L       L       <
77      4D      M       M       (
78      4E      N       N       +
79      4F      O       O       !
80      50      P       P       &
81      51      Q       Q       -
82      52      R       R       -
83      53      S       S       -
84      54      T       T       -
85      55      U       U       -
86      56      V       V       -
87      57      W       W       -
88      58      X       X       -
89      59      Y       Y       -
90      5A      Z       Z       ]
91      5B      [       [       $
92      5C      \       \       *
93      5D      ]       ]       )
94      5E      ^       ^       ;
95      5F      _       _       ^
96      60      `       `       -
97      61      a       a       /
98      62      b       b       -
99      63      c       c       -
100     64      d       d       -
101     65      e       e       -
102     66      f       f       -
103     67      g       g       -
104     68      h       h       -
105     69      i       i       -
106     6A      j       j       |
107     6B      k       k       ,
108     6C      l       l       %
109     6D      m       m       _
110     6E      n       n       >
111     6F      o       o       ?
112     70      p       p       -
113     71      q       q       -
114     72      r       r       -
115     73      s       s       -
116     74      t       t       -
117     75      u       u       -
118     76      v       v       -
119     77      w       w       -
120     78      x       x       -
121     79      y       y       `
122     7A      z       z       :
123     7B      {       {       #
124     7C      |       |       @
125     7D      }       }       '
126     7E      ~       ~       =
127     7F      DEL     DEL     "
128     80      Ã       P       -
129     81      ü       ü       a
130     82      ‚       é        b
131     83      ƒ       â        c
132     84      „       ä        d
133     85      …       à        e
134     86      †       å        f
135     87      ‡       ç        g
136     88      ˆ       ê        h
137     89      ‰       ë        i
138     8A      Š       è        -
139     8B      ‹       ï        -
140     8C      Œ       î        -
141     8D             ì        -
142     8E      Ž       Ä        -
143     8F             Å        -
144     90             É        -
145     91      ‘       æ        j
146     92      ’       Æ        k
147     93      “       ô        l
148     94      ”       ö        m
149     95      •       ò        n
150     96      –       û        o
151     97      —       ù        p
152     98      ˜       ÿ        q
153     99      ™       Ö        r
154     9A      š       Ü        -
155     9B      ›       ø        -
156     9C      œ       £        -
157     9D             Ø        -
158     9E      ž       ×        -
159     9F      Ÿ       ƒ        -
160     A0              á        -
161     A1      ¡       í        ~
162     A2      ¢       ó        s
163     A3      £       ú        t
164     A4      ¤       ñ        u
165     A5      ¥       Ñ        v
166     A6      ¦       ª        w
167     A7      §       º        x
168     A8      ¨       ¿        y
169     A9      ©       ®        z
170     AA      ª       ¬        -
171     AB      «       ½        -
172     AC      ¬       ¼        -
173     AD             ¡        -
174     AE      ®       «        -
175     AF      ¯       »        -
176     B0      °       ¦        -
177     B1      ±       ¦        -
178     B2      ²       ¦        -
179     B3      ³       ¦        -
180     B4      ´       ¦        -
181     B5      µ       Á        -
182     B6      ¶       Â        -
183     B7      ·       À        -
184     B8      ¸       ©        -
185     B9      ¹       ¦        -
186     BA      º       ¦        -
187     BB      »       +        -
188     BC      ¼       +        -
189     BD      ½       ¢        -
190     BE      ¾       ¥        -
191     BF      ¿       +        -
192     C0      À       +        {
193     C1      Á       -        A
194     C2      Â       -        B
195     C3      Ã       +        C
196     C4      Ä       -        D
197     C5      Å       +        E
198     C6      Æ       ã        F
199     C7      Ç       Ã        G
200     C8      È       +        H
201     C9      É       +        I
202     CA      Ê       -        -
203     CB      Ë       -        -
204     CC      Ì       ¦        -
205     CD      Í       -        -
206     CE      Î       +        -
207     CF      Ï       ¤        -
208     D0      Ð       ð        }
209     D1      Ñ       Ð        J
210     D2      Ò       Ê        K
211     D3      Ó       Ë        L
212     D4      Ô       È        M
213     D5      Õ       i        N
214     D6      Ö       Í        O
215     D7      ×       Î        P
216     D8      Ø       Ï        Q
217     D9      Ù       +        R
218     DA      Ú       +        -
219     DB      Û       ¦        -
220     DC      Ü       _        -
221     DD      Ý       ¦        -
222     DE      Þ       Ì        -
223     DF      ß       ¯        -
224     E0      à       Ó        \
225     E1      á       ß        -
226     E2      â       Ô        S
227     E3      ã       Ò        T
228     E4      ä       õ        U
229     E5      å       Õ        V
230     E6      æ       µ        W
231     E7      ç       þ        X
232     E8      è       Þ        Y
233     E9      é       Ú        Z
234     EA      ê       Û        -
235     EB      ë       Ù        -
236     EC      ì       ý        -
237     ED      í       Ý        -
238     EE      î       ¯        -
239     EF      ï       ´        -
240     F0      ð               0
241     F1      ñ       ±        1
242     F2      ò       =        2
243     F3      ó       ¾        3
244     F4      ô       ¶        4
245     F5      õ       §        5
246     F6      ö       ÷        6
247     F7      ÷       ¸        7
248     F8      ø       °        8
249     F9      ù       ¨        9
250     FA      ú       ·        -
251     FB      û       ¹        -
252     FC      ü       ³        -
253     FD      ý       ²        -
254     FE      þ       ¦        -
255     FF      ÿ                -

Last Update: 2005-Okt-29


Das Verhältnismaß Dezibel

In der Elektronik ist es oft notwendig, nicht nur Spannungen, Ströme und Leistungen zu messen, sondern auch Verhältnisse von Spannungen, Strömen und Leistungen. Beispiele für Verhältnisse zweier Spannungen sind die Spannungsverstärkung eines Operationsverstärkers, das Verhältnis von Nutz- und Störsignal oder die Dämpfung eines Signals entlang einer Leitung.

Solche Verhältnisse sind grundsätzlich dimensionslos und können einen weiten Zahlenbereich überstreichen. Um das Rechnen mit Verhältnissen zu erleichtern, kann man die beteiligten Größen logarithmieren, was die Division zu einer Subtraktion und die Multiplikation zu einer Addition macht. Logarithmierte Verhältnisse werden mit der Bezeichnung 'Bel' (nach dem Erfinder des Telefons Graham Bell) gekennzeichnet. Meist wird jedoch ein Zehntel eines Bel verwendet: Dezibel oder dB.

Da die Beziehung zwischen Spannung und Leistung, bzw. Strom und Leistung an einem Widerstand quadratisch ist, ergibt sich für das Verhältnismaß Dezibel für Strom und Spannung eine andere Definition als für die Leistung:

Spannung: | dB = 20 * lg (U1/U0)
Strom: | dB = 20 * lg (I1/I0)
Leistung: | dB = 10 * lg (P1/P0)

Setzt man für U0 , I0 oder P0 einen bestimmten definierten Wert, so gibt die Größe dB dann das Verhältnis von U1, I1 oder P1 zum festgelegten Wert an. Man nennt den definierten Wert Nullpegel; die Angabe in dB wird allgemein als Pegel bezeichet. Bei der Angabe eines Pegels muss immer auch die Bezugsgröße angegeben werden. Dies geschieht meist in Form eines an die Bezeichnung dB angehängten Buchstabens (z.B. dBmV oder dBm).

In der Audiotechnik wird der Nullpegel mit jener Spannung festgelegt, die an einem Widerstand von 600 W 1 mW Verlustleistung entstehen lässt. Dieser Pegel wird mit 'dBm' bezeichnet, sein Nullpegel beträgt 0.775V.

Die folgende Tabelle gibt für die wichtigsten dB-Werte die entsprechenden Spannungs- und Leistungsverhältnisse und den in der Audiotechnik oft verwendeten Pegel (bezogen auf 0.775 V) an.

dB | U1/U0 | P1/P0 | Pegel
-60 | 0.001 | 0.000001 | 0.775 mV
-50 | 0.00316 | 0.00001 | 2.45 mV
-40 | 0.01 | 0.0001 | 7.75 mV
-30 | 0.0316 | 0.001 | 24.49 mV
-20 | 0.1 | 0.01 | 77.5 mV
-10 | 0.316 | 0.1 | 244.9 mV
-6 | 0.5 | 0.25 | 388.1 mV
-3 | 0.707 | 0.5 | 548 mV
0 | 1.0 | 1.0 | 0.775 V
+3 | 1.41 | 2 | 1.094 V
+6 | 2 | 4 | 1.545 V
+10 | 3.16 | 10 | 2.449 V
+20 | 10 | 100 | 7.746 V
+30 | 31.6 | 1000 | 24.49 V
+40 | 100 | 10000 | 77.46 V
+50 | 316.2 | 100000 | 244.9 V
+60 | 1000 | 1000000 | 774.6 V

Last Update: 2005-Okt-08


Akronyme

AC | alternating current
ACIA | asynchronous communications interface adapter
ADC | analog to digital converter
AFC | automatic frequency control
ALU | arithmetic logic unit
AM | amplitude modulation
ANSI | American National Standards Institute
APU | arithmetic processing unit
ASCII | American Standard Code for Information Interchange
ASIC | application specific integrated circuit
ASK | amplitude shift keying
ASTM | American Society for Testing and Materials
BASIC | Beginner's All-Purpose Symbolic Instruction Code
BCD | binary coded decimal
BFO | beat frequency oscillator
BIFET | bipolar field effect transistor
BPS | bits per second
CAD | computer aided design
CCD | charge-coupled device
CCITT | Consultive Committee on Telephony and Telegraphy
CD | compact disk
CDA | current differencing amplifiers
CE | chip enable
CISC | complex instruction set computer
CMOS | complementary metal oxide semiconductor
CMRR | common mode rejection ratio
CPI | characters per inch
CPU | central processing unit
CRC | cyclic redundancy check
CRT | cathode ray tube
CRTC | CRT controller
CS | chip select
CTS | clear to send
DAC | digital to analog converter
DBMS | data base management system
DC | direct current
DCE | data circuit terminating equipment
DIL | dual in-line
DIP | dual in-line package
DMA | direct memory access
DMAC | DMA controller
DOS | disk operating system
DPI | dots per inch
DRAM | dynamic random access memory
DSP | digital signal processor
DSR | data set ready
DTE | data terminal equipment
DTL | diode transistor logic
DTMF | dual tone multi-frequency
DTR | data terminal ready
EAROM | electrically alterable ROM
EBCDIC | extended binary coded decimal interchange code
ECL | emitter coupled logic
EDC | error correction and detection
EEPLD | electrically erasable programmable logic device
EEPROM | electrically erasable programmable read only memory
EIA | Electronic Industries Association
EMI | electromagnetic interference
EOC | end of conversion
EOF | end of file
EPLD | (UV) erasable programmable logic device
EPROM | erasable programmable read only memory
FAMOS | floating gate avalanche MOS
FCC | Federal Communications Commission
FDC | floppy disk controller
FET | field effect transistor
FF | flip flop
FFT | fast fourier transform
FIFO | first in, first out
FIR | finite impulse response
FM | frequency modulation
FPGA | field programmable gate array
FPLA | field programmable logic array
FPU | floating point processing unit
FSK | frequency shift keying
GAL | generic array logic
GPIA | general purpose interface adapter
GPIB | general purpose interface bus
GTO | gate turn-off switch
HDC | hard disk controller
HDLC | high level data link control
HDTV | high definition television
HEMT | high electron mobility transistor
HEX | hexadecimal
HF | high frequency
HPIB | Hewlett-Packard interface bus
IC | integrated circuit
ICE | in-circuit emulation
IEC | International Electro technical Commission
IEEE | Institute of Electrical and Electronics Engineers
IGFET | insulated gate field effect transistor
IIR | infinite impulse response
INT | interrupt
I/O | input/output
IR | infra red light
IRQ | interrupt request
ISDN | integrated service digital networks
ISFET | ion selective field effect transistor
ISO | International Standards Organisation
I 2L | integrated injection logic
JAN | joint army navy
LCA | logic cell array
LCD | liquid crystal display
LED | light emitting diode
LIFO | last in, first out
LPC | linear predictive coding
LSB | least significant bit / lower sideband
LSI | large scale integration
MFM | modified frequency modulation
MOS | metal oxide semiconductor
MPU | microprocessor unit
MSB | most significant bit
MSI | medium scale integration
MTBF | mean time between failure
MUX | multiplexer
NBS | National Bureau of Standards
NMOS | N-channel MOS
NRZ | non-return to zero
NRZI | non-return to zero inverted
NTC | negative temperature coefficient
OCR | optical character reader
OEM | original equipment manufacturer
OOP | object oriented programming
OPAMP | operational amplifier
OS | operating system
OSI | open systems interconnection
OTA | operational transconductance amplifier
PAL | programmable array logic / phase alternation line
PC | personal computer
PCB | printed circuit board
PCM | pulse code modulation
PIC | programmable interrupt controller
PLA | programmable logic array
PLCC | plastic leadless chip carrier
PLD | programmable logic device
PLL | phase locked loop
PM | phase modulation
PMOS | p-channel MOS
PROM | programmable read only memory
PSK | phase shift keying
PTP | paper tape punch
PTP | paper tape reader
QAM | quadrature amplitude modulation
RAM | random access memory
RDY | ready
RF | radio frequency
RISC | reduced instruction set computer
RLL | run length limited
RMS | root mean square
ROM | read only memory
RTC | real time clock
RTD | resistance thermal detectors
RTS | ready to send
Rx | receiver
SAR | successive approximation register
SCR | silicon controlled rectifier
SDLC | synchronous data link control
SIL | single in line
S&H | sample and hold
S/N | signal to noise
SMD | surface mounted device
SMT | surface mount technology
SOA | safe operating area
SOS | silicon on sapphire
SRAM | static random access memory
SSI | small scale integration
TPI | tracks per inch
TTL | transistor transistor logic
TTY | teletype writer
Tx | transmitter
UART | universal asynchronous receiver transmitter
UHF | ultra high frequency
USART | universal synchronous asynchronous receiver transmitter
UV | ultra violet
VCA | voltage controlled amplifier
VCO | voltage controlled oscillator
VHF | very high frequency
VLSI | very large scale integration
VMOS | v-groove MOS
WORM | write once, read many
µC | microcomputer
µP | microprocessor

Last Update: 2005-Okt-29


Abkürzungen für Spannungsbezeichnungen

Spannungsbezeichnungen findet man in jedem Schaltplan. Oft sind aber die wirklichen Leitungsverbindungen zur Spannungsversorgung nicht eingezeichnet sondern durch ein Kürzel symbolisiert. In der folgenden Tabelle sind die häufigsten Abkürzungen zusammen gestellt:

VB | Spannung an der Basis eines Transistors
VBAT | Batteriespannung
VBB | Verbindung der Bulks (Wannen) von MOSFETs, meist -5V
VBE | Spannung zwischen Basis und Emitter bei Bipolartransistoren
VC | Spannung am Kollektor eines Bipolartransistors
VCC | Pluralbildung: Spannung an den Kollektoren, bei bipolaren ICs entspricht das der positiven Versorgungsspannung
VCE | Spannung zwischen Kollektor und Emitter bei Bipolartransistoren
VCE,sat | Spannung zwischen Kollektor und Emitter im Sättigungszustand des Transistors
VD | Spannung am Drain eines MOSFETs
VDD | positive Versorgungsspannung von MOS Schaltkreisen (an dieser hängen viele Drains der NMOSFETs)
VDS | Spannung zwischen Drain und Source bei MOSFETs
VE | Spannung am Emitter
VEE | Spannung an den Emittern, negative Versorgungsspannung z.B. bei ECL ICs.
VG | Spannung am Gate
VGS | Spannung zwischen Gate und Source bei MOSFETs
VIN | Eingangsspannung
VOUT | Ausgangsspannung
VPP | Spannungsdifferenz zwischen positiver und negativer Spitzenspannung (Peak to Peak), aber auch Programmierspannung bei (E)EPROMs
VREF | Referenzspannung
VS | Spannung am Source-Pin eines MOSFETs
VSS | negative Versorgungsspannung von MOS Schaltkreisen, oft identisch mit GND

Last Update: 2005-Okt-29


Literatur

A.J. Diefenderfer
'Principles of Electronic Instrumentation'
Saunders 1979, Philadelphia, USA

T. Ebel
'Regelungstechnik'
Teubner 1982, Stuttgart, BRD

O. Föllinger
'Regelungstechnik'
AEG-Telefunken 1980, Berlin, BRD

H. Geschwinde
'Einführung in die PLL-Technik'
Vieweg 1980, Braunschweig, BRD

W.G. Jung
'IC Op-amp Cookbook'
Sams 1974, Indiana, USA

D. Lancaster
'Das Aktiv-Filter Kochbuch'
IWT 1989, München, BRD

J.G. Lehmann
'Dioden und Transistoren'
Vogel 1977, Würzburg, BRD

K. Leucht
'Die elektronischen Grundlagen der Radio- und Fernsehtechnik'
Franzis 1974, München, BRD

S. Lipschutz
'Finite Mathematics'
McGraw-Hill 1966, New York, USA

H. Lohninger
'Angewandte Mikroelektronik', Band 2
IWT 1990, München, BRD

J. Millman
'Microelectronics: Digital and Analog Circuits and Systems'
McGraw-Hill 1979

H. Queisser
'Kristallene Krisen'
Piper 1985, München, BRD

C. Schneider
'PC minimiert Schaltfunktionen'
mc, 1987, Heft 11, Seite 94

D.H. Sheingold
'Transducer Interfacing Handbook'
Analog Devices 1980, Norwood, USA

H.G. Steidle
'Transistoren Taschen Tabelle'
Franzis 1981, München, BRD

U. Tietze, Ch. Schenk
'Halbleiterschaltungstechnik'
Springer 1985, Heidelberg, BRD

Last Update: 2005-Okt-08


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index A...

3S-Inverter | Experiment: Inverter mit Tri-State-Ausgang
3S-Treiber | Treiber
7-Segment-Anzeige | Leuchtdioden
 | 16-Bit-Parallelschnittstelle mit Registern
Abkürzung | Akronyme
 | Abkürzungen für Spannungsbezeichnungen
Abschlusswiderstand | Experiment: Reflexionen an langen Leitungen
absolute Feuchte | Feuchtigkeit
Abtastregler | Digitale Regler
Abtastung | Nykvist-Theorem
Abwärtsregler | Abwärtsregler
 | Experiment: Aufbau eines Abwärtsschaltreglers
AC-Terminierung | Leitungsabschluss
AD-Wandler | AD-Interface - Grundlagen
 | Datencodes bei AD- und DA-Wandlern
 | Analog-Digital-Wandler
 | Dual-Slope-Wandler
 | Sukzessive Approximation
 | Flash-Konverter
ADC | Dual-Slope-Wandler
 | Sukzessive Approximation
 | Flash-Konverter
Adressierung | Adressierung
Akronym | Akronyme
aktive Filter | Aktive Filter
ALU | Arithmetisch-Logische Einheit
Amplitude | AD-Interface - Grundlagen
Analog-Digital-Wandler | Analog-Digital-Wandler
analoge Multiplexer | Analoger Multiplexer
AND | Gatter: AND
 | Logische Grundoperationen
 | Gatterübersicht
Anschlussbelegung | Operationsverstärker
 | TTL 7400...7432
 | TTL 7438...74107
 | TTL 74123...74170
 | TTL 74173...74299
 | TTL 74367...74670
 | CMOS 4001...4024
 | CMOS 4028...4052
 | CMOS 4060...4511
ANSI | ASCII-, ANSI- und EBCDIC-Code
Anstiegsgeschwindigkeit | Konzept der Operationsverstärker
 | Experiment: Auswirkungen der Slew-Rate des Komparators
Anstiegszeit | Fototransistor
Aperturjitter | Sample & Hold
Arithmetisch logische Einheit | Arithmetisch-Logische Einheit
arithmetisch-logische Befehle | Arithmetisch-Logische Befehle
ASCII | ASCII-, ANSI- und EBCDIC-Code
 | Buchstaben und Zeichenketten
Assembler | Befehlssatz
Assoziativgesetz | Logische Grundoperationen
asynchrone Zähler | Zähler
atto | Präfixe
Auflösung | Spezifikationen von AD- und DA-Wandlern
Aufwärtsregler | Aufwärtsregler
Ausgangsimpedanz | Terminologie der Operationsverstärkertechnik
Ausgangswiderstand | Konzept der Operationsverstärker

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index B...

Band-Gap-Referenzelemente | Band-Gap-Referenzelemente
Bandbreite | Konzept der Operationsverstärker
 | Terminologie der Operationsverstärkertechnik
Bandpass | Grundlagen
 | Variables Zustandsfilter
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
Bandsperre | Grundlagen
Bardeen | Geschichte
Basis | Bipolartransistoren
Basisstrom | Experiment: Stromverstärkung im Bipolartransistor
Baudrate | Protokoll
Bauformen | Bauformen von Kondensatoren
Bauteilnumerierung | Farbcodierung
BCD | BCD-codierte Zahlen
 | Datencodes bei AD- und DA-Wandlern
bedingte Verzweigung | Bedingte Verzweigungen
Befehlssatz | Befehlssatz
 | Arithmetisch-Logische Befehle
 | Bitmanipulation
 | CPU-Kontrollbefehle
 | Austauschbefehle
 | Input/Output Befehle
 | Sprungbefehle, Unterprogrammaufrufe
 | Ladebefehle
 | Blockbefehle
 | Rotations- und Schiebebefehle
 | Der Z80-Befehlssatz
Befehlstypen | Befehlstypen
Bel | Das Verhältnismaß Dezibel
Belastbarkeit | Kennwerte
Belichtung | Belichten und Ätzen der Platine
Bell | Das Verhältnismaß Dezibel
Berechnung eines Kühlkörpers | Berechnungsbeispiel eines Kühlkörpers
binary coded decimal | BCD-codierte Zahlen
binäre Codierung | Datencodes bei AD- und DA-Wandlern
bipolarer Transistor | Bipolartransistoren
Boole'sche Algebra | Grundlagen der Digitaltechnik
boost converter | Aufwärtsregler
Brattain | Geschichte
Buchstaben | Buchstaben und Zeichenketten
buck converter | Abwärtsregler
buck-boost converter | Invertierender Schaltregler
Bussysteme | TTL

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index C...

Cadmiumselenid | Fotowiderstand
Cadmiumsulfid | Fotowiderstand
Carry-Flag | Arithmetisch-Logische Einheit
CD-ROM | CD-ROM
CdS | Fotowiderstand
CdSe | Fotowiderstand
Centronics-Schnittstelle | Centronics-Schnittstelle
Chip | Der Prozessor Z80
 | Pinbelegung: EPROMs
 | Pinbelegung: RAMs
 | Pinbelegung: Mikroprozessoren
 | Pinbelegung: Peripherie
CISC | Befehlssatz
Cluster | Harddisk
CMOS | CMOS
 | CMOS 4001...4024
 | CMOS 4028...4052
 | CMOS 4060...4511
CMOS-Gatter | CMOS-Gatter als lineare Schaltungen
CMOS-RAM | Statische RAMs
Code | Parameter und Globale Variable
 | Betriebsprogramm zum Minimalsystem uP1
 | Interrupt: Empfänger DART-B voll
 | RAM-Test
 | Zeichen seriell empfangen
 | Zeichen seriell senden
 | Zähler
 | Lauflicht
 | Inverter
 | Protokoll-Umsetzung
 | Sinusgenerator; Version A
 | Sinusgenerator, Version B
 | Funktionsgenerator
 | Digitalvoltmeter
 | Stoppuhr mit CTC 3
 | Frequenzzähler mit CTC 0
 | Tastaturabfrage
 | Centronics-Schnittstelle
 | Funktionsgenerator/Sinusgenerator
 | Nicht initialisierte Interrupts ignorieren
 | DART A: Setup Protokol
 | INTERRUPT: Zeichen auf DART-A senden
 | 8-Bit-Zeichen in FIFO schreiben
Codierer | Experiment: Aufbau eines Gray-Codierers
Codierung | Datencodes bei AD- und DA-Wandlern
common mode voltage | Differenzverstärker
Complementary MOS | CMOS
Copyright | Hintergrundinfos und Download
 | Copyright
CPU | Zentrale Recheneinheit - CPU
 | Pinbelegung: Mikroprozessoren
Creative Commons | Hintergrundinfos und Download
Creative Commons License | Copyright
CTC | Programmierung des CTC
 | Anschlüsse des CTC
 | Z80-CTC (Z8430, MK3883)
 | Programmierbare Zähler

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index D...

D-Flip-Flop | Zähler
 | Flip-Flop
D-Regler | Grundtypen von Regelverstärkern
DA-Wandler | AD-Interface - Grundlagen
 | Datencodes bei AD- und DA-Wandlern
 | Digital-Analog-Wandler
 | Experiment: Aufbau eines 4-Bit-DA-Wandlers
DAC | Digital-Analog-Wandler
DART | Programmierung des DART
 | Anschlüsse des DART
 | Z80-DART (Z8470)
Datenerfassungssysteme | Datenerfassungssysteme
dBm | Das Verhältnismaß Dezibel
Decoder | Decoder
Dehnungsmessstreifen | Dehnungsmessstreifen
DeMorgan-Regeln | Logische Grundoperationen
Demultiplexer | Decoder
Dezibel | Das Verhältnismaß Dezibel
Dezimalzähler | Zähler
Dielektrikum | Kondensatoren
differentielle Linearität | Spezifikationen von AD- und DA-Wandlern
differenzierender Regler | Grundtypen von Regelverstärkern
Differenzierer | Differenzierer
Differenzverstärker | Differenzverstärker
digital versatile disc | DVD
digital video disc | DVD
digitale Regler | Digitale Regler
Digitalisierung | Nykvist-Theorem
Digitaltechnik | Grundlagen der Digitaltechnik
Digitalvoltmeter | Experiment: Digitalvoltmeter
DIL | Gehäuseformen
Diode | Gleichrichter
 | Dioden
 | Experiment: Temperaturmessung mit Halbleiter-Diode
Dioden, Kennwerttabelle | Gleichrichterdioden
DIP | Gehäuseformen
direkte Adressierung | Adressierung
disjunktive Normalform | Synthese logischer Funktionen
 | Von der Wahrheitstafel zur logischen Funktion
Diskette | Floppy Controller
 | Floppy Disk
Distributivgesetz | Logische Grundoperationen
DMS | Dehnungsmessstreifen
Dokumentation | Programm-Dokumentation
Download | Hintergrundinfos und Download
Drahtwiderstand | Bauformen
Drain | Feldeffekttransistoren
DRAM | Dynamische RAMs
Drehondensator | Drehkondensator
Dreiecksignal | Konzept des Frequenzgenerators
Druckmessung | Ionisationsmanometer
 | Pirani Gauge
Dual-Slope-Wandler | Dual-Slope-Wandler
dualinline | Gehäuseformen
Durchlassspannung | Dioden
 | Experiment: Temperaturmessung mit Halbleiter-Diode
DVD | DVD
DVD-RAM | DVD-RAM
DVM | Experiment: Digitalvoltmeter
Dynamik | AD-Interface - Grundlagen
 | Datenerfassungssysteme
dynamische RAMs | Dynamische RAMs

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index E...

E12 | Normwerte
E24 | Normwerte
E48 | Normwerte
E96 | Normwerte
EBCDIC | ASCII-, ANSI- und EBCDIC-Code
ECL | Emitter Coupled Logic
EEPROM | Electrically Erasable Programmable ROM
Eichtabelle | Linearisierung mittels Eichtabelle
Einer-Komplement | Datencodes bei AD- und DA-Wandlern
Eingangsfilter | Datenerfassungssysteme
Eingangsimpedanz | Terminologie der Operationsverstärkertechnik
Eingangsverstärker | AD-Interface - Grundlagen
 | Datenerfassungssysteme
Eingangswiderstand | Konzept der Operationsverstärker
Einschwingzeit | Spezifikationen von AD- und DA-Wandlern
Elektrolyt-Kondensatoren | Kondensatoren
Elektrolytkondensator | Bauformen von Kondensatoren
Elektrometerverstärker | Differenzverstärker
Elko | Kondensatoren
 | Bauformen von Kondensatoren
Emitter | Bipolartransistoren
Emitter Coupled Logic | Emitter Coupled Logic
Empfindlichkeit | Fototransistor
Entprellung | Inverter
Entwurfsmethode | Entwurfsmethoden
EPROM | Erasable Programmable ROM
 | Pinbelegung: EPROMs
ESDI | Schnittstellen
exa | Präfixe
exklusives ODER | Gatter: XOR
Experiment | Experiment: Aufbau eines Gray-Codierers
 | Experiment: Aufbau eines Quarzoszillators
 | Experiment: Reflexionen an langen Leitungen
 | Experiment: Einsatz eines Registers zur Datenspeicherung
 | Experiment: Aufbau eines RS-Flip-Flops aus NAND-Gattern
 | Experiment: Inverter mit Tri-State-Ausgang
 | Experiment: Invertierender Verstärker
 | Experiment: Variabler Verstärker
 | Experiment: Spannungsfolger
 | Experiment: Summierverstärker
 | Experiment: Vollwellengleichrichter
 | Experiment: Aufbau eines Fixspannungsnetzteil
 | Experiment: Aufbau eines Abwärtsschaltreglers
 | Experiment: Auswirkungen der Slew-Rate des Komparators
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
 | Experiment: Aufbau eines Frequenzsynthesizers
 | Experiment: Aufbau einer Sample&Hold-Schaltung
 | Experiment: Aufbau eines 4-Bit-DA-Wandlers
 | Experiment: Aufbau eines UF-Wandlers
 | Experiment: Temperaturmessung mit Halbleiter-Diode
 | Experiment: Aufbau einer Lichtschranke
 | Experiment: Stromverstärkung im Bipolartransistor
 | Experiment: 8fach-Inverter
 | Platine 7SGDSP
 | Platine ADAC12
 | Platine SERPAR
 | Platine uP1
 | Experiment: Aufbau einer Centronics-Schnittstelle
 | Experiment: Zähler mit einstellbarer Geschwindigkeit
 | Experiment: Programmierbarer Funktionsgenerator
 | Experiment: Emulation von Gattern
 | Experiment: Lauflicht
 | Experiment: Parallel ablaufende Programme: Sinusgenerator und Lauflicht
 | Experiment: RAM-Test
 | Experiment: Empfang von Zeichen auf der seriellen Leitung
 | Experiment: Serielle Ausgabe von Zeichen
 | Experiment: Protokoll einer seriellen Schnittstelle
 | Experiment: Sinusgenerator, Version A
 | Experiment: Sinusgenerator, Version B
 | Experiment: Digitalvoltmeter
 | Z80-CTC
 | Experiment: Frequenzmessgerät
 | Experiment: Stoppuhr
 | Z80-DART
 | Experiment: Ansteuerung einer Tastatur mit 16 Tasten
Experimente | Liste der Experimente
Experimentierplatine | Platine DIGMLT
 | Universal-Experimentierplatine LINMLT
Exponent | Gleitkommazahlen

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index F...

FALSE | Logische Grundoperationen
Fan-In | TTL
Fan-Out | TTL
Farad | Kondensatoren
Farbcodierung | Farbcodierung
Fehlerkorrektur | Fehlerkorrektur
Feldeffekttransistor | ISFET
 | Feldeffekttransistoren
femto | Präfixe
Festplatte | Harddisk
Festplatten | Beispiele für Festplatten
FET | Feldeffekttransistoren
Feuchtigkeit | Feuchtigkeit
FIFO | FIFO
 | 8-Bit-Zeichen in FIFO schreiben
Filter | Aktive Filter
 | Grundlagen
 | Grundbegriffe der Filtertechnik
 | Sallen-Key-Filter
 | Variables Zustandsfilter
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
First In, First Out | FIFO
Fixspannungsnetzteil | Experiment: Aufbau eines Fixspannungsnetzteil
Fixspannungsregler | Fixspannungsregler
Flash-Konverter | Flash-Konverter
Flip-Flop | Experiment: Einsatz eines Registers zur Datenspeicherung
 | Flip-Flop
Floppy | Floppy Disk
 | Floppy Disk - Aufzeichnungsverfahren
Floppy-Controller | Floppy Controller
Flussdiagramm | Flussdiagramme
FM | Floppy Disk - Aufzeichnungsverfahren
FNCGEN | Aufbau des Frequenzgenerators
Folienkondensator | Bauformen von Kondensatoren
Fotodiode | Fotodiode
Fotomultiplier | Fotomultiplier
Fototransistor | Fototransistor
 | Experiment: Aufbau einer Lichtschranke
Fotowiderstand | Fotowiderstand
 | Spezielle Widerstände
Frequenz | Häufig verwendete Größen
Frequenzgenerator | Konzept des Frequenzgenerators
 | Aufbau des Frequenzgenerators
Frequenzspektrum | AD-Interface - Grundlagen
Frequenzsynthesizer | Experiment: Aufbau eines Frequenzsynthesizers

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index G...

ganze Zahlen | Ganze Zahlen und Zweier-Komplement
Gassensor | Metalloxid-Gassensoren
Gate | Feldeffekttransistoren
Gatter | Gatter: AND
 | Gatterübersicht
 | Gatter: NAND
 | Gatter: NOR
 | Gatter: OR
 | Gatter: XOR
 | Grundlagen der Digitaltechnik
gedruckte Schaltung | Gedruckte Schaltungen
Gegenkopplung | Gegenkopplung
 | Konzept der Operationsverstärker
 | Terminologie der Operationsverstärkertechnik
Gehäuse | Gehäuseformen
 | Gehäuse TO-18
 | Gehäuse TO-3
 | Gehäuse TO-66
 | Gehäuse TO-39
 | Gehäuse TO-5
 | Gehäuse TO-72
 | Gehäuse TO-254AA
Genauigkeit | Spezifikationen von AD- und DA-Wandlern
Geschichte der integrierten Bausteine | Geschichte
giga | Präfixe
Glaselektrode | Ionenselektive Elektroden
Gleichrichter | Experiment: Vollwellengleichrichter
 | Gleichrichter
Gleichrichterdiode | Gleichrichterdioden
Gleichtaktspannung | Differenzverstärker
Gleirichtungsfehler | Gleichrichter
Gleitkommazahlen | Gleitkommazahlen
GPIB | IEEE-488-Bus
Gray-Code | Experiment: Aufbau eines Gray-Codierers
 | Gray-Codierung
Grenzfrequenz | Grundbegriffe der Filtertechnik
 | Sample & Hold

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index H...

Halbleiterspeicher | Halbleiterspeicher
Halbleitertemperatursensor | Halbleiter
Halbwellengleichrichter | Experiment: Vollwellengleichrichter
 | Gleichrichter
Haltestrom | Thyristoren
 | TRIAC
Hamming | Fehlerkorrektur
Harddisk | Harddisk
 | Beispiele für Festplatten
 | Schnittstellen
Hauptprogramm | Unterprogramme
HCMOS | CMOS
HD64180 | Pinbelegung: Mikroprozessoren
Heißleiter | Spezielle Widerstände
Hochpass | Grundlagen
 | Sallen-Key-Filter
 | Variables Zustandsfilter
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
HPIB | IEEE-488-Bus
HTMLHelp-Paket | Hintergrundinfos und Download
Hysterese | Komparator

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index I...

I-Regler | Grundtypen von Regelverstärkern
IC | Geschichte
 | IC-Technologie
 | Pinbelegung: EPROMs
 | Pinbelegung: RAMs
 | Pinbelegung: Mikroprozessoren
 | Pinbelegung: Peripherie
Identität | Logische Grundoperationen
IEC-625 | IEEE-488-Bus
IEEE P754 | Gleitkommazahlen
IEEE-488-Bus | IEEE-488-Bus
IGFET | Feldeffekttransistoren
Impedanzwandler | Spannungsfolger
indirekte Adressierung | Adressierung
Innenwiderstand | Terminologie der Operationsverstärkertechnik
 | AD-Interface - Grundlagen
instrumentation amplifier | Differenzverstärker
integrated circuit | Geschichte
 | IC-Technologie
Integrator | Integrator
integrierender ADC | Analog-Digital-Wandler
integrierender Regler | Grundtypen von Regelverstärkern
integrierte Schaltkreise | Geschichte
 | IC-Technologie
Interface | AD-Interface - Grundlagen
Interrupt | Interruptverarbeitung
Inverter | Experiment: Aufbau eines Quarzoszillators
 | Inverter
invertierender Schaltregler | Invertierender Schaltregler
invertierender Verstärker | Experiment: Invertierender Verstärker
 | Invertierender Verstärker
ionenselektive Elektroden | Ionenselektive Elektroden
Ionisationsmanometer | Ionisationsmanometer
IS | Geschichte
 | IC-Technologie
ISFET | ISFET
Isolationswiderstand | Kondensatoren
Isolierscheiben | Kühlkörper
Istwert | Regler - Grundlagen

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index J...

JFET | Feldeffekttransistoren
JK-Flip-Flop | Flip-Flop
Junction FET | Feldeffekttransistoren

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index K...

kapazitive Luftfeuchtemessung | Kapazitive Luftfeuchtemessung
Kapazitätswert | Kondensatoren
Karnaugh-Veitch-Diagramm | Karnaugh-Veitch Diagramme
Kaskadierung von Filtern | Grundbegriffe der Filtertechnik
Katalysator | Lambda-Sonde
Kennlinie | Dioden
Kennwerte | Kennwerte
Keramikkondensator | Bauformen von Kondensatoren
kilo | Präfixe
Koaxialkabel | Lange Signalleitungen
Kollektor | Bipolartransistoren
Kollektorstrom | Experiment: Stromverstärkung im Bipolartransistor
Kommutativgesetz | Logische Grundoperationen
Komparator | Komparator
Komplement | Logische Grundoperationen
Kondensator | Kondensatoren
 | Bauformen von Kondensatoren
Konjunktion | Logische Grundoperationen
konjunktive Normalform | Synthese logischer Funktionen
 | Von der Wahrheitstafel zur logischen Funktion
Konstantstromquelle | Stromquelle
Kontrolleinheit | Kontrolleinheit
Konversionsrate | Spezifikationen von AD- und DA-Wandlern
Konversionszeit | Sample & Hold
Kraftsensor | Piezoelektrische Sensoren
Kristallmikrophon | Piezoelektrische Sensoren
Kunststofffolienkondensator | Bauformen von Kondensatoren
KV-Diagramm | Karnaugh-Veitch Diagramme

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index L...

Lambda-Sonde | Lambda-Sonde
Last In, First Out | LIFO oder Stack
latch | Flip-Flop
Layout | Herstellung des Platinenfilms
LBA | Harddisk
LED | Leuchtdioden
Leitungsabschluss | Leitungsabschluss
Leitungsreflexionen | Experiment: Reflexionen an langen Leitungen
Leuchtdiode | Leuchtdioden
license | Copyright
Lichtschranke | Experiment: Aufbau einer Lichtschranke
LiCl-Zelle | LiCl-Zelle
LIFO | LIFO oder Stack
light emitting diode | Leuchtdioden
linear geregeltes Netzteil | Linear geregelte Netzteile
Linearisierung | Linearisierung
 | Linearisierung mit nichtlinearem Netzwerk
 | Linearisierung mittels Eichtabelle
Linearität | Spezifikationen von AD- und DA-Wandlern
LINMLT | Universal-Experimentierplatine LINMLT
Listing | Parameter und Globale Variable
 | Betriebsprogramm zum Minimalsystem uP1
 | Interrupt: Empfänger DART-B voll
 | RAM-Test
 | Zeichen seriell empfangen
 | Zeichen seriell senden
 | Zähler
 | Lauflicht
 | Inverter
 | Protokoll-Umsetzung
 | Sinusgenerator; Version A
 | Sinusgenerator, Version B
 | Funktionsgenerator
 | Digitalvoltmeter
 | Stoppuhr mit CTC 3
 | Frequenzzähler mit CTC 0
 | Tastaturabfrage
 | Centronics-Schnittstelle
 | Funktionsgenerator/Sinusgenerator
 | Nicht initialisierte Interrupts ignorieren
 | DART A: Setup Protokol
 | INTERRUPT: Zeichen auf DART-A senden
 | 8-Bit-Zeichen in FIFO schreiben
Literatur | Literatur
Lithiumchlorid | LiCl-Zelle
Lizenzbedingungen | Hintergrundinfos und Download
logische Funktion | Synthese logischer Funktionen
logische Grundoperationen | Logische Grundoperationen
logische Variable | Grundlagen der Digitaltechnik
logisches NICHT | Logische Grundoperationen
logisches NICHT-ODER | Gatter: NOR
logisches NICHT-UND | Gatter: NAND
logisches ODER | Logische Grundoperationen
 | Gatter: OR
logisches UND | Gatter: AND
 | Logische Grundoperationen
logisches XOR | Gatter: XOR
Low-Power-Schottky-TTL | TTL
LS-TTL | TTL
Luftfeuchte | Feuchtigkeit

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index M...

Magnetband | Magnetband
magneto-optische Platten | Magneto-Optische Platten
Magnetspeicher | Magnetische Speicher
Mantisse | Gleitkommazahlen
Maßeinheiten | Präfixe
mega | Präfixe
Messsignal | AD-Interface - Grundlagen
Metal-Gate-CMOS | CMOS
Metalloxid-Gassensor | Metalloxid-Gassensoren
Metallpapierkondensator | Bauformen von Kondensatoren
MFM | Floppy Disk - Aufzeichnungsverfahren
Microstrip-Leitungen | Lange Signalleitungen
mikro | Präfixe
Mikroprozessor | Mikroprozessoren
 | Interner Aufbau eines Mikroprozessors
 | Aufbau eines Minimalsystems
 | CPU und Speicher
 | Taktoszillator
 | Resetsteuerung
 | Input Output
 | Bussteuerung
milli | Präfixe
Mitkopplung | Komparator
 | Konzept der Operationsverstärker
 | Mitkopplung
 | Terminologie der Operationsverstärkertechnik
 | Ionisationsmanometer
MK3701 | Pinbelegung: Peripherie
Monotonie | Spezifikationen von AD- und DA-Wandlern
MOSFET | CMOS
 | Feldeffekttransistoren
Mostek | Der Prozessor Z80
MP-Kondensator | Bauformen von Kondensatoren
multifunktionelle Bausteine | Multifunktionelle Bausteine
Multiplexer | Digitaler Multiplexer
 | Analoger Multiplexer
 | Datenerfassungssysteme
Multiplizierende DA-Wandler | Digital-Analog-Wandler
MUX | Digitaler Multiplexer

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index N...

Nachlaufsynchronisation | Phase Locked Loop
NAND | Gatterübersicht
 | Gatter: NAND
NAND-Gatter | Experiment: Aufbau eines RS-Flip-Flops aus NAND-Gattern
nano | Präfixe
Nassi-Shneiderman-Diagramme | Struktogramme
National | Der Prozessor Z80
NEC | Der Prozessor Z80
Nennlast | Kennwerte
Netzteil | Experiment: Aufbau eines Fixspannungsnetzteil
 | Schaltnetzteile
Netzteil, regelbar | Linear geregelte Netzteile
NICHT | Logische Grundoperationen
nicht-Invertierender Verstärker | Experiment: Variabler Verstärker
 | Nicht invertierender Verstärker
NICHT-ODER | Gatter: NOR
NICHT-UND | Gatter: NAND
nichtlineares Netzwerk | Linearisierung mit nichtlinearem Netzwerk
Nichtlinearität | Linearisierung
NOR | Gatterübersicht
 | Gatter: NOR
Normalform | Synthese logischer Funktionen
 | Von der Wahrheitstafel zur logischen Funktion
Normalisierung | Gleitkommazahlen
Normwerte | Normwerte
NOT | Logische Grundoperationen
 | Gatterübersicht
NOVRAM | Non Volatile RAM
NTC-Widerstand | Spezielle Widerstände
Nullpegel | Das Verhältnismaß Dezibel
Nykvist-Theorem | Nykvist-Theorem

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index O...

ODER | Logische Grundoperationen
 | Gatter: OR
Offene Verstärkung | Terminologie der Operationsverstärkertechnik
Offset-Fehler | Spezifikationen von AD- und DA-Wandlern
Offsetspannung | Konzept der Operationsverstärker
 | Terminologie der Operationsverstärkertechnik
Ohm'sches Gesetz | Widerstände
open loop gain | Terminologie der Operationsverstärkertechnik
Open-Collector Ausgang | TTL
Operationsverstärker | Operationsverstärker - Typenübersicht
 | Gegenkopplung
 | Konzept der Operationsverstärker
 | Operationsverstärker
OR | Logische Grundoperationen
 | Gatterübersicht
 | Gatter: OR
Ordnung eines Filters | Grundbegriffe der Filtertechnik
Oszillator | Schwingquarze
 | Konzept des Frequenzgenerators
 | Phase Locked Loop
Overflow | Arithmetisch-Logische Einheit

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index P...

P-Regler | Grundtypen von Regelverstärkern
 | P-Regler
Papierkondensator | Bauformen von Kondensatoren
parallele Schnittstelle | Parallele Schnittstelle
Parallelschnittstelle | Z80-PIO (Z8420)
 | 16-Bit-Parallelschnittstelle mit Registern
Paritätsbit | Protokoll
Pegel | Das Verhältnismaß Dezibel
Peripherie | Pinbelegung: Peripherie
peta | Präfixe
pH-Elektrode | Ionenselektive Elektroden
Phase Locked Loop | Phase Locked Loop
Phasendetektor | Phase Locked Loop
PI-Regler | PI-Regler
pico | Präfixe
PID-Regler | Grundtypen von Regelverstärkern
 | PID-Regler
piezoelektrischer Kraftsensor | Piezoelektrische Sensoren
Pin | Pinbelegung: EPROMs
 | Pinbelegung: RAMs
 | Pinbelegung: Mikroprozessoren
 | Pinbelegung: Peripherie
Pin Grid Array | Gehäuseformen
Pinbelegung | Operationsverstärker
 | TTL 7400...7432
 | TTL 7438...74107
 | TTL 74123...74170
 | TTL 74173...74299
 | TTL 74367...74670
 | CMOS 4001...4024
 | CMOS 4028...4052
 | CMOS 4060...4511
 | Pinbelegung Z80
 | Pinbelegung: EPROMs
 | Pinbelegung: RAMs
 | Pinbelegung: Mikroprozessoren
 | Pinbelegung: Peripherie
PIO | Anschlüsse des Z80-PIO
 | Z80-PIO (Z8420)
PIO-Kanal | Programmierung des PIO
Pirani Gauge | Pirani Gauge
Platine | Platine DIGMLT
 | Universal-Experimentierplatine LINMLT
 | Gedruckte Schaltungen
 | Platine 7SGDSP
 | Platine ADAC12
 | Platine SERPAR
 | Platine uP1
Platinenfertigung | Belichten und Ätzen der Platine
Platinenfilm | Herstellung des Platinenfilms
Platinenlayout | Platinenlayouts
PLCC | Gehäuseformen
PLL | Phase Locked Loop
 | Experiment: Aufbau eines Frequenzsynthesizers
PMOS-Transistor | IC-Technologie
pn-Übergang | Halbleiter
Potentiometer | Bauformen
programmieren | Parameter und Globale Variable
 | Betriebsprogramm zum Minimalsystem uP1
 | Interrupt: Empfänger DART-B voll
 | RAM-Test
 | Zeichen seriell empfangen
 | Zeichen seriell senden
 | Zähler
 | Lauflicht
 | Inverter
 | Protokoll-Umsetzung
 | Sinusgenerator; Version A
 | Sinusgenerator, Version B
 | Funktionsgenerator
 | Digitalvoltmeter
 | Stoppuhr mit CTC 3
 | Frequenzzähler mit CTC 0
 | Tastaturabfrage
 | Centronics-Schnittstelle
 | Funktionsgenerator/Sinusgenerator
 | Nicht initialisierte Interrupts ignorieren
 | DART A: Setup Protokol
 | INTERRUPT: Zeichen auf DART-A senden
 | 8-Bit-Zeichen in FIFO schreiben
Programmiersprache | Sprachen
Programmierung | Programmierung eines Mikrocomputers
 | Software-Entwicklung
 | Entwurfsmethoden
 | Programm-Dokumentation
 | Struktogramme
 | Pseudocode
 | Flussdiagramme
 | Ablauf einer Programmentwicklung
 | LIFO oder Stack
 | FIFO
 | Bedingte Verzweigungen
 | Schleifen
 | Unterprogramme
 | Parameterübergabe
 | Seiteneffekte
 | Reentrante Unterprogramme
PROM | Programmable ROMs
Proportionalregler | Grundtypen von Regelverstärkern
Protokoll | Protokoll
Prozessor Z80 | Befehlssatz
 | Bitmanipulation
 | CPU-Kontrollbefehle
 | Austauschbefehle
 | Input/Output Befehle
 | Sprungbefehle, Unterprogrammaufrufe
 | Ladebefehle
 | Blockbefehle
 | Rotations- und Schiebebefehle
 | Interruptverarbeitung
 | Der Prozessor Z80
 | Registerstruktur
Präfixe | Präfixe
Präzisionsdiode | Gleichrichter
Pseudocode | Pseudocode
Pt-100 | Widerstandsthermometer
Puffer | Treiber
Pull-Up Widerstand | TTL
Pull-up/Pull-down Netzwerke | Leitungsabschluss

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index Q...

Quantisierungsfehler | Spezifikationen von AD- und DA-Wandlern
Quarz | Schwingquarze
Quarzoszillator | Experiment: Aufbau eines Quarzoszillators

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index R...

RAM | RAM
 | Pinbelegung: RAMs
RC-Terminierung | Leitungsabschluss
Rechtecksignal | Konzept des Frequenzgenerators
Referenzelemente | Band-Gap-Referenzelemente
Reflexion an langen Leitungen | Experiment: Reflexionen an langen Leitungen
Reflexion von Signalen | Leitungsabschluss
Regelstrecke | Regler - Grundlagen
Regelverstärker | P-Regler
 | Analoge Regelverstärker
Register | Experiment: Einsatz eines Registers zur Datenspeicherung
 | Flip-Flop
 | Register
 | Registerstruktur
Regler | Regler - Grundlagen
 | PID-Regler
relative Feuchte | Feuchtigkeit
Release History | Release History
Ringpuffer | FIFO
ripple carry counter | Zähler
RISC | Befehlssatz
RLL-Verfahren | Aufzeichnungsverfahren
ROM | ROM
RS-232 | Protokoll
RS-232C | RS-232-Standard und Verkabelungsbeispiele
RS-Flip-Flop | Experiment: Aufbau eines RS-Flip-Flops aus NAND-Gattern
 | Flip-Flop
run length limited | Aufzeichnungsverfahren

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index S...

S&H | Sample & Hold
 | Experiment: Aufbau einer Sample&Hold-Schaltung
S-TTL | TTL
Sallen-Key-Filter | Sallen-Key-Filter
Salzsäure | Belichten und Ätzen der Platine
Sample & Hold | Sample & Hold
 | Experiment: Aufbau einer Sample&Hold-Schaltung
Sauerstoffsensor | Lambda-Sonde
Schaltdiode | Schaltdioden
Schaltnetzteil | Schaltnetzteile
Schaltregler | Experiment: Aufbau eines Abwärtsschaltreglers
Schichtwiderstand | Bauformen
Schmitt-Trigger | Inverter
 | Komparator
Schnittstelle | Schnittstellen
Schottky-TTL | TTL
Schwingquarz | Schwingquarze
SCSI | Schnittstellen
Seebeck-Effekt | Thermoelement
Sektor | Harddisk
serielle Schnittstelle | Programmierung des DART
 | RS-232-Standard und Verkabelungsbeispiele
 | Serielle Schnittstelle
Seriendämpfung | Leitungsabschluss
Shannon'sches Abtasttheorem | Nykvist-Theorem
Sharp | Der Prozessor Z80
Shockley | Geschichte
Sign-Flag | Arithmetisch-Logische Einheit
Signalgenerator | Platine DIGMLT
Signalquelle | AD-Interface - Grundlagen
Signalreflexion | Leitungsabschluss
SIL | Gehäuseformen
Silicon-Gate-CMOS | CMOS
SIP | Gehäuseformen
Skalierungsfehler | Spezifikationen von AD- und DA-Wandlern
slew rate | Konzept der Operationsverstärker
 | Experiment: Auswirkungen der Slew-Rate des Komparators
SMD | Gehäuseformen
 | Schnittstellen
SMT | Gehäuseformen
Sollwert | Regler - Grundlagen
Source | Feldeffekttransistoren
Spannung | Häufig verwendete Größen
Spannungs-Frequenz-Wandler | Spannungs-Frequenz-Wandler
 | Experiment: Aufbau eines UF-Wandlers
Spannungsbezeichnung | Abkürzungen für Spannungsbezeichnungen
Spannungsfestigkeit | Kennwerte
 | Kondensatoren
Spannungsfolger | Experiment: Spannungsfolger
 | Spannungsfolger
spannungsgesteuerter Oszillator | Phase Locked Loop
Spannungsquelle | Spannungsquelle
Spannungsregler | Linear geregelte Netzteile
 | Fixspannungsregler
Spannungsstabilisierung | Zenerdioden
Speicher | Speicher
spektrale Empfindlichkeit | Fototransistor
Spektrum | AD-Interface - Grundlagen
Sperrstrom | Dioden
Spur | Harddisk
Spurdichte | Floppy Disk
SRAM | Statische RAMs
ST412 | Schnittstellen
ST506 | Schnittstellen
Stack | LIFO oder Stack
Startbit | Protokoll
state variable filter | Variables Zustandsfilter
Stellglied | Regler - Grundlagen
steuerbaren Stromquelle | Stromquelle
Steuerung | Regler - Grundlagen
Stoppbit | Protokoll
Streifenleiter | Lange Signalleitungen
string | Buchstaben und Zeichenketten
Strom | Häufig verwendete Größen
Stromquelle | Stromquelle
Stromverstärkung | Bipolartransistoren
 | Experiment: Stromverstärkung im Bipolartransistor
Struktogramme | Struktogramme
Störungen | AD-Interface - Grundlagen
sukzessive Approximation | Sukzessive Approximation
Summierverstärker | Experiment: Summierverstärker
 | Summierverstärker
Surface Mounted Device | Gehäuseformen

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index T...

Tantal-Elko | Bauformen von Kondensatoren
Tastaturentprellung | Inverter
Taupunkt | Feuchtigkeit
Technologie | IC-Technologie
Temperaturkoeffizient | Kennwerte
 | Dioden
 | Zenerdioden
 | Halbleiter
Temperaturmessung | Experiment: Temperaturmessung mit Halbleiter-Diode
Temperatursensor | Dioden
 | Thermoelement
 | Thermistor
 | Halbleiter
tera | Präfixe
Terminierung einer Leitung | Leitungsabschluss
Thermistor | Thermistor
Thermoelement | Thermoelement
Thermometer | Experiment: Temperaturmessung mit Halbleiter-Diode
Thermospannung | Thermoelement
Thyristor | Thyristoren
Tiefpass | Grundlagen
 | Sallen-Key-Filter
 | Variables Zustandsfilter
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
Timer | Programmierung des CTC
 | Anschlüsse des CTC
 | Programmierbare Zähler
TO-18 | Gehäuse TO-18
TO-254AA | Gehäuse TO-254AA
TO-3 | Gehäuse TO-3
TO-39 | Gehäuse TO-39
TO-5 | Gehäuse TO-5
TO-66 | Gehäuse TO-66
TO-72 | Gehäuse TO-72
Toleranz | Kennwerte
 | Kondensatoren
Top-Down-Entwurf | Entwurfsmethoden
Toshiba | Der Prozessor Z80
Track & Hold' | Sample & Hold
Transistor | Transistoren
 | Bipolartransistoren
 | Experiment: Stromverstärkung im Bipolartransistor
Transistor-Transistor-Logic | TTL
Transistorgehäuse | Gehäuse TO-18
 | Gehäuse TO-3
 | Gehäuse TO-66
 | Gehäuse TO-39
 | Gehäuse TO-5
 | Gehäuse TO-72
 | Gehäuse TO-254AA
Treiber | Treiber
Tri-State Ausgang | TTL
Tri-State Inverter | Experiment: Inverter mit Tri-State-Ausgang
Tri-State Treiber | Treiber
TRIAC | TRIAC
Trimmer | Drehkondensator
Trimmkondensator | Drehkondensator
TRUE | Logische Grundoperationen
TTL | TTL
 | TTL 7400...7432
 | TTL 7438...74107
 | TTL 74123...74170
 | TTL 74173...74299
 | TTL 74367...74670

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index U...

UART | Serielle Schnittstelle
UF-Wandler | Spannungs-Frequenz-Wandler
 | Experiment: Aufbau eines UF-Wandlers
UND | Gatter: AND
 | Logische Grundoperationen
Unit-Load | TTL
Universalfilter | Variables Zustandsfilter
 | Experiment: Universalfilter bei unterschiedlichen Dämpfungen
Unterprogramm | Unterprogramme
USART | Serielle Schnittstelle

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index V...

V-24 | RS-232-Standard und Verkabelungsbeispiele
variabler Verstärker | Experiment: Variabler Verstärker
variables Zustandsfilter | Variables Zustandsfilter
VCO | Phase Locked Loop
 | Spannungs-Frequenz-Wandler
Verdrillte Leitung | Lange Signalleitungen
Vergleich | Bedingte Verzweigungen
Verlustfaktor | Kondensatoren
Verlustleistung | Häufig verwendete Größen
 | Widerstände
 | Kühlkörper
Verstärker | CMOS-Gatter als lineare Schaltungen
 | Experiment: Invertierender Verstärker
 | Experiment: Variabler Verstärker
 | Nicht invertierender Verstärker
Verstärkung | Konzept der Operationsverstärker
Vierquadranten-Multiplizierer | Digital-Analog-Wandler
Vollwellengleichrichter | Experiment: Vollwellengleichrichter
voltage follower | Spannungsfolger
Vorzeichen | Arithmetisch-Logische Einheit

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index W...

Wahrheitstafel | Logische Grundoperationen
 | Synthese logischer Funktionen
 | Von der Wahrheitstafel zur logischen Funktion
Wandlungsgeschwindigkeit | Spezifikationen von AD- und DA-Wandlern
Wasserstoffperoxid | Belichten und Ätzen der Platine
Werkzeug | Welches Werkzeug?
Widerstand | Farbcodierung
 | Widerstände
Widerstandsleiter | Digital-Analog-Wandler
Widerstandsthermometer | Widerstandsthermometer
Widerstandswert | Kennwerte
wired AND | TTL

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index X...

XOR | Gatterübersicht
 | Gatter: XOR

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index Y...

Yttriumoxid Lambda-Sonde

Last Update: 2007-Jän-03


Angewandte Mikroelektronik

Overview
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Index Z...

Z80 | Arithmetisch-Logische Befehle
 | Pinbelegung Z80
 | Parameter und Globale Variable
 | Betriebsprogramm zum Minimalsystem uP1
 | Interrupt: Empfänger DART-B voll
 | RAM-Test
 | Zeichen seriell empfangen
 | Zeichen seriell senden
 | Zähler
 | Lauflicht
 | Inverter
 | Protokoll-Umsetzung
 | Sinusgenerator; Version A
 | Sinusgenerator, Version B
 | Funktionsgenerator
 | Digitalvoltmeter
 | Stoppuhr mit CTC 3
 | Frequenzzähler mit CTC 0
 | Tastaturabfrage
 | Centronics-Schnittstelle
 | Funktionsgenerator/Sinusgenerator
 | Nicht initialisierte Interrupts ignorieren
 | DART A: Setup Protokol
 | INTERRUPT: Zeichen auf DART-A senden
 | 8-Bit-Zeichen in FIFO schreiben
 | Pinbelegung: Mikroprozessoren
 | Pinbelegung: Peripherie
Z80-Befehlssatz | Der Z80-Befehlssatz
Z80-DART | Z80-DART (Z8470)
Z80-PIO | Anschlüsse des Z80-PIO
Z8410 | Pinbelegung: Peripherie
Z8420 | Anschlüsse des Z80-PIO
 | Z80-PIO (Z8420)
 | Pinbelegung: Peripherie
Z8440 | Pinbelegung: Peripherie
Z8470 | Anschlüsse des DART
 | Pinbelegung: Peripherie
Zahlensysteme | Zahlensysteme
Zeichenkette | Buchstaben und Zeichenketten
Zeichenkodierung | ASCII-, ANSI- und EBCDIC-Code
Zeit | Häufig verwendete Größen
Zenerdiode | Spannungsquelle
 | Zenerdioden
 | Linearisierung mit nichtlinearem Netzwerk
Zenerspannung | Dioden
 | Zenerdioden
Zero-Bit | Arithmetisch-Logische Einheit
Zero-Power-RAM | Statische RAMs
Zilog | Der Prozessor Z80
Zirkonoxid | Lambda-Sonde
Zweier-Komplement | Ganze Zahlen und Zweier-Komplement
 | Datencodes bei AD- und DA-Wandlern
Zweiquadranten-Multiplizierer | Digital-Analog-Wandler
Zylinder | Harddisk
Zähler | Zähler
 | Programmierung des CTC
 | Anschlüsse des CTC
 | Z80-CTC (Z8430, MK3883)
 | Programmierbare Zähler
Ätzbad | Belichten und Ätzen der Platine
Ätzen von Platinen | Gedruckte Schaltungen
Ätznatron | Belichten und Ätzen der Platine
Überlauf | Arithmetisch-Logische Einheit
Übertrag | Arithmetisch-Logische Einheit
Übertragungsfunktion | Grundbegriffe der Filtertechnik
 | Regler - Grundlagen

Last Update: 2007-Jän-03


Table of Contents

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-21


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
AD-Interface - Grundlagen
Nykvist-Theorem
Spezifikationen von AD- und DA-Wandlern
Datencodes bei AD- und DA-Wandlern
Analoger Multiplexer
Sample & Hold
Digital-Analog-Wandler
Analog-Digital-Wandler
Übersicht
Spannungs-Frequenz-Wandler
Dual-Slope-Wandler
Sukzessive Approximation
Flash-Konverter
Datenerfassungssysteme
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Frequenzgenerator
Filter
Regler
Regler - Grundlagen
Grundtypen von Regelverstärkern
Analoge Regelverstärker
Übersicht
P-Regler
PI-Regler
PID-Regler
Digitale Regler
Phase Locked Loop
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Platinenlayouts
Pinbelegung
Listing: Minimalsystem
Der Z80-Befehlssatz
ASCII-, ANSI- und EBCDIC-Code
Das Verhältnismaß Dezibel
Akronyme
Spannungsbezeichnungen
Literatur
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Aufbau eines Minimalsystems
Grundlagen
Taktoszillator
CPU und Speicher
Input Output
Resetsteuerung
Bussteuerung
Programmierung eines Mikrocomputers
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Sinusgenerator, Version A
Sinusgenerator, Version B
Parallel ablaufende Programme: Sinusgenerator und Lauflicht
Programmierbarer Funktionsgenerator
Digitalvoltmeter
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Stromverstärkung im Bipolartransistor
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Übersicht
Pinbelegung
Registerstruktur
Interruptverarbeitung
Befehlssatz
Befehlssatz
Ladebefehle
Austauschbefehle
Blockbefehle
Arithmetisch-Logische Befehle
Rotations- und Schiebebefehle
Bitmanipulation
Sprungbefehle, Unterprogrammaufrufe
Input/Output Befehle
CPU-Kontrollbefehle
Aufbau eines Minimalsystems
Programmierung eines Mikrocomputers
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Grundlagen der Digitaltechnik
Boole'sche Algebra
Logische Grundoperationen
Synthese logischer Funktionen
Von der Wahrheitstafel zur logischen Funktion
Karnaugh-Veitch Diagramme
Digitale Zahlendarstellung
IC-Technologien
Lange Signalleitungen
Leitungsabschluss
Die Platine DIGMLT
Gatter
Digitaler Multiplexer
Decoder
Flip-Flop
Zähler
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Licht
Kraft und Druck
Feuchte
Chemische Sensoren
Metalloxid-Gassensoren
Lambda-Sonde
ISFET
Ionenselektive Elektroden
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Einleitung
Counter und Timer
Programmierbare Zähler
Z80-CTC
Anschlüsse des CTC
Programmierung des CTC
Serielle Schnittstelle
Parallele Schnittstelle
Multifunktionelle Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Übersicht
Pinbelegung
Registerstruktur
Interruptverarbeitung
Befehlssatz
Aufbau eines Minimalsystems
Programmierung eines Mikrocomputers
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
AD-Interface - Grundlagen
Nykvist-Theorem
Spezifikationen von AD- und DA-Wandlern
Datencodes bei AD- und DA-Wandlern
Analoger Multiplexer
Sample & Hold
Digital-Analog-Wandler
Analog-Digital-Wandler
Datenerfassungssysteme
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Grundlagen der Digitaltechnik
Boole'sche Algebra
Digitale Zahlendarstellung
Zahlensysteme
Ganze Zahlen und Zweierkomplement
Gleitkommazahlen
BCD-codierte Zahlen
Gray-Codierung
Buchstaben und Zeichenketten
IC-Technologien
Lange Signalleitungen
Leitungsabschluss
Die Platine DIGMLT
Gatter
Digitaler Multiplexer
Decoder
Flip-Flop
Zähler
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Grundlagen der Digitaltechnik
Boole'sche Algebra
Digitale Zahlendarstellung
IC-Technologien
Lange Signalleitungen
Leitungsabschluss
Die Platine DIGMLT
Gatter
Digitaler Multiplexer
Decoder
Flip-Flop
Zähler
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Grundlagen
Schaltdioden
Gleichrichterdioden
Zenerdioden
Leuchtdioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Magnetische Speicher
CD-ROM
DVD
DVD
DVD-RAM
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Experimente mit Z80-CTC
Z80-CTC
Stoppuhr
Frequenzmessgerät
Experimente mit Z80-DART
Experimente mit Z80-PIO
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Experimente mit Z80-CTC
Experimente mit Z80-DART
Z80-DART
Serielle Ausgabe von Zeichen
Empfang von Zeichen auf der seriellen Leitung
Protokoll einer seriellen Schnittstelle
Experimente mit Z80-PIO
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Experimente mit Z80-CTC
Experimente mit Z80-DART
Experimente mit Z80-PIO
Tastatur mit 16 Tasten
Centronics-Schnittstelle
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Licht
Kraft und Druck
Feuchte
Feuchtigkeit
Kapazitive Luftfeuchtemessung
LiCl-Zelle
Chemische Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Frequenzgenerator
Filter
Übersicht
Grundlagen
Grundbegriffe der Filtertechnik
Sallen-Key-Filter
Variables Zustandsfilter
Regler
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Magnetische Speicher
Einführung
Magnetband
Floppy-Disk
Grundlagen
Floppy Disk - Aufzeichnungsverfahren
Floppy Controller
Harddisks
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Frequenzgenerator
Konzept des Frequenzgenerators
Aufbau des Frequenzgenerators
Filter
Regler
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Grundlagen der Digitaltechnik
Boole'sche Algebra
Digitale Zahlendarstellung
IC-Technologien
Lange Signalleitungen
Leitungsabschluss
Die Platine DIGMLT
Gatter
Treiber
Inverter
Gatter: AND
Gatter: NAND
Gatter: OR
Gatter: NOR
Gatter: XOR
Gatterübersicht
CMOS-Gatter als lineare Schaltungen
Digitaler Multiplexer
Decoder
Flip-Flop
Zähler
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Anfertigung gedruckter Schaltungen
Herstellung des Platinenfilms
Belichten und Ätzen der Platine
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Präfixe
Häufig verwendete Größen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Reflexionen an langen Leitungen
Aufbau eines Quarzoszillators
Inverter mit Tri-State-Ausgang
Aufbau eines Gray-Codierer
Aufbau eines RS-Flip-Flops aus NAND-Gattern
Einsatz eines Registers zur Datenspeicherung
Universalfilter bei unterschiedlichen Dämpfungen
Aufbau eines Frequenzsynthesizers
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Übersicht
RAM
ROM
Programmable ROMs
Erasable Programmable ROM
Electrically Erasable Programmable ROM
Non Volatile RAM
Magnetische Speicher
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Magnetische Speicher
Einführung
Magnetband
Floppy-Disk
Harddisks
Grundlagen
Schnittstellen
Aufzeichnungsverfahren
Beispiele für Festplatten
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Experimente mit Z80-CTC
Experimente mit Z80-DART
Experimente mit Z80-PIO
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Grundlagen der Digitaltechnik
Boole'sche Algebra
Digitale Zahlendarstellung
IC-Technologien
TTL
Emitter Coupled Logic
CMOS
Lange Signalleitungen
Leitungsabschluss
Die Platine DIGMLT
Gatter
Digitaler Multiplexer
Decoder
Flip-Flop
Zähler
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Platinenlayouts
Pinbelegung
Listing: Minimalsystem
Parameter und Globale Variable
Betriebsprogramm zum Minimalsystem uP1
Includes
Inverter
RAM-Test
Interrupt: Empfänger DART-B voll
Zeichen seriell empfangen
Digitalvoltmeter
8-Bit-Zeichen in FIFO schreiben
INTERRUPT: Zeichen auf DART-A senden
DART A: Setup Protokol
Nicht initialisierte Interrupts ignorieren
Funktionsgenerator/Sinusgenerator
Centronics-Schnittstelle
Tastaturabfrage
Frequenzzähler mit CTC 0
Stoppuhr mit CTC 3
Funktionsgenerator
Sinusgenerator; Version A
Sinusgenerator, Version B
Protokoll-Umsetzung
Zeichen seriell senden
Lauflicht
Zähler
Der Z80-Befehlssatz
ASCII-, ANSI- und EBCDIC-Code
Das Verhältnismaß Dezibel
Akronyme
Spannungsbezeichnungen
Literatur
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index
Index A...
Index B...
Index C...
Index D...
Index E...
Index F...
Index G...
Index H...
Index I...
Index J...
Index K...
Index L...
Index M...
Index N...
Index O...
Index P...
Index Q...
Index R...
Index S...
Index T...
Index U...
Index V...
Index W...
Index X...
Index Y...
Index Z...

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Geschichte
Technologie der integrierten Schaltkreise
Gehäuseformen
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Aufbau einer Sample&Hold-Schaltung
Aufbau eines 4-Bit-DA-Wandlers
Aufbau eines Spannungs-Frequenzwandlers
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Kühlkörper
Berechnungsbeispiel eines Kühlkörpers
Beispiele
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Kondensatoren
Bauformen von Kondensatoren
Drehkondensator
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Licht
Kraft und Druck
Dehnungsmessstreifen
Piezoelektrische Sensoren
Pirani Gauge
Ionisationsmanometer
Feuchte
Chemische Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Licht
Photowiderstand
Photodiode
Phototransistor
Photomultiplier
Kraft und Druck
Feuchte
Chemische Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Platinenlayouts
Pinbelegung
Listing: Minimalsystem
Parameter und Globale Variable
Betriebsprogramm zum Minimalsystem uP1
Includes
Der Z80-Befehlssatz
ASCII-, ANSI- und EBCDIC-Code
Das Verhältnismaß Dezibel
Akronyme
Spannungsbezeichnungen
Literatur
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Magnetische Speicher
Einführung
Magnetband
Floppy-Disk
Harddisks
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Aufbau eines Minimalsystems
Programmierung eines Mikrocomputers
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
8fach-Inverter
RAM-Test
Lauflicht
Zähler mit einstellbarer Geschwindigkeit
Emulation von Gattern
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Band-Gap-Referenzelemente
Linear geregelte Netzteile
Fixspannungsregler
Schaltnetzteile
Frequenzgenerator
Filter
Regler
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Terminologie der Operationsverstärkertechnik
Konzept der Operationsverstärker
Gegenkopplung
Mitkopplung
Universal-Experimentierplatine LINMLT
Spannungsfolger
Nicht invertierender Verstärker
Invertierender Verstärker
Summierverstärker
Gleichrichter
Differenzierer
Integrator
Differenzverstärker
Komparator
Spannungsquelle
Stromquelle
Operationsverstärker - Typenübersicht
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Spannungsfolger
Variabler Verstärker
Invertierender Verstärker
Summierverstärker
Vollwellengleichrichter
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Einleitung
Counter und Timer
Serielle Schnittstelle
Parallele Schnittstelle
Parallele Schnittstelle
16-Bit-Parallelschnittstelle mit Registern
Z80-PIO (Z8420)
Anschlüsse des Z80-PIO
Programmierung des PIO
Centronics-Schnittstelle
IEEE-488-Bus
Multifunktionelle Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Einleitung
Counter und Timer
Serielle Schnittstelle
Parallele Schnittstelle
Multifunktionelle Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Platinenlayouts
Pinbelegung
Operationsverstärker
TTL 7400...7432
TTL 7438...74107
TTL 74123...74170
TTL 74173...74299
TTL 74367...74670
CMOS 4001...4024
CMOS 4028...4052
CMOS 4060...4511
EPROMs
RAMs
Mikroprozessoren
Peripherie
Listing: Minimalsystem
Der Z80-Befehlssatz
ASCII-, ANSI- und EBCDIC-Code
Das Verhältnismaß Dezibel
Akronyme
Spannungsbezeichnungen
Literatur
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Platinenlayouts
Platinenlayouts
Universal-Experimentierplatine LINMLT
Platine DIGMLT
Platine uP1
Platine SERPAR
Platine 7SGDSP
Platine ADAC12
Pinbelegung
Listing: Minimalsystem
Der Z80-Befehlssatz
ASCII-, ANSI- und EBCDIC-Code
Das Verhältnismaß Dezibel
Akronyme
Spannungsbezeichnungen
Literatur
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Aufbau eines Minimalsystems
Programmierung eines Mikrocomputers
Software-Entwicklung
Entwurfsmethoden
Programm-Dokumentation
Struktogramme
Pseudocode
Flussdiagramme
Sprachen
Ablauf einer Programmentwicklung
LIFO oder Stack
FIFO
Bedingte Verzweigungen
Schleifen
Unterprogramme
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Übersicht
RAM
RAM
Statische RAMs
Dynamische RAMs
ROM
Programmable ROMs
Erasable Programmable ROM
Electrically Erasable Programmable ROM
Non Volatile RAM
Magnetische Speicher
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Frequenzgenerator
Filter
Regler
Regler - Grundlagen
Grundtypen von Regelverstärkern
Analoge Regelverstärker
Digitale Regler
Phase Locked Loop
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Band-Gap-Referenzelemente
Linear geregelte Netzteile
Fixspannungsregler
Schaltnetzteile
Übersicht
Abwärtsregler
Aufwärtsregler
Invertierender Schaltregler
Frequenzgenerator
Filter
Regler
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Licht
Kraft und Druck
Feuchte
Chemische Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Temperaturmessung mit Halbleiter-Diode
Aufbau einer Lichtschranke
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Einleitung
Counter und Timer
Serielle Schnittstelle
Grundlagen
Protokoll
RS-232-Standard und Verkabelungsbeispiele
Z80-DART (Z8470)
Anschlüsse des DART
Programmierung des DART
Parallele Schnittstelle
Multifunktionelle Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Speicher
Halbleiterspeicher
Magnetische Speicher
CD-ROM
DVD
Magneto-Optische Platten
Fehlerkorrektur
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Netzteile
Frequenzgenerator
Filter
Regler
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Welches Werkzeug?
Liste der Experimente
Bauteilkunde
Operationsverstärker
Grundlagen der Digitaltechnik
Spezielle Schaltungen
Aufbau eines Fixspannungsnetzteil
Aufbau eines Abwärtsschaltreglers
Auswirkungen der Slew-Rate des Komparators
Interfaces zwischen Analog und Digitaltechnik
Sensoren
Mikroprozessorsystem
I/O-Bausteine
Aufbau einfacher mikroprozessorgesteuerter Geräte
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Linearisierung
Temperatur
Thermoelement
Widerstandsthermometer
Thermistor
Halbleiter
Licht
Kraft und Druck
Feuchte
Chemische Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Einleitung
Bipolartransistoren
Feldeffekttransistoren
Transistorgehäuse
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Einleitung
Bipolartransistoren
Feldeffekttransistoren
Transistorgehäuse
TO-3
TO-5
TO-18
TO-39
TO-66
TO-72
TO-254AA
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Mikroprozessoren
Interner Aufbau eines Mikroprozessors
Zentrale Recheneinheit - CPU
Arithmetisch-Logische Einheit
Register
Kontrolleinheit
Befehlssatz
Befehlstypen
Adressierung
Der Prozessor Z80
Aufbau eines Minimalsystems
Programmierung eines Mikrocomputers
Software-Entwicklung
Entwurfsmethoden
Programm-Dokumentation
Struktogramme
Pseudocode
Flussdiagramme
Sprachen
Ablauf einer Programmentwicklung
LIFO oder Stack
FIFO
Bedingte Verzweigungen
Schleifen
Unterprogramme
Grundlagen
Parameterübergabe
Seiteneffekte
Reentrante Unterprogramme
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18


[template_tochead_chm.html]

Hintergrundinfos und Download
Copyright
Release History
Grundlagen
Bauteilkunde
Farbcodierung
Normwerte
Widerstände
Einleitung
Kennwerte
Bauformen
Spezielle Widerstände
Kondensatoren
Schwingquarze
Dioden
Transistoren
Thyristoren
TRIAC
Integrierte Schaltkreise
Kühlkörper
Gedruckte Schaltungen
Operationsverstärker
Digitaltechnik
Speicher
Mikroprozessoren
Periphere Bausteine
Spezielle Schaltungen
Digital-Analog-Interfaces
Sensoren
Experimente
Anhang
Index

Last Update: 2005-Nov-18