C18 Diliyle Robot Programlama – Kesme (Interrupt) İşlemleri

Kesmelerde temel amaç o anki program akışını durdurup kesmeyi oluşturan duruma özgü kodları çalıştırmak ve kodların çalışması bittikten sonra program akışını kalınan yerden devam ettirmektir. PIC18F4585’te kesmeleri oluşturmak için 2 vektör adresi kullanırız. Bu vektör adresleri mikroişlemcide interrupt geldiği zaman çalıştırılacak kodların bulunduğu bir bölüme referans verir. Bu vektör adreslerinden biri low_vector(düşük öncelikli interruptlar) diğeri ise high_vector(yüksek öncelikli interruptlar)’dür. Low_vector 0x18 adresini, High_vector ise 0x08 adresini gösterir. Programda bu kısımlar aşağıdaki şekilde kodlanır;

#pragma code high_vector=0x08
void high_interrupts (void) {
     _asm GOTO high_ints _endasm
}
#pragma code

Aynı şekilde düşük öncelikli interruptlar için low_vector=0x18 yazılır. Ayrıca _asm _endasm arasında kalan kısıma assembly koduyla referans verilir. Goto komutuyla high_ints denen bir bölgeye gidilir. Bu bölge aşağıdaki şekilde kodlanır;

#pragma interrupt high_ints
void high_ints (void) {

     //Kesme geldiginde calisacak kodlar

}

high_ints veya high_interrupts yerinde kendiniz de isimler belirleyip yazabilirsiniz.

Bir kesmenin oluşup oluşmadığı nasıl anlaşılır? Bunun için ilgili birimle alakalı flag‘in 1 ya da 0 olma durumuna  bakılır.  C18’de  bir  çok  modüle ait register  bulunur.  Bu  register’ların bazıları interruptların enable/disable durumunu ayarlamak için, bazıları interrupt oluştuğunda anlayabilmek için, bazıları kendi modülüne ait işlemleri gerçekleştirmek için kullanılır.

Okumaya devam et

C18 Diliyle Robot Programlama – ADC Okuma

ADC (Analog to Digital Converter) okumanın mantığı elimizde analog halde bulunan voltaj değerlerini ona karşılık gelecek dijital değerlere çevirip işlem yapmaktır. Benim kullandığım    PIC18F4585 mikrodenetleyicisi içerisinde ADC modülü bulunmakta. Bu modülü kullanarak şu an mikrodenetleyicimin üzerinde bulunduğu kartan analog değer okuma işlemini yapacağım.

Kart üzerindeki bağlantıları kontrol ettiğimizde analog sinyal üreteceğimiz birimin mikrodenetleyicinin 2. pinine bağlı olduğunu görüyoruz. Datasheet’te bu pin AN0 girişine karşılık gelmekte.

Amacımız bu pin üzerinden açacağımız bir kanalla ADC fonksiyonlarını kullanarak dijital çıkış değerleri okumak ve bu dijital çıkış değerlerini Adım Büyüklüğü (1 LSB) ile çarparak    analog voltaj değerine karşılık gelen dijital voltaj değerini bulmak.

Okumaya devam et

C18 Diliyle Robot Programlama – Buton Yapma

Genel olarak output mantığı burada da geçerli. Bu sefer bazı portları giriş için (TRIS = 1) bazı portları ise çıkış için (TRIS = 0) ayarlayacağız. Amaç butonlara bağlı pinlerden sinyal (5 volt) geldiğinde ledlere bağlı pinlere sinyal (5 volt) vermek.

Benim kullandığım kart üzerinde butonlar 35,34 ve 33. pinlere bağlanmış durumda. Datasheet’e bakarsak bu pinlerin RB2, RB1 ve RB0 pinleri olduğu görülebilir.

Okumaya devam et

C18 Diliyle Robot Programlama – Led Yakma

Led yakmak için öncelikle ledlerin bağlı bulunduğu mikrodenetleyici bacakları belirlenir.  Benim kullandığım deneme kartında lede giden uçlar PIC18F4585’in 38,37 ve 36. uçları olarak görünüyor. Datasheet’ten PIC18F4585’in pin diyagramlarına bakarsak bu uçların B portunun 3,4 ve 5. çıkışları olduğunu görebiliriz.

Okumaya devam et

PicKit2 ile PIC Programlama

C18 de yazdığımız programı çalıştırabilmek için öncelikle bir mikrodenetleyiciye ihtiyacımız var. Mikrodenetleyiciyi programlamak için PicKit2 cihazından faydalanıyoruz. Bu cihazı programlayacağımız kartın (PIC destekleyen bir kart olacak) programlama uçlarına -ok işaretleri birbirine uyacak şekilde- yerleştirip MplabX IDE’si üzerinde gerekli ayarlamayı yaptıktan sonra aşağıda gösterilen butona basarak mikrodenetleyiciye yazdığımız programı yüklemiş oluyoruz.

Okumaya devam et