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

[avr][c] obsluga wielu enkoderow przez rejestry 74hc165

esane 23 Lut 2012 22:55 1591 2
REKLAMA
  • #1 10590033
    esane
    Poziom 9  
    Witam,

    Potrzebuję odczytać 32 enkodery podpięte do mikrokontrolera przez rejestry 74HC165. Odczyt z rejestrów odbywa się przez sprzętowe SPI z częstotliwością 1MHz. Problem polega na przetworzeniu tych danych. Jak się za to zabrać? Myślałem nad odczytem rejestrów do globalnych zmiennych w przerwaniu, a następnie przetwarzanie tych danych w głównej pętli programu (pisząc przetwarzanie mam na myśli zamianę sygnałów z enkoderów na kierunek obrotu/zwiększanie bądź zmniejszanie danej zmiennej). Tutaj pojawia się problem, że na czas wykonywania tej funkcji wypadałoby wyłączyć obsługę przerwań (bo byłyby one dość częste), ale nie wiem czy wtedy będę miał "wystarczająco świeże dane" żeby obsłużyć enkodery. Do tego dochodzi problem niwelacji drgań styków. Najchętniej zdecydowałbym się tutaj na filtr RC lowpass, żeby jeszcze bardziej nie komplikować programu. Czy ktoś spotkał się kiedyś z takim problemem? Byłbym wdzięczny za jakiekolwiek naprowadzenie na odpowiedni sposób podejścia do tego.

    Z góry dziękuje za poświęcony czas,

    Pozdrawiam, esane
  • REKLAMA
  • Pomocny post
    #2 10590217
    tmf
    VIP Zasłużony dla elektroda
    Nie widzę problemu. 32 enkodery to 64 bity, 8 rejestrów przesuwnych. Ponieważ SPI działa z max CLK/2 to masz przerwanie co 16 taktów. No ale przecież enkoder możesz czytać wolniej, w zależności od założonej max prędkości pewnie nie trzeba częściej niż co 1ms, czyli przerwania ci wyjdą co 0,25ms - kupa czasu. Dekodowanie enkoderów zrobiłbym w przerwaniu - co 8 bitów masz przerwanie, odczytujesz pełen bajt (czyli 4 enkodery), dekodujesz i zapisujesz ich stan (pewnie licznik?). W pętli głównej dekodowanie nie ma sensu bo musiałbyś sprawdzać jakąś flagę (coś w stylu nowe dane są gotowe), lub ciągle dekodować te same stany.
  • #3 10594694
    ssl69
    Poziom 13  
    tmf napisał:
    Nie widzę problemu. 32 enkodery to 64 bity, (...) w zależności od założonej max prędkości pewnie nie trzeba częściej niż co 1ms


    Gdyby autor postu zechciał się podzielić informacją ile czasu będą trwały najkrótsze impulsy z enkodera, byłoby łatwiej. Póki co, nie ferował bym wyroku, bo nie wiadomo jak szybko będą się kręcić, i jaką mają rozdzielczość (a 1ms to w przypadku niektórych enkoderów wcale nie musi być "kupa czasu").
REKLAMA