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

ATMEGA8: Jak uzyskać przesunięcie fazowe PWM o 120° dla diody RGB?

pawel3110 12 Maj 2007 20:26 2764 4
REKLAMA
  • #1 3877926
    pawel3110
    Poziom 15  
    Posty: 351
    Pomógł: 4
    Ocena: 25
    chce zrobić na ATMEGA8 efekt przejścia między 3 kolorami diody led RGB. Mam jednak problem, gdyż szukałem na forum, ale nie znalazłem informacji jak zrobić przesunięcie 3 kanału pwm o 120stopni. na 1 i 2 kanale dwa kolory na przemian zapalaja się i gasną, ale nie udało mi sie zrobić, żeby między nimi zapalała się także 3 dioda podpięta pod 3 kanał pwm.
    na razie mam taki program wydłubany gdzieś z forum:

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
    
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    
    Cursor Off
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8
    Config Timer2 = Pwm , Async = Off , Prescale = 8 , Pwm = On , Compare Pwm = Clear Down
    
    Dim I As Byte
    
    Do
    
    For I = 0 To 255
    Pwm1a = I
    Pwm1b = I
    Ocr2 = I
    Cls
    Lcd "I= ";I
    Waitms 10
    Next I
    
    For I = 255 To 0 Step -1
    Pwm1a = I
    Pwm1b = I
    Ocr2 = I
    Cls
    Lcd "I= " ; I
    Waitms 10
    Next I
    
    Loop
    
    End


    pwm1b zapala sie i gaśnie tak samo jak ocr2, jak zrobić to przesunięcie, czyli, że jak pwm1b będzie miało wartość 0 to ocr2 będzie go wyprzedzać o 128?
  • REKLAMA
  • REKLAMA
  • #3 3879285
    pawel3110
    Poziom 15  
    Posty: 351
    Pomógł: 4
    Ocena: 25
    Tak, ale to jest zbyt proste, gdyż I rośnie od 0 do 255 i następnie maleje do 0. W takim rozwiązaniu
    Ocr2 = I + 128
    gdy I= 128 i więcej, to ocr2 będzie 256 i więcej, a ma rosnąć też do 255 i maleć do 0 ale z przesunięciem właśnie o 128...

    ____________________

    pomyliłem się, gdy do 255 dodamy 1 to będzie 0 ale to tak mnie nie urządza:/
    nie wiem, czy zrozumiale opisałem to o co mi chodzi, ale nie wiem jak napisać algorytm w którym zmienna A startuje od 0 do 255 i od 255 do 0 a zmienna B od początku startuje od 128 do 255 od 255 do zera i od 0 do 255

    A 0-255, 255-0
    B 128-255, 255-0, 0-255

    obie zmienne muszą sie zmieniać o 1 w tym samym czasie...
    ktoś ma jakiś pomysł?
  • REKLAMA
  • Pomocny post
    #4 3880585
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    pawel3110 napisał:
    ...ktoś ma jakiś pomysł?

    Ja mam ;)
    Zamień miejscami linie konfigurujące timery i tuż po konfiguracji timerów dopisz linię

    Piotrek
  • #5 3881983
    pawel3110
    Poziom 15  
    Posty: 351
    Pomógł: 4
    Ocena: 25
    zumek- dzięki!;) niby banalne, ale jak sie dopiero zaczyna zabawę z bascomem, to nawet takie proste pomysły mogą się zablokować w umyśle;P

    Wszystko działa tak jak powinno, choć efekt końcowy nie wypadł tak dobrze jak sie tego spodziewałem... po prostu kolory podstawowe nie prezentują w pełni swoich wdzięków gdyż 2 pozostałe za mocno świecą...
REKLAMA