Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y

03 Maj 2011 23:39 4244 6
  • Poziom 9  
    Witam,

    Chciałbym zrobić sterowanie silnika krokowego za pomocą joysticka z zastosowaniem AVR32. Kupiłem joystick analogowy, za kierunek w osiach odpowiedzialne są potencjometry obrotowe (oznaczenie B100K). Napisałem mały program w assemblerze do sprawdzenia, czy joystick działa prawidłowo. Oto kod źródłowy programu:
    Code:


    .include"m32def.inc"
    .cseg
    .org 0
    .def acc=r16

    Main_0:

    ldi acc,0b00000000   ;wszystkie bity jako wejscie
    out DDRA,acc
    ldi acc,0b11111111   ;wszystkie wejscia w stanie wysokim
    out PORTA,acc
    ldi acc,0b11111111   ;wszystkie bity jako wyjscia
    out DDRB, acc
    ldi acc,0b11111111   ;wszystkie diody wylaczone
    out PORTB,acc

    Petla:

       in acc,PINA      ;odczyt stanu przyciskow
       out PortB, acc    

       rjmp petla   ;petla



    Schemat portu Gameport, wg którego podłączyłem urządzenie do mikrokontrolera na porcie A:
    [AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y

    Joystick jest podłączony do portu A AVR'a za pomocą kabelków do odpowiednich odprowadzeń, na porcie B wystawiany jest stan czytany z portu A. Port B ma podłączone diody, więc kiedy wciskam przycisk bądź wskazuje kierunek to świeci się odpowiednia dioda, wtedy wiem, że wszystko jest OK.

    Problem polega na tym, że działa tylko jeden kierunek na osi X i Y. Potencjometry podłączone są następująco:

    [AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y

    Chciałbym, żeby po wskazaniu kierunku X+, X-, Y+ i Y- zaświeciła się odpowiednia dioda. Jak już wspomniałem działa tylko jeden kierunek każdej osi, nie wiem czy to wina konstrukcji joysticka czy problem z programem.
  • Poziom 39  
    Przy takim układzie połączeń potencjometrów nic nie osiągniesz , połącz to według tego schematu
    [AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y

    Napięcie +5V weź z układu zasilania AVR-era , sygnały z potencjometrów na dwa wejścia przetworników ADC przy rozdzielczości 10-bitów pełny zakres to 1024 tak więc 512 to dokładnie środek czyli położenie neutralne . Wartości większe i mniejsze od 512 to położenia w daną stronę , proponuje zrobić pewną histerezę szczególnie dla środka lub uśrednienie kilku pomiarów . Chyba że nie chcesz ingerować w oryginalny układ połączeń w takim przypadku zrób według tego schematu
    [AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y
    Rezystory R1 / R2 dobierz sobie doświadczalnie aby osiągnąć odpowiedni zakres przestrajania , zacznij od wartości równej wartości rezystancji potencjometrów stopniowo ją zmniejszając . Prościej jednak według 1 schematu bo i tak masz +5V oraz GND na złączu joysticka , zmienisz tylko wewnętrzne połączenia .
  • Poziom 9  
    Udało się, ale nie obeszło się bez interwencji w budowie joysticka. Do środkowych nóżek potencjometrów podłączyłem +5V a pozostałe, skrajne nóżki podłączyłem na wejście AVR do portu A. Teraz w zależności od wybranego kierunku świecą odpowiednie diody na wyjściu portu B. I podłączyłem sobie jeszcze przycisk "fire", może się przyda :D

    W ogóle to te potencjometry pierwotnie były podłączone do +5V (środkowe nóżki obu potencjometrów) i do jednej skrajnej nóżki na każdym potencjometrze. Nie rozumiem jak mogło to działać (albo jak by mogło) na jednym wyprowadzeniu. Brak mi wiedzy o potencjometrach :roll: pewnie dlatego.
  • Poziom 39  
    Dla takiego badania położenia drążka wystarczą dwie krańcówki a nie potencjometr , ponadto coś tu nie pasuje :
    Cytat:
    Do środkowych nóżek potencjometrów podłączyłem +5V a pozostałe, skrajne nóżki podłączyłem na wejście AVR do portu A.

    Ciekawe jak to może Ci działać skoro wejścia masz podciągnięte do H a jedyne co zmieniasz do rezystancja pomiędzy danym wejściem a H ( +5V) aby została wykryta zmiana musi pojawić się na wejściu stan L powiedz w jaki sposób ........
    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Co do oryginalnego układu to dziwne że tego nie rozumiesz , w układzie zmieniała się rezystancja w stosunku do +5V ten sygnał trafiał do przetwornika mierzącego rezystancję lub napięcie .
  • Poziom 9  
    Joystick miał takie potencjometry:

    [AVR 32] Sterowanie joystickiem, nie działa jeden kierunek X i Y

    Ale wiem już co zrobiłem źle.

    UWAGA: Od początki joystick na makiecie był podłączony do GND a nie do Vcc. Wszędzie gdzie pisałem o +5V to było GND.
  • Poziom 39  
    Animacją którą się pochwaliłeś jest zła , skoro potencjometr ma wartość 100kΩ to połowa zakresu regulacji to 50kΩ ÷ 0kΩ a nie 100kΩ ÷ 0kΩ
    Cytat:
    UWAGA: Od początki joystick na makiecie był podłączony do GND a nie do Vcc. Wszędzie gdzie pisałem o +5V to było GND.

    To zasadnicza różnica !
  • Poziom 9  
    Zamieszczona animacja potencjometru to tylko przykład, źródło wikipedia.

    bogdan_p napisał:
    Animacją którą się pochwaliłeś jest zła , skoro potencjometr ma wartość 100kΩ to połowa zakresu regulacji to 50kΩ ÷ 0kΩ a nie 100kΩ ÷ 0kΩ
    Cytat:
    UWAGA: Od początki joystick na makiecie był podłączony do GND a nie do Vcc. Wszędzie gdzie pisałem o +5V to było GND.

    To zasadnicza różnica !


    Zdaje sobie z tego sprawę jak epicki błąd popełniłem.