2.1. derste neler yaptık ?

derste yaptığımız mplabx ve isis 7.10 çalışmalarının son halini indirmek için >>Tıklayın

12 mart 2014 tarihinde işlediğimiz ders 2. dönemimizin ilk dersi niteliğini taşımakta idi.

Öncesindeki gün yani 11 mart ta tanışma toplantısı yaptık. Dönem içerisinde işleyeceğimiz konuların, önceki dönemde yapmış olduğumuz derslerin devamı niteliği taşıyacağını vurguladım. Yine gün içerisinde 2. dönem ki derslerimize ilk defa katılım yapacak arkadaşları düşünerek hazırlıklı bir başlangıç yapacağımı belirttim. Gün içerisinde, geçtiğimiz dönemin, özetini yazmadığımdan dolayı ilk 2 haftasında nelere değindiğimizi yüzeysel olarak bahsedip, yeni katılacak olan arkadaşların eksik olduğunu düşünebileceği bu konuları kendi çabalarıyla giderebileceklerini dile getirdim. Tabi ki sadece yeni katılanlar için değil geçtiğimiz dönemde ki derslere dahil olan arkadaşlar içinde bu kuralın geçerli olduğunu vurgulayarak, sayfamda paylaştığım 3,4 ve 5. haftaların ders özetlerini okumalarını önerdim. Dersi işleyeceğimiz günü ve saati belirleyebilmek adına fikir alışverişinde bulunduk.

2. dönemin ilk dersini çarşamba günü saat 12:30 da başlattık. b203 dersliği bizim için uygun oldu. dersin sonuna doğru bu dersliğin 15:30 a kadar boş olduğunu ve bu saatten sonra başkalarının dersi olduğunu gördük. Eğer okulda program değişikliğine gidilmezse bu saat aralığında derslerimize bu paralellikte devam edebileceğiz.

İlk dönemde kullandığımız mplab 8.92 arayüzünü ve hi-tech derleyicisini önümüzdeki dönemde kullanmak istemediğimi belirttim. Bunun sebebi ise hi-tech derleyicisinin ciddi bir açığını yakalamış olmamdan kaynaklanıyor. Mplabx arayüzünün, mplab v8 arayüzüne göre daha kullanışlı bir arayüz olduğunu daha öncesinde de belirtmiştim ancak hi-tech derleyicisi ile uyumlu çalışmadığından dolayı mplab v8 arayüzünü tercih etmiştik. Şimdi derleyici de değişikliğe giderek xc8 derleyicisini tercih ettiğimizden dolayı mplabx arayüzünü kullanmamızın da problem olmaması sebebiyle hem arayüz hem derleyicide değişikliğe gitmek istediğimi açıklamış oldum.

ilk yaklaşık 1 saat süre boyunca, tahminimce 8 kadar bilgisayar getiren arkadaşların bilgisayarlarına mplabx, xc8 ve isis 7.10 dan oluşan 3 programın kurulumları ile ilgilendik. Tüm bilgisayarların kurulum işlemleri bitmesinin ardından, mplabx programlarımızı açtık. Proje oluşturma butonuna tıkladıktan sonra açılan pencerede, projeyi oluşturana kadar tüm adımları tek tek açıklayarak proje dosyasını oluşturma işlemini gördük. Standalone project oluşturabileceğimizin yanı sıra, mplab v8 projelerini mplabx e bu pencere üzerinden geçişini yapabileceğimizden bahsettim. Proje oluştururken kullanacağımız denetleyici olarak PIC16f877A seçtiğimizi gördük. Bu aşamada denetleyicimizin bulunduğu aile yi seçerek kendi denetleyicimizi daha kolay bulabileceğimizden bahsettim. Devamında programlayıcı seçimi için pickit2 i seçtik. Sonrasında kullanmak istediğimiz derleyici olarak xc8 seçtik. Bu aşamada şunu da belirttim, eğer biz xc8 derleyici programını kurmasaydık, mplabx de proje oluştururken xc8 seçeneğini görmeyecektik. En son olarak projemize bir isim verip kaydetmek istediğimiz klasörü belirledik. Bu aşamadan sonra projemizi, projects alanında görebildik.

Oluşturduğumuz yeni projeye, new file butonuna tıklayarak, açılan pencerede seçeneklerden c işaretleyerek, diğer seçeneklerden ise c main file i seçip yeni bir c dosyası oluşturarak projemize dahil etmiş olduk. Bu şekilde dahil ettiğimiz c dosyasının içerisine bazı standart yazıların otomatik yerleştirildiğini gördük (main fonksiyonu gibi).

Denetleyici input output çalışma özelliğini katılmıcı arkadaşların ısrarları üzerine tekrar gösterdim. Bunun için ilk olarak TRISX isimleri verilen TRISA,TRISB… değişkenlerinin ortak özelliği olan, fiziksel olarak en fazla 8 li gruplandırılan pinlerin bu değişkenler aracılığı ile giriş ya da çıkış olarak belirtildiğini tekrar hatırladık. PORTX isimleri verilen PORTA,PORTB… değişkenleri ile giriş olan pinlerin seviyeleri kontrol edilebilir yada çıkış olan pinlere 0-5 volt verilebileceğine değindik.

Eklediğimiz c dosyasınıa, #include <xc.h> tanımlamasını ve main içerisine TRISB=0b00000010; ile PORTB=0b00000011; satırını ekledik.

/*
 * File: main.c
 * Author: hasankara
 *
 * Created on 12 Mart 2014 Çar?amba, 13:36
 */

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

void main(void) {

TRISB=0b00000010;
PORTB=0b00000011;

}

Bu c dosyası ile mplabx arayüzü üzerinde xc8 derleyicisini kullanarak ilk örneğimizi görmüş olduk ve hemde input output pinlerin çalışmasını irdeleyebileceğimiz basit bir örnek elde etmiş olduk. Mplabx de çekiç simgesine tıkladığımızda main projemizin derleme işlemi başlatılıyor ve bir kaç saniye içerisinde derleme işlemi tamamlanıyor.

2.1. ders res_1

isis şemasını birlikte çizdik. Tüm aşamalarıyla isis de simülasyon yapabilmeyi gördük. Entegreye çift tıkladığımızda çıkan pencerede, hex dosyasını simülasyona dahil edeceğimiz butona tıkladığımızda, mplabx projesini kaydettiğimiz klasörün içerisinde dist klasörü içerisinde .hex uzantılı dosyamıza tıklayarak, yazdıklarımızı simülasyona dahil edebilmeyi gördük.

Ardından isiste play tuşuna basarak simülasyonu çalıştırdık. Resimde gördüğünüz üzere portb pinlerinin dışındaki tüm pinler gri renkle işaretlenmiş. Bunun anlamının, gri gözüken tüm pinlerin float konumunda olduğunu belirttim. Yani denetleyicide giriş olarak ayarlanan pinler, dışarıdan bağlantı yapılmadığında boştadır ve float gözükür. Boşta olan pinin gerilim seviyesi kestirilemeyeceğinden, bu pinler lojik anlamda her zaman kararsız davranacağını belirttim. Mavi renk lojik 0, kırmızı ise lojik 1 seviyesini işaretlediğini de belirttim. Denetleyici için düşündüğümüzde, yazılımsal olarak çıkış tanımladığımız fiziksel pinler, PORTX değişkeninin içeriğine göre, içeriden dışarıya doğru ya lojik 0 yada lojik 1 seviyesi uygulanacağını gördük.

Yaptığımız uygulamayı simülasyonun ötesinde, çalışma kartımızda görmek üzere aşağıdaki gibi düzenledik.

/*
 * File: main.c
 * Author: hasankara
 *
 * Created on 12 Mart 2014 Çar?amba, 13:36
 */

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF &
 CP_OFF & CPD_OFF & BOREN_OFF & LVP_OFF );

void main(void) {

TRISB=0b00000010;

int a=0;

while(1)
 {

PORTB=11000011;

for(a=9999;a>0;a--);

PORTB=00000010;

for(a=9999;a>0;a--);

}
}

Bu düzenlenmiş halindeki c dosyamızda __CONFIG deyiminin sigorta ayarları olduğunu ve denetleyicinin çalışmasıyla alakalı fiziksel sayılabilecek bazı özelliklerini bu şekilde belirtmemiz gerektiğinden bahsettim. Sonsuz döngü içerisinde for döngüsü ile gecikme işlemini sağladık. Bu sayede, argeino pic plus kartımızın portb 6-7 .i pinlerine bağlı olan 2 led üzerinde kodun nasıl yürütüldüğünü fark edebildik. İlk yazdığım kodda fuse ayarlarını yapmamamıza rağmen simülasyonda çalıştığını görebildik. Çünkü isis bu ayarları göz ardı ederek simülasyon yapmakta. Ama gerçek uygulamada böyle bir toleransımız olmadığından bu ayar satırını eklemek zorunda kalıyoruz. Kısaca hangi ayarları yapabileceğimizden bahsettim, saat darbe kaynağının seçimi ve kod koruma özellikleri gibi.

Mplabx te yazdığımız kodu direkt argeino kartımızın üzerine takılı olan pic16f877a denetleyicisine gönderme işlemini, çekiç işaretinin 2 sağındaki butona tıkladığımızda sırasıyla hem derleme ve derleme başarılı olur ise hemde programlama işlemini gerçekleştiren butona tıklayarak gerçekleştirdik. İşlem tamamlandığında da ledlerin yanıp söndüğünü görebildik.

Mplabx üzerinde proje ayarları için default sekmesine tıklayıp customize ye tıkladığımızda, proje ile ilgili ayarlar yapabildiğimiz pencere açılmakta. Bu pencere üzerinde derleyicimiz le ilgili ayarları yapmak için xc8 compiler yazısına tıkladığımızda, diğer sekmede ki optimizations seçeneiğini bulup, operation mode yi free den pro seçeneğine getiriyoruz. Bunun performans açısından büyük önemi bulunmakta ve free modda iken derleyicinin bir çok özelliği kısıtlanmış olmakta.

Yine aynı pencerede xc8 global options yazısına tıkladığımızda output file format seçeneğini görüntüleyebiliyoruz. Burada coff seçeneğini işaretleyip pencereyi apply dedikten sonra kapatıyoruz. Output file format seçeneği, hex dosyası oluşturulurken, hex in yanında oluşturulacak olan yardımcı dosyaları belirlememize olanak tanır. Bu seçenekte bulunan coff dosyasını seçerek, yazdığımız kodları isis üzerinde hem c hemde asm karşılığında  ayrı ayrı simülasyon yapabilmeyi gördük. İsis te hex kodu simülasyona dahil ettiğimiz pencerede, yine hex le aynı klasör içinde bulunan coff dosyasını, hex yerine seçerek bu özelliği kullanmış olduk. Bu özellik aşağıda ki resimde görüldüğü üzere isisin yardımcı penceresinde görüntülenmekte.

2.1. ders res_2

Bu yardımcı pencereye sağ tıklayıp Dissassembly e tıkladığımızda da c de yazdığımız her bir satırın asm karşılığını aşağıdaki resimdeki gibi görüntüleyebildik.

2.1. ders res_3

Assembly kodlarına bakarak bu örnek için basitçe bir performans hesabını yapabildik. Geçen dönem anlattığım derslerde bahsettiğim mıps (million instructions per second) deyiminden tekrar bahsettim. Kullandığımız denetleyicinin çalışma mimarisi gereği normal asm kodlarının hepsi 4 saykıl da tamamlanırken dallanma kodları ise (goto gibi) 8 saykılda tamamlandığı bilgisiyle yukarıda ki asm kodları üzerinden while(1) döngüsünün bir periyodu için kaç saykıla ihtiyaç duyulduğunun hesabını birlikte yapabildik.

Bir Cevap Yazın

Or

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir