RGB LED Uygulaması
Merhaba arkadaşlar, bu yazımızda Trudyo Geliştirme Kartı ile RGB LED’lerin kullanımından bahsedeceğiz. Bununla birlikte, Trudyo Geliştirme Kartı ve 10mm RGB LED Modülü ile örnek bir uygulama gerçekleştireceğiz.
RGB LED'ler Hakkında Kısa Bir Bilgi
LED kısaltması İngilizce’de Light Emitting Diode yani Işık Yayan Diyot anlamına gelir. LED’ler, üzerinden akım geçtiğinde farklı renklerde ışık yayan küçük devre elemanlarıdır. RGB LED ise, 3 ana renkteki (R: Kırmızı, G: Yeşil ve B: Mavi) LED’lerin birleşiminden oluşan bir üründür. Bu LED türü sayesinde, tek bir LED ile 3 farklı renkte ışığı ayrı ayrı veya birlikte yakabilirsiniz. RGB LED’in pinlerini ve bu pinlerin fonksiyonlarını aşağıdaki tablo üzerinden inceleyebilirsiniz.
Pin No | İsim | Açıklama |
1 | R | Kırmızı LED Bağlantı Pini |
2 | (+) veya (-) | Ortak Bağlantı Pini |
3 | G | Yeşil LED Bağlantı Pini |
4 | B | Mavi LED Bağlantı Pini |
RGB LED ve Trudyo Geliştirme Kartı Bağlantısı
Yukarıda görüldüğü üzere RGB LED Modülü, Trudyo Geliştirme Kartı’nın D Portuna (D0: Kırmızı, D1: Yeşil ve D2: Mavi) bağlanmıştır.
Bu Uygulamada Kullanılan Malzemeler
400 Pin Orta Boy Breadboard
Trudyo Geliştirme Kartı
Başlamadan Önce
Trudyo Konfigürasyon Ayarları
Trudyo Geliştirme Kartı ile programlama yapabilmek için kartınızın konfigürasyon ayarlarını yapmanız gerekmektedir. Gerekli konfigürasyon ayarlarını yapmak için “Trudyo Konfigürasyon Ayarları” yazımızı okuyabilirsiniz.
RGB LED Uygulama Kodları
main.c
// Connections
sbit LED at LATA4_bit;
sbit LED_RED at LATD0_bit;
sbit LED_GREEN at LATD1_bit;
sbit LED_BLUE at LATD2_bit;
#include "rgb.c" // RGB LED Kutuphanesi
//Timer0
//Prescaler 1:1; TMR0 Preload = 136; Actual Interrupt Time : 10 us
void InitTimer0(){
T0CON = 0xC8;
TMR0L = 0x88;
GIE_bit = 1;
TMR0IE_bit = 1;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0L = 0x88;
//Enter your code here
RGB();
}
}
void main() {
TRISA=0b00000000;// [][][][LED][][][][]
TRISB=0b00000000;// [][][][][][][][]
TRISC=0b00000000;// [][][][][][][][]
TRISD=0b00000000;// [][][][][][LED_BLUE][LED_GREEN][LED_RED]
TRISE=0b00000000;// [][][][][][][][]
LATA=0x00;
LATB=0x00;
LATC=0x00;
LATD=0x00;
LATE=0x00;
// Tum cikislar dijital olarak ayarlaniyor
ADCON0=0x00;
ADCON1=0x00;
ADCON2=0x00;
ANSELA=0x00;
ANSELB=0x00;
ANSELC=0x00;
ANSELD=0x00;
ANSELE=0x00;
// Karsilastiricilar Kapatiliyor
C1ON_bit=0;
C2ON_bit=0;
InitTimer0(); // Timer0'i hazirla
InitRGB(COMMON_ANODE); // RGB LED'i hazirla
while(1){
SetRGB(255, 0, 0, 0); delay_ms(1000);
SetRGB(0, 255, 0, 0); delay_ms(1000);
SetRGB(0, 0, 255, 0); delay_ms(1000);
SetRGB(0, 0, 0, 0); delay_ms(1000);
SetRGB(213, 0, 0, 10); delay_ms(500);
SetRGB(197, 17, 98, 10); delay_ms(500);
SetRGB(170, 0, 255, 10); delay_ms(500);
SetRGB(98, 0, 234, 10); delay_ms(500);
SetRGB(48, 79, 254, 10); delay_ms(500);
SetRGB(41, 98, 255, 10); delay_ms(500);
SetRGB(0, 145, 234, 10); delay_ms(500);
SetRGB(0, 184, 212, 10); delay_ms(500);
SetRGB(0, 191, 165, 10); delay_ms(500);
SetRGB(0, 200, 83, 10); delay_ms(500);
SetRGB(100, 221, 23, 10); delay_ms(500);
SetRGB(174, 234, 0, 10); delay_ms(500);
SetRGB(255, 214, 0, 10); delay_ms(500);
SetRGB(255, 171, 0, 10); delay_ms(500);
SetRGB(255, 109, 0, 10); delay_ms(500);
SetRGB(221, 44, 0, 10); delay_ms(500);
SetRGB(0, 0, 0, 10); delay_ms(500);
}
}
rgb.c
/******************************************************************************/
/** **/
/** TRUDYO RGB LED LIBRARY **/
/** **/
/******************************************************************************/
// Constant Values
const unsigned short COMMON_CATHODE = 0;
const unsigned short COMMON_ANODE = 1;
// Global Declerations
unsigned short timerRGB=0;
unsigned short R=0;
unsigned short G=0;
unsigned short B=0;
unsigned short COMMON_TYPE=COMMON_ANODE;
void InitRGB(unsigned short type){
COMMON_TYPE=type;
switch(COMMON_TYPE){
case COMMON_CATHODE:
LED_RED = 0;
LED_GREEN = 0;
LED_BLUE = 0;
break;
case COMMON_ANODE:
LED_RED = 1;
LED_GREEN = 1;
LED_BLUE = 1;
break;
}
}
void SetRGB(unsigned short RED, unsigned short GREEN, unsigned short BLUE, unsigned int time){
while(R!=RED || G!=GREEN || B!=BLUE){
if(RRED) R--;
if(GGREEN) G--;
if(BBLUE) B--;
vdelay_ms(time);
}
}
void RGB(){
if(timerRGB==0){
switch(COMMON_TYPE){
case COMMON_CATHODE:
if(R) LED_RED = 1;
if(G) LED_GREEN = 1;
if(B) LED_BLUE = 1;
break;
case COMMON_ANODE:
if(R) LED_RED = 0;
if(G) LED_GREEN = 0;
if(B) LED_BLUE = 0;
break;
}
}
switch(COMMON_TYPE){
case COMMON_CATHODE:
if(timerRGB==R && R<255) LED_RED = 0;
if(timerRGB==G && G<255) LED_GREEN = 0;
if(timerRGB==B && B<255) LED_BLUE = 0;
break;
case COMMON_ANODE:
if(timerRGB==R && R<255) LED_RED = 1;
if(timerRGB==G && G<255) LED_GREEN = 1;
if(timerRGB==B && B<255) LED_BLUE = 1;
break;
}
timerRGB++;
}
RGB LED Bağlantı Kodları
Bir RGB LED’in kütüphanesini kullanabilmek için, program kodumuzun en başında bulunması gereken bağlantı tanımlamaları aşağıdaki gibi olmalıdır.
sbit LED_RED at LATD0_bit;
sbit LED_GREEN at LATD1_bit;
sbit LED_BLUE at LATD2_bit;
#include "rgb.c" // RGB LED Kutuphanesi
RGB LED Kütüphanesi
InitRGB Fonksiyonu
void InitRGB(unsigned short type);
RGB LED modülünü başlatır. Pin tanımlamaları yapıldıktan sonra ana fonksiyonda RGB LED’i kullanmaya başlamadan önce kullanılmalıdır.
Parametreler: type:
RGB LED’in ortak anot veya ortak katot seçimini yapmak için kullanılır.
Ortak Anot RGB LED için InitRGB(COMMON_ANODE)
, Ortak Katot RGB LED için InitRGB(COMMON_CATHODE)
kullanılır.
SetRGB Fonksiyonu
void SetRGB(unsigned short RED, unsigned short GREEN, unsigned short BLUE, unsigned int time)
RGB LED’in istenilen renkte ışık yaymasını sağlamak için kullanılır.
Parametreler: RED:
Kırmızı LED renk değeri GREEN:
Yeşil LED renk değeri BLUE:
Mavi LED renk değeri time:
Renk değişim hızı (ms)
RGB LED’in kırmızı renkte ışık yaymasını sağlamak için, SetRGB(255,0,0,5);
kod bloğu kullanılır. Burada ilk parametre kırmızı LED değeri ve son parametre ise değişim zamanı değeridir. Bu kod çalıştığında, kırmızı LED değeri ilk değeri olan 0 değerinden son değeri olan 255 değerine kadar her bir değer artışı arasında 5ms bekleyecek ve yavaş yavaş yanacaktır.
Eğer kırmızı LED’in hemen yanmasını istiyorsak, zaman değerini 0 olarak ayarlamamız yani SetRGB(255,0,0,0
);
komutunu kullanmamız yeterlidir.
RGB Fonksiyonu
void RGB();
RGB LED’in çalışmasını organize eden fonksiyondur. 10us değerinde bir Timer Kesme fonksiyonu içerisine yazılması gerekmektedir.
mikroC'de Timer Kullanımı
mikroC programlama dili için timer kullanımı oldukça kolaydır. Bunun için ilk yapmanız gereken TimerCalculator uygulamasını kurmaktır.
Uygulamayı kurduktan sonra uygulamayı çalıştırıp sırayla;
- Hangi mikrodenetleyiciyi kullanacağınızı seçin.
- Kullandığınız mikrodenetleyici çalışma frekansını seçin.
- Hangi zamanlayıcı birimini kullanacağınızı seçin.
- İhtiyacınız olan kesme zamanını seçin.
Tüm bunları yaptıktan sonra, Calculate butonuna basarak aşağıdaki gibi gerekli kod bloklarını oluşturabilirsiniz.
//Timer0
//Prescaler 1:1; TMR0 Preload = 136; Actual Interrupt Time : 10 us
//Place/Copy this part in declaration section
void InitTimer0(){
T0CON = 0xC8;
TMR0L = 0x88;
GIE_bit = 1;
TMR0IE_bit = 1;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0L = 0x88;
//Enter your code here
}
}
void main(){
InitTimer0();
while(1){
}
}
Bu kod bloğu main()
fonksiyonunun üzerinde bulunmalı ve InitTimer0()
fonksiyonu main()
fonksiyonu içerisinde çağırılmalıdır. Daha sonra, Interrupt()
fonksiyonu içerisinde //Enter your code here
olarak belirtilen konuma istediğiniz program kodlarını yazabilirsiniz.
Uygulamaya ait dosyaları buraya tıklayarak indirebilirsiniz. Merak ettiğiniz ve aklınıza takılan soruları aşağıda 👇 yorum olarak bize iletebilirsiniz. İyi çalışmalar. 🙂 #geliştirmeyebaşla
Yorum yapmak için giriş yapmalısınız.