Sistem Programlama Deney 1 Deney başlamadan önce deney grubu listenizi aşağıdaki dokümana yazınız: https://docs.google.com/spreadsheets/d/1gxplmgkkfwlutcvn9_its7tt rcwuzkqfnwhlpfdodhw/edit?usp=sharing Deneye hazırlık Deneye katılacakların aşağıdaki 3 adımı tamamlamış olmaları gerekmektedir: 1. Sanal Makine Kurulumu 2. Hazır Proje Şablonunun Açılması 3. Projenin Derlenmesi ve Çalıştırılması Deneyde kullanılacak araç gereç ve malzemeler 1. Derste kullandığımız yazılımları içeren en az 1 tane bilgisayar. 2. En az 1 tane Stellaris Launchpad Kit veya Tiva C Launchpad Kit 3. (isteğe bağlı) Elinizde elektrik/elektronik derslerinde kullandığınız multimetre varsa getirebilirsiniz. 4. Aşağıda yazan malzeme listesi Malzeme Listesi: 1. En az 8 tane led (4 farklı renkte ikişer tane) 2. En az 8 tane direnç (200 400 ohm arası olmalıdır.) 3. 10 tane erkek dişi jumper kablo 4. breadboard Deneyin amacı 1. Geliştirme ortamını kullanarak ek 1 deki hazır kodu derleyip kart üzerinde çalıştırmak (25 P) 2. Karta dışarıdan LED bağlanıp, bu LED leri kontrol eden programı yazmak ve kart üzerinde çalıştırmak (25 P) 3. Önceki adımda bağlanılan ledlerin yanıp sönme hızını değiştiren, kesme ile çalışan button kullanımı (25 P) 4. Deneyde yapılan çalışmalarla ilgili rapor hazırlamak (25 P)
Deneyin uygulanması 1. Uygulama 1 a. Sanal makineyi çalıştırıp Eclipse geliştirme ortamını açınız. b. Deneye hazırlık dokümanı 2 de anlatıldığı gibi hazır proje şablonunu açınız c. Ek 1 deki kodu main.c ye yapıştırın d. Deneye hazırlık doküman 3 de anlatıldığı gibi i. projeyi derleyin ii. debug profili oluşturun iii. Kartı sanal makineye aktarın iv. openocd programını terminalde çalıştırın v. debug modunda programı çalıştırın 2. Uygulama 2 a. Ek 2 deki şekildeki gibi LEDleri ve dirençleri board a yerleştiriniz b. Kart ve board arasındaki bağlantı kablolarını aşağıdaki gibi bağlayınız i. kırmızı ledin + bacağının bağlı olduğu kabloyu kartın PD1 portuna ii. yeşil ledin + bacağının bağlı olduğu kabloyu kartın PC4 portuna c. Yeşil ve Kırmızı LED i gecikme kullanarak sırayla yakıp söndüren programı geliştiriniz. d. Programı derleyip debug modunda çalıştırınız. 3. Uygulama 3 a. Başlamadan önce uygulama 2 yi tamamlayınız b. Kartın üzerindeki buttonlardan birini kesme ile çalışacak şekilde ayarlayınız c. LEDlerin yanıp sönme hızını 3 farklı seviye olarak ayarlayınız: i. 1 seviye : yavaş, 2. seviye orta, 3. seviye hızlı d. Program ilk açıldığında 1. seviyede çalışmalıdır. e. Programı buttona basılıp bırakıldığında seviye 1 artacak şekilde güncelleyiniz. 3. seviyedeyken tekrar buttona basıldığında 1. seviyeye dönmelidir. f. Programı derleyip çalıştırınız 4. Rapor a. 1. 2. ve 3. uygulama için şablonu ek 3 de bulunan soruların cevaplarını bir A4 kağıdına elle yazınız.
Ek 1 #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" void init_port_f() { volatile unsigned long delay; SYSCTL_RCGCGPIO_R = 0x00000020; // 1) activate clock for Port F delay = SYSCTL_RCGCGPIO_R; // allow time for clock to start GPIO_PORTF_LOCK_R = 0x4C4F434B; // 2) unlock GPIO Port F GPIO_PORTF_CR_R = 0x1F; // allow changes to PF4-0 // only PF0 needs to be unlocked, other bits can't be locked GPIO_PORTF_AMSEL_R = 0x00; // 3) disable analog on PF GPIO_PORTF_PCTL_R = 0x00000000; // 4) PCTL GPIO on PF4-0 GPIO_PORTF_DIR_R = 0x0E; // 5) PF4,PF0 in, PF3-1 out GPIO_PORTF_AFSEL_R = 0x00; // 6) disable alt funct on PF7-0 GPIO_PORTF_PUR_R = 0x11; // enable pull-up on PF0 and PF4 GPIO_PORTF_DEN_R = 0x1F; // 7) enable digital I/O on PF4-0 int main() { volatile unsigned long delay; init_port_f(); while (1) { GPIO_PORTF_DATA_R = 0b00010; GPIO_PORTF_DATA_R &= ~(0b01000); for (delay = 0; delay < 400000; delay++) /* bos dongu */; GPIO_PORTF_DATA_R &= ~(0b00010); GPIO_PORTF_DATA_R = 0b01000; for (delay = 0; delay < 400000; delay++) /* bos dongu */;
Ek 2 Yeşil kablo: kart üzerinde PC4 e bağlı. board üzerinde yeşil ledin + bacağına bağlı Sarı kablo: kart üzerinde PD1 e bağlı. board üzerinde kırmızı ledin + bacağına bağlı. Siyah kablo: kart üzerinde GND ye bağlı.
Ek 3 1. Uygulama 1 için aşağıdaki soruları açıklayınız: a. LED hangi portta bulunmaktadır? b. LED in bulunduğu portun yönünü ayarlayan register hangisidir? c. Yön belirlemek için kullanılan sayının hangi biti ne anlama gelmektedir? d. LED i yakmak için kullanılan register hangisidir? e. LED i mavi veya yeşil yakmak için kullanılan sayıdaki bitleri açıklayınız. 2. Uygulama 2 için aşağıdaki soruları açıklayınız: a. Yeşil LED ve Kırmızı LED hangi portlardan kontrol edilmektedir? b. Bu portların yönlerini belirleyen registerlar ve yön belirlemek için kullandığınız değerleri bit bit açıklayınız. c. Kırmızı ve Yeşil LED leri yakmak ve söndürmek için yaptığınız işlemi açıklayınız. 3. Uygulama 3 için aşağıdaki soruları açıklayınız: a. Kullandığınız button kesmesini ve kesmenin nasıl ayarlandığını kısaca açıklayınız b. Yanıp sönme hızını değiştirme yöntemini açıklayınız.