04- LED yak söndür - ilk proje

04- LED yak söndür – ilk proje

Merhaba sevgili okuyucu.

Genel bilgi edindik ve gerekli yazılımların kurduk. Minimum devremizi de belirledik. Şimdi ilk uygulamamıza başlamaya hazırız.

LED yakıp söndürme 🙂

Aslında PIC eğitiminin en önemli konusudur. O kadar önemlidir ki o LED in yanıp yanmaması elektronik hayatını etkiler kimilerin. Ben “o” LED i bir kez yakana kadar birkaç gün boyunca kaç saatimi harcamıştım bilemezsiniz. Bunun sebebi ise “eksik bilgi”. Neyse ki benim öğrendiğim ve mantık yürüttüğüm her şeyi bu blogda paylaşacağım ki “siz” PIC programlama öğrenmek isteyenler benim takıldığım noktalarda takılmayın. Ne kadar klişe bir laf olsa da “bilgi paylaştıkça çoğalır”. Bu bilgi eksikliği olmadan bu projeyi en iyi şekilde tamamlayacağız. Bunun için önceki 3 bölüme iyi hakim olmanızı tavsiye ederim.

MPLAB X de proje oluşturma

01pic01

Programı açtığımızda böyle bir ekran karşılıyor bizi.

01pic02

Yeni proje oluşturmak için File > New Project yoluna gidiyoruz.

01pic03

Categori olarak Microchip Embedded, proje olarak da Standalone Project i seçip ileri (Next) diyoruz.

01pic04

Device kısmından PIC imizin ismini seçiyoruz. Bu proje için 16F877A kullanıyoruz.

01pic05

Donanım aracı olarak bir şey kullanmayacağımızdan hangisini seçersek seçelim farketmiyor. İleri ile geçiyoruz.

01pic06

Compiler bölümünde XC8 i seçmeliyiz. Buradan görüldüğü gibi mpasm compiler ı ile birlikte ASM dilinde de yazabiliyoruz programı. Bu MPLAB üzerinde kurulu geliyor. Biz XC8 i kullanacağız bu eğitimde. İhtiyaç olursa XC8 içinde ASM kodlarını da kullanabileceğimizi belirteyim.

01pic07

Project Name kısmına projemizin ismini giriyoruz. Konumu kendisi öntanımlı olarak belirliyor. İstersek konumunu bu sayfadan değiştirebiliriz. Encoding kısmını ISO-8859-9 yapmanızı öneriyorum. Bu şekilde kodlar içine açıklama olarak yazılan türkçe karakterlerle ilgili sorunumuz olmaz. İsterseniz bu ayarı ayarlardan öntanımlı olarak belirleyebilirsiniz.

01pic08

Projeyi oluşturduğumuzda böyle bir ekran ile karşılaşıyoruz. Sol tarafta projemizin altında ilgili dosyaları yerleştireceğimiz klasörler yer alıyor. Bu arada programı açtığımızda açılan Start Page ve MPLAB X Store sekmelerini karmaşayı önlemek adına kapatabiliriz.

01pic09

Biz ilk olarak bir main.c dosyası oluşturacağız. Ana dosyamız bu olacak. Bunun için Source Files klasörüne sağ tıklayıp New > main.c… yolunu seçiyoruz.

01pic10

Dosya ismi newmain olarak karşımıza çıkacak ama karışıklık olmaması için bunu main yapmanızı tavsiye ederim. Finish diyerek projemize main.c dosyamızı oluşturmuş oluyoruz.

01pic11

Karşımıza gelecek ekran şu şekilde. Solda görüldüğü gibi Source Files klasöründe main.c dosyası belirdi. Ben kodların en üstünde yer alan ve tarih ve yazar bilgilernin olduğu bölümü silmeyi tercih ettim.

Projemizi oluşturduk. Şimdi gelelim hazırlık safhasına.

Configuration Bits – Ayar Bitleri

Configuration bitleri Türkçe olarak “sigorta” olarak kullanılsa da ben tercih etmiyorum. Bu ayarlar PIC imizin çalışma durumunu ve bazı güç ayarlarını içeriyor. 16F877A için 8 ayar bulunmakta. Bu PIC e göre değişmektedir. Datasheet in 144. sayfasındaki CONFIGURATION WORD bölümünde yer almaktadır.

  • FOSC: Osilatör (saat frekansı) seçme biti
  • WDTE: Watchdog Timer biti
  • PWRTE: Power-up Timer biti
  • BOREN: Gerilim Düşümünde Reset biti
  • LVP: Düşük Gerilimde Programlama biti
  • CPD: EEPROM Hafızası Kod Koruma biti
  • WRT: Program Hafızası Yazma Koruma biti
  • CP: Program Hafızası Kod Koruma biti

FOSC

Osilatör seçme bitidir. Hangi tip ve hangi değerde osilatör kullanacağımızı burada belirtiriz. Datasheet sayfa 146 da gösterildiği gibi 20 MHz kristal osilatör için bu değeri HS girmemiz gerekiyor. Ayrıca bir önceki bölümde 22 pF iki adet kondansatör kullanmıştık. O değerin de buradaki 15-33 pF değerleri arasında seçilerek alındığını da belirtmekte fayda var.

picosc

WDTE

Watchdog Timer biti PIC de yazılımsal veya donanımsal bir sorun olduğunda reset atmasını sağlayan ayardır. Bunu aktif yapmamız bu korumayı sağlayacaktır.

PWRTE

Power-up Timer biti herhangi bir reset durumunda PIC in 72 ms hiçbirşey yapmadan beklemesini sağlar.

BOREN

Gerilim düşümünde reset biti gerilim 4V altına düşüp o seviyede 100 mikrosaniye kalırsa oluşacak resettir.  PIC imiz 4-5.5 V arası çalıştığını bildiğimiz için bu gayet yaralı bir ayardır.

LVP

Düşük gerilimde programlama biti devre kurulu iken düşük gerilimli bir programlayıcı tarafından programlamaya izin verme ayarıdır.

CPD

EEPROM hafızası kod koruma biti EEPROM hafızasındaki dataların okunmaması için yapılan bir ayardır.

WRT

Program hafızası yazma koruma biti programı yazacağımız alana yazma yetklisi verme bitidir. Ne kadarına izin vereceğimiz belirtilir.

CP

Program hafızası kod koruma biti harici bir kaynağın PIC in içindeki kodu okumasına engel için ayarladığımız bittir. Eğer pasif edersek PIC içerisindeki program tekrar okunabilir.

 

Bu ayarları MPLAB da şu şekilde kolayca ayarlayabiliyoruz.

01pic12

Windows > PIC Memory Views > Configuration Bits

01pic13

Şöyle bir ayar tablosu karşımıza çıkacak. Burada FOSC değerini “HS” diğer tüm ayarları “OFF” yapıyoruz ve “Generate Source Code to Out” butonuna tıklıyoruz.

01pic14

Program bizim için konfigürasyon ayarlarını veren kodları oluşturuyor.

01pic15

Bu kodu kopyalayıp main fonksiyonunun hemen öncesine yapıştırıyoruz.

Bir proje nasıl oluşturulur ve konfigürasyon ayarlarını nasıl yapılır bunu gördük. Bu ayarları her projede yapacağımız için detaylıca inceledik. Bu kısım da önceki 3 bölüm gibi ezberlenmesi gereken bir kısımdır. Çünkü bunlardan herhangi birinde yapılacak bir hata bu kısımdan sonra yazacağınız kodların tamamen veya kısmen çalışmamasına neden olabilir. Eğer hata yapıyorsanız veya takılıyorsanız eğitimin başından bu kısmına kadar tekrar göz atın. Buraya hakim olmanız PIC e hakim olmanız, hükmetmeniz demektir. Şimdi sıra geldi asıl programa…

LED Yak Söndür

LED yakmak masaüstü programlamada “Merhaba Dünya” yazmakla eşdeğerdir. Herkes bununla başlar. Biz LED imizi B0 portuna bağlayacağız. Belirlediğimiz portun değerini 1 yani 5V yaparsak ledimize 5V vermiş ve yakmış oluruz. Yazılım kısmına başlayalım. Yazdığımız kodlar main fonksiyonu içerisinde olacak.

Bu kod ile RB0 pinini çıkış olarak tayin ediyoruz. Giriş yaptığımız uygulamayı buton uygulamasında göreceğiz.

Çıkış yaptığımız pini 0 yani 0V yapıyoruz. Bu, LED in sönük olarak başlamasını sağlayacak programdır.

Ayarlarımızı yaptıktan sonra bizim bir döngüye ihtiyacımız var. Çünkü LED in yanıp sönmesinin sürekli olmasını istiyoruz. Bundan sonra yazacağımız kodlar while döngüsü içerisine yazılacaktır.

RB0 pinini 1 yaparak LED i yakıyoruz.

1000 ms yani 1 saniye bekliyoruz.

LED yeniden kapatılıyor.

Yeniden 1 saniye bekleme yapıp while döngüsünü bitiriyoruz.

Bu kodlar ile PIC den güç kesilene kadar LED 1 saniye yanıp 1 saniye sönecek.

Tüm program şu şekilde olacak. Proje ile ilgili tüm belgelere aşağıdaki dosyalar bölümünde ulaşabilirsiniz. Programı yazdık sırada derleme işlemini yapacağız ki PIC e atmamız gereken .hex kodunu oluşturalım.

01pic16

Run > Build Main Project ile derlememizi yapabiliriz.

01pic17

Derlendikten sonra BUILD SUCCESSFULL yazısını aldıysak derleme başarılı demektir. Altındaki satırda da hex dosyamızın nerede oluşturulduğunu görebiliriz.

01pic18

Derleme istatistiklerini de sol alt köşeden görebiliriz.

Şema ve Çizimler

Derlediğimiz programın tüm şema ve breadboard üzerinde gösterimi şu şekilde olacaktır. Önceki bölümde yaptığımız devreye bikaç ilave ile devremizi tamamlıyoruz. PIC 5V verecek. Bu LED in (+) bacağına bağlanacak. (-) bacağı ise toprağa bağlanacak. Fakat eğer sadece bunu yaparsak devrede hiç direnç olmamış olacak. Direnç olmayınca akım sonsuza gitmek isteyecektir. Bu da LED e vermemiz gerekenden fazla akım vererek LED imizi yakmamız demektir. Bu hafif bir yanık kokusuyla beraber LED in ortasında oluşacak siyahlıkla kendini gösterir. Tabi PIC de belirli bir amperaja kadar akım verebilir ki bu yanlış hareket PIC imizi de yakar. O yüzden PIC ile LED arasına veya LED ile toprak arasına en az 220 ohm luk bir dirençle bu akımı istediğimiz değere getirmemiz gerekmektedir. Not olarak 5mm bir LED 20mA akım çeker ve rengine göre 2-3.3 V arasında çalışır. Bu hesaba göre rengi ihmal edersek en az 150 ohm luk direnç koymamız gerekmektedir teorik olarak. Fakat 220 ohm koymak daha güvenli olacaktır. Konusu geçmişken söylemekte fayda var. Hiçbir elektronik alet elektriksel sınır değerlerine bakılmadan direkt olarak elektriğe bağlanmamalıdır. Bağlanmak durumunda kalınsa bile kesinlikle direnç tercih edilmelidir.

01-LedBlink01-LedBlink_şema01-LedBlink_bb

SONUÇ

blink

Programımızı derleyip .hex kodumuzu PIC e yazdırdıktan sonra projemizin başarı ile çalıştığını görebiliyoruz. Proje ile ilgili MPLAB, Fritzing ve Proteus dökümanlarına aşağıdaki linkten ulaşabilirsiniz.

Bir sonraki yazıda görüşmek üzere.