Proton Plus İle PIC Programlama

Son güncelleme: 20.05.2010 11:25
  • 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

    noimage

    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

    noimage

    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

    noimage

    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

    noimage

    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ş

    noimage

    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

    noimage

    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.

    noimage

    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.


    Variable = LOOKDOWN Index , [ Constant { , Constantetc } ]


    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.

    noimage

    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

    noimage

    Hazırlayan: Muhittin KAPLAN
#20.05.2010 11:25 0 0 0