PIC Programlama – 2: Merhaba PIC16

Selamlar 🙂 Bu gün nihayetinde Merhaba PIC16 yazımı ekleme niyetindeyim. Esasen yazdığım sayfalarca yazıyı browser’ın azizliğinden dolayı kaybettim. Ancak yılmak yok 🙂 Tekrardan yazmaya devam. Sizlerle 07.03.2015 tarihinde paylaşmayı planladığım bu yazımı ne yazık ki ancak paylaşabiliyorum. Bu gecikme için affınıza sığınıyorum ve yılmadan yazmaya devam diyorum.

Bu yazı dizisinde, sevgili dostum Birol Çapa ile üniversite yıllarında birlikte oluşturduğumuz kaynaklardan da faydalanacağım. Bu vesileyle sevgili dostum Birol‘a da teşekkürlerimi iletiyorum.

Efendim bu yazı dizisinin temel amacı, devasa bir okyanus olan gömülü sistemlere, okyanusun ortasından dalmak yerine güzel bir sahilden dalmak. Yani ne demek istiyorum? Derya deniz diye özetleyebileceğimiz bu konuda, uygulama yapabileceğimiz güzel bir başlangıç noktasından balıklama konuya dalmak. Yine çok sayıda ibretlik noktaya değineceğimizi düşünüyorum. Yazılar da yine her zamanki uslüpla olacağından, sizleri de sıkmadan eğlenceli bir yazı dizisi geçireceğimize inanıyorum.

Neden PIC16 sorusunun cevabını esasen bir önceki yazımızda bir miktar vermiştik. Şimdi başka soruların peşinde koşalım!

Neden Mikrokontrolörler?

Efendim gömülü sistemler derya deniz demiştik. Gömülü sistemlerin en yaygın kullanım alanlı alt dalı, mikrokontrolör tabanlı sistemlerdir. Bu dal öyle bir daldır ki, çoğu ağaçtan çok daha okkalıdır. Burada edineceğimiz bilgileri, joker gibi diğer tüm gömülü sistem uygulamalarında uygulayabileceğimizden dolayı, mikrokontrolörleri iyi bilmek, iyi kullanmak çok çok önemlidir. Buna istinaden bu yazı dizisi vesilesiyle hızlıca mevzuya dalmanın faydalı olacağını düşünüyorum.

PIC de, gömülü sistemlerin temel mantığını çok çok güzel şekilde anlayabileceğimiz bir başlangıç noktası. Beğenirsiniz beğenmezsiniz, Arduino var olana kadar en önemli hobi elektroniği argümanlarından birisi PIC idi. Halen daha kullanımı çok yaygın. Ve dostlar bence buradan da öğrenebileceğimiz çok önemli noktalar olabilir. O sebeple hakir görmeyelim 🙂

Neden C?

C dili ile ilgili tonlarca şeyi, Gömülü C yazı dizisinde konuşmuştuk. Mikrokontrolör programlama işlerinde, C/C++’ın yanı sıra, Assembler, basic ve hatta yer yer java dilleri bile kullanılır. C dili bunların hepsinin ağzını burnunu kırar diyeceğimi lütfen düşünmeyiniz bile. C dilini bir kenara atıp diğer dillere çamur atmaya da niyetli değilim.

Yazılımda programlama dilleri amaç değil araçtır. Programcı bir nevi ninja ise, programlama dili de ninjanın silahıdır. Bazen kocaman bir kılıç karşısında, minik bir hançer ya da mınçıka galip gelebilir. Zira kılıç ile bir hareket yapıncaya kadar, bu ufaklıkları 8. hamlesini tamamlayabilir 🙂 Keza savaş uzaktan yapılıyorsa, belki ok ve yay kullanmak daha yeğdir. Neyse, Age of Empires ya da Hitman oynamıyoruz. Ağzımdaki baklayı çıkarayım; bu dillerin her birinin muhakkak ki birtakım avantajları ve dezavantajları bulunmaktadır. Bu diller içerisinden C dilini seçmemizin nedeni, bu dilin en yaygın kullanılan programlama dili olması, gömülü sistemlerin her alanında gücünden pek de bir şey kaybetmeden kullanılabilmesi gibi çok güzel sebepler yatar. Ancak göreceksiniz ki yeri gelecek birden fazla dili beraber de kullanacağız. Benim Assembly kardeşimi hakir görmek, şüphesiz ki davaya ihanet olacaktır 😛

Temel Kaynaklar

Bir mikrokontrolör programlama mevzusu varsa en birinci kaynak, şüphesiz ki o mikrokontrolörün datasheet’i (veri kağıdı) olacaktır. Gömülü sistemlerde bir şeyler yapmayı öğrenmenin büyük bir kısmı veri kağıdı okuyup anlayabilmekten geçer. Bizim PIC16’nın da çeşitlerinin güzel güzel veri kağıtları mevcut. Aslında daha gelişmiş mikrokontrolörlerin datasheet’inde genellikle donanımsal özelliklere yer veriliyor. Bu tip donanımları kullanabilmek için “user guide” olarak da bilinen kullanım kılavuzlarını okumak gerekiyor. Neyseki PIC16F serisi, görece basit bir seri olduğundan veri kağıdı ile paçayı sıyırıyor olacağız. Hemen çok kullanacağımız bazı PIC’lerin veri kağıtlarını paylaşalım.

Efendim, gömülü sistemci olacaksak ne yapıp edip bu dokümanları okuyabilir hale gelmemiz gerekiyor. İngilizce bilmeyen arkadaşlarım da lütfen bu sorunun üstesinden gelmek için Google Translate gibi araçları kullansınlar. Zira bir yerden sonra hep aynı terimler geçtiği için dökümanları anlamak çok çok kolay oluyor.

Veri kağıtlarına ek olarak önemli bir kaynak da, geliştirme ortamının ya da derleyicinin dökümanasyonu oluyor. Ben derleyici dedim ama aslında demek istediğim toolchain. Yani içinde derleyici, bağlayıcı (linker dayı), assembler, türlü türlü kütüphaneler filan bulunan yazılım paketi. Bunun dökümantasyonunu da incelemekte faideler mevcut. Bizimkine, sırası gelince değineceğim.

Kullanılacak Programlar (Kurulumlar)

Yolculuğu kafamızda şöyle kısaca bir çizelim ki, ihtiyacı listeleyebilelim. Bizim öncelikle kodumuzu yazabileceğimiz bir ortama ihtiyacımız var. Bunun adı geliştirme ortamı (IDE). Ardından kodlarımızı anlayacak, derleyecek, link edecek bir yazılım setine ihtiyacımız var. Sonra diyelim ki yazılımımızı yazdık ve executable dosyamızı elde ettik. Bunu PIC’e yazacak bir programlayıcıya, ve programlayabileceğimiz bir donanıma ihtiyacımız var. Veya, programlayıcı + programlanacak donanım yerine simülatör kullanabiliriz 🙂 Özellikle hızlı uygulama ve öğrenme açısından simülatör kullanmak çok mantıklı olabiliyor. Ancak gerçekleme yapmak da şart. Biz tüm bu aşamalara değineceğiz ancak önce kurulumlarımızı tamamlayalım.

  • MPLAB X IDE: PIC için  diye gayet hoş bir IDE mevcut. Ardından bir toolchain’e ihtiyacımız var. Bazı IDE’lerin içinde toolchain hazır olarak geliyor ancak MPLAB söz konusu olunca bu kadar şanslı değiliz. Gerçi MPLAB X, tüm seriler için genelgeçer bir IDE olduğundan, toolchain’in sonradan kurulması da mantıklı 🙂 Ben MPLAB X versiyonu olarak 3.0 beta kurdum. Normal şartlar altında, bir gömülü sistemci asla ama asla beta yazılım kullanmaz. Sağlamclığıa çok aykırıdır. Ancak bu, bilgi paylaşımı amaçlı bir yazılım olduğundan, siz bu yazıyı okuyuncaya kadar 3.0 stabil versiyon da çıkar diyerekten 3.0 beta kurdum. Siz de ücretsiz olarak kurulumu yapabilirsiniz.
  • MPLAB XC8. Neyse bir sonraki aşama olarak 8 bit’lik PIC’ler için olan XC8 toolchain’i kuruyoruz. Efendim eğer 16 bit’lik bir PIC için yazılım geliştirecek olsaydık XC16, 32 bit’lik bir PIC için yazılım geliştirecek olsaydık XC32 kuracaktık ancak suyu bulandırmayalım ve MPLAB X’in üzerine XC8 kuralım. Son versiyon olan, MPLAB® XC8 Compiler v1.34 kurulumunu tamamladım. Siz de en son versiyon hangisi ise, onu kurabilirsiniz. Evaluation sürümü ücretsiz! PRO versiyonu da 60 gün için yine ücretsiz 🙂 XC8’in çiçek gibi de bir dökümantasyonu var. Mutlaka feyizlenelim. Kurulumu yaparken, MPLAB X IDE’yi XC8’i kullanacak şekilde güncelleyin seçeneğini işaretlemeyi unutmayalım 🙂 Esasen ben eskiden toolchain olarak Hitech PIC C kullanırdım. Ama Microchip şurada, artık kullanmayın demiş. Zaten hiç bir şeyin fark etmeyeceğini, bunlara ihtiyacımız bile pek olmadığını anlatacağım. Ama şimdilik önerilen ile devam edip XC8’i kuralım.
  • Proteus ISE:  Bu yazılım da güzel bir simülasyon ortamı. Aslında Proteus’a simülasyon ortamı demek biraz vicdansızlık olur. Zira Proteus ile, devre tasarımı, devre simülasyonu, şematik ve PCB tasarımı da yapılabiliyor. Kendisi çok çok başarılı bir yazılım. Ancak ne yazık ki ücretli. Yine de evaluation versiyonunu kullanabilirsiniz. Ya da internetten proteus kurulumu ile ilgili detaylı bilgileri bulabilirsiniz. Ben 8.10 SP1 versiyonunu kullanıyorum, çok da memnunum 😀 Proteus kurulumunu yaptıktan sonra, eğer proteus kullanmayı bilmiyorsanız google üzerinde proteus derslerine bakıp, proteus kullanımını kabaca öğrenmeniz gerekiyor.

Bunlara ek olarak, donanım bağımsız algoritmaları test etmek amacıyla bir C/C++ IDE’si  kurmakta fayda var. Orwell Dev C++ gayet ufacık tefecik ama işe yarar bir araç.

Kurulumları tamamladıktan sonra, mevzuya dalalım 🙂 Öncelikle, proteus üzerinde programlayabileceğimiz bir PIC ortamı oluşturmamız gerekiyor. İlk örneğimizi PIC16F84A ile yapalım. Proteus’ta “P” tuşuna bastığımızda, place part yani devre elemanı ekleme ekranı açılıyor. Buraya PIC16F84A yazdığınızda, ilgili sembol çıkacak ve çift tıkladığınızda soldaki listeye eklenecektir. Ardından PIC mikrokontrolörü ve diğer gerekli devre elemanlarını eklemeniz mümkün olacak. Proteus derslerini incelediğiniz için burayı kısa kesiyorum ve kurmanız gereken basit devreyi aşağıda sizlerle paylaşıyorum.

PIC16F84A_1

Şimdi akıllara haklı bazı sorular gelebilir. En birincisi, bu devrenin beslemeleri nerede? PIC16F84A üzerine çift tıkladığımızda bir pencere açılır. O penecede sol kısımda “hidden pins” yani gizli pinler yazar. Burada VDD ve VCC pinlerinin gizli olduğunu ve otomatik olarak PIC’in beslendiğini görürüz. Şimdilik bu konu üzerinde çok durmayacağım ancak ileride bunu da açıklayacağım. Şimdilik merak edenler buraya bakabilirler. Proteus burada bizim işimizi kolaylaştırmış ancak gerçek hayatta beslemeyi bağlamazsanız hiç bir şey çalışmayacaktır. Buna ithafen VCC ve GND bacaklarının arasında 2.0V – 5.5V arası bir gerilim olması gerekiyor. Bu bilgiyi nereden öğrendim? Tabi ki datasheet’ten 🙂

Neyse şimdi devam edelim, işlemcinin beslemeleri otomatik yapıldı. PIC16F84A’nın dahili osilatörü olmadığından dışarıdan OSC1 ve OSC2 pinlerine bir XTAL (crystal) osilatör bağlamışız. Buradaki kapasitelerin değerine kadar datasheet’te yazıyor. 22pF da bağlasak olurdu 🙂 Esasen bu pinlerin arasında bir ring osilatör var, XTAL ve kapasitörler bu devreyi tamamlıyor ve osilasyon başlıyor. Burada şimdilik çok detaya girmeyeceğim. Osilatör bir anlamda kalp atışı gibi sinyaller üretir ve mikrodenetleyicinin, bu işarete (saat işareti, clock cycle) senkronize şekilde işlem yapmasını sağlar. Bu kısma parantez değil paragraflar açmak gerekiyor. Onu da ileride açacağım. Ancak şimdi neyse diyelim ve devam edelim.

MCLR diye bir pin var üzerinde de bir çizgi var. Bu pin Reset pini ve üzerindeki çizgi bize, bu pinin “active low” yani “düşük seviyede aktif” olacak şekilde çalıştığını anlatıyor. Bu durumun Türkçe’si şu ki, o pini lojik 0 seviyesine çekerseniz mikrokontrolör reset durumunda kalacaktır. Biz de ne yapmışız, butona basılmadığında o pin lojik 1’de kalacak şekilde yapmışız. Buton’a basıldığında ise mikrokontrolör reset’e çekilecek.

Bizim PIC16F84A yerine PIC16F877A kullanmak istesek bağlantılar nasıl olacaktı? Aşağıdaki gibi, yani aynı olacaktı.

PIC16F877A_1

Neyse biz hemen mevzumuza yani PIC16F84A’ya geri dönelim. Proteus’ta mikrokontrolöre hiç bir şey bağlamasak da mikrokontrolör çalışıyor 😀 Bu sebeple, hızlıca bir led bağlayıp, aşağıdaki devreyi kuralım.

PIC16F84A_2

Hemen ilk kodumuzu da yazalım 🙂 Bunun için MPLAB X’de bir PIC16F84A projesi oluşturmak ve aşağıdaki kodu eklemek gerekiyor.

Bu kodu projemizde derlediğimizde, derleyici .hex uzantılı bir dosya oluşturacak. Şimdi proteus isis’te kurduğumuz devreye dönelim, ve PIC üzerine çıft tıklayıp “Program File” yazan kısma çift tıklayarak, üretilen .hex uzantılı dosyamızı seçelim. “OK” tuşuna basarak çıkalım ve “play” butonuna basarak simülasyonu başlatalım. Led, aşağıdaki gibi yanacak.

PIC16F84A_3

Değerli dostlarım, burada PIC dünyasına merhaba demiş olduk. Mutlaka ki buraya kadar olan kısımda konuşabileceğimiz çok şey var. Ancak tüm bunları diğer yazıya bırakıyorum 🙂 Zira bu yazıyı bu gün bitmeden yayınlamak niyetindeyim. Bir sonraki yazıda bu yaptıklarımızın suyunu çıkaracağız ve ibretler üzerinden gideceğiz 🙂

Buraya kadar okuduğunuz için teşekkürler. Yazıyı beğendiyseniz, faydalanabilecek tanıdıklarınız ile paylaşabilirseniz sevinirim.

Şimdi devam!

Önceki Sayfa   Sonraki Sayfa

6 thoughts on “PIC Programlama – 2: Merhaba PIC16

  1. Sinan

    Özen Bey yazılarınızı ilgi ile takip ediyorum. En değerli bilgi tecrübe ile edinilen bilgidir diye düşünüyorum. Tecrübeleriniz bir çok kişiye bu karanlık ve uzun yolda ışık tutacaktır. Teşekkürler.

    1. Yorumunuz için çok teşekkürler Sinan Bey. Fayda sağladığını duymak benim için de büyük bir mutluluk ve motivasyon kaynağı. Bu aralar yoğun bir dönemden geçiyorum ancak en kısa zamanda yazmaya mutlaka devam edeceğim. Dilerim yazılar faydalı olurlar. Tekrar teşekkürler.

  2. Sinan

    Özen Bey yazılarınızı ilgi ile takip ediyorum. En değerli bilgi tecrübe ile edinilen bilgidir diye düşünüyorum. Tecrübeleriniz bir çok kişiye bu karanlık ve uzun yolda ışık tutacaktır. Teşekkürler.

    1. Yorumunuz için çok teşekkürler Sinan Bey. Fayda sağladığını duymak benim için de büyük bir mutluluk ve motivasyon kaynağı. Bu aralar yoğun bir dönemden geçiyorum ancak en kısa zamanda yazmaya mutlaka devam edeceğim. Dilerim yazılar faydalı olurlar. Tekrar teşekkürler.

  3. Hakan Kuvvetli

    Özen Bey,

    Bir meslektaşınız olarak yaptığınız çalışmalar için çok teşekkür ederim. Umarım motivasyonunuz hep yüksek olurda bizde sizden daha çok paylaşımlar alırız. Kolay gelsin.

    1. Çok teşekkürler Hakan Bey. Teveccühünüz için ben teşekkür ederim. Esasen motivasyonum bu dönemde oldukça yüksek ancak Aralık ayında doktora yeterlilik sınavım olduğundan bu aralar ona odaklanmak durumda kaldım. Sınav biter bitmez eski hızla yazılara devam edeceğim. Umuyorum faydalı çıktılar üretebilirim. Tekrar teşekkür ederim.

Leave a Reply to Özen Özkaya Cancel reply