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 8535 PWM - Jak sterować trzecim kanałem OC2 dla diody RGB?

scal12 24 Sty 2008 21:33 1944 6
REKLAMA
  • #1 4731869
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Witam wszystkich,Panowie mam do Was pytanie,ucze sie obsługi pwm chce sterować diodą rgb,wiec wziełem do tego celu atmege 8535 bo taką miałem na stanie ,udało mi sie w jakims stopniu napisać program w bascomie moge obsłuzyc dwa kanały natomiast mam problem z trzecim kanałem diode podłaczyłem do wyjść OC1A,OC1B i OC2,nie wiem jak sterować tym trzecim kanałem OC2,wiem że musze uruchomić timer2 ale co dalej?niżej mój prosty program.Za okazaną pomoc wielkie dzięki.
    Kod:
    $regfile = "m8535.dat"
    $crystal = 12000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 , E = Portb.2 , Rs = Portb.1
    Config Timer1 = Pwm , Pwm = 10 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up
    Config Timer2 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up , Compare B Pwm = Clear down
    Start Timer1
    start Timer2
    
    Config Pinc.2 = Output
    Config Pind.5 = Output
    Config Pind.4 = Output
    Config Pinc.5 = Input
    Config Pinc.4 = Input
    Config Pinc.3 = Input
    Set Portc.3
    Set Portc.5
    Set Portc.4
    Cls
    Lcd "witaj"
    Wait 1
    Declare Sub Dioda
    Declare Sub Dioda1
    
    Dim I As Integer
    Dim A As Integer
    
    A = 0
    I = 0
    
    Do
    Cls
    Lcd "dane" ; I
    Waitms 20
    If Pinc.3 = 0 Then Call Dioda
    If Pinc.5 = 0 Then Call Dioda1
    Loop
    Return
    
    Dioda:
    Do
    If Pinc.3 = 0 Then Incr I
     If Pinc.5 = 0 Then Decr I
     pwm1a = i
     waitms 10
     Loop until pinc.4=0
    Return
    
    Dioda1:
    Do
    If Pinc.3 = 0 Then Incr A
     If Pinc.5 = 0 Then Decr A
     Pwm1b = A
     waitms 10
     Loop until pinc.4=0
    Return


    Proszę umieszczać listingi programów w znacznikach "Code", oraz korzystać z przycisku "Pisownia". [c_p]
  • REKLAMA
  • #2 4742525
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Nie bardzo rozumiem po co do tego zadania aż trzy timery. Da się to wszystko zrobić na jednym !!!

    --
    pozdrawiam
  • REKLAMA
  • Pomocny post
    #3 4743623
    HIOB
    Poziom 17  
    Posty: 222
    Pomógł: 23
    Ocena: 1
    Witam,

    
    Config Timer2 = Pwm , Prescale = 8 , Compare = Toggle , Pwm = On , Compare Pwm = Clear Up
    ...
    Ocr2 = 0
    


    Napięcie na wyjściu "OC2", jest proporcjonalne do zawartości "Ocr2".
    Oczywiście możesz zmienić preskaler, itp.

    Pozdrawiam.
  • REKLAMA
  • #4 4745391
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Wielkie dzieki za pomoc, skonfigurowałem timer 2 i ocr2 i wszystko smiga jak nalezy, a swoja droga to jestem ciekaw, jak to zrobic na jednym timerze, nie uzywajac obsługi programowej pwm.
  • REKLAMA
  • Pomocny post
    #5 4746322
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    No cóż rozwiązanie problemu jest programowe. W obsłudze przerwania deklarujesz trzy liczniki zliczające do np. 100 (wygodne bo masz skok 1%). Zawartość tych liczników "przyrównywana" jest do trzech kolejnych zmiennych, na które z kolei Ty masz wpływ. W zależności od zadanych wartości coś włącza się szybciej coś później. I po sprawie. Ot, cała filozofia. Do sterowania diodą napewno wystarczy.

    --
    pozdrawiam
  • #6 4746593
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Faktycznie moze lepiej zrobic programowa obsługe,układ ma sterowac jedna diodą RGB duzej mocy (podswietlenie oczka wodnego),i ma być sterowany przez rs232,wazne aby regulacja był płynna i bez zadnych zacięc.
  • #7 4747332
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Jak dasz częstotliwość nie mniejszą jak 50Hz to nie powinno być żadnych problemów. W opisany sposób robiłem PWM do silnika, który pobiera prąd prawie 3A i nie było żadnych problemów.

    --
    pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy sterowania trzema kanałami PWM na mikrokontrolerze ATmega8535 do regulacji diody RGB. Autor ma problem z konfiguracją trzeciego kanału OC2, podłączonego do wyjścia Timer2. Wskazano, że do sterowania kanałem OC2 należy poprawnie skonfigurować Timer2, ustawić preskaler oraz wartość rejestru OCR2, która proporcjonalnie reguluje napięcie na wyjściu OC2. Zaproponowano także alternatywne rozwiązanie programowe, polegające na obsłudze PWM w przerwaniu, gdzie trzy liczniki porównywane są z wartościami zadanymi, co pozwala na płynną regulację jasności diody RGB bez konieczności używania wielu timerów sprzętowych. Dyskutowano o częstotliwości PWM nie mniejszej niż 50 Hz, co zapewnia stabilną i płynną regulację, nawet przy dużych prądach obciążenia. Autor potwierdził działanie konfiguracji Timer2 i OCR2 oraz wyraził zainteresowanie implementacją sterowania PWM na jednym timerze bez obsługi programowej.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA