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 328p] Co to jest Compare Match w ATmega 328P? Proszę o proste wyjaśnienie

joker1309 07 Gru 2015 01:21 1263 9
REKLAMA
  • #1 15217681
    joker1309
    Poziom 11  
    Posty: 185
    Ocena: 2
    Witam
    mam problem z zrozumieniem o co chodzi w tej tabelce :

    [atmega 328p] Co to jest Compare Match w ATmega 328P? Proszę o proste wyjaśnienie

    Nie rozumiem co to jest Compare Match, mógłby ktoś to wytłumaczyć na "łopatologicznie" ? Z góry dziękuję za pomoc : )
  • REKLAMA
  • #2 15217705
    vonar
    Poziom 28  
    Posty: 690
    Pomógł: 151
    Ocena: 30
    Tutaj - zdarzenie wyzwalane w momencie zrównania się wartości licznika (TCNT2) z wartością w rejestrze Output Compare A (OC2A).

    Btw. w pierwszym wierszu tabeli jest błąd (OC0A zamiast OC2A).
  • REKLAMA
  • #3 15217844
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    vonar napisał:
    zdarzenie wyzwalane w momencie zrównania się wartości licznika (TCNT2) z wartością w rejestrze Output Compare A (OC2A).

    mała poprawka: OCR2A

    @joker1309
    OC2A to pin wyjściowy licznika, a OCR2A to rejestr z którym następuje porównanie licznika TCNT2 - patrz schemat licznika.
  • #4 15218465
    joker1309
    Poziom 11  
    Posty: 185
    Ocena: 2
    Czyli rozumiem że to działa tak:

    licznik 2 sobie liczy od 0 do 255 ( 8 bitowy), obecna wartość w TCNT2. w OCR2A mogę ustawić wartość do jakiej ma liczyć i co ma zrobić jak do niej doliczy? Jak wybiorę 0 0 to to porównanie jest wyłączone i licznik liczy do przepełniania się ( i ustawi flagę przepełnienia ). Jak ustawie 1 0 czyli Clear OC2A on compare match to na tym bicie pojawi się 0, jak ustawie 1 1 czyli set to pojawi się 1, a jak ustawie 0 1 czyli toogle to zaneguje obecną wartość ? Dobrze zrozumiałem o co chodzi ?
    Jeszcze 2 pytanka o ten rejestr nad tabelką jest napis "non pwm mode" a jak nie ustawie bitu COM2B1 to wyjście OC2B nie działa w trybie PWM, jak to rozumieć? I ostatnie krótkie pytanko: w rejestrze TCCR2A:
    [atmega 328p] Co to jest Compare Match w ATmega 328P? Proszę o proste wyjaśnienie

    Ustawia się jak to ma działać na 2 wejściach tak ? ( OC2A i OC2B - nie ma osobnego rejestru na OC2B? )
  • REKLAMA
  • #6 15218510
    joker1309
    Poziom 11  
    Posty: 185
    Ocena: 2
    Chcę zapoznać się z PWM, i znalazłem poradnik gdzie jest ustawiony ten bit i się zastanawiam dlaczego jest ustawiony.

    edit: zauważyłem że jest jeszcze jedna tabelka :

    [atmega 328p] Co to jest Compare Match w ATmega 328P? Proszę o proste wyjaśnienie
    ale nadal występuje w niej set, toggle i clear.
  • Pomocny post
    #7 15218528
    vonar
    Poziom 28  
    Posty: 690
    Pomógł: 151
    Ocena: 30
    joker1309 napisał:
    licznik 2 sobie liczy od 0 do 255 ( 8 bitowy), obecna wartość w TCNT2. w OCR2A mogę ustawić wartość do jakiej ma liczyć i co ma zrobić jak do niej doliczy? Jak wybiorę 0 0 to to porównanie jest wyłączone i licznik liczy do przepełniania się ( i ustawi flagę przepełnienia ). Jak ustawie 1 0 czyli Clear OC2A on compare match to na tym bicie pojawi się 0, jak ustawie 1 1 czyli set to pojawi się 1, a jak ustawie 0 1 czyli toogle to zaneguje obecną wartość ? Dobrze zrozumiałem o co chodzi ?

    Zgadza się.

    joker1309 napisał:
    ten rejestr nad tabelką jest napis "non pwm mode" a jak nie ustawie bitu COM2B1 to wyjście OC2B nie działa w trybie PWM, jak to rozumieć?

    "non-PWM Mode" oznacza, że tabela dotyczy licznika skonfigurowanego do pracy w trybie innym niż PWM (czyli "normal" lub CTC). W tej sytuacji wyjścia OC2A, OC2B nie działają w trybie PWM i to w tej sytuacji nie zależy od bitów COM2x1:0, tylko od WGM22:0. Zauważ, że nawet w trybie nie-PWM licznik może wpływać na stan wyjścia i to właśnie kontrolują bity COM2x1:0.

    joker1309 napisał:
    w rejestrze TCCR2A [...] Ustawia się jak to ma działać na 2 wejściach tak ? ( OC2A i OC2B - nie ma osobnego rejestru na OC2B? )

    Bity WGM22:0 (WGM21, WGM20 w TCCR2A i WGM22 w TCCR2B) kontrolują tryb pracy całego licznika i naturalnie jest on taki sam dla obu kanałów, ale co ma się dziać OC2A i OC2B możesz kontrolować niezależnie bitami COM2x1:0 (np. odłączyć ustawiając 00).

    joker1309 napisał:
    edit: zauważyłem że jest jeszcze jedna tabelka :

    I trzecia, dla phase correct PWM.
  • REKLAMA
  • Pomocny post
    #8 15218545
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    PWM ustawiasz na przykład w tryb Fast PWM (patrz tab. 17-8): Mode 3
    ustawiając:
    - bity WGM20 i WGM21,
    - preskaler bitami CS2x
    - dla wyjścia OC2A ustawiasz:
    -- pin jako wyjście rejestrem DDRx
    -- z tabelki "Table 17-3. Compare Output Mode, Fast PWM Mode" wybierasz tryb bez negacji sygnału ustawiając bit COM2A1 dzięki czemu będziesz miał sygnał w postaci impulsu dodatniego,
    - w rejestrze OCR2A ustawiasz wypełnienie czyli szerokość impulsu
  • #9 15218592
    joker1309
    Poziom 11  
    Posty: 185
    Ocena: 2
    Dziękuję, teraz wszystko jasne : )

    Dodano po 1 [godziny] 4 [minuty]:

    Program działa tak jak chce ( mam 2 przyciski jednym OCR2B zwiększam o pewną wartość, drugim ustawiam na 0 ) do wyjścia podłączona dioda, ( drgania stykow wyeliminowane ) jednak nawet jak OCR2B jest ustawione na 0 to dioda się lekko świeci, a napięcie na niej wynosi 300mV. możne je jakoś sprowadzić do 0 ?

    Dodano po 12 [minuty]:

    Zmieniłem tryb na PWM, Phase Correct i mam 0v, ale dlaczego przy fast pwm bylo 300mV ? przecież powinno być 0/
  • Pomocny post
    #10 15218955
    szczywronek
    Poziom 28  
    Posty: 678
    Pomógł: 142
    Ocena: 217
    Nie powinno ;)
    datasheet napisał:
    The extreme values for the OCR2A Register represent special cases when generating a PWM waveform output in the fast PWM mode. If the OCR2A is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle.


    https://www.elektroda.pl/rtvforum/topic3116717.html

Podsumowanie tematu

✨ W dyskusji poruszono temat działania funkcji Compare Match w mikrokontrolerze ATmega 328P, szczególnie w kontekście rejestru OCR2A i licznika TCNT2. Użytkownicy wyjaśnili, że Compare Match to zdarzenie, które występuje, gdy wartość licznika równa się wartości w rejestrze Output Compare. Ustalono, że można ustawić różne tryby działania (np. PWM, CTC) oraz jak bity COM2x1:0 kontrolują zachowanie wyjść OC2A i OC2B. Użytkownik zadał pytania dotyczące działania w trybie PWM oraz problemu z napięciem na diodzie, które występowało w trybie Fast PWM. Ostatecznie, po zmianie na Phase Correct PWM, problem z napięciem został rozwiązany.
Wygenerowane przez model językowy.
REKLAMA