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

[Mega8][Bascom] Lampka RGB sterowana z PWM

Matkas 27 Lis 2008 15:38 4029 14
REKLAMA
  • #1 5789740
    Matkas
    Poziom 15  
    Witam,


    Pisząc program pod lampkę RGB natrafiłem na pewien problem.

    W kodzie widać, że B rozjaśnia się od 0 do 255. Chciałbym aby dokładnie w tym samym czasie G i B rozjaśniało się do jakiegoś innego stopnia. Niestety niewiem jak to połączyć.

    Do 
    For B = 0 To 255 
       Ocr2 = R 
       Pwm1b = G 
       Pwm1a = B 
    
    
       Waitms 4 
    Next I 
    
    For B = 255 To 0 Step -1 
    
       Ocr2 = R 
       Pwm1b = G 
       Pwm1a = B 
       Waitms 4 
    Next I 


    Chciałbym również się zapytać o komendę Rnd(x). Chciałbym użyć tej komendy, aby diody miały zawsze losową wartość. Niestety ona zmienia stan końcówki natychmiastowo, a nie płynnie. Da się to inaczej rozwiązać?

    Pozdrawiam

    Edit:
    Zapomniałem dodać, że przekopałem wszystkie tematy na temat lampek RGB na AVR i za dużo mi to nie pomogło:(
  • REKLAMA
  • REKLAMA
  • #3 5789909
    Matkas
    Poziom 15  
    Nie potrzebnie są wpisane Pwm1b i Ocr2. Brakuje Do i Loop, ale w programie było. No i raczej waitms 4 tutaj nie pasuje:-)
  • #4 5789922
    dawid512
    Poziom 32  
    Waitms musi być ponieważ musi być opóźnienie pomiędzy kolejnymi wspisami do rejestru OCRx bo inaczej będzie się to działo za szybko. W miejscu gdzie masz next I powinno być next B.
  • REKLAMA
  • #5 5789949
    Matkas
    Poziom 15  
    Ok to działa tylko, że to nie jest to czego pragnę:-) Tutaj się wszystko dzieje po kolei, a chcę aby w jednym czasie działy się 3 rzeczy.

    Pozdrawiam
  • #6 5789956
    dawid512
    Poziom 32  
    A dokładniej co? Chcesz żeby jedna ledka się rozjaśniała a druga w tym samym czasie się ściemniała?
  • #7 5789968
    Matkas
    Poziom 15  
    Tak dokładnie to co napisałeś. Męcze się z tym od wczoraj i niestety nie udało mi się tego zrobić.

    Pozdrawiam
  • #8 5789972
    dawid512
    Poziom 32  
    Pokaż ustawienia timera. Tak na szybko to może inkrementuj jedno a drugie dekrementuj.
  • REKLAMA
  • #9 5789974
    Matkas
    Poziom 15  
    Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    Config Timer2 = Pwm , Pwm = On , Prescale = 1 , Compare Pwm = Clear Up
  • #10 5790033
    dawid512
    Poziom 32  
    Robisz coś takiego:
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 8
    
    ....
    
    do
    
    For I = 0 To 255
    Pwm1b = I
    Pwm1a = I
    Waitms 30
    Next I
    loop

    Powinno wyjść to co chciałeś :)
  • #11 5790162
    Matkas
    Poziom 15  
    Witaj,
    dzięki, ale to też nie o to chodzi:-)
    W tym kodzie co mi dałeś Pwm1a i b pracują tak jakby na zmiane. Ja najchętniej zrobiłbym to na Rnd(liczba) tyle, że wtedy przeskakuje z jednego koloru na drugi natychmiastowo, a ja chciałbym płynnie. Jeśli nie dało by się na Rnd to można na For/Next.

    Mam pytanie odnośnie tego kodu:

    For I = 0 To 255
    Pwm1b = I
    Pwm1a = I
    ocr2 = I
    Waitms 30
    Next I
    
    For I = 255 To 64
    Pwm1b = I
    Pwm1a = I
    Ocr2 = I
    Next I
    
    For I = 64 To 128
    Pwm1b = I
    Pwm1a = I
    Ocr2 = I
    Next I


    Co tu jest źle? Wg. mnie powinno to podświetlić diody na maxa, później zgasic do 64, a nastepnie podjasnic do 128. Niestety nie dzieje się tak jak chcę:(

    Pozdrawiam
  • #13 5790218
    Matkas
    Poziom 15  
    Tak, tyle że ja chcę uzyskać większą palete barw. Tutaj zawsze będą praktycznie te same kolory. Dlatego chciałbym użyc funkcji Rnd(liczba)
  • #14 5790293
    dawid512
    Poziom 32  
    No to robisz np. tak pwm1a= rnd(255).
  • #15 5790306
    Matkas
    Poziom 15  
    Robiłem, ale wtedy dioda miga a nie płynnie przechodzi:-)
REKLAMA