Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega644] programowe PWM

baniczek 09 Mar 2012 07:21 701 0
  • #1 09 Mar 2012 07:21
    baniczek
    Poziom 2  

    Witam ponownie!

    Ta noc była długa. Z pomocą wyszukiwarki znalazłem taki kod, poprawiłem w nim parę błędów i mam 1 problem dotyczący stricte kodu.

    Mianowicie "kanały" PWM są przesunięte o 1 do przodu - linijka

    Code:
    pwm_set_duty(0, 0); 
    oddziałuje na PC1 zamiast na PC0. Trochę mi głupio, bo zawodowo zajmuje się programowaniem od prawie 5 lat, jednak przez ten czas nie korzystałem z przesunięć bitowych ani w ogóle z C więc proszę o nakierowanie chociaż gdzie popełniłem błąd.

    Mam także parę pytań dotyczących samego timera, a w szczególności "Timer/Counter1 Interrupt Mask Register". Przeglądałem datasheet dosyć uważnie lecz jednak wybiórczo i nie znalazłem opisu do czego to służy.

    Ta niewiedza powoduje dalsze problemy:

    1. kompletnie nie rozumiem linijki
    Code:
    OCR1B = OCR1A_VALUE - PWM_CHANNELS_COUNT;
    (w kodzie na początku postu odejmowane było 5 i wydedukowałem, że chodzi o liczbę kanałów PWM - może się myle, ale program działa :D ). Dlaczego tu jest odejmowanie?

    2. nie rozumiem także do czego służą wartości OCR1B_MIN i OCR1B_MAX - w przerwaniu TIMER1_COMPA_vect zwłaszcza; ten wzór generalnie trochę się różni od tego podanego w datasheet. z tego też powodu nazwa "zmiennej" i komentarz jest pewnie błędny.

    3. punkt 2 powoduje, że nie potrafię zmienić tak wartości, żeby liniijka
    Code:
    pwm_set_duty(0, 100);
    powodowała dokładnie to co określa jej nazwa: 100% napięcia i 0% napięcia (pomijając czułość czy zależność napięcia od ilości światła, które dioda daje)

    4. No i do czego używamy OCR1B?

    Tak poza tym to wszystko działa. :)

    Kod:

    main.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    config.h:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Za wszelkie informacje / linki z góry dziękuję :)

    0 0