Home

SWR-Messgerät HM-102

TRS-80 Modell 1

Auswahlseite ex dl8wa

Amateurfunk bei ex dl8wa:
RTTY-Ausgabeinterface für 8080-Mikroprozessoren

Einer der ersten in Deutschland veröffentlichten Zeitschriftenartikel über Mikroprozessoren stammt von mir. Er heißt:
RTTY-Ausgabeinterface für 8-Bit-Mikroprozessoren
Er erschien in der Amateurfunkzeitschrift cq-DL, der Vereinszeitschrift des Deutschen Amateuradioclubs e.V., Heft 8/1977 ab der Seite 303.

Der Artikel beschreibt, wie man mit Hilfe eines Mikrocomputers den Funkfernschreibbetrieb automatisieren kann. Nachfolgend ein Foto des Mikrocomputers, in dem das Ausgabeinterface eingebaut war:

Bild: 8080-Mikrocomputer 1977
Leider besitze ich von dem 8080 Mikrocomputer kein besseres Foto. Immerhin ist zu erkennen, dass die Frontplatte aus einzelnen Blechteilen zusammengesetzt ist. Dies Verfahren ermöglichte einen schrittweisen Aufbau. Zwei Schalterreihen mit je 8 Kippschaltern sind zu erkennen. Eine der beiden Schalterreihen diente zur Programmeingabe. Man konnte dadurch immer ein Byte von 8 Bit Länge eingeben. Auf der oberhalb der Schalterreihe eingeklebten LED-Reihe konnte man Speicherinhalte und deren Adressen anzeigen.

Die Schalterstellung der anderen Schalterreihe ließ sich vom Programm abfragen. Dadurch war es möglich, den Ablauf des Programmes zu beeinflussen. Das Datenkabel links unten führte zu einer umgebauten  i IBM-3270-Terminaltastatur. Ich benutzte die Tastatur für Funkfernschreibbetrieb.


RTTY-Ausgabeinterface für 8-Bit-Mikroprozessoren

Von Rolf-Fredrik Matthaei, DL8WA

Der Artikel wurde zur Webdarstellung leicht überarbeitet. Die Abbildungen wurden aus der gedruckten Vorlage abfotografiert.


„Interface” de sortle RTTY pour microprocesseur à 8 bits permettant au choix des incréments de blocage de 1,5 ou de 2, d'être asservi par un microprocesseur à 8 bits (Motorola 6800, Intel 8080) ou bien par un circuit logique TTL. Il comprend une séparation totale de l'é'lectronique par un relais. Ses composants sont de type courant. Son prix de revient: 30 DM.    (DC0HO)

Variations about a parallel-to-serial converter (as described by GM3UDL) with the aim to use it as a  RTTY-output-interface for an Intel 8080 microprocessor. Description of two small programs.

1. Allgemeines

Dieses Interface entstand als Weiterentwicklung eines von GM3UDL veröffentlichten Parallel-Serialwandlers. Es bietet einige Besonderheiten:
  1. wahlweise 1,5- oder 2fachen Sperrschritt,
  2. ansteuerbar durch einen Mikroprozessor der 8-Bit-Klasse (Motorola 6800, Intel 8080 usw.) oder durch konventionelle TTL-Logik,
  3. eigenen Taktgeber, somit sind andere Geschwindigkeiten als 45 Baud ohne Änderung der Ansteuerungslogik möglich,
  4. konsequente Trennung des Linienstromes von der Elektronik durch Verwendung eines Relais,
  5. Vermeidung exotischer Bauteile. Daraus resultiert eine extreme Preiswürdigkeit. Wenn man alle benötigten Teile neu kaufen muß und einen Aufbau auf Veroboard durchführt, kostet das Interface weniger als DM 30,-.

2. Zusammenspiel Mikroprozessor/Interface (Abb.1)

Mit Hilfe des Befehls OUT 0 werden die fünf Elemente des auszugebenden RTTY-Zeichens und das Übergabesignal (Strobe) dem RTTY-Ausgabeinterface zur Verfügung gestellt.
Bild: RTTY-Ausgabeinterface, Zusammenpsiel zwischen Mikroprozessor und InterfaceDurch Abfrage des Character Change-Impulses (Befehl IN 0), den das Interface nach vollendeter Parallel-Serialwandlung abgibt, ist es möglich, ein neues Zeichen erst dann einzustellen, wenn das alte Zeichen durch das Interface verarbeitet wurde.

Durch Ausgabe des Wertes 0 in das Strobebit wird die Ausgabe gestoppt, der Linienstrom wird dadurch eingeschaltet.

Bild: RTTY-Ausgabeinterface, Zusammenpspiel zwischen Mikroprozessor und Interface
Die Codierung des Interfaces ist in Abb.2 dargestellt. Die Codierung der Stromsohritte ergibt sich aus der Codetabelle für den 5-bit-Fernschreibcode. Beispielsweise ist die Darstellung des Umschaltzeichens „Bu”: xlx00000, die des Buchstabens „L”:xlx0ll0l.  Dabei bedeutet „x” dass der Inhalt dieses Bits für das Ausgabeinterface nicht wesentlich ist, da dieses Bit des Eingabe-Ausgabebausteines nicht mit dem Interface in Verbindung steht.

2.1. Unterprogramm zur Ausgabe eines im Akkumulator bereitstehenden Zeichens

Bild: RTTY-Ausgabeinterface, Programmablaufplan zur Zeichenausgabe Bild: Im Programmablaufplan benutzte Symbole
Abb.3 (links): Grober Ablaufplan

Abb.4 (oben): Sinnbilder für Programmablaufpläne

Abb.3 zeigt den groben Programmablaufplan. Die Symbole des Programmablaufplanes sprechen für sich, so daß deren Erklärung (Abb.4) auf ein Minimum beschränkt bleiben kann.
PRINT,  MOV     B,A     Akkumulator nach Register B
WAIT1,  IN      0       Character Change-Impuls
        ANI     X'80'   gesetzt?
        JZ      WAIT1   nein
*
        MOV     A,B     ja
        OUT     0       Zeichen ausgeben
WAIT2,  IN      0       Character Change-Impuls
        ANI     X'80'   noch gesetzt?
        JNZ     WAIT2   ja
        RET             nein
Abb.5. Unterprogramm, Ausgabe des im Akkumulator bereitgestellten Zeichens
Im Programm (Abb.5), das sich auf einen 8080-Mikroprozessor bezieht, erfolgt aus logischen Gründen eine Zwischenspeicherung des Zeichens aus dem Akkumulator in das Register B. Das Unterprogramm stellt zu Beginn des Character Change-Impulses dem Interface das neue Zeichen zur Verfügung (Befehle MOV A, B und OUT 0 oberhalb des Merkmales WAIT2) und wartet den Ablauf des Character Change-Impulses ab (Schleife WAIT2) bevor es wieder ins Hauptprogramm zurückkehrt.

An dieser Stelle sei ein Hinweis für OMs erlaubt, die mit der IBM 370 oder ähnlichen Maschinen vertraut sind: Der 8080 arbeitet mit Stackregistern im Zusammenhang mit Unterprogrammen. Deshalb ist in dem Unterprogramm keine explizite Adreßzwischenspeicherung in ein allgemeines Register zu erkennen. Ein wesentlicher Vorteil der Unterprogrammtechnik mit Hilfe eines Stackregisters ist, daß eine beliebige Verschachtelung von Unterprogrammen möglich ist, ohne daß es zu Schleifen kommt. Beispielsweise kann bei dem Verfahren mit dem Stackregister ein Unterprogramm sich selbst oder Teile seiner selbst als eigenständiges Unterprogramm benutzen.

3. Interpretation der Schaltung (Abb.6)

Bild: RTTY-Ausgabeinterface für 8080-Mikroprozessoren

3.1. Taktgeber (NE555)

Der NE555 gibt Impulse mit der doppelten Schrittfrequenz ab. Da sich im Amateurfunkverkehr 45,45 Baud durchgesetzt haben, gibt er 91 Hz ab. Eine Umschaltung auf andere Geschwindigkeiten durch Benutzung anderer RC-Kombinationen ist möglich, m.E. aber nicht lohnend.

Für die Ausführung der Schaltung ist zu beachten, daß der 2,2µF-Kondensator ein Folienkondensator sein muB. Elektrolytkondensatoren oder Tantalkondensatoren sind an dieser Stelle der Schaltung fehl am Platze.

3.2. Zähler (7493)

Der 7493 zählt die Impulse des NE555 binär auf seine Ausgänge abcd. Die LED am Ausgang leuchtet einmal pro RTTY-Zeichen und dient zu Kontrollzwecken. Der 330Ω-Widerstand begrenzt den durch sie hindurchfließenden Strom.

Ein vorzeitiges Rücksetzen des Zählers ist möglich, wenn der Umschalter 2fach/ l,5fach in der Stellung 1,5fach steht. In der Stellung 2fach erfolgt das Rücksetzen durch Überlauf.

3.3. Character Change-Impuls-Erzeugung (7420 und 74121)

Wenn der 7493 den Zählerstand 15 (abcd = 1111) erreicht hat, startet der 7420 den 74121, der seinerseits am Pin 6 den Impuls Character Change abgibt. Dieser Impuls hat zwei Aufgaben:
  1. Er wird über den mit IN 0 adressierten Eingabe/Ausgabebaustein dem Mikroprozessor zurückgemeldet.
  2. Er kann den 7493 vorzeitig zurücksetzen, sofern der Schalter 2fach/1,5fach auf 1,5fach steht. Der Zählerstand 15 wird dann nicht über die Dauer einer Periode von 91 Hz gehalten, sondern fast augenblicklich auf den Zählerstand 0 zurückgesetzt. Dieses Verfahren bringt allerdings eine Verzerrung mit sich, da der nachfolgende Startschritt geringfügig verkürzt wird. Die Verzerrung ist mit dem angegebenen 1µF-Kondensator am 74121 geringer als 2% bei 45 Baud.

Die Umschaltung der Länge des Sperrschrittes hat einen gewissen Sinn. Ohne auf die theoretischen Überlegungen einzugehen, die dazu geführt haben, diesen Sperrschritt umschaltbar zu gestalten, möchte ich zwei Hinweise geben:

  1. Die Lesbarkeit eines Allgemeinen Anrufes steigt, wenn er mit 2fachem Sperrschritt gesendet wird.
  2. Die Lesbarkeit einer Textsendung steigt, wenn sie mit 1,5fachem Sperrschritt gesendet wird.

3.4. Parallel Serial Wandler (74150 und 7400)

Der 74150 hat 16 Dateneingänge. Der jeweils ausgewählte Eingang wird durch die Zählereingänge abcd bestimmt. Die Eingänge in der angegebenen Schaltung sind wie folgt beschaltet:
Zählerstand: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Dateneingang: 1 1 d1 d1 d2 d2 d3 d3 d4 d4 d5 d5 0 0 0 0
Datenbus dl bis d5: über den Ausgabebaustein, Adresse OUT 0,
Wert wird durch das Programm bestimmt.

Die beim Zählerstand 0 und 1 angewählten Dateneingänge bilden den Startschritt, die beim Zählerstand 12 bis 15 angewählten Eingänge bilden den Stoppschritt (Sperrschritt).

Der Strobe-Eingang des 74150 wird über einen 7400 angesteuert.

Ist der Schalter Run offen, so ist der Ausgang des 74150 (Pin 10) auf l.

Ist der Schalter Run geschlossen und der freie Eingang des 2. Gattersdes 7400 auf 0, so ist der Ausgang des 74150 auf 1. Nur wenn der Schalter Run geschlossen ist und der freie Eingang des 7400 auf 1 steht, ist der durch abcd angewählte Dateneingang für den Wert des Ausganges des 74150 maßgebend. Am freien Eingang des 2. Gatters des 7400 ist Strobe (Abb.2) angeschlossen. Am Ausgang des 74150 steht das serielle RTTY-Signal zur Verfügung. Zusätzlich steht es in invertierter Form am Pin 8 des 7420 zur Verfügung. An diesen beiden Stellen ist es TTL-kompatibel.

3.5. Relaistreiber (BC1O7)

Der BC107 mit dem nachfolgenden Reed-Relais (Spulenwiderstand 70 Ohm) bildet die Trennstufe zum Linienstromkreis. Das Relais soll verhindern, daß sich die 100 Volt des Linienstromkreises im Mikroprozessor breitmachen können. Über die Relaiskontakte ist gewohnter Form ein Funkenlöschglied 100 nF in Serie mit 470Ω geschaltet (nicht im Schaltbild gezeichnet). (Ein passendes Reed-Relais ist bei Fa. Werner Conrad, Postfach 1180, 8452 Hirschau, erhältlich: Best.-Nr. 50383, Schließer 60 VA, Best.-Nr. 50395, Erregerspule 2,9 bis 5,4 Volt, Lieferzeit ca. 3 bis 4 Wochen.)

Auch der BC107 wird mit 5 Volt versorgt.

Damit ist die Hardwarebeschreibung des Interfaces abgeschlossen. Vielleicht wird man sich wundern, weshalb ich überhaupt ein Interface selbst gebaut habe, denn es gibt ja so etwas zu kaufen. Leider stimmt das nicht. Es gibt zwar für Mikroprozessoren V24-Interfaces zu kaufen, und zwar in der Version der Teletype-Schnittstelle (V24 ist eine sehr flexible Norm). Aber diese Schnittstellen haben nichts Gemeinsames mit 45 Baud und CCITT-2-Code, so daß sich ein Selbstbau nicht umgehen läßt. Außerdem ist er lehrreich und bringt Spaß.

4.Programme

Die beiden nachfolgend beschriebenen kleinen Programme sind Generatorprogramme, die ohne Eingabe eine sich wiederholende Ausgabe erzeugen.
Bild: Erzeugung von 1 oder 0 mit Schalter und WiderstandBeide Programme fragen das wertniedrigste Bit von IN 0 (vgl. Abb.1) auf den Wert 1 ab, um eine Start- oder Schlußbedingung zu ermitteln. Abb.7 (links) zeigt eine Möglichkeit der Steuerung des Inhalts dieses Bits durch einen Schalter. Beide Programme benutzen das Unterprogramm der Abb.5 für die eigentliche Ausgabe.
Beide Programme sind für Mikroprozessoren des Typs 8080 bestimmt. Beide Programme sind kleiner als 110 Bytes.

4.1. RY-Generator mit Zeilenwechsel nach 64 Zeichen

Dies Programm ist ohne weiteres ohne Ablaufplan verständlich.
START,  LXI     SP,STACK    Stackbereich definieren
        SUB     A,A         Akkumulator löschen und
        OUT     0           Linienstrom einschalten.
WAIT,   IN      0           Ausdruck beginnt, wenn Schalter
        ANI     X'01'       auf 1 steht.
        JZ      WAIT
*                           Schalter steht auf 1
        MVI     C,X'00'     Zeichenzähler löschen
        MVI     A,X'57'     CR 
        CALL    PRINT
        MVI     A,X'57'     CR
        CALL    PRINT
        MVI     A,X'5D'     LF
        CALL    PRINT
        MVI     A,X'40'     Bu
        CALL    PRINT
RY,     MVI     A,X'55'     R
        CALL    PRINT
        MVI     A,X'4A'     Y
        CALL    PRINT
        INR     C           Zeichenzähler erhöhen
        MOV     A,C         Zeichenzähler gleich 34?
        CPI     X'22'       (hexadezimal 22)
        JNZ     RY          nein, noch nicht
        JMP     START       ja, dann neue Zeile beginnen,
vorher aber abfragen ob weitergemacht werden soll. Das
letzte Y wird durch diesen Rücksprung nicht mehr mit ausgegeben!

4.2. CQ-Generator mit Aufforderung zum Kommen (Abb.8)

Bild: Programmablaufpan CQ-Generator mit Aufforderung zum KommenAbb. 2 (links): Programmablaufplan CQ-Generator mit Aufforderung zum Kommen
Dies Programm benutzt „selbststeuernde Texte”. Gemeint sind Texte, die ein Kennzeichen für das Textende enthalten. Ich habe als Wert für EOT (End of Text) den Wert Low Value (X'00') verwendet.
START1, SUB     A,A     Linienstrom einschalten
        OUT     0
START,  LXI    SP,STACK Stackbereich definieren
WAIT,   IN     0        Ausdruck beginnt, wenn der
        ANI    X'01     Schalter auf 1 steht.
        JZ     WAIT

PUTCR,  LXI    H&L,CR        Ausgabe CR CR LF
        CALL   PUT
        MVI    B,X'04' Schleifenzähler für viermal
                       CQ in einer Zeile
FERTIG, IN     0       Abfrage ob Schalter noch auf 1
        ANI    X'01'
        JZ     PUTAR   Wenn der Schalter auf Null steht,
               dann Ausgabe Aufforderung zum Kommen.
PUTCQ,  LXI    H&L,CQ   Andernfalls CQ drucken.
        CALL   PUT
        DCR    B
        JZ     PUTCR   Zeilenwechsel nach viermal CQ
        JMP    FERTIG

PUT,    MOV    A,(H&L) Allgemeines Druckunterprogramm
        CPl    X'00,    EOT?
        JZ     GOBACK   Ja, dann zurück
        CALL   PRINT    Nein, dann das Zeichen drucken
        INX    H&L    Nächstes Zeichen adressieren
        JMP    PUT
GOBACK, RET             Rücksprung
*
PUTAR,  LXI    H&L,AR   Ausgabe Aufforderung
        CALL   PUT          zum kommen.
        SUB    A,A      Linienstrom einschalten nachdem
        CALL   PRINT    das letzte Zeichen ausgegeben ist
        JMP    WAIT
Das Registerpaar H&L dient als Indexregister zur Adressierung des Textes. Der Textteil CR„CR„LF wird doppelt verwendet. Er steht eigenständig und als Schluß des Textteils AR PSE KKKK.
Für den Textteil habe ich zusätzlich die binäre Codierung angegeben.
TEXTE Maschinencode und symbolisch
01011100  AR,  C'A'
01010101       C'R'
01011011       C'b'
01001001       C'P'
01011010       C'S'
01011110       C'E'
01011011       C'b'
01010000       C'K'
01010000       C'K'
01010000       C'K'
01010000       C'K'
01010111  CR,  X'57'  CR
01010111       X'57'  CR
01011101       X'5D'  LF
00000000       X'00'  EOT
01000000  CO,  X'40'  Bu
01010001       C'C'
Hinweis: b heißt hier Zwischenraum.
01001000       C'Q'
01011011       C'b'
01010001       C'C'
01001000       C'Q'
01011011       C'b'
01010110       C'D'
01011110       C'E'
01011011       C'b'
01010110       C'D'
01001101       C'L'
01000100       X'44'  Zi
01011001       C'8'
01000000       X'40'  Bu
01001100       C'W'
01011100       C'A'
01011011       C'b'
00000000       X'00'  EOT

5. Schlußbemerkungen

Dieser Artikel hat mehrere Ziele. Er soll Sie ermutigen,
  • sich mit digitalen ICs zu beschäftigen und selbst konstruktiv auf diesem Gebiet tätig zu werden. Es ist einfacher, eine Schaltung der Digitalelektronik funktionsfähig nachzubauen als einen einigermaßen funktionierenden Hf-Vorverstärker, ein Dipmeter oder gar einen VFO!
  • sich mit der Programmierung von Mikroprozessoren zumindest theoretisch auseinanderzusetzen und etwas innovativ tätig zu wer­den. Seien Sie deshalb nicht entmutigt, wenn Sie nur Teile dieses Artikels verstanden haben. Diskutieren Sie mit Ihren Freunden über die Thematik, dann kommt das Verständnis für die bei der Programmierung übliche Denkweise von selbst. Wenn Sie bei der Interpretation der Programme überhaupt keinen Ansatzpunkt finden, machen Sie einen Ansatz und versuchen Sie Ihrer Frau die Programme zu erklären.

Letztes Upload: 09.01.2017 um 19:29:27