24.06.2018, 07:33:11 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Zapraszamy do rejestracji na forum wszystkich fanów Pegasusa!
 
   Strona główna   Help Szukaj Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Zestaw do naprawy padów do Pegasusa  (Przeczytany 1190 razy)
krzysiobal
Aktywny użytkownik
***
Wiadomości: 225


Naprawie pegasusa każdemu!


Zobacz profil
« : 07.07.2016, 21:34:04 »

O tym, że większość padów do PEGASUSa często ulega uszkodzeniu, nie trzeba nikogo informować. I nie chodzi tu o uszkodzenia kabla czy też wtyczki, ale układu scalonego będącego w padzie. Zwykle uszkodzenie objawia się:
* całkowitym brakiem reakcji na wciśnięcia klawiszy,
* niedziałaniem niektórych klawiszy,
* po wciśnięciu pewnego klawisza konsola odbiera to jakby wciśnięty został inny klawisz,
* efekt, jakby ciągle wciśnięty był jeden lub kilka klawiszy, mimo, że te nie są fizycznie wciśnięte.

Niestety, większość padów zawiera w środku układ cyfrowy w postaci gluta i jest on nienaprawialny. Jedyne pady, które mogą zawierać układ scalony w wersji DIP do oryginały od NESa lub niektóre wersje padów od IQ502 (te zawierają ciekawy, bo piracki układ UMC UM6582). Na aliexpress można kupić pady przypominające te od SNESa za ok 2$. Przerabiając końcówkę na taką, jaka nam pasuje, możemy mieć nowego, działającego pada za grosze. Niestety nie mogę się wypowiedziec na temat ich jakości (ergonomiczność, jakość plastiku, długość przewodu). Ale może warto jednak naprawić stare pady zwłaszcza, jeśli są od kompletu, a chcielibyśmy sprzedać naszego pegasusa, bez straty jego wartości?

Analizując trzy najpopularniejsze kształty padów:
* psia kośc (bone),
* quickshoot,
* iq502

zaprojektowałem trzy płytki drukowane, które można wstawić zamiast oryginalnej płytki w padzie, wystarczy podlutować tylko do niej kabel. Dodatkowo dzięki specjalnym oznaczeniom na PCB nie trzeba się martwić, który kabel gdzie podlutować.


W klasycznych padach mamy prosty układ cyfrowy - rejestr równoległo-szeregowy + jakiś dodatkowy układ, który odpowiada za realizację klawiszy TURBO. Ja swoje zestawy naprawcze oparłem o Atmegę8. Ktoś powie - do takich celów atmega? Otóż tak. A to z kilku powodów:
* w całości wystarczy jeden scalak, zamiast kilku
* koszt atmegi 8 to ok. 1.60zł na aliexpress
* atmega ma wewnętrzne rezystory podciągające - brak konieczności lutowania zewnętrznych
* możliwość działania na wewnętrznym kwarcu
* możliwość aktualizacji oprogramowania w przyszlości i prosta metoda konfiguracji (zmieniając jedną linijkę w kodzie programu można np. zmienić czas powtarzania przy wciśniętym przycisku TURBO).

A przyszłości planuję takie ulepszenia (jedynie w programie, gdyż sam sprzęt jest już odpowiedni)::
* możliwość zmiany tempa powtarzania po wciśnięciu przycisku TURBO (np. wciśnięcie jednocześnie przycisku TURBO + START to zmiana kolejno wg. wartości 1s, 0.5s, 0.2s, 0.1s, itd)
* możliwość personalizacji, np. wciśnięcie przycisku TURBO tak naprawdę nie realizuję funkcji TURBO ale np. kombinację kilku innych klawiszy - coś jak makro - może się np. przydać w grach typu MortalCombat, gdzie odpowiednie wciśniecie kombinacji klawiszy to jakiś specjalny rodzaj ciosu
* możliwość nagrywania sekwencji klawiszy, by je później odtworzyć jeszcze raz lub zgrać na komputer - dobre do nagrywania przebiegu gry.

Mikrokontroler chodzi na wewnętrznym rezonatorze 8 MHz. Program został napisany w C i sprowadza się do oczekiwania w przerwaniu na zbocze opadające na linii STROBE lub narastające na linii CLKOCK i przesyłanie szeregowo stanu klawiszy.

Pad typu `psia kość`:


Pad typu `quickshoot`:


Pad typu `iq502`:


Ponieważ ostatni typu padu ma możliwość w przypadku pada dla gracza nr 2 posiadania gniazda do podłączenia słuchawek, także swoją wersję wyposażyłem w możliwość jego wlutowania.

Zestawy naprawcze wykonywałem na laminacie o grubości 1 mm oraz 1.5 mm i nie zauwazyłem różnicy w czułości - działają identycznie z oryginalnymi. Jedynym kłopotem może być fakt, żę miejsca, które są zwierane przez gumki nie są złocone/cynowane, jak w oryginalnych padach i mogą z czasem ulegać utlenieniu, ale póki co naprawione przeze mnie pady działają bardzo dobrze.


Kod:
#include <avr\io.h>              // Most basic include files
#include <avr\interrupt.h>       // Add the necessary ones

#include <util\delay.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "e:\Pulpit\projekty\elektronika\Atmega - mikrokontrolery\!programy\prog-c\misc2.h"

#define PEG_CLK  D2
#define PEG_STRB D3
#define PEG_DATA D4

#define PEG_CLK_INT INT0_vect
#define PEG_STRB_INT INT1_vect

//uncomment one of the models bellow
#define PAD_BONE
//#define PAD_QUICKSHOOT
//#define PAD_IQ502

#ifdef PAD_QUICKSHOOT
#define BTN_DOWN    C0
#define BTN_LEFT    B5
#define BTN_SELECT  C2
#define BTN_START   C3
#define BTN_A       C5
#define BTN_TURBOA  D0
#define BTN_UP      B4
#define BTN_RIGHT   C1
#define BTN_TURBOB  D1
#define BTN_B       C4
#endif

#ifdef PAD_BONE
#define BTN_DOWN    C0
#define BTN_LEFT    C1
#define BTN_SELECT  C2
#define BTN_START   C3
#define BTN_A       C4
#define BTN_TURBOA  C5
#define BTN_UP      B4
#define BTN_RIGHT   B5
#define BTN_TURBOB  D0
#define BTN_B       D1
#endif

#ifdef PAD_IQ502
#define BTN_DOWN    C0
#define BTN_LEFT    B5
#define BTN_SELECT  C3
#define BTN_START   C2
#define BTN_A       D0
#define BTN_TURBOA  D1
#define BTN_UP      B4
#define BTN_RIGHT   C1
#define BTN_TURBOB  C4
#define BTN_B       C5
#endif

void initialize_pins(void) {
as_input(PEG_CLK, PULLUP_ON);
as_input(PEG_STRB, PULLUP_ON);
as_output(PEG_DATA);
as_input(BTN_DOWN, PULLUP_ON);
as_input(BTN_LEFT, PULLUP_ON);
as_input(BTN_SELECT, PULLUP_ON);
as_input(BTN_START, PULLUP_ON);
as_input(BTN_A, PULLUP_ON);
as_input(BTN_TURBOA, PULLUP_ON);
as_input(BTN_UP, PULLUP_ON);
as_input(BTN_RIGHT, PULLUP_ON);
as_input(BTN_TURBOB, PULLUP_ON);
as_input(BTN_B, PULLUP_ON);
}

volatile uint8_t clk_cnt = 0;
volatile uint8_t turboval = 0;

//A, B, SELECT, START, UP, DOWN, LEFT, RIGHT

ISR(PEG_STRB_INT) {
out(PEG_DATA, in(BTN_TURBOA) == 0 ? turboval : in(BTN_A));
clk_cnt = 0;
}

ISR(PEG_CLK_INT) {
switch (clk_cnt) {
case 0:
out(PEG_DATA, in(BTN_TURBOB) == 0 ? turboval : in(BTN_B));
break;
case 1:
out(PEG_DATA, in(BTN_SELECT));
break;
case 2:
out(PEG_DATA, in(BTN_START));
break;
case 3:
out(PEG_DATA, in(BTN_UP));
break;
case 4:
out(PEG_DATA, in(BTN_DOWN));
break;
case 5:
out(PEG_DATA, in(BTN_LEFT));
break;
case 6:
out(PEG_DATA, in(BTN_RIGHT));
break;
default:
out(PEG_DATA, 1);
}
if (clk_cnt < 8) {
clk_cnt++;
}
}

int main(void) {
initialize_pins();
//ISC11=1, ISC10=1 The rising edge of INT1 generates an interrupt request
sbi(MCUCR, ISC11);
sbi(MCUCR, ISC10);

//ISC01=1, ISC00=1 The rising edge of INT0 generates an interrupt request
sbi(MCUCR, ISC01);
sbi(MCUCR, ISC00);

//INT0: External Interrupt Request 0 Enable
sbi(GICR, INT0);

//INT1: External Interrupt Request 1 Enable
sbi(GICR, INT1);

sei();

while (1) {
//you can personalize the delay of TURBO buton if you wish
_delay_ms(100);
turboval = ~turboval;
}
}
« Ostatnia zmiana: 07.07.2016, 21:46:54 wysłane przez krzysiobal » Zapisane
Pegasus Gry - forum Pegasusa i gier na Pegasusa
« : 07.07.2016, 21:34:04 »

 Zapisane
Mcin
Twój Moderator
Moderator Globalny
Stały bywalec PG
*****
Wiadomości: 2776



Zobacz profil
« Odpowiedz #1 : 09.07.2016, 15:09:02 »

Mnóstwo ścisłych, technicznych informacji.
Działa? Mrugnięcie
Zapisane
caspcop
Użytkownik
*
Wiadomości: 74



Zobacz profil
« Odpowiedz #2 : 09.07.2016, 16:22:32 »

#include "e:\Pulpit\projekty\elektronika\Atmega - mikrokontrolery\!programy\prog-c\misc2.h"

Dla mnie ten include wygrywa wszystko  DuĹźy uśmiech

A jeszcze z innej beczki, gdzie można dostać takie świetne kable do padów i co to za wtyczki? Chichot
« Ostatnia zmiana: 09.07.2016, 16:24:46 wysłane przez caspcop » Zapisane
krzysiobal
Aktywny użytkownik
***
Wiadomości: 225


Naprawie pegasusa każdemu!


Zobacz profil
« Odpowiedz #3 : 10.07.2016, 03:26:47 »

Chyba najtaniej taki kabel można kupić tu: http://allegro.pl/kabel-4-zyly-ekran-okragly-na-metry-0594-i4959404599.html (sprzedający barcom_pl). Kiedyś sprzedawał na wolumenie, ale teraz się wyprowadził.

Co do wtyczek to polecam kupić żeńską DB9/DB16 i wywalić obudowę i metalową część, a zostawić sam plastik, po czym skleić go termoglutem aby się nie rozpadł na dwie części. Idealnie wchodzi w nienaturalnie wgłębione gniazdo pegasusa.
Zapisane
sebolpittbull
Nowy użytkownik
*
Wiadomości: 4


Zobacz profil
« Odpowiedz #4 : 01.05.2018, 19:06:27 »

Ile kosztuje u ciebie taki zestaw naprawczy?
Zapisane
krzysiobal
Aktywny użytkownik
***
Wiadomości: 225


Naprawie pegasusa każdemu!


Zobacz profil
« Odpowiedz #5 : 01.05.2018, 20:16:05 »

17zł + wysyłka (sama płytka z wlutowanymi elementami, bez wtyczki i kabla).
Jeśli potrzeba z wtyczką i kablem to 22zł.

Kabla który polecałem post wyżej jednak nie polecam - w egzemplarzu który dostąłem jedna z żył miała zwarcie z ekranem. Natomiast na wolumenie trafiłem niezły kabel, 9 żyłowy a bardziej elastyczny niż niejeden standardowy w padach.
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
Sitemap
pegasus