C 64 extern — Der Weg nach draußen
In diesem Teil des Kurses werden wir uns mit dem Control-Port 1 beschäftigen. Er eignet sich nicht nur zum Anschluß eines Joysticks. Was man noch alles mit ihm machen kann, wollen wir am Beispiel eines Lichtgriffels im Selbstbau zeigen.
Am Control-Port 1 des C 64 gibt es nur noch einen Anschluß, dessen Bedeutung wir noch nicht genau kennen. Gemeint ist Pin 6, der Light Pen-Anschluß, von dem wir im letzten Teil schon etwas gehört haben. Er hat zwei verschiedene Funktionen. Zum einen wird hier die Information über den Zustand des Feuerknopfes eingespeist. Zur anderen interessanten Anwendung kommen wir jetzt.
Vielleicht haben Sie schon einmal von einer Computeranlage gehört (oder eine gesehen), bei der man bestimmte Funktionen mit einem speziellen Stift, der mit dem Computer verbunden ist, direkt am Bildschirm anwählen kann. Solch einen Stift nennt man Lichtgriffel. Ein Lichtgriffel ist sehr einfach an den C 64 oder den VC 20 anzuschließen. Man kann sich den »Lightpen« sogar selbst bauen.
Im Innern eines Lichtgriffels steckt als wichtigstes Element ein Fototransistor, eine Fotodiode oder ähnliches. Dieser Fototransistor reagiert wie unser LDR aus der letzten Folge auf Licht. Das Licht wird vom Elektronenstrahl der Bildröhre erzeugt, wenn dieser auf die Mattscheibe trifft. Der Fototransistor an den Bildschirm gehalten, registriert den Elektronenstrahl als kurzen Lichtimpuls. Das ist auch der Grund, weshalb der Lichtgriffel nur an relativ hellen Bildschirmstellen funktioniert, denn nur hier entsteht ein ausreichender Lichtimpuls. Wenn vom Lichtgriffel ein Impuls an den Computer gegeben wird, prüft dieser, für welchen Punkt des Schirms er gerade das Signal an den Bildschirm geschickt hat. Mit Hilfe dieser Information kann er dann die X- und Y-Koordinate der derzeitigen Position des Lichtgriffels auf dem Bildschirm zur Verfügung stellen. Diese beiden Werte können wir abfragen und für unsere Programme verwenden.
Lichtgriffel selbstgebaut
Bevor wir wieder etwas programmieren, wollen wir uns einen Lichtgriffel beschaffen und an unseren Computer anschließen. Für den Lichtgriffel benötigen wir, wie oben schon gesagt, einen Fototransistor. Es wurde der Typ TIL 78 verwendet. Alle Bauteile, die für diesen Kursteil benötigt werden, sind im Elektronikfachhandel erhältlich. Der LDR aus der letzten Folge reicht für unseren Lichtgriffel nicht aus, weil er zu langsam auf die Lichtschwankungen reagiert und deshalb keine brauchbaren Impulse liefert.
Wenn Sie schon in der glücklichen Lage sind, einen echten Lichtgriffel zu besitzen, können Sie die Versuche selbstverständlich auch mit diesem ausführen. Im folgenden soll jedoch nur auf den Fototransistor eingegangen werden.
Der TIL 78 hat zwei Beine. Sie heißen »Kollektor« und »Emitter«. Nun stellt sich die Frage, welches Bein welche Funktion hat? Es gibt drei Möglichkeiten, dies herauszufinden. Die erste ist für den Elektronikneuling wohl die beste: Sie fragen in dem Fachgeschäft, in dem Sie den Fototransistor kaufen. Zu Hause haben Sie dann zwei weitere Möglichkeiten: Die Seite des Fototransistorgehäuses, auf der sich der Kollektor befindet, ist etwas abgeflacht. Außerdem hat der Kollektor das kürzere Anschlußbein. Die zweite Erkennungsmethode ist allerdings sicherer als die dritte, weil irgend jemand das längere Bein zum kürzeren gemacht haben könnte!
Schließen wir den »Lightpen« an den Computer an. Schalten Sie diesen dazu aus. Der Light-Pen-Anschluß ist der einzige an den Control-Port des C 64, der nur einmal, und zwar am Port 1, vorhanden ist. Verbinden Sie den Emitter mit GND und den Kollektor mit Light Pen des Port 1. Das war’s schon!
Zur Demonstration habe ich das Programm »Demo zum Lichtgriffel« (Listing 1) geschrieben. Es ist den Joystick-Demos sehr ähnlich. Auch hier werden Punkte auf den Bildschirm gemalt. Nur diesmal erscheinen die Punkte dort, wo Sie den Lichtgriffel auf den Bildschirm setzen. Sie können also den Bildschirm als Eingabeeinheit verwenden und direkt auf ihm zeichnen.
Geben Sie das Programm ein und starten Sie es. Als erstes werden Sie gefragt, ob die erscheinenden Punkte jeweils wieder gelöscht werden oder gesetzt bleiben sollen. Antworten Sie mit einem der angegebenen Buchstaben. Nach wenigen Sekunden, in denen der Farbspeicher schwarz initialisiert wird, erscheint irgendwo ein kleines Rechteck auf dem Bildschirm. Nehmen Sie den Fototransistor zur Hand und führen Sie ihn über die Mattscheibe. Der Punkt folgt dem Lichtgriffel über den Bildschirm.
Auch Lichtgriffel und Tastatur stören einander. Wenn Sie unkontrolliert auf den Tasten herumtippen, sehen Sie, daß der Punkt auf dem Bildschirm hin-und herspringt. Ebenso erscheinen an der Cursorposition wahllos Zeichen, wenn sich der Computer im Direktmodus befindet und Sie den Lichtgriffel über den Bildschirm bewegen. Diese Störungen treten beim VC 20 nicht auf; hier lassen sich Tastatur und Lichtgriffel synchron benutzen.
Sollte sich der Punkt auf dem Bildschirm nicht vom Fleck bewegen, so kann das mehrere Gründe haben: Wenn Sie keinen Fehler beim Abschreiben des Listings gemacht haben (sich der VC 20 in der Grundversion befindet) und der Lichtgriffel korrekt angeschlossen ist, kann nur der Bildschirm zu dunkel eingestellt sein. Drehen Sie den Helligkeitsregler etwas weiter auf; das müßte den Lichtgriffel zum Ansprechen bringen.
Eine Verstärker-Schaltung
Funktioniert das Programm immer noch nicht, wird der Anschluß des Lichtgriffels etwas komplizierter. Sie benötigen eine Verstärkerschaltung, die die zu schwachen Signale vom Lichtgriffel für den Computer verstärkt. Eine solche Schaltung gibt Bild 1 wieder. Sie wird durch die im Schaltbild angegebenen Anschlüsse mit dem Computer verbunden und kann sowohl an den C 64 als auch an den VC 20 angeschlossen werden.

Die Schaltung ist zum Glück recht einfach, sollte jedoch sorgfältig aufgebaut werden, um Kurzschlüsse zu vermeiden. Sie sollten sich deshalb vielleicht von einem Hobby-Elektroniker helfen lassen, wenn Sie sich noch nie mit Elektronik beschäftigt haben. Die Teile, die Sie für den Verstärker benötigen, entnehmen Sie bitte der Stückliste 1. Die folgende Funktionsbeschreibung der Schaltung ist für den fortgeschrittenen Hobby-Elektroniker gedacht und kann übersprungen werden.
Halbleiter
- 1 NE 555 DIL
- 1 BC 238 C
- 1 TIL 78
Widerstände
- 1 kΩ
- 1 10 kΩ
- 1 Trimmpoti 10 MΩ
Kondensatoren
- 1 1nF
Sonstiges
- etwas Kabel
- Control-Port-Stecker
Zur Schaltung: Sie besteht im wesentlichen aus einem IC (Integrated Circuit = Integrierter Schaltkreis) des Typs NE 555. Der NE 555 ist in unserer Schaltung als Monoflop (Monostabile Kippstufe) geschaltet. Wenn das Monoflop durch einen negativen Impuls an Pin 2 des ICs angestoßen wird, verbleibt es eine kurze Zeit in einem Arbeitszustand und fällt dann in einen Grundzustand zurück. Die Triggerimpulse (Pin 2 heißt Trigger) kommen von unserem an den Bildschirm gehaltenen Lichtgriffel. Er sendet einen Impuls, wenn er vom Elektronenstrahl der Bildröhre überstrichen wird. An Pin 3 (das ist der Ausgang des ICs) entstehen so die Impulse, die, vom Transistor verstärkt, dem Light-Pen-Anschluß des Computers zugeführt werden.
Mit Hilfe dieser Verstärkerschaltung funktioniert der Lichtgriffel auch bei einem wesentlich dunkleren Bildschirm. Der optimale Arbeitspunkt der Schaltung wird mit dem 1-Mega-Ohm-Potentiometer eingestellt. Das ist beim C 64 besonders sorgfältig durchzuführen, weil sich sonst wieder einmal Probleme mit den normalen Computerfunktionen ergeben. Drehen Sie einfach solange langsam am Potentiometer, bis der Lichtgriffel ordnungsgemäß funktioniert. Am VC 20 arbeitet die Schaltung problemlos, jedoch muß auch hier der Arbeitspunkt eingestellt werden. Der 1-Kilo-Ohm-Widerstand ist ein Vorwiderstand zum Transistor. Die restlichen Bauteile stellen die Zeit ein, während der das Monoflop im Arbeitszustand verweilt, bis es wieder in den Grundzustand zurückfällt.
Sehen wir uns jetzt das Programm einmal genauer an. In Zeile 390/400 wird der Farbspeicher initialisiert, da die Punkte auf dem Bildschirm schwarz erscheinen sollen. Die Lichtgriffelposition wird vom Computer in X- und Y-Richtung jeweils mit einer Genauigkeit von neun Bit ermittelt. Die acht höherwertigen der neun Bits des X-Wertes stehen in der Speicherstelle 53267 (VC 20: 36870), die des Y-Wertes wieder in der darauffolgenden, 53268 (VC 20: 36871). Das Bit 0 des X-/Y-Wertes kann nicht abgefragt werden, wodurch eine Auflösung von nur zwei Bildpunkten zustande kommt. Das ist jedoch für »niederauflösende« Grafik völlig ausreichend, geschweige denn für Steuerfunktionen. In den Zeilen 440 bis 470 werden diese beiden Speicherzellen je fünfmal ausgelesen. Die erhaltenen Werte werden addiert und anschließend durch 5 geteilt (Zeile 480). Diese Mittelwertsbildung dient zur Stabilisierung der Werte, denn der X-Wert schwankt ziemlich stark, während die Y-Koordinate recht konstant ist. Das ist seltsamerweise bei beiden Computern so, scheint also systembedingt zu sein.
In den Zeilen 510/520 werden die ausgelesenen Werte in Bildschirmkoordinaten umgewandelt. Wenn man einen Lichtgriffel in eigenen Programmen einsetzen will, muß man hier etwas experimentieren. Jeder muß für jedes Programm neu herausfinden, welche Werte die Koordinaten annehmen sollen (können) und wie er die Werte für dieses Programm am besten aufbereitet. Ab Zeile 540 folgt dann die durch die Programme der letzten Folge schon fast zum Standard gewordene Wertekontrolle, die bei diesem Programm wegen des schwankenden X-Wertes besonders wichtig ist. Die verbleibenden Zeilen dürften hinreichend bekannt sein.
Listing 2 zeigt ein weiteres Demonstrationsprogramm zum Lichtgriffel. Hier wird der Lichtgriffel nicht zum Zeichnen, sondern zum Auswählen von Menüpunkten benutzt. Wegen der größeren Genauigkeit des Y-Wertes wird dazu nur dieser verwendet. Es wird also nur die vertikale Richtung des Lichtgriffels ausgewertet. Sie können mit dem Programm einen der drei Tongeneratoren des C 64/VC 20 bestimmen, auf dem dann ein Ton erklingt; die Tonhöhe hängt vom ausgewählten Tongenerator ab. Den gewünschten Tongenerator bestimmen Sie, indem Sie das entsprechende Feld auf dem Bildschirm mit dem Fototransistor berühren.
In Zeile 470 wird das Lichtgriffel-Y-Register ausgelesen. Aufgrund des erhaltenen Wertes werden dann ab Zeile 490 der angewählte Tongenerator und die Tonhöhe bestimmt. Im C 64-Programm wird dabei nur auf eine direkte Berührung des angegebenen Kästchens in vertikaler Richtung reagiert, während beim VC 20 aus Platzgründen in den Programmzeilen größere Bereiche akzeptiert werden. Wird kein neuer Tongenerator angewählt, ist also T2 ( = neuer Tongenerator) gleich T1 ( = alter Tongenerator), wird durch Zeile 550 verhindert, daß die Generatoren neu gesetzt werden, weil dadurch eine Tonstörung entsteht.
Wenn Sie den Lichtgriffel öfter in selbstgeschriebenen Programmen einsetzen wollen, sollten Sie sich mit dem Fototransistor einen echten Licht-»Griffel« basteln. Nehmen Sie dazu einen Kugel- oder Filzschreiber und entfernen Sie alle »Innereien«. Löten Sie an die beiden Anschlüsse des Fototransistors zwei ausreichend lange Kabel an und isolieren Sie sie sorgfältig gegeneinander. Ein Kurzschluß kann zwar keinen Schaden anrichten, doch setzt er den Fototransistor außer Betrieb. Stecken Sie den Fototransistor jetzt von hinten in den Stift und befestigen Sie ihn vor der Minenöffnung. Je kleiner diese ist, desto konstanter werden Ihre Werte anschließend sein, weil ein kleinerer Bildschirmausschnitt auf den Fototransistor einwirkt. Sie müssen jedoch aufpassen, daß nicht zu wenig Licht auf den Fototransistor fällt, da er sonst nicht mehr anspricht. In diesem Fall bohren Sie die Minenöffnung einfach etwas auf. Sie können auch mit dem Helligkeitsregler am Fernseher oder Monitor etwas korrigieren. Nach dem Anschluß an den Computer besitzen Sie dann einen richtigen Lichtgriffel.
Damit ist die Besprechung der Control-Ports vorerst abgeschlossen.
(Tobias Nicol/ev)100 rem ******************************* 110 rem * * 120 rem * d e m o z u m * 130 rem * --------------- * 140 rem * * 150 rem * l i c h t g r i f f e l * 160 rem * ----------------------- * 170 rem * * 180 rem * by tobias nicol * 190 rem * * 200 rem * neuwiesenstrasse 20 * 210 rem * * 220 rem * 6000 frankfurt 71 * 230 rem * * 240 rem ******************************* 250 260 rem ********* information ********* 270 print "{clr}{down}{down}{down}{down}soll der punkt jeweils 280 print "{down}wieder geloescht werden?{down} 290 print "bitte 'j' oder 'n' eingeben! 300 get a$ : if a$ = "" then 300 310 if a$ = "n" then l = 1 320 330 rem ******* initialisierung ******* 340 poke 53280,0 : poke 53281,1 350 print "{clr}" : a = 1024 : b = 40 360 c = 24 : d = 53267 370 380 rem ***** farbspeicher setzen ***** 390 for i = 55296 to 56295 400 poke i,0 : next i 410 420 rem ****** werte einlesen ****** 430 rem ****** und stabilisieren ****** 440 for i = 1 to 5 450 x = x + peek (d) 460 y = y + peek (d+1) 470 next i 480 x = int (x/5) : y = int (y/5) 490 500 rem ** in koordinaten umwandeln ** 510 kx = int ((x-50)/180*(b-1)) 520 ky = int ((y-45)/190*c) 530 540 rem ** koordinaten kontrollieren ** 550 if kx < 0 then kx = 0 560 if ky < 0 then ky = 0 570 if kx > b-1 then kx = b-1 580 if ky > c then ky = c 590 600 rem **** punkt setzen/loeschen **** 610 if l=0 then poke a+xa+ya*b,32 620 poke a+kx+ky*b,160 630 640 rem ** neue werte & ruecksprung ** 650 xa = kx : ya = ky : x = 0 : y = 0 660 goto 420 670 680 690 700 rem ******************************* 710 rem *** aenderungen fuer vc-20 *** 720 rem ******************************* 730 rem 740 rem setzen sie diese zeilen ein: 750 rem 760 rem 340 poke 36879,24 770 rem 350 print "{clr}" : a=7680 : b=22 780 rem 360 c=22 : d=36870 790 rem 390 for i = 38400 to 38905 800 rem 510 kx = int ((x-55)/95*(b-1)) 810 rem 520 ky = int ((y-38)/89*(c)) 820 rem 830 rem wenn sie das programm abspei- 840 rem chern wollen, sollten sie noch 850 rem die zeilen 270-290 anpassen.
100 rem ******************************* 110 rem * * 120 rem * t o n g e b e r m i t * 130 rem * ----------------------- * 140 rem * * 150 rem * l i c h t g r i f f e l * 160 rem * ----------------------- * 170 rem * * 180 rem * by tobias nicol * 190 rem * * 200 rem * neuwiesenstrasse 20 * 210 rem * * 220 rem * 6000 frankfurt 71 * 230 rem * * 240 rem ******************************* 250 260 rem ****** bildschirmaufbau ****** 270 poke 53281,1 : poke 53280,3 280 print "{clr}{down} bitte waehlen sie!" 290 print " ------------------{down}" 300 for i = 1 to 3 310 print " {CBM-A}{SHIFT-*}{CBM-S}" 320 print " B B tongenerator";i 330 print " {CBM-Z}{SHIFT-*}{CBM-X}{down}{down}" 340 next i 350 360 rem ***** sid-chip einstellen ***** 370 t1 = 4 : si = 54272 380 for i = 1 to 10 390 read a,b 400 poke si+a,b 410 next i 420 data 24,15, 0,207, 1,50, 7,207 430 data 8,100, 14,207, 15,150, 6,240 440 data 13,240, 20,240 450 460 rem ** lightpenposition abfragen ** 470 y = peek (53268) 480 490 rem ***** position auswerten ***** 500 if y > 79 and y < 91 then t2 = 4 510 if y > 119 and y < 131 then t2 = 11 520 if y > 159 and y < 171 then t2 = 18 530 540 rem **** tongenerator tauschen **** 550 if t2 = t1 then 460 560 poke si+t1,0 570 poke si+t2,17 580 590 rem ** neue werte & ruecksprung ** 600 t1=t2 610 goto 460 620 630 640 650 rem ******************************* 660 rem *** aenderungen fuer vc-20 *** 670 rem ******************************* 680 rem 690 rem loeschen sie 370-440! 700 rem 710 rem geben sie ein: 720 rem 730 rem 270 poke 36879,27 740 rem 370 t2 = 36874 : poke 36878,15 750 rem 470 y = peek (36871) 760 rem 500 ify< 63thent2=36874:goto540 770 rem 510 ify< 85thent2=36875:goto540 780 rem 520 ify<103thent2=36876:goto540 790 rem 560 poke t1,0 800 rem 570 poke t2,(t2-36871)*50