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 przesunięcie fazowe pwm bascom- jak?

pawel3110 12 Maj 2007 20:26 2398 4
  • #1 12 Maj 2007 20:26
    pawel3110
    Poziom 15  

    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:

    Code:
    $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?

    0 4
  • #3 13 Maj 2007 09:15
    pawel3110
    Poziom 15  

    Tak, ale to jest zbyt proste, gdyż I rośnie od 0 do 255 i następnie maleje do 0. W takim rozwiązaniu

    Code:
    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ł?

    0
  • Pomocny post
    #4 13 Maj 2007 16:21
    zumek
    Poziom 39  

    pawel3110 napisał:
    ...ktoś ma jakiś pomysł?

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

    Tcnt2=128

    Piotrek

    0
  • #5 13 Maj 2007 22:30
    pawel3110
    Poziom 15  

    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ą...

    0