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

Atmega – jak podłączyć enkoder A/B bez utraty impulsów przy priorytecie przerwań?

251mz 25 Maj 2007 12:09 2323 6
REKLAMA
  • #1 3919640
    251mz
    Poziom 18  
    Posty: 384
    Pomógł: 8
    Ocena: 8
    Witam , posiadam enkoder , dajacy sygnały A i B
    chce dołaczyc go do uC Atmega,
    tu jest problem poniewaz procesor ma za zadanie wykonywac pewna czynnosc na wewnetrznym przerwaniu od licznika....
    bedzie ona wywoływana z pewna czestotliwoscia i ona ma najwyzszy priorytet.
    teraz pytanko , jak podlaczyc enkoder do uC aby nie zgubic zadnego impulsu z niego.......
    chcialem to zrobic na liczniku taktowanym z zewnatrz ale jak zliczac wtedy w tył?? myslalem rowniez aby to zrobic na zew przerwaniach jednak nie wiem dalej czy jesli przerwania sa globalnie zablokowane to gdy wystapi zadanie z zewnatrz to procek sie o tym dowie (falga czy cos)
    juz troche pomysły mi sie skonczyły . jesli mogly ktos mi pomoc to bardzo bym prosił,
    ps. mam wolne kilka lini uC w tym wejscie licznikowe oraz 2 linie przerwan zewnetrznych.....
  • REKLAMA
  • #2 3920051
    kedzi1
    Poziom 18  
    Posty: 297
    Pomógł: 18
    Ocena: 9
    Na początek podaj więcej informacji. Jak często występuje to ważne przerwanie i jak długo trwa jego obsługa? Dlaczego chcesz wyłączyć globalnie przerwania? Jeżeli będzie obsługiwane to ważniejsze przerwanie to zewnętrzne od enkodera może poczekać, tylko zależy jak długo.
  • REKLAMA
  • #3 3920081
    251mz
    Poziom 18  
    Posty: 384
    Pomógł: 8
    Ocena: 8
    czestotliwosc tego waznego przerwania to od 100 do 4000Hz . jego obsluga bedzie trwała tyle co zapis 6 liczb 8bitowych. i to wsszystko , miedzy tym przerwaniem musze zmiescic wymiane danych (uart tez króciutko - góra 2 ramki) oraz własnie ta obsluge enkodera.
    czyli jak , jesli bedzie wykonywane to wazne przerwanie o którym mowa i podczas jego wykonywania nadejdzie na INTn impuls z enkodera to co ustawi sie flaga i procek poczeka az skonczy sie wykonywanie tego waznego i potem przejdzie do tego od enkodera??

    tez tak myslalem ale w innym topicu mowili ze nie bedzie po tym drugim sladu jesli bedzie wykonywane inne w tej chwili wiec teraz to juz sam jestem "glupi"
  • REKLAMA
  • Pomocny post
    #4 3920174
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo.

    2. Przerwanie może być zgubione tylko i wyłącznie wtedy gdy przerwania globalnie są zamaskowana a dane przerwania przyjedzie w tym czasie X razy. to wtedy zgubione zostanie X-1 przerwań bo to ostatnie zostanie obsłużone.

    3. Z przerwaniami jest tak jak myślisz czyli jeżeli jest włączone globalne zamaskowanie przerwań to przerwanie i tak ustawia swoją flagę i zostaje obsłużone zaraz po globalnym odmaskowaniu przerwań wedle swojego priorytetu.

    3. A jeżeli jeszcze martwisz się o zgubione przerwania to masz inne rozwiązanie. Możesz w obsłudze przerwania wyłączać globalne maskowanie przerwań, co zpowoduje że obsługa przerwania będzie mogła być przerwana przez inne przerwanie. W tym innym przerwaniu tak samo możesz odmaskować przerwania i tak dalej i tak dalej.
    Pewnym zagrożeniem tej metody jest fakt że przerwania będą sie nawarstwiać i zpowodować to może przepełnienie stosu uP.


    PS. Trochę zaciemniłem sprawę, za dużo razy użyłem słowa "przerwanie"
  • REKLAMA
  • #5 3920205
    251mz
    Poziom 18  
    Posty: 384
    Pomógł: 8
    Ocena: 8
    nie nie własnie duzo mi rozjasniłes:)

    czytalem dataszita i wg tego co pisza to falgi i przerwania chodza tak jak ty piszesz a własnie w tym innym topicu mi zaciemnili ze tak nie jest

    dziekuje bardzo za wyjaśnienie
    no cykli bede mial troche wiecej bo zegar 16MHz:)

    wiem ze całkiem sporo instrukcji dlatego zbytnio nie martwie sie o transmisje i obsługe enkodera i mysle ze jeszcze na jakis "wodotrysk" starczy:)
  • #6 3920257
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    A jeśli chodzi o sam enkoder to możesz go powiesić na jednym przerwaniu- np do nogi A. W obsłudze przerwania badasz wyjście B i jeśli jest np niskie to zwiekszasz wartosć zmiennej, jeśli wysokie to zmniejszasz (czy jaki ci tam pasuje). DO tego jeszcze może jakieś sprawdzenie przepełnienia tej zmiennej. Całosć będzie miała... kilkanaście cykli?
  • #7 3921350
    251mz
    Poziom 18  
    Posty: 384
    Pomógł: 8
    Ocena: 8
    wiem o co ci chodzi STEP DIR.

Podsumowanie tematu

✨ Dyskusja dotyczy podłączenia enkodera A/B do mikrokontrolera Atmega w taki sposób, aby nie utracić impulsów przy jednoczesnym wykonywaniu przerwania o wysokim priorytecie generowanego przez licznik wewnętrzny. Przerwanie to występuje z częstotliwością od 100 do 4000 Hz i trwa krótko (zapis 6 bajtów). Wątpliwości dotyczyły możliwości utraty impulsów enkodera podczas obsługi ważniejszego przerwania oraz działania flag przerwań przy globalnym maskowaniu. Wyjaśniono, że przerwania zewnętrzne enkodera ustawiają flagę nawet gdy globalne przerwania są zablokowane i zostaną obsłużone po zakończeniu przerwania o wyższym priorytecie, o ile nie wystąpi wielokrotne nakładanie się impulsów w czasie maskowania. Proponowano podłączenie enkodera do jednej linii przerwania zewnętrznego (np. sygnał A) i w obsłudze przerwania odczytywanie stanu sygnału B w celu określenia kierunku i inkrementacji lub dekrementacji zmiennej, co jest efektywnym rozwiązaniem wymagającym niewielu cykli procesora. Przy zegarze 16 MHz dostępna jest wystarczająca liczba cykli na obsługę przerwań, transmisję UART oraz enkoder bez ryzyka utraty impulsów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA