MikroC PIC İle Bir LED’i Yakıp Söndürmek

Bu yazımızdan itibaren sitemizde PIC dersleri de yayınlamaya başlıyoruz. Bilindiği üzere PIC, Türkiye’de AVR tabanlı mikrodenetleyicilerden daha bilindik bir mikrodenetleyici. Liselerde ve üniversitelerde bu mikrodenetleyici mimarisi üzerine dersler verilmekte. Ben de lise eğitimim sırasında 16F serisi PIC mikrodenetleyiciler üzerinde eğitim aldım. Ancak bize eğitimi verilen programlama dili Assembly’di. Ancak C derleyicilerinin gelişmesi ve projelerin kapsamının büyümesi Assembly dilinin kullanımını her geçen gün azalttı. Ben de yeniliklere ayak uydurarak MikroC dilini öğrenmeye karar verdim. Ayrıca artık 16F serisi yerine 18F serisi mikrodenetleyicilerle çalışmaya başladım. Yazacağım yazılarla birlikte bu bilgimi sizlerle paylaşmaya çalışacağım.

Projelerimizde Kullanacağımız Mikrodenetleyici

Program Tanımı :

Program ilk olarak PORTD’nin ilk bitine bağlı olan LED’i yakacaktır. Yarım saniyelik beklemenin sonunda bu LED’i söndürüp PORTD’nin diğer bitine bağlı olan LED’i yakacaktır. Yine yarım saniyelik bekleme sonunda bu LED’i söndürüp ilk duruma dönecektir. Bu işlem sonsuza kadar döngüde devam edecektir.

Kullanılacak Elemanlar :

  • 1 adet PIC18F4550 mikrodenetleyici
  • 1 adet 4Mhz kristal osilatör
  • 2 adet 27pF kondansatör
  • 2 adet LED
  • 2 adet 330 Ω direnç
  • 1 adet 10 kΩ direnç
  • 1 adet buton

Devre Şeması :

Assembly Kodu :

1
2
3
4
5
6
7
8
9
10
11
12
13
void main() {
   trisd = 0; //PORTD'nin tüm pinleri çıkış olarak belirlendi.
   portd = 0; //PORTD'nin pinleri sıfırlandı
   portd.rd0 = 1; //Birinci LED set edildi.
   portd.rd1 = 0; //İkinci LED clear edildi.
   while(1) 
   //Programın sonsuz döngüde çalışmasını sağlayan komut
   {
      delay_ms(500); // 0.5 saniye beklendi
      portd = ~portd; 
      // Bekleme sonucunda bir önceki durumun tersi alındı.
   }
}

Programı yazarken ilk olarak giriş ve çıkışlarımızı belirledik. Bu devremizde herhangi bir giriş olmadığı ve sadece PORTD çıkış olarak kabul edildiği için TRISD’ye 0 yükledik. Daha sonra her ihtimale karşı PORTD’nin bütün pinlerine sıfır verisi yükleyerek PORTD’yi temizledik.

Hazırlık aşamalarını tamamladıktan sonra programın ilk çalışacağı durumu belirlemek için PORTD’nin sıfırıncı bitini SET, birinci bitini CLEAR yaptık. Böylelikle başlangıçta birinci LED’i yanık, ikinci LED’i sönük duruma getirdik. Buradaki önemli detay portların bit numaralandırmalarının sıfırdan başlıyor olmasıdır. Bu unutulmaması gereken bir detaydır.



Bütün tanımlamaları yaptıktan sonra while(1) komutu ile programımızı sonsuz bir döngüye soktuk. Döngü içine yapılması gereken işlemleri adım adım yazdık. While döngüsünü oluşturmadan önce belirdeğimiz LED durumlarını gözlemlemek için programı 500 milisaniye (0.5 saniye) beklettik. Daha sonra birinci LED’i söndürüp ikinci LED’i yakmak için portd = ~portd komutunu kullandık. Bu komut PORTD’ye yüklü olan verilerin değilini alarak (NOT) LED’lerin konum değiştirmesini sağladı. Bu komut kullanılmadan bu devre aşağıdaki gibi programlanabilirdi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
   trisd = 0; //PORTD'nin tüm pinleri çıkış olarak belirlendi.
   portd = 0; //PORTD'nin pinleri sıfırlandı
   while(1) 
   //Programın sonsuz döngüde çalışmasını sağlayan komut
   {
      portd.rd0 = 1; //Birinci LED set edildi.
      portd.rd1 = 0; //İkinci LED clear edildi.
      delay_ms(500); // 0.5 saniye beklendi.
      portd.rd0 = 0; //Birinci LED clear edildi.
      portd.rd1 = 1; //İkinci LED set edildi.
      delay_ms(500); // 0.5 saniye beklendi.     
   }
}

Eğer iki kodu da Proteus ISIS programı yardımıyla simüle ederseniz ikisininde aynı işlemi yaptığını gözleyebilirsiniz.

Ancak kodu Build (İnşa) etmeden önce birkaç işlem gerçekleştirmemiz gerekmektedir. Bunun için öncelikle CTRL + SHIFT + E tuş kombinasyonuyla Edit Project penceresini açacağız. Açılan pencereden ayarlarımızı aşağıdaki görsele benzer şekilde yapacağız. Eğer bu ayarları yapmazsanız kodunuz Proteus simülasyonunda çalışsa bile gerçek hayatta çalışmayacak ya da hatalı çalışacaktır.

Bu ayarlar yapıldıktan sonra CTRL + F9 tuş kombinasyonuyla proje build (inşa) edilebilir. Build sonucunda proje klasörümüze C, ASM ve HEX kodlarımız kaydedilecektir. Mikrodenetleyicininizi HEX koduyla programlayabilir ve yazdığınız kodu deneyebilirsiniz. Gelecek yazılarda görüşmek üzere

Saygılarımızla,

 

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.