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

[Rozwiązano] Pytania o sygnał PWM, konfigurację timera i odczyt impulsów na pinach PB1, PB2 w Atmedze8A

antoniv10 07 Sty 2021 01:10 369 2
REKLAMA
  • #1 19164713
    antoniv10
    Poziom 3  
    Cześć, zaczynam się uczyć o sygnale PWM. Używam Atmegi8A mam kilka pytań. Z tego co rozumiałem to po odpowiednim skonfigurowaniu timera sygnał PWM będzie wysyłał impuls na PINY PB1, PB2. Czy jest możliwość aby ten sygnał nie był wysyłany cały czas tylko, np. jak kliknę klawisz? Załóżmy, że do pinu PB1 mam podpięty klawisz. Jak za pomocą timera mogę odczytać ile razy był on kliknięty? Tutaj też się używa PWM? Jak mogę obliczyć z jaką częstotliwością na pinie pojawi się sygnał PWM?
  • REKLAMA
  • Pomocny post
    #2 19164766
    kbw24
    Poziom 14  
    Cześć,

    Pozwól, że przejdę do konkretów.

    1. Możesz napisać program tak, żeby aktywować timer tylko wtedy, kiedy masz aktywny klawisz.

    2. Dlaczego chcesz mieć klawisz na tym samym pinie co wyjście timera?

    3. Jeśli chcesz liczyć, ile razy klawisz został aktywowany (naciśnięty), potrzebujesz zdefiniować zmienną, którą będziesz zwiększać o 1 przy każdym wciśnięciu klawisza. Wykrywanie jego wciśnięcia możesz realizować w pętli programu lub z wykorzystaniem przerwań. PWM do tego nie służy.

    4. Częstotliwość pracy timera (sygnału PWM) to częstotliwość taktowania procesora, podzielona przez preskaler użyty do skonfigurowania timera, to do potęgi -1 i razy wartość MAX zliczania timera i znowu do -1. Czyli, na przykład:

    f_taktowania = 8MHz, preskaler = 8, timer 16 bitowy co daje MAX = 65535 ((2^16) - 1). Oczywiście MAX można ustawić na mniejszą wartość, jeśli się nie mylę (Atmegi serii 88 do 328 miały taką możliwość) oraz zależy od tego, jak skonfigurujesz timer. Na ten moment przyjmijmy jednak prostą konfigurację.

    Zatem:

    Okres zliczania = T = 65535*(8000000/8)^(-1) ; Częstotliwość = 1/T. Wychodzi około 15,26Hz. Dla timera 8-bitowego byłoby to odpowiednio MAX = 255, zatem f = 3921,57Hz.

    Częstotliwość nie oznacza jednak długości trwania impulsu. Jeśli chciałbyś mniej więcej oszacować czas trwania impulsu dla danej wartości wpisywanej do timera, by uzyskać pewne wypełnienie (PWM), to zamiast MAX podstawiasz wartość, którą wpisujesz do rejestru.

    Nie chcę wszystkiego dawać na tacy, ale myślę, że to powinno Ci wystarczyć, by zrozumieć temat i skonstruować własne przekształcenia wzorów do uzyskania różnych parametrów timera i PWM.
  • #3 19167084
    antoniv10
    Poziom 3  
    Dzięki za konkretną odpowiedź.
REKLAMA