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

[C] atmega8 – konfiguracja 3 kanałów HW PWM z tą samą częstotliwością i fazą

narasta 14 Wrz 2011 23:54 1876 8
REKLAMA
  • #1 9928430
    narasta
    Poziom 21  
    Posty: 597
    Pomógł: 7
    Ocena: 219
    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.
  • REKLAMA
  • #2 9928471
    Konto nie istnieje
    Poziom 1  
  • #3 9928481
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    BTW - po co Ci trzy takie same PWMy ? Nie możesz tego rozdzielić jakoś sprzętowo ?
  • REKLAMA
  • #4 9928522
    narasta
    Poziom 21  
    Posty: 597
    Pomógł: 7
    Ocena: 219
    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
  • REKLAMA
  • #5 9928594
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    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.
  • REKLAMA
  • #6 9928714
    Konto nie istnieje
    Poziom 1  
  • #7 9929154
    narasta
    Poziom 21  
    Posty: 597
    Pomógł: 7
    Ocena: 219
    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  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    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  
    Posty: 597
    Pomógł: 7
    Ocena: 219
    No ale jak w praktyce by to wyglądało?

Podsumowanie tematu

✨ Użytkownik pytał, jak skonfigurować trzy kanały PWM w mikrokontrolerze ATmega8, aby działały z tą samą częstotliwością, rozdzielczością i fazą. Odpowiedzi sugerowały, że synchronizacja PWM na różnych timerach wymaga odpowiednich cykli oczekiwania między ich uruchomieniem. Użytkownik rozwiązał problem, implementując funkcję inicjującą PWM, która ustawia timery do pracy w trybie Fast PWM. Wskazano również, że synchronizacja nie jest konieczna dla regulacji oświetlenia RGB, a programowe PWM może być bardziej efektywne, oferując lepszą jakość regulacji jasności. Użytkownik podzielił się kodem dla programowego PWM, który wykorzystuje przerwania do kontrolowania jasności diod LED.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA