english versionenglish

USB-Joystick mit 5 Achsen und 24 Tasten

mit PIC18F2455


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Allgemeines
Einleitung
Die Schaltung
Bootloader?
Mögliche Erweiterungen
Download

zurück zu PIC-Projekt



Allgemeines

Firmwareaktualisierung:
  

  
mit Bootloader möglich
Stromversorgung:


über USB
Taktversorgung:


20-MHz-Quarz
Achsen:

5

8 Bit Genauigkeit
Taster:
24
3 Gruppen mit je 8 Tastern

Joystick-Controller



Einleitung
Einfache Joysticks gibt es für kleines Geld zu kaufen. Ein Selbstbau ist da uninteressant.

Gelegentlich gibt es aber doch einen Bedarf für einen Eigenbau. Das betrifft insbesondere Flugsimulatorentusiasten, die sich Cockpitteile ihrer Lieblingsflieger nachbauen, um mit diesen die Simulationssoftware zu steuern. Braucht man dafür nicht mehr als drei Achsen, dann schlachtet man am einfachsten einen billigen Joystick aus, und verpflanze dessen elektronisches Innenleben in die Eigenbaumechanik. Was macht man aber, wenn man eine große Anzahl an Achsen oder viele Taster braucht braucht? Man könnte mehrere Joysticks kanibalisieren und zusammen mit einem USB-Hub in den Eigenbau einpflanzen, aber dann wird es doch langsam umständlich und teuer.

Da entsteht dann doch der Bedarf nach einer für diesen Anwendungsfall optimieren Eigenbauelektronik. Ich stelle hier einen PIC vor, der sich zum Aufbau eines USB-Eingabegeräts mit 5 Achsen und 24 Tastern eignet. Als Basis dient mir ein PIC18F2455.
Die Anregung zu diesem Projekt kam durch ein Project von opencockpits.com. Dort wird ein solcher Joystick mit einem völlig veralteten PIC16C745 aufgebaut. Mein Projekt kann die dortige Elektronik einfach ersetzen, ich verwende aber eine abweichende Steckerbelegung für die Potentiometer.




Die Schaltung
Über den USB-Anschluss wird der Joystick gesteuert und mit Strom versorgt. Die Kondensatoren C1 und C5 filtern die Betriebsspannung und C2 siebt die USB-Spannung des internen Spannungsreglers des PIC.

Q1, C3 und C4 versorgen den PIC mit einem stabilen 20-MHz Takt.

R1 legt Pin 1 des PIC  auf High-Pegel.

Als PIC habe ich den PIC18F2455 vorgesehen, es eignen sich aber auch PIC18F2458/2550/2553. (Ohne Änderung an Hardware oder HEX-File.)



Achsen
An die 3-poligen Verbinder SV1 bis SV5 wird je ein lineares 10-kOhm-Potentiometer (der genaue Widerstandswert ist unkritisch) angeschlossen. Dabei muss der Schleifer des Potentiometers mit Pin 3 des Verbinders verbunden werden. Die äußeren Anschlüsse des Potentiometers kommen an die Pins 1 und 2 des Verbinders.
Die nachfolgende Schaltung zeigt eines der 5 Potentiometer.
Achspotibeschaltung





Stromlaufplan

Tasten
Die Taster werden zwischen die Verbinder SV6 und SV7 angeschlossen. Die 24 Taster bilden eine Matrix mit 3 Zeilen und 8 Spalten. Werden nicht alle Tasten benötigt, dann lässt man die überflüssigen Tasten einfach weg.

Mit Entkopplungsdioden:
Die nebenstehende Schaltung zeigt eine Matrix aus 24 Tastern. Durch die vorhandenen 24 Dioden ist es möglich gleichzeitig eine beliebige Kombination aus Tastern zu drücken. Der Controller wird immer genau die gedrückten Taster zum PC melden.

Ohne Entkopplungsdioden:
Man kann die Matrix auch ohne Dioden aufbauen, was ein paar Cent spart. Allerdings unterliegt dann das gleichzeitige Drücken mehrere Taster einigen Beschränkungen:
  • Es dürfen beliebig viele Taster einer Reihe gleichzeitig gedrückt werden, wenn kein Taster einer anderen Reihe gedrückt ist. (z.B. S1, S2, S3, S4, S5, S6 & S7)
  • Es dürfen gleichzeitig in jeder Reihe ein Taster gedrückt werden.(z.B. S1, S9 & S19)
  • Es dürfen gleichzeitig beliebige Taster gedrückt werden, wenn diese in verschiedenen Spalten liegen. (z.B. S1, S2, S3, S12, S13, S14, S23 & S24)
Hält man sich nicht an diese Begrenzungen, dann könnten auch einge Taster als gedrückt erkannt werden, die momentan nicht betätigt werden. (z.B. S1, S9 & S10 -> S2 scheint gedrückt zu sein)

Prinzip der Matrixabfrage:
Die 3 Zeilenleitungen sind Matrixeingänge, die 8 Spaltenleitungen sind Matrixausgänge. Der PIC hält im Ruhezustand die 8 Spaltenleitungen mit pull-up-Widerständen auf High-Pegel.

Es wird nacheinander jeweils eine Zeilenleitung auf Low-Pegel gelegt, während die anderen Zeilenleitungen hochohmig sind. Daraufhin werden die Pegel der Spaltenleitungen geprüft. Ein Low-Pegel steht dort für eine gedrückte Taste.
Tastenmatrix



Bootloader?
Einen Bootloader braucht man für einen Joystick eigentlich nicht.
Aber zum Testen der Firmware verwendete ich die Hardware meines USB4all, der standardmäßig einen Bootloader besitzt. Aus diesem Grunde ist die Firmware so ausgelegt, dass sie mit dem Bootloader harmonisiert. Es ist aber problemlos möglich, die Firmware einfach mit einem Programmiergerät in den SteuerPIC zu brennen - ganz ohne Bootloader.

Falls man doch einen Bootloader verwenden will, dann brennt man mit einem Programmiergerät nur den Bootloader in den PIC. Um die Joystick-Firmware in den PIC zu flashen, wird nach dem Zusammenbau der Schaltung das Pin 1 des PIC mit Masse verbunden, bevor man den Joystick mit dem PC verbindet. Dann kann man die Software USBoot verwenden, um die Firmware in den PIC zu laden. Bootloader und USBoot sind im Downloadfile des Projektes USBoot enthalten. Es ist Bootloader5 in der 20-MHz-Version (Boot_05_20mhz.hex) zu verwenden.



Mögliche Erweiterungen
Die Anzahl von Achsen und Tastern könnte man variieren, wobei natürlich die begrenzte Anzahl der Pins des PIC18F2455 limitierend wirkt. Denkbar wären z.B. 10 Achsen mit 15 Tastern. Wem das nicht reicht, der kann auf 40-Pin-Typen zurückgreifen. Ein PIC18F4455 eignet sich durchaus für 13 Achsen und 28 Tasten.
Dafür müsste man natürlich die Firmware modifizieren.



Download
Hier liegt


Entwicklung

16.05.2012
Prototyp


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 16.05.2012
letzte Änderung: 24.05.2012