PC-Handscanner am KC
von Ralf Kästner
Die nächste Hürde ist genommen: Im März gelang es mir endlich, mit Hilfe eines normalen PC-Handscanners, Vorlagen in den KC einzulesen.
Entstehungsgeschichte
Kurz zur Vorgeschichte: 1993 wurde im Heft 2 der Zeitschrift c't ein Projekt vorgestellt, wo mittels eines Eigenbau-Interface ein PC-Handscanner an einem Atari ST betrieben werden konnte. Der Atari ST ist zwar als 16-Bit-Rechner nicht mit dem KC vergleichbar aber zumindest sind beide elektrisch kompatibel. Im c't-Artikel wurden sehr umfassende Informationen über Aufbau, Arbeitsweise und vor allem zu den Signalen eines Scanners veröffentlicht, so daß ich damals nach eingehendem Studium zu der Erkenntnis gelangte, eigentlich könnte das am KC auch funktionieren. Gesagt getan - ich bestellte mir die originale Interface-Leiterplatte, die Bauteile, sowie das notwendige GAL und bastelte auf der Platine eines M005-USER-Moduls eine Versuchsanordnung zusammen. Nach einigem Herumprobieren war zwar damals eine Funktion, sprich die Scanzeilen wurden korrekt synchronisiert, nachweisbar - der Inhalt also die Scanbytes waren aber falsch und hatten mit der Scanvorlage nicht viel gemeinsam. Zu Ende kam ich damals aber nicht, da der Schaltplan des M001 fehlte. Das Projekt wurde wieder auf Eis gelegt und ruhte bis Anfang 1998...
Im Februar dieses Jahr entschloß ich mich in Hinblick auf das Jahrestreffen und auf Grund der Userbefragung unseres Clubs, dieses Projekt noch einmal aufleben zu lassen. Wie zu sehen war, hat es sich auch gelohnt. Zumindest der Prototyp brachte endlich die gewünschte Funktion und stellt damit die Grundlage für einen nachvollziehbaren Anschluß von geeigneten PC-Handscannern an den KC dar. Der heutige Artikel soll keine Bauanleitung werden - ich gebe an dieser Stelle das notwendige Know-How weiter, um den ,,ganz wilden Freaks`` einen Nachbau zu ermöglichen. Wenn alles klappt, befindet sich im Anhang dieser News der Originalartikel aus der c't 2/93 und zwei Seiten aus einer aktuellen c't, wo man die Bestellinfos für das GAL und die Atari-Interface-Platine entnehmen kann. Zusammen mit dem heutigen Artikel sollte fortgeschrittenen KC-Usern ein Nachbau meiner Versuchsanordnung möglich sein.
Schaltungsprinzip
Beim Atari wird das Interface in den Adressraum des Prozessors eingeblendet, so daß die Daten über Speicherzugriffe gelesen werden. Da der KC nur einen 8-Bit-Datenbus hat, erschien es mir damals einfacher, eine PIO zu benutzen - zwei Ports mit je 8 Bit ergeben dann auch wieder 16 Bit. Alle Daten werden im KC dann über I/O-Zugriffe gelesen, mit dem M001 steht ein fast ideal geeignetes Modul zur Verfügung, so daß man dort das originale Interface eigentlich nur anschließen muß. Nun ganz so einfach war es dann doch nicht aber der zusätzliche Aufwand hält sich mit 3 Gatterschaltkreisen wirklich in Grenzen.
Blockschaltbild
Im Blockschaltbild (Bild 1) ist die Versuchsanordnung dargestellt. Das ATARI-INTERFACE, die BUS-ANPASSUNG und deren STROMVERSORGUNG befinden sich auf der Platine eines M005 bzw. werden von dort entnommen. Der Scanner wird an der 8-poligen Mini-DIN-Buchse, welche sich auf der Interfaceplatine befindet, angesteckt. Die SCANDATEN und IF-MELDUNGEN (Interface-Meldungen) werden vom Interface zum Peripheriesteckverbinder des M001 geführt. Die als KC-BUS bezeichnete Verbindung (s.u.) muß man direkt an den PIO-Pins im M001 abnehmen (stehen am Steckverbinder nicht zur Verfügung) und zu den Gattern, welche sich auf dem M005 befinden, führen. Von diesen Gattern geht es dann wieder zum Interface (ATARI-BUS). Die 12V für den Scanner nimmt man von der Platine des M005 ab und lötet sie direkt auf der Interface-Leiterplatte an der entsprechenden Stelle an (PL 2 Mittelkontakt). Nachfolgend eine genaue Aufstellung aller notwendigen Verbindungen laut Blockschaltbild mit einigen kurzen Hinweisen.
Scandaten | |||
Steckververbinder M001 | PIO-Kanal A | Bedeutung | Interface |
2A | A0 | D8 | 9 |
3A | A1 | D9 | 10 |
4A | A2 | D10 | 7 |
5A | A3 | D11 | 8 |
6A | A4 | D12 | 5 |
7A | A5 | D13 | 6 |
8A | A6 | D14 | 3 |
9A | A7 | D15 | 4 |
Die seriellen Scandaten des Scanners werden vom Interface in einem 8-Bit-Schieberegister gesammelt und byteweise zur Verfügung gestellt. Die 8 Leitungen übertragen dann immer ein Datenbyte zum M001 und können dort über Kanal A eingelesen werden.
IF-Meldungen | |||
Steckververbinder M001 | PIO-Kanal B | Bedeutung | Interface |
2B | B0 | D0 | 17 |
3B | B1 | D1 | 18 |
Die Meldungen des Interface werden über Kanal B der PIO des M001 eingelesen. Es sind zwei Leitungen erforderlich, an B0 kann der KC erfahren, wann ein neues Datenbyte fertig ist und an B1 wird der Beginn einer neuen Scanzeile vom Interface gemeldet, genaue Informationen zum (nicht vorhandenen) Übertragungsprotokoll können im Originalartikel nachgelesen werden.
Stromversorgung | ||
Leiterplatte M005 | Interface | |
AB29 | + 5 V | 1,2 |
A28 | + 12 V | Mitte PL2 |
AB1 | Masse | 38,39,40 |
Ein Scanner benötigt 12 V für die LED-Zeile, welche die Vorlage beleuchtet. Mit 300 mA Strombedarf geht das schon an die Grenze des KC-Netzteils, laut Modulbeschreibung können pro Modul 100 mA entnommen werden, bei mir steckte das M005 im Busdriver, wo 4 Module Platz finden. 4 mal 100 mA ergibt 400 mA, so daß eigentlich nichts passieren dürfte. Die 12 V werden nur dann belastet, wenn man scannt, wenn man also nicht stundenlang herumprobiert, sollte keine Gefahr bestehen - alle Angaben ohne Gewähr! Ich kann keine Garantien geben, daß es nicht doch irgendwann zu Überlastungen kommt. Im Originalartikel kann man nachlesen, wie beispielsweise auch ein externes Steckernetzteil angeschlossen werden kann. Darauf habe ich verzichtet und die Variante mit der direkten Speisung durch den KC gewählt, der dort auch angegebene Sperrwandler bringt uns nichts, da nur noch mehr Strom, dann von den 5 V, gezogen wird. Das Interface wurde von mir also ohne Sperrwandler bestückt, so daß (siehe Artikel) die Bauelemente IC5, T3-T5, R3-7, L1-2, D1 und C3 entfallen. Anstelle von L2 wurde die freigewordene D1 wie angegeben als Verpolungsschutz eingelötet. PL2 habe ich auch weggelassen, da dort direkt der Anschluß der 12 V vom M005 angelötet wurde. Zur Stromversorgung gehört auch der Anschluß der Gatter der BUS-ANPASSUNG (5 V und Masse) - nicht vergessen!

Bus-Anpassung
Bis hierher war die Lösung einfach und wohl auch für die meisten User halbwegs verständlich. Mit dem mechanischen Aufbau hatte ich auch keine Probleme. Jetzt ging es aber um die Wurst, der Scanner steckte am (unveränderten) Atari-Interface, alle Bauteile haben ihren "Saft" und nun war nur noch das Interface davon zu überzeugen, daß ein Atari am anderen Ende hängt und die Daten abholt. Zuerst hatte ich versucht, dies durch Software zu realisieren, im Nachhinein betrachtet - aussichtslos durch die äußerst knappen zeitlichen Rahmenbedingungen. Mir blieb also nichts anderes übrig, mich mit den Bussignalen (LDS /UDS /ROM3 /ROM4) des Atari zu beschäftigen und nachdem ich das einigermaßen verstanden hatte, zu versuchen, mittels der zur Verfügung stehenden KC-Bussignale ein gleichartiges Signalspiel am Interface zu erzeugen.

Nach 2 Wochen war dann die in Bild 2 angegebene Schaltung entstanden, welche genau diese Funktion erfüllt und dem Interface vorgaukelt, daß Speicherschreibzugriffe eines Atari ST die Scandaten abholen, obwohl es ein KC über I/O-Zugriffe vornimmt. Bit 7 der M001-PIO Kanal B steuert hierbei die 12V-Stromversorgung des Scanners, nur bei 1 ist der Scanner online, was bei der Softwareerstellung zu berücksichtigen ist. Zur Funktion möchte ich an dieser Stelle nichts sagen, die relativ komplizierten Zusammenhänge kann man dem Originalartikel entnehmen und im Endeffekt interessiert ja nur, daß es funktioniert.
Zusammenfassung
Rückblickend läßt sich feststellen, daß die prima Vorleistung durch den Autor des Originalartikels und meine bescheidene zusätzliche Arbeit ein nachvollziehbarer Anschluß von einfachen PC-Handscannern an den KC möglich sein müßte. Mit dem Interface getestete Typen von Scannern kann man dem Artikel entnehmen. Entscheidend dabei ist, daß sich der Scanner im Pixelmodus betreiben läßt, also jedes gesendete Bit einem Bildpunkt der Vorlage entspricht. Scanner, welche nur Graustufen (8-Bit-Wert für einen Bildpunkt der Vorlage) liefern, sind nicht geeignet!
Für Testzwecke stelle ich noch ein kurzes Programm zur Verfügung, welches ich auch auf dem Treffen verwendet hatte. Es liest ein komplettes KC-Bild unhabhängig von der am Scanner eingestellten Auflösung ein und stellt die Daten direkt auf dem Bildschirm dar. Es ist unter CAOS zu laden und wird aus dem CAOS-Menü heraus gestartet. %INI initialisiert das M001, Voreinstellung ist Kanal 1C des Busdrivers, wenn ein anderer Steckplatz verwendet wird, den Quelltext ändern und neu übersetzen oder per MODIFY direkt im RAM ändern! Mit %SCAN startet man den Scanvorgang, welcher erst beendet wird, wenn 256 Zeilen eingelesen wurden, er kann nicht abgebrochen werden!
Zum Treffen haben wir über den weiteren Weg diskutiert, es soll eine eigene Modulleiterplatte für ein Scanmodul entwickelt werden, dann würde auch eine Erstellung von "richtiger" Software lohnenswert, z.B. in Form eines zusätzlichen User-Overlays für UNIPIC 2.0. Bis dahin wird aber noch etwas Zeit ins Land gehen, sicher ist in den News dann auch wieder etwas darüber zu lesen.