TEKNİK YAZI

Tiva Not-5: Tiva LaunchPad, Osilatör Ayarları, IO Kullanımı -2

Son yazımızda en temel uygulama olan led yakıp söndürme uygulaması yaparak IO kullanımının bir kısmının nasıl yapıldığını sizlerle paylaşmıştık. Son olarak LP üzerinde bulunan SW1 butonu ile uygulama yapmaya çalışarak butona basıldığında ledin yanıp sönmesini istemiştik ancak olmamıştı.

Neden olmadı:

Aşağıdaki şemadan da görülebileceği üzere buton direk olarak GND ye bağlı. Bu durumda butona basılmadığında işlemcinin bağlı bulunduğu pine 1 verisi göndermesi için bir adet pull up direnci olması gerekli. Şemada bağlantının nereye ilişkilendirildiğine bakarsak böyle bir direncin olmadığını ve direk olarak butonun işlemcinin pinine bağlı olduğunu görürüz. Durum böyle olunca işlemciye 1 verisi gelmez sürekli olarak 0 verisi bulunduğundan dolayı da butona basılmış gibi kodumuz çalışacaktır.

2013-11-12 08_07_25-5- - Microsoft Word

Çözüm 1: Eğer bir pic mikroişlemci ile çalışıyor olsaydık bu kite bir pullup direnci eklememiz gerekirdi.

2013-11-12 08_07_30-5- - Microsoft Word

Çözüm2:Ancak tivanın güzel özelliklerinden birisi de  IO pinlerini yazılım ile pull up pull down veya open drain şeklinde ayarlayabiliyor olmamız.

 2013-11-12 08_07_33-5- - Microsoft Word

O halde bu ayarı nasıl ve hangi fonksiyon ile yapacağımıza bakalım.

 

 

 2013-11-12 08_07_43-5- - Microsoft Word

 

 

 

Kodumuza bu satırı eklersek son hali bu şekilde olacaktır:

#include <stdint.h>
 
#include <stdbool.h>
 
#include "inc/hw_memmap.h"
 
#include "inc/hw_types.h"
 
#include "driverlib/sysctl.h"
 
#include "driverlib/gpio.h"
 
int x;
 
int main(void)
 
{
 
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
 
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
 
  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
 
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);
 
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
 
  while(1)
 
                {
 
                               x=GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);
 
                 if(x==0)
 
                               {
 
                    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 2);
 
                                               SysCtlDelay(6725000);
 
                                               GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x00);
 
                                               SysCtlDelay(6725000);
 
                               }
 
                }
 
}

Bu yazımız bu kadar kısa olmasın biraz da KEIL ın harika debug özelliklerinden bahsedelim. Keil de direk olarak ti ın LP sini kullanarak bir çok çevre birimini değişkeni rahatlıkla izleyebiliyoruz ve kod yazarken proje geliştirirken hata bulmada oldukça faydalı oluyor. Örneğin yazdığımız bu kodda x değişkenini aynı zamanda kullandığımız F portunu keil de inceleyelim.

Kodumuzu yükledikten sonra sağ üstte bulunan debug butonu ile debug modunu aktif ediyoruz ve run butonu ile debug modunu başlatıyoruz.

Yukarıda toolbarda bulunan menülerden izlemek istediğimiz tüm modları ekranın bir köşesine ekleyebiliriz.

 2013-11-12 08_07_53-5- - Microsoft Word

Resimden de görülebileceği gibi ben sağ alta bir adet watch penceresi ve sağ tarafada F portunun tüm registerlarının izleyebileceğim bir pencere ekledim. Watch penceresine x yazdığımda x değişkeninin anlık olarak değerini görebiliyorum. Sağ en üstte ise F portunun aldığı değerleri görebiliyorum. Butona basıldığında 4. bitin 0 olduğunu ve ilk 4 bite yazdığımız değerin değiştiğini görebilirsiniz.

2013-11-12 07_55_18-C__Users_mcetin.ISBAK_Desktop_Freelance Projeler_Tiva_8x8_Spektrum Analyzer_Trai

Menuleri daha da karıştırarak bir çok özellik olduğunu görebilir bunları projelerinizde çok rahat kullanabilirsiniz. Karıştırmak en güzel öğrenme yöntemlerindendir. Bize de kimse oturup Keil anlatmadı sonuçta.

Bu yazımızdan sonrakilerde ise artık çok daha basit şekilde direk olarak ne yapılması ve nasıl yapılması gerektiği çok daha basit şekilde yazacağız. Çünkü yazma işi gerçekten zor ve çok vakit alıyor. Daha ileri konulara daha çok yazılara ulaşmak için bunu yapmak zorundayız. Basitden kastım örneğin yukardaki gibi pull up ı anlatmadan direk olarak uygulamasını yapacağız. Bu tarz temel konulara hakim olmayanlar zaten ARM işlemcilerden uzak dursunlar. Pic gibi daha temel işlemcilerden başlamaları daha iyi olacaktır.