Tektronix TDS 210
Die TDS 200er Serie kam irgendwann Anfang der 90er Jahre auf den
Markt. Es war eines der ersten kostengünstigen Digital-Oszilloskope für
private Anwender. Es gab 3 Ausführungen:
TDS210: 60 MHz, 2 Kanäle
TDS220: 100 MHz, 2 Kanäle
TDS224: 100 MHz, 4 Kanäle
Als Option wurden diverse Einschübe angeboten um per Centronics, GPIB oder
RS232 alles mögliche fernzusteuern und Daten auszulesen.
TDS2HM: Centronics only
TDS2CM: Centronics, RS-232, GPIB
TDS2MM: Centronics, RS-232, GPIB, FFT-Option
Die Einschub-Module waren noch nie besonders preiswert,
mittlerweile werden sie aber mit Gold aufgewogen.
Centronics nach USB Konverter
Drucker-Daten in den PC einlesen.
Die Idee zu dieser Schaltung entstand als ich aus meinem Oszilloskop einen Schnappschuss "absaugen"
wollte. Ich hatte ausgerechnet ein Exemplar erwischt das nur einen simplen
Centronics-Druckerausgang hat :/
Für
solche Fälle gibt es natürlich diverse Umsetzer von parallel auf
seriell. Die
allermeisten arbeiten aber in der Gegenrichtung und dienen dazu einen
Drucker mit Centronics-Eingang an einem PC mit only-USB benutzen
zu können. Ich wollte aber Drucker-Daten zurück in den PC einlesen.
Erschwerend kommt hinzu dass Centronics ein aussterbender Standard ist
und kaum noch Umsetzer angeboten werden, vom Preis ganz zu schweigen.
Aber,
kann ja alles nicht so schwer sein. Mein erster Gedanke war das Scope
(genauer dessen Centronics-Ausgang) einfach mit dem
PC-Centronics
zu verbinden. Alle modernen PCs sind schliesslich mit bi-direktionalen
Centronics-Schnittstellen ausgestattet (falls noch vorhanden), da kann
man prinzipiell auch Daten zurücklesen. Es fehlt
jedoch ein wichtiges Detail. Das Timing der Ack-, Busy- und
Strobe-Signale ist nicht vorhanden. Im Zeitalter von Windows(10?) und
entsprechenden Treiberschichten vor der Druckerkarte wollte ich mir
eine Programmierung dieser Signale per Software aber nicht antun.
Andere schwindelige Konstrukte, mit Umwegen über Bluetooth-Karten und
ähnlichem, kamen ebenfalls nicht in Betracht.
Wie
gut wenn man für solche Fälle einen Atmel-Prozessor im Haus hat und
sich mit
seiner Programmierung etwas auskennt. Was früher ein Elektronikgrab
geworden wäre macht dieses kleinen Kerlchen mit links, und etwas
Software.
Im Detail
Der Prozessor ist ein ATmega168.
Freundlicherweise enthält er bereits einen UART (=serielle
Schnittstelle auf TTL-Pegel). Er überwacht das STROBE
Signal, liesst die parallelen Daten ein, bedient ACK und BUSY
und
sendet die Daten über den UART zum PC. Für das Scope verhält er sich
damit wie ein perfekter Drucker.
Auf
der seriellen Seite fehlt noch etwas. Da auch die RS232 ihren Zenit
überschritten hat, und bei vielen Laptops bereits lange verschwunden
ist, habe ich einen USB-Umsetzer hinzugefügt. Dieses IC hat die
Bezeichnung FT232RL und stammt von der Firma FTDI. Die Beschaltung ist
super simpel, es wird nicht mal ein Quarz benötigt. Über den USB-Port
hat man auch direkt die benötigte 5V Versorgung für die gesamte
Schaltung zur Verfügung. Im PC verhält sich die virtuelle Schnittstelle
wie eine
normale RS232-Verbindung. Den zugehörigen Windows-Treiber gibt es
auf der FTDI-Webseite zum Download.
Benutzung
Die
Aufzeichnung eines Schnappschuss ist simpel: Im PC
wird
ein Terminalprogramm gestartet, z.B das meist vorhandene
HyperTeminal,
Parameter 38400,8,N,1. Als COM-Nummer wird der virtuelle USB-Treiber
ausgewählt. Der "Geräte Manager" in der Systemsteuerung gibt Auskunft
welcher Port zugeordnet wurde. Die Funktion "Textdatei aufzeichen"
starten. Am Tektronix
als Druckerformat BMP (oder PCX oder EPS) auswählen, danach die Taste
HARDCOPY drücken. Nach 10 ... 20 Sekunden sind alle Daten überspielt.
Im HyperTerminal die "Textaufzeichnung" beenden. Die
gespeicherte
Datei enthält direkt
die Daten im Format 640 x 480, BMP, S/W.
Ziel erreicht :-).
Software
Die Software ist sehr einfach gestrickt. Die folgenden Signale auf der
Centronics-Schnittstelle müssen bedient werden:
- STROBE: Eingang am "Drucker", das Gerät (Sender = Oszilloskop);signalisiert dass es neue Daten senden möchte.
- BUSY: Ausgang des "Druckers", Wartesignal, der "Drucker" signalisiert dass er mit der Verarbeitung beschäftigt ist.
- ACK: Ausgang des "Druckers", der "Drucker" hat die Daten gelesen.
- 8-Bit Daten: Port-Eingang des "Druckers".
- Paper Empty: Nur Richtung Gerät (Sender), fest auf LOW.
- SELECT und ERROR: Nur Richtung Gerät (Sender), fest auf HIGH (über 4k7 Pull-Up Widerstände).
Der Pegel der STROBE-Leitung wird in einer Endlosschleife überwacht. Sobald der Pegel auf LOW geht wird
die BUSY-Leitung auf HIGH gesetzt. Danach;die 8-Bit-Daten vom
Port einlesen und per serieller Schnittstelle an den FT232RL
senden. Nun einen kurzen Low/High Impuls auf ACK senden (am Ende;auf;HIGH belassen). Dieser Impuls
sollte eine Dauer von ein paar Mikrosekunden haben.
Danach BUSY wieder auf LOW setzen und auf den nächsten STROBE Impuls warten.
Mit einem Interrupt auf die fallende Flanke vom STROBE ginge es auch.
Führte bei mir aber zu Problemen mit dem Timing. Der Atmel ist
offensichtlich zu flott und man muss diverse Delays einbauen damit
alles passt.
Hardware
Die folgenden Bilder zeigen den Aufbau. Als Basis habe ich die Platine von
einem (selbstgebautem) Atmel-Programmer-Projekt benutzt. Auf ihr
sitzen der ATmega168 und der FTDI mitsamt USB-Buchse. Ansonsten ist nur etwas "Vogelfutter"
für diverse Pull-Ups und so notwendig. Etwas aufwändig und lästig war
die Verdrahtung der 25 störrischen Adern des Centronics-Kabels.
Schöner geht immer. Deshalb habe ich die ganze Schaltung auf eine neue, eigene Platine gesetzt.
Einfach auf der Rückseite in den TDS stecken, ein USB-Kabel zum Rechner, und fertig :)
Das Ergebnis sieht so aus:
Hier ein Beispiel-Schnappschuss :
Alternativen
(alles ungetestet)
Es geht auch noch einfacher. Die folgende Seite beschreibt einen Konverter der nur mit einem FT254R (von FTDI) arbeitet:
Parallel-Druckdaten
auffangen
Auch mit dieser Schaltung werden die Druckdaten aufgefangen und auf einen
virtuellen COM-Port geleitet. Von dort kann man die Daten mit einem
Terminal-Programm (z.B. HyperTerminal) in eine Datei speichern.
Das Program SPE
leitet die seriellen Daten direkt auf einen lokal installierten Drucker
um. Damit kann man direkt ausdrucken oder z.B. ein PDF erzeugen.
Ein weiteres Fundstück ist der Parallel To Serial
Converter. Dieser arbeitet mit einem PIC Prozessor.
Weiterhin wäre es denkbar einen (Atmel-)Prozessor zu benutzen der bereits ein USB
Interface eingebaut hat. Oder einen mit einer USB-Emulation per
Software. Das würde zu einer sehr einfachen Schaltung führen.
Centronics Timing
Der Centronics-Quasi-Standard wurde erst mit der IEEE 1284
vereinheitlicht. Bis dahin hatte jeder Hersteller sein eigenes Süppchen
gekocht. Das Timing der Steuersignale war zwar ähnlich aber im Detail
nicht identisch. Genau diese kleinen Unterschiede können dazu führen
dass bestimmte Geräte/Drucker Kombinationen nicht korrekt zusammen
spielen. Eventuell hilft es am druckenden Gerät einen anderen
Druckertyp auszuwählen.
Einige Beispiele die das Timing beschreiben :
Link 1
Link
2
Link
3
Link
4