Ein-Chip-Computer: Gamepad/Joystick
Transcription
Ein-Chip-Computer: Gamepad/Joystick
Physik Seminar SS 2007: Ein-Chip-Computer Fachbereich 4: Informatik Ein-Chip-Computer: Gamepad/Joystick Sarah Grebing (206110365) sarahgrebing@uni-koblenz.de Kurzfassung Diese Ausarbeitung ist im Rahmen des Physik-Seminars “Ein-Chip-Computer” an der Universität Koblenz-Landau bei Herrn Dr. Merten Joost entstanden. Sie behandelt die Möglichkeiten Eingabegeräte wie zum Beispiel ein PSOne Gamepad oder einen Joystick an einen Microcontroller anzuschließen. Hauptsächlich bezieht sich diese Ausarbeitung auf ein bereits realisiertes Projekt in dem ein PSOne Gamepad an einen Microcontroller angeschlossen wurde. 2 Inhaltsverzeichnis 1 Einleitung 5 2 Joystick 5 2.1 Aufbau und Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Gameport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Anwendung an einem Microcontroller 9 . . . . . . . . . . . . . . . . . . . . . . . . . 3 Gamepad 9 3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3 Verschiedene Gamepads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 Playstation 1 Gamepad - PSOne Gamepad 4.1 Pinout des PSOne Gamepads 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Single-Byte Übertragung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.3 Übertragungsprotokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.4 Anforderung an den Microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.5 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5 Fazit 18 Literatur 20 3 4 1 Einleitung Diese Ausarbeitung behandelt die Möglichkeiten Eingabemedien wie einen Joystick oder ein Gamepad an einen AVR Microcontroller anzuschließen. Zuerst werde ich kurz auf den allgemeinen Aufbau von Gamepads und Joysticks eingehen. Insbesonders werde ich mich im weiteren damit beschäftigen ein PSOne Gamepad an den Microcontroller anzuschließen. Der Inhalt dieser Ausarbeitung basiert hauptsächlich auf einem schon realisierten Projekt [E22]. 2 Joystick Ein Joystick ist ein Eingabegerät zum Steuern von Computerspielen. Er ist dem Steuerknüppel eines Flugzeugs oder der Gangschaltung eines Autos nachempfunden. Benutzt wird er zum Bewegen des Cursors auf dem Bildschirm, zum Bewegen von Personen sowie zum Steuern eines Autos bzw. eines Flugzeugs in einem Computerspiel. Außer einem Steuerknüppel besitzt ein Joystick mehrere Funktionstasten (z.B. zum Feuern) In Abbildung 1 ist ein Joystick mit seinen möglichen Tasten dargestellt. Abbildung 1: Joystick Quelle:[wika] Die älteren Joysticks wurden an den Gameport des Computers angeschlossen. Dieser Anschluss wird jedoch mehr und mehr durch den USB-Anschluss ersetzt. 5 Taste 1 2 3 4 5 6 7 8 Name/Funktion Griff Sockel Feuerknopf Zusatzknopf Autofeuer Schalter Schubregler Cooliehat (POV Hat) Saugnapf Tabelle 1: Quelle: [wika] 2.1 Aufbau und Funktionsweise Bei einem Joystick geht es also in der Regel darum, Bewegungen des Hebels in elektronische Informationen umzuwandeln, damit sie für den Computer verständlich werden. Die meisten Joysticks sind zweidimensional, d.h., man kann sie in zwei Richtungen bewegen (X-Achse und Y-Achse). Wenn man nach rechts oder links steuert, bewegt man sich auf der X-Achse, wenn man hinauf oder hinunter steuert, bewegt man sich auf der Y-Achse. Zwischen den Funktionsweisen eines digitalen Joysticks und eines analogen Joysticks gibt es Unterschiede: 2.1.1 Analoge Joysticks Bei dem analogen Joystick bewegt der Hebel eine dünne Stange, welche sich in zwei rotierenden Schienen befindet. Wenn man nun den Hebel nach links oder rechts bewegt, wird die X-Achsenschiene bewegt, bei Bewegungen, die vorwärts oder rückwärts gerichtet sind, wird die Y-Achsenschiene bewegt. Wenn man nun diagonal steuert, bewegen sich beide Schienen. Abbildung 2: Funktion eines analogen Joysticks Quelle: [Joya] Die Schienen sind mit zwei Potentiometern verbunden, welche bei Bewegung einen Widerstand einstellen. Jedes der Potentiometer besteht aus einem Drahtwiderstand, in Form einer gebogenen Spirale, und einem beweglichen Kontakt-Arm. Die Netzspannung des Computers leitet den Strom durch diesen Widerstand sowie durch den Kontakt-Arm und wieder zu- 6 rück zum Joystick-Port. Diesen Widerstand kann man beeinflussen, indem der Kontakt-Arm durch die Bewegung des Hebels bewegt wird. Wenn sich nun der Arm auf der gegenüberliegenden Seite der Stromzufuhr befindet, muss der Strom einen langen Weg durch den Widerstand zurücklegen, also ist der Widerstand maximal hoch. Befindet sich der Arm aber in der Nähe der Stromzufuhr, so ist der Widerstand minimal klein. Auf diesem Weg wird nun die physische Stellung des Hebels in ein elektrisches Signal umgewandelt. Dieses Signal ist Abbildung 3: Potentiometer bei einem Joystick Quelle: [Joya] aber analog. Da Computer aber mit digitalen Signalen besser umgehen können, wird das Signal dort umgewandelt. Mittels des vom Joystickport kommenden Stroms wird daraufhin im Computer ein Kondensator bis zu einer bestimmten Spannung aufgeladen. Die Zeitspanne zum Aufladen des Kondensators wird gemessen und anhand der Aufladezeit erfolgt der Rückschluss auf den Auslenkungswinkel. Denn je höher der Widerstand, desto länger braucht der Kondensator um eine bestimmte Spannung zu erreichen. Hierbei wird auch die Auslenkung übertragen. 2.1.2 Digitale Joysticks Bei den digitalen Joysticks werden nur die Richtungen übertragen. Durch 4 bis 8 Schaltkontakte kann man messen in welcher Stellung sich der Hebel befindet (z.B. rechts-oben) In der einfachsten Form sind die digitalen Joysticks elektrische Schalter. Sie bestehen aus einem Hebel, welcher auf einem Plastiksockel befestigt ist. Im Sockel ist eine Platine direkt unter dem Hebel angebracht. Auf dieser Platine sind ”aufgemalte” Kabel, welche zu KontaktTerminals führen und einen Stromkreis schließen. Aus diesen Terminals führen dann Kabel zum Anschlussstecker. Die ”aufgemalten” Kabel bilden in sich wiederum kleine Stromkreise. Da sich in diesen Stromkreisen eine Art Schalter befindet, der nur geschlossen werden kann, wenn der Hebel bewegt wird, sind sie bei der neutralen Position des Hebels unterbrochen. Jeder unterbrochene Stromkreis ist mit einem Plastikknopf bedeckt, der eine kleine Metallplatte enthält. Bewegt der Spieler den Hebel, wird einer dieser Knöpfe nach unten gedrückt und berührt die Platine. Damit schließt sich ein Stromkreis und der Strom kann bis zum 7 Kontakt-Terminal fließen und weiter in den Computer. Das gleiche Prinzip wird für die Feuertasten angewendet. Abbildung 4: Platine eines Joysticks Quelle: [Joya] Eine Bewegung des Joysticks nach rechts schließt den rechten Stromkreis. bei einer Bewegung des Joysticks nach links wird der linke Stromkreis geschlossen, usw.. Bei manchen Joysticks können aber auch diagonale Richtungen registriert werden, zum Beispiel die Bewegung links-oben. Bei diesen Joysticks sitzen dann auch an den Positionen links-oben, rechts-oben, links-unten und rechts-unten entsprechende Schalter. Da man beim Schließen der Stromkreise nicht registrieren kann, wie stark der Hebel bewegt wurde, kann bei dieser Art von Joystick nur die Richtung übertragen werden und nicht die Auslenkung. 2.2 Gameport Abbildung 5: Gameport Anschluss Quelle: [wikb] 8 Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Beschreibung Versorgungsspannung +5 Volt Joystick 1 Taste 1 Joystick 1 X-Achse Masse unbelegt Joystick 1 Y-Achse Joystick 1 Taste 2 Versorgungsspannung +5 Volt Versorgungsspannung +5 Volt Joystick 2 Taste 1 Joystick 2 X-Achse Masse (MIDI Out) Joystick 2 Y-Achse Joystick 2 Taste 2 +5 Volt (MIDI in) Tabelle 2: Quelle: [wika] 2.3 Anwendung an einem Microcontroller Einen digitalen Joystick an den AVR-Microcontroller anzuschließen ist etwas leichter als der Anschluss eines analogen Joystick an den Microcontroller. Zwar können beide Arten von Joysticks über einen Gameport angeschlossen werden, welcher an den I/O Pins des Microcontrollers angeschlossen ist, aber beim analogen Joystick müssen noch einige Änderungen vorgenommen werden. Während beim digitalen Joystick nur die Tasten ausgelesen werden, muss beim analogen Joystick erst einmal ein Spannungsteiler gebaut werden, indem zwischen das Potentiometer und der Masse ein relativ großer Widerstand geschaltet wird. 3 3.1 Gamepad Allgemeines Gamepad oder auch Joypad genannt ist ein Eingabegerät zum Steuern von Computer- oder Videospielen. Das Gamepad wird in beiden Händen gehalten und man steuert hauptsächlich mit den Daumen und Zeigefingern. Anwendung finden Gamepads meistens bei Spielekonsolen 3.2 Aufbau Hauptbestandteile sind ein Steuerkreuz mit den Richtungen links, rechts, oben und unten auf der linken Seite des Gamepads und ein Paar Action-Buttons (Aktions-Knöpfe) auf der rechten Seite. Die Action-Buttons führen je nach Spiel verschiedene Aktionen aus (zum Beispiel Springen, Ducken oder Schießen). Weiterhin besitzt jedes Gamepad eine Start- und eine Select-Taste, die meist in der Mitte platziert sind. Sämtliche Tasten sind digital. In Abbildung 6 kann man die Hauptbestandteile des Gamepads sehen. Bei den heutigen Gamepads gibt es 9 auch sogenannte Analog-Sticks. Das ist eine Art Joystick, der die gleiche Funktion wie das Steuerkreuz besitzt, aber sensibler reagiert. Er funktioniert wie der analoge Joystick in 2.1.1. Außerdem besitzen einige Gamepads Knöpfe an der oberen Seite, sogenannte Schultertasten. Abbildung 6: Einfaches Gamepad Quelle: http://www.wolfsteiner-edv.at/images/56221.jpg 3.3 Verschiedene Gamepads Vor dem ersten Gamepad wurden Spiele mit einem Paddle gesteuert. Das bekannteste Spiel dafür war ”Pong”. Der erste Gamepad (in Abbildung 7 ) wurde mit dem Nintendo ”Famicom” 1983 in Japan auf den Markt gebracht und 1985 als Nintendo Entertainment System (kurz NES) weltweit vermarktet. Abbildung 7: Erstes Gamepad Quelle: [wika] Im Laufe der Jahre kamen zu dem Steuerkreuz und den Aktionstasten weitere Aktionstasten hinzu sowie ein Analog-Stick (Abbildung 8). 10 Abbildung 8: Gamepad mit Analog Stick Quelle: [wikb] 4 Playstation 1 Gamepad - PSOne Gamepad Das PSOne Gamepad eignet sich dazu an einen Microcontroller angeschlossen zu werden, weil es zum einen seine seriellen Daten im TTL Format sendet und der Datenfluss durch Synchronisation mit dem Clock-Signal geregelt wird. Zum anderen kann man die I/O Pins des Microcontrollers direkt an das Gamepad anschließen. Außerdem gibt es heutzutage kaum noch Gamepads mit Gameportanschluss, dieser ist aber sehr leicht an einen Microcontroller anzuschließen. Den Anschluss des PSOne Gamepads kann man sehr einfach in einen Gameportanschluss umbauen. Also stellt das PSOne Gamepad eine Alternative zu den Gamepads mit Gameportanschluss dar. Zudem sind die PSOne Gamepads im Moment sehr preisgünstig zu erwerben. 4.0.1 Funktionsweise Jeder Knopf des Gamepads funktioniert auf die gleiche Art und Weise. Er ist ein Schalter, der einen Stromkreis schließt, wenn er gedrückt wird. Unter dem Knopf befindet sich eine kleine Platte aus Metall, die beim Drücken des Knopfes auf zwei Kontakte der Platine gedrückt wird. Während die Metallplatte heruntergedrückt ist, leitet sie Strom zwischen den zwei Kontakten. Das Gamepad registriert, dass der Stromkreis geschlossen ist und sendet diese Information an die Playstation. Die CPU vergleicht die Daten mit den Befehlen in der Software und reagiert entsprechend darauf. Neuere Gamepads haben auch analoge Joysticks, neben den Standardknöpfen. Diese Joysticks funktionieren anders als die Standardknöpfe. Zwei Potentiometer sind unter dem Joystick im rechten Winkel zueinander angeordnet. Durch diese Potentiometer fließt konstant Strom, allerdings variiert die Menge des Stroms je nach Größe des eingestellten Widerstandes, da bei Bewegung des Joysticks der Widerstand je nach Stellung größer oder kleiner wird. Bei Abfrage der Ausgänge der Potentiometer kann die Playstation den exakten Winkel der Stellung des Joysticks ermitteln. 11 Abbildung 9: Standard Digital Controller von Innen Quelle: [PSG] 4.1 Pinout des PSOne Gamepads Abbildung 10: Pinbelegung des PSOne Gamepads Quelle: [E22] 4.1.1 DATA Pin Der 1. Pin ist der Data Pin. Die Signalrichtung ist von Gamepad zur Playstation. Hier erfolgt eine 8 Bit serielle Datenübertragung. Wenn nichts gesendet wird, ist die Leitung auf Highpegel gezogen. Hier wird mit positiver Logik gearbeitet, das heißt, 5 Volt = ’1’ und 0 Volt = ’0’. Die Daten werden bei fallender Flanke des Clock-Signals vom Gamepad gesendet, wobei das ’Last significant Bit’ zuerst gesendet wird. Die Playstation empfängt die Daten bei steigender Flanke. 12 4.1.2 COMMAND Pin Der 2. Pin ist der Command Pin. Die Signalrichtung ist von Playstation zum Gamepad. Auch diese Übertragung ist eine 8 Bit serielle Datenübertragung die positive Logik verwendet. Hier wird das’Last significant Bit’ zuerst gesendet. Bei fallender Flanke werden Daten von der Playstation gesendet und bei steigender Flanke empfängt das Gamepad die Daten. 4.1.3 N/C 9 Volts Pin Dieser Pin ist für die Playstation 1 nicht belegt. Er ist hauptsächlich für die Aufwärtskompatibilität mit der Playstation 2 und den Dual-Schock Systemen da. Für den AVR-Microcontroller hat dieser Pin also keine Bedeutung und sollte nicht angeschlossen werden. 4.1.4 GND Pin Der 4. Pin ist der Ground Pin. Er ist der negative Pol der Stromversorgung und erhält 0 Volt Spannung. 4.1.5 VCC Pin Der 5. Pin ist der Stromversorgungspin. Die Stromversorgung kann zwischen 3 Volt und 5 Volt variieren. Die normalen Playstation 1 Gamepads funktionieren auch bei 3 Volt Spannung, wobei 5 Volt besser sind. Außerdem ist diese Leitung auch mit einem 750 mA Widerstand verbunden. 4.1.6 ATTENTION Pin Der 6. Pin ist der Attention Pin. Diese Leitung ist die ’enable’ Leitung. Sie wird von der Playstation auf Lowpegel gezogen, bevor das 1. Bit übertragen wird. Nach dem letzten Bit wird sie wieder auf Highpegel gezogen. Im Klartext heißt das, dass das Gamepad sämtliche Übertragungen ignoriert, solange diese Leitung auf Highpegel ist. Bei mehreren Gamepads ist diese Leitung für die Aktivierung von einem Gamepad nach dem anderen zuständig (auch als ’Multiplexing’ bekannt). 4.1.7 CLOCK Pin Der 7. Pin ist der Clock Pin. Die Signalrichtung ist von Playstation zum Gamepad. Beide Geräte senden bei fallender Flanke und empfangen bei steigender Flanke des Clock-Signals. 4.1.8 N/C Der 8. Pin ist unbenutzt. Diesen Pin muss man nicht an den Microcontroller anschließen. 13 4.1.9 ACKNOWLEDGE Pin Der 9. Pin ist der Acknowledge Pin. Die Datenrichtung erfolgt vom Gamepad zur Playstation. Unabhängig vom Clock Signal zieht das Gamepad die Leitung nach jedem empfangen 8 Bit Byte für 60 µs auf Lowpegel . 4.2 Single-Byte Übertragung Bei der Übertragung von einem Byte wird zuerst die ATTENTION Leitung auf Highpegel gezogen. Bei fallender Flanke des Clock-Signals werden Daten auf der COMMAND und der DATA Leitung gesendet. Diese Übertragung ist eine Vollduplex-Übertragung, das heißt, auf der DATA und der COMMAND Leitung können Daten gleichzeitig gesendet werden. Nachdem ein Byte gesendet wurde, wird die ACKNOWLEDGE Leitung für 60 µs auf Highpegel gezogen. Wenn das letzte Byte gesendet wurde, wird auch die ATTENTION Leitung wieder auf Highpegel gezogen. Abbildung 11: single-Byte Übertragung Quelle: [E22] 4.3 Übertragungsprotokolle Es gibt grundsätzlich vier verschiedene PSOne Gamepads, die Sony auf den Markt gebracht hat: • Standard Digital Controller • NegCon Racing Controller • Analog Green Mode Controller • Analog Red Mode Controller Da jedes dieser Gamepads andere Funktionen aufweist, sind die Übertragungsprotokolle verschieden. Allerdings ist der Beginn der Übertragungsprotokolle immer der gleiche: Zuerst sendet die Playstation 0x01 ”Startup” um eine Datenabfrage vom Gamepad auszuführen. Danach wird, wie nach jedem gesendeten Byte, die ACK Leitung, vom Gamepad, für 60 µs auf Lowpegel gezogen. Außer nach dem letzten Byte, hier wird die ATT Leitung wieder auf Highpegel gezogen. 14 Byte Nr. 1 2 3 4 5 COMMAND 0x01 0x42 frei frei frei DATA frei 0x41 0x5A Daten Daten Knopf Status/Ereignis Startup, PS will daten abfragen PS wartet, Gamepad sendet ID 0 1 2 3 4 5 6 slct strt up right down L2 R2 L1 R1 /\ O X 7 left [] Tabelle 3: [E22] Im nächsten Byte sendet die Playstation 0x42 ”Request for data” um zu signalisieren, dass sie auf Daten wartet. Währenddessen sendet das Gamepad seine ID, die bei jedem der vier Gamepads verschieden ist: Controller ID Standard Digital Controller 0x41 NegCon Racing Controller 0x23 Analog Green Mode Controller 0x53 Analog Red Mode Controller 0x73 Die ID wird als Antwort zum Startup der Playstation geschickt und um zu signalisieren, dass das erste Byte empfangen wurde. Weiterhin sendet das Gamepad 0x54 ”Sending Data”. In dieser Zeit ist die COMMAND Leitung der Playstation frei. Jetzt liest die Playstation den Tastenstatus. Welche man im in den folgenden Tabellen 4.3.1, 4.3.2, 4.3.3 findet. Wenn eine Taste gedrückt wurde, dann wird dieses Bit der Taste auf 0 geändert. Analoge Gamepads senden nach diesen Bytes noch weitere Bytes, welche die Position des Joysticks angeben. 4.3.1 Standard Digital Controller Beim digitalen Gamepad wird beim 4. Byte der Status der Tasten select, start, und der Tasten des Steuerkreuzes up, right, down und left übertragen. Im 5. Byte wird der Status der Aktionstasten /\, 0, X, [] und der Schultertasten L1, L2, R1 und R2 gesendet. 4.3.2 Analog Green Mode Controller 15 Byte Nr. 1 2 3 4 5 6 7 8 9 COMMAND 0x01 0x42 frei frei frei frei frei frei frei DATA frei 0x53 0x5A Daten Daten Daten Daten Daten Daten Knopf Status/Ereignis Startup, PS will Daten abfragen PS wartet, Gamepad sendet ID 0 1 2 3 4 5 6 - strt up right down L2 L1 [] /\ R1 O X RightJoy 0x00=left 0xFF=right RightJoy 0x00=up 0xFF=down LeftJoy 0x00=left 0xFF=right LeftJoy 0x00=up 0xFF=down 7 left R2 Tabelle 4: Quelle: [E22] Beim Analogen Green Mode Gamepad wird beim 4. Byte der Status der Tasten des Steuerkreuzes up, right, down und left übertragen. Im 5. Byte wird der Status der Aktionstasten /\, 0, X, [], sowie der Schultertasten L1, L2, R1 und R2 gesendet. In den nächsten 4 Bytes wird der Stand der 2 Joysticks übertragen: Im 6. und 7. Byte werden die Position des rechten Joysticks übertragen. Dabei heißt im 6. Byte 0x00, dass der Joystick ganz links steht und 0xFF, dass der Joystick ganz rechts steht. Im 7. Byte bedeutet 0x00, dass der Joystick nach oben gedrückt wurde und 0xFF, dass der Joystick ganz nach unten gedrückt wurde. Das 8. und 9. Byte beinhaltet die Stellung des linken Joysticks mit den Belegungen analog zu denen des rechten Joysticks. 4.3.3 Analog Red Mode Controller Byte Nr. 1 2 3 4 5 6 7 8 9 COMMAND 0x01 0x42 frei frei frei frei frei frei frei DATA frei 0x73 0x5A Daten Daten Daten Daten Daten Daten Knopf Status/Ereignis Startup, PS will Daten abfragen PS wartet, Gamepad sendet ID 0 1 2 3 4 5 6 slct JoyL JoyR strt up right down L2 R2 L1 R1 /\ O X RightJoy 0x00=left 0xFF=right RightJoy 0x00=up 0xFF=down LeftJoy 0x00=left 0xFF=right LeftJoy 0x00=up 0xFF=down 7 left [] Tabelle 5: Quelle: [E22] Beim Analogen Red Mode Gamepad wird beim 4. Byte der Status der Tasten des Steuerkreuzes up, right, down und left, sowie der Tasten select und start und der Drucktasten des rechten und linken Joysticks übertragen. Im 5. Byte wird der Status der Aktionstasten /\, 0, X, [], sowie der Schultertasten L1, L2, R1 und R2 gesendet. In den nächsten 4 Bytes wird der Stand der 2 Joysticks übertragen: 16 Im 6. und 7. Byte wird die Position des rechten Joysticks übertragen. Dabei heißt im 6. Byte 0x00, dass der Joystick ganz links steht und 0xFF, dass der Joystick ganz rechts steht. Im 7. Byte bedeutet 0x00, dass der Joystick nach oben gedrückt wurde und 0xFF, dass der Joystick ganz nach unten gedrückt wurde. Das 8. und 9. Byte beinhaltet die Stellung des linken Joysticks mit den Belegungen analog zu denen des rechten Joysticks. 4.4 Anforderung an den Microcontroller Sollte ein ’low-voltage’ Microcontroller benutzt werden, muss die Spannung am Ausgang des Gamepads mit einem Spannungsteiler heruntergeregelt werden. Außerdem sollte man an jedem Eingang pull-up Widerstände benutzen, welche die meisten Microcontroller an jedem Pin haben, denn ansonsten sinkt die Leistung. Auch die maximale Datenübertragung pro Sekunde sinkt dann auf 1200 bps oder sogar darunter. Der Microcontroller darf nur bis zu 20mA an all seinen Ausgängen abgeben, da eine Überschreitung dieses Wertes eine permanente Schädigung des Gamepads herbeiführen kann. Deshalb sollte man 250 Ohm Widerstände zwischen die Pins und den Gamepadanschluss schalten. 4.5 Software Abbildung 12: Flussdiagramm zur Programmierung des Übertragungsprotokolls Quelle: [E22] Die Programmierung der Kommunikation zwischen Gamepad und Microcontroller kann man auf dem Flussdiagramm (Abbildung 12) aufbauen. Zuerst müssen die ATT Leitung und die CLOCK Leitung auf Lowpegel gezogen werden. Anschließend muss man das Bit (den Befehl) 17 auf die COMM Leitung legen. Nun muss man 100 µs warten, in dieser Zeit empfängt das Gamepad den Befehl. Jetzt wird die CLOCK Leitung wieder auf Highpegel gezogen und man kann das Bit (die Antwort des Gamepads) auf der DATA Leitung lesen. Man muss erneut 100 µs warten. Durch eine Ja/Nein Abfrage muss ermittelt werden, ob auch wirklich 8 Bits empfangen wurden. Wenn weniger als 8 Bit übertragen wurden, müssen die Schritte wiederholt werden. Anderenfalls muss geprüft werden, ob es das letzte Bit des Transfers war oder nicht. Wenn es nicht das letzte Bit war, muss man darauf warten, dass die ACK für 60 µs auf Lowpegel gezogen wurde. Diese Schritte werden solange wiederholt bis das letzte Byte des Transfers übertragen wurde. Wenn dieses übertragen wurde, muss die ATT Leitung auf Highpegel gezogen und das Interrupt verlassen werden. 4.5.1 Interrupt-basierende Lösung Es ist günstiger die Interruprroutine Timer-gesteuert aufzurufen, als ständig die DATA Leitung abzufragen, ob eine Taste gedrückt wurde, da ein Spieler die Tasten willkürlich betätigt. Man sollte jedoch darauf achten, dass die Routine nicht öfter als 60 Mal in der Sekunde aufgerufen wird, da der Spieler physisch nicht schneller reagieren kann. Im Flussdiagramm (Abbildung 12) fällt auf, dass die ganze Kommunikation zwischen Gamepad und Microcontroller in einem langen Interrupt-Zyklus abgehandelt wird. Das hat bestimmte Vor- und Nachteile. Der größte Vorteil ist, dass man den Quellcode übersichtlich und damit gut lesbar macht. So kann man Fehler besser finden. Allerdings existiert auch ein großer Nachteil. Die Zeit zwischen den Abfragen, die der Microcontroller warten muss, belegt den Prozessor, obwohl nichts passiert. Um diesen Nachteil zu verringern könnte man ausprobieren, ob die 100 µs wirklich notwendig sind oder ob es auch mit einer kürzeren Zeitspanne geht. 5 Fazit In meiner Ausarbeitung habe ich mich damit beschäftigt wie man Eingabegeräte wie Joysticks oder Gamepads an einen Microcontroller anschließen kann. Ich bin zu dem Schluss gekommen, Joysticks oder Gamepads mit Gameportanschluss sind ohne größeren Aufwand an einen Microcontroller anzuschließen. Man muss nur die I/O Pins des Microcontrollers an die Pins des Gameportanschlusses anschließen. Die Kommunikation zwischen Microcontroller und Eingabegerät muss dann in der Software realisiert werden. Gamepads oder Joysticks mit Gameportanschluss sind heutzutage eher selten geworden und so muss man sich nach einer Alternative umschauen. Dazu habe ich ein Projekt gefunden [E22], welches den Anschluss eines PSOne Gamepad an einen Microcontroller beschreibt. Das finde ich eine sehr interessante und gute Lösung. Die PSOne Gamepads sind sehr preisgünstig zu erhalten und arbeiten mit der TTL Logik, entsprechend wie auch die Microcontroller. Außerdem hat man mindestens 10 verschiedene Knöpfe und je nach Modell auch analoge Joysticks zum Steuern von Figuren oder Cursorn auf dem Bildschirm. 18 Man muss allerdings bei den PSOne Gamepads entweder die Pins des Steckers mit den I/O Pins des Microcntrollers verbinden oder den Stecker des Gamepads in einen Gameportstecker umbauen und an den Microcontroller das passende Gegenstück an die I/O Pins anschließen. Weiterhin muss dann die Kommunikation, die in Abschnitt 4.3 beschrieben wurde, mittels Software programmiert werden. Am besten benutzt man dafür eine Interruptroutine. 19 Literatur [E22] www.geocities.com/digitan000/Hardware/22/e22_page.html. [Joya] www.computer.howstuffworks.com/joystick.htm. [Joyb] www.roboternetz.de/phpBB2/zeigebeitrag.php?t=8094&highlight=analoger+joystick. [Pina] pinouts.ru/Game/playstation_9_pinout.shtml. [Pinb] www.gamesx.com/controldata/psxcont/psxcont.htm. [PSG] www.entertainment.howstuffworks.com/playstation3.htm. [wika] de.wikipedia.org. [wikb] en.wikipedia.org/. 20