Anasayfa > Yazılımlar > MSP430 LaunchPad IRDA Uygulaması

MSP430 LaunchPad IRDA Uygulaması

13 Eylül 2012 Yorum Ekle Yorumlara git

       Elimdeki tozlanmaya başlayan şu MSP430 LaunchPad kit ile bişeyler yapma vakti gelmiştir deyip işe koyuldum.

IAR ile daha önce çalışmadığım için  bu IDE ile ilgili meraklarımı gidermem gerekiyordu. Sanırım bundan sonra da IAR ile çok proje üreteceğim. Sade,  pratik, iş bitirici,  yorucu olmayan ve hızlı çalışan bir IDE arayanlar IAR ı kesin denemeli. Benim ilk izlenimlerim başarılı ve kullanışlı.

 

 

MSP430 LaunchPad boardu askere gitmeden önce temin etmiştim modası geçti diyebilirsiniz ama araya askerlik girdi bence hala değerli 🙂

Üzerinde MSP430G2231 MCU ile beraber geliyor kit. 2K flash hafıza,  128b Ram, ADC, Usart gibi temel donanımlara sahip bu mcu ile pek çok küçük uygulama yapılabilir. Board üzerinde yerleşik link debug ve programmer olması ileride Tİ ürünlerini kullanmak isterseniz sizi programlayıcı almaktan kurtaracaktır.  IAR üzerinde debug yapmak çok basit denebilir Keil gibi anlamak için saatler harcamıyorsunuz. İşte sade bir ekran görüntüsü;

Gelelim neler yaptığımıza, ilk olarak LCD kontrolü yaptırıyoruz denetleyiciye kendi kütüpanemi düzenleyip entegre ettikten sonra Phillips RC5 Protekolu ile IRDA uygulamasını çalıştırdım. RC5 protekole sahip TV kumandasından  paketi okuyup LCD ekranda Hex olarak gösteriyoruz.  Microcontroller flash memory 2K olması ve ram in float işlemlerine yetmemesi biraz elimizi kolumuzu bağlasada uygulamayı tamamlamayı başarıyoruz.

IAR Kod analizinde  Ansi C yi yakalamış gibi ancak eksikleri hala var kütüpanelerimi entegre ederken garip durumlarla karşılaştım. Ayrıca IAR size 2 lisans seçeneği sunuyor. 4k kod sınırlaması veya 30 günlük deneme sürümü size uygun olanı seçip kuruyorsunuz.

Uygulamanın kodları;

main.c

////////////////////////////////////////////////////////////////////////////
//  Author   : [X-Fi - Coskun ERGAN]
//  Notice   : Copyright (c) 2012 [www.coskunergan.dev]
//           : All Rights Reserved
//  Date     : 12-09-2012
//  Version  : 1.0.0
//  Board    : MSP430 Launcpad Board
//  MCU      : MSP430G2231
//  Notes    : IRDA Uygulamasi
//           Bu uygulamada LCD ekranda IRDA ile okunan tus bilgisi görülür.
//             J5 üzerindeki LED2 Jumper kullan1lmayacakt1r.
///////////////////////////////////////////////////////////////////////////

#include "io430.h"
#include "in430.h"
#include "lcd_msp.h"

#define PaketBoyu 32   // toplam bit
#define bit_zaman 20   // uzun bit zamani 1ms karsilik gelir

#define rx   (!P1IN_bit.P6)  // DATA pin tanimlaniyor.

unsigned char senkron =  155;
unsigned char say,i,bit;
unsigned long Buff_ir;
unsigned char sayi[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

void Delay20Us()
{
       __delay_cycles(20);
}

char Paket_Oku(void)
{
//--------------- Senkron bekleniyor ----------------

	if(!rx)return 0;
	say=0;

	do{
          Delay20Us();
          say++;
          if(say==(senkron+5))return 0;
	}while(rx);
	if(say<(senkron-5))return 0;

 //---------------- Paket alınıyor -----------------

        Buff_ir=i=0;
do{

    say=0;
    do{
	Delay20Us();
    	say++;
    	if(say==senkron)return 0;
    }while(!rx);

     if(say > bit_zaman)bit=1;
     else        bit=0;

    say=0;
    do{
	Delay20Us();
        say++;
        if(say==senkron)return 0;
    }while(rx);

    Buff_ir|=bit;
    Buff_ir<<= 1;
    i++;

 }while(i!=PaketBoyu);

  return 1;

}

//----------------------------------------------

void main(){

      WDTCTL = WDTPW + WDTHOLD;

      BCSCTL1 = CALBC1_1MHZ;
      DCOCTL  = CALDCO_1MHZ;
      P1DIR=0xBF;

      __delay_cycles(100000);

      lcd_init();
      lcd_goto(1,1);
      lcd_puts("coskunergan.dev");
      lcd_goto(2,4);
      lcd_puts("IRDA Testi");

     while(1){

      if(Paket_Oku()){

        P1OUT_bit.P0^=0x1;

        __delay_cycles(100000);

        lcd_temizle();
        lcd_puts("    TuŞ Kodu:");
        lcd_goto(2,4);
	lcd_puts("0x");
        lcd_putch(sayi[Buff_ir >> 28]);
        lcd_putch(sayi[((Buff_ir >> 24)&0xF)]);
	lcd_putch(sayi[((Buff_ir >> 20)&0xF)]);
        lcd_putch(sayi[((Buff_ir >> 16)&0xF)]);
        lcd_putch(sayi[((Buff_ir >> 12)&0xF)]);
        lcd_putch(sayi[((Buff_ir >> 8)&0xF)]);
        lcd_putch(sayi[((Buff_ir >> 4)&0xF)]);
        lcd_putch(sayi[Buff_ir&0xF]);

     }
   }
}

 

lcd_msp.c

 

/***********************************
-
- MSP430 için 2x16 LCD Kütüphanesi
-
-       Coskun ERGAN
-
-       12.09.2012
-
-    www.coskunergan.dev
-
***********************************/

#include "io430.h"
#include "lcd_msp.h"

const unsigned char karakter_[8][8]=
{
{12,18,18,12,0,0,0,0    },
{ 24,24,24,24,24,24,24,0},
{ 28,28,28,28,28,28,28,0},
{ 30,30,30,30,30,30,30,0},
{ 31,31,31,31,31,31,31,0},
{ 0,0,12,4,4,4,14,0},
{ 0,14,16,16,17,14,4,0},
{ 0,15,16,14,1,30,4,0 }
};

void delay_ms(unsigned int ms)
{
  while(ms--)
    __delay_cycles(1000);
}

void delay_us(unsigned int us)
{
  while(us--)
    __delay_cycles(1);
}
void lcd_putch(char c)
{
switch (c)
{
case 'Ç' : c=0x06; break;
case 'ç' : c=0x06; break;
case 'Ş' : c=0x07; break;
case 'ş' : c=0x07; break;
case 'ı' : c=0x05; break;
case 'Ö' : c=0xEF; break;
case 'ö' : c=0xEF; break;
case 'Ü' : c=0xF5; break;
case 'ü' : c=0xF5; break;
default : break;
}

  LCD_RS = 1;
  LCD_EN = 1;
  LCD_PORT&= 0x03;
  LCD_PORT|=((c & 0xF0)>>2);
  LCD_EN = 0;
  delay_us(200);
  LCD_EN = 1;
  LCD_PORT&= 0x03;
  LCD_PORT|=((c & 0x0F)<<2);
  LCD_EN = 0;
    delay_us(200);
}

void lcd_komut(unsigned char c)
{
  LCD_RS = 0;
  LCD_EN = 1;

  LCD_PORT&=0x03;
  LCD_PORT|=((c & 0xF0)>>2);
  LCD_EN = 0;
  delay_us(200);
  LCD_EN = 1;
  LCD_PORT&= 0x03;
  LCD_PORT|=((c & 0x0F)<<2);
  LCD_EN = 0;
  delay_us(200);
}

void lcd_temizle(void)
{
  lcd_komut(0x1);
  delay_ms(2);
}

void lcd_puts(const char * s)
{
  delay_us(200);

  while(*s)
    lcd_putch(*s++);
}

void lcd_goto(char x, char y)
{
  if(x==1)
    lcd_komut(0x80+((y-1)%16));
  else
    lcd_komut(0xC0+((y-1)%16));
}

void lcd_init()
{
  unsigned char j,s,adres=64;

  P1OUT  = 0x00;
   delay_ms(200);
  LCD_EN = 1;
  LCD_PORT|=0x08;
  delay_ms(2);
  LCD_EN = 0;
   delay_ms(2);
  lcd_komut(0x28);  // 4 Bit , Çift Satır LCD
  lcd_komut(0x06);  // Sağa doğru yazma aktif
  lcd_komut(0x0C);  // İmleç Gizleniyor
  lcd_komut(0x01);
  delay_ms(2);	    // Ekran Temizleniyor
  lcd_komut(0x80);  // LCD Birinci Satır Konumunda

  for(j=0;j<=7;j++){  // tr karakter tanıtılıyor
	lcd_komut(adres);
	for(s=0;s<=7;s++){
		lcd_putch(karakter_[j][s]);
			    }
	        adres=adres+8;
	              }
	lcd_temizle();
}

 

 

MSP430_IRDA.rar

 

Lcd 5V beslemesini board üzerinde boşda bırakılan pinlerden sağlıyoruz.  Lcd ve irda alıcı bağlantı şeması;

 

 

Uygulamanın Videosu;

 

Uygulamaya ait resimler;

Şimdilik bukadar bi sonraki yazıda görüşmek üzere.

 

Kategoriler: Yazılımlar Etiketler: ,
  1. barış
    21 Şubat 2014 21:44 | #1

    coskun bey bir projem var da sizin bu uygulanamız hosuma gıttı bırz yardımcı olursanız sevinirim

  2. 25 Şubat 2014 10:16 | #2

    Elimden geldiğince yardımcı olmaya çalışırım.

  3. coşkun
    10 Nisan 2014 16:15 | #3

    merhaba coşkun bey benım ısmımde coşkun benım bır projem 8*8 led matrıx te sekiller cizdirmek yardımcı olursanız sevınırım.

  1. Şimdilik geri izleme yok