Energia ile MSP430G2553 Uygulama Örnekleri



energiaLogo
Bir önceki makalemizde Energia programının genel yordamı hakkında bilgi vermiş, ve klasik örnek olan Flaşör(Blink) uygulamasını gerçekleştirmiştik. Bu makalemizde ise Energia ile programlamayı biraz daha pekiştirmek adına, Muhammed Fatih İNANÇ tarafından geçen yıl gerçekleştirilen beş örneği Energia ile yazıp gerçekleştireceğiz.

Bu örnekler:

1- Karaşimşek LED Uygulaması

2- Buton LED uygulaması

3- Röle Kontrol Uygulaması

4- 7 Segment Uygulaması

5 – 2×16 Karakter Uygulaması

Bu uygulamaları gerçekleştirirken, MSP430G2533  LauncPad ve Çizgi-Tagem tarafından üretilen MSP430 Geliştirme Kartını (BaseBoard) kullanacağız. Uygulamalar ile açıklamalar “Program Kodu” ekranındaki, program kodları arasındaki yorum satırlarında yapılmıştır. Daha fazla bilgi veya sorularını için yorum yapabilir ya da e-posta gönderebilirsiniz.

1-      Karaşimşek LED Uygulaması

Bu örnek uygulamada, Geliştirme Kartı üzerinde bulunan MSP430G2553 LaunchPad’in P1 ve P2 portundaki pinlere  bağlı olan  16 LED sırası ile ileri-geri yönünde yakılıp söndürülecektir.

karasimsek

Görsel Fritzing programı ile oluşturulmuştur.

karasimsek_sema

Görsel Fritzing programı ile oluşturulmuştur.

karasimsek

Karaşimşek Uygulaması

/* 
MSP430G2553 LaunchPad Karaşimşek Uygulaması 
Bu örnek uygulamada, MSP430 LaunchPad kartının P1 ve P2 portu 
pinlerine bağlı LED’lerin sıra ile ileri/geri yanması gerçekleştirilecektir. 
 
Devre bağlantıları: 
LED’ler P1 ve P2 portu pinleri ile toprak arasında bağlıdır. 
 
Erkan Çil tarafından 27 Aralık 2013 tarihinde oluşturulmuştur.
 
Bu örnek uygulama kodu açık kaynaktır. 
*/
 
//pinlerin LEDpin [16] elemanlı değişkeni içerisinde tanımlanması:
byte LEDpin[16] = {P1_0, P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7, 
P2_0, P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7}; 
 
// buraya yazdığınız ayarlama kodları, sadece bir kez çalıştırılacaktır:
void setup() { 
//LEDpin değişkeni pinlerinin çıkış olarak tanımlanması:  
  for(int p=0; p<16; p++){
        pinMode(LEDpin[p], OUTPUT);
        digitalWrite(LEDpin[p], LOW);  
  }   
}
// buraya yazdığınız döngü kodları, sonsuz döngü olarak sürekli çalıştırılacaktır:
void loop() { 
// pinlerin artan sırayla tekrarlanması: 
for(int p=0; p<16; p++) { 
// gecerliPin üzerinde bulunan LED’in 130 miliSaniye boyunca yakılması: 
digitalWrite (LEDpin[p], HIGH); //LEDpin çıkışını yak:
delay(130); //130 miliSaniye bekle:
digitalWrite(LEDpin[p], LOW); //LEDpin çıkışını söndür:
}
// pinlerin azalan sırayla tekrarlanması: 
for (int p=15; p>=0; p--) { 
// gecerliPin üzerinde bulunan LED’in 130 miliSaniye boyunca yakılması:  
digitalWrite (LEDpin[p], HIGH); //LEDpin çıkışını yak:
delay(130); //130 miliSaniye bekle:
digitalWrite(LEDpin[p], LOW); //LEDpin çıkışını söndür:
} 
}

2-      Buton LED Uygulaması

Bu örnek uygulamada, MSP430 LaunchPad kartının P2 portu pinleri giriş; P1 portu pinleri ise çıkış olarak tanımlanmıştır. P2 portunun hangi pini butonuna basılırsa karşılığında P1 portunun aynı sayılı pinine bağlı olan LED yanacaktır.

butonLED_bb

Görsel Fritzing programı ile oluşturulmuştur.

butonLED_sema

Görsel Fritzing programı ile oluşturulmuştur.

butonLED

Buton – LED Uygulaması

/* 
MSP430G2553 LaunchPad Buton - LED Uygulaması 
Bu örnek uygulamada, MSP430 LaunchPad kartının 2 ile 19 nolu 
pinlerine bağlı LED’lerin sıra ile ileri/geri yanması gerçekleştirilecektir. 
Örnek uygulamada Çizgi-TAGEM MSP430 Kartı ile Egergia pin numaraları ile uyumlu 
sırada olmadığı için en alt sıralardaki 2 LED çapraz yanmaktadır.
Bunun için döngü yapısı değiştirilmemiştir. 
 
Devre bağlantıları: 
LED’ler 2 ile 13 nolu pinler ile toprak arasında bağlıdır. 
 
Erkan Çil tarafından 27 Aralık 2013 tarihinde oluşturulmuştur.
 
Bu örnek uygulama kodu açık kaynaktır. 
*/
// girişPinleri:
byte girisPin[8] = {P2_0, P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7};
// çıkışPinleri:
byte cikisPin[8] = {P1_0, P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7};
 
void setup() { 
//giriş pinlerinin tanımlanması:  
  for(int p=0; p<8; p++){
        pinMode(girisPin[p], INPUT);
  }
//çıkış pinlerinin tanımlanması:  
  for(int p=0; p<8; p++){
        pinMode(cikisPin[p], OUTPUT);
  }
} 
 
void loop() { 
// butonlara basılmadığı sürece çıkış 0:
  for(int p=0; p<8; p++){
  digitalWrite(cikisPin[p], LOW);
  }
//P2_0 basılmışsa P1_0 yak, değilse söndür:  
if(digitalRead(P2_0) == HIGH){
digitalWrite(P1_0, HIGH);  }
else{digitalWrite(P1_0, LOW);}
//P2_1 basılmışsa P1_1 yak, değilse söndür:
if(digitalRead(P2_1) == HIGH){
digitalWrite(P1_1, HIGH);  }
else{digitalWrite(P1_1, LOW);}
//P2_2 basılmışsa P1_2 yak, değilse söndür:
if(digitalRead(P2_2) == HIGH){
digitalWrite(P1_2, HIGH);  }
else{digitalWrite(P1_2, LOW);}
//P2_3 basılmışsa P1_3 yak, değilse söndür:
if(digitalRead(P2_3) == HIGH){
digitalWrite(P1_3, HIGH);  }
else{digitalWrite(P1_3, LOW);}
//P2_4 basılmışsa P1_4 yak, değilse söndür:
if(digitalRead(P2_4) == HIGH){
digitalWrite(P1_4, HIGH);  }
else{digitalWrite(P1_4, LOW);}
//P2_5 basılmışsa P1_5 yak, değilse söndür:
if(digitalRead(P2_5) == HIGH){
digitalWrite(P1_5, HIGH); }
else{digitalWrite(P1_5, LOW);}
//P2_6 basılmışsa P1_6 yak, değilse söndür:
if(digitalRead(P2_6) == HIGH){
digitalWrite(P1_6, HIGH);  }
else{digitalWrite(P1_6, LOW);}
//P2_7 basılmışsa P1_7 yak, değilse söndür:
if(digitalRead(P2_7) == HIGH){
digitalWrite(P1_7, HIGH); }
else{digitalWrite(P1_7, LOW);}
}

3-      Röle Uygulaması

Bu örnek uygulamada, Geliştirme Kartı üzerinde bulunan MSP430G2553 LaunchPad’in P1_2  ve P1_4 pinlerine bağlı olan röleler belirlenen döngü süresine bağlı olarak açık kapalı durumları değiştirilecektir.

role

Röle Uygulaması

/* Role Ornek Uygulaması
Röle 1(P1_2)3000 miliSaniye aralar ile,
Röle 2(P1_4)5000 miliSaniye aralar ile, durum değiştirir.
Bu süreler kullanıcı ayarlıdır ve istenildiği gibi değiştirilebilir.
Devre bağlantıları:
Röle 1 MSP430 LaunchPad'in P1_2 pinine bağlıdır.
Röle 2 MSP430 LaunchPad'in P1_4 pinine bağlıdır.
Erkan Çil tarafından 27 Aralık 2013 tarihinde oluşturulmuştur.
Bu örnek uygulama kodu açık kaynaktır.
*/
// Bu sabit değişkenler değişmeyeceklerdir:
// Kullanılan pinleri adlandırmak için kullanılmışlardır:
const int role1 = P1_2; // röle1 P1_2 pinine bağlıdır:
const int role2 = P1_4; // röle2 P1_4 pinine bağlıdır:
// değerleri deşişebilen değişkenler:
int role1Durum = LOW; // role1Durum röle1(P1_2) durumudur.
int role2Durum = LOW; // role2Durum röle1(P1_4) durumudur.
long donguSayac1 = 0; // son güncelleme üzerinden geçen süre:
long donguSayac2 = 0; // son güncelleme üzerinden geçen süre:
// ölçülen süre miliSaniye olduğu için veri tipi long olarak kullanılmıştır:
// int veri tipi yeterli değildir.
long donguSure1 = 3000; // döngü süresi miliSaniye cinsinden:
long donguSure2 = 5000; // döngü süresi miliSaniye cinsinden:
// buraya yazdığınız ayarlama fonksiyonu kodları, sadece bir kez çalıştırılacaktır :
void setup() {
// röle pinlerinin çıkış olarak tanımlanması:
pinMode(P1_2, OUTPUT);
pinMode(P1_4, OUTPUT);
}
// buraya yazdığınız döngü kodları, sonsuz döngü olarak sürekli çalıştıralacaktır :
void loop()
{
/*
Eğer yanıp sönme süre aralığı istediğinizden daha uzun
süreli yanıp sönme aralığı veriyorsa LED’in son kez yanıp
söndüğü süre arası ile şimdiki yanıp söndüğü ara süresinin
farkını gözlemleyerek kontrol edin.
*/
unsigned long simdikiZaman1 = millis();
unsigned long simdikiZaman2 = millis();
if(simdikiZaman1 - donguSayac1 > donguSure1) {
// rölenin son konum değiştirdiği zamanın saklanması:
donguSayac1 = simdikiZaman1;
// eğer röle1 kontakları çekili ise bırak, değilse tam tersi:
if (role1Durum == LOW)
role1Durum = HIGH;
else
role1Durum = LOW;
// role1Durum değişkeninin çıkış olarak verilmesi:
digitalWrite(role1, role1Durum);
}
if(simdikiZaman2 - donguSayac2 > donguSure2) {
// rölenin son konum değiştirdiği zamanın saklanması:
donguSayac2 = simdikiZaman2;
// eğer röle2 kontakları çekili ise bırak, değilse tam tersi:
if (role2Durum == LOW)
role2Durum = HIGH;
else
role2Durum = LOW;
// role2Durum değişkeninin çıkış olarak verilmesi:
digitalWrite(role2, role2Durum);
}
}

 4-      7 Segment Sayıcı Uygulaması

Bu örnek uygulamada, Geliştirme Kartı üzerinde bulunan 4 adet display ile ileri yönde 0 – 9999 arasında sayan sayıcı gerçekleştirilecektir.

yediSegmentSayici

7 Segment Sayıcı Uygulaması

/**
 7 Segment Sayıcı Uygulaması
 
Devre Bağlantıları:
display segmentleri:    
a   3  P1_0
b   4  P1_1
c   5  P1_2
d   6  P1_3
e   7  P1_4
f   8  P1_5
g   9  P1_6
dp  10 P1_7
basamak transistörleri:
Q1 P2_0
Q2 P2_1
Q3 P2_2
Q4 P2_3
 
Erkan Çil tarafından 27 Aralık 2013 tarihinde oluşturulmuştur.
 
Bu örnek uygulama kodu açık kaynaktır. 
 
*/
 
// Bu sabit değişkenler değişmeyeceklerdir: 
// Kullanılan pinleri adlandırmak için kullanılmışlardır:
const int birlerBas = P2_3; 
const int onlarBas =P2_2;
const int yuzlerBas =P2_1;
const int binlerBas  =P2_0;
const int donguSure =100;
// değerleri deşişebilen değişkenler: 
int deger = 0;
byte onlarBasAktif = 0;
byte yuzlerBasAktif = 0;
byte binlerBasAktif = 0;
// segmentleri yakarak rakam oluşturma:
byte seven_seg_digits[11][7] = {
                                { 0,0,0,0,0,0,0 },  // = blank
                                { 1,1,1,1,1,1,0 },  // = 0
                                { 0,1,1,0,0,0,0 },  // = 1
                                { 1,1,0,1,1,0,1 },  // = 2
                                { 1,1,1,1,0,0,1 },  // = 3
                                { 0,1,1,0,0,1,1 },  // = 4
                                { 1,0,1,1,0,1,1 },  // = 5
                                { 1,0,1,1,1,1,1 },  // = 6
                                { 1,1,1,0,0,0,0 },  // = 7
                                { 1,1,1,1,1,1,1 },  // = 8
                                { 1,1,1,1,0,1,1 }   // = 9
                                };
 
byte segment_to_pin[8] = {P1_0, P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7};
unsigned long simdikiZaman;
byte led = 0;
 
// rakam yazma fonksiyonu: 
void rakamYazma(byte rakam, bool dp){
    for(int i=0; i<7; i++){
        digitalWrite(segment_to_pin[i], seven_seg_digits[rakam+1][i]);
    }
    digitalWrite(segment_to_pin[7], dp);
}
//bos basamak fonksiyonu:
void bosBasamak(){
    for(int i=0; i<7; i++){         
        digitalWrite(segment_to_pin[i], 0);     
    }
    digitalWrite(segment_to_pin[7], 0); 
} 
// buraya yazdığınız ayarlama fonksiyonu kodları, sadece bir kez çalıştırılacaktır : 
void setup(){
  //segment pinlerinin çıkış olarak tanımlanması:  
  for(int p=0; p<8; p++){
        pinMode(segment_to_pin[p], OUTPUT);
        digitalWrite(segment_to_pin[p], HIGH);
    }
  //basamak transistörlerinin çıkış olarak tanımlanması:  
    pinMode(onlarBas, OUTPUT);
    pinMode(birlerBas, OUTPUT);
    pinMode(yuzlerBas, OUTPUT);
    pinMode(binlerBas, OUTPUT);
    simdikiZaman = millis();
}
// buraya yazdığınız döngü kodları, sonsuz döngü olarak sürekli çalıştıralacaktır : 
void loop(){     
//deger dizisinin 0 ile 9999 değerleri arasında oluşturulması
    deger = constrain(deger, 0, 9999);
//geçen sürenin hesaplanması ve değer değişkeninin içeriğinin arttılırması:   
    if(millis() - simdikiZaman > donguSure){
            deger++;          
            simdikiZaman = millis();
        }
//deger değişkenin içeriği 9999 olursa değişken değerinin sıfırlanması:        
   if(deger == 9999){
   do{
   if(millis() - simdikiZaman > donguSure){
            deger--;          
            simdikiZaman = millis();
   }
   }while(deger = 0);  
   }  
    //binler basamağı aktif diğerleri pasif:
    binlerBasAktif = !binlerBasAktif;
    if(binlerBasAktif){
        digitalWrite(yuzlerBas, LOW);
        digitalWrite(onlarBas, LOW);
        digitalWrite(birlerBas, LOW);
         //deger değişkenin binler basamağının modu alınarak yazılması:
        if(deger){
            rakamYazma((deger/1000)%10, 0);
        } else {
            bosBasamak();
        }
        digitalWrite(binlerBas, HIGH);
        yuzlerBasAktif = !yuzlerBasAktif;
          } 
    //yüzler basamağı aktif diğerleri pasif:
    else if(yuzlerBasAktif){ 
 
        digitalWrite(binlerBas, LOW);
        digitalWrite(onlarBas, LOW);
        digitalWrite(birlerBas, LOW);
        //deger değişkenin yüzler basamağının modu alınarak yazılması:
        if(deger){
            rakamYazma((deger/100)%10, 0);
        } else {
            bosBasamak();
        }        
        digitalWrite(yuzlerBas, HIGH);
        onlarBasAktif = !onlarBasAktif;
    } 
     //onlar basamağı aktif diğerleri pasif:    
     else if(onlarBasAktif){
 
        digitalWrite(binlerBas, LOW);
        digitalWrite(yuzlerBas, LOW);
        digitalWrite(birlerBas, LOW);
         //deger değişkenin onlar basamağının modu alınarak yazılması:
        if(deger){
            rakamYazma((deger/10)%10, 0);
        } else {
            bosBasamak();
        }
        digitalWrite(onlarBas, HIGH);
    } 
    //birler basamağı aktif diğerleri pasif:
    else {
        digitalWrite(binlerBas, LOW);
        digitalWrite(yuzlerBas, LOW);  
        digitalWrite(onlarBas, LOW);
         //deger değişkenin birler basamağının modu alınarak yazılması:
        rakamYazma(deger%10, 0);
        digitalWrite(birlerBas, HIGH);
    }
    delay(1);
}

5-      2×16 Karakter LCD Uygulaması

Bu örnek uygulamada, Geliştirme Kartı üzerinde bulunan 2×16 Karakter LCD ile uygulama yapılacaktır. İstenen metin, 2×16 LCD ekranda gösterilecektir.

LCD

2×16 Karakter LCD Uygulaması

/*
 MSP430G2553 LaunchPad 2x16 LCD Karakter Uygulaması 
 
Bu örnek uygulamada, MSP430 LaunchPad kartını ile 16x2 LCD kullanılarak
yazı karakterleri gösterilecektir.  Hitachi HD44780 sürücüsü kullanılan 
her LCD için kütüphane dosyası uyumlu olarak çalışacaktır.
 
Devre bağlantıları: 
 =================================
 LCD pin           MSP430 Bağlantısı
 ---------------------------------
 01 - GND             GND, pot
 02 - VCC             +5V, pot
 03 - Contrast        2K2
 04 - RS              (P2_7) 
 05 - R/W             GND
 06 - EN              (P2_6)  
 07 - DB0             GND
 08 - DB1             GND
 09 - DB2             GND
 10 - DB3             GND
 11 - DB4             (P1_4) 
 12 - DB5             (P1_5) 
 13 - DB6             (P1_6) 
 14 - DB7             (P1_7)  
 15 - BL+             +5V
 16 - BL-             GND
 =================================
 
 Kütüphane dosyasının orjinali 18 Apr 2008
 tarihinde David A. Mellis tarafıdan eklenmiş;
 5 Jul 2009 tarihinde Limor Fried (http://www.ladyada.net)
 tarafından tekrar düzenlenmiş;
 örnekler ise; Tom Igoe tarafından
 9 Jul 2009 tarihinde eklenip 22 Nov 2010
 tarinde tekrar düzenlenmiştir.
 
Bu örnek uygulama kodu açık kaynaktır. 
 
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */
 
// kütüphane dosyasının eklenmesi:
#include <LiquidCrystal.h>
 
// kütüphanede belirtilen LCD pinlerinin tanımlanması:
LiquidCrystal lcd(P2_7, P2_6, P1_4, P1_5, P1_6, P1_7);
 
// buraya yazdığınız ayarlama kodları, sadece bir kez çalıştırılacaktır:
void setup() {
  // kullanılan LCD nin sütun ve satır sayılarının belirtilmesi: 
  lcd.begin(16, 2);
  //kürsörün belirtilen yere taşınması:
  // sütun= 6, satır= 1:
  lcd.setCursor(5, 0);
  //LCD mesajının yazılması:
  lcd.print("MERHABA");
  //kürsörün belirtilen yere taşınması:
  // sütun= 4, satır= 2:
  lcd.setCursor(3, 1);
  //LCD mesajının yazılması:
  lcd.print("ZALiM DUNYA");
}
 
// buraya yazdığınız döngü kodları, sonsuz döngü olarak sürekli çalıştırılacaktır:
void loop() {
  //kürsörün belirtilen yere taşınması:
  // sütun= 0, satır= 2:
  lcd.setCursor(0, 1);
}

Kolay gelsin.
Erkan ÇİL
Kozan / 2013

e-posta : erkancil@gmail.com

ek: Uygulama Videoları:

 

1- Karaşimşek LED Uygulaması

2- Buton LED uygulaması

3- Röle Kontrol Uygulaması

4- 7 Segment Uygulaması

5 – 2×16 Karakter Uygulaması

 

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