izmir escort escort izmir porno porno izle
MSP430F2274 CC2500 RF2500 Kit ile Kablosuz İletişim Uygulaması - IRCForumları - IRC ve mIRC Yardım ve Destek Platformu
User Tag List

Standart MSP430F2274 CC2500 RF2500 Kit ile Kablosuz İletişim Uygulaması #1
Üyelik Tarihi: 11 Haziran 2011
Mesajlar: 3.063
Aldığı Beğeni: 1
Beğendikleri: 0
06 Kasım 2011 , 01:27
Alıntı ile Cevapla
Kablosuz İletişim Uygulaması - Kit ile Kablosuz İletişim - Ez430 - Kablosuz İletişim - MSP430 - Rf2500 Kit


RF2500 kitinden ve bu kit ile yapmış olduğum uygulamadan bahsedeceğim. RF2500 kit Texas Instruments firması tarafından geliştirilmiş RF geliştirme kitidir. Paket içerisinde 2 adet target board ve programlama Debug işlemleri için eZ430-RF USB Debug ara yüzü bulunmaktadır.

İki adet target board sayesinde karşılıklı olarak haberleşen sistemler tasarlayabilirsiniz. Target board üzerindeki ana elemanlar MSP430F2274 denetleyicisi ve CC2500 2.4 Ghz alıcıverici tümdevresidir. Msp430f2274 denetleyicisi SPI iletişim ile CC2500 tümdevresini kullanarak kablosuz iletişimi gerçekleştirilir. RF2500 kit ile ilgili ayrıntılı anlatıma Fatih arkadaşımızın makalesinden ulaşabilirsiniz.

Benim RF2500 kit üzerinde gördüğüm eksiklikler target boardlar üzerinde bulunan denetleyicilerin dahili RC osilatör ile çalıştırılması. Ondanda geçtim diğer pinler dururken harici kristal bağlamak için kullanılan pinler CC2500 tümdevresi ile haberleşme için kullanılmış. TI sanki denetleyicilerin de harci kristal kullandırmak istemiyor. Belkide Harici kristal kullanınca denetleyici daha çok güç tüketiyordur. Belkide MSP430 serisinin düşük güç tüketmesinin nedeni budur

RF2500 kiti TI’nin kendi sitesinden sipariş edebilirsiniz. Kitin fiyatı 49 dolardır. Kablosuz iletişim uygulamalarına başlangıç ideal bir kit. Paket içeriğine bakılırsa 49 dolar fiyat ne ucuz ne pahalı normal bir fiyat.



Uygulamayı geliştirirken TI’nin MCU Teaching ROMs platformunda bulunan Beira Interior üniversitesi tarafından hazırlanmış MSP430 Teaching ROM CD’sindeki RF2500 uygulamasından faydalandım. Platform üzerinde msp430 ve diğer TI denetleyicileri ile ilgili faydalı eğitim CD’leri bulunmaktadır.

CD’ler direk olarak internet üzerinden indirilebilir. Ayrıca CD isteği de yapılabilir. TI’nin böyle bir hizmet vermesi çok güzel. Ben üniversite e-posta adresini kullanarak eğitim CD’lerinden istedim 1- 2 hafta içinde 5 eğitim CD’sini de ücretsiz olarak gönderdiler. Şansınızı denemekte fayda var.



Uygulamamızın çalışması basittir. Target boardlardan birisi Base (ana birim) diğeri de Remote (kontrol birimi) olarak adlandırılmıştır.
Arayüz programı

Target boardlar arasında haberleşirken veri göndermek için bilgisayar kısmında C# ile küçük bir arayüz programı yazdım. Şunu belirtmeden geçmeyeceğim target boardlar üzerlerinde bulunan denetleyici sayesinde bilgisayardan bağımsız olarak birbirleriyle haberleşebilirler. Ben uygulamada kolaylık olması açısından verileri bilgisayar üzerinden gönderdim.

Ara yüz programı comport üzerinden ana birime bağlanır. Program üzerinde bulunan düğmeler sayesinde kontrol birimi üzerinde ki yeşil ve kırmızı led yakılıp söndürülebilir. Ayrıca kontrol birimi tarafından gönderilen veriler program üzerindeki metin kutusunda görüntülenir.




Ana (Base) birim

Ana birim arayüz progr******* uart aracılığı ile aldığı verileri kablosuz olarak kontrol birimine iletir. Normal durumda ana birimde bulunan denetleyici uyku modundadır. Bilgisayardan yada kontrol biriminden bir veri geldiğinde denetleyici uyanarak çalışmasına devam eder.
Kontrol (Remote) birimi

Kontrol birimi ana birim tarafından aldığı veriye göre üzerinde bulunan kırmızı ve yeşil ledin durumlarını kontrol eder. Ayrıca üzerinde bulunan SW1 butonuna basıldığında ana birime deneme amaçlı “Merhaba Ben Remote 03(xx) ” yazısını gönderir. Burada xx kısmı yazının kaçıncı kez gönderildiğini gösterir. Normal şartlarda kontrol birimi uyku modundadır. Ana birimden veri alınması durumunda yada SW1 butonuna basılması ile kesme oluşturularak uyku modundan çıkar işlemine devam eder.

Görüldüğü üzere hem ana birim hem de kontrol birimi veri haberleşmesi olmadığında LPM4 modundadır. Yani tüm saat kaynakları ve işlemci kapalıdır. LPM4 modunda tüm saat kaynakları ve işlemci kapalı olduğundan denetleyici çok düşük güç tüketir. Bu sayede pil destekli uygulamalarınızı daha uzun süre çalıştırabilirsiniz. Bizim uygulamamızda da kontrol birimi pil ile çalıştığından bu özellik önemlidir!

Kod:
/************************************************** **************
* İsim : RF2500 Kablosuz iletişim uygulaması *
* Yazar : Erhan YILMAZ *
* E-posta : erhan_yilmazz@hotmail.com *
* Tarih : 15.08.2011 *
* Sürüm : 1.0 *
************************************************** **************/

//#define BASE Bu satır Base olarak derlemek için aktif Remote olarak derlemek için pasif yapılmalı
#include "include.h"

extern char paTable[];
extern char paTableLen;

char txBuffer[30];
char rxBuffer[30];
char sayac = 0;
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
/* configure internal digitally controlled oscillator */
DCOCTL = CALDCO_8MHZ;//BSP_CONFIG_MSP430_DCOCTL;
BCSCTL1 = CALBC1_8MHZ;//BSP_CONFIG_MSP430_BCSCTL1;
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
TI_CC_SPISetup(); // Initialize SPI port

TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
writeRFSettings(); // Write RF settings to config reg
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE

// Configure ports -- switch inputs, LEDs, GDO0 to RX packet info from CCxxxx
#ifndef BASE
//Remote kısmı için RF2500 üzerindeki buton kesme oluşturacak şekilde ayarlanıyor.
TI_CC_SW_PxIES = TI_CC_SW1; // Int on falling edge
TI_CC_SW_PxIFG &= ~(TI_CC_SW1); // Clr flags
TI_CC_SW_PxIE = TI_CC_SW1; // Activate enables
TI_CC_SW_PxOUT |= TI_CC_SW1 ;
TI_CC_SW_PxREN |= TI_CC_SW1 ;
#endif
//LEDs SETUP
TI_CC_LED1_PORT |= TI_CC_LED1_BIT;
TI_CC_LED1_DDR |= TI_CC_LED1_BIT;
TI_CC_LED2_PORT |= TI_CC_LED2_BIT;
TI_CC_LED2_DDR |= TI_CC_LED2_BIT;
TI_CC_Wait(4000);
TI_CC_LED1_PORT &= ~TI_CC_LED1_BIT;
TI_CC_LED2_PORT &= ~TI_CC_LED2_BIT;
//GD0 SETUP
//GDO pini düşen kenarda(Paket alındığında) kesme oluşturacak şekilde ayarlanıyor.
TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN; // Int on failing edge (end of pkt)
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag
TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN; // Enable int on end of packet
TI_CC_GDO0_PxSEL &= ~TI_CC_GDO0_PIN;

#ifdef BASE
halUARTSetup(); //Base aygıt için uart'ı kur.
#endif
TI_CC_SPIStrobe(TI_CCxxx0_SRX); // Initialize CCxxxx in RX mode.
// When a pkt is received, it will
// signal on GDO0 and wake CPU
#ifdef BASE
TI_CC_SPIWriteReg(TI_CCxxx0_ADDR, 0x43); // Base aygıt addres.
#else
TI_CC_SPIWriteReg(TI_CCxxx0_ADDR, 0x03); //Remote aygıt addres.
#endif
_BIS_SR(LPM4_bits + GIE); // LPM4 moduna gir kesmeleri aç
}

#ifdef BASE
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI_UART_0_RX_ISR(void)
{if(IFG2 & UCA0RXIFG){
if (P1OUT & 0x01) P1OUT &= ~0x01; else P1OUT |= 0x01;
TI_CC_Wait(3000);
// Build packet
//Paketi oluştur.
txBuffer[0] = 2; // Paket uzunuluğu (not inc. len byte)
txBuffer[1] = 0x03; // Paket addresi
txBuffer[2]= UCA0RXBUF;
RFSendPacket(txBuffer, 3); // Paketi gönder.
} }
#else
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
unsigned int i;
const char yazi[] = "Merhaba Ben Remote 03(xx) ";

if(P1IFG&TI_CC_SW1) // Butona basıldı mı?
{
TI_CC_Wait(3000);
// Build packet
//Paketi oluştur.
txBuffer[0] = 27; // Paket uzunluğu (not inc. len byte)
txBuffer[1] = 0x43; // Paket addresi
for(i=0;i99) sayac=0;
RFSendPacket(txBuffer, 28); // Paketi gönder.
}

P1IFG &= ~(TI_CC_SW1); // Kesme bayrağını temizle
}
#endif

#ifndef BASE
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
char len;
if(P2IFG&TI_CC_GDO0_PIN) // Paket alındı mı?
{
if (RFReceivePacket(rxBuffer,&len)) //Alınan paketteki veriye göre ledlerin durumu düzenlenir.
{
if (rxBuffer[1] == '1') //Gönderilen veri '1' ise kırmızı LED'i yak.
P1OUT |= 0x01;
else if (rxBuffer[1] == '2') //Gönderilen veri '2' ise kırmızı LED'i söndür.
P1OUT |= 0x02;
else if (rxBuffer[1] == '3') //Gönderilen veri '3' ise yeşil LED'i yak.
P1OUT &= ~0x01;
else if (rxBuffer[1] == '4') //Gönderilen veri '4' ise yeşil LED'i söndür.
P1OUT &= ~0x02;
else if (rxBuffer[1] == '5') //Gönderilen veri '5' ise her iki LED'i yak.
{P1OUT |= 0x01; P1OUT |= 0x02;}
else if (rxBuffer[1] == '6') //Gönderilen veri '6' ise her iki LED'i söndür.
{P1OUT &= ~0x01; P1OUT &= ~0x02;}
}
P2IFG &= ~(TI_CC_GDO0_PIN); // Kesme bayrağını temizle
}
}
#else
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
char len;

if(P2IFG&TI_CC_GDO0_PIN) // paket alındı mı?
{
if (RFReceivePacket(rxBuffer,&len)) // Alınan paket uart üzerinden bilgisayara gönderilir.
{
if (P1OUT & 0x02) P1OUT &= ~0x02; else P1OUT |= 0x02;
blastString(rxBuffer+1,len-1);
}
P2IFG &= ~(TI_CC_GDO0_PIN); // Kesme bayrağını temizle
}

}
#endif
Görüldüğü gibi uygulama da denetleyici kısmında tek bir program bulunmaktadır. Program hem kontrol birimi hem de ana birim için kullanılabilir. Ana birim için kullanmak için programın başına “#define BASE” ifadesini ekleyip derlemek yeterlidir. Bu sayede program ana birim için derlenecektir.

Programa hiçbir ekleme yapılmadan derlendiğinde ise program kontrol birimi için derlenir. Bu sayede proje kalabalığı olmadan IAR IDE’si üzerinde tek bir proje oluşturarak hem ana birim hem de kontrol birimi programlanabilir.





Ana birim ile kontrol birimi sağlıklı bir şekilde haberleşmektedir. Target boardlar üzerinde bulunanan CC2500 tümdevresi gerçekten kaliteli bir tümdevredir. Uygulamanın çalışma resminden de görüldüğü gibi kontrol birimi tarafından gönderilen 43 paket veri ana birim tarafından herhangi bir kayıp olmadan sorunsuz bir şekilde alınmıştır. Kit ile yaptığım denemelerde sadece bir kez veri kaybına denk geldim. Onun haricinde target boardlar sorunsuz bir şekilde haberleşmektedir.

Uygulamanın kodları IAR IDE üzerinde derlenmiştir.
__________________
İyiyim" desem yalan olur; "Kötüyüm" desem inancıma dokunur..
En güzeli, şükre vurayım dilimi;
Belki o zaman kalbim kurtulur..



« Önceki Konu Sonraki Konu »

Şu an bu konuyu okuyan kişi sayısı: 1 (0 üye ve 1 misafir)
 
Benzer Konular
Konu
Konuyu Başlatan
Forum
Cevaplar
Son Mesaj
MaxCadY
Akıl Küpü
130
29 Kasım 2017 11:52
Onurcan
Marmara Bölgesi
0
31 Ocak 2013 03:04
mαsαl
Deyimler sözlüğü
0
16 Ağustos 2012 00:28
Külkedisi
İlaç Yan Etkileri
0
02 Şubat 2012 00:30
Ajan
Şarkı Sözü Çevirileri
0
05 Ekim 2011 19:06