Dioda RGB + pilot RC5 problem


Witam.Posiadam kod do sterowania diodą rgb przez pilota rc5.W pierwotnej wersji był on pod Atmege8,ale że posiadam atmege32 zdeklarowałem listing pod ten układ.Problem polega na tym iż świecą się trzy kolory jednoczęśnie i żadnej reakcji,czy ktoś może sprawdzić czy kod jest poprawny?.I jeszcze jedno czy Tranzystor BD136 wystarczy do wysterowania kolorami diody mocy 1W (teoretycznie powinno wystarczyć bo bd136 jest 12,5 Watowy) ale jak z grzaniem tranzystora?

$regfile = "m32def.dat"
 
$crystal = 16000000
 
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Down , Prescale = 1
 
Pwm1a = 255
Pwm1b = 255
Ocr2 = 255
 
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim I As Byte
 
Config Int0 = Low Level
Config Rc5 = Pind.2
On Int0 Pobr_rc5
 
Dim Address As Byte
Dim Address1 As Byte
Dim Command As Byte
Dim Command1 As Byte
 
 
Enable Interrupts
Enable Int0
Address1 = 255
Command1 = 255
Cls
 
 R = 255
     G = 255
     B = 255
 
 
Do
 
     Locate 1 , 1
Lcd "Adres:   " ; Address1 ; "        "
Locate 2 , 1
Lcd "Komenda: " ; Command1 ; "        "
 
 Enable Int0
 Select Case Command1
 Case 1 :
   R = 170
   G = 255
   B = 255
   Pwm1a = R
   Pwm1b = G
   Ocr2 = B
 
 Case 2 :
   G = 50
   R = 255
   B = 255
   Pwm1b = G
   Pwm1a = R
   Ocr2 = B
 
 Case 3 :
   B = 50
   R = 255
   G = 255
   Ocr2 = B
   Pwm1a = R
   Pwm1b = G
 
 Case 4 :
   R = 170
   G = 50
   B = 255
   Pwm1a = R
   Pwm1b = G
   Ocr2 = B
 
 Case 5 :
   R = 170
   G = 255
   B = 50
   Pwm1a = B
   Pwm1b = G
   Ocr2 = B
 
 Case 6:
 R = 255
 G = 50
 B = 50
   Pwm1a = R
   Pwm1b = G
   Ocr2 = B
 
Case 7:
   Pwm1a = 170
   Pwm1b = 50
   Ocr2 = 50
 
Case 8 :
   Pwm1a = 255
   Pwm1b = 255
   Ocr2 = 255
 
   For Pwm1a = 254 To 170 Step -1
   Waitms 40
   R = Pwm1a
   If Command1 <> 8 Then
   Exit For
  End If
   Next Pwm1a
 
  For Pwm1a = 170 To 254 Step 1
   Waitms 40
   R = Pwm1a
   If Command1 <> 8 Then
   Exit For
  End If
   Next Pwm1a
 
   For Pwm1b = 254 To 50 Step -1
   Waitms 17
   G = Pwm1b
   If Command1 <> 8 Then
   Exit For
  End If
  Next Pwm1b
 
  For Pwm1b = 50 To 254 Step 1
   Waitms 17
   G = Pwm1b
   If Command1 <> 8 Then
   Exit For
  End If
   Next Pwm1b
 
 
       For Ocr2 = 254 To 50 Step -1
   Waitms 17
   B = Ocr2
   If Command1 <> 8 Then
   Exit For
  End If
  Next Ocr2
 
  For Ocr2 = 50 To 254 Step 1
  B = Ocr2
   Waitms 17
 
   If Command1 <> 8 Then
   Exit For
  End If
   Next Ocr2
 
 
 Case 9:
 
 
     R = Rnd(84)
     R = R + 170
     G = Rnd(204)
     G = G + 50
     B = Rnd(204)
     B = B + 50
 
 
     For I = 0 To 100
 
     Pwm1a = R
     Pwm1b = G
     Ocr2 = B
      Waitms 40
       If Command1 <> 9 Then
        Exit For
         End If
      Next
 
 Case 32:
      If R = 170 Then
      R = 171
      End If
      R = R - 1
       Command1 = 100
 
 Case 33:
      If R = 255 Then
      R = 254
      End If
      R = R + 1
      Command1 = 100
 
 
 Case 16:
      If G = 50 Then
      G = 51
      End If
      G = G - 1
       Command1 = 100
 
 Case 17:
      If G = 255 Then
      G = 254
      End If
      G = G + 1
      Command1 = 100
 
 
 Case 22:
      If B = 50 Then
      B = 51
      End If
      B = B - 1
       Command1 = 100
 
 Case 21:
      If B = 255 Then
      B = 254
      End If
      B = B + 1
      Command1 = 100
 
 
 Case 12:
   R = 255
     G = 255
     B = 255
   Pwm1a = R
   Pwm1b = G
   Ocr2 = B
 
Case 100:
     Pwm1a = R
     Pwm1b = G
     Ocr2 = B
 
 
 
  End Select
 
Loop
End
 
Pobr_rc5:
 Disable Int0
 Enable Interrupts
 Getrc5(address , Command)
 Command = Command And &B01111111
   If Address < 255 Then
      Address1 = Address
      Command1 = Command
   End If
Return




Portret użytkownika mirley

Re: rgb

Wydaje mi się że w kodzie brakuje Ci komend od włączenia timerów, gdzie masz enable timer1 lub enable timer2. Poza tym M32 musi mieć ustawione fusebity na kwarc 16MHz i wyłączony dzielnik częstotliwości.

Tranzystory lepiej daj mosfety, ten bd może się trochę nagrzewać podczas pracy a typowy mosfet da sobie radę.... dioda jest ze wspólną katodą czy anodą?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Manio

rgb

Fusebity mam ustawione tak:hFuse D0(zero),iFuse EF.A jak dziennik częstotliwości wyłączyć?A co do tranzystorów to Buz11 bedzie ok?Diode mam ze wspólną anodą,tylko takie stosuje, bo wydaje mi sie że lepiej wysterować diode ze wspólną anodą.A enable timer no racja,kurcze takie coś mi umknęło.

-

Manio

Portret użytkownika mirley

Re: RGB

Fusebity mają być ustawione tak:

HFUSE = C9
LFUSE = FF

innych ustawień nie ma, to załatwi wszystko

Mosfet może być BUZ11 i diody ze wspólną anodą. Lub jakis mosfet z kanałem P i diody ze wspólną katodą, nie ma to wiekszego znaczenia w tym przypadku

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.