Ein Videotext-Dekoder für den Atari-ST

einfacher Teletext-Dekoder im Selbstbau


Das Videotext-Signal, das von den meisten Fernsehsendern ausgestrahlt wird bietet eine fast unüberschaubare Datenflut, die sich mit einem Fernseher nur schlecht nutzen läßt. Das hier vorgestellte Interface ermöglicht die Speicherung und Weiterverarbeitung der Text-Informationen mit dem eigenen Atari-ST mit Hilfe einer simplen, an den Printerport anzuschließenden Hardware (Schaltplan im OrCAD-Format) und eines einfach zu bedienenden GEM-Programmes.

Das Videotext-Signal

Das PAL-Fernsehbild besteht aus zwei Halbbildern zu je 312 und 313 Zeilen. Die maximal mögliche Zeilenzahl von 625 Zeilen wird jedoch vom Fernsehbild bei weitem nicht genutzt und die meisten Fernseher stellen ca. 580 Zeilen dar. Ein Teil des Restes wird zur Erzeugung des vertikalen Rücklaufsignales benötigt. Die übrigen Zeilen können zweckentfremdet genutzt werden; und genau hier setzt der Videotext an. In 25 unbenutzten Zeilen des Fernsehbildes werden in digitaler Form die einzelnen Zeilen einer Videotext-Seite übertragen. Die erste Zeile enthält dabei Statusinformationen, wie Seitennummer, Sendername, Datum und Uhrzeit. Die übrigen 24 Zeilen enthalten je 40 Zeichen zu 8 Bit beliebigen Text-Inhaltes. Der Fernseh-Kenner wird jetzt gerechnet haben: 25 Bilder pro Sekunde mal 625 Zeilen mal 40 Zeichen zu je 8 Bit, das ist eine Datenrate von über 5 MBit pro Sekunde. Technisch bedingt liegt die Datenrate sogar bei über 6,9 MBit pro Sekunde. Hier liegt der Grund, weshalb das Textsignal nicht auf einen einfachen VHS-Videorekorder aufgezeichnet werden kann, die Bandbreite des VHS-Signals ist deutlich geringer. Glücklicherweise brauchen wir uns um dieses Signal aber kaum zu kümmern. Die Dekodierarbeit erledigt der SAA5246 vollkommen selbständig, so daß wir uns nur um die Übertragung der Seite vom Dekoder in den Rechner kümmern müssen und da nur jede 25. Zeile des Bildes Textinformationen enthält liegt die effektive Textdatenrate bei "nur" 25kByte pro Sekunde. Da wir aber nicht alle Seiten des Videotext in einem Rutsch einlesen, sondern immer nur eine Seite anfordern und dann abholen haben wir sehr viel Zeit zur Steuerung des Dekoders.

Eine Videotextseite

besteht immer aus genau 960 Zeichen. Trotzdem lassen sich neben Text auch Grafik, Farbinformation und weitere Attribute darstellen. Dazu enthält die Seite neben den reinen ASCII-Texten auch Steuerzeichen. Diese Zeichen werden nicht angezeigt, sondern auf dem Bildschirm durch ein Leerzeichen ersetzt oder, wenn die Option gesetzt ist, wird das vorhergehende Zeichen widerholt. Da ein Zeichen des Textes nur sieben Bit hat sind z.B. die Umlaute anders eingeordnet als beim ST, für diese Sonderzeichen muß natürlich eine Konvertierung eingebaut werden. Ein Videotext-Programm kann aus mehreren hundert Seiten bestehen, jede der 800 möglichen dezimalen Seitennummern kann mehrere Unterseiten haben, aber es gibt noch ein paar Seiten, von deren Existenz kaum jemand weiß, die Videotextseitennummer wird nämlich als binär kodierte Dezimalzahl (BCD) gesendet, was bedeutet, daß jede Ziffer aus vier Bits besteht. Nun kann man mit diesen vier Bits aber auch die Zahlen zehn bis fünfzehn darstellen, für die es kein Ziffer-Pendant gibt, ich bevorzuge deshalb die Darstellung als hexadezimale Zahl, in der die übliche Seite 100 dann als 0x100 erscheint. Mir ist bisher nur ein Sender bekannt, der tatsächlich solche Seiten sendet: CNN überträgt dort einen kostenpflichtigen kommerziellen verschlüsselten Nachrichtendienst (z.B. Seite 7A0).

Die Dekoder-Hardware

Im wesentlichen besteht die Dekoder-Hardware (Stückliste) aus dem schon oben erwähnten SAA5246 (CCT) von Philips. Dieser Chip besticht durch seinen einfachen Anschluß via I2C-Bus-Interface und die sehr einfache Zusatzhardware, die hauptsächlich aus einem 64 kBit-RAM-Baustein (z.B.: 6264) besteht. Die Verbindung zum Rechner wird über den parallelen Centronics-Port des ST hergestellt. Damit nun niemand auf seinen Drucker verzichten muß und auch die Druckfunktion des Dekoder-Programmes seinen Sinn hat, ist dieser Port durchgeschleift. Die Takt-Leitung des I2C-Bus wird am Drucker-Port mit der Data1-Leitung realisiert. Die Daten werden auf Data0 gesendet und auf Busy empfangen. Damit sich der Dekoder nicht beim Drucken angesprochen fühlt und der Drucker nicht versucht, die reinkommenden I2C-Daten zu drucken mußte ich eine Umschaltung einbauen. Dazu befindet sich auf der Platine eine Logik, die auf einen während des Druckens nicht auftretenden Zustand reagiert und den Dekoder selektiert. Das Centronics-Protokoll sieht vor, daß während Strobe low ist sich die Daten nicht ändern, genau das mache ich aber. Ändert sich bei aktiven Strobe die Leitung Data1 von Low auf High, dann wird umgeschaltet, die steigende Flanke von Data1 veranlaßt das Latch (U3A) dazu, den invertierten Zustand der Strobe-Leitung zu übernehmen. Mit diesem Signal wird dann der Bustreiber (U4) umgeschaltet. Das ungenutzte D-Latch (U3B) bildet durch die etwas unkonventinelle Beschaltung den Inverter für Strobe. Da der Centronics-Bus Open-Collector-Ausgänge besitzt sind noch ein paar Pullups an den Datenleitungen nötig und R5 und C13 verhindern ein Prellen der Strobe-Leitung zum Drucker, was ein mehrfaches Drucken einiger Zeichen zur Folge hätte.

Der I2C-Bus

ist ein sehr einfach zu steuernder standardisierter Zweileitungsbus. Dieser Bus findet inzwischen vor allem im Consumer-Bereich weite Verbreitung und wer einen Blick in einen modernen Fernseher oder Videorekorder wirft wird ihn dort sicher finden. Er besteht aus der Leitung für den Takt (SCL) und der für die Daten (SDA). Beide Leitungen sind bidirektional und open-collector. Die Steuerung des Busses übernimmt der Bus-Master, in unserem Fall der ST mit seiner parallelen Schnittstelle. Er beginnt, indem er an die Adresse eines Chips einen Befehl sendet. Im Ruhezustand sind beide Leitungen high. Der Datentransfer wird gestartet, wenn der Master SDA auf Low zieht, dieses ist die sogenannte Startbedingung und neben der Stoppbedindung der einzige Fall, in dem sich SDA ändert, während SCL high ist. Nun legt der Master auch SCL auf Low und legt das erste Bit an SDA an, er beginnt dabei mit dem MSB (dem höchstwertigen Bit). Nun läßt er SCL wieder auf high wechseln, damit übernimmt der Slave die Daten, so werden auch die weiteren acht Bits übertragen. Dem neunten Bit kommt eine besondere Bedeutung zu: Der Master sendet zwar den Takt, er läßt die Datenleitung aber los (high), der Slave signalisiert jetzt, daß er das Byte korrekt empfangen hat, indem er SDA auf low zieht. Er kann jetzt einen Wait-State fordern, indem der die Taktleitung auf low festhält. Eigentlich sollte jeder Master aus diesem Grund feststellen können, ob ein Slave die Taktleitung betätigt, unser Adapter kann das aber nicht. Hier liegt die einzige Inkomaptibilität zum I2C-Bus-Protokoll, das hat aber im Betrieb mit dem CCT keine Konsequenzen, da er von dieser Möglichkeit keinen Gebrauch macht. Sollten sie aber auch andere Chips an den Bus anschließen wollen (das ist durchaus möglich) dann sollten sie sich versichern, daß auch er die Taktleitung unberührt läßt. Es lassen sich jetzt beliebig viele weitere Bytes übertragen. Am Ende wird dann die Endbediengung gesendet, hier läßt der Master erst SCL auf high wechseln und dann SDA. Die Auswahl eines Chips geschieht über ein Adreßbyte, das der Master als erstes sendet. Jeder Chip besitzt eine Lese- und eine Schreibadresse, beim CCT sind das die Adressen 0x23 und 0x22. Diese Adressen sind fest in den Chip eingebaut, es lassen sich also nicht einfach zwei CCTs am gleichen Bus betreiben. Manche Chips haben Chip-Select-Pins, mit denen sich ihre Adresse einstellen läßt, diese lassen sich dann parallel am selben Bus betreiben. Will der Master nun ein Byte in ein Register schreiben, dann sendet er als erstes die Schreibadresse, dann ggf. eine Registernummer und dann das Datum. Will der Master ein Byte lesen, so sendet er als erstes die Leseadresse und gibt dann den Takt vor, mit dem der Slave die Daten sendet. In diesem Fall muß dann der Master das Byte quittieren. Soll bei diesem Lesen ein bestimmtes Register ausgewählt werden, dann wird dessen Nummer vor dem Lesezugriff erst mit einem Schreibzugriff übertragen.

Der Aufbau und Inbetriebnahme

Der Aufbau der Platine gestaltet sich äußerst einfach, zuerst lötet man die Durchkontaktierungen ein, dann die IC-Fassungen in einer Reihenfolge, in der die von oben anzulötenden Stellen möglichst gut zu erreichen sind (den Widerstand unter U1 nicht vergessen). Dann die Widerstände und Kondensatoren und zuletzt die Stecker bestücken. Beim Einbau des Quarzes ist folgendes zu beachten: Sollten Sie einen SAA5246A erstanden haben, dann müssen Sie C4 und den Quarz vertauschen und C12 mit 1nF, C5 mit 56pF, C4 mit 15pF und die Spule mit 1uH bestücken. Jetzt sollte man am besten alles nochmal mit einem Durchgangsprüfer durchtesten. Lassen sich keine Fehler feststellen, dann kann die Platine ersteinmal ohne eingesteckte ICs mit Spannung versorgt werden. Am einfachsten ist der Anschluß an den Joystickport, dort liegen Masse und 5V auf den Pins 8 und 7. An Pin 14 des 74LS74 und an Pin 20 des 74LS244 müssen jetzt bei eingeschaltetem Rechner ca. 5 Volt zu messen sein. Dann kann man den '74 und den '244 in ihre Fassungen stecken. Mit einem einfachen Voltmeter muß jetzt an Pin 6 des '74 eine Spannung von ca. 4-5 Volt zu messen sein, während an Pin 5 annähernd Null Volt zu messen sind, ist dem nicht so, so sind die Verbindungen zwischen diesen beiden Chips und dem Widerstandsarray zu testen. Verlief bisher alles erfolgreich, kann das Interface mit Rechner und Drucker verbunden werden. AUF GAR KEINEN FALL darf man das Interface verkehrtherum in die serielle Schnittstelle stecken, das Interface würde unweigerlich Schaden nehmen!!! Um das zu verhindern ist es sinnvoll, Distanzstücke am Druckeranschluß des Interfaces zu befestigen, wie sie sich auch an den Schnittstellen des ST befinden, daran läßt sich nicht nur das Druckerkabel sicher anschrauben, es wird auch unmöglich das Modul verkehrtherum in den Rechner zu stecken. Als erstes kann man jetzt eine Datei drucken, das sollte wie bisher einwandfrei funktionieren. Meldet der Rechner, daß der Drucker streikt, dann liegt ein Fehler in der Strobe- oder der Busy-Leitung vor. Sind die gedruckten Zeichen falsch oder verstümmelt, dann muß man sich die Datenleitungen noch einmal ansehen. Hat das funktioniert kann der erste Funktionstest mit dem Videotext-Programm erfolgen. Dazu startet man einfach das VIDEOTXT.APP. Es sollte sich jetzt mit einer Fehlermeldung 'CCT antwortet nicht' melden. Lautet die erscheinende Meldung 'Adapter nicht vorhanden', dann liegt irgendwo in der Verbindung von oder zur Diode D2 oder dem '244 ein Fehler (Diode richtig herum?). Nun kommt endlich der endgültige Funktionstest: Rechner ausschalten, SAA5246 und RAM einsetzen, Verbindung zum FBAS-Signal eines Fernsehers herstellen und Rechner wieder einschalten. Nach dem Start des Dekoder-Programmes sollte sich jetzt ein Window öffnen und das Programm nach Seite 100 suchen und diese nach spätestens 30 Sekunden anzeigen.

Das Videosignal

Als Videoquelle eignen sich gleichermaßen Fernseher, Videorekorder und Receiver. Während jeder Rekorder und Receiver über einen Videoausgang verfügt, (sonst könnte er ja seine Aufgabe nicht erfüllen) kommt es vor allem bei billigen und/oder alten Fernsehern vor, daß sie über garkeinen Videoausgang verfügen, ein Blick auf die Rückseite des Fernsehers ist also vor Bastelbeginn ratsam. Es haben sich drei Steckerformen bei der Videoübertragung etabliert: Der Cinch-Stecker, der Scart-Stecker und der 6-Polige DIN-Stecker. Während sich auf dem Scart-Stecker eines jeden Gerätes getrennte Ein- und Ausgangspins befinden ist bei den beiden anderen Steckern an Fernsehern nicht mit Sicherheit ein Ausgang vorhanden. Hier sollte man also mit einem Oszilloskop oder einem BAS-Bildschirm das Vorhandensein eines entsprecheden Signales testen. Da das FBAS-Video-Signal ein mit 75 Ohm abzuschließendes Signal ist (das bedeutet, daß im Empfänger ein 75 Ohm-Winderstand gegen Masse angeschlossen ist), macht es einen Unterschied, ob man den Dekoder als einziges Gerät an einem Ausgang betreibt, oder ob er parallel zu einem anderen Gerät angeschlossen wird. Beim Anschluß an einen Videorekorder, an dessen FBAS-Ausgang bereits ein Fernsehgerät angeschlossen ist muß nichts weiter beachtet werden. Schließt man den Dekoder dagegen an den unbenutzten Ausgang des Fernsehers oder an einen Videorekorder an, dessen Fernseher über den HF-Ausgang angeschlossen ist, dann muß man selbst den 75 Ohm-Abschluß vornehmen, indem man am Dekoder einen 68 Ohm-Winderstand zwischen Videosignal und Masse anlötet. In diesem Fall ist die Länge des Kabels zum Dekoder eher unkritisch. Befindet sich der Abschlußwiderstand dagegen in einem anderen Gerät, so sollte das Kabel zum Dekoder die Zwei-Meter-Marke nicht überschreiten, da es sonst zu störenden Reflektionen auf der Leitung kommen kann. Als Videosignal eignen sich NICHT die S-VHS oder RGB-Signale, die ebenfalls an den Buchsen einiger moderner Ferseher anliegen, aber durch andere Steckerformen zu erkennen sind bzw. auf anderen Pins des Scart-Steckers anliegen.

Die Software

Das abgedruckte Listing ist ein einfaches Dekoder-Programm, das als simple TOS-Applikation gehalten ist, die Routinen zur Programmierung der I2C-Schnittstelle sind im Modul I2CFAST.C enthalten, während die Funktionen die zur Programmierung des CCT nötig sind im Modul CCT.C implementiert wurden. Das eigentliche Programm befindet sich in CCT_IO.C. Es wurde mit Pure-C entwickelt, sollte aber ohne Probleme mit anderen Compilern zu übersetzen sein. Die Routinen im I2C-Modul sind so universell gehalten, daß sie auch zur Ansteuerung anderer Chips gegeignet sind. Außer dem hier beschriebenen Interface wird noch ein Adapter unterstützt, der den Anschluß eines Druckers nicht erlaubt, und es wird erkannt, ob die angeschlossene Hardware die Datenleitung bei Eingang invertiert, wie es zum Beispiel auf dem Adapter der c't der Fall ist. Mit diesen Routinen läßt sich also fast alles, was mit I2C-Schnittstelle am Printer-Port des ST je gebaut wurde erkennen und steuern. Das Programm ist so einfach wie möglich gehalten, nach dem Start sucht es nach Seite 100, ist diese gefunden kann man eine neue Seitennummer eingeben, Null beendet das Programm. Es wird weder getestet, ob es die Seite überhaupt gibt, noch wird auf die Sprachen-Kennung im Header einer Seite geachtet, das Programm nimmt immer an, daß die Seite die deutschen Umlaute enthält, ebensowenig werden Grafikzeichen angezeigt, der Erweiterung stehen also Tür und Tor offen. Das auf Diskette zu beziehende Programm (VIDEOTXT.APP) ist wesentlich komfortabler, es ist eine GEM-Applikation und sowohl als Programm, als auch als Accessory lauffähig. Es ist vollkommen GEM-konform geschrieben und auch auf Grafikkarten lauffähig. Es unterstützt alle Grafikzeichen des Videotextes inklusive der separierten Grafik, doppelt hoher Schrift, blinkenden und verdeckten Zeichen und aller internationalen Zeichensätze. Weiterhin existiert eine eingebaute Hardcopy-Funktion, die es erlaubt, die aktuelle Seite auf einem EPSON-kompatiblen Drucker auszudrucken, oder man kann die Seite als ASCII-Daten auf Diskette speichern. Auf Grafikkarten mit mindestens 16 Farben (z.B. der STGA, oder dem TT) werden die Daten originalgetreu wie auf dem Fernseher angezeigt, ab 24 Farben wird auch das 'Blinkend'-Attribut beachtet. Außerdem erlaubt das Programm die Auswahl der o.g. hexadezimalen Seitennummern und die komfortable Wahl einer Textseite durch anklicken. Damit kann man sich bequem mit der Maus durch den Videotext hangeln. Zusammen mit der Iconleiste ermöglich das einem, das Programm komplett über Tastatur oder komplett mit der Maus zu steuern, je nach Geschmack. Da man das Programm durch einfaches umbenennen in VIDEOTXT.ACC in die Menüleiste verbannen kann, ist das Videotexten im Hintergrund aus fast jeder anderen Applikation heraus möglich. Ein weiteres kleines Programm (CCT_TIME.PRG) versucht, die Uhrzeit aus dem Textsignal zu filtern und überträgt diese in die Echtzeituhr. Mit ihm im AUTO-Ordner braucht man sich kaum noch um seine Uhr zu kümmern, es reicht, wenn dann und wann beim Booten der Fernseher läuft.

Erweiterungen

Mit dem Dekoder lassen sich noch einige bisher ungenutzte Dinge anfangen. Der automatischen Suche nach bestimmten Seiten und deren Auswertung sind kaum Grenzen gesetzt, so kann man den Dekoder Börsencharts sammeln und erzeugen lassen oder man schreibt ein Programm, das versucht, herauszubekommen, wann wo StarTrek im Fernsehen läuft. Da die Hardware problemlos erweiterbar ist, sollte es kein Problem darstellen, einen Chip anzuschließen, der eine Fernbedienung nachahmt; dieser könnte dann Fernseher und Videorekorder steuern. Damit sind dann so ausgefallene Sachen möglich, wie die automatische Aufnahme aller irgendwann, irgendwo gesendeten StarTrek-Folgen, ein für den Seriengucker einmaliges Tool.

to be continued ...

Literatur


Till Harbaum
Till@Harbaum.org