1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
Nis
23rd

Software PWM ile RGB LED

Bildiğiniz üzere 16f877 gibi yaygın kullanılan pic’lerde içerisinde timer2 ile kontrol edilen 2 adet pwmyer almaktadır. İhtiyaca göre, örneğin bir RGB led projesinde 3 veya daha fazla pwm çıkışı gerkebilir. Bu gibi durumlarda çözüm olarak timer1 kullanarak kullanıcının seçeceği pinler belli sürelerde on/off yapılarak gerçek br pwm sinyalinin nasıl elde edileceği aşağıdaki kodda verilmiştir.


*Burada verilen kodda timer1 ile 25.8kHz’de gerçekleşen interrupt sayesinde 256 adımlık 100Hz PWM sinyali üretilmiştir.
for döngüsü içerinde yapılacak kontrol ve güncelleme ile red_duty, green_duty, blue_duty değerleri değiştirilerekaşağıdaki gibi çok çeşitli renkler elde edilebilir.
Aşağıdaki örnekte her 100ms de bir üç ana rengin değerleri değiştirilerek rastgele çok çeşitli renkler elde edilebilir.

//**************************************
// Andre Broodryk
// Led fader
// 2006/07
//************************************** 

#include <16F917>
#fuses INTRC_IO,NOPROTECT,NOWDT,PUT
#use delay(clock=8000000)
#include 
#define RAND_MAX 255
#use standard_io(d)
#define preload 65458
#define red pin_d0
#define green pin_d1
#define blue pin_d2 

//Global variables 

int red_duty;
int green_duty;
int blue_duty;
int Intcount; 

//100Hz pwm (interupt at 25.8kHz) 

#INT_TIMER1
void timer_irq()
{
set_timer1(preload);
if (Intcount < 255)
{
if (Intcount == red_duty)
{
output_low(red);
}
if (Intcount == green_duty)
{
output_low(green);
}
if (Intcount == blue_duty)
{
output_low(blue);
}
} 

else if(Intcount == 255)
{
Intcount = 0;
output_high(red);
output_high(green);
output_high(blue);
}
Intcount++;
} 

//**********************************************
// Main Program
//********************************************** 

void main()
{
setup_oscillator(OSC_8MHZ);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
red_duty = 63;
green_duty = 1;
blue_duty = 250;
Intcount = 0; 

for (;;)
{
red_duty = rand();
green_duty = rand();
blue_duty = rand();
Intcount = 0;
delay_ms(100); 

}
}


Benzer Yazılar


5 Yorum “Software PWM ile RGB LED”

  1. Eser Onur Erdoğan Ara 13, 2009

    2 kanal pwm çıkışı olan bir pic ile rgb (üç ayrı ledin parlaklığını nasıl ayarlayabiliriz? Biaraz daha açık bir şekilde yardımcı olabilirseniz sevinirim.

  2. admin Ara 14, 2009

    Piyasada bulunabilen pic16f777 kullanınız.

  3. mustafa Ara 19, 2009

    merhaba peki sinyali keypadile nasıl kullanabilirim bilgi verirseniz sevinirim

  4. Eser Onur Erdoğan Ara 20, 2009

    Piyasada 7.. yüz ile başlayan pic’leri bulamıyorum. Özellikle bulabileceğim bir yer bilen varmı.

  5. admin Ara 21, 2009

    istanbuldaysanız karaköydeki elektronikçilerde bulabilirsiniz.
    Konuyla ilgiliyseniz http://www.digitalruh.com sitesinde uzaktan kumandalı uygulama yer almakta

Yorum yapın