Der Logik-Analysator Tektronix 1241

Geräte dieser Art waren in Forschung und Entwicklung der 80ger Jahre, besonders Entwurf von Logikschaltungen, sehr verbreitet.

Der Tek 1241 bietet bis zu 72 Kanäle, 2 Zeitbasen, einen farbigen Touchscreen und eine Bandbreite von 100 Mhz synchron und 50 Mhz asynchron. Er hat zusätzliche Slots für RAM- und ROM-Bausteine sowie für ein GPIB oder RS232-Interface. Er kann eine Tiefe zwischen 257 Bit (Aquisition mit Glitches mit einer Karte) und 4×512+1=2049 Bit analysieren (Acqisition ohne Glitches mit 4 Karten)

Mein Gerät hat ein 64KByte RAM-Baustein 12RS02, 2×9+2×18=54 Kanäle und zunächst leider kein GPIB-Interface. Dies habe ich später nachgekauft, leider war es zunächst defekt. Hier die Beschreibung der Reparatur des GPIB COMMPACKS 1200C02.

Beim Gerät sind 6 Pods (Probes) vom Typ 6460 dabei. Dies sind Probes mit „Variable Thresholds“, d.h. die zu verwendenden Werte für HI und LO können bei diesen Probes vom 1241 aus bequem eingestellt werden, Wertebereich -6.35..+6.35 V.

Handbücher zum Gerät sind im Internet zu finden.

Unterschiede 1240 und 1241: 1241 bietet ein farbiges Display. Die Geräte sind ansonsten wohl praktisch gleich, was ich daraus ableite, dass beide Typen dieselbe Firmware nutzen.

Glitches: Glitches sind kurzzeitige Signalunstabilitäten. Ein Signal, dass „eigentlich“ logisch 1 ist, kann -wegen Signallaufzeiten in beteiligten Gattern o.ä.- für sehr kurze Zeit auf logisch 0 gehen. Dieses Verhalten ist sehr unangenehm, weil es in anderen Logikbausteinen, die dieses Signal aus Input besitzen, zu Zustandsänderungen kommen kann, die nicht gewünscht sind. Wenn das Störsignal deutlich kürzer ist als der Takt des Logik Analysators und so zwischen zwei Sample-Zeitpunkten liegt, sieht der Logik Analysator diese Zustandsänderung nicht und zeigt sie auch nicht an.

Um diese besondere Situation mit einem Logik Analysator dennoch zu unterstützen, besitzt der 1241 eine „Glitch Detection“ Logik. Diese ist zwischen den Zeitpunkten aktiv, zu denen ein Sampling stattfindet. Die Logik prüft, ob eine Signaländerung zwischen den beiden Zeitpunkten stattgefunden hat (ohne das dies zu einem echten Signalübergang geführt hat). Wenn dies der Fall ist, wird der Übergang als Glitch im Diagramm dargestellt.

Der 1241 kann Glitches bis hinunter zu einer Länge von 6ns erkennen.

Demultiplexing: Auf einem Bus werden typischerweise zu verschiedenen Zeitpunkten verschiedene Arten von Daten transportiert: z.B. Daten und Adressen (Multiplexing). Der 1241 ist in der Lage, bei entsprechender Konfiguration diese unterschiedlichen Datentypen wieder aufzutrennen und z.B. in verschiedenen Gruppen in zeitlich korrekter Reihenfolge darzustellen. Diesen Vorgang nennt man Demultiplexen und er erfordert die Nutzung zweier Zeitbasen.

Frontansicht

Bedienungselemente vorn

Dialog Operation Level: Es wird der aktuelle Level sowie die Slotbelegung angezeigt. In meinem Gerät sind zwei 9-Kanal und zwei 18-Kanal-Einschübe in den Slots. Das ist eine ziemlich gute Ausstatung.

Dialog Memory Configuration. Hier wird pro Probe die zu nutzende Zeitbasis, der Trigger/Signal-Theshold etc. eingestellt.

Dialog Trigger Specification. Hier wird auf das einmalige Auftreten des Wertes ‚0xff‘ an der Probe 0 (GRPA) gewartet.

Ausgabe der State Table nach Start der Akquisition und Eintreten des Triggers. Die Rote Linie(=CURSOR1)  zeigt den Triggerzeitpunkt an. Die roten Rauten zeigen Glitches im Signal an.

Ausgabe der State Table. Es wurde zum Zeitpunkt t=3,06 Mikrosekunden nach Triggerereignis gescrollt. Zu dem Zeitpunkt lag das Datenbyte ‚d7‘ an.

Ausgabe des Timing Diagramms zum Zeitpunkt t=3,06 Mikrosekunden nach Triggerereignis. Es werden 12 Datenleitungen dargestellt.

Ausgabe des Timing Diagramms zum Zeitpunkt t=3,48 Mikrosekunden nach Triggerereignis. Zu dem Zeitpunkt lag das Byte ‚b2‘ an.


Die 4 Slots des Geräts. Ganz oben der Ausgang des Testgenerators, unten das eingesteckte RAM Pack. Mittig die beiden 9-Kanal und die beiden 18-Kanal-Karten.

 


Ansicht von hinten. Ganz rechts das eingesteckte GPIB Modul

 


Trigger Aus- und Eingang.

Innenansichten

Im folgenden einige Innenansichten des Geräts.


Auch ohne Gehäuse gibt sich der 1241 sehr geschlossen 🙂

 

 

 

 


Im Inneren lässt sich ein an Scharnieren befestigter kompletter Block -nach Lösen einiger Schrauben- herausklappen. In diesem Block stecken alle Einsteckkarten des Geräts.

 


Blick auf die Karteneinschübe.

Im obigen Bild kann man von oben nach unten sehen:

  • Control Processor: Haupt-Prozessor Karte mit 8088
  • I/O – processor: IO-Karte mit Z80
  • Display: CRT-Karte
  • 2x 9 Kanal Aquisition Karte
  • 2x 18 Kanal Aquisition Karte
  • Trigger Karte

Eine grobe Durchsicht der Produktionsdaten der Chips auf den Platinen zeigt, dass die neuesten Chips aus der 31. Woche von 1988 sind.

 

 

 

 

Prozessor Karte


Prozessor Karte

 


EPROMs auf Prozessor Karte

 


Die Batterie fürs Non Volatile RAM „Catalyst Research. Solche langlebigen Batterien haben eine garantierte Haltbarkeit typischerweise 30 Jahren. Mein Gerät ist von 1988, es würde also bis 2018 halten…
Ein Ersatztyp für die „Catalyst Research B-600“ (Lithium?, 2,8V?, 650mAh?) ist noch zu bestimmen

 


Der 8088

 


Aufnahmeplatz für RAM Pack

 


Unterseite Prozessor Karte

 

Die I/O Karte

 


Der Z80

 


Schönes Handlöt-Detail

 


EPROMs auf der I/O Karte

 


Rückseite I/O Karte

 

Die Display Karte

 


EPROMs auf der Display Karte

 


Rückseite Display Karte

 

Die 18 Kanal Karte

 

 


Eingangsbausteine

 

 


Rückseite 18 Kanal Karte

 

Die 9 Kanal Karte

 


Tektronix Custom Chips

 


Rückseite 9 Kanal Karte

Die Trigger Karte

 

 

 


Rückseite Trigger Karte

Pod 6460

Im folgenden einige Bilder einer geöffneten Pod 6460. Diese Probe hat 9 Dateneingänge sowie einen Clock/Qualifier-Eingang für synchronen Betrieb. Zur Pod gehören „Lead Sets“ unterschiedlicher Ausführung, um die Pod an das Gerät unter Test anzuschließen. Die Lead Sets haben z.B. Mini-Krokodilklemmen. Es gibt auch spezielle Diagnostic Lead-Sets zum Anschluß an den eingebauten Test Pattern Generator des Tek1241.

Die Pod 6460 erlaubt die Einstellung des Thresholds für die Differenzierung von HIGH und LOW vom Tek 1241 aus.


geschlossene Pod

 


Pod von oben

 


Das Lead Set (rechts) und die Verbindung zur Pod

 


Geöffnete Pod von unten. Rechts ein größerer Custom Chip von Tektronix.

 


Bei dieser Platine (auf Keramik aufgebaut?) handelt es sich vermutlich um einen komplexeren Attentuator für 9+1 Kanäle, um die variablen Thresholds einzustellen.

 


Stecker  Richtung Tek1241, 2×17 polig

64KByte RAM Pack 12RS02

 

 

 


Auch hier besorgt die „Catalyst Research B-600“ die Langzeit-Spannungsversorgung der RAMs.

 

 

 

 

Atmel AVR Mikrocontroller mit OpenSuse: Ansteuerung vonLCD-Displays

LCD-Displays gibt es in großer Mannigfaltigkeit. Üblich ist, dass die Displays bereits einen Controller enthalten, der die Pixel ansteuert. Auch in diesem Bereich hat eine Art Standardisierung stattgefunden, so dass nur gegen wenige Controllertypen programmiert werden muss. Ein sehr gebräuchlicher Controller ist der HD44780.

LCD-Display Seiko L2432 mit 2 Zeilen zu 24 Zeichen

Auf dem Display sitzt ein Controller HD44780, also absoluter „Standard“.
Das Display hat 2 Zeilen zu 24 Zeichen.


Vorderseite des Seiko L2432.

Unterseite des Seiko L2432, rechts der Controller HD44780. Ganz rechts der 14-polige Konnektor, an den ein Flachbandkabel angelötet wurde.

Das Display wird über einen Connector mit 14 Pins angeschlossen. Sogar die Pin-Belegung des Connectors ist quasi-standardisiert.

Pin Function
1 GND
2 V+, normalerweise +5V
3 VLC, Kontrastreglung
4 RS – Register Set
5 RW – Read/Write
6 E – Enable
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7
15 (A – Anode for Backlight) optional
16 (K – Kathode for Backlight) optional

In Rot sind die für die 4-Bit-Ansteuerung notwendigen Pins gekennzeichnet. Diese müssen mit freien Ports des AVRs (bzw. V+ und GND) verbunden werden.

Neben der Datenleitungen (8 Datenbits D0..D7 bzw. 4 Datenbits D4..D7 im 4-Bit-Modus, Controllerauswahl, R/W, RS, Enable sowie GND und Vcc), muss unbedingt auch -wenn vorhanden- die Kontrastregelung angeschlossen werden. Das gezeigte Display benötigt beispielsweise eine Spannung, die irgendwo zwischen 0 und 5V liegt. Wird keine passende Regelspannung für den Kontrast eingestellt, ist absolut nichts zu sehen und man kann nicht erkennen, ob das Display überhaupt funktioniert! Die Kontrastspannung wird über einen Trimmer angeschlossen von typischerweise 10 KOhm, so dass man auf unterschiedliche Lichtverhältnisse reagieren kann.

Als Open Source gibt es eine Bibliothek für den AVR-Controller (LCD Library von Peter Fleury), welche LCDs ansteuern kann. Sie nutzt die 4-Bit-Ansteuerung (oder einen Memory-Mapped-Mode, der bei bestimmten AVRs möglich ist). Je nach Controller wird ein 8-Bit-Modus, ein 4-Bit-Modus oder beides unterstützt. Der 4-Bit-Modus hat den Vorteil, dass am AVR weniger Pins benötigt werden.

Hinweis: Im 4-Bit-Modus werden die Datenleitungen D4..D7 eines LCD-Moduls/Controllers genutzt. Auch wenn in der Peter-Fleury-Bibliothek immer von D0..D3 (=die logischen Datenleitungen des 4-Bit-Modes) die Rede ist, gemeint sind im 4-Bit-Modus immer D4..D7 (=die physikalischen Datenleitungen des LCD-Moduls).

Im folgenden ist die Nutzung der Funktionen dargestellt (Codeauszug, kompletten Source Code gibts weiter unten):

...
#include "lcd.h"
 
...
/* clear display and home cursor */
lcd_clrscr();
 
/* put string to display (line 1) with linefeed */
lcd_puts("LCD Test Line 1n");
 
/* cursor is now on second line, write second line */
lcd_puts("Line 2");
 
/* move cursor to position 8 on line 2 */
lcd_gotoxy(7,1);
 
/* write single char to display */
lcd_putc(':');
 
DO("wait for keynr");
/* wait until push button PD2 (INT0) is pressed */
wait_until_key_pressed();
DO("after keynr");
 
/*
 * Test 2: use lcd_command() to turn on cursor
 */
 
/* turn on cursor */
lcd_command(LCD_DISP_ON_CURSOR);
...

Die Bibliothek muss im Makefile als zusätzliche Bibliothek eingetragen werden. Die Funktionsprototypen stehen alle im Header „lcd.h“, den man im eigenen Programm eintragen muss.


Seiko L2432 angeschlossen und erste Datenausgabe

Die Bibliothek ist auch konfigurierbar, es gibt z.B. Controller, die mehr als zwei Zeilen beherrschen, dies kann in der Bibliothek eingestellt werden. Die Spezifika des Displays (Anzahl Zeilen, Anzahl Zeichen, ..) und die Anschlussbelegung am AVR muss in „lcd.h“ eingetragen werden.

Im Code findet sich übrigens auch der Makroaufruf DO(„text“), dies ist ein Debug-Makro („DEBUG OUT“) von mir, welchen Daten via RS232 ausgibt. Damit kann man erkennen, was der Controller gerade tut. Wie die RS232-Schnittstelle angesprochen wird, wird weiter unten in meinem Text besprochen.

LCD-Displays Wintek WD-C2704M-1HNN mit 4 Zeilen zu 27 Zeichen

Das Display hat 4 Zeilen zu 27 Zeichen. Auf dem Display sitzen zwei Controller, kompatibel zum HD44780. Einer ist für die oberen zwei Zeilen, der andere für die unteren zwei Zeilen verantwortlich. Beide Controller teilen sich alle I/O-Leitungen. Statt einem E(nable)-Pin gibt es zwei Enable-Pins E1 und E2 für die Auswahl zwischen den beiden Controllern.

Die Bibliothek von Peter Fleury unterstützt allerdings nur Displays mit einem Controller. Ich habe das Problem dadurch gelöst, dass ich in alle Funktionen der Bibliothek wo notwendig zwischen beiden Controllern unterschieden habe. So wird z.B. aus der Funktion lcd_clrscr(void) eine Funktion lcd_clrscr(int controllerId), der die Werte LCD_CRTLR_1 und LCD_CRTLR_2 übergeben werden können.

Die Pin-Belegung des Moduls ist in folgender Tabelle dargestellt. Die oben erwähnte „Quasi-Standardisierung“ist hier leicht verändert, da 2 Enable-Pins existieren.

Pin Function
1 GND
2 V+, normalerweise +5V
3 VLC, Kontrastreglung (0..4V)
4 RS – Register Set
5 RW – Read/Write
6 E1 – Enable Controller 1
7 E2 – Enable Controller 2
8 DB0
9 DB1
10 DB2
11 DB3
12 DB4
13 DB5
14 DB6
15 DB7
16-21 Key Input for Input Keys

In Rot sind die für die 4-Bit-Ansteuerung notwendigen Pins gekennzeichnet. Diese müssen mit freien Ports des AVRs (bzw. V+ und GND) verbunden werden.

Im folgenden ist die Nutzung der modifizierten Funktionen dargestellt (Codeauszug, kompletten Source Code gibts weiter unten):

...
#include "lcd.h"
 
...
/* clear display and home cursor */
lcd_clrscr(LCD_CRTLR_1);
lcd_clrscr(LCD_CRTLR_2);
 
/* put string to display (line 1) with linefeed */
lcd_puts(LCD_CRTLR_1, "LCD Test Line 1n");
 
/* cursor is now on second line, write second line */
lcd_puts(LCD_CRTLR_1, "Line 2");
 
/* move cursor to position 8 on line 2 */
lcd_gotoxy(LCD_CRTLR_1, 7,1);
 
/* write single char to display */
lcd_putc(LCD_CRTLR_1,':');
 
DO("wait for keynr");
/* wait until push button PD2 (INT0) is pressed */
wait_until_key_pressed();
DO("after keynr");
 
/*
 * Test 2: use lcd_command() to turn on cursor
 */
 
/* turn on cursor */
lcd_command(LCD_CRTLR_1, LCD_DISP_ON_CURSOR);
...

Für LCDs mit nur einem Controller ist die Bibliothek natürlich so wie sie ist zu benutzen.


Im Bild ist der Anschluss des LCDs an das einfache AVR-Board zu erkennen.
Experimentalaufbau – die Display-Schutzfolie wurde auf dem Display belassen, daher die schlechte Ablesbarkeit.

Hier der Source-Code zum Display:  lcd_2controller.zip

Erschöpfende Infos zur LCD-Ansteuerung unter http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD