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

gamepad usb atmega8, niezrozumiałe błędy przy przerabianiu kodu c+

kokodin 07 Mar 2012 18:47 1290 1
REKLAMA
  • #1 10647100
    kokodin
    Poziom 21  
    Witam. Postanowiłem zbudować kolejny gamepad na mikrokontrolerze atmega, tym razem miałby on posiadać 10 przycisków.
    Ze strony http://www.raphnet.net/electronique/usb_game12/index_en.php pobrałem więc kod źródłowy 8 przyciskowego gamepada i zacząłem go przerabiać po swojemu.
    Najważniejsze zmiany jakich dokonałem to
    W pliku Twelve.c:
    Dodałem jeden bajt danych do tablicy przechowującej binarne wartości przycisków poprzez zwiększenie wartości report_size.
    Dodałem pinD aby móc odczytać z nich przyciski (pulupy były podpięte w innej części kodu)
    Oraz dopasowałem wartości poszczególnych pinow by aktywowały odpowiednie przyciski (w tym 2 dodatkowe) w windowsie.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W pliku snes_describtor.c zmieniłem wszystkie wartości odnoszące się do ośmiu przycisków na 10 lub więcej.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Po tych zmianach i wielu innych nieudanych próbach , gamepad teoretycznie działa, nie wiem jednak jakim cudem. Najdziwniejsze jest to, że w descriptorach kod kompiluje się przy dowolnych wartościach, ale dla 10 przycisków urządzenie usb działa w systemie tylko z wartością 11 w linijce REPORT_SIZE (przy ośmiu przyciskach było to 8 w innym projekcie przy 13 jest tam 13)
    Krzyżyk działa jeszcze dziwniej. Współrzędna x jest odczytywana prawidłowo z pierwszej pozycji tablicy z użyciem 8 bitów. pozycja y jest odczytywana z 4 bitów umieszczonych w dwóch kolejnych pozycjach tablict po 2 bity (co daje tylko 16 pozycji kursora w pionie) z pominięciem 6 bitów w drugiej pozycji tablicy. Przyciski są odczytywane z pozostałych bitów bez zakłóceń.
    W sumie gamepad działał by prawidłowo, gdyż nie używam sterowania analogowego, ale nie rozumiem tego zachowania i nie daje mi to spokoju.
    Wczoraj siedziałem do 3:00 nad ranem i chyba tylko sprawdzałem żywotność pamięci flash mikrokontrolera :] Ale to niestety mój limit znajomości c+

    W załączniku pełny kod moich wypocin.
  • REKLAMA
  • #2 10653166
    kokodin
    Poziom 21  
    Problem rozwiązany, winny był kod describtor. Przy powiększeniu długości ciągu danych, zapomniałem określić co komputer ma robić z "pustymi" bitami. Dlatego przy prawidłowej pracy kursora, komputer zgłaszał błąd urządzenia (komunikat usb hid był dłuższy niż deklarowany) lub kursor działał nieprawidłowo przy sztucznie wydłużonym komunikacie.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Oraz prawidłowy kod kursora
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA