rgb şerit led isteği

Başlatan sahinler64, 17 Mart 2012, 16:33:05

sahinler64

merhabalar. ete hocam bir konuda yardıma ihtiyacım var. eğer yanıtlarsan sevinirim. ete hocam piyasadaki rgb şerit ledleri 16f684 veya 16f628 picleriyle yakıp söndürebilirmiyiz. yani animasyon renk değişimi vs. gibi işlemleri yapabilirmiyiz. biraz araştırma yaptım pic12f675 le yapılanları var. ama ya kod yok yada pbp ile yazılanı yok. bu konu hakkında biraz bilgiye, biraz daha çok yardıma ihtiyacım var. ilgilenip yardımcı olmanızı bekliyorum. saygılarımla...

pwm.c

burada 16f628 ile yapılmış bir devre var
http://www.electronics-lab.com/projects/games/005/index.html
rgb şerit sürmede kullanabilirsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ete

RGB şerit ledler de bir ortak uç (+12V) bir R (kırmızı) ucu bir G (Yeşil)  ucu ve birde B (Mavi)  ucu bulunmaktadır.  Uçların açıklamalarından da anlaşılacağı üzere ortak uca +12V verip  renk uçlarında bir PWM devresi üzerinden GND sağlarsanız sistem istediğini şekilde çalışır. Tabiiki iin doğrusu 3 adet PWM çıkışı olan bir devre yapmanızdır. Bunu yazılımla yapabileceğiniz gibi donanımsal olarak 3 PWM çıkışı olan bir pic (16F777) kullanarakda yapabilirsiniz. Gerisi artık sizin hayal gücünüze kalmıştır. Bu tür sistemlerde ara geçişlerde bir renk cümbüşü pek çıkmamaktadır. En ideal renkler maksimum PWM değerleri ile Min PWM değerleri arasında yakalanmaktadır.

Şerit ledler genelde 3 erli guruplar halinde paralel bağlandıkları için pic pini direk olarak şerit ledi süremez.
Arada mutlaka bir transistör yada ULN serisinden bir entegre kullanılması gerekir . Bunu ihmal etmeyin.

Ete



mitec

#3
ne kadar oldu bilmiyorum ama çok eskiden yaptığım rgb animasyon programı.şimdi yeniden inceledim de program yazma mantığım bayağı bi kötüymüş... herhalde ilk zamanlar yaptığım çalışmalardan birisi istersen üzerinde biraz oynama yaparak daha güzel hale getirebilirsin.yinede bu haliylede oldukça güzel çalışıyor.


'****************************************************************
@   device  pic12F675, intrc_osc_noclkout, wdt_off, pwrt_on, mclr_off, protect_on
'---------------------------------------------------------------------------------
DEFINE OSC 4
DEFINE OSCCAL_1K 1 
DEFINE OSC 4
CMCON = 7
ansel=0
TRISIO=%101000
'-------------------------------------------------------------------------
     duty VAR BYTE
     bekle VAR BYTE
     a VAR BYTE
     hiz VAR BYTE
     but VAR BYTE
     sayi VAR BYTE
     z VAR BYTE
'------------------------------------------------------------------------
mavi VAR GPIO.0
kirmizi VAR GPIO.1
yesil VAR GPIO.2
kirmizi=1:mavi=1:yesil=1
'------------------------------------------------------------------------
Read 0,but
IF but=255 Then but =0
'------------------------------------------------------------------------
ana:
IF but=0 Then GoTo basla
IF but=1 Then hiz=1:Call bir
IF but=2 Then Call iki
IF but=3 Then Call uc
IF but=4 Then hiz=5:Call bir
IF but=5 Then sayi=4:Call ortak
IF but=6 Then sayi=5:Call ortak
IF but=7 Then sayi=6:Call ortak
IF but=8 Then sayi=7:Call ortak
IF but=9 Then sayi=8:Call ortak
IF but=10 Then sayi=9:Call ortak
IF but=11 Then sayi=10:Call ortak
IF but=12 Then Call onbir
IF but=13 Then Call oniki
IF but=14 Then Call onuc
IF but=15 Then Call ondort
IF but=16 Then bekle=35:Call onbes
'IF but=17 Then Call onalti
GoTo ana
basla:
hiz=1:Call bir
Call iki
Call uc
hiz=5:Call bir
sayi=4:Call ortak
sayi=5:Call ortak
sayi=6:Call ortak
sayi=7:Call ortak
sayi=8:Call ortak
sayi=9:Call ortak
sayi=10:Call ortak
Call onbir
Call oniki
Call onuc
Call ondort
bekle=35:Call onbes
'Call onalti
GoTo basla
'------------------------------------------------------------------------
bir:
    For duty=255 to 0 step-1
   PWM kirmizi,duty,hiz
   Call butonbak
    Next duty
   
    Low GPIO.1
    For duty=255 to 0 step-1
   PWM yesil,duty,hiz
   Call butonbak
    Next duty
   
    Low GPIO.2
    For duty=0 to 255
   PWM kirmizi,duty,hiz
   Call butonbak
    Next duty
    High GPIO.1:Low GPIO.2

    For duty=255 to 0 step-1
   PWM mavi,duty,hiz
   Call butonbak
    Next duty
    Low GPIO.0
   
    Low GPIO.2
    For duty=0 to 255
   PWM yesil,duty,hiz
   Call butonbak
    Next duty
    Low GPIO.0:High GPIO.2
   
    For duty=255 to 0 step-1
   PWM kirmizi,duty,1
   Call butonbak
    Next duty
    Low GPIO.1

    For duty=0 to  255
   PWM mavi,duty,hiz
   Call butonbak
    Next duty
    Low GPIO.1:High GPIO.0
   
    For duty=255 to 0 step-1
   PWM yesil,duty,hiz
   Call butonbak
    Next duty
    Low GPIO.1:Low GPIO.2
   
    For duty=255 to 0 step-1
   PWM mavi,duty,hiz
   Call butonbak
    Next duty
    Low GPIO.0:Low GPIO.1:Low GPIO.2
    Pause 200
    High GPIO.0:High GPIO.1:High GPIO.2     
    Return
   
iki:
For bekle=200 to 100 step-5
mavi=0:kirmizi=0:yesil=0
Pause bekle
Call butonbak
mavi=0:kirmizi=1:yesil=1
Pause bekle
Call butonbak
mavi=1:yesil=0:kirmizi=1
Pause bekle
Call butonbak
mavi=1:yesil=1:kirmizi=0
Pause bekle
Next bekle
Call butonbak
Return
uc:
For a=0 to 7
For bekle=0 to 8
mavi=0:kirmizi=1:yesil=1:Pause 25
mavi=1:kirmizi=1:yesil=1:Pause 25
Call butonbak
Next bekle
For bekle=0 to 8
mavi=1:kirmizi=0:yesil=1:Pause 25
mavi=1:kirmizi=1:yesil=1:Pause 25
Call butonbak
Next bekle
Next a
Return
ortak:
For a=0 to 100
IF sayi=4 Then GPIO=24
IF sayi=5 Then GPIO=30
IF sayi=6 Then GPIO=29
IF sayi=7 Then GPIO=27
IF sayi=8 Then GPIO=26
IF sayi=9 Then GPIO=25
IF sayi=10 Then GPIO=28
Call butonbak
Pause 40
Next a
Return
onbir:
For bekle=0 to 5
For a=0 to 4
GPIO=30:Pause 20:GPIO=31:Pause 20
Next a
Call butonbak
For a=0 to 4
GPIO=29:Pause 20:GPIO=31:Pause 20
Next a
For a=0 to 4
GPIO=27:Pause 20:GPIO=31:Pause 20
Next a
For a=0 to 4
GPIO=26:Pause 20:GPIO=31:Pause 20
Next a
Call butonbak
For a=0 to 4
GPIO=25:Pause 20:GPIO=31:Pause 20
Next a
For a=0 to 4
GPIO=28:Pause 20:GPIO=31:Pause 20
Next a
Next bekle
Return
oniki:
     High GPIO.0:High GPIO.1:High GPIO.2
       For duty=255 to 0 step-1
     PWM GPIO.0,duty,4
     Call butonbak
    Next duty
   
    For duty=0 to 255
     PWM GPIO.0,duty,4
     Call butonbak
    Next duty
   
    Return
onuc:
     High GPIO.0:High GPIO.1:High GPIO.2
       For duty=255 to 0 step-1
     PWM GPIO.1,duty,4
     Call butonbak
    Next duty
   
    For duty=0 to 255
     PWM GPIO.1,duty,4
     Call butonbak
    Next duty
   
    Return
ondort:
GoSub hep
       For duty=255 to 0 step-1
     PWM GPIO.2,duty,4
     Call butonbak
    Next duty
   
    For duty=0 to 255
     PWM GPIO.2,duty,4
     Call butonbak
    Next duty
   
    Return
onbes:
For z=0 to 10
bekle=bekle-5
IF bekle<10 Then bekle=8
For a=0 to 50
Low GPIO.0
Call butonbak
Pause bekle
Next a

For a=0 to 50
High GPIO.0:Low GPIO.1
Call butonbak
Pause bekle
Next a

For a=0 to 50
High GPIO.1:Low GPIO.2
Call butonbak
Pause bekle
Next a
High GPIO.2
Next z
Return
'-------------------------------------------------------------

' animasyonlar terslenerek yapıldı o yüzden 16. animasyon programa sığmıyor
'onalti:
' For bekle=0 to 5
' For a=0 to 7
' GPIO=7-a
' Call dur
' Call butonbak
' Next a

' For a=7 to 0 step-1
' GPIO=7-a
' Call dur
' Call butonbak
' Next a
' Next bekle

' Return
dur:
Pause 200
Return
butonbak:
IF GPIO.3= 1 Then Call yap
Return
yap:
GoSub hep
Pause 1000
but=but+1
IF but=17 Then but=0
Write 0,but
GoTo ana
hep:
High GPIO.0:High GPIO.1:High GPIO.2
Return
               end






ledleri mosfetle sürmüştüm.fakat 3m ledten fazlası ısınma yapıyordu.bende mosfetlerin girişini sanırım 4.7k ile + da tuttmuştum. yani pic çıkışı 1 iken mosfet kesimde 0 iken mosfet yalıtımda oluyordu.(tabi arada birde npn transistör var)böylece mosfetin ısınmasınıda engellemiştim.yanılmıyorsam 15m rgb ledle denemiştim.hiç bi sorun çıkmamıştı
gp3 ve gp5 teki direçler direnç değil buton birisi hız biriside animasyon seçim butonu çizime direnç gibi koymuşum elimde minik butonlar vardı sanırım smd direç yerine tam oluyordu onun için.
eagle çizimide aşağıda

sahinler64

hepinize ayrı ayrı teşekkür ederim. allah razı olsun

Powered by EzPortal