
Motywacja
Naprawiając różnego rodzaju joysticki od konsol retro, niezbędną potrzebą była diagnoza stanu takiego urządzenia. Każdorazowe wyciąganie innej konsoli z szuflady, podłączanie do niej kontrolera, włączanie TV, szukanie odpowiedniego kartridża z grą, aby móc przetestować wszystkie przyciski spędzało sen z powiek i sprawiało, że w pokoju powstawała alternatywna organizacja przestrzeni (czytaj: burdel). Pomysł stworzenia dedykowanego urządzenia do wykonywania tych wszystkich czynności okazał się rzeczą niezbędną. Głównym założeniem było było, aby móc do niego podłączyć nie tylko joystick z konsol typu Pegasus/Sega/C64, ale też np. pistolet oraz kilka innych funkcji
Pierwsze kroki
Dawno, dawno temu zrobiłem takie urządzenie i opisałem je tu: https://www.elektroda.pl/rtvforum/topic3116946.html
Wykonanie było maksymalnie uproszczone (mikrokontroler, wyświetlacz, jeden przycisk, gniazdo) do tego stopnia, że nawet nie było w nim gniazda zasilania, a całość pobierała prąd przez złącze programatora. Z uwagi na maksymalne wykorzystanie pinów mikrokonrolera, w urządzeniu był tylko jeden przycisk, który pełnił zarówno funkcję zmiany wyboru (szybkie wciśnięcie) jak i akceptacji (długie wciśnięcie), co mogło być trochę nieintuicyjne. Wreszcie, creme de la creme tej prowizorki był sposób podłączenia wyświetlacza siedmiosegmentowego: sterowanie bezpośrednio z mikrokonrolera (bez tranzystorów, tylko jeden rezystor na każdą cyfrę) ograniczał maksymalny prąd (a przez to jaskrawość) oraz powodował różną jasność świecenia w zależności od ilości zapalonych segmentów (aczkolwiek nie było to aż tak widoczne). Konieczność sięgania do szuflady każdorazowo po programator w celu zasilenia urządzenia skutecznie doprowadziły mnie do furii. Aż w końcu czara się przelała i powstała nowa wersja.


Druga wersja
W obecnej wersji postanowiłem skupić się na naprawie mankamentów z poprzedniej wersji oraz dodaniu nowych funkcjonalności:
* zasilanie z portu USB przez kabel mini USB - możliwość podłączenia zarówno do PC jak i np. powerbanku czy telefonu (przez kabel USB HOST) i używanie urządzenia w terenie (np. gdy idziemy na bazar coś kupić). I chociaż gniazdo mini nie jest tak popularne jak micro, a przez to trudniej o taki kabel, to jednak jest ono dużo bardziej wytrzymałe i dlatego zawsze używam je w swoich projektach. O ile urwane gniazdo micro w telefonach to chyba chleb powszedni, to czy widział ktoś kiedyś wyrwane gniazdo mini?
* zmiana sposobu sterowania wyświetlacza na "zgodny ze sztuką",
* wymiana mikrokontrolera atmega8 z wersji DIP28 na QFP32 - raz że tańszy, dwa - mniejszy, a trzy - dzięki temu zyskałem dwa dodatkowe piny (ADC6/ADC7),
* dodanie dwóch osobnych przycisków (OK/ZMIANA) oraz przycisk RESETu, który wraca do głównego menu. Z uwagi na brak wolnych pinów, oba przyciski są podłączone za pomocą drabinki rezystorowej do pojedynczego wejścia analogowego ADC6
* dodanie gniazda 15 pin (joypady od konsol IQ502/Terminator), 7 pin (NES), 7 pin (Famicom), 5 pin (znajdowanie kolejności wyprowadzeń na płytkach joypadów),
* dodanie opcji testowania pistoletów !!,
* dodanie opcji testera ciągłości przewodów.






Możliwości
Za pomocą przycisku FUNCTION wybieramy jedną z kilku oferowanych funkcjonalności:
1. C6 - C64/Atari/Amiga joypad test

Sprawdzenie działania klawiszy na joypadach od konsoli C64/Atari/Amiga (9 pin) lub innych (o których nie słyszałem, a wykorzystują ten sam protokół).
* Na pierwszym wyświetlaczu zapala się nazwa wciśniętego przycisku (U/D/L/R/B)
* Na drugim wyświetlaczu zapalą się segmenty odpowiadające danemu przyciskowi (jeśli ten został wciśnięty) wg rozpiski poniżej - przydane do testowania kombinacji klawiszy:
BTN
. .
U
L R
D
Opis działania joypada:
Tego typu joysticki zawierają trzy (lub cztery) przyciski kierunkowe (U/D/L/R) oraz jeden przycisk strzału (FIRE). Każdemu przyciskowi odpowiada oddzielna linia w złączu, a w środku nie ma żadnej elektroniki - wciśnięty przycisk zwiera po prostu odpowiednie pole stykowe do masy. Czasami zdarzają się wersje z dwoma przyciskami - wtedy ten drugi pełni funkcję turbo (a w środku jest dodatkowa elektronika - generator sygnału prostokątnego)
1 | UP
1 2 3 4 5 2 | DOWN
+------------+ 3 | LEFT
\ o o o o o / 4 | RIGHT
\ o o o o / 5 | ANALOG Y
+-------+ 6 | FIRE
6 7 8 9 7 | +5V
(widok na gniazdo w konsoli) 8 | GND
9 | ANALOG X




2. SE - SEga joypad test

Sprawdzenie działania klawiszy na joypadach od konsoli SEGA (9 pin). Przycisk FUNCTION zmienia sposób prezentacji na jeden z dwóch poniższych:
* U/D/L/R/A/B/C/X/Y/Z/St/Mo - na wyświetlaczu pojawi się nazwa wciśniętego przycisku (gdy wciśnięte jest kilka - pojawi się tylko jeden)
* n wyświetlaczu zapalą się segmenty odpowiadające danemu przyciskowi (jeśli ten został wciśnięty) wg rozpiski poniżej - przydane do testowania kombinacji klawiszy:
U Y
L R X Z
D B
. . A C
STA MOD
Opis działania joypada:
Oryginalne joysticki składają się z czterech przycisków kierunkowych (U/D/L/R), trzech przycisków ogólnych (A/B/C) oraz przycisku START. Stworzenie osobnej linii dla każdego przycisku wymagałoby zastosowania większej wtyczki, dlatego zdecydowano na dodanie multipleksera w padzie (np. układ 74157), a sygnał SELECT określa, stan których przycisków jest wystawiany. Warto zwrócić uwagę, że stan na pinach 3 i 4 wynosi 0V gdy zelect=0 - może to być używane np. do wykrywania, czy pad jest w ogóle podłączony do konsoli.
1 | UP
1 2 3 4 5 2 | DOWN
+------------+ 3 | LEFT (SELECT=1) , 0V (SELECT=0)
\ o o o o o / 4 | RIGHT (SELECT=1) , 0V (SELECT=0)
\ o o o o / 5 | +5V
+-------+ 6 | B (SELECT=1) , A (SELECT=0)
6 7 8 9 7 | SELECT
(widok na gniazdo w konsoli) 8 | GND
9 | C (SELECT=1) , START (SELECT=0)


W późniejszym okresie pojawiły się też joysticki z dodatkowymi przyciskami X/Y/Z oraz MODE.

Aby zachować zgodność z oryginalnymi kontrolerami, zdecydowano na następujące, dość ciekawe rozwiązanie:
* Większość gier odpytuje stan joysticka raz na klatkę obrazu (co 20ms w wersji NTSC) co oznacza, że linia SELECT też musi zmieniać swój stan raz na klatkę
klatka |---1--------|---2--------|---3--------|
SELECT __---__________---__________---________
* Joystick może znaleźć się w 8 różnych stanach (S1, S2, .., S8)
* Przejście do następnego stanu następuje wraz ze zmianą poziomu na linii SELECT
* Gdy poziom na linii SELECT utrzymuje się dłużej niż 1.5 ms, następuje wrócenie do stanu początkowego (S1)
* W stanach S1, S2, S3, S4 joystick zwraca dane o przyciskach tak 3 przyciskowa wersja
* W stanach S5, S6 joystick zwraca informacje, że ma dodatkowe przyciski (**) oraz stan tych przycisków, wg tabelki poniżej:
STAN | SELECT | PIN1 | PIN2 | PIN3 | PIN4 | PIN6 | PIN9
-----+--------+------+------+------+------+------+------
S1 | 0 | U | D | 0 | 0 | A | START
S2 | 1 | U | D | L | R | B | C
S3 | 0 | U | D | 0 | 0 | A | START
S4 | 1 | U | D | L | R | B | C
S5 | 0 | ** | ** | | | | (** = 0V)
S6 | 1 | Z | Y | x | MODE | |
S7 | 0 | | | | | |
S8 | 1 | | | | | |
3. PE - PEgasus joyad test

Sprawdzenie działania klawiszy na joypadach Pegasus(9 / 15 pin) lub NES (7 pin). Przycisk FUNCTION zmienia sposób prezentacji na jeden z dwóch poniższych:
* U/D/L/R/Se/St/A/B - na wyświetlaczu pojawi się nazwa wciśniętego przycisku (gdy wciśnięte jest kilka - pojawi się tylko jeden)
* Na wyświetlaczu zapalą się segmenty odpowiadające danemu przyciskowi (jeśli ten został wciśnięty) wg rozpiski poniżej - przydane do testowania kombinacji klawiszy:
U .
L R . .
D .
. . B A
SEL STA
Opis działania joypada:
Oryginalne kontrolery od konsoli NES mają 4 przyciski kierunkowe (U/D/L/R), SELECT, START, B oraz A, a pady od klonów (Pegasus) mają dodatkowe przyciski TURBOA i TURBOB.
Czasami obecny jest też przycisk C (którego wciśnięcie daje efekt wciśnięcia przycisków A i B na raz) oraz X (czyli TURBO C). Protokół komunikacji składa się z trzech linii - STROBE, CLOCK, DATA:
* Joystick posiada rejestr przesuwny (układ 4021)
* Opadające zbocze na linii strobe powoduje zapamiętanie w rejestrze stanu wszystkich przycisków, a na linii data pojawia się stan przycisku A
* Kolejne zbocza narastające na linii CLOCK powodują wystawianie na linii DATA stanu kolejnych przycisków w kolejności: B, SELECT, START, UP, DOWN, LEFT, RIGHT
* W przypadku dalszych zboczy na linii CLOCK, stan na linii data nie jest sprecyzowany, tzn. zależy od tego, do czego podłączona jest linia SI (Serial Input) układu 4021. W joystickach od klonów, które zamiast tego układu posiadają zalaną strukturę, zachowanie może być różne. Jest to o tyle ciekawe, że mogłoby być użyte do wykrywania obecności joysticka.
Uwaga: w konsoli jest bufor odwracajacy wartość linii DATA, więc stan wciśniętego przycisku, który zwraca joystick jako niski jest odczytywany przez konsolę jako wysoki
1 2 3 4 5 1 2 3 4 5 6 7 8 +---+ 9p 15p 7p
+------------+ +-----------------+ 1-| o \ DATA 2 8 4
\ . o o o . / \ o . . . . . . o / 2-| o o |-7 STROBE 3 12 3
\ o . o . / \ o . . o . . o / 3-| o . |-6 CLOCK 4 9 2
+-------+ +-------------+ 4-| o . |-5 +5V 6 15 7
6 7 8 9 9 1 1 1 1 1 1 +-----+ GND 8 1 1
0 1 2 3 4 5
9 pin 15 pin 7 pin
(-------------widok na gniazdo w konsoli-----------)
STROBE _+---+_______________
CLOCK __________+---+____+---+____+---+____+---+____+---+____+---+____+---+____+---+____
DATA -----| A | B | SELECT | START | UP | DOWN | LEFT | RIGHT |

4. SN - SNes joypad test

Sprawdzenie działania klawiszy na joypadach SNES (7 pin). Przycisk FUNCTION zmienia sposób prezentacji na jeden z dwóch poniższych:
* U/D/L/R/Se/St/TL/TR/A/B/X/Y - na wyświetlaczu pojawi się nazwa wciśniętego przycisku (gdy wciśnięte jest kilka - pojawi się tylko jeden)
* wyświetlaczu zapalą się segmenty odpowiadające danemu przyciskowi (jeśli ten został wciśnięty) wg rozpiski poniżej - przydane do testowania kombinacji klawiszy:
U .
L R X A
D .
TL TR Y B
SEL STA
Opis działania joypada:
Joystick posiada cztery dodatkowe przyciski (X, Y, TL, TR), a protokół komunikacji jest identyczny jak w joypadach NES/Pegasus. Wewnątrz jest drugi rejestr przesuwny, połączony szeregowo z pierwszym, a odczyt stanu "dodatkowych" przycisków następuję w trakcie dodatkowych zboczy zegarowych.
1 2 3 4 5 6 7 1 +5V
+---------+------\ 2 CLOCK
| o o o o | o o o ) 3 STORBE4
+---------+------/ 4 DATA
(widok na gniazdo w konsoli) 7 GND
STROBE _+---+_______________
CLOCK __________+-+__+---+____+---+____+-+__+--+___+--+___+---+____+---+____+-+__+-+__+-+__+-+__+-+__+-+__+-+__+-+__+
DATA -----| B | Y | SELECT | START | UP | DOWN | LEFT | RIGHT | RIGHT | A | X | TL | TR | 1 | 1 | 1 | 1 |

5. PI - PIstol test

Sprawdzenie działania pistoletu od konsol typu Pegasus (9 / 15pin) lub NES (7 pin). W testerze zacznie jasno migać dioda.
* Na pierwszym wyświetlaczu zapali się napis T (Trigger), gdy spust w pistolecie zwiera do masy (*)
* Na drugim wyświetlaczu zapali się napis L (Light), gdy pistolet będzie celował w migającą diodę
(*) Niektóre pistolety zwierają spust do masy, inne do zasilania.
Opis działania pistoletu:

Sposób działania pistoletu świetlnego zna chyba każdy - w momencie wciśnięcia spustu, ekran w TV robi się cały czarny z wyjątkiem miejsca, do którego powinno się trafić - tam pojawia się biały prostokąt. Konsola odczytuje z pistoletu czy ten wskazuje w danej chwili na jasny czy ciemny punkt i na tej podstawie decyduje, czy zaliczyć strzał czy nie. Ale jak to jest zbudowane? Pistolet składa się z dwóch osobnych elementów, podłączonych do różnych linii:
* spustu - czyli przycisku, który zwiera do masy, a jego wciśnięcie powoduje rozwarcie (zależy to od konkretnego egzemplarza; kod w grach nie sprawdza stanu logicznego na tej linii, tylko jej zmianę)
* fotodiody, czyli elementu optycznego, spolaryzowanego zaporowo, która po oświetleniu zmniejsza kilkukrotnie swoją rezystancję (między fotodiodą a wyjściem lufy jest jeszcze soczewka dwuwypukła, która skupia obraz z większej odległości). 99% pistoletów wygląda jak poniżej:
- linią sensor steruje tranzystor (w roli klucza nasyconego), normalnie nasycony (czyli kolektor ściąga do masy).
- w momencie gdy dioda zostanie oświetlona, jej rezystancja spada, napięcie na niej się zmniejsza. Ten skok napięcia przenoszony jest na bazę tranzystora za pomocą kondensatora, który na chwilę zatyka tranzystor (kolektor przestaje zwierać do masy).
- wartości elementów C1/R1/R2 mogą się różnić w różnych modelach, skutkując dłuższą (lub krótszą) zmianą stanu po oświetleniu fotodiody, jednak chwilę po oświetleniu kolektor znów zwiera do masy, bo sprzężenie jest AC. Zatem można już teraz obalić słynny mit, że wystarczy ciągle celować na źródło światła, aby zawsze trafiać kaczkę (pomijając to, że gra i tak pewnie zabezpiecza się przed takim oszustwem sprawdzając, czy pistolet wskazuje na coś czarnego w momencie przed wyświetleniem białego prostokąta)



1 2 3 4 5 1 2 3 4 5 6 7 8 +---+ 9p 15p 7p
+------------+ +-----------------+ 1-| o \ TRIGGER 5 4 5
\ o . . . o / \ o . . o o . . . / 2-| . o |-7 SENSOR 1 5 6
\ o . o . / \ . . . . . . o / 3-| . o |-6 +5V 6 15 7
+-------+ +-------------+ 4-| . o |-5 GND 8 1 1
6 7 8 9 9 1 1 1 1 1 1 +-----+
0 1 2 3 4 5
9 pin 15 pin 7 pin
(-------------widok na gniazdo w konsoli-----------)
Ciekawostka 1:
Jedyny pistolet jaki znam, ktory ma bardziej rozbudowany sposób detekcji to Casel - tam w torze detekcji jest nawet jakaś cewka (nie analizowałem działania tego, ale słyszałem, że na niektórych TV ten pistolet sprawia problemy podczas gdy inne, proste pistolety, działają). Dodatkowo jest też ciekawy układ, którego zadaniem jest odegranie dźwięku wystrzału po wciśnięciu spustu.



Ciekawostka 2:
Zanim stworzyłem obecną wersję testera, aby sprawdzić działanie pistoletu napisałem prosty program (grę) na kartridż, która wyświetla stan linii TRIGGGER oraz SENSOR. Następnie świeciłem lampką rowerową w lufę i sprawdzałem reakcję. Moja lampka ma trzy tryby świecenia:
* jaśniejszy
* ciemniejszy
* miganie co pół sekundy.
Tryb jaśniejszy i miganie działały zgodnie z oczekiwaniem, natomiast tryb "ciemniejszy" powodował bardzo szybką zmianę stanu wejścia SENSOR. Najpierw myślałem, że może poziom światła jest na granicy czułości fotodiody i ta jest przez to niestabilna. Rozwiązanie zagadki okazało się jednak dużo prostsze - w trybie "ciemniejszym" lampka rowerowa bardzo szybko włącza i wyłącza się (PWM, z częstotliwością kilohertzów). Ludzkie oko uśrednia to oczywiście, ale fotodioda w pistolecie potrafi to wykryć.
6. WI - WIre continuity test

Sprawdzenie ciągłości - przydatne do testowania ciągłości przewodów od joysticków, pistoletów, itp.
* Jeden koniec przewodu podłączamy do szpilki "1", a drugi do "2".
* Jeśli nie ma przerwy, dioda się zapali, a na wyświetlaczu pojawi się napis "OK"
7. F5 - Find 5 wires

Ten test służy do odszyfrowania połączeń na płytce od pada typu Pegasus, gdy np. urwały nam się przewody. Jak już wcześniej zostało wspomniane, płytki tego typu posiadają 5 pól do przylutowania przewodów:
* GND (masa)
* VCC (zasilanie, +5V)
* DATA (szeregowa linia danych)
* CLK (sygnał zegarowy wystawiający stan kolejnych przycisków: A B Select Start Up Down Left Right)
* STRB (sygnał stroba resetujący rejestr w padzie do pozycji A);
* czasami jest jeszcze 6 pole do gniazda słuchawkowego
Niestety ich kolejność na różnych płytkach jest w zasadzie dowolna, stąd przylutowanie przewodów "na chybił trafił" może zakończyć się uszkodzeniem (jeśli nie mamy szczęścia), całkowitym niedziałaniem albo działaniem błędnym. Ten test wykrywa, które pole stykowe za co odpowiada.
Jak to działa:
* sondę GND należy przyczepić do masy na płytce pada (masa jest łatwa do odnalezienia, bo przechodzi przez wszystkie 6 przycisków: UP, DOWN, LEFT, RIGHT, SELECT, START, B, A)

* Sondy 1,2,3,4 przyczepić do pozostałych pól w dowolnej kolejności
* Na wyświetlaczu pojawi się napis LL informujący, że należy wcisnąć (i trzymać) przycisk L na padzie. Następnie wciskamy przycisk OK.
* Jeśli pojawi się napis ER (Error) - tester nie potrafił znaleźć odpowiedniej kolejności (płytka jest najprawdopodobniej uszkodzona)
* Jeśli pojawi się napis OK - tester odnalazł odpowiednią kolejność. Wciskamy przycisk OK - wyświetli się kolejność znalezionych sygnałów, np. 1C 2D 3S 4V oznacza, że: pod sondą 1 jest CLOCK, pod 2 jest DATA, pod 3 jest STROBE, pod 4 jest zasilanie.
* Kolejne wciśnięcie przycisku OK powoduje, że teraz możemy przetestować działanie wszystkich przycisków (jak w teście PE)
Ciekawostka 1:
Miszmasz w sposobie połaczeń jest nawet taki, że płytka do tego samego joysticka (quickshoot, od konsoli MT777DX, widoczna na zdjęciu powyżej) występowała w kilku wersjach, różniących się oznaczeniem i koklejnością pól stykowych:
plytka | pola stykowe (od lewej do prawej)
-------|-----------------------------------
S051 | +5V STROBE CLOCK DATA GND
F112 | +5V STROBE CLOCK DATA GND
S046 | +5V DATA CLOCK STROBE GND
Dalsze usprawnienia (do następnej wersji)
* dodanie obsługi 15 pinowych padów typu GAMEPORT (używanych w latach 90-tych, podłączanych do kart dźwiękowych w PC-ach)
* dodanie opcji znajdowania miejsca pęknięcia w kablu - często przyczyną niedziałania joysticka jest pęknięta jedna (lub więcej) żył. W 60% pęknięcie następuje tuż przy wtyczce, w 30% przy padzie a w reszcie przypadków - gdzieś po środku. Miejsce pęknięcia bardzo łatwo znaleźć zwykłym multimetrem, gdy ten wyposażony jest w miernik pojemności:
1) nalezy odlutować przewód od płytki
2) szukamy dwóch żył, które są sprawne i badamy pojemność między nimi Cgood) (będą to dziesiątki pF)
3) następnie badamy pojemność między sprawną a niesprawną żyłą (Cbad). Stosunek Cbad/Cgood określi w przybliżeniu miejsce pęknięcia (np. 0.5 będzie oznaczało że pęknięcie jest dokładnie w połowie przewodu)
Celem jest pozbycie się multimetru i automatyzacja tego za pomocą testera.
Cool? Ranking DIY