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.

ATmega8 - PWM do taśmy LED

cziken08 19 Mar 2013 21:13 1455 5
  • #1 19 Mar 2013 21:13
    cziken08
    Poziom 9  

    Witam, zrobiłem sobie odbiornik RC5 i chcial bym sobie zrobić regulacje jasności na PWM do taśmy LED, nie bardzo wiem jak się za to zabrać ponieważ z PWM nigdy nic nie robilem. Jak by ktoś mógł dopisać kawałek kodu do mojego lub przynajmniej nakierować jak mam napisać był bym bardzo wdzięczny:) Podaje mój schemat i wsad:

    0 5
  • #3 20 Mar 2013 16:47
    cziken08
    Poziom 9  

    Coś powoli zaczyna mi powstawać :D Tylko mam takie pytanie, jak mam napisać żeby wypełnienia zmienialy się podczas naciskania 2 przycisków na pilocie, jednym wciskając to ściemnia a drugim rozjaśnia, gdy taśmę mam podpiętą pod Pb.1. Szukalem tego lecz nie mogłem znaleźć odp tego nigdzie:/ A i jeszcze dodam że mam 4 stopnie wypełnienia

    Wyp(1) = 128
    Wyp(2) = 20
    Wyp(3) = 30
    Wyp(4) = 40

    0
  • #4 21 Mar 2013 21:26
    cziken08
    Poziom 9  

    Napisałem sobie program lecz jak rozjaśniam to bardzo duzo razy trzeba klikać przycisk aby na maxa rozjaśnic lub ściemnić. Chciał bym aby tak rozjaśniało do maxa przy np 10 kliknięciach , takie 10 stopni rozjaśnie. Prosze o pomoc jak mam zmienić moj kod.
    Wsad:

    Config Pinb.1 = Output
    Config Rc5 = Pind.2
    Dioda Alias Portd.6
    Cursor Off
    Cls
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
    Config Timer2 = Pwm , Async = Off , Prescale = 64 , Pwm = On , Compare Pwm = Clear Up

    Enable Interrupts
    Enable Timer2
    Enable Timer2
    `Pętla główna:
    Do
    Getrc5(adres , Komenda)
    Komenda = Komenda And &B01111111

    If Adres <> 255 Then
    Reset Dioda

    If Komenda = 16 Then
    Incr R
    End If
    If Komenda = 17 Then
    Decr R
    End If

    If Komenda = 1 Then
    R = 255
    End If
    Pwm1a = R
    Loop
    End

    0
  • Pomocny post
    #5 22 Mar 2013 06:03
    emarcus
    Poziom 35  

    cziken08 napisał:
    Napisałem sobie program lecz jak rozjaśniam to bardzo duzo razy trzeba klikać przycisk aby na maxa rozjaśnic lub ściemnić. Chciał bym aby tak rozjaśniało do maxa przy np 10 kliknięciach , takie 10 stopni rozjaśnie. Prosze o pomoc jak mam zmienić moj kod.
    Wsad:
    Code:
    [syntax=basic4gl]
    

    Config Pinb.1 = Output
    '................
    If........
    Incr R
    '..............

    If..........
    Decr R
    [/syntax]




    Incrementując lub decrementując zmienną 'R' w stylu jak masz w twoim projekcie, stopniem zmiany wartości PWM jest 1, a dokładniej 1/255 zakresu.
    Chcesz uzyskac większe "skoki" zamień te instrukcje na np.:

    R = R +25 ;
    oraz
    R= R-25
    odpowiednio dla incrementacji lub decrementacji (te 25 jest wartością przykładową co daje 10 stopni jasności [255/25 =~10]). Możesz dac inną dowolną liczbę.
    Ponadto potrzebujesz ograniczyc incrementację i decrementację zmiennej "R" w celu nie dopuszczenia do 'przewinięcia się' licznika dla tej wartości zadeklarowanej/zwymiarowanej w nagłówku programu.
    Dolną granicę określisz praktycznie: -> od wartości gdy światło dioda zaczyna byc widoczne; górną: nie wyżej niż 255 (if R>= 255 Then : R=255) zakładając że zwymiarowałes: "Dim R as word"
    Możesz także pominąc zmienną pośrednią "R" i operowac bezpośrednio na wartości Pwm1a.
    Ponieważ nie używasz wyjścia OC1B zatem nie jest konieczne generowanie na nim sygnału PWM.

    P.s. Jaki powód ma umieszczenie konfiguracji timera2 jeżeli nie ma zastosowania?
    oraz 'enable interrupt OVF2' jeżeli brak jest odwołania co ma wtedy robic?

    I ostatnia uwaga: należałby zweryfikowac rozbieżności pomiędzy programem, a diagramem układu, odnośnie częstotliwości taktowania processora.
    W jednym miejscu podajesz 16 MHz a w innym masz 12 MHz.
    W związku z tym zachodzi następne pytanie:
    Czy fusebity są odpowiednio ustawione dla częstotliwości innej niż 1MHz (default), oraz czym faktycznie taktujesz: czy jest to rezonator kwarcowy, czy też często spotykany (tańszy i szybszy w startowaniu) rezonator ceramiczny. Dla tego ostatniego wymagane jest ustawienie dodatkwego fusebitu dla pracy powyżej 8 MHz.

    e marcus

    0
  • #6 22 Mar 2013 15:09
    cziken08
    Poziom 9  

    Dzięki wielkie emarcus o to właśnie mi chodziło wszystko śmiga jak chciałem:) A co do rezonatora to mam 16MHz kwarcowy, a fusebity mam poprawnie ustawione, pisząc tu program pewnie musiałem się gdzieś pomylić:) Jeszcze raz wielkie dzięki:D

    0