MSP430 Pin Konfigürasyonu

     Genel olarak mikrodenetleyici programlanırken ya ilgili registerler(kaydeciler) okunur ya da ilgili registerlere bir değer yazılır.Tabi ki biz bu değerleri gelişi güzel bir şekilde yazmıyoruz.Bu yazımda sizlere basitce MSP430G2553 (MSP430 geliştirme kartı üzerideki mikrodenetleyici) mikrodenetleyicisinin pin konfigürasyonun nasıl yapılacağını anlatacağım.

    Öncelikle projemizde ne yapacağımıza karar vermeliyiz.Projemiz kart üzerindeki kullanıcı butonuna bastığımız zaman kartın üzerindeki ledi yakan basmadığımız zaman ledi söndüren bir proje olsun.

    Bu proje için  iki adet pin kullanılacak kart üzerinde  bulunan button ve ledin hangi pinlere bağlı olduğunu öğrenmek için MSP430 LaunchPad Development Kit User's Guide olarak arama yapacak olursak konu ile ilgli bir doküman bulabiliriz.İlgili dokümana göre 1. portun 0. pininde user led 1. portun 3. pininde ise user button bulunmaktadır.


    
    Bu bilgiler ışığında biz projemizde P1.0 portunu çıkış pini olarak,P1.3 portunu ise giriş pini olarak ayarlamamız gerekmektedir.Bundan sonra anlatacaklarım biraz C bilgisine birazda mikrodenetleyici programlamaya aşına olmayı gerekmektedir.Lakin korkulacak bir şey yok yazımı dikkatli bir şekilde okuyarak siz de kolay bir şekilde projeyi gerçekleyebiliceksiniz.

    İlgili portlarda hangi pinin ne amaçla kullanıldığını öğrendiğimize göre artık hangi registere ne yazmamız gerektiğini öğrenmemiz gerekecek bunun için arama motorunazaa M430G2553 User's Guide yazıp aratıyoruz.MSP430F2xx,MSP430G2xx Family User's Guide adında bir dokumana ulaşmamız gerekiyor.Dokümanda yazan xx yazan kısımlar eğer mikrodenetleyici MSP430S2 ile başlayan bir aileden ise burada yazanlar onun içinde geçerlidir manasındadır.Eğer farklı bir durumu varsa üretici bu durumu bizimle paylaşır.Bulduğumuz dokümanda Digital I/O kısmını buluyoruz.Bu bölümde pin konfigürasyonlarının nasıl yapılacağı anlatılmaktadır.Gözünüz korkmasın şuan tamamıyla ilgilenmiyoruz sadece küçük bir bölümüyle çalışacağız.

    PxDIR registeri ilgili portun ilgili pinini giriş pini ya da çıkış pini olarak ayarlamızı sağlar.Bu registere 1 yazılırsa ilgili pin output, 0 yazılırsa input olarak ayarlanır.

    P1DIR |= 0x01; şeklindeki yazım sadece 0. pini output olarak ayarlar.Bu yazım hexadecimal şeklindeki yazımdır.Burada yazılan değer aslında 0b00000001 yazmanın arasında hiçbir fark yoktur.Hexadecimal yazım şeklinde Yazılan her bir rakam veya harf 4 bite karşılık gelir.Yazacağımız register 8 bit olduğu için 0x01 şeklinde yazdık. |= operatörlerini kullanarak P1DIR registeri ile 0x01 sayısını veya işlemine tabi tutup daha sonra yine aynı registere yazdık.Veya işleminde 0 değeri etkisiz elemandır.Bu durumda sadece ilgili biti biz bir yaptık.Diğer bitlere dokunmadığımız için kalan pinler tek bir işlem ile input olarak kaldılar.Buraya kadar 0. pini output ve 3. pin ve geriye kalan tüm pinleri input olarak ayarladık.

    Örnek:

    Biz 3. pini çıkış yapmak istersek  _ _ _ _  1_ _ _ şeklinde bir değer yazmamız gerekiyor.Geriye kalan yazılmamış değerler 0 dır.Bu yazım şeklinde ilk 4 bit 0 değerini alır.Diğer kısım Hex olarak 8 şeklindedir.0x08 binary yazımda 1000 değeri hex olarak 8 değerine karşılık gelir.Eğer yazım şeklinizi kafanızda yorumlayamıyorsanız.Windows'un hesap makinesi aracını programlayıcı modda açıp buraya istediğiniz binary değerini hex yazımında görebilirsiniz.








    PxOUT registeri ilgili pinleri lojik 1 olarak ya da lojik 0 olarak sürmemizi sağlar.8 bitlik bir registerdir.Pini lojik 0 yapmak için ilgili bite 0 yazılır lojik 1 yapmak için ilgili pine 1 yazılır.

P1OUT = 0x00 kart üzerinde bulunan ledi söndürür.

P1OUT = 0x01 kart üzerinde bulunan ledi yakar.




       





    P1DIR |=0x01; yazdığımız zaman 1. pin hariç diğer bütün pinleri input olarak ayarladığımız için daha sonra ek bir ayarlama yapmıyoruz.

#include <msp430.h>




void main(void)


{


    WDTCTL = WDTPW | WDTHOLD;       // stop watchdog timer


    P1DIR |= 0x01;                  // 1. portun 0. pini çıkış yapıldı


    P1OUT =  0x00;                  // 1. portun başlangıç değeri 0


    P1REN =  0x00;                  // 1. portun pullup pulldown dirençleri kullanılmayacak


 




    while(1)


    {


        if(P1IN & 0x08)//Pinden okunan değer eğer 1 ise

        {

            P1OUT &=~0x01;//ledi söndür


        }

        else//pinden  okunan değer 0 ise 

        {

            P1OUT |= 0x01;//ledi yak


        }


    }


}


   Bu kodu kartımıza yüklediğimiz zaman kart üzerindeki butuna bastığımızda led yanacak basmadığımız durumda ledimiz sönecektir.

    Burada ki mantığın ters olmasının nedeni,butona basıldığı anda mikrodenetleyiciye lojik 0 değeri basılmadığı anda lojik 1 değeri mikrodenetleyiciye gitmektedir.Buton devre pull up olark bağlanmıştır.Pull up - pull down mevzusununu başka bir yazımda anlatacağım.


    Sağlıcakla...


 



    




Yorumlar

Bu blogdaki popüler yayınlar

ESP32 Debug Mod Kullanımı

ESP32-WROOM AT Komutları Kullanımı

ESP32 IDF Kurulumu ve Kullanımı