[#1] Częstotliwość autofire w prawdziwym joystickiem Quickshot
Czy ktoś mógłby wkleić częstotliwość autofire w prawdziwym joysticku Quickshot, jakimkolwiek?

Zaprogramowałem sobie na arduino joystick z autofire do emulatora tylko muszę dobrać częstotliwość autofire. Chciałbym aby była podobna jak w prawdziwym Quickshocie.
[#2] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #1

Nie wiem jak jest w oryginalnych joystickach Quickshot, ale jak programowałem (S)NESctrl, to doświadczalnie sprawdzałem w różnych grach jakie częstotliwości dobrze działają, i po wielu próbach ustaliłem sobie optymalnie na około 15Hz (tzn. co 15Hz zmieniam stan na przeciwny). Testowałem w bardzo wielu grach na Amidze i na Atari i działa dobrze.

Ostatnia aktualizacja: 08.12.2019 18:06:08 przez Mq
[#3] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@Mq, post #2

wielkie dzięki! tak dla pewności: strzał jest oddawany 15 razy na sekundę, tak?
[#4] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #3

15 razy na sekundę zmienia się stan przycisku, z on na off, czyli oddaje strzał 7,5 raza na sekundę.
[#5] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@panti1801, post #4

Tak, około 7,5 raza na sekundę. Po prostu robiłem to przerwaniem timera w Attiny, a przerwanie to ustawiłem tak, aby odpalało się z częstotliwością około 15Hz. Piszę około, ponieważ mikrokontroler działał u mnie w oparciu o wewnętrzny oscylator, który nie jest dokładny i różni się minimalnie w każdym egzemplarzu mikrokontrolera. Poza tym dzielniki w mikrokontrolerze też po podzieleniu częstotliwości dawały jakieś tam ułamki, więc tak idealnie dokładnie nie wiadomo.
Natomiast w procedurze wywoływanej przerwaniem miałem ustawione zmienianie bitu na przeciwny, więc wynika z tego częstotliwość "strzału" około 7,5Hz.
[#6] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@Mq, post #5

a czy wkleiłbyś gdzieś ten kod do attiny?
[wyróżniony] [#7] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #6

Pokażę fragmenty dotyczące autofire, bo cały projekt (S)NESctrl nie jest opensource.
Fragmenty kodu w języku C.

W (S)NESctrl używam Attiny2313 i taktuję go wewnętrznym oscylatorem 8MHz z dzielnikiem przez 8, czyli mam częstotliwość 1MHz

Timer1 dla autofire ustawiam tak:
TCCR1B |= (1 << WGM12); //ustaw timer w tryb CTC
OCR1A = 1040; //ustaw do ilu liczy timer: 1MHz/64=15625(to by dało 1Hz, więc 1040 daje około 15Hz)
TCCR1B |= ((1 << CS10) | (1 << CS11)); //CS10 włącza timer, CS11 ustawia preskaler na Fcpu/64
TIMSK |= (1 << OCIE1A); //zezwolenie na przerwania dla CTC timer1
sei(); //zezwolenie globalne na przerwania

Następnie robię sobie zmienną, w której mam zapisany jeden bit i zmieniam go na przeciwny w procedurze obsługi przerwania pochodzącego od timera1.
Czyli na początku programu deklaracja zmiennej:
unsigned char Autofire = 0;

I procedura obsługi przerwania:
ISR(TIMER1_COMPA_vect) //przerwanie compare timera1
{
Autofire ^= 1;
}

Po takich zabiegach masz w głównym programie zmienną Autofire, która przyjmuje przemiennie wartość 0 i 1 z odpowiednią częstotliwością.
Dalej tą zmienną już sobie wykorzystujesz jak chcesz, możesz ją przypisywać do jakiegoś portu, albo co tam chcesz. Ja u siebie w zależności od wybranych trybów pracy wykorzystuję tą zmienną do przeliczania różnych funkcji, składam całe bajty z kerunkami joyów, autofire itd i wynik wystawiam później na cały port od razu, ale (S)NESctrl, to trochę bardziej skomplikowane urządzenie, a autofire, to tylko jedna z małych dodatkowych opcji.
Powodzenia w eksperymentach
[#8] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #6

Tu jest do Arduino.
[#9] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #6

Zainteresuj się starą poczciwą kostką NE555 i zrób na niej generator, bo na tym były te autofire najczęściej robione. Wstawisz sobie potencjometr do regulacji częstotliwości i będziesz zadowolony.
[#10] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@Mq, post #7

Wielkie dzięki. Teraz wiem jak to zrobić porządnie. Zrobiłem sobie joystick do fs-uae i vice na usb a nie programowałem nigdy w C++ i nie miałem styczności z arduino.

Znalazłem bibliotekę TimerOne i teraz autofire to funkcja uruchamiana przerwaniem która na przemian zmienia wartość zmiennej. Ten link do EAB to jest właśnie mój joy.
[#11] Re: Częstotliwość autofire w prawdziwym joystickiem Quickshot

@ayran, post #10

Nie ma sprawy, cieszę się że się przydało. W zasadzie napisałem Ci to tak dość szczegółowo z komentarzami, bo co prawda robisz to na arduino i na innym mikrokontrolerze, ale z tej samej rodziny, więc zasada będzie taka sama, a nawet może tam się te symbole różne będą częściowo zgadzały i podobnie nazywały, to załapiesz o co chodzi łatwo pisząc pod arduino.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem