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

[atmega8][asm] timer1 sterowanie OC1A

wesol 22 Gru 2009 09:41 1950 2
REKLAMA
  • #1 7421297
    wesol
    Poziom 15  
    Witam,

    zagadnienie, w którego sprawie chciałbym się poradzić wygląda następująco. Muszę sterować serwomechanizmem modelarskim przy jak najmniejszym udziale głównego wątku programu.

    Pytanie z tym związane, czy da się to zrobić używając 16-bitowego timera1, rejestrowi OCR1A przypisać wartość odpowiadającą 20ms oraz ustawić zdarzenie aby wyjście OC1A był ustawiane przy porównaniu automatycznie. Natomiast rejestrowi OCR1B przypisywać wartości odpowiadające 1-2ms oraz włączyć przerwanie generowane przy porównaniu, w którym wykonywała by się 1 instrukcja, zerowania wyjścia OC1A. Tym samym wątek główny programu będzie przerywany jedynie na wykonanie przerwania generowanego przez porównanie wartości OCR1B z aktualnym stanem licznika.

    Czy moje założenia są poprawne?
  • REKLAMA
  • #2 7421523
    zumek
    Poziom 39  
    wesol napisał:
    ..
    Czy moje założenia są poprawne?


    Przerwania nie będą potrzebne jeżeli:

    a)serwo masz podłączone do wyjścia OC1A i nie korzystasz z przechwytywania - tryb Fast PWM(Mode 14)
    b)serwo możesz podłączyć do wyjścia OC1B - tryb Fast PWM(Mode 15)
  • #3 7421704
    wesol
    Poziom 15  
    Wykorzystując tryb Fast PWM musiałbym tak dobrać preskaler itimera i częstotliwość pracy uC aby licznik przepełniał się co około 20ms.
    Jakiś czas temu widziałem wątek na forum gdzie jeden z forumowiczów próbował uzyskać taki efekt, i z tego co pamiętam nie jest to łatwe, a dodatkowo nie uzyskam tego na pewno z kwarcem 16Mhz, tak aby reszta programu mogła działać z maksymalną szybkością.
    Ale przeczytam jeszcze raz opis trybu fast pwm, z którego jeszcze nie korzystałem.
REKLAMA