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
- c't 11/91 / c't 7/92 S. 176ff
- Datenblatt SAA5246 von Philips
- Fernsehtext-Spezifikation des Zentralverbandes der Elektroindustrie
Till Harbaum
Till@Harbaum.org