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