microC ile yazılmış yeni bir RGB projesi…


 RGB Şerit LED projesi
microC ile yazılmış yeni bir RGB projesi…

Artık heryerde kullanılan ve kullanımı hızla yayılan “şerit LED” deneme projem. Devremde microChip’in 16F84 uC’ünü kullandım. Devre 4 Mhz osilatör frekansında çalışyor. uC programı gene microC dili ile derlendi.
Şerit LED, olarak ortak anotlu, 12V gerilim ile çalışan, 5050 chipli(LED’li), metrede 60 LED bulunan silikonsuz şerit LED kullandım. Sadece 1 metre şerit LED sürdüğüm için pic’ in çıkışında BD135 kullandım ancak 5 metrelik standart uygulamalar için daha kuvvetli bir transistör kullanılmalı. Çünki şerit LED’in 14,4watt/metre gibi bir güç çektiğini varsayarsak, BD135 ancak 2 metreyi sağlıklı olarak çalıştırabilir.

 

Devrenin çalışması;
RA0 bitindeki buton ile switch case döngüsü içerisinde istenilen mod seçiliyor. RB0 kırmızı(red), RB1 yeşil(green), RB2 ise mavi(blue) çıkışı veriyor.

MODLAR;
RA0’a 1 kez basıldığında; KIRMIZI
RA0’a 2 kez basıldığında; YEŞİL
RA0’a 3 kez basıldığında; MAVİ
RA0’a 4 kez basıldığında; SARI
RA0’a 5 kez basıldığında; MOR
RA0’a 6 kez basıldığında; TURKUAZ
RA0’a 7 kez basıldığında; BEYAZ
RA0’a 8 kez basıldığında; RGB DÖNGÜSÜ
RA0’a 9 kez basıldığında; KAPATMA(!)

Devre Şeması;

RGB Şerit LED projesi

/*------------------------------------------*/
/*             RGB SERİT LED                */
/*             16-11-2011                   */
/*             mcu PIC16F84A                */
/*             PROJECT BY                   */
/*             ERKAN CIL                    */
/*             enjoy coding...              */
/*------------------------------------------*/
sbit colorRed at RA0_bit;
sbit colorGreen at RA1_bit;
sbit colorBlue  at RA2_bit;
sbit colorRed_Direction at TRISA0_bit;
sbit colorGreen_Direction at TRISA1_bit;
sbit colorBlue_Direction  at TRISA2_bit;

unsigned int i, i2, i3;
unsigned int T1, T2;
unsigned int Value1=3000;

void VDelay_us(unsigned time_us){
   unsigned n_cyc;
  n_cyc = Clock_MHz()>>2;
  n_cyc *= time_us>>4;
  while (n_cyc--) {
      asm nop;
      asm nop;
  }
}

void redToGreen(){
 T1 = Value1;
 T2 = 0;
for(i=0; i < Value1; i++){
if(PORTB < 2 ){
colorRed = 1;
VDelay_us(T1);
colorRed = 0;
colorGreen = 1;
Vdelay_us(T2);
colorGreen = 0;
T1 = T1-1;
T2 = T2+1;
}
else {i = Value1-1;}
}
}

void greenToBlue(){
 T1 = Value1;
 T2 = 0;
for(i=0; i < Value1; i++){
if(PORTB < 2 ){
colorGreen = 1;
VDelay_us(T1);
colorGreen = 0;
colorBlue = 1;
Vdelay_us(T2);
colorBlue = 0;
T1 = T1-1;
T2 = T2+1;
}
else {i = Value1-1;}
}
}

void blueToRed(){
 T1 = Value1;
 T2 = 0;
for(i=0; i < Value1; i++){
if(PORTB < 2){
colorBlue = 1;
VDelay_us(T1);
colorBlue = 0;
colorRed = 1;
Vdelay_us(T2);
colorRed = 0;
T1 = T1-1;
T2 = T2+1;
}
else {i = Value1-1;}
}
}

void rgbloop1(){
Value1 = 3000;
delay_ms(1000);
while(PORTB < 1 && i3<2){
colorRed = 1;
delay_ms(100);
colorRed = 0;
redToGreen();
colorGreen = 1;
delay_ms(100);
colorGreen = 0;
greenToBlue();
colorBlue = 1;
delay_ms(100);
colorBlue = 0;
blueToRed();
}
}

void main() {
TRISA = 0x00;
PORTA = 0x00;

TRISB = 0x01;
PORTB = 0x00;
Value1 = 3000;

i3 = 1;
do{
do{
if(RB0_Bit == 1){
delay_ms(1000);
if(RB0_Bit == 1){
i3 = i3+1;
if(i3 == 9){i3 = 1;}
}
}
}while(!RB0_Bit);
switch(i3){
case  1 :colorRed = 0; colorBlue = 0; colorGreen = 0; rgbloop1(); break;
case  2 : colorRed = 1; colorBlue = 0; colorGreen = 0; break;
case  3 : colorRed = 0; colorBlue = 0; colorGreen = 1; break;
case  4 : colorRed = 0; colorBlue = 1; colorGreen = 0; break;
case  5 : colorRed = 1; colorBlue = 0; colorGreen = 1; break;
case  6 : colorRed = 1; colorBlue = 1; colorGreen = 0; break;
case  7 : colorRed = 0; colorBlue = 1; colorGreen = 1; break;
case  8 : colorRed = 1; colorBlue = 1; colorGreen = 1; break;
}


Value1 = 3000;

redToGreen();

greenToBlue();

blueToRed();


}
while(1);
}

Çalışmanın Videosu;

  1. Henüz hiç yorum yok.
(yayınlanmayacak)