You are on page 1of 138

MSP430 Programlama Notlar

Feridun GKEGZ Emre EMANET M.Fatih NAN Frat DEVEC Erhan YILMAZ

2.BASKI

2. BASKIYA N SZ MSP430 ile ilgili oluturmu olduumuz bu kaynak Trkiyedeki en tecrbeli insanlarn yazlarndan derlenerek ve seilerek bu faydal kaynak ortaya kmtr. Bata editrln ve derlemesini yapm olduum bu kitap gerek mikrodenetleyicilere giri, gerekse MSP430 mikrodenetleyicisi hakknda nemli bir Trke dokman durumundadr. Bu basksnda MSP430un SPI donanm ve ADC10 vb. donanmlar zerinde daha fazla durularak MSP430 ile yaplabilecek uygulamalar attrlmtr. Bata yazar arkadalar olmak zere hepsine teekkr eder, sevgili Ferhat Umut DZDAR hocama almalarma ve mikrodenetleyici konusunda vermi olduu destekten dolay sayglarm ve sevgilerimi sunuyorum. Bu kitabn lkemizdeki teknik insanlara yararl olmasn diliyor, herkesin baarl olmasn can gnlden istiyorum. Zihniniz hep ak olsun.

Emre EMANET

MSP430 Programlama

Sayfa 1

YAZARLARIMIZ Feridun GKEGZ www.fgokcegoz.com fgokcegoz@yahoo.com


1987 stanbul doumlu. 2001 ylnda ilkretim eitimini tamamlayp Mecidiyeky Lisesinde (YDA) lise eitimine devam etti. 2005 ylnda lise eitimini tamamlad ve 2006 ylnda Sakarya niversitesi Elektrik Elektronik Mh. blmn kazand. 2010 ylnda baar ile lisans eitimini tamamlad ve 2011 ylndan itibaren ise Yldz Teknik niversitesi Fen Bilimleri Enstits, Elektrik Makineleri ve G Elektronii anabilim dalnda yksek lisans eitimine devam etmektedir.

Emre EMANET emanetemre28@gmail.com


1991 Giresun dodu. Liseyi memleketim olan Tireboluda Tirebolu Endstri Meslek Lisesinde Elektrik Elektronik Teknoloji blmnde tamamlad. Mikrodenetliyiciler ile lisede tanma ve urama frsat buldu. MEB proje tabanl beceri yarmasnda il 2.lii bulunmaktadr. u an Ordu niversitesi MYO Kontrol Ve Otomasyon Teknolojisi program 2. snf rencisi olarak okumakta olan yazar mikrodenetleyiciler ve otomasyon alanlarnda uramakta.

M.Fatih NAN www.fatihinanc.com fatihinanc@hotmail.com


1989 Ankara doumlu. 2003 ylnda ilkokul eitimini tamamlayp Anadolu Meslek Lisesi Bilgisayar Blmnde eitimine devam etti. 2008 ylnda ise Seluk niversitesi Teknik Eitim Fakltesi Bilgisayar Sistemleri retmenliini kazand. Halen ayn niversitede 4.Snf rencisi olarak eitimine devam etmektedir.

MSP430 Programlama

Sayfa 2

Frat DEVEC www.fxdev.org firat_deveci@hotmail.com


1988 ylnda zmir'de dodu. 2011 ylnda Ege niversitesi Elektrik ve Elektronik Mhendislii'ni Tez Birincisi olarak bitirdi. Yazarn ilgi alan yenilenebilir enerji, g elektronii, mikrodenetleyiciler ve kontrol uygulamalar olarak sralanmaktadr. Bir tanesi IEEE'de olmak zere eitli sempozyumlarda 3 makalesi bulunan 2011 yl itibari ile yine ayn niversitede yksek lisansn srdrmektedir.

Erhan YILMAZ erhanyilmaz.ytu@gmail.com


20-02-1990 dodu. Elektronie 2004 ylnda stanbul Kartal endstri meslek lisesine girerek baladm. Sonrasnda Marmara niversitesi endstriyel elektronik blmne geip oradan devam ettim. 2009 itibari ile Marmara niversitesindeki eitimimi tamamladm. Sonrasnda 1 sene hazrlanp dgs snav ile Yldz Teknik niversitesi elektronik haberleme mhendisliine girdim. Elektronik anlamda eitli analog uygulamalarm olmakla beraber genel olarak saysal elektronik ve mikro denetleyiciler ile urayorum. u an halen Yldz teknikte (3. snf) okumaktaym.

MSP430 Programlama

Sayfa 3

NDEKLER BLM 1 MSP430 GENEL ZELLKLER VE OSC AYARLARI 1.1-)MSP430a Genel Bak 1.2-)MSP430un Donanmsal Mimarisi Ve Temel Blok Diyagram 1.3-)LaunchPad Paket erii Ve zerindeki Balantlar 1.4-) lk Uygulama Yazma 1.5-) MSP430 Osilatr Ayarlar BLM 2 MSP430 RISC CPU 2.1-) MSP430 16 BT RISC CPU BLM 3 MSP430 GR IKI AYARLARI 3.1-) Pin Ynlendirme Ve Kullanm 3.2-) Port Okuma Ve Yazma Uygulamas BLM 4 MSP430 TMER AYARLARI 4.1-) TimerA Blm 4.1.1) TimerA Sayc Modu 4.1.1.1-)TimerA Stop Modu 4.1.1.2-)TimerA Up Modu 4.1.1.3-) TimerA Continuous Modu 4.1.1.4-) TimerA Down Modu 4.1.2) TimerA Up/Down Modunu Kullanarak Basit PWM Sinyali retmek BLM 5 ADC10 MODL 5.1-)ADC lemleri 5.1.1-)Referans Belirleme 5.1.2-)evrim Frekans Belirleme 5.1.3-)ADC10 Giri Seimi 5.2-)ADC Kullanm Registerleri 5.3-) Scaklk Sensr 5.4-) ADC10 Modl le Gerilim lm BLM 6 MSP430 LE DSPLAY KONTROL UYGULAMASI 6.1-) Displayler Hakknda Genel Bilgiler 6.2-) 74HC164 le Display Srme 6.3-) MSP430 7448 le Yukar Aa Sayc
MSP430 Programlama

SAYFA NO 8 8 8 9 10 12

13 13 18 20 20 21 22 22 26 26 28 28 29 29 29 30 30 33 38 43 43 44 48
Sayfa 4

BLM 7 MSP430 LE LCD KONTROL UYGULAMASI 7.1-) LCD Hakknda Genel Bilgiler 7.2-) MSP430 2X16 LCD Uygulamas 7.3-) MSP430, 74HC595 ve LCD BLM 8 MSP430 LE KEYPAD(TU TAKIMI) KONTROL UYGULAMASI 8.1-) Tu Takm Hakknda Genel Bilgiler 8.2-) MSP430 le Tu Takm Uygulamas 8.3-) MM74C922 le Tu Takm Uygulamas BLM 8 MSP430 I2C MODL 8.1-) I2C Master Modu 8.2-) I2C Slave Modu 8.3-) I2C Transmitter 8.4-) I2C Reveiver 8.5-) Start Durumu 8.6-) Stop Durumu 8.7-) Kesmeler BLM 9 MSP430 LE DC MOTOR KONTROL BLM 10 MSP430 LE SD VE MMC KART UYGULAMASI 10.1-) MSP430 SD/MMC Uygulamas BLM 11 MSP430 EK DONANIMLARI 11.1-) ez430 Chronos 11.1.1-)Kutu erii 11.1.2-)Teknik zellikler 11.1.3-)ez430 Bilgisayar Arayz 11.2-)eZ430-RF2500 ncelemesi BLM 12 EK KISIM / DERLEYCLER VE KULLANILAN DONANIMLAR 12.1-) IAR Kullanm 12.2) Code Composer Studio 12.3-) Kullanlan Donanmlar KAYNAKA
MSP430 Programlama

53 53 56 60 67 67 69 72 76 76 77 77 77 78 78 78 87 92 93 97 97 98 98 99 101 106 106 109 112 113


Sayfa 5

BLM 1 MSP430 GENEL ZELLKLER VE OSC AYARLARI


1.1-) MSP430a Genel Bak

ekil 1 - MSP430G2231 Genel Yaps MSP430 Texas Instrument firmasnn rettii ok dk g tketimiyle n plana kan bir mikrodenetleyicidir. Von Neumann mimarisinde 16 Bit RISC mimarisine sahip bir mikrodenetleyicidir. erisinde I2C, SPI, USART, ADC gibi klasik haline gelmi birok modl barndrmaktadr.
MSP430G2201 Program Memory(kB) SRAM(Bytes) I/O Pins 16-bit Timers Capture/Compare Registers USI:I2C/SPI ADC Channels ADC Resolutions(Bits) MSP430G22011 MSP430G2221 MSP430G2231

2 128 10 1 2

2 128 10 1 2

2 128 10 1 2

2 128 10 1 2 1 8 10

ekil 2 - MSP430G2x21, MSP430G2x31 Ailesinin Genel zellikleri 1.2-) MSP430un Donanmsal Mimarisi Ve Temel Blok Diyagram

ekil 3 MSP430un Temel Blok Diyagram


MSP430 Programlama Sayfa 6

1.3-) LaunchPad Paket erii Ve zerindeki Balantlar

ekil 4 - LaunchPad Ve zerindeki Balantlar LaunchPadi satn aldnzda kutusundan 2 adet sticker, programlamak iin USB kablosu,MSP430G2231 mikrodenetleyici ve MSP430G2211 mikrodenetleyicisini bardyor. MSP430G2231 LaunchPadin stnde montajl halde geliyor. Ayrca 32.768Mhz mikro kristal ve hzl balang rehberiyle birlikte mikrodenetleyiciden k veya giri almak iin dii pin yuvas ve erkek pin bulunuyor. Hzl balang rehberi bize MSP430u tantyor ve programlarn nereden indirebileceimizi bize gsteriyor. LaunchPad ayrca 20 Pin mikrodenetleyicileride desteklemektedir.

ekil 5 MSP430G2231 Ve 20 Pin MSP430lar


MSP430 Programlama Sayfa 7

1.4-) lk Uygulama Yazma lk uygulamamzda LaunchPadin zerindeki LEDi yakp sndrmeyi reneceiz. emada ki entegre Proteus programnda MSP430G2231 olmad iin bu entegrenin ayn donanmsal yapsnda olan baka bir entegre kullanlmtr.

U1
10 11 12 13 RST/NMI/SBWTDIO P1.0/TACLK/ACLK/CA0 TEST/SBWTCK P1.1/TA0/CA1 XOUT/P2.7 P1.2/TA1/CA2 XIN/P2.6/TA1 P1.3/CAOUT/CA3 P1.4/SMCLK/CA4/TCK P1.5/TA0/CA5/TMS P1.6/TA1/CA6/TDI/TCLK P1.7/CAOUT/CA7/TDO/TDI MSP430F2011 2 3 4 5 6 7 8 9

R1
330

D1
LED-RED

ekil 6 - lk Uygulamann Devre emas Bu uygulamamz iin LaunchPadin P1.0 uuna bal LEDi yakacaz. Hibir balant yapmadan donanm stnde bu deneyeceiz. lk uygulamay yazmadan nce uygulama kodunun aklamalarn sindirerek okumanz tavsiye ediyorum. #include "io430.h" #include "in430.h" #define LED P1OUT_bit.P0

void delay (void) { unsigned int j; for(j=50000;j;j--); } void main( void ) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1OUT = 0x00; P1DIR = 0x01; for(;;) { delay(); LED ^=1; } }

MSP430 Programlama

Sayfa 8

Program kodumuzu inceleyelim. lk 2 satrda MSP430un tanmlanmas ve kodlarn almas iin ktphane dosyalarn ekledik. Eer rnein 2 satrdaki #include "in430.h" ktphanesini eklememi olsaydk, programmz almayacakt veya IAR Studio bize yazdn kodu ilk satrdaki ktphane de bulamyorum gibisinden bir hata verecekti. 3 satrdaki kod ise Led bal ucu programmza bildirmemize yaryor. WDTCTL = WDTPW + WDTHOLD; satrnda ise WatchDog Timer pasif hale getirilmesiyle balam. Eer bu satr olmasayd, mikrodenetleyicinin iinde bulunan WDT birimi belirli periyotlarla, temizlenmedii takdirde mikrodenetleyiciye reset attracakt. DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; Bu satrda ise mikrodenetleyicinin almas iin gerekli saat darbelerinin ayarlarlamalar yaplmakta. Bunun iin dahili RC osilatr, 1MHz e ayarlanm ve mikrodenetleyicinin clock modlne bu frekans iin kalibrasyon deerleri yklenmitir. Bir sonraki satrda ise ledin bal olduu pin ile ilgili ayarlamalar yaplmaktadr. MSP430 un pinleri bir adet register zerinden okunup yazlamamaktadr. lgili pin giri konumundaysa, PXIN Registerndan, ilgili pin, k konumundaysa, PXOUT register ndan ilgili deerler okunup yazlmaktadr. Bu satrda ilk olarak, P3OUT pini sfrlanmakta ve alt satrda, ilgili pin in DATA DIRECTION Registerna, k olarak kullanacamzn bilgisi verilmektedir. MSP430larda herhangi bir pini k yapmak istiyorsak o pinin DATA DIRECTION Registerna Lojik1, giri yapmak istiyorsak o pinin DATA DIRECTION Registerna Lojik0 yklememiz gerekmektedir.

Herhangi bir pini Digital I/O olarak kullanabilmemiz iin, DIRECTION register Lojik 1, SELECTION Register Lojik 0 olmas gerekir. lgili pin ADC girii olarakta kullanlabiliyorsa, o pin iin ADC10AE0 Registerna Lojik 0 yazlmaldr. Fakat, default durumda, zaten Lojik0 olduu iin yeniden ayarlamaya gerek yoktur.

MSP430 Programlama

Sayfa 9

Programmza devam edecek olursak, ardndan sonsuz dngye girmi ve belirli bir sre gecikme fonksiyonunun(200ms) ardndan LED terslenmektedir ve bu ekilde srekli ayn ilem tekrarlanmtr. 1.5-) MSP430 Osilatr Ayarlar lk uygulamay yazarken bahsettiimiz osilatrler hakknda bilgi vereceim. MSP430 kendi ierisinde kullanaca 3 adet saat kaynana sahiptir. Bunlar; Master Clock (MCLK) : CPU ve birka evresel birim tarafndan kullanlr. Sun-system Master Clock (SMCLK) : evresel birimler iin kullanlr. Auxiliary Clock (ACLK) : evresel birimler iin kullanlr. Bu birimlerin nasl balandklar ve ka nasl yansdklar ekilde grlmektedir.

ekil 7 Osilatr Kaynaklar ekil 7de grlen MCLK veya SMCLK genellikle MHz dzeylerinde iken, ACLK birimi ise genellikle kHz mertebesindedir. MSP430a saat sinyali reten 3 birim bulunur: Low-or-high-freq-crystal-osc (LFXT1) : Genelde 32kHz civarndadr. Eer dtan kristal kullanlacaksa MSP430 ile senkronize yaplmas gerekmektedir. Internal Very-Low-Power-Low-Freq-Osc (VLO): Genellikle MSP430f2xx modellerinde yaygndr. Kristal kullanlmayacaksa LFXT1in alternatifidir. Msp430f2013 iin hz 12kHzdir. Digitally Controlled Osc (DCO) : Tm MSP430 entegrelerinde mevcuttur. 1us iinde almaya balayan, yazlmsal olara kontrol edilebilen, RC osilatrdr. Frekans ayarlama ksm DCOCTL, BCSCTL1-3 registerleri ile IFG1 ve IE2 bitleri ile kontrol edilir.

ekil 8 - L or H Freq. Crystal Osc


MSP430 Programlama Sayfa 10

BLM 2 MSP430 RISC CPU


2.1-) MSP430 16 BT RISC CPU
MSP430un dier evrebirimlerine gemeden nce ilemcisini inceleyelim. nk sahip olduu ilemcide aina olduumuz PICte olmayan zellikler var. ASM olarak komut seti Intelin komut setine benziyor biraz. Toplam 27 adet komuta sahip olan MSP430da ASM ile program yazmak ok da zor deil aslnda.

Biz burada komutlardan fazla bahsetmeyeceiz. nk komutlar zaten az hem de datasheetinde en ince ayrntsna kadar anlatlm. lemcinin ne kan zelliklerini sralarsak;

Stack Pointer, Program Counter ve Status Register a eriebilme, 16 Bit adreslemeyle bellee daha az eriim gereklilii (fetch), 7 adet adresleme modu, RISC Mimarisine sahip ilemcide toplam 27 adet komut, Baz ilemleri tek komut evriminde yapabilme, 16 Bit olmasna ramen byte ya da word trnde veri adresleyebilme

Hereyden nce bu fetch olayndan biraz bahsedelim. Bir ilemcide her ASM komutunun makina kodu olarak hexadecimal bir karl vardr. Normalde ASM olarak yazdmz.
MOV AL,0x33

kodunun makina dili olarak karl B433 tr. Bu kod B4 ve 33 olmak zere iki ksma ayrlr.B4 ksm Opcode olarak tabir edilen asl ilenecek olak ksmdr. CPU daki kod zc tarafndan bu kod zlr ve iletilir. Komut kuyruundaki maksimum bykl ilemcinin veri yolu dedidiimiz ksm belirler.Bu birim eer 8 bit ise ilemci her defasnda maksimum 8 bit(255) adresleme yapabilir, eer 16 bit ise de maksimum 16 bit(65535) adresleme yapabilir. lemci, her seferinde veri yolunun genilii kadar veri ileyebilir. Diyelim ki bir toplama ilemi yapacaz ve bu ilemde toplayacamz saylardan ilki 1400 ikincisi ise 53. Bu toplama ilemini 8 bitlik bir mikrodenetleyicide yaptmz varsayarsak ilemci 1400 iin 1400=00578(2 byte) 2 kez veriyoluna gidip veriyi oradan ekip ileme tabi tutacaktr.53 iin ise 1 kez gitmesi yeterli. Yani bir toplama ilemi iin en az 3 kez veriyoluna gidip, bilgiyi ekip ileme tabi tutmaktadr. Bu anlattklarmz 8 bit sistemler iin geerli. Bir de 16 bit sistemlerden bahsedelim. 16 bit bir sistemde bir seferde maksimum 2byte(65535) adreslenebildiinden ilemci 1400 iin 1 kez, 53 iin yine 1 kez veriyoluna gidecektir. Toplam(en az) 2 seferde ii halledebiliyor. Bir de bunun hz gerektiren uygulamalarda ve srekli olarak yapldn dnn. te bu veriyoluna gidip bilgiyi getirme ilemine fetch denilmektedir. ok kapsaml programlar yazmadka veri yolunun salad fayda pek farkedilmez aslnda. O yzden 8 bitlik bir PIC, Atmel veya 8051 ou uygulamalar iin hala yeterlidir. Ama byk ilerle urayorsak 8 bit hem vakit kaybettirir hem de zaman.
MSP430 Programlama Sayfa 11

MSP430un CPU biriminde toplam 16 adet saklayc grev yapmaktadr. Bunlardan ilk 4 ilemci iin zel olarak ayrlmtr(Dedicated Registers). Bunlar; PC,SP,SR/CG1,CG2 olarak adlandrlr.Dier 12 si ise genel amal(General Purpose Registers)olarak kullanlan(R4-R15 aras)saklayclardr.Aadaki resimde bunu biraz daha net anlayabilirsiniz.

MSP430da yer alan CPU kaydedicileri PC (Program Counter R0) : 16 bitlik 64-KB adres uzayna sahip program saycdr. Her artnda(n+2) bir sonraki iletilecek olan komutu gsterir. Komutlar 2 byte den fazla bile olsa PC ona gre adresleme yapabilir ve atanan tm komutlar bir dzene sokabilir. SP (Stack Pointer R1) : Stack pointer dediimiz alan, ilemcinin herhangi bir kesme veya alt program geldii anda PC(Program Counter)nin o anki konumunun(adres) kaydedildii alandr. Kesme veya alt program sonland an PC nereye dallanmas gerektiini buraya kaydettii en son adresten bilir. Bu alan MSP430 da RAMin en yksek deerlikli blounda 00280 adresinden itibaren yer alr ve dikey olarak(yukardan aa) adreslenir. Stack Pointera her eriim PUSH(itme) veya POP(ekme) olarak adlandrlr. Her POP ilemi LIFO(Last In First Out) kuralyla i grr ve reset annda bu saklayc sfrlanr. Aada, PUSH ve POP anlarnda SP ve PC deerlerine dikkat ediniz.

Stack Pointerda PUSH ve POP ilemleri


MSP430 Programlama Sayfa 12

Yukardaki resimde 0280 adresinden itibaren adreslenen Stack blgesinde PUSH ve POP olaylar anlatlmtr. Resimde de grld gibi Stack Pointera itilen her adresi, dikey adreslemeden dolay RAMde daha dk adresli blgelere yazlmaktadr. Ve ekilen her deer iin de LIFO kural geerlidir. SR (Status Register R2) :

Status Saklaycs C(Carry) : Eer bir aritmetik ilem sonucunda elde olumusa bu bit set edilir. Z(Zero) : Eer bir aritmetik ilem sonucu 0 sa bu bit set edilir, deilse 0 dr. N(Negative) : Eer bir aritmetik ilem sonucu 0 dan kkse bu bit set edilir. GIE(General Interrupts Enable) : Eer genel kesmelere izin verilmek isteniyorsa bu bit set edilmelidir. CPU OFF: Dk g modu iin CPUyu devre d brakma biti, Eer bu bit set edilirse CPU devre ddr. Ve sistem dk g modunda almaktadr. OSC OFF: Bu bit set edilirse LFXT1 kristal osilatr devre d kalr. SCG0(System Clock Generator 0 ) : Eer bu bit set edilirse DCOCLK devre d kalr. SCG1(System Clock Generator 1 ) : Eer bu bit set edilirse SMCLK devre d kalr. V(Overflow) : Tama biti. Eer bir aritmetik ilemin sonunda iaretli tarafa tama olmusa bu bit set edilir. Durum kontrol bitlerinin ounu C derleyicisi bizim yerimize yapyor Donanm iin kullanlan dier bitler ise MSP430 C derleyicisinde ilemler bitlerin isimleriyle yapldndan dolay(zellikle Clock ksmnda) ilerimiz baya bir kolaylayor. CPUOFF, OSCOFF, SCG0 ve SCG1 saklayclar ise CPU nun dk g modunda almasn salamak iin gereken kontrol bitleridir ve reset annda tm bitler 0dr. CG1 CG2 (Constant Generators) : MSP430un ilemcisinde ortak kullanlan alt adet sabit, CG1 ve CG2 kaydedicileri tarafndan retilir. Bu birimin amac aritmetik ilemlerde ok sk kullanlan saylar reterek bellee eriim gereksinimini azaltp, ilemleri daha hzl yapabilmektir. Bu ilemler iin ekstradan herhangi bir komut olmamas ok byk avantajdr. Assembler bu ilemleri otomatik olarak yapmaktadr. Aadaki resimde CG1 ve CG2 kaydedicilerine yklenen deerler sonucu yaplacak ilem grlmektedir.
MSP430 Programlama Sayfa 13

R2(CG1) ve R3(CG2) Saklayclar yklenen deerler sonucu yaplan aritmetik ilemler R4 R12 (General Purpose Registers) : Bu 12 saklayc genel kullanm amal saklayclardr. Bu saklayclarn hepsi akmlatr olarak veya adres gstericisi olarak veyahut da deerleri indekslemek(Cdeki diziler gibi) iin kullanlabilir. Byte ya da Word adreslenebilir sistemdedir.

MSP430 Programlama

Sayfa 14

BLM 2 MSP430 GR IKI AYARLARI


MSP430G2231 denetleyicisini pin yaps aada grlmektedir.

ekil 9 - MSP430G2231 Pin Yaps Yukardaki ekilden de anlalaca zere pin says dk olduu iin MSP430un pinlerine birden ok grev yklenmitir.MSP430G2231 P1 ve P2 olmak zere iki adet Giri/k portu vardr. P1 = 8 Giri/k P2 = 2 Giri/k bulunmaktadr. Portlarn tamamnda Pull-up veya Pull-down direnleri bulunmaktadr. 2.1-) Pin Ynlendirme Ve Kullanm Dier mikroilemcilerden farkl olarak MSP430da pin grevlerini zel olarak, dier registerlerden bamsz semek mmkndr. Genel anlamda ise pin ynlendirmelerini salayan registerler(kaydediciler) ve grevleri ksaca yledir. PxIN : PxIN : PxDIR : Port okuma kaydedicisidir. Sadece okuma yaplabilir. Port okuma kaydedicisidir. Sadece okuma yaplabilir. Port ynlendirmesidir. Bit 1 olduunda k, 0 olduunda giritir. Bu zellik itibari ile AVRlere benzemektedir. Pull-up diren ekleme ya da karma kaydedicisidir. 1 olduunda ilgili pine pull-up direnci balamaktadr. Bu kaydedici portun ilgili bitinin ne amala kullanlacan belirler. zellikleri ise aada grlebilir.

PxREN : PxSEL VE PxSEL2 :

ekil 10 - Pin Grevlerinin Tanm


MSP430 Programlama Sayfa 15

ekil 11 - P1e Ait Olan Saklayclar ve zellikleri Tabloda da grld gibi MSP430da g/ ilemleri PICdeki gibi deil. Portu okumak iin ayr, porta yazmak iin ayr kaydediciler kullanmamz gerekiyor. Bir ayrnty daha belirteyim MSP430da PICteki gibi bit bit ilem yapmak da mmkn klnm. Bununla ilgili detaya ileride deineceiz. imdi tek tek bu kaydedicileri inceleyelim P1DIR: Bu saklayc PIC teki TRIS yazmacna benzer. Ama TRIS yazmacyla P1DIR yazmac arasnda ters bir iliki vardr. Saklaycya yazlan deer; Bit = 1 ise k, Bit = 0 ise giri olarak ayarlanr. Reset durumunda deeri 000dr. rnek kullanm: P1DIR = 0xF0; // lk drt bit giri dierleri k P1REN: P1 deki dahili pull-up veya pull-down direnlerini kontrol etmek iin kullanlr. Eer; Bit = 0 ise pull-up/pull-down direnleri pasif Bit = 1 ise pull-up/pull-down direnleri aktiftir. rnek kullanm: P1REN = 0xF0; // lk drt pindeki pull-up direnleri aktif P1REN saklaycsnn ilgili bitlerinin 1 olmas durumunda direnlerin pull-up veya pull-down olma durumu P1OUT saklaycs tarafndan kontrol edilir. P1OUT: Bu kaydedici ise P1 portunda k olarak ayarlanan pinlerin durumunu deitirmek iin kullanlr. Yine kaydedicinin bitlerine 0 yazarsak kmz lojik 0 1 yazarsak kmz lojik 1 dir. rnek kullanm: P1OUT = 0x01; //P1.0 = 1 Ayrca P1 deki P1REN saklaycsnn pull-up veya pull-down olma durumunu da bu saklayc belirler. Eer P1OUT saklaycsnda P1REN saklaycsna denk gelen; Bit = 0 ise P1REN in ilgili biti pull-down Bit = 1 ise P1REN in ilgili biti pull-up grevini yapmak zere deimektedir. P1IN: Bu kaydedici P1 portunun giri olarak ayarlanm pinlerinin durumunu kontrol etmek iin kullanlr. Saklayc okunduktan sonra geri dnen deer Bit = 0 ise pin lojik 0, Bit = 1 ise pin lojik 1 dir. rnek kullanm:
MSP430 Programlama Sayfa 16

if(P1IN = 0x01) P1OUT=0x02; //P1.0 = 1 ise P1.1 i lojik 1 yap P1SEL: P1 Portunun herhangi bir pinini birka ama iin kullanabileceininden bata bahsetmitik. P1SEL saklaycs setiimiz pinin hangi ama iin kullanlacan sememizi salar. Burada PxSEL2 saklaycs imdilik bizim iimize yaramayacak nk kullanacak ok fazla modl yok. imdilik giri/k veya dier modllere ait pinleri semek iin P1SEL ve P1DIR saklayclarn yeterli.

ekil 12 - Herhangi bir pine ait fonksiyonlar belirlemek iin P1SEL ve P1DIR saklaycsna yazlmas gereken deerler imdi de P1 iin kesmeleri inceleyelim MSP430F2001in P1 ve P2sindeki her pin harici kesme kabiliyetine sahiptir. Yani balang iin setiimiz bu modelde 10 adet g/ bulunmakla beraber bu 10 un 10 u da harici kesme iin kullanlabiliyor. Bu imdilik hi de kmsenecek bir zellik deil. Kesmeler programn banda bir vektr ile tanmlanabiliyor. Bu ise hz demek. Evet, bata bit bit ilem yapabilme imkn var demitik. IARda bit bit ilem yapmak her ne kadar da Hi-Tech PIC C gibi olmasa da yine de idare eder gibi. Bu ksmdaki rneklerde de bit bit ilem yapmay gstermeye alacam. P1IFG (P1 Interrupt Flag) : P1deki her pinde harici kesme zellii olduundan bahsetmitik. P1 pinlerinin hangisinde kesme olutuunu P1IFG saklaycsnn durumundan reniyoruz. Eer setimiz; Bit = 0 ise, o pinde kesme olumam, Bit = 1 ise, o pinde kesme
MSP430 Programlama Sayfa 17

olumu anlamna gelmektedir. Eer kesme olmusa P1IFG saklaycs yazlmda temizlenmelidir. Aksi halde program hep kesme varm gibi alglayacaktr. rnek Kullanm : if(P1IFG_bit.P1IFG_7==1) //Eer P1.7 de bir kesme olumu ise; P1OUT_bit.P1OUT_0=1; //P1.0 = 1 P1IE (P1 Interrupt Enable) : P1de herhangi bir pindeki kesmeleri aktif veya pasif yapmak iin gerekli olan saklaycdr. Eer; Bit = 0 ise setiimiz pinde harici kesme kapal, Bit = 1 ise setiimiz pinde harici kesme aktr. rnek Kullanm: P1IE.bit_P1IE_7=1; //P1.7 iin harici kesme aktif.

P1IES (P1 Interrupt Edge Select) : Bu saklayc ise P1de setiimiz herhangi bir pinde oluan harici kesme iin den kenar veya ykselen kenarda kesme olumasn semeye yaryor. Eer; Bit = 0 ise ykselen kenar, Bit = 1 ise den kenarda kesmeye gidiliyor. rnek Kullanm: P1IES.bit_P1IES_7=1; isteniyor. //P1.7 iin den kenarda kesme olumas

Aada P1IES saklaycsnn den kenar veya ykselen kenar seilmesi durumunda P1IFG saklaycsndaki kesme bayraklarnn nasl etkilenecei grlyor.

ekil 13 - P1IES ve P1IN bitlerinin durumuna gre kesme bayraklarnn durumu


+3.3V

U1
10 11 12 13 RST/NMI/SBWTDIO P1.0/TACLK/ACLK/CA0 TEST/SBWTCK P1.1/TA0/CA1 XOUT/P2.7 P1.2/TA1/CA2 XIN/P2.6/TA1 P1.3/CAOUT/CA3 P1.4/SMCLK/CA4/TCK P1.5/TA0/CA5/TMS P1.6/TA1/CA6/TDI/TCLK P1.7/CAOUT/CA7/TDO/TDI MSP430F2001 2 3 4 5 6 7 8 9

P1.0

P1.1

ekil 14 Kesme Uygulamas


MSP430 Programlama Sayfa 18

#include <io430x20x1.h> #include "in430.h" /*Genel Kesmeleri aktif etmek iin gereken balk dosyas*/ #define #define #define #define #define #define #define LED0 P1OUT_bit.P1OUT_0 LED1 P1OUT_bit.P1OUT_1 P1REN7 P1REN_bit.P1REN_7 P1OUT7 P1OUT_bit.P1OUT_7 P1IE7 P1IE_bit.P1IE_7 P1IES7 P1IES_bit.P1IES_7 P1IFG7 P1IFG_bit.P1IFG_7

void main( void ) { WDTCTL = WDTPW + WDTHOLD; //Watchdog timer durduruluyor... P1DIR = 0x7F; P1OUT7 = 1; P1REN7 = 1; P1IE7 = 1; P1IES7 = 0; P1IFG7 = 0; //P1.7 //P1.7 //P1.7 //P1.7 //P1.7 //P1.7 Giri, dierleri k... de pull-up direnci seiliyor. deki pull-up direnci aktif. iin kesme aktif ediliyor. kesmesi iin ykselen kenar kesme bayra temizleniyor.

BCSCTL1= CALBC1_8MHZ; //DCOCLK 8MHZ Seiliyor... DCOCTL = CALDCO_8MHZ; _BIS_SR(GIE); LED0=1; //Genel Kesmeler aktif...

while(1); //lemci sonsuz dgde braklp, //harici kesmenin gelmesi bekleniyor. } #pragma vector=PORT1_VECTOR //P1 Kesme Vektr Tanmlanyor... __interrupt void P1_Kesmesi(void) { LED0=~LED0; LED1=~LED1; P1IFG7=0; // P1.7 kesme bayra temizleniyor }

MSP430 Programlama

Sayfa 19

2.2-) Port Okuma Ve Yazma Uygulamas Portlarn ynlendirilmesini daha iyi anlayabilmek iin bir uygulama yazalm. Bu uygulamamzda, P1 portumuza bal 4 adet pin ile P3 portumuza bal 4 adet ledi kontrol edeceiz. P1 portuna bal olan butonlardan birine basldnda, karsna denk gelen P3 portundaki led yanacaktr.

ekil 15 Port Okuma Yazma Uygulamas emas Devremizde grld gibi 4 adet buton bulunmaktadr. Bu butonlar ile P1 portunun ilk drt pini pull down a ekilmitir. Ayrca yeri gelmiken syleyeyim, bu uygulamamza ait yazlmda MSP430 da dahili olarak bulunan Pull Up ve Pull Down direnlerinden de bahsedeceiz. #include "io430.h" #include "in430.h" void main( void ) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR P1REN P1OUT P3OUT P3DIR = = = = = 0x00; 0x0F; 0xFF; 0x00; 0xFF;

while(1) { P3OUT = (P1IN & 0x0F); } }

MSP430 Programlama

Sayfa 20

Main fonksiyonunun ilk 4 satrn artk herkes anlamtr herhalde. Gelelim port ayarlarna. lk olarak P1 portuna ilikin ayarlamalar yaplmaktadr. lk olarak P1 portunun tamam giri olarak ynlendirilmitir. Ardndan da P1REN register na (Px Resistor ENable) 0x0F hexadecimal deeri yazlmtr. Bu u anlama gelmektedir. P1 portuna ait dahili pull up veya pull down direnlerini kullanacam anlamna gelmektedir. Fakat burada bir soru akla gelmektedir. Pull Up veya Pull Down direnlerinden hangisini kullanacam nasl belirleyeceim. Onuda giri konumunda bulunan portun PxOUT register ndan ayarlayacaz. Anlalaca zere, herhangi bir pin iin PxREN kaydedicisine Lojik1 yazlmsa, o pin dahili olarak pull up/pull downa ekilecektir. Pull up veya Pull down dan hangisine ekileceini ise PxOUT Register ile ayarlanmaktadr. lgili pin iin PxOUT register na Lojik1 yazlmsa o pin Pull Upa, Lojik0 yazlmsa Pull Downa ekilecek anlamna gelir.

ekil 16 Port1.0 ve 1.3 Pin Fonksiyonlar Yukardaki emadan da bunu rahatlkla anlayabiliriz. Eer P1REN kaydedicisi Lojik1 ise sar ile renklendirilmi ksmdaki anahtar aktif olmaktadr. P1OUT a da Lojik 1 yazlmsa, ilgili pin iin giriteki mux(multiplexer) sayesinde o pin DVCC ye, Lojik 0 yazlmsa, DVSS ye diren zerinden ekildiini anlayabiliriz. Yazlma devam edersek, P1 portu iin yaplan ayarlamalardan sonra, P3 portu iin ayarlamalar yaplmtr. lk olarak port temizlenmi, ardndan da port k olarak artlanmtr. Ardndan da while(1) ile sonsuz dngye girilmi, P1 portu srekli okunup, ilk drt biti maskelenip, P3 portuna aktarlmtr.

MSP430 Programlama

Sayfa 21

Birde unu sylemeliyim ki, sonsuz dngye girmenin tek yolu for(;;) { // Sonsuz dngde yaplacak ilemler... } Deildir. Sonsuz dngye aadaki gibide girilebilir. while(1) { // Sonsuz dngde yaplacak ilemler... }

BLM 3 MSP430 TMER AYARLARI


3.1-) TimerA Blm TimerA birimi 16bit ve 4 ayr moda alabilen bir timer birimidir. Saat kaynaklar istenildii gibi seilebilir (ACLK,SMCL vb.) ve 2 ya da 3 adet capture/compare registeri ierir. Ayrca PWM ayarlamas da yine bu sayc ile yaplabilimektedir. Bir dier zellik ise MSP430da bulunan kesme vektrleri sayesinde Timer_A birimi iin oluan kesme annda program vektrlere dallandrp ilemlerimizi daha hzl halledebiliriz. MSP430 un timerlar eitli sayma modlarna sahiptir. TimerA control register ierisindeki MC bitleri ile timer larn alma modlar ayarlanmaktadr. MC_0 : Timer Kapal MC_1 : Timer srekli olarak sfrdan CCR deerine kadar sayar. MC_2 : Timer srekli olarak 0 dan oxFFFF e kadar sayar. MC_3 : Timer srekli olarak sfrdan CCR deerine, CCR deerine ulanca tekrar sfra geri doru sayar.

ekil 17 Timer Modlar Biz uygulamamzda TimerA y Up Mode da kullanacaz. Yani Timer sfrdan bizim belirlediimiz CCR deerine kadar sayacak ve tekrar sfra dnecek. Sfra dnme yani resetlenme esnasnda da, kesme retecek.

MSP430 Programlama

Sayfa 22

3.1.1) TimerA Sayc Modu

ekil 18 TimerA Sayc Ksm TimerA sayc ksm ekil 18de grlecei zere farkl saat kaynaklarndan beslenebilmektedir. Bu kayna seen TASSELx bitleridir. Daha sonra seilen saat kayna IDx ile blm oranna girer ve ykselen kenarda tetiklenmek zere 16 bitlik sayc saymaya balar. stenilen anda TACLR biti 1 yaplarak TAR registerinin ierii sfrlanabilir. MCx ile sayc modlar seilir, sayc moda gre, dolduunda kesme bayra eker. TimerA ayarlanrken zamanlaycnn kapal olmas MSP datasheetinde nerilmitir. Ayrca TimerAnn almas iin MCxin mutlaka sfrdan byk olmas gerekmektedir.

ekil 19 TimerA Blok Diyagram


MSP430 Programlama Sayfa 23

TimerAy kontrol eden registerler ise aadaki gibidir.

ekil 20 TimerA Kontrol Register TASSELx Saat Kayna Seim Biti 00 TACLK 01 ACLK 10 SMCLK 11 INCLK Divider (Blc) 00 /1 01 /2 10 /4 11 /8 Mode Kontrol 00 Stop Mode 01 Up Mode (TACCR0a kadar sayacak) 10 Continious Mode (0xFFFFe kadar sayacak) 11 TACCR0-0- TACCR0-0.. eklinde sayacak TimerAy silen bit TimerA interrupt enable TimerA interrupt flag

IDx

MCx

TACLR TAIE TAIFG

Dier registerler iin datasheete baknz. 3.1.1.1-)TimerA Stop Modu Bu modda sayc durdurulur. Bir nevi saycnn almayaca anlamna gelir. 3.1.1.2-)TimerA Up Modu Bu modda sayc TACCRx registerine yklenen deer kadar arttktan sonra sayc sfrlanr ve tekrar sayc kendini TACCRxe kadar arttrr. ekil 21de bu modun alma ekli gsterilmitir.

ekil 21 TimerA Up Modu


MSP430 Programlama Sayfa 24

Sayc up moddayken sayc dolduunda CCIFG, sfr deerine ulatnda ise TAIFG bayra set edilir. Bu ksm ekil 22den ok net grlebilir.

ekil 22 Up Modda Set Edilen Bayraklar TimerA Up Mode iin kesme periyodu aadaki formlden hesaplanabilir.

) (

imdi TimerA Up Modu ile bir uygulama yaparak bilgilerimizi pekitirelim. Biz uygulamamzda TimerA y Up Mode da kullanacaz. Yani Timer sfrdan bizim belirlediimiz CCR deerine kadar sayacak ve tekrar sfra dnecek. Sfra dnme yani resetlenme esnasnda da, kesme retecek. Bizim kullanacamz UP Mode ile alakal ekili yukardan incelersek, almasn daha iyi kavrayabiliriz.
U1
11 12 13 14 25 26 27 28 17 18 19 20 21 22 23 24 P3.0/UCB0STE/UCA0CLK/A5 P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/A6 P3.7/A7 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB0/A12 P4.4/TB1/A13 P4.5/TB2/A14 P4.6/TBOUTH/A15 P4.7/TBCLK RST/NMI/SBWTDIO TEST/SBWTCK MSP430F2232 P1.0/TACLK/ADC10CLK P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK/TCK P1.5/TA0/TMS P1.6/TA1/TDI/TCLK P1.7/TA2/TDO/TDI P2.0/ACLK/A0 P2.1/TAINCLK/SMCLK/A1 P2.2/TA0/A2 P2.3/TA1/A3/VREFP2.4/TA2/A4/VREF+ P2.5/ROSC XIN/P2.6 XOUT/P2.7 AVCC AVSS 31 32 33 34 35 36 37 38 8 9 10 29 30 3 6 5 16 15

CLK CE RST

+3.3V

R1
10k

7 1

ekil 23 TimerA Uygulamas sterseniz yazlm da verip, zerinde konumaya balayalm #include "io430.h" #include "in430.h" #define LED P1OUT_bit.P0 unsigned char i; void main( void ) { WDTCTL = WDTPW + WDTHOLD;
MSP430 Programlama Sayfa 25

DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1OUT = 0x00; P1DIR = 0x01; TACCTL0=CCIE; TACCR0=50000; TACTL=TASSEL_2 + MC_1 + TAIE; _BIS_SR(GIE); for(;;); } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0 (void) { i++; if(i==10) { LED=~LED; i=0; } TACTL_bit.TAIFG = 0; } Yazlmda ilk olarak, daha sonra kullanlmak zeri P1.0 pinine bal olan led tanmlanm. Sonrasnda ise unsigned char trnden, i isimli bir deiken tanmlanmtr. Daha sonrada main fonksiyonuna geilmitir. Main fonksiyonunda ise ilk olarak her zamanki gibi WDT timer ve Clock ayarlar yaplmtr. Ardndan port ayarlarna geilmitir. Port ayarlarnda ise led imizin bal olduu P1 portu tamamen temizlenmi ve ardnan P1.0 pini k olarak artlanmtr. Daha sonra ise timer ayarlarnn yapld ksma gelinmitir. Timer ayarlarnn olduu ksmda ise TACCTL0(TimerA Capture/Compare Register 0) kaydedicisindeki CCIE biti Lojik1 yaplmtr. Bunun ekilde timer iin interrupt kullanmn aktif hale getirilmitir. Daha sonra ise TimerA CCR0 deerine 50000 says yklenmitir. Bir sonraki satrda greceiz ki, timer iin gerekli saat darbelerini SMCLK tan salayacaz. SMCLK y bata 1MHz olarak ayarlamtk. Yani Timer a gelen darbelerin frekans 1MHz, dolaysyla periyodu ise, 1sn dir. Yani Timer mz 50000*1sn = 50 msn de bir kesme retecektir. Gelelim bir sonraki satra.. Bir sonraki satrda ise TimerA control register iin gerekli ayarlar yaplmtr. lk olarak TASSEL(TimerA Clock Source Select) bitleri TASSEL_2 olarak ayarlanmtr. Yani timer a gelen saat darbeleri SMCLK tarafndan salanacaktr. Daha MC bitleri ise MC_1 olarak seilmitir. Bunun anlam ise TimerA UP Mode da altrlacaktr. Ve bu register da son olarak TAIE(TimerA Interrrupt Enable )bitide Lojik1 yaplarak kesmeler aktif hale getirilmitir. Ardndan da tm kesmelere izin verilerek sonsuz dngye girilmitir.
MSP430 Programlama Sayfa 26

Gelelim kesme alt programnda icra edilecek ilemlere Kesme fonksiyonuna ilk girildiinde main fonksiyonundan nce tanmlanan i deikeni 1 artrlmtr. Daha sonra ise bu deikenin 10 deerine eit olup olmad kontrol edilmitir. Eer eit deilse, kesme bayra temizlenip kesme alt programnda klmtr. Eit olduu taktirde de, P1.0 pinine bal olan led terslenmitir. Kesme alt programnda bu ekilde bir yntem kullanlmasnn sebebi udur. Yukarda hesapladmz gibi TimerA modl 50 msn de bir kesme retecektir. Kesme alt programna 10 kere girildiinde, toplam geen sre 500 msn olacaktr. Bu ekilde, 500 msn de bir led in durumu terslenerek led in 500 msn yank, 500 msn snk durumda olmas salanmtr. Bylelikle P1.0 pininde frekans 1 Hz olan bir sinyal elde edilmitir. Bunu o pine balanan bir frekansmetre ilede grebiliriz.

ekil 24 TimerA Uygulamas 1Hz Sinyal stersenin P1.0 pinindeki deikleri birde osiloskop zerinde inceleyelim.

MSP430 Programlama

Sayfa 27

ekil 25 TimerA Uygulamas Osilaskop Grnts 3.1.1.3-) TimerA Continuous Modu TimerA continuous modda alrken ekil 25da grld gibi ncelikle 0xFFFFe kadar sayar ve daha sonra sayc sfrlanr. Sfrland anda ise TAIFG bayra set edilir.

ekil 26 TimerA Cont. Mod Bu konuda timer frekans aadaki formlle hesaplanr.

(
3.1.1.4-) TimerA Down Modu

) (

TimerA up/down modda alrken sayc ekil 27de grld gibi nce TACCRxe kadar artarak sonra da azalarak sayar. Sayc her seferinde dolduunda CCIFGve sfrlandnda ise TAIFG bayra set edilir.

ekil 27 TimerA Down Mod


MSP430 Programlama Sayfa 28

Bu konuda timer frekans aadaki formlle hesaplanr.

) (

3.1.2) TimerA Up/Down Modunu Kullanarak Basit PWM Sinyali retmek TimerAnn bir zellii de basit ekilde PWM retmektir. Bunun iin saycy up/down moda almak ve TACCR0, TACCR1 ve TACCR2 registerlerini kontrol ederek basit PWM sinyali retmek mmkndr. ekil-28de de grlecei zere ncelikle TimerA saat kayna seimi ve TACCR0 ile frekans ayarlamas yaplr.

ekil 28 TimerA Down Mod ekil 28de grlecei zere sayc sfrdan saymaya balar ve TACCR2ye kadar deeri 1 dir. TACCR2ye ulatktan sonra sfr olur. Bu sfr olma ksm TACCR1e kadar srer. Bu ksma dead time ad verilmektedir. Daha sonra TACCR1den TACCR0 ve tekrar TACCR1e kadar k bir olduktan sonra periyodik ekilde bu sonsuza kadar devam eder. Bunlar oluurken meydana gelen kesme olaylar ise yine ekil-11den grlebilir. Bu kesmelerden yola klarak istenildii gibi PWM sinyalleri retilebilir. Dead Time=(TACCR1-TACCR2) eklinde hesaplanr. Burada yukarda da bahsettiim ufak bir ayrnt zerinde durmak istiyorum MSP430G2231 ve MSP430G2211 modellerinin her birinde toplam iki adet CCR saklaycmz bulunuyor. Yani TACCR0 ve TACCR1 (Timer_A2). Grafiklerde verilenler Timer_A3 saklaycs bulunan mikrodenetleyiciler iin geerli. MSP430 LaunchPad zerinde bulunan mikrodenetleyiciler ise Timer_A2 saklaycsna sahip. Timer saklayclarnn fazla olmasnn getirdii avantaj ise grafiklerde grlyor. Sayclarn fazla olmas sonucu daha hassas PWM retilebiliyor.

MSP430 Programlama

Sayfa 29

BLM 4 COMPARATOR_A+ BRM


Comparator_A+ modl ierisinde analog gerilim karlatrc barndrr. Analog gerilim karlatrclar iki giri arasndaki gerilim farkna gre k veren yaplardr.

ekil 29 MSP430 Comparator_A+ Blok Diyagram ekil 29da modln blok diyagram grlmektedir. Grld gibi karlatrc girileri CA0CA7 girilerinden seilebilir. Karlatrc k ise RC filtre zerinden veya direk olarak darya verilebilir. Ayrca k ile kesme oluturulabilir ve Timer_A capture modl tetiklenebilir. Grld gibi modl ierisinde sabit gerilimler elde etmek iin farkl deerlerde k verebilen dahili referans gerilim reteci bulunmaktadr. Ayrca g tasarrufu salamak iin karlatrc modl ve referans gerilim reteci yazlm ile kapatlabilir. Comparator_A+ yap olarak karmak grnmesine karn kontrol deikenleri ile kolaylkla kontrol edilebilmektedir. 4.1-) Karlatrc Karlatrc + ve girilerinin gerilim deerlerini karlatrr. Eer + girii giriten daha pozitif ise CAOUT biti 1olur. Karlatrc CAON biti ile ap kapatlabilir. Karlatrc
MSP430 Programlama Sayfa 30

kullanlmad durumlarda kapatlarak g tketimi azaltlabilir. Karlatrc kapal olduu zaman CAOUT biti srekli 0okunur. 4.2-) Karlatrc Girileri Karlatrc girileri P2CAX bitleri ile CA0 CA7 girilerine balanabilir. stenirse bir giri dahili referans voltaj retecine balanarak kullanlabilir yada her iki giri darya aktarlabilir. 4.3-) k Filtresi Karlatrc kna istenirse dahili RC filtre balanabilir. Dahili filtreyi aktif etmek iin CAF bitini set etmek yeterlidir. Karlatrclar girileri arasndaki gerilim fark kld zaman klarnda kararszlk gsterirler. Ayrca dahili yada harici parazitik etkiler, sinyal hatlar aras geiler, g kayna sinyalleri ve sistemdeki dier ksmlar parazitik etki oluturarak k etkileyebilir. ktaki bu kararszl en aza indirmek iin dahili RC filtre kullanlabilir. RC filtre kullanmnn karlatrc kna etkisi aadaki grafikte grlebilir.

ekil 30 Karlatrc filtrelenmi ve filtrelenmemi k grafii 4.4-) Referans Voltaj reteci Referans voltaj retici karlatrc iin Vcaref gerilimini salar. Bu modl sayesinde karlatrc iin Vcc/2, Vcc/4 yada sabit transistr eik gerilimi(yaklak 0.55v) gibi deerlerde gerilimler elde edebilirsiniz. Elde edilen gerilim karlatrcnn her iki giriini de balanabilir. Gerilim deeri CARSEL bitleri ile belirlenir. Referans voltaj reteci kullanlmad zaman kapatlarak g tasarrufu yaplabilir. 4.5-) Comparator_A+ Port Kapama Kaydedicisi CAPD Karlatrc girileri dijital I/O portlarndan alnr. Bu nedenle dijital I/O girilerine analog iaret uygulanr. Bu analog iaretlerin gerilimi I/O ierisinde bulunan CMOS kap bloklarn gei seviyesine yakn olduu zaman Vccden Gndye doru parazitik akmlarn akmasna neden olur. CAPDx biti set edildii zaman ilgili port bitini giri/k tamponu kapatlarak parazitik akm akmas engellenir. Bu ilem ekilde grlebilir. Karlatrc girii iin seilen I/O pinlerinin giri/k tamponu ilgili pinin CAPDx bitine baklmakszn otomatik olarak kapatlr. Akm tketiminin nemli olduu uygulamalarda CAPDx bitleri kullanlarak g tketimi azaltlabilir.

MSP430 Programlama

Sayfa 31

ekil 31 - Comparator_A+ Port Kapama Kaydedicisi CAPD 4.6-) Comparator_A+ Kesmesi Comparator_A+ modl tek bir kesme bayra ve vektrne sahiptir. Karlatrc knn ykselen veya den kenarnda kesme oluturabilir. Kenar seimi CAIES biti ile yaplr. CAIE ve GIE bitleri set edildii zaman kesme oluturmaya izin verilir. Kesme bayra(CAIF) kesme servis rutini altrld zaman otomatik olarak temizlenir ya da yazlm ile temizlenebilir.

ekil 32 - Comparator_A+ Kesme Yaps 4.7-) Comparator_A+ Kaydedicileri Comparator_A+ modlnn 3 adet kontrol kaydedicisi mevcuttur. Bunlar ekil 33te grlebilir

ekil 33 - Comparator_A+ Kaydedicileri

MSP430 Programlama

Sayfa 32

MSP430 Programlama

Sayfa 33

4.8-) Comparator_A+ Uygulamas Comparator_A+ modlnn almasnn anlalmas iin basit bir rnek uygulamamz bulunmaktadr. rnek uygulamada karlatrcnn girii referans voltaj reteci kullanlarak Vcc/2 gerilimine balamtr. + girii ise P1.1 (CA1) pinine balanmtr. Potansiyometre yardm ile CA1 giriindeki gerilimi arttrlmaktadr. Gerilim deeri Vcc/2 (yaklak 1.7v) deerinden byk ise P1.0 ledi yanmakta kk ise snmektedir. Uygulamada Msp430G2231 de Comparator_A+ modl bulunmadndan Launchpad kit ierisinde bulunan dier denetleyici Msp430G2211 kullanlmtr. main.c
// Msp430 // MSP430G2211 // ----------------// /|\ | XIN|// | | | // -----|RST XOUT|// | | | // R -->|P1.1/CA1 P1.0|-->LED // | | | // -----|VSS | // //*************************************************************/ #include "io430g2211.h" void main( void ) { WDTCTL = WDTPW + WDTHOLD; // Watchdog timeri durdur. BCSCTL1 = CALBC1_1MHZ; // 1mhz dahili osilatr DCOCTL = CALDCO_1MHZ; // SMCLK = DCO = 1MHz P1DIR |= 0x01; // P1.0 k CACTL1 = CARSEL + CAREF1 + CAON; // karlatrc alr, Vcc/2 referans gerilimi -girie uygulanr. CACTL2 = P2CA4 + CAF; // P1.1/CA1 = +comp, RC filtre aktif. while (1) // Comparator_A+ k denetlenir. { if ((CAOUT & CACTL2)) P1OUT |= 0x01; // CAOUT = 1 ise, P1.0 = 1 else P1OUT &= ~0x01; // deilse P1.0 = 0 }
}

MSP430 Programlama

Sayfa 34

ekil 34 - Comparator_A+ Uygulama Sonucu


MSP430 Programlama Sayfa 35

BLM 5 ACD10 MODL


MSP430larn bazlarnda bulunan ACD10 modln bu blmde inceleyeceiz.ACD10 modl adndan da anlalaca zere 10 bitlik Analog/Dijital dnm yapmaya olanak sunan bir modldr.Bu modl kendi iersinde 1.5V ve 2.5V referans gerilimi retebilmektedir Bu modl yeni tip mikroilemcilerde grmeye baladmz i scaklk sensrn de barndrr.

ekil 35 MSP430 ADC10 Modl Blok Diyagram ADC10 modl, 10 bitlik A/D evrim sonucunu ADC10MEM adl deikende saklamaktadr. Bu birim, VR+ ve VR- olmak zere iki adet referans gerilimi kullanmaktadr. Bu referans gerilimleri yazlmla ayarlanabilmektedir. Mesela VR+ iin Vcc(~3.5v) veya 2.5v veya 1.5v olmak zere dahili referans gerilimleri kullanlabilir. Donanmdaki bu esneklik de uygulamalarda bize kolaylk salamaktadr. Yine bu modl iin, yazlmla ayarlanabilen farkl iaret kaynaklarn kullanabiliriz. Genelde ideal olarak ADC10CLK kullanlmaktadr. Bu kaynan frekans ~1.5 Mhz ile 6.3 Mhz arasnda deiebilmektedir. LaunchPad iin MSP430G2231 mikrodenetleyicisinde P1 Portunun tm pinleri analog giri olarak seilebilmektedir. Bu ilem, ADC10 saklayclarndan ve P1DIR saklaycsndan yaplmaktadr. ADC10 Modlndeki bir dier zellik ise bu birimin kullanlmad zaman otomatik olarak devre d braklmasdr. (Auto Power-Down) Bu birim, yine ayn ekilde kullanlaca zaman otomatik olarak tekrar aktif edilmektedir.
MSP430 Programlama Sayfa 36

5.1-)ADC lemleri 5.1.1-)Referans Belirleme MSP430 ile ADC ilemine balamadan nce her ADC ileminde olduu gibi gvenilir bir referans gerilimine ihtiyacmz vardr. ADC10 Referans gerilimi reteci dahili olarak 2.5v ve 1.5v gerilim retebilmektedir. Eer bu birimin rettii referans gerilimi kullanlmak isteniyorsa REFON=1 yaplmaldr. REFON = 1 iken REF2_5V = 1 ise bu birimden alacamz gerilim 2.5v tur. Eer REF2_5V = 0 ise, bu birimden 1.5v gerilim alnmaktadr.

ekil 36 ADC Referans Blou Eer dahili deil de harici bir referans gerilimi kullanlmak isteniliyorsa REFON = 0 yaplmaldr. Bu bir 0 yapld takdirde VR+ ve VR- referans gerilimleri A4 ve A3 pinlerinden verilmelidir. Eer referans gerilimi olarak Vcc veya harici kaynaklar kullanlyorsa, dahili referans gerilim reten birim g tketimini azaltmak iin devre d braklmaktadr. 5.1.2-)evrim Frekans Belirleme Aada blok diyagramda da grld gibi ADC10 modl iin iaret kaynan ayarlamak iin ADC10SSEL bitlerini istediimiz kaynaa gre deitirmemiz gerekiyor. aret kayna olarak SMCLK, MCLK, ACLK ve ADC10CLK seilebilir. Genellikle yaygn olarak daha hzl olduu ve daha haz g harcad iin ADC10CLK kullanlmaktadr. Bu kaynan frekans 1.5Mhz ile 6.3 Mhz arasnda deiebilmektedir(Ayrnt iin ltfen kullandnz modelin datasheetine baknz). Bu kaynan kullanlma sebebi birimin fazla g harcamamas ve ADC evrim ileminin ortalama bir hzda gerekletirilebilmesi iindir. Eer hzl bir ADC okuma ilemi gerekmiyorsa

ekil 37 Frekans Blou


MSP430 Programlama Sayfa 37

ACLK kullanlp, daha fazla g tasarufu edilebilir. Hemen yannda grnen ACD10DIV blou ise setiimiz iaret kaynan kaa blmek iin kullanlmaktadr. Bu frekans blc, seilen kayna 1, 2, 3, 4, 5, 6, 7, 8e blebilmektedir. 5.1.3-)ADC10 Giri Seimi ADC10 modlnde analog giri seimi yukardaki ekilden de grld gibi ADC10CTL1 saklaycsndan INCH bitleri ayarlanarak yaplmaktadr. Analog giri olarak setiimiz pini aktif etmek iin ise ADC10AE saklaycs kullanlmaktadr. Bu saklaycnn kullanm P1DIR saklaycsna ok benzemer, hangi pini aktif etmek istiyorsak o pinin karl yazmak yeterli olmaktadr. rnein; A0 pinini analog giri olarak seelim. Bu pin P1.0 pinine karlk gelmektedir. Bunun iin ADC10AE saklaycsna BIT0 yazmamz yeterli olacaktr. ADC10CTL1 = INCH_0; // Analog Giri P1.0 Seildi ADC10AE0 = BIT0; // Analog Giri Aktif Edildi P1DIR = 000; // Tm Pinler Giri 5.2-)ADC Kullanm Registerleri MSP430un ADC birimine ait registerlardan bahsedecek olursak, toplam 8 adet register bulunmaktadr. Srasyla, nemli ayarlara biz gz atmak faydal olacaktr.

ekil 38 ADC10 Registerlar

MSP430 Programlama

Sayfa 38

ADC10CTL0 (ADC10 Control Register 0)

SREFx bitleri referans gerilimi ayarlamak iin kullanlrlar.

ADC10SHTx bitleri adc rneinin ka adc clock darbesinde alnacan belirler.

REF2_5V biti ile de dahili referans kaynann deeri belirleniyor.

REFON biti ile de dahili referans kayna alyor.

ADC10ON biti ile ADC birimi alp kapatlyor.

MSP430 Programlama

Sayfa 39

ADC10IE biti ile ise adc evrimi sonland zaman kesme retilip retilmeyecei ayarlanyor.

ADC10IFG biti ise ADC birimi kesme bayradr. ADC sonucu ADC sonu registerna yazldnda bu bayrak set edilir. Kesme aktif ise kesme alt programna dallanlr. Ve bu bit yazlmla temizlenmelidir.

ENC biti ise ADC10SC biti ile birlikte kullanlr. ADC evrimi tek evrim modun da ADC10SC biti ile birlikte bu bitte lojik1 yapldnda balamaktadr.

ADC10CTL0 (ADC10 Control Register 1)

INCHx bitleri ile ADC iin evrim kanal seilir. SHSx bitleri ile de rnekleme ilemi iin kaynak seimi yaplr. ADC10DF biti ile ise adc sonucunun format belirlenir. ADC10DIVx bitleri ile de adc clock kaynann blcs belirlenir. ADC10SSELx bitleri ile ise clock kayna seilir.
MSP430 Programlama Sayfa 40

Bu arada bu iki control registernda gri renkli bitler ENC biti sfr iken deitirilebilir Bu yzden her ihtimale kar yazlmda ADC ayarlar yaplrken ENC biti sfrlanr. Dier registerlara da bakacak olursak;

ADC10AE0x ve ADC10AE1x register lar ile ADC girii aktif edilmek istenen pinler iin lojik 1 yaplr. ADCAE1x register sadece MSP430x2xx serisi iindir.

ADC10MEM register ise 10 bitlik adc sonucunun sakland kaydedicidir. ADC birimi iin data format binary ise 16 bitlik bu register n ilk 10 biti evrim sonucunu ierir. Dier kalan bitler ise 0 olarak okunur. Data format 2ye tmleyen olarak seilmise adc evrim sonucu 2 ye tmlenmi ekilde sola yatk olarak (left justified) yazlr. Lsb 6 bit ise 0 olarak okunur.

MSP430 Programlama

Sayfa 41

5.3-) Scaklk Sensr MSP430G2231in ADC10 Modl ierisinde scakl lebilmemize olanak tanyan dahili scaklk sensr bulunmaktadr. Bu da profesyonel uygulamalarda hem entegrenin bulunduu ortamn scakln renmede, hem de iletiim hzlar gibi kritik uygulamalarda, scaklkla deien frekans tekrar kalibre etmek iin kullanlmaktadr. Kullanm ise ok basittir. Sadece analog giriimizi analog bir pin olarak deil de scaklk sensr olarak gstermemiz yeterli olacaktr. //Vr+=Vref+ Vr-=Vss, x64 CLK, Referans Gerilimi Ak, ADC10 Aktif, ADC10 Kesmeleri Aktif ADC10CTL1 = INCH_10 + ADC10DIV_5; //10.Kanal Seiliyor(Scaklk Sensr), ADC10 Frekans Blc=/6

ekil 39 Dahili Scaklk Sensr MSP430un ierisindeki bu scaklk sensr ekil 34den de grlecei zere bize lineer bir karakteristik gstermektedir.

ekil 40 - Temp Kanal Karakteristii


MSP430 Programlama Sayfa 42

ekil 34deki karakteristii verilen sensr kullanabilmek iin ekil 35deki bilgiler gz nne alnmaldr.

ekil 41 Temp.Bilgileri ekil 40 gz nne alndnda Voffset gerilimi 0 kabul edilirse scaklk deeri aadaki formlle hesaplanabilir;

T=(Vsensor/TCsensor)-273 T=(Vsensor/1.32)-273

rnein Vsensor 395 olursa T, yukardaki forml iletildiinde 26C bulunacaktr. imdi de MSP430un dahili scaklk sensr ile lm yapalm.

ekil 42 MSP430 Scaklk Sensr Okuma


MSP430 Programlama Sayfa 43

#include <msp430.h> #include "delay.h" #include "lcd.h" unsigned int sayi=0, temp=0, Vsensor=0; void main(void) { WDTCTL = WDTPW +WDTHOLD; // Watchdog timer kapatlyor // alma frekans 1MHz BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; BCSCTL3= LFXT1S_2; P1DIR = 0x07; // P1.0, P1.1, P1.2 k olarak tanmlanyor // P1.0, P1.1, P1.2 GPIO, P1.4 A2 olarak ilev yapacak // Giri frekans 48'e blnyor, rnekleme frekansmz 166kHz // 1.2V referans gerilimi aktif // SMCLK frekans kayna olarak kullanlacak, 8MHz SD16CTL= SD16XDIV1 | SD16XDIV0 | SD16REFON | SD16SSEL_1; // A6+ seildi, kazan 1, 4 rnek sonra kesmeye girilecek // A6=temp olacak SD16INCTL0=SD16INCH_6; // Kesme aktif // evrim unipolar, yani 0V=0, 3.3V=0xFFFF olacak // evrim memory'nin son 16 bitine atlacak // evrim unipolar // 256OSR SD16CCTL0 = SD16UNI | SD16IE; // Tm A-'ler VSS'ye balanacak SD16AE = 0; DelayMs(500); // LCD'nin ilemcisinin stabil olmas // iin 250ms bekleniyor lcd_init(); lcd_gotoxy(1,1); lcd_yaz("FxDev.org-MSP430"); lcd_gotoxy(2,1); lcd_yaz("Temperature Exm."); DelayMs(2000); // evrime balanyor SD16CCTL0 |= SD16SC; _EINT(); // Enter LPM0 w/ interrupt lcd_clear(); lcd_gotoxy(1,1); lcd_yaz("Temp="); for(;;) { Vsensor=(int)((float)sayi*0.00916); temp=(int)((float)Vsensor*1.32)-273; lcd_gotoxy(1,6); veri_yolla((temp%1000)/100+48); veri_yolla((temp%100)/10+48);
MSP430 Programlama Sayfa 44

veri_yolla(0xDF); veri_yolla('C'); } } // SD16 kesme vektr #pragma vector = SD16_VECTOR __interrupt void SD16ISR(void) { sayi=SD16MEM0; SD16CCTL0&=~SD16IFG; // Kesme bayra temizleniyor

Devrenin alr halini ekil 43de grebilirsiniz.

ekil 43 Scaklk Okumas

MSP430 Programlama

Sayfa 45

5.4-) ADC10 Modl le Gerilim lm Yalnz proteus zerindeki MSP430 mikrodenetleyici modellerinin ADClerinde problem olduunu iin srekli referans gerilim 5Vmu gibi davranyor. Bu nedenle referans gerilim her ne kadar 5V olmasada uygulama yaparken 5V olarak dnelim. Ben uygulamay launchpad zerinde denerken bir problem kmad. Normal olarak referans gerilimi Vcc GND aras kabul ediyor. Ama proteusta olmad. Hatta baz modellerde adc hi almyor. Bu nedenlede uygulamalarda srekli kullandmz MSP430F2232 yerine F2112 modelidir.

ekil 44 - Gerilim lm Devresi Devrede grld gibi bir adet 6 kademeli switch bulunmakta. Srasyla her bir ucuna, 0V, 1V, 2V, 3V, 4V, 5V luk gerilimler uygulanmaktadr. Switch in dier ucu ise ADC biriminin A0 kanalna gidiyor. Ve llen deeri grntlemek iin bir adet lcd miz bulunmaktadr. Lcd miz iin daha nceki yazlarda oluturduumuz ktphaneleri kullanacaz. Bu yazda o ksma girmeyeceiz. #include "io430.h" #include "in430.h" #include "lcd_4bit.h" unsigned int ADC_Result = 0x0000; unsigned char str[4]; void adc_init(void) { ADC10CTL0 & = ~ENC; ADC10CTL0 = ADC10SHT_3 + ADC10ON; ADC10CTL1 = INCH_0 + ADC10SSEL_3 + ADC10DIV_3;
MSP430 Programlama Sayfa 46

ADC10AE0 = BIT0; } void LCD_Write_Int (unsigned int val,char mul) { char j; int temp=1; for(j=0;j<mul;j++) { str[j] = (((val/temp)%10)+48); temp*=10; } for(j=0;j<mul;j++) lcd_putch(str[3-j]); } void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1SEL = 0x00; P1OUT = 0x00; P1DIR = 0xFF; P2SEL_bit.P6 = P2SEL_bit.P7 = P2DIR_bit.P6 = P2DIR_bit.P7 = adc_init(); lcd_init(); for(;;) { lcd_goto(1,1); lcd_puts(" A0 KANALI "); ADC10CTL0 |= ADC10SC + ENC; while(!ADC10CTL0_bit.ADC10IFG); ADC_Result = ADC10MEM; lcd_goto(2,4); LCD_Write_Int(ADC_Result,4); lcd_puts("/1023"); __delay_cycles(10000); }
}

0; 0; 1; 1;

Yazlmda ilk olarak ADC_Result isimli integer trden (2 byte) bir deiken tanmlanmtr. Daha sonra str isminde bir unsigned char dizisi tanmlanmtr. Bu dizi 4 haneli adc sonucu
MSP430 Programlama Sayfa 47

lcd ye yazdrlrken kullanlacaktr. Daha sonra ise adc ayarlarnn olduu adc_init() isminde bir fonksiyon yazlm ve ardndan da adc sonucunu ekrana yazdrmak iin bir fonksiyon yazlmtr. Bu fonksiyon ile main program ierisinde adc sonucu ekrana yazdrrken kod karmaas ortadan kalkmtr. LCD_Write_Int() fonksiyonu ile display e 2 byte lk bir integer deere kadar, (65535 e kadar) ka haneli isteniyorsa o ekilde lcd ye yazdrlabilir. Siz uygulamalarnzda bu fonksiyonu farkl ekillerde dahada genileterek daha byk saylarda lcd ye yazdrabilirsiniz. Tabi bunun iin ncelikle str adl dizinin boyutunu deitirmeyi unutmayn. Main fonksiyonunu incelersek te, ilk olarak WDT,Clock ve Port ayarlar yaplmtr. Ardndan adc ve lcd ayarlarnn olduu fonksiyonlar arlp sonsuz dng ierisine girilmitir. Sonsuz dngde ise ilk olarak lcd displayin birinci satrna A0 KANALI string i yazdrlm, ardndan evrim balatlm ve evrimin bitmesi beklenmitir. Bu arada unuda syleyelimki, bu uygulamada biz adc kesmesi kullanmadk. evrimin bittiini polling (yoklama) yntemiyle saptadk. Yazlmda daha sonra ise ADC sonucu ADC10MEM kaydedicisinden okunup lcd ye yazdrmak iin kullandmz fonksiyona gnderilmitir. Sonrasnda bir sre gecikme oluturulmutur. Bu ilemler mikrodenetleyicinin enerjisi kesilene kadar bu ekilde sregelmektedir. Gelelim simulasyon sonularna Bu arada adc sonucu 10 bitlik olarak (0~1023/00000~0x03FF) arasnda displayde gsterilmektedir. Her ne kadar referans gerilimimiz 3.5V civar olmas gereksede, 5V olarak kabul edip o ekilde dnelim.

GERLM > %00

MSP430 Programlama

Sayfa 48

GERLM > %20

GERLM > %40

GERLM > %60

MSP430 Programlama

Sayfa 49

GERLM > %80

GERLM > %100

Siz bu uygulamay launchpad zerinde kolaylkla deneyebilirsiniz. Bir adet potansiyometre size yetecektir. IAR zerinde lcd sonucunun ADC10MEM kaydedicisinden okunduu ksmdan sonraki satra bir breakpoint koyarak debug ilemini gerekletirebilirsiniz.

MSP430 Programlama

Sayfa 50

BLM 6 MSP430 LE DSPLAY KONTROL UYGULAMASI


6.1-) Displayler Hakknda Genel Bilgiler Herhangi bir ortamda bulunan deerlerin ne olduunu anlamak iin kullanlabilecek aralardandr. Kullandmz deerlerin nasl ilediini bu tr gstergeler sayesinde grebiliriz.

ekil 45 Segment Display Displayler ortak anot (Common Anode - CA) veya ortak katot (Common Cathode - CC) olmak zere iki eit retilmektedirler. Sadece ortak u olan COM ucu ortak katot displaylerde (-), ortak anot displaylerde (+) beslemeye balamadr. Aada da grld gibi her bir kola (ya da LEDe) segment ad verilir. Ayrca ekilde de grld gibi segmentlerin her biri a, b, c, d, e, f, g olmak zere isimlendirilmilerdir. Birde h segment vardr yani nokta bu segment pek fazla kullanlmaz.

ekil 46 Ortak Anot Ve Ortak Katot 7 Segment Displayler Aadaki ekilde ortak anot displayin iyaps grnmektedir. Gstergenin yapsnda 8 adet LED bulunur. Bunlar bir dzene konmutur. Anot ve katot sisteminde bir kod zc gibi davranarak bacaklarna gelen deerleri iler ve bize istediimiz deeri verir.

MSP430 Programlama

Sayfa 51

ekil 47 Ortak Anot Displayin Yaps 6.2-) 74HC164 le Display Srme Bu blmde 74HC164 entegresini kullanarak, sadece iki kla 7 Segment Display sreceiz. 74HC164 entegresi seri girili, paralel kl bir shift register(kaydrmal kaydedici) entegresidir. Bu entegrenin 1/2 ularndan 7Segment iin rakam deerlerini seri olarak gndereceiz. Entegrenin 8.pininden ise her bir bit gnderiminde clock pulsemz uygulayacaz.

ekil 48 74HC164 Bacak Balantlar 74x164 serisi shift registerler seri giriten ald bilgiyi 8 bit ka clock sinyalleri ile aktaran seri giri paralel k shift registerdr. 74x164 2 adet seri giri 8 adet 20mA paralel k, 1 adet seri k clear ve clock ucu bulunur. Clear ucu 0 olduu zaman tm klar sfrlanr.
MSP430 Programlama Sayfa 52

Data girii esnasnda ise clear ucu 1 olmaldr. 2 adet data giriinden herhangi birisine data girii yaplr. Bir VE(And) kaps kullanlarak her iki data giriinden de data girii yaplr. En ok ise data girileri birletirilerek tek bir data eklinde kullanlmaktadr. Seri k ucu ise dier 74x164ler ile seri(kaskat) balant amacyla kullanlr.

ekil 49 74HC164 Lojik Diyagram Aadaki devrede seri giri data giriidir. lk data 1 yaplr clock 1 ve hemen 0 yaplr daha sonra data 0 yaplr bir clock sinyali daha verilir, data 0 yaplr ve ikinci clock uygulanr. ekildeki grnt oluur. Her clock sinyalinden sonra dataya girilen 1 veya 0 deerinin 1 saa kayd grlr. lk girilen bilgi 4 bit register olduu iin 4 clock sinyali sonunda en sona U4 flipflopuna ve seri kna ulamaktadr.

PARALEL IKILAR
D1
LED

D2
LED

D3
LED

D4
LED

U1

U2
Q D CLK Q Q DTFF Q

U3
D CLK Q DTFF Q

U4
D CLK Q DTFF Q

DATA 0

D CLK

1 SER IKI

DTFF

CLOCK 1

ekil 50 74HC164 Deneme Devresi

MSP430 Programlama

Sayfa 53

Buraya kadar anlatlan ksm 74HC164 entegresinin alma ve kontrol etme mantyd. imdi devremize geelim.Devremizde bir adet 74HC164 entegresi, bir adet Seven Segment Display ve displayi srmek iin 7 adet diren bulunmaktadr.

R1
330R

U1
10 11 12 13 RST/NMI/SBWTDIO P1.0/TACLK/ACLK/CA0 TEST/SBWTCK P1.1/TA0/CA1 XOUT/P2.7 P1.2/TA1/CA2 XIN/P2.6/TA1 P1.3/CAOUT/CA3 P1.4/SMCLK/CA4/TCK P1.5/TA0/CA5/TMS P1.6/TA1/CA6/TDI/TCLK P1.7/CAOUT/CA7/TDO/TDI MSP430F2011 2 3 4 5 6 7 8 9 9 8

U2
R SRG8 C1/-> 3

1 2

&

1D 4 5 6 10 11 12 13

74164

Grld gibi displayi srmek iin mikrodenetleyicimizin sadece 2 pinini kullanyoruz. Bu gerekten bizim iin olduka kullanl bir durumdur. ekil 51 MSP430 Ve 74HC164 le Display Devresi #include "io430.h" #include "in430.h" #define #define DATA CLOCK P3OUT_bit.P0 P3OUT_bit.P1 0x06, 0x6D, 0x6F, 0x5E, 0x5B, 0x7D, 0x77, 0x79, 0x4F, 0x07, 0x7C, 0x71};

const unsigned char digits[]={0x3F, 0x66, 0x7F, 0x39, void delay (unsigned char nval) { unsigned int j; while(nval--) for(j=25000;j>0;j--); } void main( void ) { unsigned char i,k; WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ;
MSP430 Programlama

Sayfa 54

P3OUT = 0x00; P3DIR = BIT0 + BIT1; for(;;) { for(i=0;i<10;i++) { for(k=0;k<8;k++) { DATA = ((digits[i]>>k) & 0x01); CLOCK = 1; CLOCK = 0; } delay(5); } }
}

Yazlmda ilk olarak, Data ve Clock pinlerimiz iin gerekli tanmlamalar yaplm. Ardndan da seven segment display iin rakam kodlarnn olduu dizi tanmlanm. const unsigned char digits[]={0x3F, 0x66, 0x7F, 0x39, 0x06, 0x6D, 0x6F, 0x5E, 0x5B, 0x7D, 0x77, 0x79, 0x4F, 0x07, 0x7C, 0x71};

Sonrasnda ise gecikme fonksiyonumuz oluturulmutur. Bu gecikme fonksiyonumuz daha ncekilerden biraz farkl. Bir adet unsigned char trnden parametre alyor. Bu parametre fonksiyonun ka defa ileneceini belirten bir parametredir. Main fonksiyonu ierisinde bu parametreyi kullanrken daha iyi greceksiniz zaten. Geelim main fonksiyonumuza. Main fonksiyonunda ise ilk olarak i ve k isimli unsigned char trnden iki adet tanmlanmtr. Bu deikenlerden biri display zerinde gsterilecek rakamlarn saysn, dieri ise gnderilecek olan rakam kodlarnn bit saylarn (yani 8 saysn) tutmaktadr. Ardndanda WDT ve Clock ayarlar yaplm ve P3 portu temizlenerek ilk iki biti k olarak artlanmtr. Sonrasnda ise sonsuz dngye girilmitir. Sonsuz dngde ise az nce tanmladmz i ve k deikenleri iin i ie dng oluturulmutur. i deeri 0 dan 9 a kadar olan rakamlar gstermeye, k ise 8 adet biti gndermeye yarayacaktr. En iteki 8 defa tekrarlanacak olan dngde, ilk olarak, DATA pininden harf koduna ilikin bitlerden sras geleni gnderilmitir. Ardndan CLOCK pini Lojik1 ve Lojik0 yaplarak bir adet saat darbesi salanmtr. Bu clock darbesi sayesinde, gnderdiimiz data shift register entegresi tarafndan alnmas salanmtr. Bu dngnn iindeki ilemler 8 defa tekrarlanarak, display rakam kodlarnn 8 bitinin her biri seri olarak yani tek tek gnderilmesi salanmtr. Displaye bir rakama ait kodlar gnderildikten sonra, delay() fonksiyonunun iindeki kodlar 5 kere dndrlerek bir sre gecikme salanmtr. } delay(5); }
MSP430 Programlama Sayfa 55

Bu gecikme sresinden sonra ise bir sonraki rakama ilikin kodlar seri olarak gnderimi salanarak 0 dan 9 a kadar tm rakamlar display de gsterimi salanmtr. Bu ekilde sonsuz dngnn iinde bu ilemler tekrarlanarak devam ettirilmitir. 6.3-) MSP430 7448 le Yukar Aa Sayc Bu uygulamamzda 7448 entegresini kullanarak 0-99 aras yukar aa sayc uygulamas yapacaz. 7448 entegresi Ortak Katot Seven Segment Displayler iin, BCD decoder(kod zc) entegresidir. Ortak Anotlu Seven Segment Displayler iin ise 7447 entegresi bulunmaktadr. Uygulamanza gre istediinizi kullanabilirsiniz. Bu tip entegreler kullandnzda hem mikrodenetleyicinizin daha az pinini kullanm olursunuz hemde, yazlm ierisinde seven segment rakam kodlarna gerek kalmadan 7448 e gnderdiiniz BCD sayy display zerinde grebilirsiniz. Bu iki entegre vastasyla 4 bit ile displaye bilgi gnderilir.

ekil 52 7447 Ve 7448 Entegresinde BCD Girilerine Gre k Grnmleri Yukarda grlen k grnmleri 7448 ve 7447 entegelerinde gstermek istediimiz saylarn giri ularna binary olarak gnderilmesi yeterlidir.

Pin smi
A0~A3 RBI BI/RB0

Aklamas
BCD Giriler Display karartma pinleri Display Test Pini Segment klar

LT a~g

ekil 53 7448 Entegresinin Bacaklar 7448 entegresinin 8 numaral baca GND, 16 numaral baca Vcc beslemesidir. Entegrenin A,B,C,D ular BCD giri ular, a,b,c,d,e,f,g ular ise display segment ulardr. Entegredeki LT ucu display test, BI/RBO ve RBI ular ise display karartma ulardr. Bu nokta normal almada pozitif beslemeye (Vcc) balanmaldr. Eer ortak anot display kullanacak isek 7448 yerine 7447 balayarak ortak anot display kullanabiliriz.

MSP430 Programlama

Sayfa 56

Devremizde P1 portuna bal iki adet butonumuz bulunmaktadr. Ve P3 portuna bal 7448 entegresi, entegremize bal iki adet seven segment display bulunmaktadr. ki adet seven segment displaylerimizi aktif etmek iin P3.4 ve P3.5 pinleri kullanlmaktadr. Yazlm da verip, anlatmaya balayalm isterseniz.

U1
31 32 33 34 35 36 37 38 8 9 10 29 30 3 6 5 16 15 P1.0/TACLK/ADC10CLK P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK/TCK P1.5/TA0/TMS P1.6/TA1/TDI/TCLK P1.7/TA2/TDO/TDI P2.0/ACLK/A0 P2.1/TAINCLK/SMCLK/A1 P2.2/TA0/A2 P2.3/TA1/A3/VREFP2.4/TA2/A4/VREF+ P2.5/ROSC XIN/P2.6 XOUT/P2.7 AVCC AVSS MSP430F2232 P3.0/UCB0STE/UCA0CLK/A5 P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/A6 P3.7/A7 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB0/A12 P4.4/TB1/A13 P4.5/TB2/A14 P4.6/TBOUTH/A15 P4.7/TBCLK RST/NMI/SBWTDIO TEST/SBWTCK 11 12 13 14 25 26 27 28 17 18 19 20 21 22 23 24 7 1 7 1 2 6 4 5 3

U2
A B C D BI/RBO RBI LT 7448 QA QB QC QD QE QF QG 13 12 11 10 9 15 14

R2
10k

R3
10k

R1
10k

ekil 54 7448 Entegresi le leri Geri 0-99 Aa Yukar Sayc #include "io430.h" #include "in430.h" #define #define UP_Butt Low_Butt P1IN_bit.P0 P1IN_bit.P1

void delay (void) { unsigned int j=500; while(j--); } unsigned char d_0; unsigned char d_1; unsigned char num; void main( void ) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR = 0x00; P3OUT = 0x00;
MSP430 Programlama Sayfa 57

P3DIR = 0xFF; for(;;) { P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay(); if(UP_Butt) { num++; if(num==100) num=0; d_0 = num%10; d_1 = num/10; while(UP_Butt) { P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay(); } } if(Low_Butt && num!=0) { num--; d_0 = num%10; d_1 = num/10; while(Low_Butt) { P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay(); } } }
}

Yazlmda ilk olarak, butonlarmzn bal olduu pinler define edilmitir. Daha sonra tarama esnasnda gerekli olacak gecikme fonksiyonumuz oluturulmu ardndan da, displaylerde gsterilecek sayy ve o saynn birler ve onlar hanesini tutacak deikenlerimiz tanmlanmtr. Daha sonra main fonksiyonuna geilmitir.

MSP430 Programlama

Sayfa 58

Main fonksiyonunda ise, ilk WDT, Clock ve Port ayarlamalar yaplmtr. Burada tekrar port ayarlarna deinmeyeceiz. Gelelim sonraki sonsuz dngnn iinde olan bitenlere P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay();

Sonsuz dngnn ierisinde ilk kodlar yukardaki ksmdr. Satr satr anlatacak olursak, ilk olarak P3 portuna birler basamann deeri 010 deeri ile OR lanarak yklenmitir. 010 deeri ile OR lanmasnn sebebi udur. Display lere gnderilen datann gittii pinlerle, display leri aktif duruma getirmek iin kullanlan pinler ayn porta (P3 portuna baldr.) Display e gnderilen datayla birlikte 010 ile OR ladmzda o saynn istediimiz displayde grnmesinide salam oluyoruz. Daha sonra ise bir sre gecikme salanp, display de gsterilmek istenen saynn onlar basamann deeri 020 deeri ile OR lanarak gnderilmitir. Az nce anlattmz sebepten dolay, 020 deeri ile OR ladmzda 7448 entegresinin ABCD ularna verdiimiz say, sol taraftaki displayde gsterilecektir. Yukar veya aa butonuna baslmad srece mikrodenetleyici sonsuz dng ierisinde bu ksm srekli tekrarlayacaktr. Eer yukar veya aa butonuna baslr ise, mikrodenetleyici aadaki ksma veya if(UP_Butt) { num++; if(num==100) num=0; d_0 = num%10; d_1 = num/10; while(UP_Butt) { P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay(); } } aadaki ksma decektir. if(Low_Butt && num!=0) { num--; d_0 = num%10; d_1 = num/10;

MSP430 Programlama

Sayfa 59

while(Low_Butt) { P3OUT = (d_0 | 0x10); delay(); P3OUT = (d_1 | 0x20); delay(); } } Yukar butonuna basld taktirde, ilk olarak displayde gsterilmek istenen say, 1 artrlp, 100 e ulap ulamad kontrol edilmitir. Eer 100 e ulamsa saymz sfrlanmtr. Ardndan da yeni saynn birler ve onlar hanesi hesaplanmtr. Daha sonrasnda ise, buton hala basl durumda ise, tarama ilemini devam ettirebilmek iin while dngsnn iinde kalnmaktadr. Aa butonuna basld zaman ise saynn 0 a ulap ulamad sorgusuna cevap eer hayrsa, ilgili ksma girilecektir. Zaten say sfra ulamsa, dahada azaltmann bir anlam yoktur. Bu nedenle say sfr deilse azaltma ilemi gerekletirilmitir. Azaltma ileminden sonra yeni saynn birler ve onlar basama hesaplanm ve yine aa butonu basl durumda ise tarama ilemini devam ettirmek iin while dngs tekrarlanmtr. Aada 7448 entegresinin giri ve k konumlarna ait tablo verilmitir. Nasl altn detayl grmek isteyenler inceleyebilirler..

ekil 45 7448 Entegresinin Giri k Konumlar

MSP430 Programlama

Sayfa 60

BLM 7 MSP430 LE LCD KONTROL UYGULAMASI


7.1-) LCD Hakknda Genel Bilgiler ekil 49da bir rnei grlen karakter LCDler darya bilgi aktarmak iin kullanlan en yaygn birimlerdendir. Genel itibari ile Hitachi firmasnn HD44780 entegresini ve trevlerini tayan karakter LCDler eitli metotlarla srlrler. Biz bu blmde ekil 50de de grlebilecek 2x16 yani 2 satr ve her satrda 16 karakter yazabilen karakter LCDleri inceleyeceiz.

ekil 56 - 4x16 Karekter LCD


Karakter LCDlerin genelinde her harf ekil 50de grlecei gibi 5x7lik birimler halinde ekillenirler. Altta bo kalan son birim ise imle iindir.

ekil 57 - 5x7 Karekter Oluumu LCD birimi genellikle normal entegre g biriminden ayr bir de arka aydnlatma gc verilerek kullanlrlar. Bu birimin nasl srlecei ise ekil 51de gzkmektedir. Ayrca aadaki emada LCDnin g balantsnn nasl yaplaca da grlmektedir.

MSP430 Programlama

Sayfa 61

ekil 51 - 5x7 LCD G Balants Karakter LCDlerin oluturabilecei her bir karakter ise karakter LCDnin zel CGROM hafzasna kaydedilmilerdir. ASCII karakter uyumu olan karakterlerin listesi ekil 52de grlebilmektedir.

ekil 58 - LCD Karekter Tablosu


MSP430 Programlama Sayfa 62

ekil 58de de grlecei zere CGROMun ilk 8 karakterlik (0x00..0x0F) ksm botur ve yazlabilirdir. Bu kullancya tabloda olmayan karakterleri kendisi tanmlamasna olanak salar. Karakter LCDlerin genelinde 16 bacak bulunur. Bunlarn 14 tanesi LCDyi kontrol etmek amal kullanlrken, 15 ve 16. bacaklar genellikle LCD arka iin kullanlrlar. LCD arka yazlarn daha belirgin gzkmesi iin gereklidir. Bu bacaklarn grevini srasyla verecek olursak; 1 GND : Toprak ucudur 2 VCC : +5V verilecek utur 3 VEE : Kontrast ucudur, bir pot vastasyla +5V-0V aralnda srlmelidir 4 RS : Gelen bilginin komut mu data m olduu bu ula belirlenir (0: Komut, 1: Data) 5 RW : LCDye veri yazma ya da okuma yetkilendirme ucudur (0: Yazma, 1: Okuma) 6 - E : Enable ucudur, LCDye bilgi giri kn kontrol eden utur, den kenar tetiklemelidir 7..14 - Data : Data ulardr, bilgi giri klar bu bacaklar sayesinde olur 15,16 - BL : Backlight anot, katot ulardr.

ekil 59 - LCD Panel Arka Plan I Yukardaki bilgileri LCDmizin internetten kataloglarn indirerek LCDmizin tm bacaklarn ve tm donanmsal bilgilerini inceleyebiliriz. Karakter LCDlerin kullanlmas, led, diren srm gibi olmamaktadr. Karakter LCD kullanmnda, enerjiyi ilk verdiimiz anda karakter LCDyi nasl kullanmak istediimizi LCDye belirli kurallar erevesinde iletmemiz gerekmektedir. Yanda grlen piyasadaki LCDlerden biridir. Resimde de grlecei zere hangi bacan hangi u olduu arkasnda yazmaktadr. Piyasada bulunan LCDlerin bir ksm 3.5 V ile almamaktadr. Bazlar LCDler ise beslemeleri 5V olacak ekilde data hatt 3.5 V luk lojik1 seviyesini kabul ettiinden dolay alabilmektedir. Piyasada bulunan lcd lerin bir ksm 3.5 V ile almamaktadr. Bazlar lcd ler ise beslemeleri 5V olacak ekilde data hatt 3.5 V luk lojik1 seviyesini kabul ettiinden dolay alabilmektedir. Bunun iin aadaki gibi elektrik karakteristiklerine datasheetlerden bakmamz gerekmektedir.

MSP430 Programlama

Sayfa 63

ekil 60 - LCD Elektrik Karakteristikleri 7.2-) MSP430 2X16 LCD Uygulamas Bu uygulamamzda LCDnin 4 bitlik data hatt kullanlacaktr. RS ve E ular ayr bir porta balanmtr. Mikrodenetleyici ile 4 bit veya 8 bit data hatt zerinden haberleebilir. Fakat uygulamalarda 8bit arayzden ziyade 4bit arayz kullanlmaktadr. Pin saysnn nemli olduu uygulamalarda daha farkl ekillerde arayzlerle de srlmektedir.
LCD1
LM016L_BL

+5V - TP1

VSS VDD VEE

U1
E RS 10 11 12 13 RST/NMI/SBWTDIO P1.0/TACLK/ACLK/CA0 TEST/SBWTCK P1.1/TA0/CA1 XOUT/P2.7 P1.2/TA1/CA2 XIN/P2.6/TA1 P1.3/CAOUT/CA3 P1.4/SMCLK/CA4/TCK P1.5/TA0/CA5/TMS P1.6/TA1/CA6/TDI/TCLK P1.7/CAOUT/CA7/TDO/TDI MSP430F2011 2 3 4 5 6 7 8 9 D4 D5 D6 D7

1k

1 2 3

4 5 6

7 8 9 10 11 12 13 14

50%

15 16

BL+ BL-

RS RW E

D0 D1 D2 D3 D4 D5 D6 D7

RV1

R1
RS E D4 D5 D6 D7
10R

+5V - TP1

+5V - TP1

ekil 61 MSP430 2X16 LCD Kontrol Uygulamas LCDyi kullanmadan nce gerekli ayarlamalar yapmamz gerekmektedir. 2X16 LCD iin ayarlam olduumuz ktphane. lcd_4bit.h
#include #include "io430.h" "in430.h" P2OUT_bit.P6 P2OUT_bit.P7

#define LCD_RS #define LCD_EN

#define LCD_DATA P1OUT #define EN_ACKAPA() ((LCD_EN = 1),(LCD_EN=0)) #define nop() asm("nop") extern extern extern extern extern extern extern void void void void void void void lcd_write(unsigned char); // LCD ye komut gndermeye yarar lcd_temizle(void); // LCD ekran temizler lcd_puts(const char *); // LCD ye string ifade yazar lcd_goto(char,char);// LCD de satr ve stn olarak istenilen yere gider lcd_init(void); // LCD balang ayarlar yaplr lcd_putch(char); // LCD ye tek karakter yazmak iin kullanlr. delay_ms(unsigned int); // Geici delay

MSP430 Programlama

Sayfa 64

lcd_4bit.c
#include "io430.h" #include "in430.h" #include "lcd_4bit.h" void lcd_write(unsigned char data) { __delay_cycles(40); LCD_DATA = ( ( data >> 4 ) & 0x0F ); LCD_STROBE(); LCD_DATA = ( data & 0x0F ); LCD_STROBE(); } void lcd_clear(void) { LCD_RS = 0; lcd_write(0x01); __delay_cycles(2000); } void lcd_puts(const char * s) { LCD_RS = 1; while(*s) lcd_write(*s++); } void lcd_putch(char c) { LCD_RS = 1; lcd_write(c); } void lcd_goto (unsigned char row, unsigned char column) { LCD_RS = 0; if(row==1) lcd_write(0x80+((column-1)%16)); else if (row==2) lcd_write(0xC0+((column-1)%16)); } void lcd_init() { LCD_RS = 0; LCD_EN = 0; __delay_cycles(15000); LCD_DATA = 0x03; LCD_STROBE(); __delay_cycles(5000); LCD_STROBE(); __delay_cycles(200); LCD_STROBE(); __delay_cycles(200); LCD_DATA = 2; LCD_STROBE(); lcd_write(0x28); lcd_write(0x0C); lcd_clear(); lcd_write(0x06); }

162 LCD ktphanesi bir lcd_4bit.c ve lcd_4bit.h dosyalarndan olumaktadr. lcd_4bit.h balk dosyasnda LCD nin pinlerine ilikin tanmlamalar ve lcd_4bit.c kaynak
MSP430 Programlama Sayfa 65

dosyasnda yer alan alt programlarn prototipleri bulunmaktadr. lcd_4bit.c kaynak dosyasndaki alt programlar(fonksiyonlar) inceleyecek olursak; void lcd_write(unsigned char) Fonksiyonu lcd ye 1 byte datay 2 nibble eklinde yazmaya yarayan fonksiyondur. void lcd_clear(void) Fonksiyonu LCD nin ekrann temizlemeye yarayan fonksiyondur. void lcd_puts(const char *) Fonksiyonu ise lcd ye karakter dizisi(string) yazmaya yarayan fonksiyondur. void lcd_putch(char c) Fonksiyonu ile lcd ye bir byte data yazdrmaya yarayan fonksiyondur. void lcd_goto(unsigned char, unsigned char) Fonksiyonuda lcd nin istenilen satr ve stununa gidilmesine yarar. void lcd_init(void) Son olarak bu fonksiyon ise lcd displayi kullanma hazrlayan fonksiyondur. unu unutmamak gerekirki; bu ktphane dosyalarn projemizde kullanmak istiyorsak, lcd_4bit.h header dosyasn main.c ve lcd_4bit.c kaynak dosyalarna include edilmelidir. imdi de basit bir uygulama ile LCD displayimize bir yaz yazdralm.Tabi az nce yazdmz ktphaneyi program yazarken ekliyoruz. Main.c
#include "io430.h" #include "in430.h" #include "lcd_4bit.h" void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1SEL P1OUT P1DIR P2SEL P2OUT P2DIR = = = = = = 0x00; 0x00; 0xFF; 0x00; 0x00; 0xFF;

lcd_init(); lcd_goto(1,1); lcd_puts(" Emre EMANET");

MSP430 Programlama

Sayfa 66

lcd_goto(2,1); lcd_puts(" MSP430G2231"); for(;;); }

Yazlm olduka sade Her zamanki gibi ilk olarak standart ayarlar yaplm ardndan da P1 ve P2 portu temizlenerek k olarak artlanmtr. Ardndan da yukarda bahsettiimiz gibi lcd_init() fonksiyonu bir defa ya mahsus olmak zere arlmtr. Daha sonra ise lcd display in birinci satr, birinci stunundan itibaren ilk string, ikinci satr, birinci stundan itibaren de ikinci string yazlmtr. Sonrasnda ise sonsuz dngye girilerek beklenilmitir.

ekil 62 - MSP430 2x16 LCD Uygulamasnn Sonucu

MSP430 Programlama

Sayfa 67

7.3-) MSP430, 74HC595 ve LCD MSP430un bacak saysnn kstl olmasndan dolay, dier ilevleri yerine getirmek iin LCD ekran 74HC595 port oullac ile kullanmak ou ilemde bizlere kolaylk salamaktadr. ekil- de grlebilecek 74HC595 entegresi 100Mhze kadar alabilen 8 bitlik bir shift registerdir. Bu zellii sayesinde 74HC595 entegresi ayrca DS ucundan girilen seri bilgileri istenildii an QAQH ularndan paralel bilgi olarak alnmasna olanak salar.

ekil 63 74HC595in Bacaklar ekil-15te grlen pinlerin grevleri ise yledir; QA 0H QH SI G RCK SCK SCLR GND Vcc Paralel klar Seri k Seri Data Giri k Ak Kaydedici Registerin Saat Kayna Shift Register Saat Kayna Reset Toprak +5V

74HC595in alma mant ise yledir; 74x595 serisi shift registerler seri giri paralel k register eiylerindendir. Bu entegrenin alma prensibi 74x164 ile ayndr. Tek fark 74x595de kilitleme (latch ) olaydr. 74x595te data verilir clock palsi uygulanr fakat verilen data kta hemen grlmez. Verilen datann kta grlmesi iin LATCH pinine 1 verilmesi gerekir. Ksaca data clock palsleri ile birlikte seri giriten verilir. Datann verilmesi bittikten sonra LATCH pini HIGH yaplr ve sonra LOW yaplarak registerin k kilitlenmi olur. LATCH pini birdaha hgh olana kadar k sabit olarak kalr. Buda bize entegreyi programlarda kullanmada kolaylk ve kararl bir alma salar.
MSP430 Programlama Sayfa 68

rnein 74x164 lerde bilgi kayarak ka gittii iin, displaylerde zamanlama iyi yaplmazsa titremeler, dotmatrislerde de ekil bozukluklar olmaktadr ama 74x595 lerde LATCH olay tm bu problemi ortadan kaldrmaktadr.74x595 lerde bilgi kayarken grlmez nk bilginin kaymas LATCH pini LOW da iken oluur. Kayma bitip data ka oturduu zaman LATCH birka mili saniye iin HIGH yaplp, tekrar LOW yaplarak bilginin ka aktarlp kilitlenmesi salanm olur. 74x595 in alma mantn iyapsn oluturan Flip- Floplarla izip ksaca anlatalm.

ekil 64 74HC595in Lojik Diyagram Aadaki devrede 74x595 in basit iyapsn ve almasn temsil eden 4 bitlik bir shift register devresi kurulmutur.

ekil 65 74HC595in Pratik Yaps Iss te ekildeki devre kurulur. ekildeki kn alna bilmesi iin ( data = 1001) nce seri data girii 1 yapld, clock 1-0 yapld, data 0 yapld clock 2 defa 1-0 yapld, data tekrar 1 yapld clock 1-0 yapld. u ana kadar 1001 eklinde data uyguladk ve 4 defa da clock palsi uyguladk
MSP430 Programlama Sayfa 69

ama girdiimiz bilgi ktan hala grlmedi. Girilen datann ktaki ledlerden grlebilmesi iin kilit (latch) 1 ve hem 0 yaplr. Girilen bilgilerin ka aktarld grlr. ktaki bu bilgiler kilit 0 olduu srece deimez. Buraya kadar anlatmaya altm ksm ksaca 74x595 in alma mant idi. imdi ise uygulamamza geelim. 74hc595, 8 bitlik bir Shift Registerdr demitik. Yani seri olarak girilen 8 bit veriyi k portlarnda(Q0..Q7) paralel olarak gstermektedir. Bu ilem, iaret kaynann her ykselen kenarnda bit bit veri iletilmesi eklinde olur. 8 cycle tamamlandktan sonra Enable Pini 1-0 yaplarak latch de duran 8 bit verinin paralel olarak Q0..Q7 ularnda grnmesi salanr. Bu ilem FIFO(First In First Out) mantna dayanmaktadr. Yeri gelmiken FIFO nedir onu da renelim. FIFO ilk giren ilk kar demektir. Yani ilk gnderdiimiz bit, Q0dan balayp srekli kaydrlarak en son Q7ye ulamaktadr Bu almada, ilk bit olarak Q0 deil de Q2 yi kullanld. Yani LCD nin bacak balantlarna bakacak olursak, ilk pin olarak RS pini gelmektedir, RW ucu topraa ekildiinden dolay bir balant yaplmamtr. Ve ondan hemen sonra E pini geldiinden Q3e de E pini balanlmtr. Ondan sonras ise 4 bitlik LCD veri ulardr. Not : Aada verdiim balant haricinde bir balant yapmak isteyenelerin (Mesele tm pinleri Q0 dan itibaren sralamak gibi) pinlerin haricinde lcd_595.c dosyasndaki veri yazma fonksiyonlarn da deitirmeleri gerekir. Yoksa tm pinler karacandan dolay istenilen veri, LCDde grnmeyecektir.

ekil 66 74HC595 le Yaplm 3 Wire (Hat-Kablo) LCD Uygulamas

MSP430 Programlama

Sayfa 70

lcd_595.h #define #define #define #define void void void void void void void void

Clock P1OUT_bit.P1OUT_0 Data P1OUT_bit.P1OUT_1 Storage P1OUT_bit.P1OUT_2 nop() asm("nop")

delay(unsigned long int); hc595_yaz(unsigned char); lcd_write(unsigned char); lcd_putch(unsigned char); lcd_puts(const char*); lcd_temizle(void); lcd_goto(char,char); lcd_init(void);

lcd_595.c #include "io430.h" #include "lcd_595.h" #define E_1 #define RS_E_1 0x08 0x0C

void delay(unsigned long int d) { d*=100; for(;d>0;d--); } void hc595_yaz(unsigned char gelen) { for(char i=8;i>0;i--) { Data=0; if(gelen & 0x80) Data=1; Clock=1; Clock=0; gelen*=2; } Storage=1; Storage=0; } void lcd_write(unsigned char port) { //ilk 4 bit gnderiliyor... hc595_yaz(E_1);
MSP430 Programlama Sayfa 71

hc595_yaz(( port & 0xF0) | E_1); hc595_yaz(((port & 0xF0) | E_1) & 0xF0); //Son 4 bit gnderiliyor... hc595_yaz(E_1); hc595_yaz(( port<<4 ) | E_1); hc595_yaz(((port<<4 ) | E_1) & 0xF0); } void lcd_putch(unsigned char port) { //ilk 4 bit gnderiliyor... hc595_yaz(RS_E_1); hc595_yaz(( port & 0xF0 ) | RS_E_1); hc595_yaz(((port & 0xF0 ) | RS_E_1) & 0xF4); //Son 4 bit gnderiliyor... hc595_yaz(RS_E_1); hc595_yaz(( port<<4) | RS_E_1); hc595_yaz(((port<<4) | RS_E_1) & 0xF4); } void lcd_puts(const char * s) { nop(); while(*s) lcd_putch(*s++); } void lcd_temizle(void) { lcd_write(0x1); delay(2); } void lcd_goto(char x, char y) { if(x==1) lcd_write(0x80+((y-1)%16)); else lcd_write(0xC0+((y-1)%16)); } void lcd_init(void) { hc595_yaz(0x00); delay(15); hc595_yaz(0x08); lcd_write(0x02); // mle 0x0 konumunda delay(2);
MSP430 Programlama Sayfa 72

lcd_write(0x28); lcd_write(0x0C); lcd_temizle(); lcd_write(0x06); lcd_write(0x80); }

// // // // //

4 Bit , ift Satr LCD mle Gizleniyor Ekran Temizleniyor Saa doru yazma aktif LCD Birinci Satr Konumunda

Son olarak LCDye yazmz yazdralm. main.c #include "io430.h" #include "in430.h" #include "lcd_595.h" #define LED6 P1OUT_bit.P1OUT_6 void main(void) { WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1DIR |= BIT0|BIT1|BIT2|BIT6; //P1.0, P1.1, P1.2 ve P1.6 k P1OUT=0x00; lcd_init(); while(1) { lcd_goto(1,3); lcd_puts("lcd 74hc595"); lcd_goto(2,2); lcd_puts("mcu-turkey.com"); delay(2000); lcd_temizle(); lcd_goto(1,3); lcd_puts("TEXAS"); lcd_goto(2,3); lcd_puts("INSTRUMENTS"); delay(2000); lcd_temizle(); } }

MSP430 Programlama

Sayfa 73

ekil 67 74HC595 Uygulamasnn Sonucu

MSP430 Programlama

Sayfa 74

BLM 8 MSP430 LE KEYPAD(TU TAKIMI) KONTROL UYGULAMASI


8.1-) Tu Takm Hakknda Genel Bilgiler Mikroilemcili sistemlerde ou kez bilgi klavye ile verilir. Klavye tasarlamann bir ok deiik yntemi vardr.74C922,8273 gibi zel klavye entegreleri ya da(8255 vb) tarama yntemi ile klavye tasarlamak mmkndr. Eer 5 ya da daha az tua ihtiya varsa portlar dorudan kullanmak en iyi yntemdir. Daha fazla tu iin klavye entegresi ya da tarama yntemi ile klavye oluturmak tavsiye edilir. Tu takm isimlendirmelerinde ilk say stun, ikinci say ise satr saysn belirtir. rnein 4x3lk bir keypad, 4 stun ve 3 satrdr.

ekil 68 Tu Takm Ve Yaps Yukarda da bahsetdiimiz gibi tu takmnda hangi tua basldn bulmak iin eitli yntemler kullanlabilir. Bu yntemlerden biri tarama yntemidir. Butona basldnda ve brakldnda bir ark (parazit) meydana gelir. Buna tu sramas da (key debounce) denilir.

ekil 69 Tu Baslp Braklmasnda Oluan Parazit ekil 69da rnek bir tu sramas grlmektedir. Bu sramay nlemek iin programda gerekli nlemler alnmaldr. Tedbir olarak butona basldktan sonra 15-20 msn gecikme verilmesi gerekir veya butondan el ekilene kadar iinden klmayacak bir dng kurulmaldr. Ayrca tu takmnda ayn anda iki tua birden baslabilir. Bu gibi durumlarda hangi tuun geerli olaca programla belirtilerek istenmeyen durumlar nlenmelidir.

MSP430 Programlama

Sayfa 75

8.2-) MSP430 le Tu Takm Uygulamas


Bu uygulamamzda tu takmn butonlardan oluturarak, tu takmnn nasl altn daha iyi bir ekilde anlam olacaz. Tu takm modelinde 3 adet stun ve 4 adet satr terminal olarak yaplmtr. MSP430 un P1 portunun ilk 3 pinine stunlar, son 4 pinine ise satrlar balanmtr. P2 portuna ise tu takmndan hangi tua basldysa, o deeri gsterebilmek iin 4 adet led balanmtr. sterseniz bu 4 led yerine siz bcd seven segment modelide koyabilirsiniz. Bu arada unuda sylemekte fayda var. Oluturulan tu takmndaki switchler, yaznn bandaki keypad fotorafnda olduu gibidir. Fakat yazlmda diyez ve yldz tular konulmamtr. Sadece 1,2,3,4,5,6,7,8,9 ve 0 tular okunmaktadr. sterseniz yazlmda verip zerinde konumaya balayalm.

ekil 70 Tu Takm Uygulamas #include "io430.h" #include "in430.h" unsigned char KEY; #define #define #define #define #define #define #define row1 row2 row3 row4 P1OUT_bit.P4 P1OUT_bit.P5 P1OUT_bit.P6 P1OUT_bit.P7 P1IN_bit.P0 P1IN_bit.P1 P1IN_bit.P2

column1 column2 column3

void delay(void) { unsigned int i=2500; while(i--); } void Refresh_Keypad (void)


MSP430 Programlama Sayfa 76

{ row1=1; delay(); if(column1) KEY=1; else if(column2) KEY=2; else if(column3) KEY=3; row1=0; row2=1; delay(); if(column1) KEY=4; else if(column2) KEY=5; else if(column3) KEY=6; row2=0; row3=1; delay(); if(column1) KEY=7; else if(column2) KEY=8; else if(column3) KEY=9; row3=0; row4=1; delay(); if(column2) KEY=0; row4=0; } void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR = 0xF0; P1OUT = 0x00; P2OUT = 0x00; P2DIR = 0x0F; for(;;) { P2OUT = KEY; Refresh_Keypad(); } }

MSP430 Programlama

Sayfa 77

Yazlm biraz kabark gibi grnseden dikkatle incelendiinde aslnda anlalmas gayet kolay olduu anlalacaktr. Main fonksiyonundan itibaren anlatmaya balarsak, ilk olarak her zamanki gibi WDT ve clock ayarlar yaplm ve port ayarlarna geilmi. Port ayarlarnda ise P1 portunun ilk 4 biti giri, son 4 biti k olarak artlanmtr. P2 portunun ise ilk 4 biti k olarak artlanmtr. Ardndan da sonsuz dngye girilip srekli Keypad den okunan deer gncellenip, P2 portuna aktarlmtr. Asl yazya konua olan ksm ise Keypad den okunan deerin gncellendii altprogramdr. Bu nedenle Refresh_Keypad() altprogramn incelersek, ilk olarak birinci satr Lojik 1 yaplm, ardndan bir sre beklenerek stun bilgisi okunmutur. Devre emasna tekrar bir gz atarsak grlecektir ki, Lojik1 yaplan bir satrda, hangi tua baslrsa o tua ait stun bilgisi Lojik1 dier stunlar ise Lojik0 durumdadr. Tu takmn okuma olayda bu ekilde gereklemektedir zaten. Devam edecek olursak, bir sre beklemenin ardndan stunlardan lojik1 seviyesinde olan varm diye kontrol edilir. Eer birinci stun lojik1 de ise TU1, eer ikinci stun lojik1 ise TU2, eer nc stun lojik1 ise TU3 e baslmtr. Stnlar okunduktan sonra birinci satr lojik0 a ekilir ve ikinci satr lojik1 e ekilir. Yine ayn ilemler bu satr iinde yaplp stun bilgileri okunur. Eer birinci stun lojik1 de ise TU4, eer ikinci stun lojik1 ise TU5, eer nc stun lojik1 ise TU6 ya baslmtr. Stnlar okunduktan sonra ikinci satr lojik0 a ekilir ve nc satr lojik1 e ekilir. Ardndan tekrar ayn ilemler yaplp 3 satrda okunur. Eer birinci stun lojik1 de ise TU7, eer ikinci stun lojik1 ise TU7, eer nc stun lojik1 ise TU9 a baslmtr. Bu satrda tamamlandktan sonra, son olarak son satr lojik 1 yaplr, bir sre beklemenin ardndan stun bilgisi okunur. Dikkat edilirse bu satrda sadece TU0 a baslp baslmad bilgisi okunmutur. Yldz ve diyez tular okunmamtr. Bu ekilde tm satrlar okunduktan sonra eer hibir tua basl deilse, KEY isimli deiken 000 deerini alr. Eer herhangi bir tua baslm ise KEY deikeni o tuun deerini alr. Sonsuz dngdede srekli KEY deikeninin deeri P2 portuna bal LEDlerle gsterildii iin hangi tua basl olduu LEDler zerinden binary olarak okunmaktadr. Aada tu durumlarna gre LEDleri durumu sra ile gsterilmitir.

ekil 71 Tu 1 ve 2ye Basnca Devredeki LEDlerin Durumu Ayn ekilde dier tulara da basnca farkl LEDler yanmaktadr.

MSP430 Programlama

Sayfa 78

8.3-) MM74C922 le Tu Takm Uygulamas Bu uygulamamzda gibi tarama yntemi ile deil, 74C922 entegresi ile tu takmndan hangi tua basldn kesme ile alglayacaz. Anlayacanz zere kullanacamz entegre KeyPad in satr ve stunlarna direkt olarak balanmaktadr. Herhangi bir tua baslma durumunda ise Data Available pinini lojik1 yapmaktadr. Yani tua basld zaman aslnda bize haber vermektedir. Bizde bu durumdan faydalanarak ve kesme kullanarak hangi tua basldn yazlmda ekstra bir kod gerektirmeden okuyarak, display zerinde gstereceiz.

ekil 72 74C922 Bacak Balantlar 74C922 entegresi 3V ile 15V alma gerilimine sahiptir. Genel besleme gerilimleri 5V, 10V ve 15Vtur. Klavye satr hatlar Y girilerine (ROW), stun hatlar ise x giriine (COLUMN) balanr. OE entegre seme ucudur ve lojik-0da aktiftir. Bu uca 0 verildii taktirde entegre k aktif yaplm demektir. Data Avaible(DA) ucu ise, klavyede herhangi bir tua basldnda k lojik-1 olur. Bylece klavyeden bir tua basldnda entegre bize haber verir. Aada da tu takmnn pinlerine baslmas durumunda ABCDE pinlerindeki deiiklere ilikin doruluk tablosunu inceleyebiliriz.

ekil 73 74C922 Entegresi Doruluk Tablosu


MSP430 Programlama Sayfa 79

Bu arada undanda bahsedelim. Yukardaki doruluk tablosunda 0 dan 19 a kadar toplam 20 adet tu bilgisi bulunmaktadr. MM74C922 entegresinde 0-15 aras yani 4*4 lk tu takm kullanlabilir. 15 den sonrasni bizim entegremiz iin geerli deildir.

ekil 74 74C922 Entegresi le Keypad Uygulamas Devre emasnda grld gibi tu takmnn satr ve stunlar, MM74C922 entegresinin direkt olarak X1/2/3 ve Y1/2/3/4 pinlerine balanmtr. ABCD pinleri ise baslan tu bilgisini aldmz pinlerdir. OE(Output Enable) pini ise elde edilen tu bilgisinin ka aktarlmas iin lojik0 ekilmesi gereklidir. Biz direkt olarak GND a ekmiiz. Bu demek oluyorki, tu takmndan herhangi bir tua baslrsa tu bilgisi ABCD pinlerine aktarlacaktr. Peki yaznn banda bahsettiimiz kesme kullanarak tu bilgisini okuyacamz pin hangisidir. Oda DA(Data Available) pinidir. Tua basldnda tu bilgisi entegre ierisinde okunduktan sonra DA pini lojik1 e ekilir. Bizde bu sayede srekli yazlm megul etmek yerine sadece DA pini lojik0 dan lojik1 ekildiinde yani DA pininde ykselen kenarl bir sinyal olutuunda mikrodenetleyici kesme retecek ve tu bilgisi gncellenecektir.

MSP430 Programlama

Sayfa 80

Bu arada KBM ve OSC pinlerinden de bahsedecek olursak, OSC pinine entegrenin almas iin gerekli bir adet kondansatr balanmas gereklidir. KBM pini ise tua basldnda oluacak parazitleri engellemek amacyla, bu pine bir kondansatr balamak suretiyle kullanlr. KBM pinine balanan kondansatrn deeri OSC pinine balanan kondansatrn 10 kat olmaldr. Aada entegrenin blok diyagramn inceleyebiliriz.

ekil 75 74C922 Entegresinin Blok Diyagram Entegremiz ile alakal bu kadar bilgi verdikten sonra uygulamaya ait yazlmda verip zerinde konumaya balayalm. #include "io430.h" #include "in430.h" const unsigned char Keys[] = { 1,2,3,0, 4,5,6,0, 7,8,9,0, 0,0,0,0}; void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ;
MSP430 Programlama Sayfa 81

P1OUT = 0x00; P1DIR = 0x0F; P2OUT = 0x00; P2DIR &= ~BIT0; P2IE = BIT0; P2IFG = 0x00; _BIS_SR(GIE); for(;;); } #pragma vector=PORT2_VECTOR __interrupt void P2_ISR(void) { if(P2IFG_bit.P0) P1OUT = Keys[P1IN >> 4]; } Yazlm batan itibaren incelemeye balarsak, ilk olarak tu bilgisini display zerinde gstermek iin kullanlmak zere Keys isimli bir dizi tanmlanmtr. Daha sonra main fonksiyonunda WDT ve Clock ayarlar yaplm ardndan da port ayarlarna geilmitir. Port ayarlarnda ise ilk olarak P1 portu temizlenmi ve P1 portunun ilk drt biti giri k olarak, son drt biti ise giri olarak artlanmtr. Daha sonra ise P2 portu ile ilgili olarak Data Available pininin bal olduu P2.0 pini giri olarak artlanm, bu pine ait kesme aktif edilmi ve kesme bayrada temizlenmitir. Daha sonra ise tm kesmelere izin verilerek sonsuz dgye girilmitir. Bu ksmdan sonra kesme alt programndan bahsedecek olursak, P2.0 pinine ykselen kenar sinyal geldiinde mikrodenetleyici ilgili kesme vektrne dallanacaktr. Kesme vektrnde ise ilk olarak kesmenin P2.0 pininden mi geldii kontrol edilmitir. Eer kesme P2.0 dan geliyorsa ABCD pinlerinden okunan deer alnp, 4 bit saa kaydrlp daha sonrada Keys isimli dizideki karlk gelen eleman displaye gnderilmitir. Bu ekilde bir mantkla, mikrodenetleyici yazlmda srekli tu takmn okumak mecburiyetinde kalmamaktadr. Zaten bir tua baslrsa, kesme vektrne dallanlacak ve tu bilgisi okunacaktr. Buda bize gerekten byk kolaylk salamtr. Aada tu takm zerinde 4 tuuna baslmas durumundaki ekran grnts verilmitir.

MSP430 Programlama

Sayfa 82

ekil 76 74C922 Entegresi le Yaplm Uygulamann Sonucu

MSP430 Programlama

Sayfa 83

BLM 9 MSP430 I2C MODL


IC (Inter-Integrated Circuit), Philips firmas tarafndan gelitirilmi bir sistemdir. Ve bu yapy anakartlarda, gml sistemlerde ve cep telefonlarnda kullanmtr. 1990larn ortasndan bu yana Siemens, NEC, Motorola gibi birok farkl firma I2C standard ile tam uyumlu rnler piyasaya srmlerdir.

ekil 77 Master Ve Slave Cihazlarnn I2C Hattna Balanmas USI modlnde I2C donanmn altrabilmek iin USII2C = 1, USICKPL = 1, ve USICKPH = 0 yaplmaldr. Bu birim kullanldnda USI Shift Registeri 8 bit olarak kullanlacandan dolay USI16B biti 0 olmaldr. Bu sebeple Shift Registera eriim USILSB zerinden olmaktadr. Data ve Clock klarn pinlerden alabilmek iin ise USIPE6 (SCL) ve USIPE7(SDA) bitleri set edilmelidir. I2C donanmnda clock(SCL) sadece Master (Usta) tarafndan retilir ve Slave (Kle) cihazlara master cihazn rettii bu clock hatt paralel olarak balanr. Normalde donanm sadece clock sinyali retmekte ve kaydrmal gnderme yapmaktadr. Bir master cihazn birden ok slave cihazla haberlemesi ve ACK / NACK durumlar iin yazlmsal zmler uygulanmaktadr. Baz gelimi I2C donanmlar bu yazlmsal ksmlar kendi donanm ierisinde barndrarak daha efektif alabilmektedirler. Ayrca bu ekilde yazlmc zerindeki yk de bir nebze hafiflemektedir. Yazlmsal olarak yaplmas gereken en nemli ksm ise: her slave cihaz iin bir adres belirlemek ve veri gnderilmeden nce ayn verir gnderir gibi belirlenen slave adresi gndermektir. Bu ekilde slave cihazlar hattaki bu veriyi dinleyip, eer adres olarak gnderilen bu veri kendi adresleri ile uyuuyorsa kar tarafa onay(ACK) biti gndererek haberlemenin balamasn salarlar. I2C hattna bal olan slave cihazlar iin tanml olan bu adres uzunluu maksimum 7 bittir ve bir hatta ayn anda maksimum 127 cihaz balanabilir. 9.1-) I2C Master Modu I2C birimini Master modunda kullanabilmek iin USIMST = 1 yaplmaldr. USIIFG = 0 olduu srece retilen clock palsleri SCL pinine aktarlmaktadr. Eer USIIFG = 1 ise yani kesme bayra temizlenmemise clock plasleri SCL pinine aktarlamayacandan dolay haberleme baarsz olacaktr.

MSP430 Programlama

Sayfa 84

9.2-) I2C Slave Modu I2C birimini Slave modunda kullanabilmek iin ise USIMST = 0 yaplmaldr. Eer USIIFG = 1 veya USISTTIFG = 1 veya USICNT = 0 ise Master SCL retse de, Slave ksmnda herhangi bir alm veya kesmeye gitme ilemi yaplmayacaktr. 9.3-) I2C Transmitter Bu ksm USI modlnde herhangi bir birim/donanm deildir. Haberleme protokolnn bir parasdr. Temel olarak kar tarafa SDA hattndan veri aktarmak iin yaplmas gereken admlar bu ksmda anlatlmaktadr.

USISRL saklaycsna gnderilmek istenen 8 bitlik veri yklenir. USIOE aktif edilir. USICNT saklaycsna 8 deerini yklediimiz zaman USISRL saklaycsna yklenen veri yani kar tarafa gnderilmek istenen veri kar tarafa aktarlacaktr. Veri tamamen gnderildiinde USIIFG = 1 olur ve SCL pinindeki pals retimi durur. Kar taraftan 1 bitlik onay(ACK) ya da Ret(NACK) bildirimini alabilmek iin USIOE = 0 ve USICNT = 1 yaplmaldr. USICNT = 1 yapld zaman otomatik olarak USIIFG = 0 olmaktadr. USIIFG tekrar 1 olduunda kar taraftan onay biti gelmi demektir. USISRL saklaycsnn ilk biti kontrol edilerek haberleme devam ettirilir veya sonlandrlr.

9.4-) I2C Reveiver I2C Transmitter balnda bahsedildii zere I2C Receiver ksm da haberleme protokolnn bir parasdr. Yani yazlmda izlenmesi gereken admlar anlatmaktadr.

USIOE = 0 yaplarak I2C veri hattndan(SDA) gelen verinin alnmas salanr. Master ksmndan 8 bitlik veri gelecei iin Slave tarafnda da USICNT = 8 yaplarak gelen verinin 8 bit olarak alnmas salanr. USINCNT = 8 yapld zaman otomatik olarak USIIFG temizlenmektedir(USI Interrupt Flag). 8 bitlik veri alnd zaman USICNT = 0 olmakta ve USIIFG = 1 olmaktadr. Bu admda 8 bitlik veri alnm demektir. Alnan veri USISRL saklaycsndan okunabilir. Kar tarafa 1 bitlik onay(ACK) ya da ret(NACK) bildirimi gnderebilmek iin USIOE = 1 yaplmaldr. ACK iin USISRL = 0, NACK iin USISRL = 0xFF yaplmaldr. 1 bitlik veriyi kar tarafa gnderebilmek iin USICNT = 1 yaplmaldr. Onay biti gnderildiinde USIIFG tekrar 1 olmaktadr. Bu durumdan sonra Slave cihazn tekrar veri alabilmesi iin donanm tekrar veri alacak ekilde ayarlanmaldr.(lk madde)

MSP430 Programlama

Sayfa 85

ekil 78 - Master ve Slave Cihazlarn I2C Hattna Balanmas Yukardaki resimde grld gibi Slalve yani ikincil cihazlar SDA ve SCL hattna paralel olarak balanmlardr. Baz mikrodenetleyicilerde pinler ieriden pull-up veya pull-down yaplabilmektedirler. Bu ekilde herhanbi bir diren kullanmakszn master ve slave aras haberleme dorudan kablo balanarak salanabilir. Eer kullanlan mikrodenetleyici ierisinde dahili pull-up direnleri bulunmuyorsa SDA ve SCL hatlarn 10k lk birer adet direnle +5v / +3v3 a ekmek zorunludur. (MCU ya ve pin tleranslarna gre deiiklik gsterebilir) Bizim rneimizde dahili pull-up direnleri kullanlmtr. 9.5-) Start Durumu I2C donanmndaki START Detect birimi, USISRL saklaycnsa 0 yklendii zaman otomatik olarak START Condition oluumunu salamaktadr. Bunun iin aadaki admlar uygulanabilir.

USISRL = 0 yaplmaldr. USICTL0 saklaycsndan USIGE = 1 ve USIOE = 1 yaplmaldr. USICTL0 saklaycsndan USIGE = 0 yaplarak kilit(latch) devre d braklmaldr.

9.6-) Stop Durumu


USISRL = 0xFF yaplmaldr. USICTL0 saklaycsndan USIGE = 1 yaplmaldr. USICTL0 saklaycsndan USIGE = 0 ve USIOE = 0 yaplarak kilit ve k devre d braklmaldr.

9.7-) Kesmeler USI Modl iin yanlzca bir adet kesme vektr bulunmaktadr. I2C birimi iin atanm 2 farkl kesme bayra(USIIFG ve USISTTIFG) bu vektr ierisinde kontrol edilebilir. Her kesme bayrann kendine ait aktif etme(enable) biti bulunmaktadr. Kesmeler aktif edilir ve GIE = 1 yaplrsa kesme annda program o kesmeye ait vektre dallanacaktr. USICNT = 0 olduunda USIIFG bayra set edilir. Eer USIIFGCC = 0 ise USICNT saklaycsna 0 dan byk bir deer yazlmas annda USIIFG bayra da temizlenir. Bir START Durumu tespit edildiinde ise USISTTIFG = 1 olur. Bu bayrak yazlmla temizlenmelidir.

MSP430 Programlama

Sayfa 86

Bir STOP Durumu tespit edildiinde ise USISTP = 1 olur. Bu bayrak iin atanm herhangi bir kesme fonksiyonu/zellii yoktur. Eer USIIFGCC = 0 ise USICNT saklaycsna 0 dan byk bir deer yazmak USISTP bayran 0 yapacaktr. Veya dorudan yazlmla 0 yaplabilir. 9.8-) Saklayclar

MSP430 Programlama

Sayfa 87

ekil 79 I2C Haberleme Devresi Uygulamann kod ksmnda Texas Instrumentsin rnek kodlarndan yararlanlmtr. Temel mant ise bir dizi ieriinden her seferinde 1 byte veri gnderilerek kar tarafta alnan bu verinin dorudan LCD ekranda gsterilmesi ilemi yaptrlmtr. Dizinin sonuna gelindiinde ise Master ksmndaki program sonland iin haberleme durmaktadr. Haberleme hz; SMCLK / 8 => 1MHz / 8 = ~125 kHz dir. Master.c #include #include "io430.h" "in430.h"

char* dizi = "Fatih INANC"; int I2C_State; void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); } BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
MSP430 Programlama Sayfa 88

P1OUT P1REN P1DIR P2OUT P2DIR

= 0xC0; |= 0xC0; = 0xFF; = 0; = 0xFF;

USICTL0 = USIPE6+USIPE7+USIMST+USISWRST; USICTL1 = USII2C+USIIE; USICKCTL = USIDIV_3+USISSEL_2+USICKPL; USICNT |= USIIFGCC; USICTL0 &= ~USISWRST; USICTL1 &= ~USIIFG; _EINT(); while(*dizi!='\0') kadar tekrarla... { USICTL1 |= USIIFG; LPM0; _NOP(); for (i = 0; i < 10000; i++); } } // Dizinin sonuna gelene

/****************************************************** // USI interrupt service routine ******************************************************/ #pragma vector = USI_VECTOR __interrupt void USI_TXRX (void) { switch(I2C_State) { case 0: // Generate Start Condition & send address to slave P1OUT |= 0x01; USISRL = 0x00; USICTL0 |= USIGE+USIOE; USICTL0 &= ~USIGE; USISRL = SLV_Addr; USICNT = (USICNT & 0xE0) + 0x08; I2C_State = 2; break; case 2: // Receive Address Ack/Nack bit USICTL0 &= ~USIOE; USICNT |= 0x01; I2C_State = 4; break; case 4: // Process Address Ack/Nack & handle data TX
MSP430 Programlama Sayfa 89

USICTL0 |= USIOE; if (USISRL & 0x01) { // Send stop... USISRL = 0x00; USICNT |= 0x01; I2C_State = 10; P1OUT |= 0x01; } else { // Ack received, TX data to slave... USISRL = *dizi; USICNT |= 0x08; I2C_State = 6; P1OUT &= ~0x01; } break; case 6: // Receive Data Ack/Nack bit USICTL0 &= ~USIOE; USICNT |= 0x01; I2C_State = 8; break; case 8: // Process Data Ack/Nack & send Stop USICTL0 |= USIOE; if (USISRL & 0x01) P1OUT |= 0x01; else { dizi++; P1OUT &= ~0x01; } // Send stop... USISRL = 0x00; USICNT |= 0x01; I2C_State = 10; break; case 10:// Generate Stop Condition USISRL = 0x0FF; USICTL0 |= USIGE; USICTL0 &= ~(USIGE+USIOE); I2C_State = 0; LPM0_EXIT; break; } USICTL1 &= ~USIIFG; }
MSP430 Programlama Sayfa 90

// Clear pending flag

Slave_main.c #include #include #include "io430.h" "in430.h" "lcd_595.h"

char SLV_Addr = 0x90; int I2C_State = 0; void main(void) { WDTCTL = WDTPW + WDTHOLD; if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); } BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1OUT P1REN P1DIR P2OUT P2DIR = BIT7 + BIT6; |= 0xC0; = 0xFF; = 0; = 0xFF;

USICTL0 = USIPE6+USIPE7+USISWRST; USICTL1 = USII2C+USIIE+USISTTIE; USICKCTL = USICKPL; USICNT |= USIIFGCC; USICTL0 &= ~USISWRST; USICTL1 &= ~USIIFG; _EINT(); lcd_init(); lcd_puts("MSP430 - USI/I2C"); lcd_goto(2,1); while(1) { LPM0; _NOP(); } } //************************************************************** ************** // USI interrupt service routine //************************************************************** **************
MSP430 Programlama Sayfa 91

#pragma vector = USI_VECTOR __interrupt void USI_TXRX (void) { if (USICTL1 & USISTTIFG) { P1OUT |= 0x01; I2C_State = 2; } switch(I2C_State) { case 0: // Idle, should not get here break; case 2: // RX Address USICNT = (USICNT & 0xE0) + 0x08; USICTL1 &= ~USISTTIFG; I2C_State = 4; break; case 4: // Process Address and send (N)Ack if (USISRL & 0x01) SLV_Addr++; USICTL0 |= USIOE; if (USISRL == SLV_Addr) { USISRL = 0x00; P1OUT &= ~0x01; I2C_State = 8; } else { USISRL = 0xFF; P1OUT |= 0x01; I2C_State = 6; } USICNT |= 0x01; break; case 6: // Prep for Start condition USICTL0 &= ~USIOE; SLV_Addr = 0x90; I2C_State = 0; break; case 8: // Receive data byte USICTL0 &= ~USIOE; USICNT |= 0x08; I2C_State = 10; break;
MSP430 Programlama Sayfa 92

case 10:// Check Data & TX (N)Ack USICTL0 |= USIOE; lcd_putch(USISRL); USISRL = 0x00; P1OUT &= ~0x01; USICNT |= 0x01; I2C_State = 6; break; } USICTL1 &= ~USIIFG; } // Clear pending flags

ekil 80 I2C Haberlemenin Osilaskop Grnm

MSP430 Programlama

Sayfa 93

ekil 81 Uygulamann Sonucu


MSP430 Programlama Sayfa 94

BLM 10 MSP430 SPI MODL


Genellikle dk seviye MSP430 modellerinde bulunan USI modl, ierisinde hem SPI hem de I2C birimlerini barndrmaktadr. Daha yksek seviyeli modellerde ise USCI ad verilen, SPI ve I2C birimlerine ek olarak bir de Seri haberleme(UART) birimini barndran bir modl bulunmaktadr. Ayrca USI modlnden gelen bilgilerin tutulduu USISR Shift Registerna 8 ya da 16 bit olarak eriilebilmektedir. aret kayna olarak ise ACLK, SMCLK, MCLK kaynaklarna ek olarak USI modlnn kendi iaret kayna olan USISWCLK seilebilmektedir. 10.1-)USI Modl Her ne kadar SPI birimini ineceleyecek olsak da nce USI modlnn hem SPI hem de I2C birimleri iin ortak kullanlan ksmlarn incelemekte fayda var. USI modl altnda ortak kullanlan en nemli saklayclardan biri USICNT saklaycsdr. Bu saklayc ka bit veri gnderileceini belirlemek iin kullanlr ve otomatik olarak azaltlarak 0a ulat anda kesme bayran etkiler. Bu sayc 0a ulatktan sonra bir kez daha azalp 0xFF olmamaktadr. aret kaynann her ykselen kenarnda bu sayc da bir azaltlarak seri haberleme ilemi devam etmektedir. Ve seri haberleme sonuuc alnan bit USISR Shift Registerine aktarlmaktadr. Sayc 0a ulat anda kesme vektrne dalland iin programn bu ksmnda saycya tekrar ilk deeri ykleyen bir kod yazlmaldr. Dier nemli saklayc ise USISR saklaycsdr. USISR saklaycs iki adet 8 bit saklaycdan oluan 16 bitlik bir Shift Registerdir. Bu saklaycnn dk deerlikli baytn kullanmak iin USISRL, yksek deerlikli baytn kullanmak iin ise USISRH saklayclar kullanlmaktadr. Eer haberlemede gnderilecek bitler 8 bit veya 8 bitten kkse genelde USISRL saklaycs kullanlr. Eer haberlemede gnderilecek bitler 8 bitten bykse hem USISRH hem de USISR registerlar kullanlabilir. Aadaki diyagram USISR saklaycsn gstermektedir.

ekil 82 - USISR Saklaycs


MSP430 Programlama Sayfa 95

10.2-)USI iin aret Kaynan Semek USI Modl iin iaret kayna USICKCTL saklaycsndaki USISSEL bitleri kullanlarak seilmektedir. Yukardaki resimde de grld gibi 8 adet farkl iaret kaynan bu modl iin kullanabilmekteyiz. Yine aadaki resimde grld gibi USI modlnn kendi iraet kayna olan USISWCLK da iaret kayna olarak kullanlabilmektedir. Dier bir zellik ise USI biriminin frekans blcsdr. Bu frekans blc yine USICKCTL saklaycsndaki USIDIV bitleri kullanlarak ayarlanabilmektedir. Bu frekans blc, iaret kaynamz 1,2,4,8,16,32,64 ve 128e blebilmektedir.

ekil 83 - USISWCLK 10.3-)SPI Modu USI modl iin genel olarak kullanlan birimlerden bahsettikten sonra asl konumuz olan SPI protokolnn nasl kullanldn inceleyeceiz. Aadaki diyagramda SPI modlnn temel yaps grlmektedir.

ekil 84 SPI Modl


MSP430 Programlama Sayfa 96

USI modln SPI modunda kullanmak iin USICTL1 saklaycsndaki USII2C bitini 0 yapmalyz. Aada, SPI Modunda nasl veri ak olduu ve kesme bayrann ne zaman etkilendii zaman diyagram eklinde grlmektedir.

ekil 85 SPI Modln Kesme Bayraklar 10.4-)SPI Master Modu SPI Modunu master olarak kullanabilmek iin basite u tanmlamalar yapmamz gerekmektedir.
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;

// Port ayarlar yaplyor, SPI master modunda, SPI klar aktif USICTL1 |= USIIE; USICKCTL = USIDIV_4 + USISSEL_2; USICTL0 &= ~USISWRST; //USI kesmeleri aktif // Frekans Blc /16, SMCLK // USI Aktif(Reset modundan kld)

10.5-)SPI Slave Modu SPI Modunu slave olarak kullanabilmek iin basite u tanmlamalar yapmamz gerekmektedir.
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIOE; // Port ayarlar yaplyor, SPI slave modunda, SPI klar aktif USICTL1 |= USIIE; USICTL0 &= ~USISWRST; //USI kesmeleri aktif // USI Aktif(Reset modundan kld)

MSP430 Programlama

Sayfa 97

10.6-)SPI Kesme Vektr USI modl iin sadece bir adet kesme vektr kullanlmaktadr(USIIFG). Bu kesme vektr hem SPI hem de I2C modu iin ortaktr. SPI modunda yukarda bahsedilen USICNT saklaycs sfr(0) a ulat anda kesme vektrne dallanlmaktadr. Aada bu donanmn blok diyagram yer almaktadr.

ekil 86 SPI Modln Kesme Vektr 9.6-)MSP430 SPI Uygulamas Bu uygulamamzda SPI modl ile 8 adet ledi P1.3 butonuna bastmzda sra ile yakacak bir devre tasarladk. P1.3 butonuna her bastmzda Q0 Ledinden balayarak srayla tm LEDler yanacaktr. 74HC595in alma mantna deinmiyoruz nk daha nce LCD blmnde alma mantn anlatmtk.
Q0 Q1

U2
14 13 12 11 10 9 8 GND P2.6 P2.7 TEST ~RST P1.7 P1.6 VCC P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 1 2 3 4 5 6 7 LATCH DATA CLK LATCH

U1
11 14 12 +3v5 CLK 10 13 MR OE 74HC595 SH_CP DS ST_CP Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q7' 15 1 2 3 4 5 6 7 9 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q2 Q3 Q4 Q5 Q6 Q7

DATA

MSP430G2231

ekil 87 SPI Uygulamasnn Devre emas

MSP430 Programlama

Sayfa 98

ekil 88 SPI Uygulamas Sonucu main.c


#include "io430.h" #include "in430.h" #define delay() for (i = 0x1FFF; i > 0; i--); P1OUT &= ~BIT0; P1OUT |= BIT0;

#define latch_ac_kapa() void usi_init(void); unsigned char reg=1; void main(void) {

WDTCTL = WDTPW + WDTHOLD; P1DIR = BIT0; P1OUT = BIT0; usi_init(); _BIS_SR(LPM3_bits + GIE); } #pragma vector=USI_VECTOR __interrupt void usi_vektoru(void) { volatile unsigned int i; //LPM3 Modunda // P1.0 k, Dierleri Giri // P1.0 = 1

MSP430 Programlama

Sayfa 99

delay(); if(reg==0) reg=1; while(P1IN&BIT3); latch_ac_kapa(); USISRL = reg; reg<<=1; USICNT = 8; USICTL1 &= ~USIIFG; } void usi_init(void) { USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE; //Port Ayarlar Yaplyor, SPI Master Modunda, klar Aktif USICTL1 |= USICKPH + USIIE; // USI Kesmeleri Aktif USICKCTL = USIDIV_7 + USISSEL_1; USICTL0 &= ~USISWRST; USICNT = 8; USISRL = 0x01; } // Frekans Blc = /128 ACLK // USI Kesme Bayra Temizlendi // 8 Bit letiim Yaplacak // USI yi Balat // USI Kesme Bayra Temizlendi //P1.3 Butonu Bekleniyor...

10.6-)MSP430 SPI 3310 LCD Uygulamas Bilindii gibi 3310 LCD ekran SPI iletiim protokoln kullanarak seri olarak haberlemektedir. Ayn ekilde MSP430 serisi denetleyicilerde de SPI iletiimi destekleyen USI birimi bulunmaktadr. Biz bu uygulamamzda her ikisini birlikte kullanarak ADC kanalndan dahili scaklk sensr ile scaklk okuyacaz.

ekil 89 3310 Pin Balants

MSP430 Programlama

Sayfa 100

SPI modunda iletiim iin spi.h ve spi.c adnda 2 ktphane dosyas oluturdum. Ktphanede toplamda 3 ana fonksiyon bulunmaktadr. Bunlar spi_init, spi_send_byte ve spi_get_byte fonksiyonlardr. Spi_init Spi_init fonksiyonu USI modln SPI master mod kullanm iin dzenler. Parametre almaz. Spi saat kayna SMCLK seilir veri iletiimi 8 bit olarak kesme kullanmadan yaplr. Bu fonksiyon spi iletiime balanmadan nce program banda bir kere altrlmaldr.
void spi_init (void){ USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master USICTL1 |= USICKPH; USICKCTL = USIDIV_0 + USISSEL_2; // SPI Clk = SMCLK USICTL0 &= ~USISWRST; // USI released for operation USICNT = 8; // init-load counter }

Spi_send_byte Spi_send_byte fonksiyonu master modda veri gnderme ilemi yapar. Gnderilecek olan veri parametre olarak girilerek fonksiyon altrlr. Byte olarak gnderme yapar. Her seferde bir byte gnderim yapar.
void spi_send_byte(char spi_data){ USISRL = spi_data; USICNT = 8; while (!(USIIFG & USICTL1)); } // Veriyi ykle // Saycy kur // Veri gnderilene kadar bekle

Spi_get_byte Spi_get_byte fonksiyonu master modda veri alm ilemi yapar. Fonksiyon altrldnda kar tarafta bulunan slave cihazdan bir byte veri okunur. Parametre almaz okunan veri deeri byte olarak geri dndrlr.
char spi_get_byte(void){ spi_send_byte(0xff); // Bo veri gnder. return USISRL; // Alnan veri ile dn. }

Ktphane fonksiyonlarn tandktan sonra 3310 LCD ekrannn USI birimi ile kullanmna geebiliriz. Ekran srmek iin spi_init ve spi_send_byte fonksiyonlarn kullanmak yeterlidir. LCD ekrandan veri okumas yaplmad iin spi_get_byte fonksiyonuna gerek yoktur. SPI fonksiyonlarn 3310ktphanesine dahil etmek iin 3310.c dosyas iindeki nokia_hazrla fonksiyonun bana spi_init fonksiyonunu dahil etmek, nokia_byte_yaz fonksiyonunun ieriini silip spi_send_byte fonksiyonunu eklemek ve 3310.h dosyas banda bulunan yazlmsal spi iin gerekli tanmlamalar silmek yeterlidir.

MSP430 Programlama

Sayfa 101

3310.h
#define nok_sdin P1OUT_bit.P1OUT_6//3310.h dosyasnda bu tanmlamalar silmeke yeterlidir. Yada olduu gibi braklabilir. #define nok_sclk P1OUT_bit.P1OUT_5

3310.c
void nokia_hazirla(void) { spi_init(); nok_dc=1; bekle(100); nok_reset=0; bekle(2000); nok_reset=1; nokia_komut_yaz(0x21); nokia_komut_yaz(0xC8); nokia_komut_yaz(0x13); nokia_komut_yaz(0x20); nokia_komut_yaz(0x09); bekle(100); nokia_ddram_temizle(); bekle(100); nokia_komut_yaz(0x08); bekle(100); nokia_komut_yaz(0x0C); } //bizim init fonksiyonumuz.

// // // // //

LCD'ye komut yazlyor. Vop V: 0xC8 (for 3V) LCD (1:48) modunda (bias) Soldan saa x birer artrlarak yazlyor. Displayi aktif hale getir. // DDRAM temizle

// Ekran temizle // Display normal moda dnyor

void nokia_byte_yaz(char byte_nokia){ spi_send_byte(byte_nokia); //Bizim spi fonksiyonumuz }

Bu kadar anlatmdan sonra rnek bir uygulama gerekletirelim. Uygulamada Launchpad zerinde bulunan msp430G2231 denetleyicisi kullanlarak 3310 LCD ekran kullanmn gerekletirilmektedir. Ekran kullanm Donanmsal USI birimi SPI master moda altrlarak gerekletirilmitir. Ayrca uygulamada MSP430G2231in dahili scaklk sensr kullanlarak scaklk lme ilemi yaplmtr. llen scaklk deeri lcd ekran zerinde grntlenir.

Balantlar
Launchpad 3.3v P1.5 P1.6 P1.4 GND GND P1.3 -> -> -> -> -> -> -> 3310 LCD VDD SCK SDIN DC SCE GND RES

MSP430 Programlama

Sayfa 102

main.c
#include <io430g2231.h> #include "3310.h" char birler,onlar,yuzler; long ham,derece; void main( void ) { WDTCTL = WDTPW + WDTHOLD; //Watchdog timer durduruluyor. P1DIR = 0xff; //PORT1 hepsi k. // Dahili 8mhz osilatr seiliyor. BCSCTL1= CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; // AD evirici ayarlar ADC10CTL1 = INCH_10 + ADC10DIV_3; ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON ; ////////////////////////////////////////////////////// nokia_hazirla(); nokia_lcd_git(12,0); nokia_yazi_yaz("MCU-TURKEY"); nokia_lcd_git(6,1); nokia_yazi_yaz("ERHAN YILMAZ"); nokia_lcd_git(10,2); nokia_yazi_yaz("MSP430 3310"); nokia_lcd_git(23,3); nokia_yazi_yaz("SPI LCD"); nokia_lcd_git(20,4); nokia_yazi_yaz("Denemesi"); while(1) // sonsuz dng { ADC10CTL0 |= ENC + ADC10SC; // AD evrimi balat if(ADC10CTL0 & ADC10IFG) // AD evrim bittimi? { ADC10CTL0 &= !ADC10IFG; // evrim bayarn temizle ham = ADC10MEM; // scakl oku derece = ((ham - 673) * 423) / 1024; //Scakl dereceye evir. //Okunan scaklk deerini basamaklarna ayr ve lcd ekranda grntle onlar=(derece%100)/10+0x30; birler=(derece%100)%10+0x30; nokia_lcd_git(6,5); nokia_yazi_yaz("Sicaklik="); nokia_karakter_yaz(onlar); nokia_karakter_yaz(birler); nokia_karakter_yaz('C'); // derece iaretini ekranda gster nokia_veri_yaz(0x00); nokia_veri_yaz(0x06); nokia_veri_yaz(0x09); nokia_veri_yaz(0x09); nokia_veri_yaz(0x06); nokia_veri_yaz(0x00); } }}

MSP430 Programlama

Sayfa 103

Denetleyicinin destek vermedii iletiim modlleri iin yazlmsal iletiim modlleri kullanlabilir. Yazlmsal iletiim modlleri esneklik ve kolaylk salasa da her zaman iin iletiimi denetleyicilerin salad donanmsal birimleri kullanarak yapmak daha salkldr.

ekil 90 SPI LCD Uygulamas

MSP430 Programlama

Sayfa 104

BLM 11 MSP430 LE DC MOTOR KONTROL


Doru akm motoru, doru akm elektrik enerjisini mekanik enerjiye dntren elektrik makinesidir. Doru akm motorlarna D.A motor veya D.C motorda denilmektedir. MSP430 mikrodenetleyicisi ile L298 entegresini kullanarak DC Motor sr uygulamas yapacaz. Uygulamay imdilik proteus zerinde yapacam. Elimde L298 entegresi olmad iin deneme frsatm olmad. En yakn zamanda deneyip, videoyu bu yaznn alt ksmna koymaya alacam.Bildiimiz gibi DC motorlarn yn endvi(rotor) geriliminin polaritesi deitirilerek yaplr. Bu uygulamamzda L298 entegresi motorumuzun dn ynnde deitireceiz. L298 entegresi bu tr olanaklar bize sunmakla beraber, ayn anda iki adet dc motor srebilme ansmzda vardr. Yalnz biz bu uygulamada sadece bir adet dc motor sreceiz. Siz isterseniz ikincisini de ekleyip eitli uygulamalar yapabilirsiniz.

ekil 91 DC Motor Ve Yaps Devre emamzda 3 adet butonumuz bulunmaktadr. Bunlardan birisi motoru ileri ynde, ikinci geri ynde, sonuncusu ise hzl stop iin kullanlacaktr. P2 portunun pinlerine ise L298 entegresi balanmtr. L298 entegresinin knda da bir adet 12V beslemeli dc motor bulunmaktadr. Uygulamaya balamadan nce dc motorlar hakknda ksaca tanmak istersek unlar syleyebiliriz. DC motorlar iki ksmdan oluurlar, endvi(rotor) ve alan(field) Alan ksm sarglardan veya sabit mknatstan oluur. Bu ksm endvi iin gerekli magnetik alan olutururlar. Eer motorda alan sargs bulunuyorsa, ayrca motorun alan terminallerinede dc gerilim uygulanmas gerekir. Ama kk gl motorlarda genellikle mknatsn oluturduu magnetik alan yeterli geldiinden mknats kullanlmaktadr. Endvi ksm ise alann oluturduu magnetik alann kestii sarglardan oluur. Bu sarglar iinde bulunduu sabit magnetik ak tarafndan kesilirler ve zerinde bir F kuvveti endklenir. oumuzun bildii bir forml vardr. F = B x I x L (Biot-Savart Kanunu) Bu forml sz ile ifade edecek olursak en basit anlamda unlar syleyebiliriz. inden I akm akan, L uzunluundaki bir tel B manyetik alan altndaysa, o telde F kuvveti endklenir. Oluan bu kuvvet motor milinin dnmesini salayan kuvvettir.

MSP430 Programlama

Sayfa 105

ekil 92 DC Motor Uygulama emas Bu DC motorlardan ksaca bahsettikten sonra, unu ekleyebiliriz. DC motora uyguladmz gerilim ite motor milinin dnmesi iin gerekli kuvveti oluturan unsurlardan olan I akmn basar. I akmnn yn ise motor dn ynn tayin eder. Bu nedenle dc motor terminallerini deitirdiimiz zaman, I akm ters ynde akaca iin, motorda dier ynde dnmeye balar. DC motorlar her iki ynde srmek iin ounlukla H bridge (H kprs) balantlar kullanlr. Bizim kullancamz L298 entegresi ise iki adet H kprs barndrmaktadr.

ekil 93 L298 Entegresi Blok Diyagram Yukarda entegrenin blok diyagram grlmektedir. Yukarda bahsettiimiz gibi entegre ierisinde A kprs ve B kprs olmak zere iki adet H kprs barndrmaktadr. Bu ekilde bu iki kpry kullanarak iki ayr DC motoru istediimiz ynde altrabiliriz.

MSP430 Programlama

Sayfa 106

ekil 94 L298 Entegresi Bacaklar Yukarda entegrenin pin isimlerini grmekteyiz. Input1 ve Input2 A kprsnn giri ulardr. Input3 ve Input4 ise B kprsnn giri ulardr. Bu pinlerle yn tayini yaplr. EnableA ve EnableB pinleri ise kprleri aktif duruma getirmek iin kullanlr. Output1 ve Output2 A kprsnn, Output3 ve Outpu4 ise B kprsnn k ulardr. Current Sensing A ve Current Sensing B ular ise A ve B kprs iin geri besleme almak iin diren balanlan ulardr. Vs pini ka balanacak dc motor iin pozitif besleme ucudur. Vss ve GND ise entegrenin besleme ulardr. Vs gerilimi 50V a kadar kabilmektedir. k akm ise srekli halde 2A, srekli olmayan 100 usn yi gemeyen pik akmlar iin 3A dir. Gelelim uygulamaya ait yazlmmza #include "io430.h" #include "in430.h" #define #define #define #define #define #define #define Button_Ileri Button_Geri Button_Stop IN_1 IN_2 EN_A EN_B P1IN_bit.P0 P1IN_bit.P1 P1IN_bit.P2 P2OUT_bit.P0 P2OUT_bit.P1 P2OUT_bit.P2 P2OUT_bit.P3

void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR &= ~(BIT0 + BIT1 + BIT2);
MSP430 Programlama Sayfa 107

P2OUT = 0x00; P2DIR |= BIT0 + BIT1 + BIT2 + BIT3; EN_A = 1; EN_B = 0; for(;;) { if(Button_Ileri) { IN_1 = 1; IN_2 = 0; } else if(Button_Geri) { IN_1 = 0; IN_2 = 1; } else if(Button_Stop) { IN_1 = 0; IN_2 = 0; } }
}

Yazlmda da grld gibi ilk olarak MSP430 a balanm olan pin tanmlamalar ve L298 entegresi iin kullanlan pinlerin tanmlamalar yaplmtr. Ardndan da main fonksiyonunda standart olarak WDT,Clock ve port giri k ayarlar yaplmtr. Daha sonra EN_A = 1; ve EN_B = 0 yaplarak A kprs seilmi ve B kprs pasif duruma getirilmitir. Zaten B kprsne bal ikinci bir motor bulunmamaktadr. Devam edecek olursak, ileri butonuna baslrsa if else if ksmnn ilk sektrne girilecek ve motor ileri ynde alacaktr. Eer geri butonuna baslrsa, ikinci sektre girilecek motor geri ynde dndrlecektir. nc butona yani hzl stop butonuna baslrsada, motor hzl stop yapacaktr.

Yukardaki tablodan da bunu grebiliriz. lgili kpr iin; rnein A kprs olsun.. C : Input1 ve D : nput2 olmak zere; Input1 = 1; Input2=0 ise motor ileri ynde dnecektir.
MSP430 Programlama Sayfa 108

Input1 = 0; Input2=1 ise motor geri ynde dnecektir. Input1 = Input2 ise motor hzl stop yapacaktr. Aada bizim uygulamamzda kullandmz balant emamza ilikin devre emas bulunmaktadr.

ekil 95 L298 Entegresinin Motor Balant emas Bu devre emas iki ynde dc motor kontrol iin entegrenin datasheetinden alnmtr. Bu noktada dikkat ekecek bir durum varki, o da udur. Motora bal olan D1~D4 diyotlarnn ters toparlanma sresi (trr) 200 nsn den kk olmaldr. Devreyi uygularken buna dikkat etmeli, ona gre D1~D4 diyotlarn semeliyiz.

MSP430 Programlama

Sayfa 109

BLM 12 MSP430 LE PWM KONTROL


Bildiimiz gibi en basit ifadeyle, PWM dalgas bir adet kare dalga demektir. Kare dalgann 0- arasnda Lojik1, -2 arasnda ise Lojik0 durumdadr. Yani doluluk oran(duty cycle) %50 dir. PWM dediimiz ey ise az nce bahsettiimiz duty cycle deerinin deitirilmesiyle oluan dalgalara denir. Yalnz burada dikkat etmemiz gerekirki, duty cycle deeri deise bile frekans sabittir. Bu uygulamamzda ise MSP430un timer birimini kullanarak PWM sinyalleri reteceiz. Bu uygulamamzda devre emamzn pek bir nemi yok. Sadece TimerA birimi sayesinden
reteceimiz PWM sinyallerini grmek iin P1.2 pinine osiloskop konulmutur.

ekil 96 PWM Sinyalleri


Yukardaki grafikte 3 adet PWM sinyali grlmektedir. Yaznn banda bahsettiimiz gibi PWM sinyalleri; frekans sabit tutup, darbe geniliini deitirilerek elde edilirler. Sonu olarak elde edilen sinyalin Ortalama Gerilimi (Mean Value V_average) deiir. Bu ekilde bir sinyal bir dc motor srcsne uygulandnda, ok ak bir ekilde grlecektirki, uygulanan gerilimin ortalama deeri deitiinden, dc motorunda endvi gerilimi azalacak, dolaysylada hz azalacaktr. Bir baka rnek olarak, yine bu ekilde bir sinyal ile Led srer isek, darbenin genilii arttka parlaklk artacak, azaldnda ise parlaklk azalacaktr. Yine bu tr sinyallerin kullanld yerlere rnek verecek olursak, DC-DC Dntrclerde (buck-boost-buck/boost converter vb.) yine bu tr sinyallerle bobin anahtarlanarak k gerilimi deitirilmektedir. Yani bu tr sinyallerin birok kullanm yeri vardr. Endstriyel uygulamalarda birok yerde kullanlrlar. Geelim MSP430 larda PWM sinyallerinin nasl retileceine. Aadaki grafikleri inceleyecek olursak, TimerA biriminin CCR0 kaydedicisine yklenen deer ile PWM sinyalinin frekansn, CCR1 kaydedicisine yklenen deer ilede doluluk orann ayarlamaktayz. Bu arada aadaki grafik Up Mode iindir. Ayrca aadaki grafikte eitli mod lar bulunmaktadr. Uygulamamza gre istediimiz ekilde sinyal elde edebiliriz. PWM sinyali iin uygun olan mod Mod6 veya Mod7dir.

MSP430 Programlama

Sayfa 110

ekil 78 TimerA Up Modu imdide uygulamaya ait yazlm verip zerinde konumaya balayalm isterseniz. main.c #include "io430.h" #include "in430.h" void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR=BIT2; P1SEL=BIT2; TCCR0=1000; TCCR1=600; TCCR2= OUTMOD_7; TACTL = TASSEL_2 + MC_1 + ID_0; for(;;); }
MSP430 Programlama Sayfa 111

Yazlmmz gayet sade. Sadece PWM sinyalleri iin gerekli timer ayarlarn yapp mikrodenetleyiciyi sonsuz dngde bekletiyoruz. Timer ayarlarndan bahsedecek olursak;

ekil 97 TimerA Ayarlar TimerA gelen clock darbe kayna olarak SMCLK seilmitir. Buna gre timer a gelen darbelerin periyodu 1 sn dir. TACCR0 kaydedicisine ykleyeceimiz deer ile PWM sinyallerinin periyodunu belirlediimizi sylemitik. Buna gre TACCR0 kaydedicisine 1000 deeri yklenmi. Yani T_pwm = 1000* 1sn = 1 msn , F_pwm = 1/1msn = 1kHz eder. Darbe geniliini ise TACCR1 kaydedicisine yklenen deer ile belirleyeceimizi sylemitik. TACCR1 e yklenen deer ise 600 dr. Buna gre 600 * 1 sn = 0.6 msn darbe geniliine sahibiz. Yani doluluk oran %60 tr. Son olarak ise TimerA , UP Mode da altrlm ve OutputMod7 seilmitir. Buna gre k sinyallerimizi osiloskop zerinden gzlersek;

MSP430 Programlama

Sayfa 112

ekil 98 PWM Uygulamas Sonucu Bu uygulamay LauncPad zerinde de kolayca deneyebilirsiniz. Ancak bu konuda size bir tavsiyem olacak. TimerA iin clock kaynan SMCLK semeyin. LaunchPad zerine kristali lehimlediyseniz, ACLK olarak sein. Kristal gayet stabil darbeler rettii iin ok daha iyi sonu alabilirsiniz. 12.1-) PWM le RC Servo Motor Kontrol Servo motorlar genel itibari ile ierlerinde bir DC motor ve aft konum bilgisi devresi barndrrlar. Bu devre aftn ka derece dndnn alglanmasnda kullanlr. Servo motorlarn iyaps aada gzkmektedir. Bilindii gibi RC Servo motorlar; oyuncak uak, oyuncak araba, oyuncak tekne gibi uygulamalarda kullanlrlar. Temel olarak ilerinde DC Motor bulunmaktadr. Konum kontroll olarak altklarndan ilerinde elektronik kontrol devresi bulunmaktadr. Yani elektronik konum kontroll bir dc motor olarak adlandrabiliriz, bu motoru.

ekil 99 RC Servo Yaps


MSP430 Programlama Sayfa 113

Ayrca bu motorlarda ek olarak torku(momenti) artrmak iin dili ark sistemi bulunmaktadr. DC Motorun milinden elde edilen tork yeterli deildir. Bu nedenle ieride tork u artrmak iin dili ark sistemi bulunmaktadr. Bunu matematiksel olarak u ekilde ifade edebiliriz. Mekanik dnyada g forml u ekildedir ==> P = T * W P : G (mekanik) T : Tork (Moment) W : Asal Hz Motora uygulanan g sabit olduunda, eer asal hz azalrsa, milden alnan moment artacaktr. Ayn yoku karken arabann veya bisikletin vitesini klttmz gibi. Vites klnce, daha dk bir hzda gidilir fakat elde edilen tork artar. Bu arada ben tork kelimesini moment kelimesine tercih ediyorum. Teknik anlamda tam olarak ayn anlama gelmeselerde, ayn anlamda kullanlmaktadrlar. RC Servo motorlarda 3 adet pin bulunur. Bunlarn ikisi pozitif ve negatif besleme ular, ncs ise kontrol sinyallerinin uyguland utur. Motor konumu kontrol pininden uygulanan PWM sinyallerine gre artlanr. Besleme pinlerinden uygulanan gerilim ise 4.8V ~ 6V arasnda olmaldr. Nominal deeri 5V tur. Ben launchpad zerinde uygulamay yaparken, besleme ularn kartn USB den gelen 5V pinlerine baladm. Kontrol ularna ise mecburen ~3.5V civarnda PWM sinyalleri uygulamak zorunda kaldm ve alt. Motor konumu, kontrol pinine uygulanan pwm sinyallerinin ON sresine gre konumlanmaktadr. Piyasada genellikle 180 derece dnebilen motorlar bulunmaktadr. Ama 360 derece dnebilenleride mevcuttur. Uygulanan kontrol sinyallerinin ON sresi 1 msn ise motor en sol konumda (-90), 1.5 msn ise orta konumda (0) , 2msn ise en sa konumda (90) olmaktadr. Her ne kadar rnn datasheetini bir trl bulamasamda, nette PWM sinyallerinin ON sresi hakknda eitli rivayetler mevcut. 0.5 msn ~ 1.5 msn arasnda deitirilmesi gerekir diyenler var. 1 msn ~ 2 msn arasnda deimesi gerekir diyenler var. 0.5 msn ~ 2.5 msn arasnda deimesi gerekir diyenler var. O yzden en iyisi siz deneyerek en iyi sonucu bulabilirsiniz. Bu arada PWM sinyallerinin periyodu 10 msn ~ 20 msn arasnda sabit bir deerde olmas gerekir. 20 msn (50 Hz) deeri periyot iin tavsiye edilen deerdir. main.c
#include "io430.h" #include "in430.h" void main(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR=BIT2; P1SEL=BIT2;

MSP430 Programlama

Sayfa 114

TACCR0 = 656; TACCR1 = 25; TACCTL1 = OUTMOD_7; TACTL = TASSEL_1 + MC_1 + ID_0; for(;;) { do { __delay_cycles(15000); TACCR1++; }while(TACCR1<75); do { __delay_cycles(15000); TACCR1--; } while(TACCR1>25); } }

Yazlmda ilk olarak standart ayarlar yaplarak ardndan da PWM ayarlar yaplmtr. Daha sonra ise sonsuz dngye girilerek motor bir saa bir sola sra ile dndrlmektedir. Motorun 60 derece a sprebilmesi yaklak 0.15 sn srmektedir. Bunu dikkate alarak sizde kendinize gre eitli uygulamalar yapabilirsiniz.

ekil 100 RC Servo Uygulama Sonucu


MSP430 Programlama Sayfa 115

BLM 13 MSP430 LE SD VE MMC KART UYGULAMASI


SD/MMC kartlar bilindii gibi eitli boyutlarda retilen ve bilgisayarlarla uyumlu alabilen veri depolama elemanlardr. SD/MMC kartlarn bilgisayar ile haberlemesi ok basittir. SD/MMC kart okuyucuyu ile kart bilgisayara taklarak herhangi bir src yklemeden bir ka saniye iinde kullanma hazr hale gelir. Fakat gml sistemlerde yani mikrodenetleyici ve FPGA gibi yaplarda ilem daha karktr.

ekil 101 SD Ve MMC Kartlar SD/MMC kartlar aada ki ekilde grld gibi pin dizilimlerine sahiptir. ekil`deki SD ve MMC kart standart boyutlara sahip bir SD ve MMC karttr. Bunun dnda mini SD, Mikro SD gibi eitli boyutta SD kartlar bulunmaktadr. Hepsi de ayn ilemi yaparlar. Birbirlerinin yerine kullanabilmek iin piyasada SD kart dntrcler bulunmaktadr. SD kartlar SPI ve SD olmak zere iki ekilde haberleirler.

ekil 80 SD Ve MMC Kartn Pin Diyagram


MSP430 Programlama Sayfa 116

Bizim SD kart kullanacaz ve haberleme SPI protokol ile gerekletirilmitir. SD kart ile haberlemek iin SPI zerinden Haberleerek SPI kart hazr hale getirilir sonrasnda iletime geilir. SPI kartlara veri yazma/okuma ilemi 512 byte bloklar halinde gerekletirilir. Verilerinizi 512bytelk paketler halinde SD karta kayt edebilirsiniz. Fakat bu kayt edilen veri ham veri olacandan karttaki veri bilgisayar tarafndan tannmaz. Muhtemelen diskin biimlendirilmesi eklinde uyar verir. Bunun iin SPI karta veri yazmak okumak iin. Bilgisayar iletim sistemlerini kulland FAT/FAT16/FAT32 gibi dosyalama sistemleri kullanarak dosya kayt ilemi yaplmaldr. Bu sayede SDI kart zerindeki verimiz bilgisayar tarafndan anlaml bir veri olarak kabul edilir. Sonuta SD kart kullanabilmek iin ncelikle Sd kart hazrlayp veri yazma/okumaya hazr hale getirmek sonrasnda ise uygun dosya sistemini kullanarak dosyalarmz yazmamz/okumamz gerekiyor. Bu ilemlerin bilgisayar tarafndan ksa srede yapldndan bahsetmitim. Fakat mikrodenetleyici ksmnda ise bu aamalar kullancnn kendi yazmas gerekmektedir. Yani nce SD kart srmek iin ktphane dosyas yazlmal sonrasnda ise FAT dosya sisteminde haberleme yapan bir ktphane yazlm yaplmal. Bu ilemleri yapmak ok zahmetli olduundan dolay retici firmalar kendi rnlerine bu destei salayp sizi byk bir zahmetten kurtarmaktadr. Bizde uygulamamzda byle bir hazr ktphane kullanacaz. Ktphanenin yazar Elm-Chandr. Elm-Chan tarafndan gelitirilen bu ktphane tamamen cretsizdir ve ou mikrodenetleyiciler iin uygulanabilir. Ayrca ktphane ak kodludur. stediiniz mikrodenetleyiciye ktphane zerinde bir ka deiiklik yaparak adapte edebilirsiniz. Elm-Chan tarfndan gelitirilen iki tane ktphane mevcuttur. Birisi PFF (Petit FAT modl) dieride FF (Fat modl) iki ktphanenin fark PFF dk hafzal mikrodenetleyiciler iin kullanlmaktadr ve zellikleri snrldr. Yeni dosya oluturmaya izin vermemektedir. Kart zerinde var olan dosyalar zerinde deiiklie izin vermektedir. FF ktphanesinde ise byle bi sorun yoktur. Dosya oluturma klasr oluturma v.s. gibi tm ilemlere izin vermektedir. Biz uygulamamzda hafza yetersizlii nedeniyle PFF ktphanesi kullanacaz. 13.1-) MSP430 SD/MMC Uygulamas Bu uygulamamzda hedef SD kart iinde bulunan deneme.txt ap iindeki ilk 64 karakteri kk harfle yazlmlarsa byk harfe evirmektedir. evirilen karakterler sonradan tekrardan dosya iindeki dier karakterler ile yer deitirilerek okuma ilemi tamamlanr. SD kart ile MSP430un haberlemesi iin ktphane dosyalar iinde gerekli deiiklii yaparak istediinizi I/O baca ile SD kart haberletirebilirsiniz. Launchpad kit uygulama resminde grld gibi SD kartn besleme gerilimi de launchpad kiti tarafndan salanmtr. Uygulamada denetleyici olarak 8KB hafzal MSP430G2452 kullanlmtr. PFF ktphanesi yaklak olarak 5KB yer kaplamaktadr. FF ktphanesi ise yaklak 10.5 KB yer kaplamaktadr. Ben uygulamada hafza yetersizliinden PFF ktphanesini kullandm. leride daha yksek hafzal bir MSP ile FF ktphanesini kullanmay dnyorum. Derleme ilemi IAR 30 gnlk deneme srm ile gerekletirilmitir.

MSP430 Programlama

Sayfa 117

ekil 102 Uygulama Resmi MSP430G2553IN20 teknik zelliklerini de inceliyelim. Flash Hafza : 16kB RAM Hafza : 512B 1.8v - 3.6v aras gerilimlerde alabilme LaunchPad Uyumlu Dk-g zellikleri Aktif mod : 230uA Bekleme modu : 0.5 uA RAM Retention modu : 0.1uA 5 farkl dk g modu 1uS den nce bekleme modundan uyanma 16 bit RISC Mimari 6 Mhz de alabilme(Ayarlanabilir dahili RC osilatr ile) Dahili VLO Osilatr(~15kHz) 3 Capture/Compare Saklaycsyla 2 adet birbirinden bamsz Timer_A 16 Capacitive touch zellie sahip Giri/k USCI (Universal Serial Communication Interface) I2C SPI UART
Sayfa 118

MSP430 Programlama

Gibi donanmsal zellikte ve yapya sahiptir.


M1
MMC P3.0/UCB0STE/UCA0CLK/A5 P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/A6 P3.7/A7 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB0/A12 P4.4/TB1/A13 P4.5/TB2/A14 P4.6/TBOUTH/A15 P4.7/TBCLK RST/NMI/SBWTDIO TEST/SBWTCK 11 12 13 14 25 26 27 28 17 18 19 20 21 22 23 24 7 1 Card Multimedia

U1
31 32 33 34 35 36 37 38 8 9 10 29 30 3 6 5 16 15 P1.0/TACLK/ADC10CLK P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK/TCK P1.5/TA0/TMS P1.6/TA1/TDI/TCLK P1.7/TA2/TDO/TDI P2.0/ACLK/A0 P2.1/TAINCLK/SMCLK/A1 P2.2/TA0/A2 P2.3/TA1/A3/VREFP2.4/TA2/A4/VREF+ P2.5/ROSC XIN/P2.6 XOUT/P2.7 AVCC AVSS MSP430F2232

P1.6

PORT2.0 PORT2.1 PORT2.2 PORT2.3

R1
PORT2.0
10k

ekil 103 SD/MMC Kart Uygulamas emas SD kartn iine aktarlan deneme.txt dosyas iindeki kk harfli karakterler byk harfe dntrlp tekrar yazlmtr. Trke karakterler ASCII karakter olmadndan dntrme ilemi yaplmamtr.
#include <io430g2452.h> #include "pff.h" #include "delay.h" int main (void) { FRESULT rc; //Dosya ilem sonucunu tutan deiken FATFS fatfs; /* File system object */ WORD bw, br; BYTE buff[64],i; P1DIR |= 1<<6; WDTCTL = WDTPW + WDTHOLD; //Watchdog timer durduruluyor. // Dahili 8mhz osilatr seiliyor. BCSCTL1= CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; /////////Led(p1.6) Yak-sndr./////////// P1OUT |= 1<<6; bekle_ms(250); bekle_ms(250); P1OUT &= ~(1<<6); bekle_ms(250); bekle_ms(250); rc = pf_mount(&fatfs); //Kart altr. rc = pf_open("deneme.txt"); //Kart iinde bulunanan deneme.txt isimli dosya varsa a. rc = pf_read(buff,sizeof(buff), &br); //Alan dosyadan 64 karakter veriyi oku. for (i=0; i<=63; i++){ //Alnan karakterler kk harf ile yazlm ise byk harfe evir.
MSP430 Programlama Sayfa 119

PORT2.2 PORT2.3 PORT2.1

DI DO CLK

CS

if( buff[i] >= 'a' && buff[i] <= 'z') buff[i] -= 0x20;} rc = pf_write(buff, sizeof(buff), &bw); //evirme ileminden sonra 64 karakter veri ile dosya iindeki 64 karakter veriyi yer deitir. Rc = pf_write(0, 0, &bw); //Alan dosyay kapat. f(!rc) //Kapatma ilemi baarl ise led(P1.6) yak sndr. {P1OUT |= 1<<6; bekle_ms(250); bekle_ms(250); P1OUT &= ~(1<<6); bekle_ms(250); bekle_ms(250);} while(1); //Sonsuz dng }

ekil 104 SD/MMC Kart Uygulamasnn Sonucu

MSP430 Programlama

Sayfa 120

BLM 14 MSP430 EK DONANIMLARI


14.1-) ez430 Chronos Texas Instruments Firmasnn saat eklinde rettii bu gelitirme kitinde birok zellik bulunuyor. Biraz hobi amal retilmi bir kit olmasna ramen yine de deiik ve gzel uygulamalar yaplabiliyor. Bu yazmda inceleme frsat bulduum saat ekilndeki bu gelitirme kitinin zelliklerinden ve nasl kullanldndan bahsedeceim.

ekil 105 ez430 Chronos Basite saatin zelliklerinden bahsedecek olursak ; Saaat zerinde 3 eksen ivme ler, scaklk sensr, basn sensr, ve saatin pil durumunu gsteren sensrler mevcut. Texas Instrumentsn bu saat iin gelitirdii arayz program ile bu zellikler hzlca kullanlabiliyor ve bilgisayar ekrannda grntlenebiliyor. Saatin en sevdiim zelliklerinden biri ise bilgisayarn sistem saatini okuyup RF zerinden tek tula saati ayarnn yaplabilmesi. Texas, bu saat ile aslnda kullancya hem MSP430u tantm hem de mikrodenetleyici tarafnda hi kod yazdrmadan basit ve hzl bir ekilde uygulama ortam salayarak hobicileri biraz daha kendine ekmi. nk saat zerindeki hazr sistem sayesinde sadece tulara basarak sensrleri kontrol edebiliyor ve bilgisayar balantsn balatabiliyorsunuz.

MSP430 Programlama

Sayfa 121

14.1.1-)Kutu erii Kutu ierisinden aadaki malzemeler kyor;


Chronos saat eZ430 USB programlama ve debug arayz CC1111 USB RF access point Chronos saati amak iin bir adet tornavida 2 adet yedek vida CR2032 Lityum Batarya (Pilin ne kadar dayandn User Guidedan renebilirsiniz)

ez430 programlama arayz, Texas Instrumentsin standart olarak ez430 diye adlandr tm kitlerle ayn zelliklere sahip. Bu modl ile Spy-Bi-Wire protokol zerinden saat iindeki yazlm gncelleme ve silme ilemleri yaplabiliyor. Silme ilemi derken u zellii de belirteyim; Saat ierisndeki yazlm silip kendiniz tekrar yeni bir yazlm oluturarak cihaz bir saat gibi deil de tamamen gelitirme kiti gibi kullanmanz mmkn. Saat ile gelen mikrodenetleyici zerindeki 96 segment LCD srcs ile segment srme ilemlerini de donanm ile yapabilirsiniz. Bu ve bunun gibi ekstra zelliklerin MSP430un kendi bnyesine bulundurmas g tasarrrufu salamak asndan olduka nemli bir faktrdr. cc1111 USB RF Acces Point ise, kutu iersininden saat ile ayn frekansa sahip alc modldr. Bu modln tasarm frekans deitiinden dier modeller iin de deiik ekilde yaplm. Bendeki model, 868 MHz olduundan alcs da ayn frekansta empedans ayar yaplm olarak gelmektedir. zerinde kk bir anten bulunduruyor fakat benim gzlemlerime gre alc verici sistem, kapal alanda ok baarl deil. 14.1.2-)Teknik zellikler Saatin zerinde Texas Instrumentsn CC430 olarak adlandrlan ve ierisinde hem MSP430 mikrodenetleyicisini hem de 1GHzin altnda RF Transceiver modln tayan bir yap bulunuyor. Bu iki ksmn tek ip halinde birlemi modellerine TI, CC430 ismini veriyor. Ve saat zerindeki CC430F6137 mikrodenetleyicisi bu ailenin en gl yesi.

ekil 106 CC430 Mikrodenetleyicisi


MSP430 Programlama Sayfa 122

Saatin 433 Mhz, 868 Mhz ve 915 Mhz olmak zere farkl modeli bulunuyor. Bu farklar fiyata yansmyor fakat alrken yksek frekanslarda haberleme hznn daha hzl olabileceini de gz nnde bulundurmanz iyi olabilir. Saat zerindeki sensrleri daha da ayrntl inceleyecek olursak;

3-Eksen Akselerometre (VTI CMA3000 Series) Basn Sensr (VTI SCP1000 Series) Scaklk Semsr (CC430F6137 zerinde dahili olarak bulunuyor) Pil Voltaj Sensr (CC430F6137 zerinde dahili olarak bulunuyor)

3 eksen akselerometre ve basn sensr VTI firmas tarafndan retilmi ve yukardaki linklerden daha detayl bilgilere ulamanz mmkn. 14.1.3-)ez430 Bilgisayar Arayz Yazmn banda da bahsettiim ileri kolaylatran bilgisayar arayz TI sayfalarndan indirilebilir. Bu arayzn bir gzel zellii ise Linux kullanclarn da hitap etmesi. Bu ekilde Linux kullanclar da MSP430 iin grsel bir arayzden mahrum kalmam oluyor. Yazlmn Windows iin son srmnu buradan indirebilirsiniz. Yazlmn Linux iin son srmnu buradan indirebilirsiniz.

ekil 107- Uygulamann Ekran Grnts Yukardaki sekmelerden saatin hangi sensrn kullanmak istiyorsanz iletiimi ona gre belirleyerek RF zerinden sensr bilgilerini gnderme ilemine balayabiliyorsunuz.
MSP430 Programlama Sayfa 123

Saati Acc modunda bilgisayara baladnz zaman bu ekranda X, Y ve Z konum bilgilerini grafiksel olarak grmek mmkn. Alttaki sar ksmda ise konum bilgileri dijital olarak grnyor.

Bu ekranda ise saat zerinde bulunan tulara ksayol atamas yaparak Windowsda hang ilemleri yapmak istediinizi ayarlayabiliyorsunuz. Uygulama ierisinde hazr olarak Windows Media Player iin atanm ksayol scripti de bulunuyor. Bunun iin saati ppt modunda bilgisayara balam olmalsnz.

MSP430 Programlama

Sayfa 124

Bu ksmda ise yazmn banda bahsettiim sistem saatini ayarlama fonksiyonu bulunmakta. Read Watch butonuna tklarayarak saatinizin ka olduunu renebiliyor, Copy System Time butonuna tklayarak sitem saatini okuyabiliyor ve Set Watch butonuna tklayarak saatinizi okuduunuz deere ayarlayanbiliyorsunuz. Bunun iin saati Sync modunda bilgisayara balamanz gerekli. 14.2-)eZ430-RF2500 ncelemesi Texas Instrumentsn 49$ e-Store da satt bu rn LaunchPad kullanclarnn bir st basamak olarak kullanabilecekleri en iyi rn/kit diyebilirim aslnda. nk zerinde F2x serisinden ok gzel bir orta seviye MSP430 ve bir de RF severler iin 2.4GHz Transceiver modl bulunduruyor. zerinde bulunan RF modl, ChipCon -TIn 2006 ylnda satn ald- firmas tarafndan retilen CC2500 adl modl. MSP430 tarafnda ise MSP430F2274 mikrodenetleyicisi bulunuyor. Bu denetleyici G serisi Value Line olarak tabir edilen serilerdeki modellerden ok daha stn bir model. Bu iki ip tek bir modl ierisinde yer alyor ve kutu ierisinden iki adet modl kyor. Kutu ieriini aadaki resimden grebilirsiniz. Aadaki resimde programlayc ile beraber olan ksm Acces Point, dier pille alan ksm ise End Device olarak adlandrlyor. Modller, G serisi gibi Spy-Bi-Wire zerinden programlanyor. Tek bir modl ve programlayc ksmn biraz daha derinden ele alalm;

MSP430 Programlama

Sayfa 125

ekil 108 eZ430 RF2500 Kutu erii Sa tarafta grlen ksm resimden de anlalabilecei gibi modl ksm. zerindeki k pinlerinden MSP430F2274 n baz pinlerine ulalabiliyor. CC2500n hemen altndaki kristal ise MSP430 iin deil de CC2500 iin 26MHz lik kristal. Kristal balamak iin XT2IN ve XT2OUT ularn kullanarak 32kHz 16MHz aras bir deerde kristali bu ulara balayabiliyoruz. Bu da LaunchPadden sonra sevindirici bir zellik aslnda. Sol tarafta yer alan ksm ise programlayc ksm. Bu ksmn yaps aslnda LaunchPad zerindeki Emulation ksmyla birebir ayn saylr. k tarafnda GND,Vcc,Tx,Rx ve iki adet de programlama iin gerekli olan pin olmak zere toplam 6 pin bulunuyor. Bu kit kullanlarak birok gzel uygulama gerekletirmek mmkn. Texas Instrumentsn bu kit zerindeki slogan da yine Ultra-Low-Power. nk CC2500 ipi tamamen dk g RF uygulamalar iin tasarlanm. Hatta katalounda bu modln 2 adet 1.5v pil ile 1 yla yakn alabilecei yazyor! Yanndaki MSP430 da dk g olunca ikisi beraber gzel bir ikili oluturmu. Fakat mesafe olarak ok mkemmel bir sonu beklememek gerektiini de hatrlatmak isterim. Bu yazy yazma sebebim aslnda modl ksm hakknda bu kiti kullananlar iin bir referans olmas sebebiydi. O yzden ayrntl olarak MSP430F2274 ve CC2500 zerinde duracam biraz da.

MSP430 Programlama

Sayfa 126

ekil 109 - MSP430F2274 Blok Diyagram


32kb Flash Hafza 1kb RAM Hafza 12 kanal 10 bit ADC 2 adet Op-Amp 3CCR Saklaycsna sahip 2 adet 16 bit Timer USCI Modl o UART o SPI o I2C Spy-Bi-Wire ile Programlanabilme 16 MHz de alabilme (XT2 Kristali de kullanlabilir) Watchdog Timer

ekil 110 Batarya nitesi


MSP430 Programlama Sayfa 127

MSP430F2274 denetleyicisi temel olarak bu zelliklere sahip. IAR Embedded Workbench Kickstart srm bu denetleyici iin kod snrlamasn 32kb olarak tutuyor. 1kb RAM olmas da G serisine gre olduka iyi elbette. Dier ip CC2500 RF Transceiver modlnn blok diyagram ise yukarda grlyor. Bu ksm MSP430 taraf ile SPI zerinden haberleiyor. ipin gzel zelliklerinden biri ise 64 byte Tx/Rx FIFO sunun bulunmas. Ayrca maskimum 500kbps hznda veri gnderimi de yapabiliyor. Bu hz, yazlmla ayarlanp hz gerektirmeyen uygulamalarda ipin daha az akm harcamas salanabiliyor. Aadan daha detayl bilgilerin bulunduu tabloyu inceleybilirsiniz. Parametrics Frequency(Min)(MHz) Frequency(Max)(MHz) Device Type Data Rate(Max)(kbps) Operating Voltage(Min)(V) Operating Voltage(Max)(V) RX Current (Lowest)(mA) Standby Current(uA) Wakeup Time (PD>RX/TX)(uS) Modulation Techniques Sensitivity (Best)(dBm) TX Power(Max)(dBm) Programmable Output Power Ranging From(dBm) Antenna Connection CC2500 2400 2483.5 Transceiver 500 1.8 3.6 13.3 240 OOK,2-FSK,GFSK -104 1 -30 to 1 Differential CC2550 2400 2483 Transmitter 500 1.8 3.6 0.2 240 OOK,2-FSK 1 -30 to 1 Differential

Aslnda SPI ile MSP430 tarafn haberletirmek o kadar kolay deil. Kolay olsa da yazlmdan dolay harcanan akm miktar biraz fazla olabilir. Bu durum iin Texas Instruments mhendisleri SimpliciTI adnda bir ktphane yazmlar ve bizi tm dertten kurtarmlar. Bu ktphanenin temel ilevi u : Bir ya da daha fazla End Device Modlnn bir Network eklinde birbirleri ile heberlemesini salyor. Yani ktphaneyi olduka genel kullanm amal yazmlar. Kutu ierisinden sadece bir tane End Device olarak kullanacamz modl ksa da birden fazla modl kullanm durumunda karklk olmamas iin her End Devicea bir ID verip haberlemeyi ona gre organize etmiler. Aada Kit ierisindeki DVD den kan Wireless Sensor Monitor Demo adl programdan bir grnt bu durumu daha iyi aklayacaktr sanrm.

MSP430 Programlama

Sayfa 128

ekil 111 - Wireless Sensor Monitor Program Ortadaki bulunan tm modllerin bal olduu(73.4 F yazan) baloncuk bir Acces Pointi temsil ediyor. Yani dier cihaz bu modle bal ve bilgiyi srekli olarak bu modle gnderiyorlar. Acces Point ise veriyi RF zerinden alp UART zerinden bilgisayara gnderiyor. Ve ortaya bu ekilde bir diyagram kyor. Buradaki End Devicelardan herhangi birinin balantsn kestiiniz takdirde ona ait olan baloncuk kayboluyor ve dierlerinin iletiiminde bir problem olmakszn haberleme devam ediyor. Yazm tamamlamadan nce unlar da eklemek isterim ki : Kiti bilgisayara taktnzda eer herhangi bir kod gelitirme arac bilgisayarnza ykl ise dorudan tannyor. Dieri nemli madde ise Daha burada deinmediim baz konular var mesela yeni bir proje nasl oluturulur veya Wireless Sensor Monitor Program kite nasl yklenir gibi sorularn cevabn Users Manualde bulabilirsiniz.

MSP430 Programlama

Sayfa 129

BLM 15 EK KISIM / DERLEYCLER VE KULLANILAN DONANIMLAR 15.1-) IAR Kullanm


IAR indirip bilgisayarmza kurduktan sonra karmza gelecek olan ekran.

ekil 112 IAR Ekran Buradan File>>Close Workspace diyoruz. Sonra Project>>Create New Project diyoruz.

MSP430 Programlama

Sayfa 130

OK deyip kaydettikten sonra karmza yeni oluturduumuz proje ekran main.c dosyas ile beraber geliyor Project>>Options (Alt+F7) ksmndan ilemcimizi seiyoruz.

Buraya kadar herey normal zaten imdi burada ufak bir ayrnt var. Normalde IAR derlediimiz C kodumuzu .hex uzantl dosyaya evirmiyor. .d43 uzantl dosyaya eviriyor. Byle olunca da Proteusta ilemciye kod yklemek iin baya bir didiniyorsunuz. .d43 uzantl dosya Proteus tarafndan grlmyor. Ama resimdeki ufak ayar yaptmz zaman deleyici .hex dosyasn da oluturuyor.

MSP430 Programlama

Sayfa 131

MSP430 Programlama

Sayfa 132

15.2) Code Composer Studio zellikle MSP430 mikrodenetleyicisini programlamak iin kullanlan Code Composer Studio, TIn yaynlad, Eclipse tabanl bir derleyicidir. zellikle IARn sert yapsnn yannda sunduu Eclipse IDEsi avantajlar kullancya ok fazla kolaylk salad iin bu kitap ierisindeki tm rnekler bu IDE ile yaplmtr. Code Composer Studionun snrl versiyonlar aadaki linkten indirilebilir. Kullandmz mikrodenetleyicilerin hafzas snrl olduundan indirilen snrl versiyonlar uygulamalarmzda bizlere sknt karmamaktadr. http://focus.ti.com/docs/toolsw/folders/print/ccstudio.html?DCMP=dsp_ccs_v4&HQS=Oth er+OT+ccs Code Composer Studioda yeni bir proje oluturmak iin aadaki admlar srasyla uygulanmaldr.

MSP430 Programlama

Sayfa 133

ekil 114 Proje smi Belirleme


Bu ksmdan sonra next sekmelerine basarak donanm seme ekranna geliniz.

MSP430 Programlama

Sayfa 134

Daha sonra ise Finish diyerek projemizi oluturmalyz. Daha sonrasnda proje isminin zerine gelip sa tklayarak new ve source file diyerek projemize main.c dosyasn ekleyelim.

Projeyi derlemek iin aadaki krmz iersindeki buton kullanlr.

Daha sonra ise aada grlen bcek ekline basarak debug ilemine geerek donanmmza programmz ykleyebiliriz.

MSP430 Programlama

Sayfa 135

15.3-) Kullanlan Donanmlar Kitap boyunca kullanlan donanmlar LaunchPAD MSP430G2231 mikrodenetleyicisi,

LaunchPAD
EZ430-F2013 donanmdr. Bu donanm zerinde dahili programlayc ve MSP4302013 donanmn barndrmaktadr.

EZ430-F2013

MSP430 Programlama

Sayfa 136

KAYNAKA
AKAR Feyzi, YAIMLI Mustafa, Dijital Elektronik, Beta Yaynevi EK Serdar, CCS le PIC Programlama, Alta Yaynevi EMANET Emre, Mikrodenetleyiciler Ders Notlar Elektrobilim.Org, E-Dergi 2.Say, www.elekrobilim.org KARAKA Hakan, leri PIC 16F84 Uygulamalar 1, Alta Yaynevi MSP430 Datasheets www.mcu-turkey.com www.fxdev.org www.fatihinanc.com www.fgokcegoz.com www.ti.com www.43oh.com

MSP430 Programlama

Sayfa 137

You might also like