Mit Gabriele 9009/Privileg 5000 über serielle Schnittstelle kommunizieren

  • Hallo zusammen,


    nachdem ich meine 9009 jetzt gereinigt und repariert habe (siehe anderer Thread), versuche ich jetzt, über die serielle Schnittstelle mit ihr zu sprechen.


    Dazu gibts ja diesen tollen Artikel, in dem das Protokoll beschrieben wird. Laut dem sollte die 9009, wenn man die Online-Taste betätigt, zwei Bytes rausschicken, auf die man dann mit ner definierten Bytesequenz antworten muss, um die Schreibmaschine online zu schalten.


    Jetzt hab ich mich mal als ersten Test mit einem Oszi an die Schnittstelle gehängt, aber egal was ich drücke, ich sehe weder auf der TX- noch auf einer anderen Leitung irgendeine Aktivität.


    Hat jemand Erfahrung damit und sich diese Schnittstelle schonmal genauer angeschaut? Gibts irgendwo ein Handbuch, in dem die Kommunikation beschrieben wird, mit Timing-Diagrammen und sowas?

  • Einen Schritt weiter bin ich, wenn ich die DSR-Leitung auf Masse ziehe (das heißt für die Schreibmaschine, dass die Gegenseite empfangsbereit ist), dann bekomme ich ein Byte von der Schreibmaschine raus, wenn ich die Online-Taste drücke :)


    Jetzt kann ich mal anfangen, mich mit dem Protokoll zu beschäftigen...

  • Ok das Rätsel ist gelöst, ich kann die Maschine nun vom (modernen) PC aus online bringen und Zeichen tippen lassen. Schaltung und Doku kann ich mal zusammen tippen, falls jemand Interesse hat.

  • Na dann ;)


    Also es ist alles noch sehr work in progress und nicht vollständig, aber ich schreibe mal einfach auf, wie weit ich im Moment bin. Mein Ziel ist, einen D1 mini (ESP8266) dranzuhängen und die Schreibmaschine über Netzwerk ansprechen zu können.


    Mein aktueller Aufbau ist, erstmal die serielle Schnittstelle der Maschine vom PC aus ansteuern zu lernen und dann auf den ESP umzusteigen.


    Hardware


    Die Hardwareverbindung ist fast schon lächerlich einfach, weil die RS232-Schnittstelle der Schreibmaschine normale TTL-Level versteht, d.h. man kann einfach den COM-Port vom PC oder einen USB zu Serial Adapter direkt ranhängen, und genau das hab ich gemacht.


    USB-RS232-Wandler gibt es wie Sand am Meer, ich hab diesen hier für ein paar Euro bei Ebay gekauft:



    Den kann man entweder über ein entsprechendes Kabel an den DIN-Port auf der Rückseite der Schreibmaschine anschließen, aber weil ich keinen passenden DIN-Stecker hab und eh am Schluss alles intern in der Maschine haben will, hab ich mich auf dem Mainboard an den Port rangehängt. Die DIN-Buchse auf der Rückseite ist über ein Flachbandkabel mit einem normalen 2,54mm Pin-Header auf dem Mainboard verbunden. Ein Foto davon hab ich grad nicht, aber ich hab mir mal die Belegung des Headers aufgemalt, die ist folgendermaßen:



    Und ja, da liegen tatsächlich 40V auf dem Pin links oben an, um den sollte man also einen großen Bogen machen, wenn man keine Rauchwolke aus der Maschine aufsteigen sehen will. Fragt nicht, woher ich das weiß ;)


    Auf jeden Fall muss man nur RX/TX/GND des USB-Adapters mit TX/RX/GND der Schreibmaschine verbinden und den DSR-Pin der Schreibmaschine auf GND legen (das sagt der Maschine, dass der PC empfangsbereit ist), den seriellen Port am PC auf Baudrate 4800 8N1 konfigurieren, und das sollte erstmal genügen. (DTR sollte auch noch ausgewertet werden, darüber sagt die Maschine, wann sie empfangsbereit ist, aber das ignoriere ich fürs erste)


    So sollte verkabelt werden, bitte nicht drauf verlassen sondern unbedingt selbst checken, dass die Pins passen:



    Und schon hat man seine 9009 auf USB aufgerüstet :)


    Software


    Als Terminalprogramm verwende ich HTerm (ich arbeite unter Linux), damit kann man nicht nur ASCII senden, was die Maschine nicht versteht, sondern auch individuelle Bytes.


    Mit HTerm kann man sich dann mit dem entsprechenden Port verbinden, Baud 4800 8N1 und sowohl input als auch output auf Hex umschalten. Dann Schreibmaschine einschalten und bei Druck auf die Online-Taste der Schreibmaschine sollte man ein Byte von der Maschine empfangen.


    Kommunikation mit der Maschine findet immer über 2 Byte lange Kommandos statt. Folgende Kommandos hab ich bisher getestet:


    0xA000 --> schaltet die Maschine offline

    0xA100 --> schaltet die Maschine online (online-Lampe leuchtet)

    0xA200 --> schaltet die Maschine in den Druckermodus (ab dann lässt sie sich vollständig von extern steuern)


    0x83FF --> bewegt den Wagen ein Stück nach rechts (der Wert im zweiten Byte gibt an, wie weit)

    0x84FF --> bewegt den Wagen ein Stück nach links


    Diese Codes können einfach über HTerm an die Maschine geschickt werden und werden von ihr auch quittiert.

    ACHTUNG: Die Maschine ist in diesem Modus komplett dumm, wenn der Wagen schon ganz links ist und man lässt ihn weiter nach links fahren, rammt er mit voller Wucht in den Anschlag rein. Fragt nicht, woher ich das weiß ;)


    Codes für die Druckzeichen sind hier in dem Codelisting dokumentiert, ich hab einige davon ausprobiert (z.B. 0x2499 für "A") und sie funktionieren.


    Hier ist eine kleine Demo, wo ich nur mal connecte und den Wagen rumfahren lasse (man beachte das Online-Licht):


    https://youtu.be/4W40i_0A-SI


    Und so weit bin ich bis jetzt. Nächster Schritt ist, mir mal ein kleines C-Programm zu hacken, das ASCII zu Schreibmaschine übersetzt, damit ich direkt vom PC aus drauf tippen kann, und das dann auf den ESP zu portieren.

  • Mit dem Wissen und einem ESP-32 könnte man auch funktionierende (!) Adapter auf Centronics, RS232, IEEE488 und IEC (C64) bauen, die gleich auch die ASCII-Konvertierung machen und auch dafür sorgen, dass das Druckwerk nicht gegen die Ränder knallt, in dem die Spaltenposition des Druckwerks mitgezählt wird.


    Ich muss meine Gabi nochmal hervorkramen, und mal das IEC-Interface öffnen und schauen was da drin ist, vielleicht macht es ja Sinn, das Eprom auszulesen, vielleicht will jemand das mal analysieren...

    1ST1

  • Ja im Prinzip kann man mit einem ESP oder Arduino das IEC-Interface nachbauen.


    Wenn die ASCII-Konvertierung in die Schreibmaschine eingebaut wäre, würde das einen Haufen Zeit sparen. Aber ich schätze mal die Logik dafür war damals noch ziemlich teuer und wurde deswegen in ein externes Interface ausgelagert.

  • Hallo, mal wieder ein Update. Ich hab nun ein kleines C-Programm gehackt, das Ascii-Zeichen in Codes für die Schreibmaschine umwandelt und über die Serielle verschickt. Funktioniert auch im Prinzip, aber ich beobachte, dass die Schreibmaschine nach einer variablen Anzahl von empfangenen Zeichen (mal 3, mal 10, mal noch mehr) in einen Modus übergeht, bei dem für jedes empfangene Zeichen die Online-LED an und aus blinkt (außerdem zwei weitere LEDs auf der linken Seite der Tastatur), aber nichts mehr gedruckt wird.


    Manchmal lässt sich die Maschine dann nochmal resetten, d.h. offline schalten, oft aber auch nicht.


    Trotzdem scheint sie ja nicht komplett aufgehängt zu sein, da sie ja auf empfangene Zeichen noch irgendwie reagiert.


    Hat jemand sowas schonmal beobachtet? Ich tippe auf ein Timing-Problem, das Verhalten tritt aber auch auf, wenn ich zwischen den gesendeten Zeichen mehrere 100ms Pause einlege. Dass die Maschine mit dem Empfang überlastet ist, scheint mir also eher unwahrscheinlich.


    Vielleicht liegt es auch an meinem USB-UART-Adapter, ich hab jetzt mal einen mit einem anderen Chip bestellt, der auch die DTR-Leitung der Schreibmaschine auswerten kann. Vielleicht bringt mich das weiter...

    Einmal editiert, zuletzt von AndreasK ()

  • Ich komm grad nicht ganz mit - Aktuell geh ich über einen USB-Uart-Adapter. Bestellt hab ich mir jetzt diesen hier, weil ich vermute, dass mein bisheriger vielleicht das Problem sein könnte.


    Einen "echten" seriellen Port hat mein Mainboard zwar, aber den muss ich erstmal nach draußen führen, aber das wäre vielleicht einen Versuch wert.


    Auf welchen Pegeln läuft denn ein serieller Port? Ich dachte, der hat TTL?

  • Auf welchen Pegeln läuft denn ein serieller Port? Ich dachte, der hat TTL?

    Traditionelles RS232 hat Pegel von bis zu -12V...-3 und +3...+12V, manche Quellen nennen sogar -15 und +15V als höchste Pegel. Üblicherweise werden die entsprechenden seriellen Portbausteine oder Pegelwander symmetrisch mit -12 und +12V versorgt, oder generieren die selbst aus 5V. Dir leuchtet schon ein, dass TTL-Bausteine, auch die in der Gabi, auf solche Pegel nicht erfreut reagieren würden...


    Die Variante mit TTL-Pegeln war früher eher selten, wie hier, und zum seriellen Anschluss der Gabi an einen PC, Atari ST, ... brauchte die noch ein "Interface", in dem sich zum Beispiel Pegelwandler vom Typ MAX232 befinden, welche die +/-12V herstellen. (Oder eine Prozessor-unterstützte Wandlung von Centronics/IEC auf TTL-seriell). Heute findet man die TTL-RS232 z.B. an den kleinen Bastelplatinen ala Ardiuno oder Gotek-Controllern usw, wenn da nicht gleich schon USB drauf ist.

  • Dir leuchtet schon ein, dass TTL-Bausteine, auch die in der Gabi, auf solche Pegel nicht erfreut reagieren würden...

    Das leuchtet mir ein ;)


    Na gut dass wir drüber geredet haben, ich war jetzt naiv der Meinung, dass der serielle Port am PC auf TTL läuft. Ich glaube im Studium haben wir noch was mit dem seriellen Port gemacht, aber ich kann mich nicht mehr dran erinnern, wie das mit den Pegeln damals war... und alles seither war nur noch über USB-UART-Wandler, die geben TTL aus.


    Dann warte ich mal auf meinen FTDI UART, und wenn da das gleiche Verhalten auftritt, häng ich vielleicht mal direkt einen ESP an die Gabi. Auch wenn ich da dann das umgekehrte Problem hab, weil der nur auf 3,3V läuft, aber das lässt sich lösen ;)

  • Genau - das Thema ist mit einmal Wandeln u.U. nicht getan, denn die neuen Bastlerchips haben diese 3.3V und die wollen auch erstmal an 5V angepaßt werden. Und die 5V müssen dann nochmal auf 12V (+/-) für das "echte serielle" Teil.


    Was aber so eine direkte Spannungswandlerkette nicht macht, ist daß plötzlich irgendwelche Pausen auftreten oder Daten in Blöcken kommen oder sonstiges Seltsames, was aber bei so einem USB Adapter durchaus passieren kann.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Was aber so eine direkte Spannungswandlerkette nicht macht, ist daß plötzlich irgendwelche Pausen auftreten oder Daten in Blöcken kommen oder sonstiges Seltsames, was aber bei so einem USB Adapter durchaus passieren kann.

    Ja das kommt dann nicht vor. Ich würd ja gern mal die Kommunikation von Schreibmaschine mit dem originalen Interface von TA beobachten und schauen, ob da irgendwelche Spezialitäten auftreten, die ich nicht auf dem Schirm hab. Dann würd ich weniger im Trüben fischen.


    Meine Hypothese im Moment ist, dass die Maschine auf ihrer DTR-Leitung signalisiert, dass sie grad beschäftigt ist und ich just in dem Moment was senden will, was sie dann nicht annimmt. Das werd ich am Wochenende mal genauer untersuchen.


    Etwas verwirrend ist das Pegelthema bei der Schreibmaschine übrigens trotzdem, weil der Artikel aus dem ST-Magazin sagt, dass sie auf 12V Pegeln läuft und man einen Max232 zwischen PC und Schreibmaschine braucht. Der Artikel aus der c't schreibt, dass die Maschine mit TTL-Pegeln läuft. Und das tut sie nach meinen Beobachtungen jetzt auch. Aber nachdem die Leute aus dem ST-Magazin ihre Gabi ja wohl auch nicht gegrillt haben, scheint sie auch +-12V zu vertragen. Drauf ankommen lassen will ich es aber lieber nicht ;)

  • Ich kenne die Maschine nicht konkret, aber das Pegel-Problem ist oft so zu erklären: Geräte "fressen" beim Empfang auch 12 Volt ohne gegrillt zu werden, senden aber nur mit 5 Volt Pegeln. Dann gibt es alle möglichen Kommunikationsprobleme (Übertragung nur in eine Richtung möglich, Fehler bei Status-Signalisierungen und darauf folgende Aktivitäten, etc.). Eine ähnliche Diskussion hatten wir dazu neulich hier in Verbindung mit dem Tandy TPDD "Portable Floppy Disk Drive" (mit seriellem Anschluss)...

  • Meine Hypothese im Moment ist, dass die Maschine auf ihrer DTR-Leitung signalisiert, dass sie grad beschäftigt ist und ich just in dem Moment was senden will, was sie dann nicht annimmt. Das werd ich am Wochenende mal genauer untersuchen.

    Das kann durchaus sein.


    Bei RS232 werden üblicherweise zwei Methoden zur "Verständigung" zwischen Sender und Empfänger verwendet:


    1.) Hardware Handshake ... Abfrage der DSR/DTR Leitungen (es gibt noch ein zweites Paar, welches aber bei der Schreibmaschine nicht vorhanden ist). Damit sagt der Empfänger, ob er bereit ist Daten zu empfangen. Der Sender darf erst ein neues Zeichen senden, wenn die Leitung "bereit" sagt. Ansonst verliert der Empfänger Zeichen und macht vermutlich "Mist".


    2.) Software Handshake ... Hier verständigt der Empfänger den Sender durch Übertragung eines bestimmten Zeichen, das besagt, das der Empfänger bereit ist zu Empfangen. Der Empfänger hat dann einen (kleinen) Empfangspuffer in dem die Zeichen bis zur weiteren Verarbeitung zwischengespeichert werden. Kurz bevor der Puffer voll wird, sendet der Empfänger an den Sender, dass er mit weiteren Zeichen warten muss, bis er wieder bereit ist. Ist es soweit, dann sendet der Empfänger wieder Bereitschaft an den Sender.


    Welche der beiden Methoden verwendet wird, hängt von den beiden beteiligten Geräten ab.



    Wenn Du mit dem Scope zusiehst, was sich beim Start tut, kannst Du beobachten, ob Der Empfänger ein Zeichen an den Sender schickt, oder ob nur die DSR/DTR-Leitung betätigt wird. Betätigt er nur die DSR-Leitung, dann ist es zu 99% ein Hardware Handshake.

  • Ich kenne die Maschine nicht konkret, aber das Pegel-Problem ist oft so zu erklären: Geräte "fressen" beim Empfang auch 12 Volt ohne gegrillt zu werden, senden aber nur mit 5 Volt Pegeln. Dann gibt es alle möglichen Kommunikationsprobleme (Übertragung nur in eine Richtung möglich, Fehler bei Status-Signalisierungen und darauf folgende Aktivitäten, etc.). Eine ähnliche Diskussion hatten wir dazu neulich hier in Verbindung mit dem Tandy TPDD "Portable Floppy Disk Drive" (mit seriellem Anschluss)...

    Cool, wieder was gelernt, danke für die Info!

  • Wenn Du mit dem Scope zusiehst, was sich beim Start tut, kannst Du beobachten, ob Der Empfänger ein Zeichen an den Sender schickt, oder ob nur die DSR/DTR-Leitung betätigt wird. Betätigt er nur die DSR-Leitung, dann ist es zu 99% ein Hardware Handshake.

    Das hab ich schon gemacht, auf der Datenleitung schickt die Maschine nichts. Wird also ein die Hardware-Variante sein. Die Maschine ist leider sehr schweigsam, um nicht zu sagen fast gänzlich stumm, von der bekommt man fast nichts zurück, was die ganze Sache nicht einfacher macht.


    Das hier ist auch eine neue Erfahrung für mich, ich bin mit moderner Hardware vertraut, da bekommt man über nen UART meistens gleich ne ganze Linux-Konsole zurück oder zumindest verwertbares ASCII, aber bei den alten Geräten sieht das offenkundig anders aus ;)

  • Das hab ich schon gemacht, auf der Datenleitung schickt die Maschine nichts. Wird also ein die Hardware-Variante sein. Die Maschine ist leider sehr schweigsam, um nicht zu sagen fast gänzlich stumm, von der bekommt man fast nichts zurück, was die ganze Sache nicht einfacher macht.


    In der Anleitung von ST-Computer habe ich folgendes gefunden:

    • A0H 00H: CLEAR-Kommando -> die Schreibmaschine geht in den OFFLINE-Zustand und wird wieder “Schreibmaschine”.
    • A1H 00H: START-Kommando —> Übergang zu ONLINE wird vorbereitet
    • A2H 00H: STX-Kommando —> Schreibmaschine wird “Drucker”, Zustand “ONLINE”, Übertragung von Druckbefehlen kann beginnen
    • A3H 00H: ETX-Kommando —> Datenübertragung wird unterbrochen und auf Fortsetzung gewartet
    • A4H 00H: ENQ-Kommando —> Schreibmaschine soll Zustand melden



    Dabei bin ich mir nicht im Klaren, ob alle Befehle vom PC zur Schreibmaschine gehen sollen.


    Für mich wäre es wesentlich plausibler, wenn STX und ETX von der Schreibmaschine zum PC gingen. Das wäre dann ein Softwarehandshake!


    Was Du auf jeden Fall testen kannst wäre der ENQ-Befehl. Daraufhin sollte ja die Schreibmaschine mit dem Status antworten.

  • Was Du auf jeden Fall testen kannst wäre der ENQ-Befehl. Daraufhin sollte ja die Schreibmaschine mit dem Status antworten.

    Das tut sie. Manchmal.


    An dieser Anleitung orientiere ich mich auch. Die Sequenz 0xA100 0xA200 schaltet die Maschine online, also lässt sie zum Drucker werden, dann ist sie empfangsbereit, die Sequenz 0xA300 0xA000 schaltet sie wieder offline, danach ist sie wieder Schreibmaschine.


    Drückt man die "Online"-Taste an der Maschine, schickt sie ein einzelnes Byte 0x01 raus.


    Schickt man 0xA000, antwortet sie mit 0xA000.


    0xA400 quittiert sie nur in bestimmten Fällen mit einer Statusrückmeldung, aber ich weiß jetzt grad auswendig nicht mehr, wann und wann nicht. Auf jeden Fall schickt sie nicht immer Statusmeldungen zurück, wenn man sie anfordert. Und leider nicht, wenn sie in dem komischen oben beschriebenen nicht-drucken-Status festhängt.


    Das ist jetzt alles nur ausm Kopf, aber so müsste es sein.

  • Drückt man die "Online"-Taste an der Maschine, schickt sie ein einzelnes Byte 0x01 raus.

    Könnte sein, dass 0x01 die Empfangsbereitschaft signalisiert.


    Was passiert, wenn Du in diesem Zustand eine ganze Reihe von Zeichen (oder auch Befehle) schickst?

    Eigentlich müsste dann ein "Stopzeichen" von der Schreibmaschine kommen (und später wieder ein "Startzeichen" 0x01), oder die DSR-Leitung auf "Halt" gehen.


    Eines von Beiden sollte kommen, damit der Sender weiß, dass er Pause machen soll.



    Was Du eventuell auch noch versuchen kannst, ist die Schnittstelle statt auf 1 Stopbit auf 2 Stoppbits zu setzen. Das verlangsamt die Übertragung um etwa 10% und gibt der Schreibmaschine mehr Zeit für die Verarbeitung.

    Ansonst hat das keine Auswirkungen.

  • Wird denn nicht, wie in den Artikeln beschrieben (z.B. Kabel Atari - Gabi im ST-Computer Magazin), ein ganz normales Hardware-Handshaking über RTS/CTS auf der Computer Seite verwendet?

    Dann braucht es einen USB-RS3232C Wandler der auch diese beiden Leitungen anbietet - nicht alle haben das verdrahtet.

    Und auf PC-Seite muss man das natürlich auch implementieren bzw. aktivieren, wenn man eine fertige RS232C Bibliothek verwendet.

  • Könnte sein, dass 0x01 die Empfangsbereitschaft signalisiert.

    Soweit ich das verstanden habe sagt der Druck auf die Online-Taste dem externen Gerät "schalt mich mal online", und das externe Gerät triggert dann die o.g. Sequenz. Das dient dazu, dass man den Online-Modus quasi an der Schreibmaschine aktivieren kann (stand so in einem der beiden Artikel).


    Den Rest werd ich mal austesten, ich hab auch nen kleinen Logik-Analyzer bei Ebay bestellt (für unglaubliche 13 Euro), mit dem schau ich mir die Schnittstelle dann auch mal an.