PIC Programlamaya Nasıl Başlamalı?
Son güncellenme 9 Ekim 2009, 8 Kasım 2009
Merhaba arkadaşlar!
Bu yazımızda PIC programlamaya başlamak isteyen arkadaşlara yardımcı olmaya çalışacağız. Öncelikle PIC nedir sorusuyla girelim. PIC, Microchip firmasının üretimi olan mikrodenetleyicilerin model ismidir. PIC 18F2550, PIC 18F4550, PIC 16F877, PIC 16F84, PIC 16F628A gibi, bunlar birer entegre ismi. Microchip firmasının PIC mikrodenetleyicileri o kadar yaygın kullanılıyor ki peçete yerine selpak ifadesinin kullanılması gibi PIC denilince akla mikrodenetleyici geliyor. Neden yaygın kullanılıyor derseniz kolay bulunması ve internette ilgili doküman ve projelerin çok olması hemen söyleyebileceğimiz iki sebep. PIC haricinde piyasada farklı yeteneklere sahip mikrodenetleyiciler bulunabilir. Projeye, fiyatlara göre uygun mikrodenetleyici seçimi yapmak gerekir. Mikrodenetleyici seçiminde geliştirme araçlarının lisans ücretleri de dikkat edilmesi gereken bir durumdur. Benim görebildiğim kadarıyla PIC ile uygulama geliştirme biraz pahallı, örneğin ATMEL gibi mikrodenetleyicilerin gelişmiş ve ücretsiz derleyicileri bulunurken PIC için mevcut gelişmiş derleyicilerin bırakın ücretsiz olmasını lisans ücretleri oldukça yüksek. Şu sıralar ben de geç de olsa geliştirme araçlarının ücretsiz olanlarına doğru kaymaya çalışıyorum. Ayrıca kullanmak istediğiniz PIC modeline muadil diğer firmaların daha düşük fiyatlı mikrodenetleyicileri piyasada bulunabiliyor.
Programlama cihazlarının ucuzluğu veya kolay yapılabilmesi de dikkat edilmesi gereken başka bir durum, özetle PIC ile uygulama geliştirelim ama diğer mikrodenetleyicileri de bir kenara bırakmayalım.
PIC le neler yapabiliriz?
Bu soruya tam bir cevap vermek veya PIC le yapılabilecek uygulamalara bir sınır koymak oldukça zor, elektronik tecrübeniz arttıkça verebileceğiniz cevaplar da artacaktır. Ancak basitçe; mikrodenetleyiciler bizim için karar verirler, ne zaman ne yapması gerektiğini program aracılığıyla söylersiniz ve PIC bunu sizin için yapar. Örn: PIC e ne zaman hangi ledleri yakacağını söylerseniz led panelde kayan yazı yapabilirsiniz veya tuş takımından girilen şifrenin doğruluk kontrolünü yapmasını isterseniz röle yardımıyla şifreli kapı yapabilirsiniz. Çok basit kalan, belki de komik duran iki örnek 🙂
Genel olarak PIC li bir sistem ne yapar?
Her şeyden önce PIC li bir sistem bir bilgisayar sistemidir, programcı tarafından yapacağı uygulamaya uygun olarak geliştirilmiş ve PIC in içine yüklenmiş bir yazılım vardır ve bu yazılım icra edilir. İçinde yazılımı olmayan bir PIC hiçbir işe yaramaz, açılmayan bir bilgisayar gibi. PIC in çalışması için yazılımın haricinde gereken 2 temel donanım şartı vardır, besleme gerilimi ve osilatör. Aslında saydığımız bu üç unsur (yazılım, besleme, osilatör) tüm bilgisayar sistemlerinin olmazsa olmazıdır.
PIC programlamaya hangi model PIC le başlayalım?
Yeni başlayacak arkadaşlar için en uygun modelin 16F628 veya 16F628A( 16F628A nın resmi için buraya tıklayınız) olduğunu düşünüyorum. Bu model PIC lerde dahili osilatör olduğu için harici osilatör bağlamak durumunda kalmayacaksınız. Bu durumda mikrodenetleyicimizi çalıştırmak için sadece VDD ucuna +5V ve VSS ucunu toprağa bağlamamız yeterli olacaktır. Yani besleme gerilimini vererek ve dahili osilatörü kullanarak(iki donanım şartını sağladık) bu PIC i çalıştırabiliriz.(Tabi ki PIC in içine yazılımı yükledikten sonra)
-Harici osilatör bağlamadık, peki dahili osilatörü nasıl aktif edeceğiz? Bunu PIC nerden bilecek?
–Yazdığınız programda ilgili konfigürasyonu aktif hale getirerek PIC e dahili osilatör kullanmak istediğimizi söylüyoruz. Bu ve benzeri konfigürasyonlar program içerisinde yapılacağı gibi yazdığınız kodun PIC e aktarılmasını sağlayan yazılım aracılığıyla da yapılabilir ama birinci yöntem daha güvenlidir. Bu yazılım ve araçları yazının devamında tanıyacağız.
PIC 16F628 modelinde toplam 18 adet pin bulunur, bunlardan 16 tanesi giriş-çıkış pini olarak kullanılabilir kalan 2 pin ise PIC in çalıştırılmasıyla ilgilidir(Besleme pinleri). Bu 16 giriş-çıkış pinimizden 8 tanesi A portuna 8 tanesi de B portuna ait pinlerdir. Hangi pin nerdedir(kaçıncı bacak), ne işe yarar gibi soruların cevabını PIC i üreten firmanın hazırladığı kataloglardan(datasheet) öğreniyoruz, kataloglar uzun uzadıya anlatıyor her şeyi, güzel de anlatıyor ama biz yeni başlarken -içerisinde pin diagramlarının olduğu- sadece ilk sayfaları kullanacağız. Hatta bu pin diagramını bir defalığına yazdırıp masanızın karşısına asarsanız rahat edersiniz. Örn pin diagramı. Kataloglara ulaşmanın en kolay yolu, aradığınız PIC modelinin ismini google a yazıp “enter”lamak. Ya da üretici firma olan Microchip in sitesinden ulaşabilirsiniz. Örn: PIC16F628 in kataloguna burdan direkt ulaşabilirsiniz. Her model PIC için farklı katalog oluyor.
-Giriş-çıkış pinleriyle ne yapacağız?
–Led yakalım mesela, yanıp sönen led yapalım, bir pini giriş olarak kullanıp düğmeye basıldı mı basılmadı mı anlayıp çıkış yaptığımız başka bir pindeki ledi yakalım. Fena mı? Sadece led mi yakacağız! Hayır tabii ki, yukarıda da söylediğim gibi uygulama dünyası çok geniş. Üstelik her pin aynı değil, bazı pinler daha yetenekli. Olaylarla tanıştıkça bana hak vereceksiniz 🙂 İlk uygulama olarak led yakmak ideal, alışveriş listenize kablo, led, direnç, deney tablası, pil ve regülatör gibi malzemeleri eklemeyi unutmayın böylece PIC i programladıktan sonra deneme yapabileceğiniz bir devre kurabilirsiniz. Ayrıntılı araç-gereç ve malzeme listesine burdan bakabilirsiniz.
(Bu arada hep mikrodenetleyici tabirini kullanıyoruz, mikrodenetleyici ile mikroişlemci terimlerinin farkını hatırlayalım:
mikrodenetleyici = mikroişlemci + bellek + giriş-çıkış birimi(port) + diğer çevresel birimler)
Fiilen PIC programlamaya başlamak için gereken asgari gereçler:
Donanım Olarak:
1) Herhangi bir model PIC Mikrodenetleyicisi
2) PIC Programlama Cihazı (PIC Programlama Devresi=PIC Programlayıcı)
3) Bilgisayar
Yazılım olarak:
4) Derleyici (Seçtiğiniz programlama diline bağlı olarak size bir derleyici(compiler) gerekir)
5) Programlayıcıyla irtibatı kuracak olan yani yazdığınız kodu entegrenize yüklemenizi sağlayan yazılım.(Bu yazılım çoğunlukla programlayıcı cihazla(devreyle) birlikte verilir)
Burada PIC Programlayıcı maddesinden biraz bahsetmek istiyorum:
Seriportu olan bilgisayalar için -ki artık seri port günümüz masaüstü bilgisayarlarında bile pek olmuyor- PIC programlayıcı yapmak oldukça kolay veya 10 TL civarı bir fiyat karşılığında satın alınabilir. Ancak eğer bilgisayarınızda seri portunuz yoksa size bir USB PIC programlayıcı gerekir ki fiyatları 45-80 TL arasında değişen farklı modeller piyasada mevcut. Ben şimdiye kadar K128 model USB programlayıcı kullandım fiyatı bir zamanlar 70 TL idi, sonra 45 TL ye clone PIC KIT2 aldım, ikisinden de memnunum. Siz de kendinize uygun gelen bir USB PIC programlayıcı alarak bu işe başlayabilirsiniz. PIC programlamaya başlarken yaptığım en büyük harcamam bir programlayıcı almak olmuştu.
Bazı USB programlayıcılar ev ortamında üretilebilir(Örn:burdaki arkadaşların yaptığı gibi), sonuçta onlar da birer elektronik devre. Ev üretimi olanların maliyeti satın alınanlardan daha düşük olacaktır ancak verdiğimiz emek ve yaptığımız devrenin çalışmama riski, arızanın aranması gibi durumlara girmek istemeyen arkadaşlar için uygun bir tane satın almak daha doğru olacaktır.
Şimdi internette pek sık duyduğumuz bazı isimleri yukarıda sıraladığımız asgari gereçler listesindeki yerlerine koyalım (terimlerden kafası karışan arkadaşlar için):
ICPROG: 5. maddemizle ilgili; yazdığımız kodları PIC e yüklemek için kullanabileceğimiz aracı yazılımlardan bir tanesidir. Bilgisayarımızda derleme sonucu oluşan .hex uzantılı dosyanın PIC in ROM una aktarılmasını sağlayan alternatif yazılımlardan biridir. PIC programlayıcınızla beraber verilen yazılımı kullanmanız önerilir. Bu bağlantıda IC-PROG ile ilgili bilgiler verilmiş, inceleyebilirsiniz.
PicBasic: 4. maddemizle ilgili, PIC programlama yapabilmek için alternatif programlama dillerinden bir tanesi, bu dille programlamak istiyorsanız PicBasic derleyicisine ihtiyacınız var demektir. PIC Basic Demo Compiler için buraya tıklayabilirsiniz.
Pic C: Yine 4. maddemizle ilgili, PIC C de pic programlamada kullanılabilecek alternatif dillerden birisidir. Aslında kendisi bir dil değil kategoridir, PIC C denilince çeşitli firmalar tarafından geliştirilmiş CCS C, HI-TECH C veya Micro C gibi PIC programlama yapmamızı sağlayan ek kodlar barındıran C dilleri kast edilir. Geçtiğimiz haftalarda(Mart 09) Microchip firması, HI-TECH firmasını satın aldığını duyurdu, bu da tabii HI-TECH C yi rakip PIC C lere göre öne çıkardı. HI-TECH C nin ücretsiz versiyonu(lite) ve kısıtlamalarla ilgili sayfaya buradan gidebilirsiniz.
JAL: PIC programlama dillerinden bir tanesi, en önemli özelliği ücretsiz olması. Türkiye’deki fedakar arkadaşlarımız jalı alıp daha da geliştirerek jalturk adında bir derleyici ortaya koymuşlardır. jalturk derleyicisini bu adresten indirebilirsiniz.
– C dilini (veya Visual Basic) biliyorum, pic programlamada nasıl yardımı olabilir?
–PIC programlama için kullanılan PIC C, PIC Basic gibi dillerde standart C ve Visaul Basic gibi dillerde kullandığınız komutlar kullanılır ama ek olarak PIC donanımıyla alakalı bazı komutlar da vardır. Standart dilleri kullanmış biri olarak sadece bazı yeni fonksiyonları ve biraz PIC konfigürasyon ayarları hakkında bilgi edinerek kullandığınız standart dilin PIC versiyonunda uygulama geliştirmeye başlayabilirsiniz.
Pic Assembly: Her mikrodenetleyicinin bir yazılım dili olmak zorundadır, yoksa mikrodenetleyici çalışmayan bilgisayar gibi olur. Microchip de PIC leri üretirken yazılım dili olarak PIC assembly yi üretmiştir. PIC in anadilidir, mikrodenetleyici ve kendisine has asm(assembly) dili birbirine girmiş iki unsurdur. Aslına bakarsanız assembly haricindeki tüm PIC dilleri bazı yazılım şirketlerinin asm ile program yazım zorluğunu ortadan kaldırma amaçlı alternatifler olarak geliştirilmiştir. Assembly dili bize diğer dillerle karşılaştırılamayacak kadar geniş bir yetki sağlar. Çünkü sistemin kendi dilini kullanıyoruz, C veya Basic gibi bir tercüman kullanmıyoruz. Assembly kullanmanın sağladığı geniş yetkilerin yanında dezavantajları da vardır. En büyük dezavantajı: çok temel komutları kullandığınız için program geliştirme süreci yavaş işler.
Örnek vermezsem olmaz(!) Bir binayı prefabrik gibi hızlıca yapmak var tuğla tuğla yapmak var; yavaş gelişim süreci. Buna karşın duvarda bir sorun olunca ne oluyor bu duvara demek var, sorun şu tuğlada olabilir demek var; sisteme hakimiyet. Umarım anlatabilmişimdir.
Assembly programcıları da çeşitli imkanları kullanarak nispeten hızlanabilirler(makro veya altprogramcıkları saklayarak) ancak olayın genel görüntüsü bu şekildedir.
Hangi dili seçelim derseniz(yani bana sorarsanız)? Ben CCS C ile başladım, epeyce uygulama geliştirdikten sonra Assembly öğrenmeye başladım ve birçok şeyi Assembly ile daha iyi öğrendim. Ben hemen bir şeyler yapmak istiyorum derseniz C, basic gibi yüksek seviyeli dillerden başlayabilirsiniz. Derinlemesine öğreneyim sonra uygulama geliştiririm diyorsanız-ki biraz sabır istiyor- assembly derim.
CCS C nin 30 günlük deneme sürümünü bu bağlantıyı takip ederek temin edebilirsiniz, kısa bir anket doldurmamızı istiyor 😐
Şöyle de bir gerçek var: PIC donanımını iyi tanıyan biri için dil çok fazla fark etmiyor, donanımı iyi tanımanın en güzel yolu assembly ile yazılım geliştirmektir. Donanımı tanıdıktan sonra dillerin herhangi birinde düzgün bir “help” kısmı olmak şartıyla sadece “help” kısmına veya örnek dosyalara bakarak uygulama geliştirmek mümkün. Bu konuda kendinizi geliştirdikçe kullanılan dilin önem derecesini daha iyi anlayacaksınız.
Pic Assembler: Pic assembly kodlarını makine koduna(hex) çeviren yazılım, compiler gibi. Compiler ve assembler in amacı aynıdır(makine kodu) ama “input” dosyaları farklıdır. Güçlü bir hata ayıklama yeteneğine sahip ve ücretsiz olan MPLAB yazılım geliştirme aracını Microchip’in sitesinden indirebilirsiniz. Microchip assembler olan mpasm MPLAB ile birlikte gelmektedir. MPLAB en yalın haliyle asm yazımı-derlenmesi ve hata ayıklama içindir ancak farklı derleyiciler kurduğunuz taktirde (CCS C veya HI-TECH C gibi mesela) bu derleyicilerle uyumlu olarak çalışabilir, hata ayıklama özelliğini kullanabilirsiniz.
Yukarıda saydığımız 5 şarta sahip olduğunuzda PIC programlamak için yapmanız gerekenler sırasıyla şöyle olacaktır.
1) Bilgisayarımızı açar, PIC C Derleyicimizi çalıştırırız(PIC C dillerinden birini kullandığımızı varsayalım). Yapmak istediğimiz uygulamaya ve mikrodenetleyicimize göre kodumuzu yazarız.
2) Kodu derleyip, hex dosyası oluşturduktan sonra hex dosyasını PIC e yükleyecek olan ve yukarıda da asgari listede 5.maddede bahsettiğimiz yazılımı çalıştırırız.
3) Mikrodenetleyicimizi PIC Programlayıcıya yerleştirdiysek yazdığımız kodun hex uzantılı dosyasını bu yazılım aracılığıyla PIC imize yükleyebiliriz ve artık PIC i programlayıcıdan çıkarıp devremizde kullanabiliriz. Bu 3 adımda bilgisayarla ilgili olan kısmı geride bırakmış oluyoruz. Artık PIC i devremizde çalıştırabiliriz.
Ancak tüm bunları sağlamak ve hatasız uygulamalar geliştirmek yeni başlayan arkadaşlar için epeyce zor olacaktır. Bu yüzden en uygun başlama yönteminin simülasyon programlarıyla olduğunu düşünüyorum. Simülasyon programı kullandığımız durumda yukarıdaki listenin donanım bölümündeki 1)”Herhangi bir model PIC Mikrodenetleyicisi”
2)”PIC Programlayıcı” maddelerinden kurtuluyoruz ve daha da önemlisi yanlış bağlantı sonucu parçaların bozulma riskinden veya çalışmayı önleyebilecek donanım hatalarından kurtuluyoruz.
Yazılım çevresinde elektronik simülasyonu yapan bir çok program var ancak PIC simülasyonu yapabilen pek yok. PIC simülasyonu yapan PROTEUS adında gayet güzel bir simülasyon programı var. Bu programın demo versiyonu-şu anda dosyaya ulaşamadım!- işimizi görecektir, firma: labcenter. (PIC simülasyonunu mümkün kılan programların özelliği yazdığınız kodları bu programlar sayesinde bilgisayar ortamında PIC e yükleme ve çalıştırma imkanı vermesidir. )
Bu işlemleri fiilen yapmak istediğimizde 1. PIC i programlamak için bir takım işlemler 2. çalıştırmak için birtakım işlemler yapmak durumundasınız, ancak simülasyon programları sayesinde programlamak için PIC inize sağ tıklayıp derleme sonucu oluşan hex dosyasını kaynak olarak göstermek, çalıştırmak için de simülasyon programınızın çalıştır düğmesine basmak yeterli olacaktır.
PIC programlamak için gereken asgari gereçlerin yeni bir listesini yapmamız gerekirse:
1) Yazacağınız kodları derleyip, hex dosyasına çevirecek derleyici. (Seçeceğiniz dile göre değişir, PIC C Dili, PIC Basic dilleri için derleyiciler internette mevcut)
2) Proteus Simülasyon Programı
olacaktır.
Bu şekilde PIC programlama dünyasına hızlı giriş yapabilirsiniz, bu işlemlere illa da fiilen başlamak istiyorsanız birkaç denemeden sonra yine simülasyon ortamına döneceksiniz çünkü yazdığınız kodları gerçek bir PIC de denemeniz için gereken işlemler sürekli yapıldığında çok can sıkıcı olur, genelde kodumuzdan emin olduğumuzda son işlem olarak gerçek PIC e yükleme yaparız, ha bir aksilik olursa en fazla birkaç defa değiştirip yükleriz. Kod geliştirme işlemini simülasyon üzerinden ilerletiyoruz son aşamada gerçek bir PIC e yüklüyoruz (hazır olduğunu düşündüğümüzde), bu her seviyeden PIC programcısı için böyledir.
NOTLAR:
CCS C ile kodlanmış ve Proteus ile simülasyon yapılmış örnek ‘yanıp sönen led uygulaması’nın dosyaları için buraya tıklayınız.
Yanıp sönen led uygulamasının proteustaki görüntüsü:
Gerçekteki görüntüsü(gerçekte 5V luk gerilimi 7805 regülatör yardımıyla elde ediyoruz, proteus simülasyonda 5V bağlanmasına gerek olmadığından yukarıdaki şemada bu eleman gösterilmedi): Arkadaşlar bu resimlerdeki devreyi ben çalıştırdım. Yani aynen kurarsanız çalışır.
Breadboard’ı henüz tanımamış olan arkadaşlar bu bağlantı dan öğrenebilir.
Yukarıdaki gerçek devrelerde deney tablasının sağ tarafında 9V bulunmaktadır. Eğer devrede 9V kullanılmayacaksa bu 9V un ortalıkta olması pek sağlıklı bir iş değildir. 9V luk gerilimi sadece regülatör girişine bağlamak daha mantıklıdır. Resmi çekerken bu durum aklıma gelmediğinden resim böyle kaldı.
Bir diğer resim ve kısa bir video.
Regülatör kısmında kafası karışan arkadaşlar için:
Kaynağı bağladıktan sonra çıkış 5V mu değil mi diye voltmetrenizle kontrol etmeyi unutmayınız.
Devrelerde “toprak” olarak tabir edilen uç pilimizin veya adaptörümüzün eksi ucu demektir. Bu tabir elektrik mühendisliğinden geçme geleneksel bir tabirdir.
Proteusta yapılmış “Yanıp Sönen Led” uygulamasını izlemek için tıklayınız (Dil olarak CCS C seçildi ve dolayısıyla CCS C Compiler kullanıldı). Videodaki bazı yerleri ne yazık ki net ve anlaşılır çekemedik:) (Link eksik, video youtube.com da)
Programla ilgili partik bilgilere ve dosyalara picproje.org forumlarından ulaşabilirsiniz.
http://www.picproje.org/main/modules.php?name=Forums&file=viewforum&f=44
Arkadaşlar şimdilik bu kadar, yeni başlayacak arkadaşlara yardımcı olmaya çalıştım, umarım faydalı olmuştur. İyi çalışmalar dilerim.
Çok teşekkürler.
bu konuda kendimi geliştirmeyi düşünüyorum yardımıza ihtiyacım olacak bu kesin
çok teşekkürler sayın yönetici çok faydalı bilgiler koymuşsun 🙂
çok yararlı bilgiler sağolun.
bilgiler gerçekten çok faydalı. Ben pic’ e yeni başladım yazdıklarınızı aynen yaptığıma inanıyorum ama bir türlü başaramadım. Neyi eksik yapıyorum bir türlü bulamadım. microcode studio ile kodu yazdım ve derledim daha sonra isis’ de devreyi çizdim hex dosyayı microdenetleyiciye gösterdim hiç sorun çıkmadan similasyonu çalıştırdım. Resimlerdeki devreyi kurdum ama bir türlü çalıştıramadım. yardımcı olursanız sevinirim.
iyi çalışmalar.
microcode studio da yazdığınız kodu buraya yapıştırabilir misiniz? Proteus osilatör ayarına bakmadan çalıştırabilir ama gerçekte ya harici osilatör kullanmalı ya da dahili osilatörü aktif etmelisiniz. Dahiliyi kullanmak isterseniz Fuses ayarında “internal oscillator” aktif etmelisiniz. Fotoğraftaki devrede dahili osilatör aktif. Kolay gelsin.
Microcode studio da yazdığım aşağıda,
TRISA=0
TRISB=255
PORTA=%00000
PORTB=%00000000
basla:
HIGH portb.0
PAUSE 500
LOW portb.0
PAUSE 500
GOTO basla
END
ayrıca şöyle bir problem daha var
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
denetleyici ile ilgili yukarıdaki kodu yazdığımda direk hata alıyorum derleme yapmıyor.
ilginize teşekkürler
iyi geceler.
Ben bu dili bilmiyorum ama aldığınız hata nedir? Fuse değerleri eksiksiz görünüyor, en azından INTRC_OSC_NOCLKOUT ile dahili osilatör aktif edilmiş.
yardımlarınız için teşekkürler
iyi çalışmalar
bilgi için teşekkürler
hocam
ben bu işe ilk kez başlıyorum
pik programlayıcı almayı düşünüyorum internette bir çok model var bu işten anlamadığım için karar veremiyorum. amacım led yönetmek internette bulunan led cube devrelerinden yapmayı istiyorum bu amaca uygun nasıl bir programlayıcı almalıyım
bu konuda görüşlerinizi bekliyorum
saygılarımla
Ben uzun bir süredir PICkit2 programlayıcısını kullanıyorum, size de tavsiye ederim, microchip in kendi ürettiği veya diğer satıcıların ürettiği klonlardan kullanabilirsiniz.
pic programlamaya başlamak için iyi bir akış diyagramı ve algoritma işi yüzde 50 çözer gerisi kodlama ve denetleyici seçimidir.