logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[DIY] Jak zbudować joystick do NES/Pegasus z ATMEGA8 - nie działa

Seabool 26 Lut 2018 21:14 1416 28
  • #1 17066345
    Seabool
    Poziom 6  
    Witam. Od paru dni próbuję bezskutecznie zbudować joystick do konsoli NES/Pegasus. Niestety nie mogę zlokalizować problemu, dlaczego ów urządzenie nie działa.

    Kontroler dla NES - opis: https://tresi.github.io/nes/

    Porty B służą jako wejścia dla microswitch'y, PC0 to wyjście DATA, a STROBE i CLK działają jako przerwania, gdy następuje przejście 0 -> 1.
    Czy problemem jest sam kod (ustawienia przerwań?), czy może drgania styków przycisków (czy w oryginalnych padach, korzystających z gumek nie było drgań?)
    Męczę się z tym już parę dni i z racji tego, że jestem początkujący, efekty są dość marne. Nie liczę na gotowy kod, a na wytłumaczenie co robię nie tak. Z góry dziękuję oraz pozdrawiam :D

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 17066375
    excray
    Poziom 41  
    Cytat:
    PORTC &= (0 << PC0);

    A co to za konstrukcja? Przesuwanie zera w ciągu zer? Jak chcesz wyzerować bit to rób to tak:
    PORTC &= ~(1<<bit);
    Poza tym:
    - źle ustawiasz MCUCR
    - brak aktywacji przerwań w GICR. Zamiast tego grzebiesz w nieistniejącym rejestrze (Atmega8) GIMSK.
    - brakuje w main zapętlenia przez co program zawiesza przerwania i sam zapętla się.
  • #3 17066543
    Seabool
    Poziom 6  
    Dzięki za szybką odpowiedź. Poprawiłem kod, ale myślę że mam problem z prawidłowym ustawieniem MCUCR. Czy wszystko w tym rejestrze dobrze ustawiam?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #4 17066562
    excray
    Poziom 41  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #5 17068850
    linuxtorpeda
    Poziom 26  
    @Seabool, może niezwiązane bezpośrednio z twoim problemem, ale w temacie: https://github.com/szymor/wirelessness

    Programowa emulacja działania rejestru przesuwnego (a takim jest pad do Pegasusa dla konsoli) może się okazać zawodna i podatna na błędy ze względu na szybkość działania mikrokontrolera, szczególnie jeśli będzie on robił w międzyczasie inne rzeczy związane z działaniem pada. Ja bym się zastanowił nad sprzętowym rozwiązaniem (np. dodał zewnętrzny rejestr przesuwny sterowany z ATmegi bądź wykorzystał wbudowany SPI).

    Seabool napisał:
    czy w oryginalnych padach, korzystających z gumek nie było drgań?

    Owszem, nie było.
  • #6 17068864
    excray
    Poziom 41  
    linuxtorpeda napisał:
    Ja bym się zastanowił nad sprzętowym rozwiązaniem (np. dodał zewnętrzny rejestr przesuwny sterowany z ATmegi bądź wykorzystał wbudowany SPI).

    To może lepiej od razu dać CD4021. Tylko co wtedy będzie robił mikrokontroler? Może będzie migać diodą.
  • Pomocny post
    #7 17068866
    linuxtorpeda
    Poziom 26  
    excray napisał:
    A co to za konstrukcja? Przesuwanie zera w ciągu zer? Jak chcesz wyzerować bit to rób to tak:
    PORTC &= ~(1<<bit);


    Ew. tak:
    PORTC &= ~_BV(bit);


    Dodano po 2 [minuty]:

    excray napisał:
    linuxtorpeda napisał:
    Ja bym się zastanowił nad sprzętowym rozwiązaniem (np. dodał zewnętrzny rejestr przesuwny sterowany z ATmegi bądź wykorzystał wbudowany SPI).

    To może lepiej od razu dać CD4021. Tylko co wtedy będzie robił mikrokontroler? Może będzie migać diodą.


    Jeśli to ma być najzwyklejszy pad, to może po prostu wyrzucić uC i zostawić sam rejestr przesuwny? Poza tym pozostaje jeszcze wariant z SPI.
  • #8 17069566
    Seabool
    Poziom 6  
    Pady z Pegasusa miały jeszcze przyciski Turbo, których jeszcze nie zaimplementowałem w samym kodzie. Widziałem podobny temat, w którym wykorzystano do ich obsługi NE555. Pada, który wykorzystuje CD4021 już stworzyłem, jednak czym jest życie bez zdobywania wiedzy. Tworząc projekt z wykorzystaniem ATmegi właśnie z zdobywam wiedzę, mimo że jest to mało praktyczne rozwiązanie, tak jak kolega linuxtorpeda wspomniał ;)

    Wracając do pada, nadal mam z nim problem. Nie reaguje na przyciski. Jedynie gdy nacisnę pierwszy przycisk PB0 to działa jako GÓRA, reszta nic. Próbowałem już wielu kombinacji i zmian w kodzie, ale nic nie pomogło :(
  • #10 17077034
    Seabool
    Poziom 6  
    Niestety nie mam oscyloskopu, żeby móc sprawdzić odpowiednie linie. Czy do tego celu wystarczyłby analizator stanów logicznych?
  • #11 17077611
    excray
    Poziom 41  
    Analizator wystarczy w zupełności.
  • #12 17078773
    ghost2000
    Poziom 18  
    excray napisał:
    Analizator wystarczy w zupełności.

    O ile masz czyste poziomy logiczne. Analizator nie pokaże czasu narastania sygnału, poziomów z zakresu zabronionego (np zwarte wyjścia bramek) itp.

    I tak dobrze, ze masz analizator. Są "fachowcy Arduinowcy" co biorą się za budowę sprzętu mając tylko mierny miernik za 15zł.
    Co do oscyloskopu, to ceny nie sa powalające. Dosyć dobry cyfrowy 2x25MHz kosztuje 900zł. Jak nie chcesz tygodniami szukać błędu, to kup oscyloskop. Nawet jednokanałowy za 500zł wystarczy. Czasem wystarczy zabawka za 100..200zł. Lepszy rydz niz nic.

    Dodano po 2 [godziny] 54 [minuty]:

    excray napisał:
    Analizator wystarczy w zupełności.

    O ile masz czyste poziomy logiczne. Analizator nie pokaże czasu narastania sygnału, poziomów z zakresu zabronionego (np zwarte wyjścia bramek) itp.
  • #13 17082461
    Seabool
    Poziom 6  
    Idąc za Twoją radą @ghost2000 zakupiłem tanio Unitrę OS-301. Myślę, że na moje początki wystarczy. W czwartek przyjdzie więc wtedy posprawdzam przebiegi na poszczególnych liniach i zobaczymy co z tego wyjdzie.
  • #14 17082508
    ghost2000
    Poziom 18  
    Seabool napisał:
    zakupiłem tanio Unitrę OS-301

    Cudo to to nie jest, ale na tej klasie sprzęcie pracowałem do ok 2005 roku. Dorobiłem sobie przystawkę 4-kanałową (projekt z PE), bo jeden kanał to w cyfrówce trochę za mało. 12MHz do AVR wystarczy.
  • #16 17082772
    ghost2000
    Poziom 18  
    linuxtorpeda napisał:
    Ja bym kupił klon Saleae za 30 zł :)

    A na SaleAE zobaczysz czasy narastania sygnału, poziomy zabronione? Mówimy o wersji za 30zł.
    SaleAE i oscyloskop uzupełniają się. Podobnie jak miernik uniwersalny. Jedno urzadzenie nie wystarczy, w warsztacie ma się kilka urządzeń. Ja mam jeszcze miernik wielokanałowy, częstościomierz. Naturalnie na start nie potrzeba wszystkiego. Wiele osó nie potrzebuje częstosciomierza, wobulatora.
  • #17 17082914
    excray
    Poziom 41  
    Upewnij się czy sygnały Latch i Clk są dobrze podpięte do mikrokontrolera. Celem testu możesz zamienić je miejscami.
  • #18 17082927
    ghost2000
    Poziom 18  
    excray napisał:
    Upewnij się czy sygnały Latch i Clk są dobrze podpięte do mikrokontrolera. Celem testu możesz zamienić je miejscami.

    Mając oscyloskop łatwo odróżnisz linię danych od zegarowej. Dowiesz sie tez jaka jest czestotliwość zegarowa i czy AVR ma szanse się wyrobić. Nie myślałeś o wykorzystaniu SPI w roli rejestru jak to juz było proponowane wcześniej? SPI może działać z z Fclk/2, programowo wyciągniesz kilkadziesiat kHz.
  • #19 17082932
    excray
    Poziom 41  
    ghost2000 napisał:
    A na SaleAE zobaczysz czasy narastania sygnału, poziomy zabronione? Mówimy o wersji za 30zł.

    A po co mu to potrzbne? Jakiego czasu narastania spodziewasz się po wyjściu Push-pull mikrokontrolera? Wszystko co go interesuje zobaczy na analizatorze a nawet więcej zobaczy na tym analizatorze niż na oscyloskopie sprzed 30 lat. Z pewnością na takim muzealnym oscyloskopie co ma pasmo 12MHz zobaczy czas narastania sygnału. Trzymajcie mnie bo padnę ze śmiechu.
  • #20 17082943
    ghost2000
    Poziom 18  
    excray napisał:
    ghost2000 napisał:
    A na SaleAE zobaczysz czasy narastania sygnału, poziomy zabronione? Mówimy o wersji za 30zł.

    A po co mu to potrzbene? Jakiego czasu narastania spodziewasz się po wyjściu Push-pull mikrokontrolera? Wszystko co go interesuje zobaczy na analizatorze a nawet więcej zobaczy na tym analizatorze niż na oscyloskopie sprzed 30 lat. Z pewnością na takim muzealnym oscyloskopie co ma pasmo 12MHz zobaczy czas narastania sygnału. Trzymajcie mnie bo padnę ze śmiechu.

    Stan zabroniony też zobaczy na SaleAE?
    Co do czasu narastania, podłącz długi kabel o dużej pojemności to zmienisz zdanie.

    Czy na SaleAE mozna oglądać przebiegi on-line?

    Używam SaleAE i oscyloskopu. Wiele razy SaleAE "oszukiwał", oscyloskop rozwiał wszelkie wątpliwości. Jeden przypadek, który utkwił mi w pamięci, układ był zasilany pasożytniczo. SaleAE pokazywał "piękne" przebiegi, oscyloskop juz nie. Znalazłby kolega układ zasilany pasożytniczo przy użyciu SaleAE? W jakim czasie? Ile to będzie trwało z uzyciem oscyloskopu nawet z przed 30 lat?

    12MHz to mało, a ile wyciągnie SPI w AVR?
  • #21 17082955
    excray
    Poziom 41  
    ghost2000 napisał:
    Stan zabroniony też zobaczy na SaleAE?

    Wszystkie stany zobaczy: zabroniony, błogosławiony i duchowny. Wystarczy spojrzeć w kod, żeby zobaczyć co się dzieje z wejściem/wyjściem. Wejścia masz podciągane a wyjście jest typu push-pull. Z NESa też masz zapewne sygnał typu push-pull. Wystarczy spojrzeć jak widzi to analizator bo na 99.99% tak samo widzi to mikrokontroler. Na początek trzeba sprawdzać podstawy - czy przebiegi są zgodne z tymi założonymi a nie doszukiwać się wydumanych problemów. Te wydumane i wysublimowane zostaw sobie na sam koniec jak już wszystkie racjonalne wytłumaczenia się skończą.
  • #22 17082962
    ghost2000
    Poziom 18  
    excray napisał:
    Wystarczy spojrzeć jak widzi to analizator bo na 99.99% tak samo widzi to mikrokontroler.

    O ile mikrokontroler jest zasilany, tak jak SaleAE, z 3,3V a nie 5V.

    excray napisał:

    Wszystkie stany zobaczy: zabroniony

    To proszę pokazać, jak SaleAE pokazuje stan zabroniony.
  • #23 17082974
    excray
    Poziom 41  
    ghost2000 napisał:
    To proszę pokazać, jak SaleAE pokazuje stan zabroniony.

    Sprawdź może jeszcze czy przerwa energetyczna półprzewodnika ma odpowiednią wartość. Taaa, zdecydowanie to są pierwsze rzeczy do sprawdzenia - przerwy energetyczne i stany zabronione. Najbardziej prawdopodobne przyczyny. Ewentualnie jeszcze wada fabryczna mikrokontrolera.
  • #24 17082979
    ghost2000
    Poziom 18  
    excray napisał:
    Te wydumane i wysublimowane zostaw sobie na sam koniec jak już wszystkie racjonalne wytłumaczenia się skończą.

    Stan zabroniony to wysublimowany problem? To częsty przypadek, gdy wyjścia bramek sa zwarte lub dwa układy próbują nadawać na magistrali 3-stanowej.

    Dodano po 2 [minuty]:

    excray napisał:
    ghost2000 napisał:
    To proszę pokazać, jak SaleAE pokazuje stan zabroniony.

    Sprawdź może jeszcze czy przerwa energetyczna półprzewodnika ma odpowiednią wartość. Taaa, zdecydowanie to są pierwsze rzeczy do sprawdzenia - przerwy energetyczne i stany zabronione. Najbardziej prawdopodobne przyczyny. Ewentualnie jeszcze wada fabryczna mikrokontrolera.

    Czyżby zabrakło rzeczowych argumentów?
  • #25 17082994
    excray
    Poziom 41  
    ghost2000 napisał:
    Czyżby zabrakło rzeczowych argumentów?

    Raczej nie docierają. Ale to nie mój problem. Szukaj sobie tam czego chcesz - nawet stanów zabronionych, czasów narastania i magistrali 3-stanowej.
  • #26 17084771
    linuxtorpeda
    Poziom 26  
    ghost2000 napisał:
    A na SaleAE zobaczysz czasy narastania sygnału, poziomy zabronione? Mówimy o wersji za 30zł.
    SaleAE i oscyloskop uzupełniają się. Podobnie jak miernik uniwersalny. Jedno urzadzenie nie wystarczy, w warsztacie ma się kilka urządzeń. Ja mam jeszcze miernik wielokanałowy, częstościomierz. Naturalnie na start nie potrzeba wszystkiego. Wiele osó nie potrzebuje częstosciomierza, wobulatora.


    Owszem, różne urządzenia się ze sobą uzupełniają, nie zobaczysz czasów narastania sygnałów ani innych analogowych parametrów sygnału na tanim analizatorze logicznym. Nie zmienia to jednak faktu, że kupowanie oscyloskopu na potrzeby tego jednego projektu to gruba przesada - to są trzy linie sygnałowe między Pegasusem a mikroprocesorem, połączone jeden do jednego, czego chcesz tu szukać? Ewentualnie pomyłki w połączeniu (np. zwarcie między liniami) można sprawdzić za pomocą miernika za kilka zł. Drogie narzędzie nie uczyni z nikogo eksperta.
  • #27 17084917
    Seabool
    Poziom 6  
    Panowie, nie sprzeczajcie się o tak błahą sprawę. Ja i tak połowy z tych pojęć w życiu na oczy nie widziałem. Dopiero po doczytaniu z paru źródeł mniej więcej wiem o co Wam chodzi. Wybrałem tani oscyloskop, żeby chociaż trochę zaznajomić z tym sprzętem, a Pegasus to według mnie świetny obiekt do badań i zdobywania wiedzy.
  • #28 17084993
    ghost2000
    Poziom 18  
    linuxtorpeda napisał:
    Ewentualnie pomyłki w połączeniu (np. zwarcie między liniami) można sprawdzić za pomocą miernika za kilka zł.

    Gorzej, jak zwarcie wynika ze złej konfiguracji uC i pojawia się na chwile w czasie transmisji. W tym przypadku, linie cały czas mają jeden kierunek, więc problemu nie ma, ale miałem przypadek na SPI 3-przewodowym, gdzie w złym momencie master zmieniał kierunek i była kolizja danych z masterem. Wtedy pojawiał się stan trzeci na którki czas. Tego miernikiem nie da się znaleźć.

    Na Elektrodzie spotykałem tematy, gdzie problemem okazał się stabilizator. Napięcie na wejściu było za niskie i tętnienia przenosiły się na wyjście. Tego tez nie da się zobaczyć miernikiem. Ewentualnie można go ustawić na pomiar TRMS+DC ale tego w mierniku za 15zł nie ma. Można próbować na zakresie AC ale pewność będzie się miało gdy zobaczy się jakość zasilania oscyloskopem. To samo dotyczy stabilizatorów impulsowych, oscyloskop pokaże czy przypadkiem kondensatory filtrujące nie sa kiepskie (duże ESR).

    AVR to nie RF czy ARM. Oscyloskop 10MHz wystarczy. Naturalnie dobrze aby był z pamięcią, itd, itp.
  • #29 17137187
    phanick
    Poziom 28  
    Mikrokontroler do obsługi PADA od pegasusa da się zrobić (sam zrobiłem zestaw naprawczy do pada w oparciu o atmegę 8). Problemem jest to, że po narastającym zboczu CLK należy maksymalnie w ciągu 250 ns wystawić kolejny bit danych na linię data.

    Jeśli linię CLK masz podpiętą do przerwania, to weź pod uwagę, że odstęp pomiędzy zboczem, a wejściem do procedury przerwania ileś trwa (mikrokontroler musi odłożyć coś na stos), a czas Twojej procedury też pewnie ileś trwa.

    Nie wiem jakim zegarem taktujesz mikrokontroler, ale bez zewnętrznego kwarcu maksymalnie to może być 8 MHz, a wtedy jedna instrukcja assemblera wykonuje się przez 125 ns !!!

    Najlepiej jest więc czekać na to zbocze nie w przerwaniu, a po prostu w pętli.
REKLAMA