MSP430 LaunchPad IRDA Uygulaması
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(); }
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.
coskun bey bir projem var da sizin bu uygulanamız hosuma gıttı bırz yardımcı olursanız sevinirim
Elimden geldiğince yardımcı olmaya çalışırım.
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.