Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Interfejs joystick PC (gameport) -> C64  (Przeczytany 3368 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Interfejs joystick PC (gameport) -> C64
« dnia: 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.



budgieda

  • Gość
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #1 dnia: 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.. :)

stevie13

  • Gość
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #2 dnia: 14 Kwietnia 2016, 16:11 »
Ooooooooo obserwuję temat, bo klonów Arduino trochę mam :)

...że też na to nie wpadłem :)

Offline StaryMarabut

  • Level 6
  • ******
  • Wiadomości: 1794
  • Robię wszystkim dobrze *za pół ceny.
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #3 dnia: 14 Kwietnia 2016, 16:49 »
Z tego co pamietam, na pinach CIA są stany wysokie. Zestyk z joya podaje stan niski na pin CIA.

budgieda

  • Gość
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #4 dnia: 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

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #5 dnia: 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?

Offline Aro78

  • Level 1
  • *
  • Wiadomości: 31
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #6 dnia: 14 Kwietnia 2016, 21:08 »
Same styki :-D
C 128DCR , 1541 II , ~ 250 5.25' MD2D , SD2IEC LCD, Noris Data Mouse , 2x Quick Joy , Datalux SV-703, Action Plus 7.3 , Easy Flash , Final III (oryginał ) , Final II , Final II Version Plus , Bis Plus , X , Black Box X, Black box v8 , Back Box v4 ,2x Black Box v3 , Black Box v2 ,Box Plus

Offline dekanex

  • Level 2
  • **
  • Wiadomości: 98
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #7 dnia: 14 Kwietnia 2016, 21:48 »

Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #8 dnia: 14 Kwietnia 2016, 21:53 »
Same styki :-D

zalezy, masz potencjometry czasami np. "wiosełka" taki joy
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #9 dnia: 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.

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #10 dnia: 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.

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #11 dnia: 28 Kwietnia 2016, 22:33 »
W tej chwili na płytce prototypowej wygląda to tak:



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.

Offline Raf

  • Master of disaster
  • Administrator
  • Level 7
  • **********
  • Wiadomości: 7339
  • Wolność, własność, sprawiedliwość
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #12 dnia: 29 Kwietnia 2016, 01:14 »
Mam taki sam joy ale na usb
"Cokolwiek powiesz albo napiszesz, znajdzie się ktoś, kto słyszy lub czyta coś zupełnie innego i jeszcze bezczelnie wmawia Ci to"

Offline Fishman

  • Level 2
  • **
  • Wiadomości: 70
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #13 dnia: 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 ;)

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Re: Interfejs joystick PC (gameport) -> C64
« Odpowiedź #14 dnia: 29 Kwietnia 2016, 11:58 »
LPC wersja U za dolara.
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....