Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zestaw do naprawy padów do Pegasusa

phanick 07 Jul 2016 21:47 10566 13
Altium Designer Computer Controls
  • Zestaw do naprawy padów do Pegasusa

    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
    Zestaw do naprawy padów do Pegasusa
    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ć.
    Zestaw do naprawy padów do Pegasusa

    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ść`:
    Zestaw do naprawy padów do Pegasusa Zestaw do naprawy padów do Pegasusa

    Pad typu `quickshoot`:
    Zestaw do naprawy padów do Pegasusa Zestaw do naprawy padów do Pegasusa

    Pad typu `iq502`:
    Zestaw do naprawy padów do Pegasusa Zestaw do naprawy padów do Pegasusa

    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.


    Code:

    #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;
       }
    }

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    phanick
    Level 28  
    Offline 
    Has specialization in: energetyk najwyższych napięć
    phanick wrote 2490 posts with rating 2566, helped 57 times. Live in city Warszawa. Been with us since 2007 year.
  • Altium Designer Computer Controls
  • #2
    1996arek
    Level 20  
    Pisałeś o braku cynowania miejsc na przyciski. Czemu nie pocynowałeś ich np. plecionką lutowniczą? Niedługo przestaną działać.
  • #3
    CMS
    Administrator of HydePark
    Spryskaj całą płytkę "plastikiem 70" a następnie pobiel styki przy pomocy plecionki i będzie działać prawie wiecznie :)

    Pozdrawiam.
    CMS
  • #4
    phanick
    Level 28  
    Cynowanie za pomocą plecionki daję niezbyt równą powierzchnie (chyba, żeby bardzo starannie zbierać nadmiar cyny). Podobne problemy mam z cynowaniem konektorów do kardridży. Jakiś czas temu kupiłem niskotopliwy stop Lichtenberga, jak kupię jakąś łopatkę do jego nanoszenia to sprawdzę, jak będzie się spisywał w tej roli.
  • Altium Designer Computer Controls
  • #5
    CMS
    Administrator of HydePark
    phanick wrote:
    Cynowanie za pomocą plecionki daję niezbyt równą powierzchnie


    Przy takich rozmiarach, nie widzę żadnego problemu. Jak coś to podrzuć, odbiorę sobie ten czteropak :P.

    phanick wrote:
    niskotopliwy stop Lichtenberga


    Temat coś podupadł, chyba "rynek się nasycił" :)

    phanick wrote:
    to sprawdzę, jak będzie się spisywał w tej roli


    Myślę, że tak samo jak umiejętnie użyta plecionka. Tyle, że w przypadku tak małych powierzchni, wg mnie, szkoda zachodu. Zanim się woda zagotuje, zdążę już pobielić kilka padów (oczywiście mówię tylko o polach stykowych).


    Pozdrawiam.
    CMS
  • #6
    1996arek
    Level 20  
    phanick wrote:
    Cynowanie za pomocą plecionki daję niezbyt równą powierzchnie (chyba, żeby bardzo starannie zbierać nadmiar cyny). Podobne problemy mam z cynowaniem konektorów do kardridży. Jakiś czas temu kupiłem niskotopliwy stop Lichtenberga, jak kupię jakąś łopatkę do jego nanoszenia to sprawdzę, jak będzie się spisywał w tej roli.


    Tak. Ale jeśli się postrasz to wyjdzie równe. Już kilka całych płytek mam tak zrobionych. Stop Lichtenberga też chcę kupić. Ile dałeś i za ile gramów? Łopatkę kup sylikonową, tak jak robi tutaj
  • #8
    novcio
    Level 13  
    Doominus wrote:
    Pytanie laika.

    Nie lepiej byłoby anodować ?

    Wg mnie miedzi nie da się anodować:) Ten proces stosuje się głownie do aluminium.
  • #9
    MAREK MRK
    Level 18  
    Można by posrebrzyć. Nie pamiętam dokładnie, ale kilka lat temu posrebrzałem podkładki miedziane do wzmacniacza i do dziś te które mi zostały są nieutlenione. Z tego co pamiętam to tlenek srebra II + woda demineralizowana (ale mogę się mylić). Musiał bym zajrzeć do starej książki "Galwanotechnika Domowa".
  • #10
    CMS
    Administrator of HydePark
    Doominus wrote:
    Nie lepiej byłoby anodować ?


    Anodowanie to elektroniczne (elektryczne) oksydowanie, czyli wytworzenie na powierzchni warstwy tlenku... Dalej odpowiedz sobie sam.

    novcio wrote:
    Wg mnie miedzi nie da się anodować:) Ten proces stosuje się głownie do aluminium.


    Można oksydować chemicznie. Ale w tym wypadku... Jak Wyżej.

    MAREK MRK wrote:
    Można by posrebrzyć


    Bez sensu. Srebro pokrywa się tlenkiem (np. czarny nalot na starego typu konektorach od głośników), jeszcze "chętniej" niż miedź.

    Można oczywiście pozłocić, nawet w domu, ale do tego potrzeba złota (3-5g na litr roztworu), oraz silnego kwasu i ługu.
    Cynowanie pozostaje najprostszym sposobem i ma "długi termin przydatności".

    Pozdrawiam.
    CMS
  • #11
    Doominus
    Level 34  
    novcio wrote:
    Doominus wrote:
    Pytanie laika.

    Nie lepiej byłoby anodować ?

    Wg mnie miedzi nie da się anodować:) Ten proces stosuje się głownie do aluminium.


    Kurde galwanizacja.... aha problem taki że wszystkie ścieżki trzeba by ze sobą połączyć. Więc pewnie więcej roboty niż przy smarowaniu stopem.
  • #12
    Freddy
    Level 43  
    Doominus wrote:
    Nie lepiej byłoby anodować ?
    Anodowanie, to inaczej Eloksalacja, czyli oksydacja aluminium. Chyba nie o to chodzi w temacie.
  • #13
    CMS
    Administrator of HydePark
    Skończmy już ten OffTop.
  • #14
    Tremolo
    Level 43  
    Ja podłączałem joye z commodore 64 i sterowniki klawiatur właściwie ich bebechy do odbiorników radiowego sterowania. I sterowałem każdym zestawem do pomp do betonu urządzeń przeciwwybuchowych, suwnic... Joystiki na parę milionów cykli... 100m zasięgu w terenie zabudowanym... Pograłem w Boulder Dasha przy okazji testu urządzenia...

    Co do padów to samo działo się w PSX. Tam podobno jakiś bezpiecznik padał. Kupowalem wtedy podróbke i przelutowywałem bebechy...