Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Bascom/c]Attiny2313 / Diody Led PWM

korexus 30 Nov 2009 18:08 3702 3
  • #1
    korexus
    Level 11  
    Witam, mam problem gdyż potrzebuję w tym samym czasie zmieniac wartość pwm wszystkich 4rech wyjsc i zmieniac stan 2 wyjsc...
    Sprawa wyglada nastepująco:
    2 diody gasna 2 zapalaja się a w tym czasie jeszcze 2 mają migać co 2 sekundy...
    Z programowania dobry nie jestem... narazie udalo mi sie napisac programy które robią te czynności ale nie jednoczesnie... Nie mam pomysłu jakbym mógł to zrobić.
    Proszę o wyrozumiałość i pomoc.
    KoreXus
  • #2
    korrus666
    Level 40  
    Musisz przemyśleć algorytm działania programu. Po pierwsze te mrugające diody zrób na przerwaniach z jakiegoś timera. Ustaw przerwanie tak żeby występowało kilka razy na sekundę i zliczaj ilość przerwań do 2 sekund i raz zapalaj raz gaś to bardzo proste do zrobienia. Co do pozostałych to attiny ma 4 kanały PWM a z tego co zrozumiałem to wystarczą ci dwa. Jeśli 2 gasną równo a dwie w tym czasie się zapalają to wystarczy dla tych kanałów ustawić różne wartości początkowe i wystartować timery w trybie PWM. Jeden zaczynasz od max a drugi od min i już będą zmieniały jasność na przemian. Wartości PWM możesz zmieniać w tym samym przerwaniu co zapalanie i gaszenie diod.
  • #3
    korexus
    Level 11  
    Jeżeli chodzi o PWM -
    wszystkie 4ry wyjścia mam zajęte ponieważ są po 2 pary diod gasnących i zapalających się.
    Napisałem o 1 parze bo to w sumie nie będzie duża różnica w kodzie.
    Jeśli chodzi o PWM mam to rozwiązane tak:
    
    For Zn = 0 To 255
     Pwm0b = Zn
     Waitms 15
     Next Zn
    
      For Nn = 0 To 255
     Pwm0a = Nn
     Waitms 15
     Next Nn
    
     For Zn = 255 To 0 Step -1
     Pwm0b = Zn
     Waitms 10
     Next Zn
    
      For Nn = 255 To 0 Step -1
     Pwm0a = Nn
     Waitms 10
     Next Nn
    

    tylko jak do tego teraz dodać miganie innych diod?
    Nie mogę sobie tego wyobrazić...
    Jeśli ktoś mógłby rzucić jakiś drobny przykład byłbym wdzięczny.
    Konfiguracja wygląda tak:
    'sw PD.4
    'zielone serce  PA.1
    'niebieskie serce   PA.0
    'kc   PD.2
    'zielony napis PD.5 (Pwm0b)
    'niebieski napis  PB.2(Pwm0a)
    'prawe serce PB.4 (Pwm1a)
    'lewe serce  PB.3(Pwm1b)
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config Porta.0 = Output
    Set Porta.0
    Config Porta.1 = Output
    Set Porta.1
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Portd.2 = Output
    Reset Portd.2
    Config Portd.5 = Output
    Config Pind.4 = Input
    Set Pind.4
    Declare Sub Serce
    Declare Sub Napis
    Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
     Dim Zn As Byte
     Dim Nn As Byte
     Dim Ps As Byte
     Dim Ls As Byte
    

    A pwm obsługuję w pętli głównej jak na razie...
  • #4
    korexus
    Level 11  
    Czy jest mozliwosc wykorzystania timera do przerwania oraz pwm?
    potrzebuje 4 kanaly PWM+ wykorzystac przepelnienie timera do przerwania.

    Pozdrawiam