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

Sterowanie PWM Atmega 32. Oświetlenie w aucie.

jarecki1989 26 Wrz 2010 15:50 1671 3
REKLAMA
  • #1 8552653
    jarecki1989
    Poziom 24  
    Witam, chciałem napisać prosty program w bascomie do sterowania oświetleniem w moim samochodzie. Chodzi o to aby po otwarciu lewych drzwi zaświeciła się od dołu biała listwa LED ma ona jednak robić to powoli dlatego korzystam ze sterowania PWM. Chodzi jednak o to że jak lewe drzwi to lewa listwa jak prawe to prawa. Napisałem program jak niżej:

    Do
    
    
    If S1 = 0 Then
    
    If B = 0 Then
       B = 1
    
    For I = 0 To 255
    
       Pwm1a = I
       Waitms 50
       Next I
    
    End If
    End If
    
    If S1 = 1 Then
        
        B = 0
        Pwm1a = 0
    
    End If
    
    If S2 = 0 Then
    
    If C = 0 Then
    
        C = 1
    
    
    For J = 0 To 255
    
       Pwm1b = J
       Waitms 50
       Next J
    
    End If
    End If
    
    If S2 = 1 Then
        
        C = 0
        Pwm1b = 0
    
    End If
    
    Loop


    Problem jest w momencie kiedy otwieram dwoje drzwi na raz ... Wtedy dopóki nie rozświetlą się jedne to nie zaświecą się drugie wiem czym to jest spowodowane ale nie wiem jak sobie z tym pradzic. Proszę o pomoc zaznaczam że programować dopiero zacząłem. Z góry dziękuje za pomoc.
  • REKLAMA
  • #2 8552757
    Ilmarinen
    Poziom 14  
    problem w tym że masz po sobie 2 pętle for rozjaśniające ledy w głównej pętli programu. Najpierw wykonuje się pierwsza potem druga. Druga rzecz to stosowanie jako opóźnienia funkcji waitms która zatrzymuje prace mikrokontrolera.
    Proponuje użyć timera który będzie generował przerwanie po przepełnieniu licznika np co 20ms. Potem jeżeli drzwi sa otwarte zliczasz ilość wywołania tego przerwania do puki nie osiągnie ona wartości 255 co wyłączy zliczanie. Wystarczy do tego 1 timer.

    Dodano po 2 [minuty]:

    Jeszcze jedna sugestia, aby kod był bardziej czytelny stosuj wcięcia i komentarze. Nie zawadziło by umieścić kodu w znacznikach Code do tego przeznaczonych.
  • REKLAMA
  • #3 8552802
    jarecki1989
    Poziom 24  
    Problem w tym ze nie wiem jak to zrobić :) Jeszcze troche za trudne to dla mnie. Może napisałbyś jakiś fragment kodu ?
  • #4 8553343
    Ilmarinen
    Poziom 14  
    
    connfig timer0 = timer , prescale = 64
    
    dim i as byte,j as byte
    dim s1 as bit
    
    on timer0 czas
    
    enable interupts
    enable timer0
    
    do
       //tu wstawiasz obsługe przycisków
       //iustawienie s1 w zależności czy drzwi sa otwarte s1 = 1 czy zamknięte s1=0
    loop
    end 'program
    
    czas:   //ten podprogram wywoływany jest co x ms
            //w zależniści od prescale i częstotliwości kwarcu
      if s1=1 then
         incr(i)
         pwm1a = i		
      end if
    	
      if i=255 then
    	s1=0;
      end if	
    
    return
      


    to nie jest sprawdzony kod ale mniej więcej tak mogłoby to wyglądać do ustawienia odpowiedniego czasu pomocny będzie programik kalkavr
    musisz sie zaznajomi c z obsługa timerów polecam mikroprocesorowa ośla łączką
REKLAMA