Stellaris LM3S811 Uygulamalar -1

 

Bu yazımızda Stellaris LM3S811 üzerinde temel uygulamaları gerçekleştireceğiz. 

Bu yazı kapsamında;

Led kontrol edebilme,

LCD ekranı kontrol edebilme uygulamalarını gerçekleştireceğiz.

 

 

NOT: Proje Paylaşımını MCU-TURKEY adlı sitede de yaptığım için mcu-turkey adı geçebilir. Aynı zamanda bu projelerin sponsorudur.

LCD EKRANI KULLANABİLME

Bu uygulama da temel olarak sistem saatini ayarlayacak, ekranı kullanacağımızı cihaza belirtecek ve ardından ekrana istediğimiz yazıyı yazdıracağız.

Sistem saatini belirlemek için; 

SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ)fonksiyonunu kullanacağız.

SYSCTL_SYSDIV_1 parametresi için datasehhet üzerinde araştıma yaptığımızda hem ne anlama geldiğini hemde seçeneklerimizi görebiliriz.

SYSCTL_USE_OSC parametresi, sistem saatini osilatör  saati olarak belirlememize yarıyor. aksi halde çok hızlı olacağı için işlemler, yaptıklarımızı göremeyebiliriz.

SYSCTL_OSC_MAIN parametresi, osilatör kaynağımızın ana osilatör kaynağı olacağını belirliyor. Bir üstteki komut ana osilatör kaynağına göre çalışmaktadır.

SYSCTL_XTAL_6MHZ parametresi, kristalimizin hızını belirliyor. sysctl.h içerisinden diğer seçeneklerimizi de görmek mümkün.

Daha sonra LCD ekran fonksiyonlarını ekliyoruz;

Display96x16x1Init(false); // Bu fonksiyon OLED ekran icin I2C ara yuzunu tanimlamak icin kullanılıyor. Bir bakıma LCD ekranı kullanacağımızı cihaza belirtmiş oluyoruz.

Display96x16x1StringDraw(“Stellaris!”,0,0);// 0,0 noktasina stellaris yaz

Display96x16x1StringDraw(“MCU-TURKEY!”, 0, 1);// 0,1 noktasina yaz

Böylelikle kodumuz bitiyor. Ve çalıştırıyoruz.

[codesyntax lang=”c” title=”main.c”]

#include "lm3s811.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "boards/ek-lm3s811/drivers/display96x16x1.h"

int main()
{
	SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);
	Display96x16x1Init(true);	/*Bu fonksiyon OLED ekran icin I2C ara yuzunu tanimlamak icin kullaniliyor*/	

	Display96x16x1StringDraw("Stellaris!",0,0);// 0,0 noktasina stellaris yaz
	Display96x16x1StringDraw("MCU-TURKEY!", 0, 1);// 0,1 noktasina yaz

	return 0;
}

[/codesyntax]

LED KONTROL UYGULAMASI

Ekrana yazımızı yazdırdıktan sonra şimdi de stellaris üzerinde yer alan status ledini kullanacağız. Öncelkile Şematiklerden status ledin bağlı olduğu pini buluyoruz. PC5 adlı pin olduğunu bulduk.

PORTC üzerinde işlem yapacağımızı anladıktan sonra PORTC üzerindeki GPIO register larının neler olduğuna datasheet üzerinden bakıyoruz.

Daha sonra lm3s811.h üzerinde syntax larının nasıl olduğu kontrol edip kodumuzu yazmaya başlıyoruz. Temel olarak önce PORTC nin kullanılacağını belirtecek ardından PC5 numaralı pini çıkış olarak belirleyecek ve datamızı gireceğiz.

[codesyntax lang=”c” title=”main.c”]

#include "lm3s811.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "boards/ek-lm3s811/drivers/display96x16x1.h"

int main()
{
	volatile unsigned long i= 0;
	SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);
	Display96x16x1Init(true);	/*Bu fonksiyon OLED ekran icin I2C ara yuzunu tanimlamak icin kullaniliyor*/	

	Display96x16x1StringDraw("Stellaris!",0,0);// 0,0 noktasina stellaris yaz
	Display96x16x1StringDraw("MCU-TURKEY!", 0, 1);// 0,1 noktasina yaz

	SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOC;	//PORTC nin kullanilacagini belirliyoruz
        i = SYSCTL_RCGC2_R;			// icindeki de[eri bir yere yazarak aktif hale getrmemiz gerekiyor

	GPIO_PORTC_DIR_R  = 0x20; // pc5 pinini output olarak ayarla

	for(;;)
	{
		GPIO_PORTC_DATA_R =0x20;
		for(i=0;i<100000;i++);
		GPIO_PORTC_DATA_R = ~0x20;
		for(i=0;i<100000;i++);
	}
	return 0;
}

[/codesyntax]

Bu işlemlerden sonra butonumuz sürekli yanıp sönmeye başlayacaktır.

Böylelikle led kontrolü gerçekleştirdik. Bir sonraki yazımızda UART haberleşmesini paylaşacağız.

 

You May Also Like

About the Author: tunayan

Leave a Reply

Your email address will not be published. Required fields are marked *