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

Impulsator trochę inny niż zwykle

.3lite 15 Maj 2011 21:40 1683 4
REKLAMA
  • #1 9510071
    .3lite
    Poziom 17  
    Witam,

    posiadam impulsator dokładnie taki jak poniżej na aukcji:
    Linki zostały usunięte - zgodnie z regulaminem pkt.3.1.18 [dzimi]

    problem z nim jest taki, że (zacytuję pewną osobą z innego forum):

    "W sumie impulsator generuje przebieg w kodzie Graya, ale stany spoczynkowe to na zmianę 11 (3) i 00 (0), a w momencie przejścia generuje na zmianę 10 (2) i 01 (1)."

    I tutaj mam z nim problem, ponieważ zwykłe przerwanie i sprawdzanie w nim stanu drugiego pinu, który nie jest przerwaniem i wybranie kierunku to niestety nie przejdzie i nie przechodzi, jak do tej pory nie mogłem wpaść jakby go dobrze obsłużyć nie gubiąc przy tym żadnych impulsów - może ktoś tutaj już pisał obsługę podobnego impulsatora w języku C?

    Tutaj zamieszczam mój przykładowy kod:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 9510189
    janbernat
    Poziom 38  
    Tu:
    https://www.elektroda.pl/rtvforum/topic1881808.html
    się z tym użerałem.
    I ten impulsator ma tę właściwość że drgania styków trwają dużo dłużej niż nawet powolne przełączanie.
    Udaje się zrobić dobre sprawdzanie kierunku- ale nie ilości impulsów.
    Zawsze się coś zgubi.
    Może się to nadać do regulacji głośności- po zapisaniu poprzedniego stanu i dodawaniu/odejmowaniu nowego zliczenia.
    Niestety prawdziwy impulsator kosztuje dużo drożej albo trzeba go zrobić na transoptorach i tarczy ze szczelinami i wykonać samodzielnie.
  • REKLAMA
  • REKLAMA
  • #4 9511187
    jarekz_2
    Poziom 16  
    .3lite napisał:
    (...)posiadam impulsator dokładnie taki jak poniżej na aukcji:
    http://allegro.pl/show_item.php?item=1588306237
    problem z nim jest taki, że (zacytuję pewną osobą z innego forum):
    "W sumie impulsator generuje przebieg w kodzie Graya, ale stany spoczynkowe to na zmianę 11 (3) i 00 (0), a w momencie przejścia generuje na zmianę 10 (2) i 01 (1)."

    Ja ostatnio kupiłem te impulsatory i musiałem je obsłużyć w programie. Było z tym trochę kłopotu. Po kilku próbach uzyskałem optymalne, jak sądzę, wyniki.
    Mój program nie obsługuje przerwań od zboczy sygnałów, lecz próbkuje te sygnały w regularnych odstępach czasu (obecnie 2,67ms na impulsator). Mam możliwość (z której nie korzystam, bo nie daje poprawy) ignorowania drgań styków przez uwzględnianie tylko takich kombinacji sygnałów, które się nie zmieniły przez 2, 3 lub 4 ostatnie próbkowania.
    Impulsator ma cztery stany, określone przez kombinacje sygnałów (uwaga: pin wspólny jest na VCC). Wykrywam przejścia między stanami jak niżej(co 2,67ms):
    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Z każdym impulsatorem związana jest struktura danych:
    unsigned char state; /* stan impulsatora */
    signed char halfstep; /* „półskoki“ */
    signed long value; /* wartość wynikowa */
    Jak widać, musiałem wprowadzić „półskoki“; dwa „półskoki“ w tym samym kierunku są traktowane jak pojedynczy ważny skok impulsatora.
    Występuje jeszcze problem polegający na tym, że niektóre egzemplarze (u mnie: 3 z 8) są wyraźnie wadliwe; przekręcenie o jedną pozycję powoduje czasem zmianę stanów o jedną za mało lub za dużo. Skutek jest np. taki, że jeden skok „mechaniczny“ nie powoduje zliczenia, za to następny w tym samym kierunku powoduje zliczenie o 2. Na to nie widzę lekarstwa w softwarze.
    5 „dobrych“ impulsatorów działa bez zarzutu i zliczają skoki bezbłędnie (obojętnie czy obracam ośką powoli czy bardzo szybko).
  • #5 10779061
    .3lite
    Poziom 17  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak to powinno wyglądać dla tego impulsatora, jak widać użyty PORTD i jedno przerwanie.
REKLAMA