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

[C] Jak ustawić potrójny HW PWM w atmega8

narasta 14 Wrz 2011 23:54 1789 8
  • #1 9928430
    narasta
    Poziom 21  
    Jak ustawić 3 PWMY dla atmegi 8 tak aby wszystkie miały ta samą częstotliwość, rozdzielczość i fazę?

    Udało mi się uruchomić 3 PWMy (na podstawie noty katalogowej), ale nie potrafię ich razem zsynchronizować (pierwszych dwóch (2x8bit - T1) z trzecim kanałem (16bit - T2))

    Na razie stanęło na tym, że napisałem 3-kanałowy SW PWM, ale to po pierwsze jest bez sensu skoro są w procesorze już 3 kanały HW a po drugie szkoda czasu procesora.

    Program piszę w C.

    Dzięki za pomoc.
  • #2 9928471
    Konto nie istnieje
    Poziom 1  
  • #3 9928481
    gaskoin
    Poziom 38  
    BTW - po co Ci trzy takie same PWMy ? Nie możesz tego rozdzielić jakoś sprzętowo ?
  • #4 9928522
    narasta
    Poziom 21  
    Udało mi się między czasie rozwiązać samemu problem.

    3 PWMy takie same potrzebne mi są do regulacji oświetlenia RGB.

    Oto funkcja inicjująca PWMy:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    a potem już
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W proteusie działa tak jak należy :) Co ciekawe PWM 1,2 wraz 3 maja wspólną fazę. W tym momencie przeskok o jedną instrukcję nie ma znaczenia - aż taka dokładnosć nie jest potrzebna.


    Dzięki za szybkie odpowiedzi :)

    Swoja drogą... Ciekawe jak ja zaimplementuję RC5 skoro wykorzystałem wszystkie timery (T0 użyty do odmierzania czasu)... :P
  • #5 9928594
    mirekk36
    Poziom 42  
    narasta napisał:

    Swoja drogą... Ciekawe jak ja zaimplementuję RC5 skoro wykorzystałem wszystkie timery (T0 użyty do odmierzania czasu)... :P


    Swoją drogą takie 3 albo i 4,5 PWMów to można machnąć programowo i to np 9bitowych zamiast jak masz tutaj 8bitowych, które gorzej działają niestety.

    Przy okazji to w ogóle do takich celów nie jest ci potrzebna w najmniejszym przypadku synchronizacja tych PWMów - skąd taki pomysł ?

    A gdybyś zrobił programowe PWM'y to poza lepszą jakością regulacji jasności miałbyś jeszcze wolne 2 z 3 timerów żeby spokojnie zrobić porządną obsługę RC5 ;)

    Pomyśl nad tym.
  • #6 9928714
    Konto nie istnieje
    Poziom 1  
  • #7 9929154
    narasta
    Poziom 21  
    A programowy PWM wyglądał mniej więcej tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    No prościej się nie da :)
  • #8 9929192
    gaskoin
    Poziom 38  
    Da się.

    Odpalasz timer. Dodajesz przerwanie od porównania. Na przerwanie od porównania ustawiasz jakieś piny, na przerwaniu od przepełnienia je zerujesz. Kod wygląda wtedy tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 9929818
    narasta
    Poziom 21  
    No ale jak w praktyce by to wyglądało?
REKLAMA