Control-Routing Funktionsbeschreibung

Schnittstelle zur Experimentkontrolle

April 1995 K. Huber, Strahlenzentrum Univ. Gießen
Version 13.May.2015

Inhaltsverzeichnis

1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Aufbau und Funktion . . . . . . . . . . . . . . . . . . . . . . 2

2.1 Aufbau des Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Überrahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Standardkomponenten . . . . . . . . . . . . . . . . . . . . . 5

3.1 Rechneranpassung und Routing-Steuerung . . . . . . . . . . . . . . . . . . . . 5 3.1.1 Rechneranpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.2 Routing-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.2 Address-Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 Standard-Interface-Karten. . . . . . . . . . . . . . . . . . 8

4.1 Serielle Ausgabe (Neues Design / PSO14-Board, EW 1-14) . . . . . 8

4.1.1 PSO16 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.1.1 PSO16 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.1.2 PSO16 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.1.2 PSO32 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.2.1 PSO32 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.2.2 PSO32 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.1.3 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.4 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.5 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.6 LWL-Planung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.7 Probleme und Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.2 Serielle Ausgabe (G. Hoffmann Protokoll) . . . . . . . . . . . . . . . . . . . . 13 4.2.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.4 Asynchrones, serielles Protokoll von G. Hoffmann . . . . . . . . 14

4.3 Serielle Eingabe (G. Hoffmann Protokoll) . . . . . . . . . . . . . . . . . . . . 15 4.3.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.3.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.3.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.4 Parallele Ausgabe (16 Bits) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.4.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.4.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.4.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.5 Messintervall Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.5.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.5.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.5.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.6 Programmierbare Zeitbasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.6.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.6.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.6.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.7 Interrupt Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.7.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.7.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.7.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.8 Programmierbare Totzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.8.1 Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.8.2 Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.8.3 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.8.4 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.8.5 Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.8.5.1 Dominierende Totzeit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.8.5.2 Beseitigen von Nachimpulsen. . . . . . . . . . . . . . . . . . . . . . . 26

4.8.6 Messungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.8.7 Totzeit-Rechnungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.8.7.1 Mittlere Totzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.8.7.2 Korrekturformeln für nicht-paralysierende Totzeit. … 28 4.8.7.3 Korrekturformeln für paralysierende Totzeit . . . . . . . . . 29

4.9 CAN Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.9.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.9.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.9.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.10 8-Kanal 12-Bit ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.10.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.10.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.10.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.10.4 Analoge Bauteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.11 2-fach 16-Bit DAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.11.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.11.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.11.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.11.4 Probleme und Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5 Spezielle Interface-Karten . . . . . . . . . . . . . . . . . 41

5.1 Schrittmotor-Interface (Labor 016) . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.1.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.1.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.1.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.2 Probenwechsler-Steuerung (Schacht) . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.2.1 Aufgabe, Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.2.2 Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.2.3 Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2.4 Probenwechsler Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6 Technische Details . . . . . . . . . . . . . . . . . . . . . . . . 45

6.1 Routing-Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.1.1 Routing-Bus Signale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.1.2 Routing-Bus Abschluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.2 Komponenten und Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.2.1 Datenquellen <-> Quellen-Interfaces . . . . . . . . . . . . . . . . . . . . . 50 6.2.2 Quellen-Interface <-> Interface-Steuerung . . . . . . . . . . . . . . . . 50 6.2.3 Interface-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.2.4 Interface-Steuerung <-> Routing-Steuerung . . . . . . . . . . . . . . 50 6.2.5 Routing-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.2.6 Routing-Steuerung <-> Rechneranpassung . . . . . . . . . . . . . . . 51 6.2.7 Rechneranpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.2.8 Rechneranpassung <-> Rechner-Interface. . . . . . . . . . . . . . . . . 51 6.2.9 Rechner-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.2.10 Kopplungskarte <-> Interface-Steuerungen . . . . . . . . . . . . . . 51

6.3 Schaltungsunterlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3.1 Board Interface-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3.2 Board Routing-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3.3 Board Rechneranpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3.4 Board Rechner-Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7 Oldies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

7.1 Alte Routing-Steuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.1.1 Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.1.2 Bedienungselemente, Anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.1.3 Schnittstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.1.4 Routing-Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

7.2 Alte Rechneranpassungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7.2.1 PDP11 - DRV11-J - Anpassung . . . . . . . . . . . . . . . . . . . . . . . . . 53 7.2.1.1 Adressausgabe und Statuseingabe . . . . . . . . . . . . . . . . . . 53 7.2.1.2 Interrupt-Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7.2.1.3 Programm-Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.2.1.4 Block- und Timing-Diagramme . . . . . . . . . . . . . . . . . . . . . 59

1 Einleitung

Zur Datenerfassung und Experimentsteuerung existieren zwei verschiedene Rechner-Interfaces, das Data-Routing und das Control-Routing, so genannt nach den Aufgaben, zu denen sie im Wesentlichen eingesetzt werden:

• Zur schnellen Erfassung von großen Datenmengen wird vorzugsweise das Data-Routing verwendet. Es ermöglicht eine schnelle Dateneingabe von bis zu 8 Eingabekanälen. Eine Datenausgabe ist damit nicht möglich. Siehe Kapitel 1 [Einleitung], Seite 1. Siehe Kapitel 1 [Einleitung], Seite 1. Siehe Kapitel 1 [Einleitung], Seite 1.

• Das Control-Routing hingegen wird hauptsächlich zur Steuerung des Experimentes eingesetzt. Es erlaubt die Ein- und Ausgabe von einzelnen Datenworten, wobei bis zu 8 Module mit je 8 Registern, also maximal 64 Register, adressierbar sind. Ferner ist eine Interrupt-Eingabe vorgesehen.

Die vorliegende Funktionsbeschreibung befasst sich ausschließlich mit dem Control-Routing. Es wird im folgenden oft abgekürzt als Routing bezeichnet. Für das Data-Routing existiert eine eigene Beschreibung.

Das Kapitel Aufbau und Funktion gibt einen Überblick über den Aufbau das Control-Routing. Das Kapitel Standardkomponenten enthält die Aufgabenbeschreibungen und Bedienungsanleitungen der Standardkarten des Routing. Das Kapitel Standard-Interface-Karten enthält die Aufgabenbeschreibungen und Bedienungsanleitungen der Routing-Karten, die allgemein bei Experimenten zum Einsatz kommen. Das Kapitel Spezielle Interface-Karten enthält eine Aufstellung der Routing-Karten, die für einzelne Experimente entwickelt wurden. Ihre Beschreibung findet man i.a. in den Unterlagen der Experimente, bei denen sie eingesetzt werden. Das Kapitel Technische Details gibt technische Detail-Informationen über die Komponenten und deren Schnittstellen. Im Kapitel Oldies sind überholte Beschreibungen gesammelt.

2 Aufbau und Funktion

2.1 Aufbau des Routing

Abb.: Datentransfer mit dem Control-Routing-System

• Rechner Das Control-Routing kann an jeden Rechner mit geeignetem I/O-Port angeschlossen werden. Realisiert wurden bisher Anschlüsse an TR86-Rechner, PDP11-Rechner und VME-Systeme. Zur Zeit ist das Control-Interface auf einem IP-Board (Industrie Pack) implementiert, so dass es an jeden Rechner angeschlossen werden kann, für den ein IP-Board-Carrier existiert (VME, PC usw.).

• Rechneranpassung und Routing-Steuerung Diese beiden Funktionen sind entweder auf einer gemeinsamen Karte oder auf zwei benachbarten Karten, mit der Steuerung links und der Anpassung rechts, untergebracht. Die Rechneranpassung umfasst die Sender und Empfnger der Signale ber das Kabel zum Rechner. Die Routing-Steuerung ist das logische Interface zwischen den rechnerseitigen Signalen und dem Routing-Bus.

• Adress-Decoder Zur Erleichterung des Anschlusses von Experiment-Interfaces wurde eine standardisierte Karte zur Entschlüsselung der binär verschlüsselten Modul- und Register-Adressen entwickelt. Die Adress-Decoder-Karte belegt eine Steckplatz abhängige Moduladresse und entschlüsselt die zugehörigen 8 Registeradressen. Über den P-Bus gibt sie 8 Register-Select-Signale an benachbarte Experiment-Interfaces weiter. Ihr Einsatz kann entfallen, wenn die Experiment-Interfaces die Entschlüsselung selber vornehmen.

• Experiment-Interfaces Eine Experiment-Interface-Karte enthält ein oder mehrere I/O-Register zur Ein- und Ausgabe der Daten. Bis zu 8 Register pro Karte können direkt adressiert werden und über Hilfsadressen natürlich weitere. Ferner kann sie vom Experiment ausgehende Interrupt-Wünsche in einem I/O-Register (IT-Register) speichern und dem Rechner eine Interrupt-Anforderung schicken. Es gibt bereits eine Reihen solcher Experiment-Interface-Karten (paralleles und serielles I/O, programmierbare Timer, Interrupt-Eingabe), die bei Bedarf möglicherweise direkt verwendet oder doch zumindest als Vorlage für Neuentwicklungen dienen können.

2.2 Überrahmen

Das Control-Routing ist in einem 19"-Überrahmen untergebracht mit 20 Steckplätzen für Europakarten (Siehe [Abb.: Routing-Überrahmen], Seite 4.). Es wird der gleiche Überrahmen wie für das Data-Routing verwendet. In Ausnahmefällen können Data-Routing und Control-Routing im gleichen Überrahmen untergebracht werden, wenn die Bus-Verdrahtung in der Mitte durchtrennt wird und für die zweite Hälfte ein Bus-Abschluss nachgerüstet wird. Die Routing Back-Plane enthält 42 allgemeine Bus-Leitungen für die Routing-Steuerung und 11 Privat-Bus-Leitungen zur Kommunikation benachbarter Karten. Außer der Spannungsversorgung sind alle Schaltungskomponenten auf steckbaren Karten untergebracht.

Als Steckverbindung zum Routing-Bus werden 64-polige VG-Stecker verwendet. Die Anschlüsse der VG-Leisten sind im Überrahmen zum Teil als durchgehender Bus verdrahtet (allg. Bus: 1a,1c,...,21c) und zu einem anderen Teil bestehen Verbindungen zu benachbarten Steckerleisten (Privat-Bus: 22a/c,...,32a/c) (Siehe Abschnitt 6.1 [Routing-Bus], Seite 45.). Ferner ist für jede Leiste von links beginnend eine Steckplatzkodierung von 0-7 verdrahtet, wobei jedoch jeweils zwei benachbarte Leisten die gleiche Kodierung haben. Die vier überbleibenden Steckplätze am rechten Ende erhalten alle die Kodierung 7. Sie sind vorzugsweise für die Rechner-Anpassung und Routing-Steuerung zu benutzen, da der Bus-Abschluss sich am linken Ende des Überrahmens befindet. Am äußersten rechten Ende ist die Netzkarte mit Netzschalter und Betriebsspannungsanzeigen fest installiert.

Die Frontplattenbreite für eine Steckkarte ist üblicherweise 20 mm, es stehen jedoch auch 40 und 50 mm Frontplatten zur Verfügung. Achtung: Es wird dringend empfohlen, die Frontplatten der Steckkarten mit dem Überrahmen zu verschrauben zur Vermeidung von Betriebsstörungen. Bitte die Schrauben nicht gewaltsam anziehen, da dies zur Zerstörung der Gewinde im Überrahmen führt. Schrauben von min. 10mm Länge verwenden, sonst besteht ebenfalls die Gefahr der Zerstörung der Gewinde.

Abb.: Routing-Überrahmen

                           Steckplatz
       1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
     |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |RS|RA|SV|
     |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
     |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
     |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
       0  0  1  1  2  2  3  3  4  4  5  5  6  6  7  7  7  7  7  7
                      Steckplatzkodierung
       RS = Routingsteuerung
       RA = Rechneranpassung
       SV = Spannungsversorgung

3 Standardkomponenten

3.1 Rechneranpassung und Routing-Steuerung

Diese beiden Funktionen sind entweder auf einer gemeinsamen Karte oder auf zwei benachbarten Karten, mit der Steuerung links und der Anpassung rechts, untergebracht.

3.1.1 Rechneranpassung

Die Rechneranpassungs-Karte enthält Sender, Empfänger und eventuell Pegelwandler für die Dialog- und Datenleitungen zwischen dem Rechner und dem Routing.

Die Verbindung zum Rechner erfolgt über ein max. 40m langes 50-poliges Flachbandkabel. Kurze Kabellängen sind zu bevorzugen da die Länge in die Übertragungsgeschwindigkeit eingeht und kürzere Kabel störungssicherer sind.

Bisher wurden zwei Anpassungen an verschiedene Host-Rechner realisiert:

• VME - Industry Pack - Anpassung

• PDP11 - DRQ11-CA - Anpassung

Aktuell ist die VME - Anpassung, die zusammen mit dem rechnerseitigen Interface eine Schnittstelle zu dem Industry Pack Standard darstellt. Für diesen IP-Standard werden Carrier-Boards für eine Anzahl weiterer Plattformen (z.B. PC) angeboten, so dass ein Anschluss des Control-Routing an einen anderen Rechnertyp ohne großen Aufwand möglich ist. Die Rechneranpassung besitzt keine Bedienungselemente. Die PDP11-Anpassungen wurden inzwischen ausgemustert. Ihre Beschreibung finden Sie bei den ’Oldies’.

3.1.2 Routing-Steuerung

Die Routing-Steuerung ist das logische Interface zwischen den rechnerseitigen Signalen und dem Routing-Bus. Sie kontrolliert den Datentransfer mit den Registern der Experiment-Interfaces und sammelt deren Interruptanforderungen, um sie an den Rechner weiterzuleiten. Die Control-Routing-Steuerung besitzt keine Bedienungselemente.

Siehe Abschnitt 2.1 [Aufbau des Routing], Seite 2. Siehe Abschnitt 6.2 [Komponenten und Schnittstellen], Seite 49.

3.2 Address-Decoder

Zur Erleichterung des Anschlusses von Experiment-Interfaces wurde eine standardisierte Karte zur Entschlüsselung der binär verschlüsselten Modul- und Register-Adressen entwickelt. Die Address-Decoder-Karte belegt eine Steckplatz abhängige Moduladresse (3 Bits) und entschlüsselt die zugehörigen Registeradressen (3 Bits). Über den P-Bus (VG-Stecker Pins 22c - 29c; Siehe Abschnitt 6.1 [Routing-Bus], Seite 45.) gibt sie 8 Register-Select-Signale an rechts nachfolgende Experiment-Interfaces weiter. Ihr Einsatz kann entfallen, wenn die Experiment-Interfaces die Entschlüsselung selber vornehmen.

Sobald das Signal "Address valid" anliegt, vergleicht die Address-Decoder-Karte ihre Steckplatzadresse PADR<0-2> mit der aktuellen Moduladresse MADR<0-2>. Bei Gleichheit aktiviert sie einen 3 zu 8 Demultiplexer, der aus der codierten Registeradresse RADR<0-2> 8 einzelne Register-Select-Signale erzeugt (Siehe ⟨undefined⟩ [xxxx], Seite ⟨undefined⟩.), die sie über den P-Bus (Siehe ⟨undefined⟩ [xxxx], Seite ⟨undefined⟩.) den benachbarten Experiment-Interfaces zur Verfügung stellt.

Die über den P-Bus angeschlossenen Experiment-Interfaces nutzen die Register-Select-Signale zusammen mit den Routing-Bus-Signalen "Enable Read", "Data Accepted" und "Data Available" zur Steuerung der Ein- und Ausgabe von Daten (Siehe ⟨undefined⟩ [xxxx], Seite ⟨undefined⟩.).

Es existieren zwei Versionen der Address-Decoder-Karte, die sich in den Bedienungselementen und Anzeigen und zum Teil auch in der Funktion unterscheiden:

Bedienungselemente: alte Version:

     Schalter: Run/Stop
         Run :  Die Address-Decodierung ist in Betrieb
         Stop:  Die Address-Decodierung ist außer Betrieb und alle
                Register-Select-Signale sind abgeschaltet (high).

neue Version: keine Bedienungselemente

Anzeigen: alte Version:

     LED : Select
           LED leuchtet: Address-Decoder-Karte ist durch Moduladresse selektiert
     LEDs: 4 2 1
           Anzeige der Steckplatzadresse
           LED leuchtet: Bit der angegebenen Wertigkeit ist gesetzt

neue Version:

     LEDs: 0 1 2 3 4 5 6 7
           Register select
           LED n leuchtet: Register n ist selektiert
     LEDs: 4 2 1
           Anzeige der Steckplatzadresse
           LED leuchtet: Bit der angegebenen Wertigkeit ist gesetzt

Funktionelle Unterschiede: alte Version: Ursprünglich war geplant, dass das "Address Error"-Signal (Routing-Bus VG-Stecker Pin 16c) von jedem Experiment-Interface gelöscht wird, dessen Register adressiert werden. Tatsächlich wurde jedoch auf der alten Address-Decoder-Version "Address Error" bereits gelöscht, wenn diese über die Moduladresse angesprochen wurde, und die Experiment-Interfaces haben konsequenterweise das "Address Error"-Signal nicht bedient. Damit kann jedoch die Software nicht feststellen, ob eine benötigte Experiment-Interface-Karte fehlt oder defekt ist. Durch Auftrennen der Verbindung nach Pin 16c auf dem Address-Decoder ist diese Panne zu beheben. Dann müssen gegebenenfalls aber die Experiment-Interfaces nachgerüstet werden (s.u.). neue Version: Die neue Address-Decoder Version überlässt das Löschen des "Address Error"-Signals den Experiment-Interfaces, die dann zum Teil aber nachgerüstet werden müssen (teilweise bereits geschehen), falls die Software "Address Error" abprüft. Nachrüstung: Als Nachrüstung genügt eine Diode vom Eingang der verwendeten "Register Select"-Signale zum Ausgang des "Address Error"-Signals, z.B.:

     22c ---|<|--- 16c

4 Standard-Interface-Karten

4.1 Serielle Ausgabe (Neues Design / PSO14-Board, EW 1-14)

4.1.1 PSO16 Firmware

4.1.1.1 PSO16 Bedienelemente

4.1.1.2 PSO16 Programmierung

4.1.2 PSO32 Firmware

4.1.2.1 PSO32 Bedienelemente

4.1.2.2 PSO32 Programmierung

4.1.3 Aufgabe, Funktion

Dieses Control Routing Board ist ein neuentwickelter Parallel-Seriell-Wandler unter Berücksichtigung des Hofmann Protokolls. Im Mode = ’old’ können damit Hofmann-Module (z.B. DAC-Karten) gesteuert werden. Mode = ’new’ wurde speziell für die neuentwickelten, seriellen AD5541CR DAC-Karten zugefügt. Diese Parallel-Seriell-Wandlerkarte ersetzt die G. Hoffmann Wandler bei der Steuerung der Netzgeräte der neuen e-Kanone im Labor 017.

Die neue PSO-Karte ist mit zwei Parallel-Seriell-Wandlern bestückt, die über zwei aufeinanderfolgende Control Routing Adressen angesprochen werden. Die seriellen Signale werden über Lichtleiter ausgegeben. Es ist nur die Ausgabe der 16 bit Daten implementiert.

Original Hofmann Protokoll: Im Hofmann Protokoll wiederholen die PSO-Karten nach einer kurzen Pause beständig ihre Ausgabe. Erhalten sie über das Control Routing neue Daten so wird die laufende Ausgabe abgebrochen und eine neue wird gestartet. Der serielle Empfänger erkennt den Abbruch und verwirft die unvollständigen Daten. Dies führt bei zu rasch aufeinander folgender Eingabe neuer Daten dazu, dass die serielle Ausgabe niemals fertig wird. Nach dem Anschalten startet die Karte sofort mit der Ausgabe der zunächst undefinierten Information.

     Die serielle Ausgabe wird mit 32.768kHz oder 2.4576 MHz getaktet.
     Ein Bit ist 8 Takte lang.
     Nach 16 Bits oder einem Abbruch folgt eine 8 Takte lange Pause.
     Bit = 0:  1 1 0 0 0 0 0 0
     Bit = 1:  1 1 1 1 1 0 0 0
     Pause  :  0 0 0 0 0 0 0 0
     LSB wird zuerst gesendet.

Modifiziertes Hofmann Protokoll: Von der neuen PSO-Karte existieren zur Zeit zwei Versionen (PSO2V1 und PSO2V2), die sich nur in der Programmierung des ispLSI-Bausteins unterscheiden. Jede dieser Versionen kann in einem Hofmann kompatiblen Modus (MODE = old) und einem seriellen AD5541CR DAC-Karten kompatiblen Modus(MODE = new) betrieben werden.

• Mode = old: Hofmann kompatibler Modus • Mode = ’old’ ist kompatibel mit vorhandenen Hofmann DAC-Karten.

• Protokoll:

Die serielle Ausgabe wird mit 2.4576 MHz getaktet. Ein Bit ist 8 Takte lang. Nach 16 Bits oder einem Abbruch folgt eine 8 Takte lange Pause. LSB wird zuerst gesendet.

     Bit-Takt:  2.4576 MHz
     Bit = 0 :  1 1 0 0 0 0 0 0
     Bit = 1 :  1 1 1 1 1 0 0 0
     Pause   :  0 0 0 0 0 0 0 0

• Nach dem Powerup Reset erfolgt zunächst keine serielle Ausgabe um keine undefinierten Daten auszugegeben.

• Versionen:

• PSO2V1 Die erste laufende serielle Ausgabe nach der Eingabe neuer paralleler Daten wird nicht unterbrochen durch eine weitere Eingabe neuer Daten. Die neuen Daten gehen verloren. Nachfolgende Eingaben unterbrechen wie im Original Hofmann Protokoll eine laufende Ausgabe.

• PSO2V2 Die Daten werden mit jeder parallelen Eingabe nur einmal seriell ausgegeben. Die laufende serielle Ausgabe wird nicht unterbrochen durch eine parallele Eingabe neuer Daten. Die neuen Daten gehen verloren.

• Eine geschützte, laufende Ausgabe wird der Software durch die Rücknahme des Acknowledge-Signals der Registeradressierung (AddAcc-Signal = 0) angezeigt.

• Mode = new: Modus für neue DAC-Karten (AD5541CR) • Mode = ’new’ ist NICHT kompatibel mit vorhandenen Hofmann DAC-Karten.

• Protokoll:

Zuerst wird ein 15 Bit langes festes Muster als Header gesendet, auf das sich die DAC-Karte synchronisiert. Dann folgen nahtlos die 16 Daten-Bits. MSB wird zuerst gesendet.

     Bit-Takt:  2.5000 MHz
     Header  :  101010101010101
     Daten   :  xxxxxxxxxxxxxxxx

• Nach dem Powerup Reset erfolgt zunächst keine serielle Ausgabe um keine undefinierten Daten auszugegeben.

• Die Daten werden mit jeder parallelen Eingabe nur einmal seriell ausgegeben.

• Die laufende serielle Ausgabe wird nicht unterbrochen durch eine parallele Eingabe neuer Daten. Die neuen Daten gehen verloren.

• Eine laufende Ausgabe wird der Software durch die Rücknahme des Acknowledge-Signals der Registeradressierung (AddAcc-Signal = 0) angezeigt.

4.1.4 Bedienelemente

LED "Busy "    :  Anzeige einer Schreiboperation
LWL-Buchse 0   :  serieller Lichtleiter-Ausgang 0
LWL-Buchse 1   :  serieller Lichtleiter-Ausgang 1
Brücke Mode 0:  Stecker für Modus old/new Kanal 0
Brücke Mode 1:  Stecker für Modus old/new Kanal 1
TP Word 0      :  Triggersignal für Start einer seriellen Ausgabe 0
TP Bit 0       :  Triggersignal für Bits einer seriellen Ausgabe 0
TP Word 1      :  Triggersignal für Start einer seriellen Ausgabe 1
TP Bit 1       :  Triggersignal für Bits einer seriellen Ausgabe 1

4.1.5 Programmierung

PSO2-Karte belegt zwei Registeradressen des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

Register 0    :  Ausgabe Datenwort (16 Bits) Kanal 0
Register 1    :  Ausgabe Datenwort (16 Bits) Kanal 1
Routing Status:  Eingabe (Routing Status & 0x0008) != 0 -> PSO busy
                 Diese Statusabfrage ist nur bei Verwendung einer neuen
                 Address-Decoder-Karte (EW 3/04) möglich da die alten
                 ebenfalls dieses Bit bedienen
 (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.1.6 LWL-Planung

Die Leistung der LWL-Sender muss an die Leitungslänge und die Empfindlichkeit der Empfänger angepasst werden. Bisher wurden die Sender nahezu mit voller Leistung betrieben, was bei kurzen Leitungen (<2m) zu Übersteuerung der Empänger führt. Rechnungen mit Hilfe der Datenblätter und Application Notes und Tests zeigen, dass statt des bisher verwendeten Vorwiderstands von 82 Ohm eher 330 Ohm geeignet sind um bei Zimmertemperatur Leitungslängen von 1.5 m bis 20 m sicher abzudecken. Bei Tests mit den neuen DAC-Boards waren die Grenzen ca. 82 Ohm bei 1.20 m und 2.5 kOhm bei 10 m.

Bezug: 1mW -> 0db
  Rechnung für max Leitungslänge (sicherer Betrieb nach Application Notes)
Fiber length                                  [m]   30,00   20,00   10,00    5,00
Detector power (min=-17db, max=-6db)         [db]  -17,00  -17,00  -17,00  -17,00
Fiber attenuation (0.22db/m)                 [db]    6,60    4,40    2,20    1,10
Additional fiber attanuation (0.5db/m)       [db]    1,50    1,50    1,50    1,50
Aging of fiber and known link disadvantages  [db]    1,00    1,00    1,00    1,00
Aging of transmitter and receiver            [db]    2,00    2,00    2,00    2,00
Range of emitter power due to temperature    [db]    3,00    3,00    3,00    3,00
Min emitter power (max 0db)                  [db]   -2,90   -5,10   -7,30   -8,40
LED current                                  [mA]   26,68   16,54   10,25    8,07

Kapitel 4: Standard-Interface-Karten 11

Resistor at 3V                             [kOhm]    0,112   0,181   0,29    0,372
     Rechnung für min Leitungslänge ohne Übersteuerung des Empfängers
Fiber length                                  [m]    3,00    2,00    1,50    1,00
Detector power (min=-17db, max=-6db)         [db]   -6,00   -6,00   -6,00   -6,00
Fiber attenuation (0.22db/m)                 [db]    0,66    0,44    0,33    0,22
Additional fiber attanuation (0.5db/m)       [db]    1,50    1,00    0,75    0,50
Aging of fiber and known link disadvantages  [db]    0,00    0,00    0,00    0,00
Aging of transmitter and receiver            [db]    0,00    0,00    0,00    0,00
Range of emitter power due to temperature    [db]    0,00    0,00    0,00    0,00
Angstfaktor                                  [db]   -3,00   -3,00   -3,00   -3,00
Max emitter power (max 0db)                  [db]   -6,84   -7,56   -7,92   -8,28
LED current                                  [mA]   11,33    9,69    8,96    8,29
Resistor at 3V                             [kOhm]    0,265   0,310   0,335   0,362
    Rechnung für max Leitungslänge (sicherer Betrieb bei Zimmertemperatur)
Fiber length                                  [m]   30,00   20,00   10,00    5,00
Detector power (min=-17db, max=-6db)         [db]  -17,00  -17,00  -17,00  -17,00
Fiber attenuation (0.22db/m)                 [db]    6,60    4,40    2,20    1,10
Additional fiber attanuation (0.5db/m)       [db]    1,50    1,50    1,50    1,50
Aging of fiber and known link disadvantages  [db]    1,00    1,00    1,00    1,00
Aging of transmitter and receiver            [db]    2,00    2,00    2,00    2,00
Range of emitter power due to temperature    [db]    0,00    0,00    0,00    0,00
Min emitter power (max 0db)                  [db]   -5,90   -8,10  -10,30  -11,40
LED current                                  [mA]   13,90    8,62    5,34    4,21
Resistor at 3V                             [kOhm]    0,216   0,348   0,562   0,713

4.1.7 Probleme und Lösungen

Störungen beim Abschalten der PSO2-Karte Im Testbetrieb zeigte sich, dass beim Abschalten des Überrahmens die PSO-Karte für einige ms periodische Signale sendet, die auf den DAC-Karten zu Zufallswerten führen. Eine genauere Untersuchung ergab, dass offenbar der 74LS245 als Treiber für die LWL-Sender diese Oszillationen erzeugt.

Wegen dieser Oszillationen beim Abschalten war die neue PSO-Karte zum Betrieb von Hofmann-DACs (Mode = old), obwohl dafür geplant, nicht geeignet. Deshalb wurde der LS245 probehalber ersetzt durch ein Piggy-Board mit BC556 Transistoren:

     LS245 IN  --> BC556-Basis
     LS245 OUT --> BC556-Emitter
     LS245 VCC --> BC556-Collector

Diese Schaltung vermeidet die Oszillationen, hat aber flachere Flanken als ein LS245. Mit den neuen DAC-Boards ist das kein Problem. Aber die DAC-Karten in der Spannungsregelung von W. Arnold haben eine heftige, periodische Störung, die bei den LWL-Empfängern zu Einbrüchen in den Flanken und damit zu Übertragungsfehlern führt.

Die verschiedenen 245 Typen zeigen unterschiedliches Verhalten beim Abschalten:

     Fairchild, Motorola Typen:
     Typ         Oszillationen    Pause    Nachleuchten
     LS245    120 kHz / 1.5 ms    8 ms      4 ms
     ALS245   2-3 MHz / 200 us     --       4 ms
     HC245     70 kHz / 2.3 ms     --      23 ms
     HCT245    70 kHz /   3 ms     --      20 ms

     Hingegen keine Oszillationen bei Texas Instrument Typen:
     LS245, LS645, ALS245

Alle PSO-Karten sind jetzt mit SN74ALS245AN bestückt.

Danach zeigte sich, dass die PSO-Karte beim Abschalten noch zum Senden eines regulären Datenwortes angeregt wird mit der Info 0xffff, was bei den DACs zu 10V Ausgang führt. Dies konnte bisher nur dadurch verhindert werden, dass die PSO-Karte 0xffff niemals senden darf. Der letzte 0.15mV Schritt kann also nicht eingestellt werden.

Die Oszillationen beim Abschalten waren der Anlass, das Übertragungs-Protokoll völlig zu überarbeiten. Nachdem zunächst versucht wurde, auch im Mode = new möglichst das Hofmann-Protokoll zu verwenden, hat es nun mit dem ursprünglichen Hofmann-Protokoll keine Verwandschaft mehr: Zuerst wird ein 15 Bit langes festes Muster (101010101010101) als Header gesendet, auf das sich die DAC-Karte synchronisiert. Dann folgen nahtlos die 16 Daten-Bits. Damit konnten die Oszillationen beim Abschalten sehr sicher erkannt werden da die Bit-Frequenz (2.5Mhz, 400ns) sich wesentlich von der Störung unterscheidet. Eine vollständige Übertragung braucht ca. 13us und ist damit ca. vier mal schneller als das Hofmann-Protokoll.

4.2 Serielle Ausgabe (G. Hoffmann Protokoll)

4.2.1 Aufgabe, Funktion

Diese Parallel-Seriell-Wandlerkarte wurde von G. Hoffmann entworfen. Sie wird bei verschiedenen Experimenten zur Steuerung eingesetzt: z. B. e-Kanonen-Netzgeräte, Messbereichs-Einstellungen usw..

Ein 16 Bit Datenwort wird seriell gewandelt und auf 50 Ohm Koax-Leitung ausgegeben. Die serielle Ausgabe wiederholt sich beständig. Sie wird abgebrochen und neu gestartet, wenn ein neues 16 Bit Datenwort ausgegeben wird. Dies schein aber nicht bei allen Karten reibungslos zu funktionieren (s.u.). Die Karten können, dem Problem angepasst, mit zwei unterschiedlichen internen Takten betrieben werden (32.768kHz, 2.4576MHz) und die Bits invertiert oder nicht invertiert senden.

Von der Parallel-Seriell-Wandlerkarte existieren zur Zeit mehrere unterschiedliche Layouts (Schaltungsunterlagen im 017-Ordner):

Layout 0 (20/88): ???

Layout 1 (26/88): modifiziertes Layout 0, davon gibt es möglicherweise nur ein Exemplar; interner Takt fest, nur mit einem Quarz bestückt; Lötbrücken zum Umpolen der Ausgänge.

Layout 2 (26/88): verbessertes Layout 1, häufiger im Einsatz; interner Takt fest, nur mit einem Quarz bestückt; manche Exemplare machen Probleme (s.h. 017-Ordner), wenn die Ausgabe eines Datenwortes schneller erfolgt als die Dauer des seriellen Signals (4.395ms bei 32.768kHz), sie senden überwiegend Schrott; Lötbrücken zum Umpolen der Ausgänge.

Layout 3 (29.08.94; 13/96): neues Layout; zwei Quarze für 32.768kHz und 2.4576MHz interne Takte, wählbar über Steckbrücke; Steckbrücke zum Umpolen der Ausgänge.

Die Serielle Ausgabe belegt eine Registeradresse des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.2.2 Bedienelemente

     Layout 0:
     ???
     Layout 1:
     LED "Write"  :  Anzeige einer Schreiboperation
     BNC-Buchsen  :  serielles Ausgangssignal, nicht kurzschlussfest
     2 Brücken    :  Polarität des Ausgangssignals
     Layout 2:
     LED "Write"  :  Anzeige einer Schreiboperation
     BNC-Buchsen  :  serielles Ausgangssignal, nicht kurzschlussfest

2 Brücken    :  Polarität des Ausgangssignals
Layout 3:
LED "Busy"   :  Anzeige einer Schreiboperation
LED "2MHz"   :  Anzeige 2.4576MHz Betrieb
LED "32kHz"  :  Anzeige 32.768kHz Betrieb
LED "Q"      :  Ausgangssignal normal
LED "Q\"     :  Ausgangssignal invertiert
BNC-Buchsen  :  serielles Ausgangssignal, nicht kurzschlussfest
Brücke "Q/Q\" :  Polarität des Ausgangssignals
Brücke "2.4576MHz/32.768kHz": Taktwahl

4.2.3 Programmierung

Register 0 out:       auszugebendes Datenwort (16 Bits)

4.2.4 Asynchrones, serielles Protokoll von G. Hoffmann

• es werden TTL-Pegel gesendet

• das niederwertigste Bit wird zuerst gesendet

• ein Bit ist 8 interne Takte lang

• Bit =0: 2 Takte "high"-Pegel, 6 Takte "low"-Pegel

• Bit =1: 5 Takte "high"-Pegel, 3 Takte "low"-Pegel

• Pause nach der Übertragung eines Datenwortes: 16 Takte "low"-Pegel

4.3 Serielle Eingabe (G. Hoffmann Protokoll)

4.3.1 Aufgabe, Funktion

Diese Seriell-Parallel-Wandlerkarte wurde von G. Hoffmann entworfen. Sie wird bei verschiedenen Experimenten zur Statuseingabe eingesetzt: z. B. Messbereichs-Einstellungen der Ionenstrom-Konverter usw..

Ein seriell über 50 Ohm Koax-Leitung eingegebenes Signal wird parallel in ein 16 Bit Datenwort gewandelt. Die Karten können, dem Problem angepasst, mit zwei unterschiedlichen internen Takten betrieben werden (32.768kHz, 2.4576MHz). Dazu muss der Quarz ausgetauscht werden.

Von der Seriell-Parallel-Wandlerkarte existieren zur Zeit mehrere unterschiedliche Layouts (11/88, 19/88, 3/89).

4.3.2 Bedienelemente

     Layout 3/89:
     LED "Read" :  Anzeige einer Leseoperation
     BNC-Buchse :  serielles Eingangssignal
                   (TTL, G. Hoffmann Protokoll, 50 Ohm Abschluss)

4.3.3 Programmierung

     Register 0 in:       Eingabe des Datenwort (16 Bits)

4.4 Parallele Ausgabe (16 Bits)

4.4.1 Aufgabe, Funktion

Diese Karte für Parallele Ausgabe wurde von G. Hoffmann entworfen. Sie wird bei Scan-Experimenten in den Labors 017 und SI zur Ausgabe der aktuellen Kanalnummer eingesetzt.

Ein 16 Bit Datenwort wird parallel auf einen 20-poligen Flachbandstecker ausgegeben. Für diese Karte gibt es kein eigenes Layout sondern es wird ein modifiziertes 26/88-Layout des Parallel-Seriell-Wandlers verwendet (handverdrahtet). Ein Redesign wäre gelegentlich angebracht.

Die Parallele Ausgabe belegt eine Registeradresse des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.4.2 Bedienelemente

LED "Write"             :  Anzeige einer Schreiboperation
20-pol. Flachbandstecker:  parallele Ausgangssignale (16 Bits, TTL)
Bit     Pin        Bit     Pin
00      17         08      04
01      15         09      06
02      13         10      08
03      11         11      10
04      09         12      12
05      07         13      14
06      05         14      16
07      03         15      18
Ground     1,2     Ground    19,20

4.4.3 Programmierung

Register 0 out:       auszugebendes Datenwort (16 Bits)

4.5 Messintervall Timer

4.5.1 Aufgabe, Funktion

Diese Timer-Karte wurde von G. Hoffmann entworfen. Sie wird bei Scan-Experimenten in den Labors 017 und SI zur Programmierung der Mess- und Pausen-Intervalle der einzelnen Scan-Schritte eingesetzt.

• Es können Intervalle von 1 us bis ca. 1 Woche generiert werden.

• Als Takt wird entweder der interne 1 MHz Quarztakt des Routing oder ein externer Takt verwendet.

• Der Start des Zeitintervalls erfolgt wahlweise programmiert oder über ein externes Startsignal.

• Das Timer-Register muss nach jedem Ablauf eines Intervalls neu geladen werden!

• Wegen der nur 8 Bits langen Mantisse können die tatsächlichen Intervalllängen von den geplanten um bis zu 0.4% abweichen!

Zur Zeit existieren 2 handverdrahtete Karten, die noch im Einsatz sind, und einige Eagle-geroutete Karten.

Der Messintervall Timer belegt eine Registeradresse des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.5.2 Bedienelemente

LED "Write"             :  Anzeige einer Schreiboperation
LED "Intervall"         :  Anzeige Messintervall aktiv
BNC-Buchse "Intervall"  :  Messintervall Ausgang, TTL, pos. Logik
BNC-Buchse "Intervall\" :  Messintervall Ausgang, TTL, neg. Logik
BNC-Buchse "ext. Takt"  :  externer Takt Eingang, TTL
BNC-Buchse "ext. Start" :  externer Start Eingang, TTL, pos. Logik

4.5.3 Programmierung

Register 0 out:       Timer Datenwort (16 Bits)
        Bit 15        1 = externer Takt
        Bit 14        1 = nur externer Start
        Bits (12..8)  Exponent E = 0...31
        Bits (7..0)   Mantisse M = 0...255
Zeitintervall = M * 2^E * T
        T (Taktperiode) = 1 us für internen Takt
Berechnung von M und E für ein Intervall mit x Takten:
        ( ld(x) = ld(10) * lg(x) = 1 / lg(2) * lg(x) )
        E = MAX(0, INT( ld(x)) -7)
        M = INT(x / 2^E)        (max .8% Abweichung)
        M = INT(x / 2^E + 0.5)  (max .4% Abweichung)
Beispiele für internen 1 MHz Takt:

Intervall            M   E    Datenwort
1us (1 us)          1   0     0x0001
10us (10 us)        10   0     0x000a
100us (100 us)      100   0     0x0064
1ms (1 ms)        250   2     0x02fa
10ms (9.984 ms)    156   6     0x069c
100ms (99.84 ms)    195   9     0x09c3
1s  (0.999424 s)  244  12     0x0cf4
10s  (10.02701 s)  153  16     0x1099
Interner/externer Start:
Bit 14    ext Start    Write    Intervall-Start
0          H          ja          ja
0          L          ja         nein
0         L->H        --          ja
1          L          --         nein
1          H          --         nein
1         L->H        --          ja

4.6 Programmierbare Zeitbasis

4.6.1 Aufgabe, Funktion

Diese Zeitbasis-Karte wurde von G. Hoffmann entworfen. Sie wird in den Labors 017 und SI zur Registrierung der Messzeit pro Kanal eingesetzt.

Sie stellt den 2^n-fach untersetzten (n=0..15, programmierbar) internen 1 MHz Quarztakt am Ausgang zur Verfügung.

Es existieren verschiedene Layouts dieser Karte: 36/88, 2/89, 15/97

Die Programmierbare Zeitbasis belegt eine Registeradresse des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.6.2 Bedienelemente

     LED "Write"       :  Anzeige einer Schreiboperation
     LEDs "8 4 2 1"    :  Anzeige von "n" der 2^n-Taktuntersetzung
     BNC-Buchse "Out"  :  untersetzter Zeittaktausgang, TTL

4.6.3 Programmierung

     Register 0 out:       Zeitbasis Datenwort (16 Bits)
             Bits (3..0)   n=0..15 für Untersetzung 1/2^n des 1MHz Taktes

4.7 Interrupt Eingabe

4.7.1 Aufgabe, Funktion

Diese Karte wurde von G. Hoffmann entworfen. Sie wird in den Labors 017 und SI bei den Scan-Experimenten zur Synchronisierung des Experimentablaufs durch Interrupt eingesetzt.

Das Experiment startet die Karte mit dem Startimpuls (Start-Eingang). Gleichzeitig wird der Busy-In-Eingang mit der Summe aller relevanter Busy-Signale versorgt. Erst wenn das Summen-Busy verschwunden ist wird die Karte aktiv und gibt sowohl einen Interrupt-Wunsch an den Rechner ein, als auch ein Steuersignal (Read/Reset) an das Experiment aus.

Je nach Konfiguration (Steckbrücke J2) gibt die Karte nur einen Interrupt-Impuls an den Rechner oder sie speichert den Interrupt-Wunsch bis er durch eine Leseoperation gelöscht wird. Letztere Konfiguration wird benötigt, wenn mehrere Interrupt-Quellen existieren und durch Lesen der zugehörigen Register herausgefunden werden muss, welcher Interrupt aktiv war. Ein Interrupt steht an und wird gelöscht, wenn beim Lesen das Daten-Bit 0 gesetzt ist.

Es existieren verschiedene Layouts dieser Karte: 01.08.94, 11/97

Die Interrupt-Karte belegt eine Registeradresse des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.). Sie kann jedoch im IT-Puls-Modus ohne Address-Decoder betrieben werden.

4.7.2 Bedienelemente

     LED "Select"           : Anzeige, dass die Karte adressiert ist
     LED "Interrupt"        : Anzeige für einen anstehenden Interrupt
     LED "Busy"             : Anzeige des Busy-Signals vom Experiment
     BNC-Buchse "Start"     : Eingabe des Startsignals, TTL, pos. Logik
     BNC-Buchse "Read/Reset": Ausgabe eines Steuersignals für das Experiment,
                              TTL, 100ns, pos. Logik
     BNC-Buchse "Busy\ in"  : Eingabe des Busy-Signals vom Experiment,
                              TTL, neg. Logik
     BNC-Buchse "Busy out"  : Ausgabe des Busy-Signals vom Experiment,
                              TTL, pos. Logik
     Steckbrücke J2/1-2     : Die IT-Karte meldet mit einem IT-Puls einen
                              Interrupt bei der Routing-Steuerung an. Die
                              IT-Karte benötigt dann keine Address-Decoder-
                              Karte und der IT kann nicht gelesen werden.
     Steckbrücke J2/2-3     : Die IT-Anmeldung wird auf der IT-Karte
                              gespeichert und solange an die Routing-Steuerung
                              gemeldet, bis er durch einen Read auf Register 0
                              (Bit 0) gelesen und gelöscht wird.

4.7.3 Programmierung

     Register 0 in:  Lesen und Löschen des Interrupts
             Bit 0   1 = es steht ein Interrupt an

4.8 Programmierbare Totzeit

4.8.1 Aufgabe

Gelegentlich kann die exakte Totzeit einer Apparatur nicht bestimmt werden, so dass notwendige Korrekturrechnungen nicht möglich sind. In diesem Falle empfiehlt sich das Vorschalten einer gut bekannten künstlichen Totzeit, die über alle anderen Totzeiten der Apparatur dominiert, und deshalb als einzige in die Korrektur eingeht.

Manche Detektoren (z.B. Channeltrons) neigen dazu, nach einem registrierten Ereignis weitere Impulse abzugeben, durch die eine Messung erheblich verfälscht werden kann. Durch eine Totzeit können solche Nachimpulse unterdrückt werden. Dabei ist jedoch zu beachten, dass eine nicht-paralysierende Totzeit wie man sie z.B. mit einem Pulse-Strecher realisieren könnte in einem solchen Falle nicht ausreichend ist.

Beachten Sie dazu den Abschnitt ⟨undefined⟩ [Anwendungen], Seite ⟨undefined⟩.

Zur Untersuchung des Ereignisstromes auf Totzeiten, Nachimpulse usw. existiert eine Interface-Karte zum Messen der Abstandsverteilung von Impulsen, zu der es eine Anleitung in der Data-Routing-Funktionsbeschreibung gibt: HTML-Version

(http://www.strz.uni-giessen.de/ExpHelp/datarout/datarout.html), PDF-Version
(http://www.strz.uni-giessen.de/ExpHelp/datarout/datarout.pdf).

4.8.2 Funktion

Die Totzeitkarte kann sowohl über das Control-Routing als auch manuell (Jumper) programmiert werden in Schritten der Taktperiode. Für die zur Zeit zur Verfügung stehenden Logikbausteine sind Takte bis zu 40 MHz möglich. Standard ist 20 MHz. Es genügt nicht, den Quarzoszillator auszutauschen, der Logikbaustein muss auch umprogrammiert werden, da dieser sonst einen falschen Status meldet. Bei manueller Programmierung spielt dies keine Rolle, die Software würde aber u.U. eine falsche Totzeit einstellen.

Die Totzeitkarte liefert wahlweise eine paralysierende oder nicht-paralysierende Totzeit.

• paralysierende Totzeit:

Ereignisse, die in die Totzeit eines Vorgängers fallen, gehen verloren und starten die Totzeit neu.

• nicht-paralysierende Totzeit: Ereignisse, die in die Totzeit eines Vorgängers fallen, gehen verloren, ohne Auswirkung auf die Totzeit.

Da die Totzeitkarte digital mit einem Quarztakt T arbeitet ist die Totzeit auf +-T/2 unscharf im Mittel jedoch recht genau (besser 10**-3) (Siehe Abschnitt 4.8.7.1 [Mittlere Totzeit], Seite 28.).

Die Totzeitkarte belegt drei Registeradressen des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.8.3 Bedienelemente

LED "Select":  leuchtet, wenn eines der drei Register adressiert wird
BNC-Buchse "In":  Signaleingang (TTL, pos. Logik)
BNC-Buchse "Out":  Signalausgang (TTL, pos. Logik)
BNC-Buchse "Lost":  Ausgang für Totzeitverluste (TTL, pos. Logik)

BNC-Buchse "Deadtime":  Ausgang für Totzeitsignal (TTL, pos. Logik)
manuelle Programmierung: Siehe Abschnitt 4.8.4 [Programmierung], Seite 22.

4.8.4 Programmierung

Control-Routing Programmierung: (dazu muss Jumper J15 entfernt werden!)

     Register 0 out:       Command
             out 0x4000 -> paralysierende Totzeit
             out 0x0000 -> nicht-paralysierende Totzeit
     Register 0 in:        Status
             Bit 14        1 = paralysierende Totzeit
             Bits (11..4)  Taktfrequenz [MHz]
             Bits (3..0)   Anzahl der Timer Bits (TBITS)
     Register 1 out:       Ausgangs-Puls-Länge
             Bits (TBITS-1..0)  Länge Lp in Taktperioden [T]
                  totale mittlere Pulslänge = (Lp + 2.5) * T
     Register 2 out:       Länge der Totzeit
             Bits (TBITS-1..0)  Länge Ld in Taktperioden [T]
                  totale mittlere Totzeitlänge = (Ld + 3.5) * T

Jumper Programmierung: (x = Jumper set, - = Jumper not set)

     J15        x    manuelle (Jumper) Programmierung
     J14        x    paralysierende Totzeit
                -    nicht-paralysierende Totzeit
     J(13..0)   x    Länge der Totzeit Ld in Taktperioden [T]
                     (z.Z. nur J(9..0) belegt!!! ISP-Chip voll)
                         totale mittlere Totzeit = (Ld + 3.5) * T
                         totale mittlere Pulslänge = (Ld/2 + 2.5) * T

Pulslänge und Totzeit sind um +-0.5 T unscharf! (Siehe Abschnitt 4.8.7.1 [Mittlere Totzeit], Seite 28.)

4.8.5 Anwendungen

Die folgenden Beispiele wurden mit Monte-Carlo-Simulation gerechnet, da für echte Messungen keine ausreichend gute Poisson-verteilte Ereignisraten zur Verfügung standen. Der Versuch das Ganze mittels Faltungsintegralen zu berechnen ist ebenfalls an der Komplexität der Probleme gescheitert.

Die Abstandsverteilung von Poisson-verteilten Ereignissen ist eine abfallende Exponentialfunktion, in logarithmischer Darstellung also eine Gerade. Eine solche Verteilung lässt sich aus Zufallszahlen leicht herstellen, sodass eine Monte-Carlo-Rechnung ein bequemes Werkzeug zur Untersuchung der Auswirkungen einer Totzeit bei den verschiedenen Anwendungen ist.

Mehr zu Totzeitverlusten und Abstandsverteilungen finden Sie in den Zählratenstatistik-

Betrachtungen: HTML-Version (http://www.strz.uni-giessen.de/ExpHelp/statistik/statistik.html),
PDF-Version (http://www.strz.uni-giessen.de/ExpHelp/statistik/statistik.pdf).

4.8.5.1 Dominierende Totzeit

Hier soll untersucht werden, in wiefern eine dominierende Totzeit geeignet ist, unbekannte oder wechselnde Totzeiten so zu überdecken, dass Totzeitkorrekturrechnungen möglich werden.

Wie man mit Hilfe der folgenden Grafik leicht einsieht, kann eine solche dominierende Totzeit nur näherungsweise funktionieren.

Für eine nicht-paralysierende dominierende Totzeit ergibt sich folgendes Verhalten: sobald ein Ereignis in dem Bereich T1-T0 bis T1 eintrifft wird die effektive Totzeit über die dominierende Totzeit hinaus verlängert. Die Totzeitverluste werden daher größer sein als die dominierende Totzeit erwarten lässt.

Bei einer paralysierenden dominierenden Totzeit verhält es sich gerade umgekehrt: fällt ein Ereingnis in den Bereich 0 bis T0 so wird keine neue Totzeit angestoßen, die effektive Totzeit wird also zu kurz und die Totzeitverluste werden geringer als erwartet.

Mit einer bekannten primären Totzeit lassen sich diese Korrekturen natürlich berechnen. Aber eine dominierende Totzeit kommt ja gerade dann zum Einsatz wenn dies nicht der Fall ist. Eine Rechnung kann aber zeigen in welcher Größenordnung diese Korrekturen zu erwarten sind und wie man sie eventuell minimieren kann. Wie Simulationen gezeigt haben, sind die Korrekturen für eine nicht-paralysierende dominierende Totzeit deutlich kleiner als für eine paralysierende.

     R:  Eingangsrate vor allen Totzeiten
     r:  Ausgangsrate nach den Totzeiten
     r': Ausgangsrate bei T0 = 0
     T0: primäre Totzeit
     T1: dominierende Totzeit (nicht-paralysierend V1=R*T1)
     V0: zusätzliche Totzeitverluste durch T0 bei T0 < T1
     V1: Totzeitverluste durch T1 bei T0 = 0

Nicht-paralysierende dominierende Totzeit Die primäre Totzeit wird ebenfalls als nicht-paralysierend vorausgesetzt.

Die Totzeitverluste V1 im Intervall T1 sind

     V1 = R*T1
     r' = 1 / (1 + V1)

Mit der Wahrscheinlichkeit R*T0 trifft ein Ereignis im Intervall T1-T0 bis T1 ein und verlängert die Totzeit im Mittel um T0/2. Die zusätzlichen Totzeitverluste ergeben sich damit zu

     V0 = (R*T0)^2 / 2 für  0 < T0 <= T1/2

Sobald T0 größer als T1/2 wird muss man allerdings etwas anders rechnen und erhält

V0 = (R*T0)^2 / 2 * [-(T1/T0)^2 + 4T1/T0 -3] für T1 >= T0 >= T1/2

Der zusätzliche Term ist 1 für T0 = T1/2 und fällt monoton auf 0 für T0 = T1, d.h. man kann die Korrektur V0 klein halten wenn man T0 = T1 anstrebt. Als Abschätzung für V0 nach oben kann man (R*T0)^2 / 2 verwenden. Da die Korrektur glücklicherweise quadratisch eingeht, ist sie in vielen Fällen mit R*T0<<1 vernachlässigbar.

Die totalen Totzeitverluste betragen

V = V1 + V0

Mit Hilfe der Verlustraten r*V0 und r*V1 berechnet sich die Ausgangsrate r und durch Umkehr die Totzeitkorrekturformel zu

r = R - r*V = R / (1 + V1 + V0) = R / (1 + R*T1 + Z*(R*T0)^2/2)
R = (1 - r*T1) / Z*r*T0^2 * (1 - SQRT[1 - 2*Z*(r*T0)^2 / (1 - r*T1)^2]
mit Z = 1                        für T1/2 >= T0 >= 0
    Z = [-(T1/T0)^2 + 4T1/T0 -3] für T1 >= T0 >= T1/2

Die folgende Rechnung zeigt welche zusätzlichen Totzeitverluste durch T0 zu erwarten sind. Es wird eine obere Grenze für diese Korrektur K abgeschätzt.

r = (1 + K) * r'
K = (r - r') / r' = V0 / (1 + V1 + V0)

K erreicht bei festem R und T1 ein Maximum bei

T0 = 2/3*T1
Kmax = 2/3 * (R*T1)^2 / (1 + R*T1)
RT1  1+Kmax     r'      r     R-r'    r'-r
0.1  0.9940  0.9091  0.9036  0.0909  0.0055
0.2  0.9783  0.8333  0.8152  0.1667  0.0181
0.3  0.9559  0.7692  0.7353  0.2308  0.0339
0.4  0.9292  0.7143  0.6637  0.2857  0.0506
0.5  0.9000  0.6667  0.6000  0.3333  0.0667
0.6  0.8696  0.6250  0.5435  0.3750  0.0815
0.7  0.8388  0.5882  0.4934  0.4118  0.0948
0.8  0.8084  0.5556  0.4491  0.4444  0.1065
0.9  0.7787  0.5263  0.4098  0.4737  0.1165
1.0  0.7500  0.5000  0.3750  0.5000  0.1250

Paralysierende, dominierende Totzeit Rechnung schwierig, noch ungelöst....

Simulationsrechnungen Die folgenden Grafiken sind Ergebnisse von Monte-Carlo-Simulationen. Sie zeigen die Abstandsverteilungen von Poisson-verteilten Ereignissen nach Durchlaufen von ein bzw.

Kapitel 4: Standard-Interface-Karten 25 zwei Totzeiten. Wie man sieht haben Totzeiten einen markanten Einfluss auf die Abstandsverteilung und sind nicht nur ein Abschneiden von kurzen Abständen.

4.8.5.2 Beseitigen von Nachimpulsen

4.8.6 Messungen

Der programmierbare Mittelwert der Totzeit ist durch Signallaufzeiten fehlerbehaftet. Der genaue Wert kann mit Doppelpulsgenerator, Oszillograph und passendem Zeitnormal bestimmt werden: Messung der tatsächlichen Totzeit mit einem Doppelpulser (Dez. 2001) Das Scope wurde mit dem Quarz auf dem Deadtime-Board geeicht.

10 MHz Clock

     Logikbaustein : ispLSI1032E-70
     Clock         : 10 MHz
     Doppelpulsrate: 15.3 kHz
               Doppelpulsabstand       (Out - In/2) / In/2
             1       300ns                   .000
             2       320ns                   .130
             3       340ns                   .316
             4       360ns                   .518
             5       380ns                   .718

        6       400ns                   .904
        7       420ns                  1.00
Fit (Origin) Werte 2 - 6 mit y = a0 + a1 * x
a) a0 = -3.0828 +- .00413
a1 = .01 fest
y = .5  =>  x = 358.3 +- .4
b) a0 = -2.9928 +- .03141
a1 = .00975 +- .00009
y = .5  =>  x = 358.3

Totzeit= n * T + 3.5 * T + 8.3ns; T = 100ns; n = prog. Zeit

20 MHz Clock

Logikbaustein : ispLSI1032E-70
Clock         : 20 MHz
Doppelpulsrate: 15.3 kHz
(unter 200ns löste der In-Zähler (U/D-Zähler) die Doppelpulse
nur noch teilweise auf, weshalb diese Werte zu hoch ausfallen müssen!)
          Doppelpulsabstand       (Out - In/2) / In/2
        1       150ns                   .000
        2       160ns                   .045
        3       170ns                   .166
        4       180ns                   .341
        5       190ns                   .572
        6       200ns                   .805
        7       210ns                  1.00
Fit (Origin) Werte 2 - 6 mit y = a0 + a1 * x
a) a0 = -3.2142 +- .01798
a1 = .02 fest
y = .5  =>  x = 185.7 +- .9
b) a0 = -3.081 +- .25353
a1 = .01926 +- .0014
y = .5  =>  x = 185.9
Fit (Origin) Werte 2 - 6 mit y = a0 + a1 * x + a2 * x**2
a) a0 = 3.359 +- 1.08274
a1 = -.05274 +- .01209
a2 = .0002 +- .00003
y = .5  =>  x = 187.4

Totzeit= n * T + 3.5 * T + 10.7ns; T = 50ns; n = prog. Zeit

4.8.7 Totzeit-Rechnungen

siehe auch Zählratenstatistik: HTML-Version (http://www.strz.uni-giessen.de/ExpHelp/statistik/statistik.html),
PDF-Version (http://www.strz.uni-giessen.de/ExpHelp/statistik/statistik.pdf).

4.8.7.1 Mittlere Totzeit

Da die Totzeitkarte digital mit einem Quarztakt T arbeitet ist die Totzeit auf +-T/2 unscharf. Der Mittelwert liegt etwa bei 0.5T und ist Zählraten abhängig, da eine vorausgehende Totzeit immer mit einem Clock-Tick endet und der Abstand zweier aufeinanderfolgender Pulse eine R * exp(-Rt) -Verteilung hat.

Rechnung für das erste Intervall nach einer Totzeit:

     Zeit:               t
     Clock-Periode:      T
     Ereignisrate:       R
     Abstandsverteilung: D(t) = R * exp(-Rt)
     Totzeitmittel:
             M = Int[0-T]((T - t) * D(t))dt / Int[0-T](D(t))dt
                 Int[0-T](T * D(t))dt    = T * (1 - exp(-RT))
                 Int[0-T](-t * D(t))dt   = -T / RT * (1 - (RT + 1) * exp(-RT))
                 Int[0-T](D(t))dt        = 1 - exp(-RT)
             M = T * {1 - [1 - (RT + 1) * exp(-RT)] / [RT * (1 - exp(-RT)]}
     RT -> 0:  M -> 1/2 * T
     RT -> unendl.:  M -> 1 * T
     RT << 1.0:  M ~ (.5 + R*T/12) * T
     FM = (M - .5*T)/.5*T = R*T/6
     RT = .01:  M = .500833 * T
     RT = .1:  M = .50833 * T
     RT = 1.0:  M = .5820 * T

Die Korrekturen sind vernachlässigbar; z.B. 10MHz Clock; 1MHz Rate: 0.8ns Abweichung. Da die Abstandsverteilung der Pulse eine exp(-Rt) - Verteilung ist, errechnet sich für M bei Eintreffen des nächstfolgenden Pulses in eine der nachfolgenden Clock-Perioden n der gleiche Wert:

     D'(t) = R * exp(-R(t+nT)) = D(t) * exp(-RnT)
     M = Int[0-T]((T - t) * D(t))dt / Int[0-T](D(t))dt

Anm. zur Abstandsverteilung von zufälligen (Poisson-verteilten) Ereignissen: Man erhält sie als negative Änderung der Wahrscheinlichkeit, dass von 0 bis t kein Ereignis eintrifft: ???

     D(t) = -d(exp(-Rt) / dt = R * exp(-Rt)

4.8.7.2 Korrekturformeln für nicht-paralysierende Totzeit

Die Totzeit-Korrekturformeln für konstante, nicht-paralysierende Totzeit sind:

     Zeit:            t

Clock-Periode:   T
In-Rate:         R
Out-Rate:        r
Totzeitverluste: v
Totzeit:         Z
    v = r * R * Z
    R = r + v = r / (1 - r*Z)
    r = R / (1 + R*Z)

Für die unscharfe Totzeit, wie sie die Totzeitkarte liefert, ist eine Mittelung über die auftretenden Totzeiten nötig. Es werden gleichverteilte Totzeiten angenommen:

    r' = int[Z1,Z2](r)dZ / int[Z1,Z2]dZ
            int[Z1,Z2](r)dZ = ln(1 + R*Z2) - ln(1 + R*Z1)
            int[Z1,Z2]dZ = T
    r' = 1/T * ln[(1 + R*Z2)/(1 + R*Z1)]        (Z1 = Z-T/2; Z2 = Z+T/2)
       = 1/T * ln[(1 + R*Z + R*T/2) / (1 + R*Z - R*T/2)]
       = 1/T * ln[(1 + R*T/2/(1 + R*Z)) / (1 - R*T/2/(1 + R*Z))]
       = 1/T * [ln(1 + r*T/2) - ln(1 - r*T/2)]
rT << 1:    r' ~ r * (1 + (r*T)**2 /12)
            Fr'= |(r'-r)/r| = (r*T)**2 /12 = (R*T/(1 + R*Z))**2 /12
rT -> 0:    r' -> r
    R' = (exp(r*T) - 1) / [(Z + T/2) - (Z - T/2)*exp(r*T)]
       = (1 - exp(-r*T)) / ((Z + T/2)*exp(-r*T) - (Z - T/2))
rT << 1:    R' ~ R/(1 - (r*T)**2 /12)
            FR'= |(R'-R)/R| = (r*T)**2 /12 = (R*T/(1 + R*Z))**2 /12
rT -> 0:    R' -> R

Die Korrekturen sind vernachlässigbar klein; z.B. 10MHz Clock; Rate R=1MHz; Totzeit Z=1us: Fr’ = FR’ = .02%

4.8.7.3 Korrekturformeln für paralysierende Totzeit

Die Totzeit-Korrekturformeln für konstante, paralysierende Totzeit sind:

Zeit:            t
Clock-Periode:   T
In-Rate:         R
Out-Rate:        r
Totzeitverluste: v
Totzeit:         Z
    alle mit kürzerem Abstand als Z gehen verloren
    v = R * Int[0,Z](R*exp(-R*Z))
      = R * (1 - exp(-R*Z))
    r = R - v = R * exp(-R*Z)
    R = Umkehrung nur numerisch lösbar und doppeldeutig!

numerische Lösung mit Newton Näherung für R*T < .99:
R = r * (1 + r*Z); /* first approximation */
for(i=0; i<10; i++) {
    f = R * exp(-R*Z) - r;
    d = exp(-R*Z) * (1 - R*Z);
    R = R - f / d;            /* Newton */
}

Für die unscharfe Totzeit, wie sie die Totzeitkarte liefert, ist eine Mittelung über die auftretenden Totzeiten nötig. Es werden gleichverteilte Totzeiten angenommen:

v' = int[Z1,Z2](v)dZ / int[Z1,Z2]dZ
        int[Z1,Z2](v)dZ = R*(Z2-Z1) + exp(-Z2*R) - exp(-Z1*R)
        int[Z1,Z2]dZ = T        (Z1 = Z-T/2; Z2 = Z+T/2)
v' = R*[1- 1/(R*T) * exp(-R*Z) * (exp(R*T/2) - exp(-R*T/2))]
r' = R - v' = R * exp(-R*Z) / (R*T) * (exp(R*T/2) - exp(-R*T/2))
   = r / (R*T) * (exp(R*T/2) - exp(-R*T/2))
Fr'= |(r'-r)/r| =
   = 1/(R*T) * (exp(R*T/2) - exp(-R*T/2)) - 1
RT << 1:   Fr' ~ (R*T)**2 /24

Die Korrekturen sind vernachlässigbar klein; z.B. 10MHz Clock; Rate R=1MHz; Totzeit Z=1us: Fr’ = .04%

R' = Umkehrung nur numerisch lösbar und doppeldeutig!
numerische Lösung mit Newton Näherung für R*T < .99:
R = r * (1 + r*Z);        /* first approximation */
for(i=0; i<10; i++) {
    f = 1/T * exp(-R*Z) *(exp(R*T/2.) - exp(-R*T/2.)) - r;
    d = exp(-R*Z) * (-Z/T*(exp(R*T/2.) - exp(-R*T/2.))
                    + 1/2.*(exp(R*T/2.) + exp(-R*T/2.)));
    R = R - f / d;        /* Newton */
}

4.9 CAN Controller

4.9.1 Aufgabe, Funktion

Der CAN-Bus (Controller Area Network) wurde von Bosch entwickelt zur Datenerfassung und Steuerung in Automobilen. Auf Grund der auerordentlichen Fehlertoleranz des CAN-Protokolls (Hamming Distanz = 6) sowie seiner Fähigkeit zur Selbstarbitrierung und seiner Multi-Master-Fähigkeit eignet er sich auch hervorragend zum Einsatz bei Experimenten und wird inzwischen gelegentlich auch dazu verwendet. Details findet man z.B. unter:

    http://www.can.bosch.com
    http://www.mjschofield.com

Die CAN-Controller-Karte ist ein Interface zwischen dem Routing-Bus und dem CAN-Bus unter Verwendung des CC770 CAN-Controller-Bausteins von Bosch. Die Steuerung erfolgt über einen programierbaren ispLSI1032E Logikbaustein. Für die Initialisierungsdaten enthält die Karte einen EPROM.

Die CAN-Controller-Karte ist nicht galvanisch getrennt vom CAN-Bus, was zur Folge hat, dass alle am CAN-Bus angeschlossenen Einheiten eine solche galvanische Trennung haben sollten, falls sie nicht am gleichen 220V Netz angeschlossen sind und sich nicht räumlich dicht beieinander befinden.

Der CAN-Bus muss an beiden Enden mit 120 Ohm abgeschlossen sein. Auf der CAN-Controller-Karte kann mittels Jumper ein solcher Abschlusswiderstand aktiviert werden, was aber nur sinnvoll ist, wenn die Karte am Ende des Busses angeschlossen ist!

Nachdem die Karte mit Spannung versorgt ist, initialisieren sich zunächst die ispLSI1032E und CC770 Bausteine, danach werden die EPROM-Daten zum CC770 CAN-Controller übertragen. Das initialisieren des CC770 mit den EPROM-Daten kann auch jederzeit mit einen Init-Befehl durch die Software erfolgen. Danach kann die Software die vorausgegangene Initialisierung beliebig ändern, um eine passende Konfiguration zu erhalten. Die Initialisierung kann auch vollstd̈ig durch Software erfolgen, ein EPROM muss dann nicht vorhanden sein.

Die CAN-Controller-Karte belegt zwei Registeradressen des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

4.9.2 Bedienelemente

LED "Select":  leuchtet, wenn eines der zwei Register adressiert wird
9-pol. DSUB-Stecker:  Anschlussstecker für den CAN-Bus
on Board Jumper:  Option für den CAN-Bus-Abschlusswiderstand

4.9.3 Programmierung

Überblick:

     Register 0 out:    Control/Mode/Address output
         Bit 15 == 0        Control output
             Bit 14             Reset command
             Bit 13             Init command
         Bit 15 == 1        Mode/Address output

             Bits 11..08        Mode register
             Bits 07..00        Address register
     Register 0 in:     Status input
             Bit 14             Reset command activ
             Bit 13             Init command activ
             Bit 07             Controller busy
             Bit 06             Interrupt flag
             Bit 03             Error flag
     Register 1 in/out: Data Register
             Bits 07..00        8 bit data transfer
             Bits 15..00        16 bit data transfer (project)

Mode-Register:

                     0               1
     x---     read data      write data    direction of data transfer
     -x--    8 bit data    (16 bit data)   currently only 8 bit transfers
     --x-    fixed addr      incr. addr    address auto increment
     ---x      not used        not used

Address-Register: Der CC770 CAN-Controller von Bosch hat 256 adressierbare Register, deren Funktion in der CC770 Anleitung zu finden ist:

http://www.can.bosch.com/docu/InternetSpecification_CC770.pdf oder
http://www.strz.uni-giessen.de/ExpHelp/cntlrout/InternetSpecification_
CC770.pdf.

Für einen Datentransfer mit einem dieser Register des CC770 ist zuerst das Adressregister der CAN-Controller-Karte mit der gewünschten CC770-Registeradresse zu laden. Im Modus Address-Inkrement wird das Adressregister nach jedem Datentransfer um eins erhöht, um fortlaufende Daten ohne neue Adressierung lesen zu können.

Command-Register:

• Reset command Löscht die Error-Flag

• Init command Veranlasst eine Initialisierung des CC770 CAN-Controllers durch Übertragen der EPROM-Daten zum CC770.

Status-Register:

• Reset command activ

• Init command activ

• Controller busy:

• Interrupt flag:

• Error flag:

4.10 8-Kanal 12-Bit ADC

4.10.1 Aufgabe, Funktion

Die 8-Kanal 12-Bit ADC-Karte wurde entwickelt um die Plattenströme der neuen Elektronenkanone in Labor 017 zu überwachen.

• Die analogen Signale werden über einen 25-poligen SubD-Stecker angeschlossen. Die Steckerbelegung ist auf der Seite des Stromsensor-Einschubs dummerweise anders:

     Kanal       ADC-Board          Sensor-Einschub
                  +     -             +     -
       0          1     2             1    14
       1          3     4             2    15
       2          5     6             3    16
       3          7     8             4    17
       4          9    10             5    18
       5         11    12             6    19
       6         14    15             7    20
       7         16    17             8    21

• Die Schirmung erfolgt auf der Senderseite.

• Die Signale sind auf der Senderseite potentialfrei verdrahtet.

• Die Minus-Signale sind auf dem ADC-Board mit der Analogmasse verbunden.

• Die ankommenden analogen Signale werden durch acht ’Instrumentation Amplifier’ (AD620B) mit Gleichtaktunterdrückung empfangen. Eine Twisted-Pair Kabelverbindung ist deshalb empfehlenswert.

• Die Eingänge der AD620B werden mittels Diode zu den Versorgungsspannungen vor Überspannungen geschützt. Dabei dürfen 6 mA auf Dauer nicht überschritten werden. Um dies bei fehlenden Versorgungsspannungen zu vermeiden, sollten die Zuleitungen mit 10 kOhm in Serie beschalten werden.

• Unbenutzte Eingänge müssen abgeschlossen werden (0 - 1 MOhm), da sich sonst mit der Zeit eine negative Spannung aufbaut, die drastische Fehlmessungen des nachfolgenden ADCs zur Folge hat.

• Als Eingangsspannung sind 0V - +10V, entsprechend 0 - 4095 digital, zugelassen (1 LSB = 2.44 mV).

• Es sind keine Trimmer vorgesehen zur Korrektur von Nullpunkt- und Verstärkungsfehlern. Der Offset lag bei beiden Boards bei ca. -18 mV und ist nicht durch die Spezifikationen der verwendeten Halbleiter zu erklären. Möglicherweise ist er bedingt durch die Leiterbahnführung auf den Boards. Die Genauigkeit der Verstärkung ist gegeben durch die verwendete Widerstandsserie (1%). Durch Korrekturwiderstände könnte sie verbessert werden.

• !!! Warnung !!!

Der MCP3208B ADC Baustein ist mehrfach kaputt gegangen. Vermutlich immer wenn die Karte bei eingeschaltetem Überrahmen gesteckt oder entfernt wurde!

Kapitel 4: Standard-Interface-Karten 34 Ergebnisse eines linearen Fits von 0.5V bis 9V Sollwert für die ADC-Kanäle 0 bis 7.

Gleichung       y = A + B*x [mV]
           ADC-Board1             ADC-Board2
 A0     -20.9   +- 0.3         -21.7   +- 0.4
 B0       2.31  +- 0.05          3.15  +- 0.07
 A1     -21.5   +- 0.4         -21.5   +- 0.4
 B1       0.79  +- 0.08          3.66  +- 0.08
 A2     -21.6   +- 0.4         -21.7   +- 0.3
 B2       2.13  +- 0.07          4.56  +- 0.05
 A3     -21.5   +- 0.4         -21.4   +- 0.3
 B3       3.30  +- 0.07          3.37  +- 0.05
 A4     -21.5   +- 0.4         -22.3   +- 0.2
 B4       3.68  +- 0.07          2.83  +- 0.04
 A5     -22.2   +- 0.4         -22.1   +- 0.3
 B5       0.46  +- 0.08          2.78  +- 0.05
 A6     -21.7   +- 0.4         -22.5   +- 0.4
 B6      -0.26  +- 0.07          2.30  +- 0.07
 A7     -22.2   +- 0.2         -23.5   +- 0.4
 B7       3.21  +- 0.04          3.63  +- 0.07
A0    -17.81631 +- 0.36094
B0      1.17450 +- 0.06755
A1    -17.31443 +- 0.26169
B1      0.59412 +- 0.04897
A2    -17.73253 +- 0.35248
B2      0.98035 +- 0.06596
A3    -18.01110 +- 0.33027
B3      2.23223 +- 0.06181
A4    -18.16802 +- 0.30115
B4      2.63357 +- 0.05636
A5    -17.72569 +- 0.41256
B5     -0.74348 +- 0.07721
A6    -17.79580 +- 0.4471
B6     -1.35637 +- 0.08367
A7    -18.22818 +- 0.37118
B7      2.15909 +- 0.06946
A0    -17.81631 +- 0.36094       -18.42244 +- 0.39507
B0      1.17450 +- 0.06755         2.27836 +- 0.06305
A1    -17.31443 +- 0.26169       -18.43301 +- 0.29590
B1      0.59412 +- 0.04897         3.70690 +- 0.04722
A2    -17.73253 +- 0.35248       -18.09811 +- 0.33390
B2      0.98035 +- 0.06596         3.54296 +- 0.05328
A3    -18.01110 +- 0.33027       -18.55780 +- 0.36544
B3      2.23223 +- 0.06181         2.40070 +- 0.05832
A4    -18.16802 +- 0.30115       -18.51179 +- 0.33983

     B4      2.63357 +- 0.05636         1.82093 +- 0.05423
     A5    -17.72569 +- 0.41256       -18.90742 +- 0.33075
     B5     -0.74348 +- 0.07721         1.89731 +- 0.05278
     A6    -17.79580 +- 0.44710       -19.03359 +- 0.36677
     B6     -1.35637 +- 0.08367         1.44670 +- 0.05853
     A7    -18.22818 +- 0.37118       -19.29849 +- 0.39532
     B7      2.15909 +- 0.06946         2.62594 +- 0.06309

4.10.2 Bedienelemente

     LED "Busy " :  Anzeige einer Schreiboperation
     TP          :  Testpunkt zur Ausgabe von internen Signalen des ispLSI1032E

4.10.3 Programmierung

Die MCP3208-Karte belegt eine Control-Routing-Adresse für Ein/Ausgabe (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.). Mit der Ausgabe der ADC-Kanalnummer startet der ADC die Konvertierung des Analogsignals des angegebenen Kanals. Die Konvertierung benötigt 19 * 600ns = 11400ns. Während dieser Zeit wird das Acknowledge-Signal (AddAcc) für die Adressierung unterdrückt und erneute ADC-Starts werden ignoriert. Eingaben während dieser Konvertierungsphase liefern ungültige Werte und haben als Kennung das höchstwertige Bit gesetzt (0x8xxx). Dies könnte neben der Abfrage des AddAcc-Signals ebenfalls zur Synchronisierung mit dem ADC genutzt werden, es hat sich jedoch gezeigt, dass eine solche Eingabeoperation auf der Analogseite zu einer erheblichen Störung führt (ca. 30mV Schwankungen im Ergebnis). Nach der Konvertierungsphase kann das 12-bit Ergebnis beliebig oft mit einem Eingabebefehl abgerufen bzw. eine neue Konvertierung gestartet werden.

Zur Synchronisation mit dem ADC stehen zwei Statusabfragen zur Verfügung. Die Abfrage des Routing Status ist die bessere Variante da eine Dateneingabe mit Prüfung des Statusbits auf der ADC-Karte zu einer digitalen Störung führt!

     Register Ausgabe:   Ausgabe der Kanalnummer
         Bits 15..04     0
         Bits 03..00     Kanalnummer 0-7
     Register Eingabe:   Status/ADC-Daten Eingabe
         Bit 15 == 1     ADC busy, Daten ungültig
         Bit 15 == 0     ADC ready, Daten gültig
         Bits 11..00     ADC Daten
     Routing Status Eingabe:
         (Routing Status & 0x0008) != 0 -> ADC busy, Daten ungültig
         Diese Statusabfrage ist nur bei Verwendung einer neuen
         Address-Decoder-Karte (EW 3/04) möglich da die alten
         ebenfalls dieses Bit bedienen.
         (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.)

4.10.4 Analoge Bauteile

Die acht Eingänge sind mit dem AD620B Instrumentation Amplifier bestückt:

                    Typ     Max
Nonlinearity        10      95   ppm
Gain Error         0.10    0.15  %
Input Offset        15      50   uV
Output Offset      200     500   uV

Die Konvertierung erfolgt mit einem 12-bit, 8-Kanal ADC MCP3208B:

                                Typ     Max
Integral Nonlinearity        +-0.75    +-1   LSB
Diffenrential Nonlinearity   +-0.5     +-1   LSB
Offset Error                 +-1.25    +-3   LSB
Gain Error                   +-1.25    +-5   LSB
( 1 LSB = 2.4414 mV)

4.11 2-fach 16-Bit DAC

4.11.1 Aufgabe, Funktion

Die 2-fach 16-Bit DAC-Karte wurde entwickelt zur Steuerung der Spannungen der verschiedenen Platten der neuen Elektronenkanone in Labor 017. Sie ist kein Control-Routing-Board und gehört deshalb eigentlich nicht in diese Abteilung der Hardware-Beschreibungen.

Die Ausgangsspannung ist 0V - +10V, entsprechend 0 - 65535 digital.

Die Ausgänge können mit maximal 15 mA belastet werden.

Die DAC-Karte besitzt ein eigenes Netzteil und benötigt nur 230V AC zu ihrem Betrieb. Sie wird über Lichtleiter angesteuert und ist deshalb für einen Betrieb auf höherem Potential geeignet. Als passender Lichtleitersender wurde das PSO2-Control-Routing-Board entwickelt (Mode = new). Die Datenübertragung benötigt ca. 13us. Der neue Spannungswert wird am Ende der Übertragung aktiviert.

Die DAC-Karte wird vorzugsweise ganz in der Nähe der zu steuernden Hochspannungsnetzgeräte platziert damit sich nur eine kurze Leitungslänge für die Steuersignale ergibt.

Es sind keine Trimmer vorgesehen zur Korrektur von Offset-Fehlern da die Bausteine ausreichend präzise sein sollten. Im Test haben sich dann jedoch Offset-Fehler bis 30mV gezeigt, die als Ursache eine ungeschickte Leiterbahnführung des analogen Grounds im Layout haben. Deshalb war es nötig mit fliegender Verdrahtung den analogen Ground an zwei strategisch wichtigen Stellen zu verbessern. Mit dieser Aktion halten sich die Offset-Fehler innerhalb +-2mV. Bessere Werte sind noch zu erreichen mit Trimmern an den OpAmps AD820. Für das DAC-Board 5 wurde dies durchgeführt mit festen Widerstandswerten da die Offset-Fehler nach der Verdrahtungskorrektur noch zu groß waren.

Die Verstärkung wurde mit Korrekturwiderständen justiert da die verwendete Widerstandsserie nicht ausreichend präzise ist (1%).

     Testdaten der DAC-Boards, Abweichungen vom Sollwert
     Sollwerte 0    1    2    4    6    8    9   10   V
     --------------------------------------------------
     DAC1/0   -1   -2   -2   -2   -2   -2   -2   -2  mV
     DAC1/1   -1   -2   -2   -2   -2   -2   -2   -2  mV
     DAC2/0    0    0    0    0    0    0    0    0  mV
     DAC2/1   +2   +2   +2   +2   +2   +2   +2   +2  mV
     DAC3/0   +2   +2   +2   +2   +2   +2   +2   +2  mV
     DAC3/1    0    0    0    0    0    0    0    0  mV
     DAC4/0    1    0    1    0    0    0    0   -1  mV
     DAC4/1    1    1    1    0    0    0   -1   -1  mV
     DAC5/0    0   -1   -1   -1   -1   -1   -1   -1  mV
     DAC5/1    0    0    0    0    0    0    0    0  mV

Laut Datenblatt sollten die DACs in ca. 2 us ihren Endwert erreichen. Im Test zeigte sich jedoch, dass sie zunächst ca. 10% überschwingen (auch zu negativen Werten!) um sich dann mit einer Halbwertszeit von ca. 50us exponentiell dem Sollwert zu nähern (Ursache unklar). Dieses Überschwingen konnte kompensiert werden durch 1.5nF * 30KOhm = 45us in der Rückkopplung des AD820. Die Halbwertszeit reduzierte sich damit auf ca 25us. Nach 250us ist die Abweichung vom Sollwert also nur noch 0.0001.

Die Konvertierung erfolgt mit zwei 16-bit seriellen DACs AD5541CR mit folgenden Eigenschaften:

                               Typ     Max
Relative Accuracy            +-0.5    +-1     LSB
Diffenrential Nonlinearity   +-0.5    +-1     LSB
Zero Code Error              +-0.3    +-0.7   LSB
Gain Error                   +-0.5    +-2     LSB
Voltage Settling Time          1              us
( 1 LSB = 0.15259 mV)

Die nachfolgende Verstärkung erfolgt mit AD820A Op-Amps mit folgenden Eigenschaften:

                   Typ    Max
Offset             0.5     3   mV
Offset Drift       2           uV/K
Output Current            15   mA

4.11.2 Bedienelemente

LWL-Buchse 0     :  Lichtleiterempfänger Kanal 0
LWL-Buchse 1     :  Lichtleiterempfänger Kanal 1
DAC0 Stecker OUT :  Kanal 0 analoges Ausgangssignal
DAC0 Stecker GNDA:  Kanal 0 analoge Masse
DAC1 Stecker OUT :  Kanal 1 analoges Ausgangssignal
DAC1 Stecker GNDA:  Kanal 1 analoge Masse
TP 0 word        :  Triggersignal für Start von serieller Eingabe Kanal 0
TP 0 bit         :  Triggersignal für Bits von serieller Eingabe Kanal 0
TP 1 word        :  Triggersignal für Start von serieller Eingabe Kanal 1
TP 1 bit         :  Triggersignal für Bits von serieller Eingabe Kanal 1
230 V Netzspannung an Steckerleiste VG32AC:
24 a,c   Nullleiter
28 a,c   230V Leiter
32 a,c   Schutzleiter

4.11.3 Programmierung

Die DAC-Karte wird über zwei Lichtleiter programmiert. Ein geeigneter LWL-Sender ist die PSO2-Karte (Siehe Abschnitt 4.1 [Serielle Ausgabe (PSO2)], Seite 8.).

4.11.4 Probleme und Lösungen

Einschwingverhalten Laut Datenblatt sollten die DACs in ca. 2 us ihren Endwert erreichen. Im Test zeigte sich jedoch, dass sie zunächst ca. 10% überschwingen (auch zu negativen Werten!) um sich dann mit einer Halbwertszeit von ca. 50us exponentiell dem Sollwert zu nähern (Ursache unklar). Dieses Überschwingen konnte kompensiert werden durch 1.5nF * 30KOhm = 45us in der Rückkopplung des AD820. Die Halbwertszeit reduzierte sich damit auf ca. 25us. Nach 250us ist die Abweichung vom Sollwert also nur noch 0.0001.

Störungen beim Abschalten der PSO2-Karte Nachdem zunächst versucht wurde, möglichst das Hofmann-Protokoll zu verwenden, zeigte sich, dass beim Abschalten des Überrahmens die PSO-Karte für einige ms periodische Signale sendet, die im DAC zu Zufallswerten führen.

Wegen dieser Oszillationen beim Abschalten wurde das Übertragungs-Protokoll nochmals völlig überarbeitet und hat nun mit dem ursprünglichen Hofmann-Protokoll keine Verwandschaft mehr (Siehe Abschnitt 4.1 [Serielle Ausgabe (PSO2)], Seite 8.).

Verhalten beim An-/Abschalten der DAC-Karte Beim Anschalten der DAC-Karte sollte der AD5541CR laut Datenblatt einen Reset durchführen. Möglicherweise klappt dies in seltenen Fällen nicht immer. Beim Abschalten der DAC-Karte geht der Ausgang kurzzeitig zu negativen Werten (ca. -5V) um nach ca. 400ms 0V zu erreichen. Mit einer Diode am Ausgang können diese negativen Werten auf -0.6V/200ms begrenzt werden. Eine gute Idee ist auch, dafür zu sorgen, dass die DACs immer nur gemeinsam mit den Hochspannungsgeräten abgeschaltet werden.

Durchlaufverzögerung des LWL-Empfängers SFH551V Der SFH551V ist relativ zum Bit-Takt (400ns) ziemlich lahm. Insbesondere störend für das Timing sind die unterschiedlichen Durchlaufverzögerungen für Licht-an und Licht-aus, die zu einer Verkürzung des elektrischen Licht-aus Signals um bis zu max. 150ns führen, je nach Intensität des LWL-Signals und Temperatur. Das Timing kann bis zu ca. 190ns verkürzte Bits erkennen, d.h. ein Bit muss mindestens 210ns lang sein, gemessen am Ausgang des SFH551V. Im Zweifel hilft ein längeres LWL-Kabel. Auf einer PSO-Karte musste ein LWL-Sender ausgetauscht werden da er zu hell war und den SFH551V völlig übersteuerte.

5 Spezielle Interface-Karten

An dieser Stelle sind Interface-Karten verzeichnet, die nur als Einzelexemplare für ein spezielles Labor/Experiment entwickelt wurden. Details findet man möglicherweise in den Unterlagen der zugehörigen Experimente. Diese Aufstellung enthält auch Oldies, in der Hoffnung, sie eines Tages wieder recyclen zu können.

5.1 Schrittmotor-Interface (Labor 016)

5.1.1 Aufgabe, Funktion

Interface zu einer Eigenbau-Schrittmotorsteuerung, mit der ein Schlitz durch die Strahlen gefahren wird zur Strahlprofilanalyse (IIF-Messprogramm).

Mit einem Befehl können maximal 65565 Schritte in vorwärts oder rückwärts Richtung ausgeführt werden. Die Schrittgeschwindigkeit wird von der Schrittmotorsteuerung vorgegeben.

Der Schrittmotor wird angehalten bei folgenden Ereignissen:

• die vorgegebene Anzahl der Schritte ist abgearbeitet

• die untere Grenze der Schlitzbewegung ist erreicht

• die obere Grenze der Schlitzbewegung ist erreicht

• durch ein Reset-Kommando

Das Schrittmotor-Interface belegt vier Registeradressen des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

5.1.2 Bedienelemente

Das Schrittmotor-Interface enthält nur einen 7-poligen Phonostecker zum Anschluss der Schrittmotor-Steuerung:

     Pin  Signal
      1    !Schrittmotor online (in)
      2    !Alarm Obergrenze (in)
      3    !Alarm Untergrenze (in)
      4     Schrittmotor-Takt (in)
      5    !Start Motor (out)
      6    !Hochlauf (out)
      7     Masse

5.1.3 Programmierung

     Register 0:           Reset-Kommando (0 Bits)
     Register 1 out:       Anzahl der Schrittmotorschritte (16 Bits)
                           im 1-Komplement:
                             0 -> 0xff
                             1 -> 0xfe
     Register 2 out:       Start-Kommando, Richtung (1 Bit)

       Bit 0         0 = Schlitz nach unten
       Bit 0         1 = Schlitz nach oben
Register 3 in:        Status-Eingabe
       Bit 15        1 = Schrittmotor ist online
       Bit 14        1 = Schlitz am oberen Limit
       Bit 13        1 = Schlitz am unteren Limit
       Bit 12        1 = busy, Schrittmotor läuft

5.2 Probenwechsler-Steuerung (Schacht)

!!! unvollständig, mehr im Ordner "Probenwechsler" !!!

5.2.1 Aufgabe, Funktion

Die Probenwechsler-Steuerung besteht aus zwei Control-Routing-Karten. Sie wurde entwickelt zur Steuerung des Probenwechslers von H. Schacht (s.h. Diplomarbeit H. Schacht: Ein automatisierter Gamma-Messplatz für Photonenaktivierungsanalyse (1992)).

Der Probenwechsler transportiert mit Hilfe von 4 Schrittmotoren die Proben aus einem Magazin vor den Detektor und wieder zurück. Ein weiterer Motor bedient ein Eingangstor zur Bleiburg, in der gemessen wird. Über 9 Sensoren wird der Transport und der Status des Eingangstores überwacht.

Die Probenwechsler-Steuerung belegt sechs Registeradressen des Address-Decoders (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

Es existiert nur eine handverdrahtet Version der Karten.

5.2.2 Bedienelemente

LED "Busy"     :  Anzeige Probenwechsler-Steuerung aktiv
LED "Phase 1"  :  Anzeige Phase 1 aktiv
LED "Phase 2"  :  Anzeige Phase 2 aktiv
LED "Phase 3"  :  Anzeige Phase 3 aktiv

Die Probenwechsler-Steuerung enthält einen 40-poligen Flachbandstecker zum Anschluss des Probenwechslers:

Pin  Signal           Pin  Signal
1-2  Masse            21  !Motor ready (in)
3    Sensor 1 (in)    23   Motor Error (in)
4    Sensor 2 (in)    25  !autonomer Stop (in)
5    Sensor 3 (in)    27   Motor Adress-Bit 0 (out)
6    Sensor 4 (in)    29   Motor Adress-Bit 1 (out)
7    Sensor 5 (in)    31   Motor Adress-Bit 2 (out)
8    Sensor 6 (in)    33  !Motor aktivieren (out)
9    Sensor 7 (in)    35   Motor-Drehrichtung (out)
10   Sensor 8 (in)    37   Signale ungültig (out)
11   Sensor 9 (in)    39   Schritttakt (out)
12,13..20 Masse       22,24..40 Masse

Mit jeder Modus-Ausgabe wird für ca. 200us "Signale ungültig" gesetzt, damit der Probenwechsler den Augenblick der Signalpegeländerung überbrücken kann.

5.2.3 Programmierung

Register 0 out:       Ausgabe Schrittzahl Phase 1 und 3
        Bits  7-0     Schritte Phase 1, Beschleunigung
        Bits 15-8     Schritte Phase 3, Verzögerung
Register 1 out:       Ausgabe Schrittzahl Phase 2
        Bits 15-0     Schritte Phase 2, Konstantlauf
Register 2 out:       Ausgabe Beschleunigungswert
        Bits 5-0      Beschleunigungswert N
Register 3 out:       Modus-Ausgabe
        Bit 2-0       Motoradresse
        Bit 4         1 = Motor aktivieren
        Bit 5         Motor-Drehrichtung
Register 4 out:       Start-Kommando, (0 Bits)
Register 5 in:        Status-Eingabe
        Bit 15        0 = Motor ready
        Bit 14        1 = Motor Error
        Bit 13        0 = autonomer Stop
        Bit 12        1 = Steuerung busy
        Bit 11        1 = Störung (gelöscht durch Status-Eingabe)
        Bits 8-0      Positions-Sensoren

Zusammenhänge in den Phasen 1 und 3 (Beschleunigung/Verzögerung):

Taktperiode        : T = 1 us
Weg                : S [steps]
Zeit               : t [sec]
Geschwindigkeit    : V [steps/sec]
Beschleunigung     : B [steps/sec^2]
Beschleunigungswert: N (1..63)
    B = N / T^2 * 15.92 * 10^-12 steps/sec^2
      = N * 15.92 steps/sec^2
Wenn V und t gegeben sind errechnen sich S und N folgendermaßen:
    S = V * t / 2
    N = V / t * 0.0628 steps/sec^2
Phasen 1 und 3 interne Limits (T = 1us):
    S = 1..255 steps  (programmiert)
    N = 1..63         (programmiert)
    Vmin = 10.17 steps/sec
    Vmax = 640.9 steps/sec

         Bmin = 15.92 steps/sec^2
         Bmax = 1003. steps/sec^2
         V * t = 2..510 steps
     Phase 2 interne Limits:
         S = 1..56535 steps  (programmiert)

5.2.4 Probenwechsler Details

Motore und Sensoren Zur Rückmeldung eines Endanschlages und zur Normierung beim Start hat der Probenwechsler 9 induktive Näherungschalter installiert. Das Karussell besitzt nur einen Sensor zur Normierung. Alle Sensoren melden High-Pegel, wenn sie ansprechen.

Motor  Sensor (Normierung)  Sensor
1 Karussell  1 unter Teller (1-Loch)  -
2 Hub  2 unterer Sensor  3 unter Teller (20-Loch)
3 Wechsel  4 innerer Sensor (1-Loch)  5 Bleiburgsensor
4 Transport 6 torseitiger Sensor  7 detektorseitiger Sensor
5 Tor  8 oberer Sensor  9 unterer Sensor

Schrittzahlen Motor 5 ist ein Analogmotor, dessen Laufzeit über die Anzahl der Schritte gesteuert wird. Um einen Sensor wieder mit Sicherheit zu öffnen, ist eine gewisse Anzahl von Schritten zurückzufahren. Die Probenplätze auf dem Karussell sind 300 Schritte von einander entfernt. Was war bloß mit dem Totpunkt???

Motor  Anfang - Ende  Sensor öffnen  nächste Pos.
1 Karussell  6000 Steps/Umdr. 20 Steps  300 Steps/Probenplatz
2 Hub  1000 Steps/Umdr. 40 Steps  500 Steps/Totpunkt
3 Wechsel  3940 Steps  20 Steps
4 Transport ~12480 Steps  20 Steps
5 Tor  ~3200 Steps  20 Steps

Empfohlene Geschwindigkeiten und Beschleunigungen Mehr zu S und N Siehe Abschnitt 5.2.3 [Programmierung], Seite 43.

Motor  Geschwindigkeit Beschleunigungsdauer S  N
1 Karussell  200 Steps/sec 1 sec  100 13
2 Hub  500 Steps/sec 1 sec  250 31
3 Wechsel  500 Steps/sec 1 sec  250 31
4 Transport 500 Steps/sec 1 sec  250 31
5 Tor  100 Steps/sec 0.1 sec  5  63

6 Technische Details

6.1 Routing-Bus

6.1.1 Routing-Bus Signale

Der Routing-Bus (Siehe [Abb.: Control-Routing-Bus], Seite 47.) besteht aus zwei Teilen, dem ’Allgemeinen Bus’, der über die ganze Breite des Überrahmens geht und dem ’Privat-Bus’, der erst durch das Stecken benachbarter Karten entsteht und auf diese begrenzt ist.

Allgemeiner Bus (A-Bus) Der allgemeine Bus belegt die Anschlüsse 1a, 1c usw. bis 21c. Die Anschlüsse mit dem Suffix a und c führen im Gegensatz zum Privat-Bus zu verschiedenen Bus-Leitungen und dürfen nicht gebrückt werden.

• Stromversorgung (Standard):

     + 5V / 10A
     +15V / 1A
     -15V / 1A

• DO - D15 (Datenleitungen): Sechszehn Datenleitungen stehen zur Verfügung. Low auf einer Leitung bedeutet, dass das Daten-Bit gesetzt ist. Offene Leitung heißt, das Daten-Bit ist nicht gesetzt.

• 10 MHz-Clock/-Clock\:

Quarzstabilisierter Mastertakt der Routing-Steuerung. Tastverhältnis: 1:2 Stabilität: 10ppm

• 1 MHz-Clock:

Vom Mastertakt abgeleiteter 1MHz Takt. Tastverhältnis: 1:2

• Reset (Reset Routing):

Reset-Signal, das sowohl beim Anschalten der Netzspannung (Power-up-Reset, ca. 200ms) erscheint als auch durch Programm erzeugt werden kann (Siehe ⟨undefined⟩ [xxxx], Seite ⟨undefined⟩.).

• PAddr0..2 (Steckplatzadresse): Für jeweils zwei benachbarte Steckplätze ist eine gemeinsame Steckplatzadresse 0-7 verdrahtet (Siehe [Abb.: Routing-Überrahmen], Seite 4.). Die Address-Decoder müssen so gesteckt werden, dass sie verschiedene Adressen einnehmen, da sie nur dann eindeutig zu adressieren sind.

• MAddr0..2 (Moduladresse): Ein Steckplatz gilt als angewählt, wenn die Bits 0-2 von Steckplatz- und Moduladresse übereinstimmen. Nur dann darf eine Interface-Karte auf die Steuersignale der Routing-Steuerung reagieren und Datentransfers durchgeführen.

• RAddr0..2 (Registeradresse):

Für jede Steckplatzadresse können noch 8 Register direkt adressiert werden.

• Address Valid (Freigabetakt für den Adressvergleich): Mit diesem Signal zeigt die Routing-Steuerung an, dass die am Bus liegenden Adressen MADR und RADR gültig sind.

• Address Error (Rückmeldung bei erkannter Adresse): Wenn das Experiment-Interface seine Adresse entschlüsselt hat, so kann es diese Leitung auf "low" ziehen, um anzuzeigen, dass das adressierte Register existiert. Nicht alle Interfaces nutzen diese Option. Eine alte Version des Address-Decoders hingegen bedient dieses Signal bereits wenn die Moduladresse stimmt (Siehe Abschnitt 3.2 [Address-Decoder], Seite 5.).

• Enable Read (Anforderung von Eingabedaten): Mit diesem Signal öffnet das Interface die Datengatter des adressierten Registers und gibt die Daten auf den Routing-Bus.

• Data Accepted (Quittung der Dateneingabe): Mit diesem Signal (200ns) meldet die Routing-Steuerung die erfolgte Übernahme der Eingabedaten. Das Interface kann dieses Signal ignorieren oder z.B. sein Datenregister löschen.

• Data Available (Ausgabedaten stehen bereit): Mit diesem Signal (200ns) zeigt die Routing-Steuerung an, dass Ausgabedaten auf dem Routing-Bus zur Übernahme bereit stehen.

• Interrupt Request (Interrupt-Anmeldung):

Ein Low-Pegel auf dieser Leitung meldet bei der Routing-Steuerung einen Interrupt-Wunsch an. Diese Leitung kann auch über die Statuseingabe abgefragt werden. Dies ist eine Sammelleitung für ITs und muss deshalb mit ’Open-Collector’ oder ’Tri-State’ Bausteinen angesteuert werden (Wired-Or-Schaltung). Falls unterschiedliche ITs auftreten, können diese nur unterschieden werden, wenn sie in Registern gespeichert werden, die durch die Software abgeprüft werden können (Siehe Abschnitt 4.7 [Interrupt Eingabe], Seite 20.).

Privat-Bus (P-Bus) Der Privat-Bus baut sich erst durch Stecken der Karten auf. Eine fehlende Karte oder das Fehlen entsprechender Brücken auf den Karten unterbrechen den Privat-Bus. Er reicht von den Leitungen 22 bis 32 einschließlich. Die Leitungen mit dem Suffix a führen zur linken Nachbarkarte und die mit c zur rechten. Soll ein Bus aufgebaut werden, so sind die Anschlüsse a und c einer Leitung zu brücken. Die individuelle Nutzung des Privat-Busses ist den einzelnen Kartenbeschreibungen zu entnehmen.

Abb.: Control-Routing-Bus

                    a      Pin      c
----------------------------------------------------------
Spannungs-   (digital) +5V  1   +5V (digital)   Spannungs-
Versorgung   (digital)  0V  2   0V  (digital)   Versorgung
----------------------------------------------------------
                       D0\  3   D1\
                       D2\  4   D3\
                       D4\  5   D5\
                       D6\  6   D7\
                       D8\  7   D9\
                      D10\  8   D11\
                      D12\  9   D13\
                      D14\  10  D15\
      A-Bus    Enable_Read  11  Reset\         A-Bus
                   MAddr0\  12  1MHz-Clock
                   MAddr1\  13  PAddr0\
                   MAddr2\  14  PAddr1\
                   RAddr0\  15  PAddr2\
                   RAddr1\  16  Address_Error
                   RAddr2\  17  Address_Valid
              10MHz-Clock\  18  10MHz-Clock
             Data_Accepted  19  Data_Available
             (analog)   0V  20  Interrupt_Request\
             (analog) +15V  21  -15V (analog)
----------------------------------------------------------
                            22
                            23
                            24
                            25
      P-Bus                 26                 P-Bus
                            27
                            28
                            29
                            30
                            31
                            32
----------------------------------------------------------
PADRx = Steckplatzadresse
MADRx = Moduladresse
RADRx = Registeradresse
(Signalnamen mit '\': aktiv low)

6.1.2 Routing-Bus Abschluss

Der Bus-Abschluss ist normalerweise ganz links auf der Rückseite der ersten VG-Steckerleiste installiert. Es bestehen jedoch auch Sonderlösungen durch von vorne gesteckte Karten, insbesondere wenn der Überrahmen in einen Data-Routing-Bus und einen Control-Routing-Bus aufgeteilt ist. Der Bus-Abschluss ist je nach Aufgabe der Bus-Leitungen als aktiver Abschluss (ca. 3V) oder durch Pulldown-Widerstände realisiert (Siehe [Abb.: Routing-Bus-Abschluss], Seite 49.). Der 27 Ohm Widerstand, mit denen die Pulldowns zusammengefasst sind, ist experimentell ermittelt und verbessert die Signale ganz erheblich. Insbesondere vermindert er ein Übersprechen, das im Data-Routing zum Ausfall einzelner 10MHz-Takte beim Schalten der SADR(0:3)-Leitungen geführt hatte. Warum das Ganze gerade in dieser Beschaltung ordentlich läuft, weiß keiner so recht. Die von den Interface-Karten erzeugten Signale können mittels Treiber-Bausteinen mit mindestens 15mA (besser 24mA) Low-Signalstrom (z.B. ’LS245, ’LS373, ’LS374) auf den Bus gegeben werden. Bei der Entwicklung von Interface-Karten bitte stets darauf achten, dass sowohl Senderals auch Empfänger-Bausteine möglichst nahe am Bus platziert werden! Denn ein solcher Bus ist eine sehr heikle Hf-Übertragungsstrecke (ca. 20MHz), die man durch falsch aufgebaute Steckkarten empfindlich stören kann.

Abb.: Routing-Bus-Abschluss

D00\ 3a   <--220Ohm--|
D01\ 3c   <--220Ohm--|
D02\ 4a   <--220Ohm--|
D03\ 4c   <--220Ohm--|
D04\ 5a   <--220Ohm--|
D05\ 5c   <--220Ohm--|
D06\ 6a   <--220Ohm--|
D07\ 6c   <--220Ohm--|         +---------+
D08\ 7a   <--220Ohm--|         | aktiver |
D09\ 7c   <--220Ohm--+---------|Abschluss|
D10\ 8a   <--220Ohm--|         | 3 Volt  |
D11\ 8c   <--220Ohm--|         +----+----+
D12\ 9a   <--220Ohm--|              |
D13\ 9c   <--220Ohm--|             ===
D14\ 10a  <--220Ohm--|
D15\ 10c  <--220Ohm--|
Enable_Read  11a  <--220Ohm--|
Reset\ 11c  <--220Ohm--|
1MHz-Clock  12c  <--220Ohm--|
Addrss_Error  16c  <--220Ohm--|
Interrpt_Request\ 20c  <--220Ohm--|
PADR1\ 13c  )
PADR2\ 14c  ) Steckplatzkodierung 0V/5V
PADR3\ 15c  )
MADR0\ 12a  <--220Ohm--|
MADR1\ 13a  <--220Ohm--|         +---------+
MADR2\ 14a  <--220Ohm--|         |passiver |
RADR0\ 15a  <--220Ohm--+---------|Abschluss|
RADR1\ 16a  <--220Ohm--|         | 27 Ohm  |
RADR2\ 17a  <--220Ohm--|         +----+----+
Addr._Valid  17c  <--220Ohm--|              |
10MHz-Clock\ 18a  <--220Ohm--|             ===
10MHz-Clock  18c  <--220Ohm--|
Data_Accepted  19a  <--220Ohm--|
Data_Available  19c  <--220Ohm--|
(analog) 0V  20a  <--220Ohm--|

6.2 Komponenten und Schnittstellen

Abb. 6.2.0.1 Komponenten und Schnittstellen des Routing

6.2.1 Datenquellen <-> Quellen-Interfaces

6.2.2 Quellen-Interface <-> Interface-Steuerung 6.2.3 Interface-Steuerung 6.2.4 Interface-Steuerung <-> Routing-Steuerung 6.2.5 Routing-Steuerung

6.2.6 Routing-Steuerung <-> Rechneranpassung 6.2.7 Rechneranpassung 6.2.8 Rechneranpassung <-> Rechner-Interface 6.2.9 Rechner-Interface 6.2.10 Kopplungskarte <-> Interface-Steuerungen

6.3 Schaltungsunterlagen

6.3.1 Board Interface-Steuerung 6.3.2 Board Routing-Steuerung 6.3.3 Board Rechneranpassung 6.3.4 Board Rechner-Interface

Kapitel 7: Oldies 52

7 Oldies

7.1 Alte Routing-Steuerung

Diese Variante der Routing-Steuerung war an TR86-, PDP11- und VME-Systemen im Einsatz. Sie ist inzwischen durch eine Karte mit einem hochintegrierten, programmierbaren Baustein und verbesserter Funktionalität ersetzt worden.

7.1.1 Funktion 7.1.2 Bedienungselemente, Anzeigen 7.1.3 Schnittstellen 7.1.4 Routing-Bus

7.2 Alte Rechneranpassungen

7.2.1 PDP11 - DRV11-J - Anpassung

7.2.1.1 Adressausgabe und Statuseingabe

Zur Adressausgabe wird zunächst Port C der DRV11-J auf Ausgabe
programmiert (falls er nicht bereits auf Ausgabe steht) und
anschließend die Modul- und Registeradresse und ggf. das
Reset-Bit ausgegeben. Die Ausgabe wird in der
Routing-Steuerung gespeichert und bleibt gültig bis zur
nächsten Ausgabe.
Zur Statuseingabe wird zunächst Port C auf Eingabe
programmiert (falls er nicht bereits auf Eingabe steht) und
anschließend das Statuswort eingegeben.

Aufbau von Adress- und Statuswort

  Bit    Adressausgabe  Statuseingabe
   0        RADR0\         Online
   1        RADR1\      Address Error
   2        RADR2\        Interrupt
   3         xxx             0
   4        MADR0\           0
   5        MADR1\           0
   6        MADR2\           0
   7         xxx             0
   8      Reset-Bit         xxx
 9-15        xxx            xxx

RADR<0-2>\         3 Registeradress-Bits (invertiert)
MADR<0-2>\         3 Moduladress-Bits (invertiert)
Reset-Bit          Programmierung eines Reset des DRV11-Routing.
                   Die Experiment-Interfaces können dieses Reset
                   benutzen, müssen aber nicht.
Online             Das DRV11-Routing ist angeschaltet.
Address Error      Die angesprochene Moduladresse existiert nicht,
                   oder die Adress-Decodierung bedient diese Leitung
                   nicht.
Interrupt Request\ Zustand der Interrupt Request Leitung (invertiert).
                   0: ein angemeldeter Interrupt ist noch nicht
                   bearbeitet.
xxx                unbenutztes bzw. undefiniertes Bit

7.2.1.2 Interrupt-Eingabe

Zur Anmeldung eines Interrupt-Wunsches (Exp.-IT) wird von dem
betroffenen Experiment-Interface die  Interrupt Request (IR-)
Leitung auf low gezogen. Mit dem high/low-Übergang wird über
die DRV11-J Karte (USER RPLY C, IMR-Bit 6) bei der PDP11 eine
Programmunterbrechung angemeldet. Falls nicht gerade eine
Programmunterbrechung mit gleicher oder höherer Priorität
aktiv ist, wird die zugehörige Interrupt-Service-Routine
(ISR), falls vorhanden, aktiviert, um den Interrupt
abzuhandeln.
Wenn die IR-Leitung auf low gehalten wird, kann die
IT-Anmeldung über eine Routing-Statuseingabe abgefragt werden.
Dieses Polling-Verfahren ist zwar reaktionslangsamer, aber es
erspart den Aufwand für eine Interrupt-Service-Routine.
Da nur eine einzige IR-Leitung zur Verfügung steht, müssen
beim Auftreten unterschiedlicher Exp.-ITs diese unterscheidbar
gemacht werden. Dies geschieht z.B. durch Speichern der
einzelnen ITs in I/O-Registern (IT-Register) (Abb. 3.2.6.6).
Ist ein Exp.-IT gespeichert, so zieht er die IR-Leitung
solange auf low, bis er bearbeitet ist.
Der erste eintreffende Exp.-IT löst durch den
high/low-Übergang auf der IR-Leitung eine
Programmunterbrechung aus, d.h. die ISR wird aktiviert. Diese
führt dann folgende Aufgaben aus:
  • Durch Statuseingabe prüft sie, ob es einen Exp.-IT zu
    bearbeiten gibt. Möglicherweise ist nämlich der zu dieser
    Programmunterbrechung gehörige Exp.-IT bereits bei dem
    vorherigen ISR-Durchlauf bearbeitet worden. Falls kein
    Exp.-IT ansteht, ist ihre Aufgabe bereits erledigt.
  • Falls ein Exp.-IT ansteht, beginnt die ISR alle
    IT-Register auszulesen bis sie einen gesetzten Exp.-IT
    findet. Diesen bearbeitet sie und löscht das IT-Register
    (bei einer Schaltung nach Abb. 3.2.6.6 ist dies bereits
    durch das Lesen erfolgt!).
  • Anschließend beginnt sie wieder mit der Prüfung, ob noch
    ein IT-Register gesetzt ist usw. bis alle ITs gelöscht
    sind.

Das Ganze funktioniert nur reibungslos, wenn die
"PS<7:5>"-Priorität der ISR größer oder gleich ist der "Device
Interrupt Priority" des DRV11-J Interfaces. Darauf ist
unbedingt zu achten, damit es keine Überholvorgänge bei den
Interrupts gibt.
Varianten zu diesem Vorschlag sind ausdrücklich erlaubt!
Dies ist fast alles lediglich (durch entsprechende
Dokumentation untermauerte) Theorie und muss im Detail noch
einmal richtig durchgeprüft werden!

7.2.1.3 Programm-Beispiele

Beispiel 1: Read/Write Data; Read/Clear Interrupt

Über Port C erfolgt die Adressausgabe und die Statuseingabe,
über Port D die Datenein-/ausgabe. Der in einem Register
gespeicherte Interrupt wird über die Statuseingabe abgefragt
und über einen READ auf dieses Register gelöscht. Es wird
keine Interrupt-Routine eingesetzt.
; PDP11 MACRO Program
;Device addresses of DRV11-J
DRVCSA=:   164160
DRVDBA=:   164162
DRVCSB=:   164164
DRVDBB=:   164166
DRVCSC=:   164170
DRVDBC=:   164172
DRVCSD=:   164174
DRVDBD=:   164176
DRVVEC=:   274     ;Vector address of DRV11-J
DTADDR=:   000022  ;Address ('12'H) of Data: Modul = 1, Register = 2
ITADDR=:   000064  ;Address ('34'H) of Interrupt:
                   ;Modul = 3, Register = 4
DATA=:     123456  ;Data to be output
; System macros:
       .MCALL  EXIT$S
       DRERR$      ;Directive error symbols

START::
; I/O of data

CLRB    DRVCSA          ;Reset DRV11 group 1
CLRB    DRVCSC          ;Reset DRV11 group 2
BISB    #1,DRVCSC+1     ;Port C for output
MOV     #DTADDR,R0      ;Load modul/register address
COMB    R0              ;Invert address bits
MOV     R0,DRVDBC       ;Output of address
BICB    #1,DRVCSC+1     ;Port C for input
BIT     #1,DRVDBC       ;Test Routing status
BEQ     99$             ;Routing offline
BIT     #2,DRVDBC       ;Test Routing status
BNE     99$             ;Modul not found
BISB    #1,DRVCSD+1     ;Port D for output
MOV     #DATA,DRVDBD    ;Write data
BICB    #1,DRVCSD+1     ;Port D for input
MOV     DRVDBD,R0       ;Read data
; Polling for Interrupt
BICB    #1,DRVCSC+1     ;Port C for input
BIT     #4,DRVDBC       ;Test Routing status
BNE     99$             ;No interrupt found
BISB    #1,DRVCSC+1     ;Port C for output
MOV     #ITADDR,R0      ;Load modul/register address
COMB    R0              ;Invert address bits
MOV     R0,DRVDBC       ;Output of address
BICB    #1,DRVCSC+1     ;Port C for input
BIT     #2,DRVDBC       ;Test Routing status
BNE     99$             ;Modul not found
BICB    #1,DRVCSD+1     ;Port D for input
MOV     DRVDBD,R0       ;Read and clear interrupt
99$:   EXIT$S
.END START

Beispiel 2: Abhandlung eines Interrupts durch Interrupt-Routine

Die Interrupt-Enable/Disable-Routine und die
Interrupt-Service-Routine werden über das Page-Register 5
in den Adressraum des Betriebssystems gemapped. Diese
Programmteile müssen in "position independent code"
geschrieben werden!
; PDP11 MACRO Program
;Device addresses of DRV11-J
DRVCSA=:   164160
DRVDBA=:   164162

DRVCSB=:   164164
DRVDBB=:   164166
DRVCSC=:   164170
DRVDBC=:   164172
DRVCSD=:   164174
DRVDBD=:   164176
DRVVEC=:   274        ;Vector address of DRV11-J
ITADDR=:   000064     ;Address ('34'H) of Interrupt:
               ;Modul = 3, Register = 4
EFN=:10.              ;Eventflag, set after interrupt

; System macros:
.MCALL  CINT$S,ASTX$S,EXIT$S
.MCALL  CLEF$S,SETF$S,WTSE$S
DRERR$                  ;Directive error symbols

START::
;Reset DRV11J
CLRB    DRVCSA          ;Reset Group 1
CLRB    DRVCSC          ;Reset Group 2
;Test Routing
BICB    #1,DRVCSC+1     ;Input on port C
BIT     #1,DRVDBC       ;Test Routing status
BEQ     99$             ;Routing offline
;Load DRV11-J mode bits: fixed prio, common vector,
;interrupt, polarity low
MOVB    #202,DRVCSC
;Clear IMR bit 6, enable interrupt USER RPLY C
MOVB    #056,DRVCSC
;Enable Auto-clear
MOVB    #300,DRVCSC     ;Preselect ACR for writing
MOVB    #100,DRVCSD     ;Set auto-clear bit 6
;Load vector address memory
MOVB    #340,DRVCSC     ;Preselect VAM 0 for writing
MOV     #DRVVEC,R0
ASH     #-2,R0
MOVB    R0,DRVCSD       ;Load vector address memory 0

;Set master mask bit, enable interrupts
MOVB    #241,DRVCSA
MOVB    #241,DRVCSC
;Connect to DRV11-J interrupt
CINT$S  #DRVVEC,#P5BASE,#DRVISR,#DRVEDI,#PR4,#DRVAST
BCS     99$             ;Error
;Wait for interrupt
CLEF$S  #EFN            ;Clear EFN
WTSE$S  #EFN            ;Wait for eventflag EFN set
;Reset Routing and DRV11J
BISB    #1,DRVCSC+1     ;Output on port C
MOV     #400,DRVDBC     ;Reset Routing
CLRB    DRVCSA          ;Reset DRV11J group 1
CLRB    DRVCSC          ;Reset DRV11J group 2
;Disconnect DRV11J interrupt
CINT$S  #DRVVEC,#0,#0
BCS     99$             ;Error
99$:   EXIT$S

 ;Executive APR5 mapped routines, AST routine
.PSECT  AP5SCT  ;Programm section mapped to EXEC by APR5
P5BASE::               ;Base for APR5 mapping by executive
TSKTCB: .WORD   0      ;TCB address of task
; Enable/disable DRV11-J interrupts, Exec APR5 mapped
DRVEDI::       ;Needs position independent code!
BCS     10$              ;Disconnect
MOV     @#$TKTCB,TSKTCB ;Get TCB for later
BISB    #2,@#DRVCSA+1   ;Enable interrupt
RETURN
10$:   BICB    #2,@#DRVCSA+1   ;Disable interrupt
RETURN

; DRV11-J interrupt service routine, FORK routine, Exec APR5 mapped
DRVISR::       ;Needs position independent code!
MOV     R0,-(SP)         ;;;Save R0

BISB    #1,@#DRVCSC+1   ;;;Port C for output
MOV     #ITADDR,R0       ;;;Load modul/register address
COMB    R0    ;;;Invert address bits
MOV     R0,@#DRVDBC     ;;;Output of address
BICB    #1,@#DRVCSD+1   ;;;Port D for input
MOV     @#DRVDBD,R0     ;;;Read and clear interrupt
MOV     (SP)+,R0         ;;;Restore R0
CALL    @#$FORK2        ;;;Create system process
CLR     (R3)             ;Declare FORK block free
MOV     #EFN,R0          ;Eventflag EFN
MOV     TSKTCB,R5        ;Task control block address
CALL    @#$SETF         ;Set eventflag EFN, unstop task
RETURN

; AST routine, Task level
; Doing nothing but symbol DRVAST has to be defined in CINT$
DRVAST:: MOV    R0,(SP)         ;Save R0, overwrite vector address
ASTX$S                   ;Exit AST
.END START

; TKB indirect command file
;
TEST/PR:0,TEST/-SP/-SH= TEST
SY11:RSX11S.STB/SS
LB11:11SLIB/LB
/
;Global common for IO page
RESCOM=EX11:KCOM.TSK/RW:7
//

7.2.1.4 Block- und Timing-Diagramme

Abb. 3.2.6.2 Symbole in den Blockdiagrammen (Abb. 3.2.6.3 - 3.2.6.6)

Kapitel 7: Oldies 60 Abb. 3.2.6.3 Routing-Steuerung, Statuseingabe und Adressausgabe Abb. 3.2.6.4 Routing-Steuerung, Daten-Ein/Ausgabe

Abb. 3.2.6.5 Adress-Decodierung Abb. 3.2.6.6 Daten Ein-/Ausgabe und Interrupt Eingabe

Abb. 3.2.6.7 Timing Adress-Ausgabe

Bei der Ausgabe einer Modul-/Register-Adresse über Port C wird kurz vor der Änderung der Adressdaten das Signal Address Valid auf low geschaltet. Es bleibt auf low bis zur Beendigung der Ausgabe (dies ist erheblich länger als notwendig, aber das macht nix!). Mit diesem Signal kann die Adressentschlüsselung des Interfaces abgeschaltet werden bis die Adressdaten stabil sind, um falsche Register-Selects zu vermeiden. Als Quittung für erkannte Adresse kann das Interface das Signal Address Error auf low ziehen. Über eine Status-Eingabe über Port C kann die Software dieses Signal abfragen und damit feststellen, ob die angesprochene Adresse überhaupt vorhanden ist.

Abb. 3.2.6.8 Timing Dateneingabe

Nachdem der Port D des DRV11-J auf Eingabe programmiert wurde, nimmt die Routing-Steuerung die Ausgabedaten vom Bus und setzt das Signal Enable Read auf high. Mit diesem Signal schaltet das Interface die Eingabe-Datengatter auf und gibt dadurch die Eingabedaten auf den Bus. Die tatsächliche Eingabe der Daten erfolgt erst mit einem nachfolgenden Eingabebefehl über Port D durch die Software, der irgendwann später erfolgen kann. Jede Eingabe wird mit dem Signal Data Accepted quittiert. Danach können die Daten verändert und mit einer erneuten Eingabe eingelesen werden.

Abb. 3.2.6.9 Timing Datenausgabe

Nachdem der Port D des DRV11-J auf Ausgabe programmiert wurde, setzt die Routing-Steuerung das Signal Enable Read auf low und schaltet die Ausgabedaten auf den Bus. Mit Enable Read muss das Interface die Eingabedaten in angemessener Frist vom Bus nehmen. Die tatsächliche Ausgabe der Daten erfolgt erst mit einem nachfolgenden Ausgabebefehl über Port D durch die Software, der irgendwann später erfolgen kann. Jede Ausgabe wird mit dem Signal Data Available angezeigt, für dessen Dauer die Ausgabedaten auf den I/O-Leitungen bereit stehen.

Abb. 3.2.6.10 Timing Interrupt-Eingabe

Mit der Vorderflanke des Signals Interrupt Request wird ein Interrupt gespeichert (sofern das DRV11-J entsprechend programmiert wurde) und in der PDP11 die Interrupt-Service-Routine aktiviert ist (falls sie existiert). Solange der Interrupt Request ansteht, kann er über die Statuseingabe mittels Port C abgefragt werden. Damit ergibt sich folgende Möglichkeit der Interrupt-Behandlung: Jedes Interface, das einen Interrupt behandeln lassen will, speichert diesen in einem eigenen Interrupt-Register, und gibt dessen Inhalt auf die Interrupt Request Leitung ("wired or"). Dadurch wird die Interrupt-Service-Routine aktiviert, die nun beginnt alle möglichen Interrupt-Register der Reihe nach auszulesen, um die Quelle des Interruptes zu ermitteln und zu löschen. Zwischendurch kann sie über eine Statuseingabe ermitteln, ob noch weitere Interrupts anstehen. Am Ende muss sie dies auf jeden Fall tun, da ein neuer Interrupt-Request auf einen bereits bestehenden zu keiner weiteren Aktivierung der Interrupt-Routine führt. Auf die nicht ganz triviale Programmierung einer Interrupt-Service-Routine kann auch verzichtet werden, wenn periodisch mittels Statuseingabe auf anstehende Interrupt-Requests abgefragt wird (Polling).