MSP430 UART MODE denemesi

Merhabalar abidik gubidik işlerle ugrasmaya devam etmekyim :). Uzun zamandır merak ettiğim bir konuydu bu cihazlar nasıl bir birbiryle haberleşiyor diye dusunur dururdum.Bizim insanımıza göre bagla kabloyu gelsın mantıgı ;ama burada işler bu şekilde değil malum

-Universal asynchronous receiver/transmitter  –  (üzerine tıklayınız)

diye bişi varmış.Enine boyuna okuduk sagdan soldan arastırdık e dedim bide uygulma yapmak lazım onun içinde seni seçtim MSP430g2xx famiy device 🙂

Actık User guide tıkladık USART module okuduk da okuduk.Uscı_Ax için blog diygramı cıktı karsımıza buradan hersey acık acık izlenebilmekte ve görunmektedir.Kullanacagımız register, clock frekansının nasıl bölundugu,Tx ve Rx buf lar nasıl bilgi gelir gider vs. burada görünmektedir

Görsel

Dıyagramı inceledikten sonra UART mode da neler yapabiliriz diye yazılmiş

Görsel

Elımızdekıleri toparladıktan sonra yavas yavas kod kısmına nasıl geceriz ona bakalım yıne bu konuda user guıde sagolsun cok yardımcı olsun söyle bir paragraf bulunmakta

Görsel

Uscı modulun initializing ayarları ve karakter formatı anlatılmakta bir veriyi gönderirken dikkat ediceğimiz husular burada belirtilmiş start bit stop bit parity ayarları ,7-8 bit data aktarımı vs.

Bunları okuduktan sonra durup dusunduk bu kodlar nasıl çalışcak onu anlatayım;

-Öncelikle UCA0CTL1 den clock kaynagım

ızı belirliyoruz (UCA0CTL1  de UCSWRST resetleme bitide bulunmaktadır yazılımsal olarak temizlenmezse Uart mod calısmayacaktır)

-BRCLK clock source için baud hızı

mızı belirtiyoruz (N=CLOCK FREQ/ BAUD HIZI) burada ki hata oranı azaltmak ıcın UCA0BR0 …. UCA0BR1  registerlarına degerleri girmeliyiz ki eger hatasız bir iletim saglamak istiyorsak. Bu konuyla ilgili User guide Sayfa: 435 te tablolar verilmiş inceleyebilrisiniz.

-UCA0MCTL registeri ile tam çıkmayan sonuçlarda oluşabilicek hataları düzeltmek için buraya gireriz.Yani yukarıda yaptığımız hesaplar sonucunda UCBRS0+1.2.3…+UCBRS7 bu registera kaydetmeliyiz.Örneğin saat frekansımız 1MHZ ve baud =9600 ise N=1Mhz/9600(baud) =104,16… gibi bir deger gelir, burada ondalıklı kısımın ilk değeri 1’i alırsak modülasyon değerimiz UCA0M

CTL=UCBRS0  olur.

-Yukardaki işlemlerden sonra UCA0CTL1 registerınn 0. biti olan UCSWRST temizlenmelidir.

UCA0CTL1&=~UCSWRST; gibi

-Son olarak ALIM için UCA0RXBUF , GÖNDERME için UCA0TXBUF  registerları ile veri gönderme/alma yapabiliriz.FIFO laırın bos olup olmadığını IFG2  ile 0 ve 1. bitlerini ayarlayarak kontrol edebiliriz.

Dedikten sonra Olusturdugum kaynak kod u sizlerle paylasayım;

#include <msp430.h>

void terminal_yaz(char *bilgi);

void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

BCSCTL1=CALBC1_1MHZ;

DCOCTL=CALDCO_1MHZ;

P1SEL|=0X06; //1.2 VE 1.1 USCI_A0 ICIN SECILDI
P1SEL2|=0X06; //” ” ” ” ” ” ”
P1DIR=0X04; //P1.2 CIKIS TANIMLANDI

//UART AYARLARI

UCA0CTL1=UCSSEL_2; //SMCLK SECILDI
UCA0BR0=104; //1MHZ–>> 9600 BAUD VE N=CLOCK FREKANSI/BAUD HIZI
UCA0BR1=0; // BAUD 9600;

UCA0MCTL=UCBRS1; //MODULASYON UCBRSX=1;
UCA0CTL1&=~UCSWRST;// UCSWRST DE AKTIF EDILIYOR RESETTE KALMAMASI ICIN

_BIS_SR(GIE); //TUM KESMELER AKTIF

while(1)

{
terminal_yaz(“Kaan Kandemir\r\n”);
__delay_cycles(500000);
}

}

void terminal_yaz(char *bilgi)

{
P1OUT|=BIT6;

unsigned int i;

unsigned int boyut=strlen(bilgi); //gönderilecek bilgi boyutu olusturuluyor.
for(i=0;i<boyut;i++)

{
while(!(IFG2 & UCA0TXIFG));
UCA0TXBUF=bilgi[i];

}

}

kaynak kodu muzu verdikten sonra burada ki r

x ve tx bacaklarının nasıl bulundugunu gösteren su resmi inceleyebilrisiniz

Görsel

Uscı Uart mode için datasheet te ayrılan kısmıda asagıdakı resimde inceleyebilrisiniz.

Görsel

Gerekli bilgileri verdikten sonra Kodumuzun Debug edilmiş halinin resmini de paylasayım.

Görsel

20130303_185317

Umarım faydalı olmustur 🙂 Herkese iyi çalısmalar.

8 thoughts on “MSP430 UART MODE denemesi

  1. kaan hocam merhaba sarı ve kırmızı kablolar ile yeşil ve turuncu kablolar birbirlerinin devamı acaba yani rx ve tx p1 ve p2’ye mi bağlı?

  2. Merhabalar ;
    Evet kırmızı kablo turuncunun Sarı ise yeşil kablonun devamı ve p1.1 ve p1.2 e baglılar resimde gördüğünüz üzere.Kolay gelsin iyi çalışmalar.

  3. Çok güzel bir çalışma olmus.Ben 2 saattir stm32f4 te usart ile string ifade göndermeye uğrayıyordum bu yazınızı görunce sizin kodları kırparak bu fonksiyonu yazdım.

    void sent(char *ch )
    {
    unsigned int i;
    unsigned int boyut=strlen(ch);
    i = 0;
    for(i=0;i<boyut;i++)
    {
    USART_SendData(USART2, ch[i]);
    Delay(0xFFF);
    }
    }

    Bu fonksiyonla string ifade gönderebiliyorum ancak benim usart ile integer ifade aslında float sayı göndermem lazım onu nasıl yapabilirim?Printf fonsiyonunu editlemeyi fln deniyim dedim hiç yapamadım.Siz hiç denediniz mi ?

      • void sentint(unsigned short ch )
        {
        USART_SendData(USART2, ch);
        Delay(0xFFF);

        }
        int main()
        { unsigned short y =3;
        sent(y);
        }

        gibisinden bi kod yazınca derleme hatası vermiyor ama çalışmıyord a ?_?

      • msp430 un virtual com port özelliği var stm32f4 de bu biraz daha farklı işliyor. Micro usb baglantısı yapıp gerekli driverları yükledikten sonra sanal port olusturabılıyorsunuz. Yani buradaki gibi tx ve rx bacagına baglantı yaparak olmuyor. TX ve RX i araya ft232 yada max232 koyarak rs232y uzunden usart ile haberleşme yapabilirisiniz.

  4. Merhaba. Ben sim900 ile MSP430g2553 ü haberleştirmeye çalışıyorum. Elimde sim900 EVB var. Arduino ile kolayca SMS gönderebiliyorum. Ama MSP ile bir türlü başaramadım. MSP için yazdığım kodlar Teraterm de doğru çıktı veriyor. Ama bu kodlar bir türlü sim900 için işe yaramadı. Sim900EVB kartında 2 tane çıkış var. Biri direk diğeri ise max3232 üzerinden. MSP kartımda 32KHz kristal takılı. sorunum ne olabilir? Yardımcı olabilir misiniz?

Yorum bırakın