C64Power Forum

Hardware => Hardware => Wątek zaczęty przez: Fishman w 14 Kwietnia 2016, 14:28

Tytuł: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 14 Kwietnia 2016, 14:28
Oryginalne joysticki do C64 są albo wiekowe albo nieproporcjonalnie drogie (nowy Scorpion na alledrogo to prawie stówa z przesyłką, a to tylko trochę plastiku i parę mikrostyków, podczas gdy nowego pada na USB z dwoma analogami, dwunastoma przyciskami i elektroniką do tego wszystkiego można dostać za ~25zł). Z kolei Microsoft od systemu Vista uciął wsparcie dla gameportu, w związku z czym na rynku wtórnym pojawiło się dużo starszych, doskonałej jakości joysticków na to złącze do PC za grosze (albo i za darmo).

Niestety, są to joysticki analogowe, więc bez konwertera podłączyć się ich do C64 nie da. Nie mają też kliku, co może gryźć purystów mikrostykowych ;)

Na szczęście dzisiaj zmajstrowanie takiego interfejsu to sprawa trywialna i mało kosztowna. Za dychę kupiłem Logitecha Wingman Attack w idealnym stanie, podłączyłem go do Arduino Nano za 6,50zł, wieczorem napisałem trywialny programik do interfejsu (więcej czasu zajęło mi formatowanie kodu niż sam algorytm) i mam działający szkielet. Tylko nie mam jeszcze C64 do przetestowania wynalazku ;)

Zanim zatem upalę sobie porty w maszynie - czy po liniach joysticka ganiają jakieś prądy i czy można uwalić taką linię podłączając ją do +5V/GND? W joysticku do C64 to chyba są zwykłe styki bez niczego w szereg, więc raczej nie powinien to być problem - przynajmniej dla GND. A może w szereg dla bezpieczeństwa dać rezystory np. 110Ohm, żeby w razie czego ochronić zarówno C64 jak i Arduino, ale czy to z kolei nie wpłynie na fałszowanie wyników odczytu portu joysticka w C64? Zasilanie całego układu oczywiście szło by z C64, żeby różnicy potencjałów nie tworzyć.

I tak, wiem że można to zrobić na układach dyskretnych i Arduino to overkill, ale biorąc pod uwagę łatwość programowania, kalibrowania i elastyczność tego rozwiązania ciężko przebić kosztowo i funkcjonalnie to rozwiązanie.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: budgieda w 14 Kwietnia 2016, 15:30
Oryginalne joysticki do C64 są albo wiekowe albo nieproporcjonalnie drogie (nowy Scorpion na alledrogo to prawie stówa z przesyłką, a to tylko trochę plastiku i parę mikrostyków, podczas gdy nowego pada na USB z dwoma analogami, dwunastoma przyciskami i elektroniką do tego wszystkiego można dostać za ~25zł). Z kolei Microsoft od systemu Vista uciął wsparcie dla gameportu, w związku z czym na rynku wtórnym pojawiło się dużo starszych, doskonałej jakości joysticków na to złącze do PC za grosze (albo i za darmo).

Niestety, są to joysticki analogowe, więc bez konwertera podłączyć się ich do C64 nie da. Nie mają też kliku, co może gryźć purystów mikrostykowych ;)

Na szczęście dzisiaj zmajstrowanie takiego interfejsu to sprawa trywialna i mało kosztowna. Za dychę kupiłem Logitecha Wingman Attack w idealnym stanie, podłączyłem go do Arduino Nano za 6,50zł, wieczorem napisałem trywialny programik do interfejsu (więcej czasu zajęło mi formatowanie kodu niż sam algorytm) i mam działający szkielet. Tylko nie mam jeszcze C64 do przetestowania wynalazku ;)

Zanim zatem upalę sobie porty w maszynie - czy po liniach joysticka ganiają jakieś prądy i czy można uwalić taką linię podłączając ją do +5V/GND? W joysticku do C64 to chyba są zwykłe styki bez niczego w szereg, więc raczej nie powinien to być problem - przynajmniej dla GND. A może w szereg dla bezpieczeństwa dać rezystory np. 110Ohm, żeby w razie czego ochronić zarówno C64 jak i Arduino, ale czy to z kolei nie wpłynie na fałszowanie wyników odczytu portu joysticka w C64? Zasilanie całego układu oczywiście szło by z C64, żeby różnicy potencjałów nie tworzyć.

I tak, wiem że można to zrobić na układach dyskretnych i Arduino to overkill, ale biorąc pod uwagę łatwość programowania, kalibrowania i elastyczność tego rozwiązania ciężko przebić kosztowo i funkcjonalnie to rozwiązanie.


ooo. dobry temat.. niektórzy za joy`e chcą ceny z orbity.. quickshoty po 150-200 za używkę to przesada.. a joy z pc jest za grosze.. :)
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: stevie13 w 14 Kwietnia 2016, 16:11
Ooooooooo obserwuję temat, bo klonów Arduino trochę mam :)

...że też na to nie wpadłem :)
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: StaryMarabut w 14 Kwietnia 2016, 16:49
Z tego co pamietam, na pinach CIA są stany wysokie. Zestyk z joya podaje stan niski na pin CIA.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: budgieda w 14 Kwietnia 2016, 17:34
A to? jest coś warte? mozna podłączyc kazde urządzenie pod usb pod c64 amigę ..http://allegro.pl/adapter-mysz-joy-pad-amiga-atari-st-c64-c128-tom-i6072098054.html
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 14 Kwietnia 2016, 21:02
ooo. dobry temat.. niektórzy za joy`e chcą ceny z orbity.. quickshoty po 150-200 za używkę to przesada.. a joy z pc jest za grosze.. :)

Koszt części do budowy konwertera z obudową i portami powinien zamknąć się w jakichś 15zł.
Przy tej ilości wejść i wyjść jakimi dysponuje Arduino można się pokusić też np. o zrobienie autoswitchera na dwa porty przełączanego którymś z przycisków na joysticku...

Ooooooooo obserwuję temat, bo klonów Arduino trochę mam :)
...że też na to nie wpadłem :)

Spoko, jak okaże się, że wszystko bangla to wrzucę pinout i kod.

Jest tylko jedno zastrzeżenie - konwerter może nie działać z joystickami "elektronicznymi", które mają własną elektronikę i wymagają do działania zasilania i specjalnego drivera (np. Genius F-31D), ale powinien obsłużyć każdy standardowy joystick zgodny budową ze standardowym joystickiem PC na gameport.

Forum nie pozwala na wrzucanie youtube? No to wrzucam odnośnik do testu na płytce prototypowej kręconego ziemniakiem - nie za dużo widać, ale pokazuje cyfrowy odczyt kierunków ruchu na czterech diodach, oraz Fire i Autofire (na dużym przycisku) na wbudowanej diodzie: https://youtu.be/tMveQSvJYn8

Z tego co pamietam, na pinach CIA są stany wysokie. Zestyk z joya podaje stan niski na pin CIA.

Znaczy, stany wysokie i stan wysokiej impedancji? No to żadne wysokie prądy nie powinny tam banglać.
W joystickach są jakieś rezystory czy to po prostu same styki?
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Aro78 w 14 Kwietnia 2016, 21:08
Same styki :-D
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: dekanex w 14 Kwietnia 2016, 21:48
A to? jest coś warte? mozna podłączyc kazde urządzenie pod usb pod c64 amigę ..http://allegro.pl/adapter-mysz-joy-pad-amiga-atari-st-c64-c128-tom-i6072098054.html
Opisałem swoje wrażenia tutaj: http://c64power.com/forumng/index.php?topic=6603.msg94828#msg94828 (http://c64power.com/forumng/index.php?topic=6603.msg94828#msg94828)
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: rs2322 w 14 Kwietnia 2016, 21:53
Same styki :-D

zalezy, masz potencjometry czasami np. "wiosełka" taki joy
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 14 Kwietnia 2016, 22:02
zalezy, masz potencjometry czasami np. "wiosełka" taki joy

Ale to zdaje się tylko na tych dwóch pinach wykorzystywanych przez myszkę/paddle?
No i generalnie chodziło mi o rezystory włączone w szereg w celu ew. ograniczenia płynącego prądu, ale jeżeli to sterowanie napięciowe, to problemu nie ma.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 28 Kwietnia 2016, 22:10
W końcu doczekałem się swojego C64 i dokończyłem pierwszą wersję interfejsu JOYPC2C64 i dziwnym trafem okazał się on działać :D

Projekt będzie działać na dowolnym Arduino zasilanym z 5V. Sam złożyłem go na płytce prototypowej i Arduino Nano, ale na Uno czy Pro Mini będzie działać tak samo. Jeżeli ktoś lubi rozwiązania minimalistyczne, to w ATtiny w obudowie DB15 pewnie też się zmieści.

Lista części:
1. Joystick analogowy PC z OLX czy Alledrogo - 1 sztuka (0-30zł)
2. Wtyczka żeńska DB9 - 1 sztuka (~2zł)
3. Wtyczka żeńska DB15 (gameport) - 1 sztuka (~2zł)
4. Rezystory 47k - 2 sztuki (~0,1zł)
5. Kilkanaście sztuk przewodów prototypowych (docelowo do zastąpienia dwoma kawałkami skrętki czy co tam jest pod ręką). (~2zł)
6. Arduino Uno/Nano/Pro Mini z Aliexpress - 1 sztuka (~7zł)

Koszt całości przy uwzględnieniu nowych części bez Joysticka ~15zł

Podłączenie Joysticka PC przez wtyczkę DB15 do Arduino (Dx - pin cyfrowy x w Arduino, Ax - pin analogowy Ax w Arduino):
//pin 1 - +5V
//pin 4 - GND
//pin 2 - D2 (przycisk 1)
//pin 7 - D3 (autofire - przycisk 2)
//pin 10 - D4 (opcja - przycisk 3)
//pin 14 - D5 (opcja - przycisk 4
//pin 3 - A0 (rezystor 47k do masy)
//pin 6 - A1 (rezystor 47k do masy)
//zwieramy piny AREF i 3.3V

Podłączamy Arduino do PC kablem USB i jeżeli znad płytki nie unosi się dym, to raczej nie jest źle.
Załączony plik rozpakowujemy i uruchamiamy w Arduino IDE.
Odkomentowujemy linię #define SERIAL_DEBUG i wgrywamy do Arduino (kablem USB albo programatorem).

Teraz przystępujemy do kalibracji joysticka - w monitorze portu szeregowego (115kbit) powinien być widoczny stan osi i przycisków joysticka, dodatkowo naciśnięciu Fire powinno towarzyszyć zapalenie się wbudowanej w Arduino diody sygnalizacyjnej. Po przetestowaniu Fire sprawdzamy, czy dane na ekranie odpowiadają położeniu joysticka i kalibrujemy go fizycznie (suwadła/pokrętła na joysticku) i/lub programowo - wartości XLEFT XRIGHT YUP YDOWN definiują strefę martwą i poziom wychylenia joysticka.

Po przetestowaniu projektu na sucho podłączamy z kolei żeńską wtyczkę DB9:
//pin 7 - +5V
//pin 8 - GND
//pin 6 - D6
//pin 1 - D7
//pin 2 - D8
//pin 3 - D9
//pin 4 - D10

Jeszcze raz testujemy, czy wszystko jest OK i można już wyłączyć debugowanie komentując linię #define SERIAL_DEBUG i ponownie wgrywając program do Arduino. Komunikacja szeregowa może wprowadzać pewne opóźnienie w pracy interfejsu, szczególnie jeżeli ustawmy niską prędkość (np. 9600bps).

Przed podłączeniem interfejsu do C64 koniecznie odłączyć go od portu USB, ponieważ jest zasilany z Control Portu i może nastąpić niekontrolowany przepływ napięcia między USB a C64.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 28 Kwietnia 2016, 22:33
W tej chwili na płytce prototypowej wygląda to tak:

(http://i.imgur.com/Uve7LCt.jpg?1)

A działa tak: https://youtu.be/7uQ1x0MNzPw

Docelowo wsadzę go w jakąś obudowę, bo breadboard i kable prototypowe jak sama nazwa wskazuje są dobre do prototypowania, a nie normalnej pracy.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Raf w 29 Kwietnia 2016, 01:14
Mam taki sam joy ale na usb
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 29 Kwietnia 2016, 09:32
Mam taki sam joy ale na usb

Podejrzewam, że w środku jest to samo+interfejs HID, więc można by się wpiąć bezpośrednio w potencjometry i przyciski. Joysticka na USB też oczywiście można użyć, ale będzie to droższe rozwiązanie, bo trzeba by chipa z hostem USB (np. Teensy), więc rozwiązanie byłoby średnio opłacalne z ekonomicznego punktu widzenia, szczególnie biorąc pod uwagę, że praktycznie nowe joysticki na gameport można dostać za grosze, a podłączenie ich do C64 to tylko kwestia konwersji A/C stanów dwóch potencjometrów - da się to zrobić nawet na gołym ATtiny w obudowie 8-nóżkowej, bo Fire można puścić bezpośrednio.

Przyszły mi już zamówione zestawy RF na 433MHz, więc teraz będę kombinował bezprzewodową wersję kontrolera ;)
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Kisiel w 29 Kwietnia 2016, 11:58
LPC wersja U za dolara.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: NeckUno1 w 29 Kwietnia 2016, 12:34
Mam taki sam joy ale na usb

Podejrzewam, że w środku jest to samo+interfejs HID, więc można by się wpiąć bezpośrednio w potencjometry i przyciski. Joysticka na USB też oczywiście można użyć, ale będzie to droższe rozwiązanie, bo trzeba by chipa z hostem USB (np. Teensy), więc rozwiązanie byłoby średnio opłacalne z ekonomicznego punktu widzenia, szczególnie biorąc pod uwagę, że praktycznie nowe joysticki na gameport można dostać za grosze, a podłączenie ich do C64 to tylko kwestia konwersji A/C stanów dwóch potencjometrów - da się to zrobić nawet na gołym ATtiny w obudowie 8-nóżkowej, bo Fire można puścić bezpośrednio.

Przyszły mi już zamówione zestawy RF na 433MHz, więc teraz będę kombinował bezprzewodową wersję kontrolera ;)

Daj znać jak ogarniesz ten temat, chętnie bym sobie coś takiego poskładał jakbyś uchylił rąbka tajemnicy ;) Piwko dostaniesz w zamian, nie martw się :P
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 29 Kwietnia 2016, 12:56
Daj znać jak ogarniesz ten temat, chętnie bym sobie coś takiego poskładał jakbyś uchylił rąbka tajemnicy ;) Piwko dostaniesz w zamian, nie martw się :P

Spoko, też źródełko wrzucę.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: mes_mariusz w 04 Grudnia 2016, 20:43
Cześć.

Robił ktoś płytki PCB pod to? Albo spotkał się z innym adapterem Game Port Controller 2 Control Port Controller ?
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 05 Grudnia 2016, 01:47
Cześć.

Robił ktoś płytki PCB pod to? Albo spotkał się z innym adapterem Game Port Controller 2 Control Port Controller ?

Sądzę, że wątpię, bo to rozwiązanie autorskie, a joysticki na gameport to nie jest burzliwie rozwijający się rynek :P
"Gotową płytką" dla tego adaptera będzie najprostsze Arduino - choćby Pro Mini z aliexpress za 5zł i kabelki zakończone z jednej strony d-subem 15 pin, a z drugiej 9-pin.
Ba, jak się postarasz, to zmieścisz go w jakimś ATTiny i wciśniesz do obudowy d-sub 15-pin, więc nawet pudełko na płytę ci odpadnie.
Ha, chyba nawet znalazłem kogoś z taki pomysłem na ebayu  ;D - http://www.ebay.com/itm/DB-15-Pin-PC-Joystick-adapter-converter-for-Amiga-Atari-Commodore-9-pin-gameport-/272222183107

Można też taki konwerter zbudować całkowicie analogowo, korzystając ze scalaka z komparatorami, a nawet z tranzystorów.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Kisiel w 05 Grudnia 2016, 09:46
Sądzę że wątpie...perfekto:) przekonane graniczące z pewnością...co samego wynalazku..lepiej zrobić emulacje myszki z usb na proporcjonalną. Da się to zrobić na prostym cm0+u, ztcp to ma hid w romie
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 05 Grudnia 2016, 10:41
Pewnie, że można, choć prościej byłoby zrobić konwerter z PS/2.
Rozwiązanie z USB byłoby oczywiście bardziej uniwersalne, bo w jednej skrzynce można by zrobić naraz emulator myszki i joysticka/pada z automatycznym rozpoznawaniem, co jest podpięte.
Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: rs2322 w 05 Grudnia 2016, 16:51
Jakiś czas temu zrobiłem taki konwerter (gameport joy), jak ktoś chce to pisać proszę na priv (dostepne jest pcb lub cały moduł).
Zaimplemementowany bootloder via uart, podczas normalnej pracy na porcie uart wystawiane sa dane odnosnie stanu joya (podłaczajać pod PC mozna sprawdzić czy wszystko z joyem jest gites). PCB jest jednostronne.
Od dawien dawna joye gameport sa bardzo tanie na portalach aukcyjnych, zakupilem juz wiele sztuk w cenie 1zł + wysyłka z tego wlasnie powodu powstał ten konwerer, na poczatu mialem to ładować do środka obudowy joya jak prototyp ewoulował do takiej oto wersji ostatecznie - niezależny moduł. Urządzenie jest dwustronne prawa lub lewa strona, jeden joy obsługiwany, testowane z C64, C128, Atari800xl, A500.
Soft trzaśniety w asemblerze zajmuje całe 8% pamięci :), przepraszam że nie Arduino ale nie ide z modą do przodu.

PS. Co ciekawe analogowym joyem (oczywiście z konwertrem) gra sie lepiej niż stykowym czym byłem zszokowany ! Kilka osób z forum ma już ten konwerter.


(http://www.c64funs.com/joy%20gameport%20c64.jpg)

(http://www.c64funs.com/joy%20gameport%20c128.jpg)




Tytuł: Re: Interfejs joystick PC (gameport) -> C64
Wiadomość wysłana przez: Fishman w 05 Grudnia 2016, 18:45
Ha, no proszę. A myślałem, że tylko ja jestem zboczony ;)