Die Steuerung ist als nächster logischer Arbeitsschritt ein sehr simples Thema, wenn man die Basics verstanden hat. Prinzipiell geht es zwei verschiedene Varianten zu unterscheiden, die beide ihre Vor- und Nachteile besitzen. Ebenso gibt es ein paar Dinge zu beachten wenn man den perfekten Druckpunkt der Buttons erreichen möchte – mit unsere Anleitung ist aber auch das keine Hexerei!

Vorwort

 

 

1.1 Unterschiede PCB (mit und ohne Microcontroller) und GPIO Steuerung


Ein Steuerplatine (PCB aka PrintedCircuitBoard) in Kombination mit einem vorprogrammierten Microcontroller ist eine „Plug&Play“ bzw „AllinOne“ Lösung (siehe ZeroBOY PCB) Das bedeutet, dass das PCB mit programmierten Microcontroller sofort als Steuergerät (Gamepad, Tastatur,…) erkannt wird – keine Installation von Treibern oder Anpassung der Software notwendig. Außerdem erspart man sich eine Menge Kabelsalat!

 

 

Die Steuerung via GPIO nutzt die programmierbare Schnittstelle des Raspberry Pis, genannt GPIO (general purpose input/output) zusammen mit einer Software welche die ankommenden Signale schlussendlich in eine Steuerung (oben, unten, links…) umwandelt. Dadurch dass für jedes Signal eine eigene Verkabelung zu einem der GPIO Pins erfolgen und zusätzlich die Software angepasst werden muss, ist diese Methode eher für fortgeschrittene User empfohlen

(PM)

1.2 Vor- und Nachteile bei GPIO Steuerung

Vorteile

  • Kompakt & flexibel
  • Keine separate Stromversorgung notwendig

Nachteile

  • Eingriff ins System via config.txt oder Script notwendig, damit die Steuerung funktioniert. Dies muss bei einem Wechsel auf eine andere Distribution oder Neuinstallation wiederholt werden
  • Viele Kabelarbeiten notwendig
  • Verständnis und Grundkentnisse in Linux erforderlich

(PM)

1.3 Vor- und Nachteile bei PCB Steuerung mit Microcontroller

Vorteile

  • Plug & Play, wird ohne Treiberinstallation o.ä. von jedem System erkannt
  • Neu- oder Umprogrammierung (zb. Erweiterung auf mehr Triggerbuttons oder Nutzung eines Trackballs) des Microcontrollers möglich
  • Minimale Kabelarbeiten ( Strom sowie Datenkanäle) notwendig

Nachteile

  • Nicht so flexibel/benötigt mehr Platz
  • Wenn der Microcontroller nicht auf der Platine ist, viele Kabelarbeiten notwendig (ähnlich GPIO)
  • Benötigt separate Stromversorgung
  • Bei Neu- oder Umprogrammierung, Basiskenntnisse in Programmieren via Arduino notwendig

(PM)

Methode A
Steuerung via PCB mit Microcontroller

 

A.1 Info, Verkalebung und FAQ ZeroBOY PCB 2.1

 

pcb_2_0

ZeroBOY PCB 2.0 (2017)
ZeroBOY PCB 2.1 (2018)

Geschichte:

Im Sommer 2016 wollten wir nicht länger von dem Standard-PCB abhängig sein, bei dem der „Ersteller“ immer ordentlich mitverdiente, obwohl es genau genommen nicht sein Werk war. Ohne Paul Paulsen, unserem „Kabelbeisser-Guru“ der Gruppe, wäre diese Idee wohl nie umsetzbar gewesen, denn er investierte viel Zeit und Herzblut in das Design des ZeroBOY PCB 2.0 . Man muss bedenken, dass zur damaligen Zeit es noch keinen HDMI-TFT mit Sound-Output gab, keinen Zero W der Bluetooth/WLAN an Board hatte usw. und sofort… somit beinhalteten die ersten Gehversuche und Versionen des PCBs noch einige Features (zb. Sound über I2S) die zwar teils schon gut funktionierten, aber in der jetzigen Form etwas „over-powered“ oder inzwischen hinfällig gewesen wären.
Mann muss auch bedenken, dass sämtliche Dinge die Assembliert werden müssen (Chips, Ports,…) entweder einen Mehraufwand (Arbeitsstunden) oder Mehrkosten beim Hersteller wegen der Assemblierung bedeuten würden. Auch die Kosten bereiteten uns Kopfzerbrechen, da alles aus eigener Tasche finanziert wurde – es ist unserer Meinung nicht fair den User „BETA-Tester“ spielen zu lassen und auch noch für ein unfertiges/verbuggtes Board, welches er aus eigener Tasche bezahlen muss. Darum: Besser ein 100% funktionelles Board mit weniger aber essentiellen Features anbieten, anstatt jetzt aus geldgeilheit etwas auf die Bastler loslassen, was keinesfalls „Marktreif ist“. Da es inzwischen genug teure ALL-IN-ONE Lösungen und Sets gibt, haben wir den kostengünstigen aber effizienten Weg gewählt: Wir wollen nicht mit den teuren „Eierlegenden-Wollmichsäuen“ konkurieren, sondern eher einen für jedermann erschwinglichen und einfachen Weg gehen – Ein günstiges Board, welches auch wirklich nur die aktuellen benötigten Features abdeckt und noch dazu das Bastelleben vereinfacht und nicht verkompliziert.
2018 bekam dann das PCB 2.0 ein kleines Update auf Version 2.1: Die Bauform wurde verkleinert um auch einfach mit diversen größeren HDMI Displays verbaut zu werden, und der Code beinhaltet auch zwei zusätzliche Triggerbuttons.

Features:

  • Fertig assembliert und natürlich getestet!
  • Passendes Controller Board für das DMZ Gameboy Classic Gehäuse, unterstützt A, B, X und Y sowie L / R Triggerbuttons sowie natürlich Steuerung und Select/Start.
  • Vorprogrammiertes ATmega32U4 Board (im Plug&Play Gamepad Modus), welches auch einfach & individuell getauscht oder über den Micro-USB Anschluss umprogrammiert werden kann.
  • Powerstrip Brakeoutboard – welcher als Strom-Verteiler dient und auch vom Controller-Board getrennt und individuell im Gehäuse angebracht werden kann
  • Klinkenbuchse Brakeoutboard – fertig assemblierter Kopfhöreranschluss, der ebenso vom Controller-Board entfernt werden kann um zb. den original Klinkenstecker zu nutzen.
  • 2 Stück Triggerbuttons inklusive, welche nun nicht mehr direkt am Microcontroller sondern einfach am PCB angelötet werden können
  • Mit JST-Buchse (Adafruit kompatibel) für den Anschluss des Akkus im Batteriefach mit 1,5A Sicherung (selbst zurückstellend!) damit auch nichts schiefgehen kann


#1

Das Ladeboard kann mit dem ZeroBOY PCB 2.0 verbunden werden: Der Akku wird durch eine sich selbst zurückstellende 1.5A Sicherung geschützt und man kann den JST Stecker (welcher von vielen Akkus, wie z.B. von Adafruit verwendet wird) im Batteriefach des Gameboy Classic Gehäuse nutzen.

PCB_2_Battery_Fuse

ToDo: Der Ausgang des Lademoduls welcher normalerweise zum Akku führt geht in diesem Fall zu „- + Bat Out“.
Danach kann der Akku via JST Stecker oder direkt am Board nach an den Pins vor der JST Buchse ( +/- Polarität beachten!)  angelötet werden.
Praktischerweise ragt der Stecker in das Gameboy Batteriefach, wo der Akku untergebracht werden kann 🙂

zeroboy_pcb_2_back

#2

Die Ports bieten eine einfache Möglichkeit die vorassemblierte Klinkensteckerbuche zu nutzen. Außerdem wird das Signal via Hardware auf einen Kanal (Mono) gemixed und auf den Speaker geleitet – es geht somit kein Kanalsignal verloren und ein Mono-Downmix via Software ist nicht nötig.

PCB_2_Amp_Audiojack

ToDo: Ausgang (Kanal rechts, links und Masse/Ground) der Soundkarte oder des HDMI TFTs an den jeweiligen Pins (L= Kanal Links, R= Kanal Rechts und G für Ground/Masse) anlöten, danach den Ausgang (+ -) an den Verstärker an den IN (Eingangs-)Port anbringen.

#3

Der Powerstrip dient als Stromverteiler, welcher direk am Board genutzt oder auch herausgebrochen werden kann um in individuell im Gehäuse anzubringen. Dies garantiert eine gleichmäßige Verteilung und verhindert, der Raspberry Pi würde z.B. zusammenbrechen/überlastet sein, würde man sämtliche Verbraucher an ihn anbringen.

PCB_2_Powerstrip

ToDo: Strom-Ausgang des Ladeboards (meistens ist es die große Standard USB A Buchse) an den jeweilen PIN (+ und -) anbringen, danach alle Verbraucher an das Ladeboard anbringen – und WICHTIG: unbedingt darauf achten dass der korrekte Anschluss, Strom (+) und Masse (-) verwendet wird.
Ein vertauschen von + und – kann zu schwerwiegenden Defekten der Geräte führen – darum immer doppel und dreifach kontrollieren!!!

FAQ

  • Wie wird das ZeroBOY PCB 2.0 mit dem Raspberry Pi verbunden?
    Via + und – Datenkanäle an den Raspberry, Strom vom Verteiler/Ladeboard  – das wars, keinerlei Installation oder Konfiguration notwendig, alles Funktioniert Plug&Play!
  • Brauche ich eine separate Stromversorgung für das PCB?
    Jein, der Microcontroller bezieht seinen Strom über den Micro USB Port über den auch der Datenaustausch stattfindet.
    Allerdings sind die USB Ports des Raspberry Zeros sehr „schwachbrüstig“ – daher wird nur eine separate Stromversorgung via Verteiler/Ladeboard empfohlen!
  • Wie kann ich das PCB platzsparend mit dem Zero verbinden?
    Es liegt bereits ein Micro USB OTG Adapter der Bestellung im Shop bei , mit den großzügigen PINs am Adapter ist es ein leichtes Kabel daran zu löten die dann wiederum an die Pads des Raspberry Pi gehen  – ein platzsparende und flexible Lösung!
  • Warum ist hier ein Arduino Leonardo Pro Micro als separates Board am PCB angebracht? Warum verbaut ihr nicht selbst den ATmega32u4 und die benötigen Komponenten?
    Aus mehreren Gründen: Der erste ist, dass sich dieses Arduino Board sehr bewährt hat – es muss also keiner den Beta-Tester spielen oder befürchten, dass etwas nicht so funktioniert wie es soll. Zum anderen kostet allein der ATmega32u4 Chip fast soviel wie das gesamte Arduino Board! Somit bleibt das ZeroBOY PCB 2.0 erschwinglich und bietet trotzdem alle essentiellen Basisfunktionen… und sollte der Microcontroller doch das zeitliche segnen, kann man ihn auch mit etwas arbeit tauschen und muss nicht das gesammte ZeroBOY PCB 2.0 in die Tonne hauen 😉
  • L1 und L2 Triggerbuttons?
    Diese Liegen auch in 4-facher Ausführung dem PCB bei – wer es schicker haben möchte, kann auf die größere Alternative zurückgreifen

Wichtige Infos

  • Für Personen, die den HDMI-TFT verwenden: Die entfernten PINs des Boards müssen unbedingt mit Klebeband o.ä. isoliert werden (siehe roter Bereich im Bild unten), da es ansonsten zu einen Kontakt zwischen HDMI Board und dem ZeroBOY 2.0 PCB kommen kann (Kurzschlussgefahr!)
    diagram_isolierung

Kleiner Tipp für Leute, die Angst haben beim PCB 2.0 den Micro USB Port abzureissen und/oder diesen absichern wollen:
Hier eignet sich 2 k Epoxidkleber wie dieser hier perfekt – http://amzn.to/2yu1P1V. Mischen, über den hinteren Micro USB Port und dem Board streichen (wo die PINS des Ports in die Platine laufen) – fertig. Er braucht zwar etwas Zeit bis er Hart wird, ist er erst einmal ausgehärtet, ist der Port quasi fast unzerstörbaraber. Außerdem ist er zusammengemischt dickflüssig genug, dass er zb. nicht in die kleinen Öffnungen des Micro USB Ports läuft.  

Diese Methode wende ich auch bei defekten PCB 2.0er an, die zu mir retour geschickt wurden wegen abgerissenen Port. Ist er noch zu retten (die kleinen PINS von Port zur Platine sind nicht abgerissen) fixiere ich den Port nach dem erneuten Anlöten mit dieser Methode sehr erfolgreich – natürlich passe ich dabei auf dass nichts IN den Port läuft
Probiert es aus, bekam bisher immer gutes Feedback bei dieser „Reparaturmethode“ und sowieso: sicher ist sicher

Das wars auch schon wieder mit dem Klugscheissergeschwafel des Admins, wünsch euch noch einen tollen Wochenendbeginn (ohne abgerissener Micro USB Anschlüsse)! 

(PM)

A.2 Funktionstest auf Windows Rechner (o.ä.)

Falls Du überprüfen willst, ob dein ZeroBOY PCB mit Microcontroller (oder dein eigenes Board mit MC) funktioniert, schließe es einfach mit einem Micro USB Datenkabel an einen Windows PC an. Es sollte sofort erkannt und über „Drucker und Geräte“ verfügbar sein. Dort können auch Funktionstests durchgeführt werden.

Ps.: Jedes ZeroBOY PCB durchläuft so einen Test inkl. aller Buttons, bevor es verschickt wird.

(PM)

A.3 (optional) Neu- oder Umprogrammierung des Microcontrollers

Wer lieber seinen Ardiuno Pro Micro mit AtMega32u4 Microcontroller selbst oder neu programmieren möchte, kann dies mit ein paar Schritten realisieren:

Zu aller erst installiere die Arduino IDE. Schließe erst dann den Microcontroller über UBS an den PC an (Wichtig: Denn es werden vorher mit der Software die benötigten Treiber installiert). Falls nach dem Starten Windows den angeschlossenen Controller nicht erkennt (gelbes Icon – unbekannte Hardware), kannst du den Treiber auch separat hier downloaden und installieren.

In der Arduino IDE folgende Optionen wählen:
Tools => Port auswählen bei dem Arduino/Genuino Micro (o.ä) in Klammer aufscheint
Tools => Board => Arduino/Genuino Micro (welches im Vorherigen Schritt in Klammer angezeigt wurde) wählen
Tools => Programmer => AVRISP MKII wählen

Und ganz wichtig, die „Gamepad-Library“ installieren
Diese könnt ihr hier downloaden => ArduinoGamepad-master

Danach entpackt ihr die ZIP in das Library Verzeichnis der Arduino IDE Software, welches sich Standardmäßig unter C:UsersBENUTZERNAMEDocumentsArduinolibraries befindet

Eine genaue Anleitung findet ihr auch hier
Der folgende Code muss dann nur noch kompiliert und auf den Leonardo Pro Micro geladen werden

// Arduino Pro Micro Config for Gamepad by www.zeroboy.eu - p!

#include <Gamepad.h>
Gamepad gb;
// Use PIN Number connected to PCB
#define BTN_DOWN 9
#define BTN_UP 15
#define BTN_LEFT 14
#define BTN_RIGHT 8
#define BTN_A 2
#define BTN_START 6
#define BTN_Y 4
#define BTN_L1 1
#define BTN_X 5
#define BTN_R1 10
#define BT
#define BTN_B 3
#define BTN_SELECT 7
#define BTN_L2 0
#define BTN_R2 16


void setup() {
Serial.begin(9600);
for (int x = 0; x < 19; x++) {
pinMode(x, INPUT_PULLUP);
}
}
void loop() {

bool downSet = digitalRead(BTN_DOWN);
bool upSet = digitalRead(BTN_UP);
bool leftSet = digitalRead(BTN_LEFT);
bool rightSet = digitalRead(BTN_RIGHT);
gb.setLeftYaxis(!upSet ? -127 : !downSet ? 127 : 0);
gb.setLeftXaxis(!leftSet ? -127 : !rightSet ? 127 : 0);
gb.setButtonState(0, !digitalRead(BTN_A));
gb.setButtonState(1, !digitalRead(BTN_B));
gb.setButtonState(2, !digitalRead(BTN_Y));
gb.setButtonState(3, !digitalRead(BTN_X));
gb.setButtonState(4, !digitalRead(BTN_SELECT));
gb.setButtonState(5, !digitalRead(BTN_START));
gb.setButtonState(6, !digitalRead(BTN_L1));
gb.setButtonState(7, !digitalRead(BTN_R1));
gb.setButtonState(8, !digitalRead(BTN_L2));
gb.setButtonState(9, !digitalRead(BTN_R2));

gb.sendUpdate();
}

Wenn ihr das PCB Controller Board mit dem Leonardo mit dem obigen Code unangepasst verwenden wollt, beachtet folgende Verkabelung:

leonardo_pins

Funktion PIN
A 2
B 3
Y 4
X 5
Start 6
Select 7
Rechts 8
Unten 9
Oben  15
Links  14
L1  1
R1 10
L2 0
R2 16

und ein belieber Masse/GND Pin vom Leonardo zum GND des Controller PCBs 😉

(PM)

A.4 Anbringung im Case

Die Verschraubung im Case gestaltet sich relativ einfach – das ZeroBOY PCB wird einfach an 5 Punkten mit dem Case verschraubt, es können zb. die beigelegten Schrauben mit dem Tri-Schraubenzieher wiederverwendet werden.

Bitte nicht vergessen: Der Micro USB Port sollte (am einfachsten mit beigelegten Micro USB OTG Adapter) mit den Datenport des Raspberry Zero Verbunden werden oder, falls verwendet, den USB Hub. Die Stromleitung bitte IMMER separat zum Verteiler/Ladeboard führen!
Warum? Der Micro USB Port des Raspberry Zero kann nur beschränkt genug Strom liefern und das PCB kann keine Funktion haben.
Dieses Diagramm dient nur zur veranschaulichung, und beinhaltet bewusst nicht alle Komponenten!
Details sowie das ganze Diagramm siehe Punkt „Info, Verkabelung und FAQ ZeroBOY PCB 2.1“

(PM)

A.5 (optional) Troubleshooting – Mögliche Fehlerquellen finden und beheben

Wenn das PCB mit Microncontroller nicht erkannt wird, bitte folgende Dinge überprüfen

  • Wird das PCB separat am Verteiler/Ladeboard mit Strom versorgt, und NICHT via Micro USB vom Raspberry Pi?
  • Sind die Stromkabel dick genug gewählt?
  • Sind die Datenleitungen auch sicher nicht vertauscht?

Ansonsten kannst du die Funktionalität auch über einen PC testen, siehe Punkt (Funktiontests auf Windows Recher)

(PM)

Methode B
Steuerung via PCB über GPIO

 

B.1 Verkabelung mit den GPIO Pins des Raspberry Pi

Bei Recalbox müssen Folgende GPIO Pins zusammen mit Masse (GRND) angeschlossen werden

 

Hier das PIN-Layout von Retropie

(PM)[/vc_toggle]

B.2 Softwareseitige Aktivierung der Steuerung

recalboxOS liefert von haus aus einen Treiber mit, genannt mk_arcade_joystick_gpio,welcher bis zu zwei Controller mit jeweils Joysticks mit 4 Richtungen und 9 Buttons steuern kann.

Damit der Treiber auch geladen wird, muss nur noch die recalbox.conf editiert werden
Entweder via WEB-Interface auf http://recalbox/
oder via geteilten Netzwerkordner „system“
oder via root auf /recalbox/share/system/recalbox.conf

Den Editor starten mit
nano /recalbox/share/system/recalbox.conf
Dort muss die Option
controllers.gpio.enabled=1
gesetzt und gespeichert werden – fertig!

Der GPIO Treiber in Retropie nennt sich „gamecon_gpio_rpi“  und wird in der Shell via Retropie-Setup wie folgt aktiviert:
cd Retropie-Setup
sudo ./retropie_setup.sh

(Version unter 4.0) im folgenden Menü wählt man „SETUP“ und dann „Start SNESDev on boot“ wo man die Option mit „(polling pads and buttons)“ wählt.
Nach einem Neustart kann mit mit dem Befehl „service –status-all“ überprüfen, ob das Modul SNESdev auch wirklich geladen wurde (+ davor).
(Version 4.0+) macht zu aller erst ein Update von Retropie und den installierten Packages. Danach auf Manage Packages, Driver, gamecondriver

Optional, wenn es nicht das Setup selbst macht:

Treiber wird mit folgenden Befehl  geladen(Für 1 Controller via GPIO)

sudo modprobe mk_arcade_joystick_rpi map=1

den automatischen Start des Treibers bewerkstelligt man mit

sudo nano /etc/modules

folgende Zeile hinzufügen:

mk_arcade_joystick_rpi

folgende Datei erstellen /etc/modprobe.d/mk_arcade_joystick.conf :

sudo nano /etc/modprobe.d/mk_arcade_joystick.conf

und folgende Modul-Config laden :

options mk_arcade_joystick_rpi map=1,2

Zu guter letzt kann man mit dem Befehl

jstest /dev/input/js0

überprüfen, ob die Buttons auch funktionieren – beendet wird es wieder mit STRG+C.

 

Alternative – retrogame by adafruit

als oft genutzte und sehr bewährte Alternative, hat sich das retrogame-script von Adafruit bewährt. Es bietet eine Vielzahl an Anpassungsmöglichkeiten, und ist dank automatischen Setup-Script viel einfacher zu installieren als in der Vergangenheit.

cd

curl -O https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/retrogame.sh

sudo bash retrogame.sh

Das wars!

Danach wird die config /boot/retrogame.cfg erstellt und beim start geladen. Das Standardlayout von PGRRL 2 und dessen GPIO verkabelung sieht dann in der config wie folgt aus  (FUNKTION GPIO-BROADCOM PIN # Beschreibung)

LEFT 4 # Joypad left
RIGHT 19 # Joypad right
UP 16 # Joypad up
DOWN 26 # Joypad down
LEFTCTRL 14 # ‚A‘ button
LEFTALT 15 # ‚B‘ button
Z 20 # ‚X‘ button
X 18 # ‚Y‘ button
SPACE 5 # ‚Select‘ button
ENTER 6 # ‚Start‘ button
A 12 # Left shoulder button
S 13 # Right shoulder button
ESC 17 # Exit ROM; PiTFT Button 1
1 22 # PiTFT Button 2
2 23 # PiTFT Button 3
3 27 # PiTFT Button 4

 

Eine Ausführliche alte Beschreibung findet ihr hier

sowie auf der offiziellen Retrogame Seite von Adafruit

(PM)

B.3 (optional) Troubleshooting – Mögliche Fehlerquellen finden und beheben

Folgende Dinge überprüfen wenn die Steuerung nicht Funktioniert

  • Wurde alles auch richtig verkabelt und verlötet (mit Multimeter Verbindungen Prüfen!)
  • Wurde auch nicht auf Masse/Ground vergessen?
  • Wurde alles Softwareseitig aktiviert?

(PM)

 

Finetuning – zur perfekten Steuerung

 

 

2.1 Druckpunkte der Buttons testen und optimieren

Oft haben die zusätzlichen X und Y Buttons einen schlechten Druckpunkt, oder die Select/Start Tasten reagieren kaum.
Hier ein paar Tipps

  • Unterlegescheiben (2 Stk M3) in die Conductive Pads legen – somit haben die Buttons einen kleineren und besseren Druckpunkt
  • Die Conductive Pads mit Bleistift (=leiter!) anmalen, damit Start/Select besser reagiert.
  • Die Conductive Pads fixieren – wenn sie später verrutschen leidet der Druckpunkt darunter oder geht komplett verloren
  • KEINESFALLS die Conductive Pads in irgend einer Art und Weise kürzen oder beschneiden!!!!!!

 

© Copyright 2018 – Alle Inhalte, insbesondere Texte, Fotografien und Grafiken sind urheberrechtlich geschützt.
Alle Rechte, einschließlich der Vervielfältigung, Veröffentlichung, Bearbeitung und Übersetzung, bleiben vorbehalten, www.zeroboy.eu
© Copyright 2018 – All content, especially texts, photographs and graphics are protected by copyright.