Hazırlayan: Muhittin KAPLAN – Proton ile pic programlamaya başlamak isteyenler için çok iyi detaylı bir kaynak olacağı kesin. Örnek devreler ile bolca uygulama bulunuyor komutlar detaylı olarak açıklanıyor. Emeği geçen hazırlayan kişilere teşekkürler.
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.
For…Next: 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 { , Value…etc } ]
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.
Variable = LOOKDOWN Index , [ Constant { , Constant…etc } ]
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 { , Value…etc } ]
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
Kayak yazı picproje forumlarında bulunuyor konu hakkında uygulama videosuda umarım yakında eklenecek gelişmeleri buradan takip edebilirsiniz
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/10/04 Etiketler: kılavuz ders, PIC programlama, proton kılavuz, Proton Plus, proton plus dersleri
selam muhittin hocam yapmış olduğunuz sunumlar güzel @gevv hocamda,bende protonda yeni adım atmaya başladık
bir önerim olucak bu derslerde hep farklı serilerdeki MCU’lardan bahsedecekmisiniz?
örnek 10f.12f.18f?
selamlar
hocam çok teşekkür ederim yanlız bir sorum olacak;benim gibi pic programlamaya başlamayı düşünen ama biraz ürkenler için en basit yol bu verdiğiniz dilmidir?
evet hocam en basit dil budur pic programlamaya başlıcaksan bundan başla
sonra istediğin dile geçersin
@Aykut54
Hocam derslerin Sonuna Doğru (Kısmet Olurda Bitirebilirsem) 18F4550 ile USB HID çalışması planlıyorum.
@Operatör
En Basiti demek biraz zor olur çünki doğrudan şematik den program derleyebilen followcode gibi programlar mevcut. ama diğer dillere göre (Ansi C, Asmbly) daha kolay olduğu söylenebilinir.
Ellerine sağlık Muhittin KAPLAN
Allah razı olsun hocam sizlerin sayesinde bir şeler kapıyoruz sağolun var olun
selamlar arkadaşlar
proton da yeniyim
5-6 bitlik bir bilgi kontrol etmem gerekiyor kontrol edeceğim bitler pcb de dağınık şekilde duruyor eğer sadece portb yi okuyacak olsam işlem kolaydı ama portlar dağınık olarak verildiğinden nasıl yapacağımı bulamadım yardımcı olursanız sevinirim
pbp ile şöyle yapabilirdim
if porta.0=0 and porta.3=0 and portc.1=0 and porte.1=0 then goto prg1
if porta.0=0 and porta.3=0 and portc.1=0 and porte.1=1 then goto prg2
if porta.0=0 and porta.3=0 and portc.1=1 and porte.1=0 then goto prg3
if porta.0=0 and porta.3=0 and portc.1=1 and porte.1=1 then goto prg4
if porta.0=0 and porta.3=1 and portc.1=0 and porte.1=0 then goto prg5
if porta.0=0 and porta.3=1 and portc.1=0 and porte.1=1 then goto prg6
if porta.0=0 and porta.3=1 and portc.1=1 and porte.1=0 then goto prg7
if porta.0=0 and porta.3=1 and portc.1=1 and porte.1=1 then goto prg8
if porta.0=1 and porta.3=0 and portc.1=0 and porte.1=0 then goto prg9
if porta.0=1 and porta.3=0 and portc.1=0 and porte.1=1 then goto prg10
if porta.0=1 and porta.3=0 and portc.1=1 and porte.1=0 then goto prg11
if porta.0=1 and porta.3=0 and portc.1=1 and porte.1=1 then goto prg12
if porta.0=1 and porta.3=1 and portc.1=0 and porte.1=0 then goto prg13
if porta.0=1 and porta.3=1 and portc.1=0 and porte.1=1 then goto prg14
if porta.0=1 and porta.3=1 and portc.1=1 and porte.1=0 then goto prg15
if porta.0=1 and porta.3=1 and portc.1=1 and porte.1=1 then goto prg16
bunu bana proton ile yapabilecek olan arkadaştan yardım istiyorum
saygılar
[email protected]
Muhittin hocam eline sağlık. Daha çok kaynak, döküman lazım hocam. 🙂
devamını sabırsızlıkla bekliyorum.
Muhittin Bey,
Karşılıksız verdiğiniz bu bilgi ve eğitim desteğinizden dolayı size çok teşekkürler, pic Basic Pro ile pic üzerinde ufak tefek bir şeyler yapmaya çalışırkan ETE hocanın desteği halen de yaralanmaktayım ama Proton ile tanışınca gerçekten daha güçlü daha kolay ve hızlı olduğunu gördüm uzunca süredir proton ile devam etmekteyim. Bulabildiğim yegane kaynak proton konusunda siz oldunuz minnettarım. Sizden ricam İstanbul da yaşıyorum proton konusunda kitap internet veya kurs bildiğiniz kaynakları bize bildirebilirseniz emekli birisi olarak zaman zaman ufak tefek işler alıp ek gelir eldedebiyorum. Saygılarımla,
Fatih Bayşu
sayfa ya bakabiliyormusunuz hocam bi konuda destek alacaktım da ..:(