Proton Plus İle PIC Programlama - PIC Programlama - PIC Programlama Nedir - Proton Plus
Proton Plus, Bu iki kelimenin ne anlama geldiğini biliyorsanız; bu kitapta, diğer kitaplarda bahsedilen elektriğin, elektroniğin ve programlama dillerinin tarihçelerinden bahsetmeyerek, kitabımızın esas konusu olan Proton Plus ile PIC programlamaya doğrudan geçeceğiz (Programı Kullanmaya yönelik işlemleri yeri geldikçe değineceğiz)
Nasıl PC programlamada "Merhaba Dünya" ilk aşama ise, PIC programlamada bir LED yakıp söndürmek ilk aşamadır. Şimdi isterseniz "Merhaba Dünya" diyerek ilk projeye geçelim
Proton Plus ile PIC Programlama Proje 1;
Amaç: Portların Giriş Ve Çıkış Olarak Ayarlayabilmek ve LED yakıp söndürebilmek.
Kullanılan Yeni Komutlar;
Output: Bir Port ya da Portun pin ini Çıkış yapmak İçin kullanılır, Tris kayıtçılarının Yerini Kullanılan Bir Komuttur. Burada Tris Kayıtçılarından Biraz Bahsetmek gerekir. Tris kayıtçıları Portları Yönlendirmek Yani giriş ya da çıkış olarak ayarlamak için kullanılır. Her portun bir Tris kayıtçısı bulunur. Kullandığımız 16F877 de bulunan dört adet portun her birinin bir Tris kaydecisi vardır ve TrisA,TrisB,TrisC,TrisD, TrisE gibi port adıyla sembolize edilirler ve Bu Kayıtcılara eğer "0" atanırsa "Çıkış" olarak "1" Atanırsa giriş olarak Ayarlanırlar. Aşağıdaki kodlardarda bulunan "Output PORTB" Satırı yerine "TrisB=%00000000" Kullanmamız Sonuç açısından Bir şey değiştirmezdi.
DelayMS: Komut İşlemcinin belirtilen sure kadar beklemesini sağlar. Bu bekleme esnasında işlemci herhengi bir işlem yapmaz. Komut Xtal bildirisinden etkilenmez. Eğer Xtal bildirisi yapılmazsa default olarak Proton Plus 4 mHz e gore işlem yapar.
Örnek;
DelayMS 200 '200 milisaniye bekle
Komutla bağlantılı olarak;
DelayUs ;
Komut istenen sure kadar bekleme yapar. Bu komut mikrosaniye bekleme yapar.
Snooze;
Bu komut kısa süreli olarak LowPower Modda bekleme yapar.
Sleep;
Komut, Saniye biriminden LowPower Modda Bekleme yapar
GoTo: Belirtilen Etikete gider. Proton Plus da etiketler: (iki nokta) ile bitmelidir. Bu etiketleri Proton
Plus Ide programının yanda görülen bölümden (Code Explorer) takip edebilir ve hızlıca etikete gidebilirsiniz.
End : Program sonunu belirlemek için kullanılır. Program burada Sonsuz döngüye girer (Stop komutu da aynı işlemi yapar.) Aşağıdaki devreyi Proteus simulasyon programında kurduktan sonra
Aşağıdaki kodları Proton Plus ide programı kod ekranına yazarak ilk programımızı oluşturalım.
Device 16F877 'Proğramlanacak PIC=16F877
XTAL 4 'Osilatör Hızı 4 Mhz
Output PORTB 'PortB çıkış
PORTB=$00 'Portb ye 00 hexadecimal sayısını at.
basla: 'Başla Etiket
PORTB=$01 'PortB ye 01 hex sayısını ay
DelayMS 200 '200 milisaniye bekle
PORTB=$00 'portB ye 00 hex sayısını at
DelayMS 200 '200 milisaniye bekle
GoTo basla 'başla etiketine git
End 'program sonu
Yazılan bu programı derlemek yani PIC için anlamlı hale getirmek için Proton Plus Ide den "Compile Only" Butonuna Basmanız Yada klavyeden "F9" u kullanmanız gerekmektedir.
Yeri gelmişken Proton Plus da kullanılan sayı sistemlerinden biraz bahsedelim. Proton Plus da hexadecimal,decimal ve binary sayı sistemlerini kullanılabiliriz.
PORTB=$10 'PortB ye 10 hexadecimal sayısını ata
PORTB=%00010000 'PortB ye 00010000binary sayısını ata
PORTB=10 'PortB ye 10 decimal sayısını ata
Dikkat ettiyseniz Proton Plus da Hexadecimal Sayılar "$",Binary Sayılar "%" ön ek alırlar. Decimal Sayılar ise herhangi bir ön ek almazlar. Yukarıdaki örneklerde görüldüğü gibi portB ye atanmış olan sayıların hepsi aynı görünmesine rağmen değer olarak birbirinden oldukça farklıdır. Unutulmaması ve dikkat edilmesi gereken husus ise şudur, mümkün olduğunca Hexadecimal sayı sistemini kullanmanızdır.
Şimdi yeni bir proje ile bir sayıcı ile Port yönlendirme işlemine devam edelim.
Proton Plus ile PIC Programlama Proje 2;
Amaç; Port ların Giriş Ve Çıkış Olarak Ayarlayabilmek, For..Next Döngüsü Kurabilmek, Değişken Tanımlaması Yapabilmek
Kullanılan Yeni Komutlar;
Dim: Herhangi bir BASIC diliyle daha önce program yazmış bir kişi bu bildiriye aşinadır. Yalnız bu bildiriyi ilk kez duymuş olabilirsiniz. Bu bildiri Proton Plus da değişken atamak için kullanılır. Peki, nedir bu "değişken atamak" ? Basitçe açıklayacak olursak; "Programın işleyişi esnasında içerisindeki bilgiyi değiştirebileceğimiz bir alan" olarak açıklanabilinir. Dim bildirisi ile atanan değişkenler, sayıların boyutlarına göre çeşitlilik gösterirler. Bunlar;
Dim Sayi As Bit En temel tanımlamadır. Bu tanımlama ile yapılan değişten 0-1(yada True-False) değerlerinden başka değer alamaz. Mcu nun hafızasında 8 bitlik yer kaplar
Dim Diger as Byte Tanımlama ile yapılan değişken 0-255 decimal (00-FF Hexadecimal )arasında değer alabilir. Hafızada 8 bit (1 byte) lik yer kaplar.
Dim Dongu as Word Yukarıdaki tanımlama 0 ile 65535 arasında decimal (0000-FFFF Hexadecimal) değer alabilir. Bu tanımlama Mcu hafızasında 2 byte lık yer kaplar.
Dim Deger as Dword Bu değişken tanımlaması -2.147.483.648 ile +2.147.483.647 arasında değer alabilir ve hafızada 4 byte lik yer kaplar.
Dim Ondalik as Float Bu tanımlama Ondalık sayıları saklayabilek değişken tanımlama için kullanılır. Örnek verecek olursak Pi sayısını hafızaya atmak için Float türü değişken tanımlamak gerekir. Bu değişken türü hafızada 4 byte lık yer tutar.
Clear: Bu komut Herhangi bir port u, Port pin'ini, değişkenin içeriğini "0" la doldurarak içeriği temizler.
ForNext: Bu komut takımı değişkenlerle beraber kullanılır. "For" ile başlangıcı bildirilen değişkenin "To" ile Sonu bildirilerek "For" ve "Next" arasındaki komutların işletilmesi sağlanır.
Örnek:
Dim Sayi as Byte
For Sayi=10 To 100 step 1
Portb=Sayi
Next
Byte olarak tanımlanmış sayi değişkeni kullanılarak düzenlenmiş For Next döngüsü için sayi değişkeni 10 dan (For sayi=10) başlayarak 1 er adım aralıklı (step 1) ,100 e kadar (to 100) Portb=sayi işlemini yapacak. Yukardaki kod 90 kez "Portb=Sayi" komutunu işler.
Aşağıdaki devreyi Proteus simulasyon programında kurduktan sonra
Aşağıdaki programı yazarak derleyiniz. Daha sonra Proteus Simulasyon Programında çalıştırınız.
Device 16F877 'Proğramlanacak cihaz 16F877
XTAL 4 'Osilatör Hızı 4 Mhz
Output PORTB 'PortB çıkış
Clear PORTB 'portb yi temizle.
Dim Sayi As Byte 'Sayi adında Byte Büyüklüğünde (8 bit-maksimum '255) bir değişken Tanımla
basla: 'Etiket Başla
For Sayi=0 To 255 '0 dan başlayarak 255 e kadar For ile Next 'arasındaki kodları Çalıştır.256 kez
PORTB=Sayi 'Sayi değişkeninini Portb ye ata
DelayMS 100 '100 ms bekle
Next 'Eğer Sayı 255 den küçükse döngüye devam et
GoTo basla 'Baslaya geri git
End
Proton Plus ile PIC Programlama Proje 3;
Amaç; Port ların Giriş Ve Çıkış Olarak Ayarlayabilmek, If .. Endif komutları ile Kontrol Sağlamak.
Kullanılan Yeni Komutlar;
Input: Komut Portu yada Portun bir pinini Giriş Yapmak için kullanılır. Input Portb.0 ile TrisB.0=1 sonuç olarak aynı işlemi yapmaktadır.(Proje1 Output Komutuna Bakınız)
If Endif: Bu Komut seti en basit karşılaştırma komutudur ve neredeyse tüm programlama dillerinde kullanılır. "if" ile belli bir şart sorgulanır. Proje Kodlarına bakacak olursak (If PORTB.0=1) PortB nin 0 numaralı pini 1 mi değilmi sorgulaması yapılıyor. Eğer Sorgulama sonucu doğruysa "Then" ten Sonraki Komutlar, Yanlışsa "Else" den Sonraki Komutlar Çalıştırılır ve "endif" ile Sorgulamadan Çıkılır
Aşağıdaki Devre üzerinde Yapacağımız bu projede PortB nin 0 numaralı pinini (RB0) giriş
olarak belirttikten sonra bu pini devamlı surette kontrol ediyoruz. Kontrol sonucu eğer "1" sel PortB nin 1 numaralı pinine (RB1) bağlı ledi yakıyor, RB0 eğer "0" sa söndürüyoruz.
Devrenin Kodları Aşağıdaki Gibidir.
Device 16F877 'Proğramlanacak cihaz 16F877
XTAL 4 'Osilatör Hızı 4 Mhz
Output PORTB.1 'PortB nin 1 inci pini çıkış
Input PORTB.0 'portB nin 0 ıncı pini Giriş.
basla: 'Başla Etiket
If PORTB.0=1 Then 'Eğer Portb.0=1 se Aaşağıdaki Kodu Çalıştır Değilse "ELSE" in ltındakini çalıştır
PORTB.1=1
Else 'Portb.0=1 değilse Aşağıdai Kodu Çalıştır.
PORTB.1=0
EndIf 'İf Sonu
GoTo basla 'Baslaya geri git
End 'Program Sonu
Programın çalışmasını proje3 klasörünün içerisindeki proje3.avi video dosyasından izleyebilirsiniz. Bu arada, Proton Plus ile yazılan bu programın Proteus simülasyonuna nasıl tanıtılacağından hiç bahsetmedik bunun için hazırlanan video genel klasörü içerisindeki "KodTanıtma.avi" dosyasında anlatılmıştır.
Proton Plus ile PIC Programlama Proje 4;
Amaç; 7 Segment Display İle Sayıcı Yapımı, LookUp ile Çevrim Tablosu Oluşturmak
Kullanılan Yeni Komutlar; Lookup
Proton Plus için yazılan kodlar aşağıdadır. Kodları Yazıp derleyerek Proteus Simulasyonunda çalıştırabilirsiniz
Device 16F877 'Cihaz 16f877
XTAL 4 'Cristal 4 Mhz
Output PORTD 'PortD Çıkış
Clear PORTD 'Portd Temizle
Dim Index As Byte 'Dongu Adında 1 byte lık Değişken
Basla:
For Index=0 To 9 '0 dan başlayarak 9 a kadar say 'index in değerine gore portd ye 'bilgileri ata
PORTD=LookUp Index ,[$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F]
DelayMS 200 '200Ms bekle
Next 'For-next
GoTo Basla 'Başla etiketine dön
Stop
Burda Yeni kullanılan komut ise LookUp dır. Lookup, değerleri sıralı olarak geri döndürebilen birkomuttur. Yukarıdaki programda kullanımını özetleyecek olursak;index değerine bakarak bu değere denk gelen sıradaki bilgiyi portd ye atmaktadır. Lookup da deger "0" dan başlayarak ilerler.
Yukarıdaki örneği biraz açacak olursak index değeri 0 olduğunda $3F, index değeri 1 olduğunda $06, index değeri 2 olduğunda ise $5B değerini portd ye yükler ve öyle devam eder. Proton Plus da kullanılan ve bu komutla ilgili olarak LookUpL, LookDown, LookDownL komutları vardır. Aşağıda tabloda bu komutların kullanımı kısaca özetlenmiştir.
Variable = LOOKUPL Index , [ Value { , Valueetc } ]
Bu komutun lookUp ile çalışma açısından farkı yoktur. Tek farkı lookup komutunda değerler sadece sayısal olabilir. LookUpL de ise değerler değişken ya da sabit olabilir.
Lookdown komutu çalışması açısından lookup ın tersi işlem yapar. Bir örnekle inceleyecek olursak;
DIM Value as BYTE DIM Result as BYTE Value = 177 Result = 255 Result = LOOKDOWN Value , [75,177,35,1,8,29,245]
Value (177) değeri ile, bilgileri [75,177,35,1,8,29,245] karşlaştırarak hangi sırada ise o sayıyı (1) geri dönerir. Çünki değer 1 sıradadır
Variable = LOOKDOWNL Index , {Operator} [ Value { , Valueetc } ]
Komut Lookdown dan farklı olarak operatörler (=,>,<,>=,<=) kullanılabilinir.
Proton Plus ile PIC Programlama Proje 5;
Amaç; 8×8 LED Matris Kullanımı, Port Tarama Mantığı, Bit Kaydırma Komutları
Kullanılan Yeni Komutlar; <<, Sola kaydırma 8x8 LED matris toplamda 64 adet LED den oluşan bit görüntüleme elemanıdır. Satırlar ve sütunlar olmak üzere girişleri vardır. Aşağıda Kodları ve şeması verilmiş Projenin simulasyonu yaparak 8x8 Matris te "P" imgesini görebilirsiniz.
Device 16F877
XTAL 4
Output PORTD
Output PORTB
Dim Sutun As Byte
Basla:
PORTB=$01
For Sutun=0 To 7
PORTD=LookUp Sutun ,[$FF,$FF,$8f,$77,$77,$00,$00,$FF]
DelayMS 1
PORTB=PORTB << 1
Next
GoTo Basla
End
Programda kullanılan yeni komut Proton Plus da Bitwise işlemleri olarak adlandırılan, komutlardan "<<" operatörüdür ve bir değişkenin, Port içeriğini Belirtilen kadar Sola Kaydırma İşlemi Yapar.">>" operatörü ise bir değişkenin, Port içeriğini Belirtilen kadar Sağa Kaydırma İşlemi Yapar