Elektronik / Elektronik Kaynakları/

PICBasic Dersleri PIC Basic Pro ile PIC Programlama 1

Sponsorlu Bağlantılar

Pic Micro işlemciler hakkında kısa bilgi:

Pic mikro işlemciler teknik özellikleri ve kılıfları açısından farklılıklar gösterirler. Her şeyden önce birden fazla bacağa (pin) sahip olan işlemcilerin bacakları giriş veya çıkış olarak çalıştırılabilirler. Özellikleri açısından da bir kere programlanabilenler (C serisi) programları ultraviyole ile silinip yeniden programlanabilenler ve birden fazla silinip programlanabilenler olarak sınıflandırılabilirler. Biz genelde FLASH olarak tarif edilen birden fazla silinip programlanabilen tipler üzerinde çalışacağız.Pic’ler taşıdığı ekstra özellikler açısından da bir kaç kategoriye ayrılırlar. Örnek olarak üzerin de;

1) Analog-Digital Çeviricisi olanlar,
2) Komparatör olanlar,
3) Donanımsal olarak seri haberleşme ünitesi olanlar,
4) HPWM ünitesi olanlar gibi Pic’ler mevcuttur. İleriki bölümlerde bunların kullanımına ait örnekler vereceğiz.

Pic işlemcilerin pinlerinin hem giriş hem de çıkış olarak çalıştırılabildiğinden bahsetmiş idik. Açıklamalarımızla ilgili uygulamalarımıza “Proje” adını vereceğiz ve her projemizin bir numarası olacaktır. Şimdi Pic lerinin organizasyonu işlemlerine kısa bir göz atalım.

Kullanacağımız Pic 16F84A olacak. Bu işlemcinin toplam 18 bacağı vardır.5 nolu bacak(-),ve 14 nolu bacak(+) besleme ,15-16 nolu bacaklar (XTAL) osilatör bacakları ve PortA (0-4 arası 5 adet pin) < 17,18,1,2,3 nolu bacaklar > ve PortB (0-7 arası 8 adet pin) <6,7,8,9,10,11,12,13 nolu bacaklar > olmak üzere toplam 13 adet (Giriş-Çıkış) pin’e sahip bir işlemcidir.

PIC16F84 Pin Bilgileri

pic16f84-pdip-soic-pic-bacak

İlk projemize geçmeden, anlatımda lazım olacak olan BASIC de kullanılan sayı gösterim formatları konusunda biraz bilgi vermek istiyorum. Bildiğiniz gibi kullanacağımız 3 tür sayı formatı vardır. Formatlar ve gösterim şekilleri aşağıda verilmiştir.

1) Desimal Sayılar (10 tabanına göre düzenlenmiş sayılar):direkt kullanılırlar 12 -23 gibi

2) Hexadesimal Sayılar (16 tabanına göre düzenlenmiş sayılar) : başlarına $ işareti koyularak gösterilirler. $1F , $31 gibi

3) Binary Sayılar (2 tabanına göre düzenlenmiş sayılar) : ise başlarına % işareti koyularak gösterilirler. %111000 , %0001 gibi.

Sıklıkla kullandığımız sayı sistemi desimal olduğundan diğer sayıların kolayca anlaşılabilmesi için zaman zaman bu sayıların 10 tabanına çevrilmesi gerekir. Aşağıda bu işlemin nasıl yapıldığını basitçe göreceksiniz. Bu işlemde temel formül; aynı on tabanına göre sayılarda olduğu gibidir. Sağdan sola doğru haneler sayı tabanının katları şeklinde değer alırlar. Yani değişen tek şey taban çarpım değeridir. Örnekle daha iyi anlayacaksınız.

Hexadesimal sayılar : 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F: Örnek sayımız <3F> olsun. 16 tabanlı sayı formatı olduğundan;16′lar hanesi olan 3 sayısı 16 ile çarpılıp F sayısının desimal karşılığı bu sayıya eklenir. Dolayısıyla; 3F = 3 x 16 + 15 = 63 olarak bulunur. Şayet sayı 23F olsa idi sayımız= 2 x 256 + 16 x 3 + 15= 575 olarak bulunacak idi.

Binary sayılar; 0-1 , örnek sayımız %11101101 olsun. Hanelerin taban sayısının katları şeklinde gittiğini biliyoruz. O halde sağdan itibaren ilk sayımız hane değerleri şöyle olacaktır. sayı sırasına göre verir isek 128 – 64 – 32 – 16 – 8 – 4 – 2 – 1 Bu sisteme göre sayımızı desimal değere çevirelim; %11101101: 128×1 + 64×1 + 32×1 + 16×0 + 8×1 + 4×1 + 2×0 + 1= 128+64+32+8+4+1=237 olarak bulunacaktır.

En çok kullanacağımız sayı formatlarından birisi olan Binary sayı formatının kullanım yerine bir örnek vermek bu aşamada iyi olacaktır sanırım. Bir Pic’in B portuna bağlı olan Led lerden 0-3-4-6-ve 7 nolu pinlere bağlı olanları bir seferde yanar hale getirebilmek için porta verilecek değeri desimal olarak hesaplayalım. Bu durumda PortB=%11011001 olacaktır.Desimal değeri = 128+64+16+8+1= 217 olarak bulunur.

İlk projemiz, PIC16F84A işlemcinin Tüm bacaklarını çıkış olarak ayarlamak ve bu çıkışlara bağlanacak LED lerin değişik aralıklar ile yanmasını gösteren bir program olacaktır. Bu arada amaç, Pic lerin bacaklarının nasıl çıkış olarak ayarlandığını öğrenmek olacaktır.

Pic lerde bacakların giriş veya çıkış olarak ayarlanmasını üstlenen bir REGISTER (Türkçe’si YAZMAÇ) vardır. Her bir port için ayrı olan bu registerler A portu için TRISA , B portu için ise TRISB olarak adlandırılır. Tris yazmaçları aslında Pic’in hafızasında 8 bitlik birer hafızadırlar. Buraya yerleştirilen sayının Binary formatındaki şekline bağlı olarak Pic bacaklarını giriş veya çıkış olarak ayarlar.8 bitlik değer sırası ile port’a ait pinleri temsil etmektedir.

Şöyle ki;

A) %00000000, ifadesi 8 bitlik Binary bir sayıdır. Desimal karşılığı 0 (sıfır) dır. Bu değeri herhangi bir TRIS registerine verir isek tüm pinlerin OUTPUT yani çıkış olarak ayarlanacağını ifade eder.

B) Şayet değer %11111111 olur ise tüm bacakların INPUT yani giriş olarak ayarlanacağını ifade eder.

Binary değerin bazılarının sıfır (0) bazılarının bir(1) olması ise bazı pinlerin çıkış bazılarının ise giriş olarak ayarlandığını gösterir. Şimdi açıklamamızı program şeklinde verelim.

TRISA=%00000 ‘A portu Çıkış olarak ayarlandı
TRISB=%00000000 ‘B portu Çıkış olarak ayarlandı

Çıkış olarak belirlediğim portun çıkış değerini Low (0) olarak ayarlamak için şu şekilde bir ifade yazabilirim.

PORTA=0 ‘A portu tüm çıkışlar Low (0)
PORTB=0 ‘B portu tüm çıkışlar Low (0) Eğer High yapmak isteseydim
(PORTA=1),(PORTB=1)şeklinde yazacaktım.

Gördünüz mü ne kadar basit. Pinleri çıkış olarak ayarladım ve tüm çıkışları Low yaptım.
Herhangi bir portun bir pin’inin gösterilme şekli port ismi devamında nokta ve pin numarası verilerek yapılır.

Örnek A portunun 2 nolu pini için PORTA.2 şeklinde bir gösterim kullanılır.
Şimdi diyelim ki PORTA.0 yani A portunun sıfır biti yani ilk pin’e bağlı LED‘i yakalım ;Komutumuz bir kaç mantıklı şekilde olabilir. Sırası ile;

PORTA.0=1 ‘PortA.0 High yani 1 oldu ve LED yandı.veya
HIGH PORTA.0 ‘PortA.0 High oldu yani LED yandı,

Komutu mümkün olduğu sürece şeklinde kullanmayı tercih edin.

Proje 1a :

picbasic_led_yak_1

Şimdi de birden fazla pin’e bağlı Led lerin aynı anda yakılmasını gerçekleştirelim.
PortA=%10101 şeklin de bir komut yazarsam, sağdaki ilk değer olan 1 (Bir) PortA.0′a verilir. Sonra sırası ile yani soldan sağa doğru olan Binary değerler PORTA nın 0-4 nolu pinlerine verilirler. Değer sıfır ise pin Low, değer bir ise pin High olur.

Sonuçta bu komut ;

TRISA=%00000 ‘A portu Çıkış olarak ayarlandı
PortA.0=1
PortA.1=0
PortA.2=1
PortA.3=0

PortA.4=1 ‘( Bu pin diğerlerinden farklıdır.Open kollektör olduğu için “pullup” direnci kullanılır.Aksi halde istediğimiz çıkışı alamayız.)şeklinde karşılık gelen Binary değerleri port pinlerine verir.

Demek ki bir port’a bağlı pinlerin birden fazlasına hükmetmek için port’a sekiz bitlik bir Binary veya desimal değer verilir.Şimdi port pinlerinin ne amaçlı çıkış olarak kullanıldığı üzerine biraz bilgi verelim.

Diyelim ki port pin’ine bağlı bir Role yi bir transistor aracılığı ile çalıştırmak istiyorsun. İşte yolu, pin çıkışını bir direnç ile (1K-2k2) bir transistor ün (B)eys’ine bağla. NPN tipi bir transistör kullanırsan transistör ün (E)mitterini GND ye bağla. Port Pin’inden High (1) çıkartırsan transistör iletime geçecek ve (C) kollektör ünden GND çıkaracaktır. Bunu bir role ye bağla ve rölenin diğer ucunu +5V‘a bağlar isen pinden röleyi çalıştırıp kapatabilirsin.

Bunu bir örnekle açıklayalım;

Diyelim ki PortB.1 pinine bir transistör üzerinden role bağladık ve bu röleyi açıp kapayacağız.İşte basit programımız;

Proje 1b :

pic_basic_role

1 TRISB=%00000000 ‘B portu çıkış yapıldı
2 PortB=0 ‘B portunun çıkışı Low(0) yapıldı.
3 ROLEAC:
4 HIGH PORTB.1
5 PAUSE 1000 ‘1000 ms lik bir gecikme yaratır.
6 LOW PORTB.1
7 PAUSE 500
8 GOTO ROLEAC

1. Satırda PortB yi çıkış olarak ayarladık.
2. Satırda PortB pinlerinin tamamını LOW yaptık.
3. cü satırda ROLEAC isimli bir etiket yarattık.(Yaptırmak istediğimiz diğer komutlar için ismini kendimizin koyduğu başka etiketler yaratıp programın daha fazla işlem yapmasını sağlarız.)
4. satırda PortB.1 pinini High yaptık.
5. satırda 1000 ms lik bir gecikme yarattık. Yani role 1000 ms süresince çekili kaldı.
6. Satırda PortB.1 pinini LOW yaptık. Yani role bıraktı.
7. satırda tekrar 500 ms lik bir gecikme yarattık.
Sonra programı tekrar aynı işleri yapması için ROLEAC etiketine yönlendirdik.
Buraya kadar öğrendiklerimizi toparlar isek;
– Sayı gösterim formatlarını öğrendik.
– Port pinlerinin nasıl giriş nasıl çıkış yapılacağını öğrendik.
– Port ve port pinlerine nasıl ulaşabileceğimizi öğrendik.
– Milisaniye cinsinden gecikmenin nasıl yaratıldığını öğrendik.
– Program içinde etiket kullanarak aynı işlemlerin nasıl tekrarlanabileceğini öğrendik.

Bütün bu öğrendiklerimizi tek program üzerinde göstermeye çalışalım.

Proje 1c :

pic16f84_picbasic_led_role

Program PortA.0 pinine bağlı LED i kontrol edecek ve ayrıca PortB.0 pin’ine bağlı röleyi açıp kapayacaktır. Role çekildiğinde PortA.0 pinine bağlı LED yanacak. Role bırakınca LED’de sönecektir. Role çekili kalma süresi 1 sn. yani 1000 ms. olacaktır.

TRISA=0 ‘bu ifade “TrisA=%00000”e eşdeğerdir.
TRISB=0
PortA=0
PortB=0

ROLEAC:
HIGH PORTB.0
‘role çektirildi
PAUSE 500 ‘500 ms bekleme
HIGH PORTA.0 ‘Led yandı
PAUSE 500 ‘500 ms bekleme
LOW PORTA.0 ‘Led söndü
PAUSE 500 ‘500 ms bekleme
LOW PORTB.0 ‘Role bıraktı
PAUSE 500 ‘500 ms bekleme
GOTO ROLEAC ‘Roleac etiketine git
END ‘programın burada bittiğini ifade eder.

Hazırlayan: Erol Tahir Erdal (ETE) PICBasic Dersleri PIC Basic Pro ile PIC Programlama 1 Kod ve simülasyon dosyaları: PICBasic Dersleri PIC Basic Pro ile PIC Programlama 1

Dosya indirme LINK listesi (HTML formatında) link-10112.zip şifre-pass: 320volt.com

PICBasic Dersleri PIC Basic Pro ile PIC Programlama-2 Ders-2 Devam

  • İlhan

    Çok şahane bir giriş olmuş. Pic uygulamalarına yeni başladım hoby amaçlı ve bu kaynak üzerinden gitmeyi düşünüyorum. Klavyenize sağlık :)

  • MURATYAMAK

    Çok güzel olmuş. Teşekkürler.

  • Cengiz

    Tahir bey, Hollandadan derslerinizi takip ediyorum.
    Elinizde sağlık. Anlatımınız harika

  • Hasan

    Sitenizi çok beğendim. Benim kardeşim gidiyor kursuna çok memnun. Hepsi matematikle alakalı. Bende buradan birşeyler öğrenmeye çalışıyorum. Emeğinize sağlık siteniz çok güzel

  • Cemil

    Elinize emeğinize sağlık çok teşekkürler.

  • mehmet

    Yazandan Allah razı olsun. yeni başladım Pic e ve çok da iyi anlayabiliyorum sizin sayenizde

  • OSMAN

    bencede şahane ama tahir bey neden diğer led yanmıyor

  • bozve eem

    ellerinize sağlık sayenizde bu pic programlamayı adam akıllı öğrenebileceğim

  • Burak

    güzel ve basit anlatım böyle olursa herkes tarafından anlaşılabilir teşekkürler.

  • tamer

    tesekkürler ,emeği gecen herkese. bilgi sevgi gibidir paylaştıkça büyür saygılarımla

  • sinan

    ellerinize sağlık. ilk kez bu kadar yalın ve dolu dolu bir PIC anlatımı görüyorum. Allah razı olsun.
    teşekkürler.

  • savas

    Gerçekten çok sade ve güzel bir anlatma tarzı. Çok faydalı. Teşekkürler.

  • ender

    anlatım çok güzel olmuş teşekkürler

  • Can

    Gayet güzel anlatmışsınız.Mantığını anında kaptım.bulduğum en iyi kaynak

    gerçekten teşekkür ederim

  • Sedat

    Ellerinize sağlık fakat devreyi yaptığımda çalışmadı delikli pertinax üzerinde problem yaşadım proje b2 deniyorumda

    Genede sağolun

  • cafer

    ellerinize sağlık çok güzel ve faydalı bilgiler geliştirmek için kendimizi ama bu pic programlamada kullanılan belli başlı program kodlarının ne manaya geldiğini ne anlam taşıdıklarını programda hangi emri hangi kodla nereye verdiğini ve ne görev yaptığını yazarsanız daha güzel olurdu…..

  • Türkçe açıklamalı picbasic komutları, operatörler;

    http://320volt.com/wp-content/uploads/2010/08/picbasic-komutlari-oparatorler.pdf

    iyi çalışmalar

  • mehmet şahin

    Sağolun hocam. Çok şey öğrendik sayenizde.

  • ASIM IŞILDAK

    Her şey için teşekkürler.Sayenizde çok şeyleri öğrendik ve uyguluyoruz.

  • Murat

    Bu kodları hangi programla yazıyorsunuz?
    Bende “mikroC PRO for PIC” var ve bu kodların çoğunu tanımıyor.
    Bu kodları yazdığınız programın ismini yazarsanız çok sevinirim.
    Şimdşden teşekkürler…

  • ete

    Konunun en başında belirtilmiş zaten “PIC BASIC PRO” isimli derleyiciye göre yazılıyor bütün bu kodlar. Hemen hemen en yaygın pic basic derleyicisidir.

    Programları yazarken editör olarak “Micro Code Studio” (MCS) isimli editör programı kullanılır. Bu programa derleyicinin adresi (PBP260) gösterilir ve program yazıldıktan sonra derle butonuna baıslarak program hex formatına çevrilir.

    MCS serbest bir programdır. Aşağıdaki linkten indirilebilir.
    http://www.mecanique.co.uk/software/mcsxinstall.exe

    Pic Basic Pro ise ücretli bir derleyicidir. Ancak net de araştırılırsa ilaçlı olanları bulunabiliyor. Araştırırken PBP260 olarak araştırın . Piyasadaki en son sürümü budur. Gerçi üreticisi PBP3.0 çıkarmış ama diğeride idare eder şimdilik.

    Ete

  • Murat

    Ete kardeş, ilginden dolayı çok teşekkürler. Bu kadar kısa sürede cevap alacağımı düşünmüyordum. Söylediğin programları deneyeceğim. Ayrıca bu siteyi de çok faydalı bulduğumu da söylemek isterim. Meğer elektroniğe ne kadar meraklıymışım da bunu farkedememişim. İşte ben bu site sayesinde bunun farkına vardım. Hayatımdaki bir boşluk doldu sanki. Umarım bu heyecanımı hiç kaybetmem. Siteye emeği geçen herkese çok teşekkürler.

  • Erdinç Tufan

    Bende anlatımınızı çok beğendim. Gerçekten çok teşekkür ediyorum çünkü PIC kursuna yazılacaktım geç kaldım. Buradan öğreneceğim artık.Saygılar.

  • arif

    emeğinize sağlık

  • mehmet254

    hocam,hexadesimal sayılarda örnek verirken 23F de 256 yı nasıl buldunuz.?

  • ogulcan

    merak edenler olur üstteki soruya cevap:

    23F ya sayımız. baştaki sayı 16 üzeri 2, sonraki sayı 16 üzeri 1 ve son sayı yani F ise 16 üzeri 0 oluyor.

    256 – 16 – 1 yani. bunlarıda katsayılarıyla çarpıp topluyoruz.

    2×256 + 3×16 + 1×15(F) = 575

  • mutkan

    sağ ol çok güzel ve mantıklı bir anlatım.
    sırf trisa yada trisb yüzünden kısıtlı basic
    bilgimde olsa çok basit bir programı compile
    yapamamıştım.
    demek ki detaylar önemli.

  • 45likSensei

    Ete kardeşim eline sağlık. Bir gecede bütün derslerini bitirip, ertesi gün bir sürü pic, direnç, lcd, power sup, cap alıp 3-4 gün datasheet kastırıp ilk termometremi, pot, voltmetre okumamı, LDR denememi yapıp, kendime özgü eski basic bilgilerimle harmanlayıp çok keyif aldım. Teşekkürler, Saygılar…

  • K.M

    hocam ellerinize sağlık . ben makinacıyım bildiğim tek yazılım forturan ve onda 15 yıl önce okulda öğrendikten sonra hiç kullanmadım ona rağmen bu dersleri baya anladım .
    ne kadar teşekkür etsem azdır.

  • hasan

    üniverstede görmüştük biraz , şifreli kapı kilidi yapmıştım tabi zaman geçti unuttum okuyunca herşeyi bir bir hatırladım sanırım devamını da getiricem tekrardan evde ufak tefek şeyler yapasım geldi :) yararlı bilgiler için teşekkür ederim.

  • Hüseyin KADEROĞLU

    Teşekkürler ve elinize sağlık. Maalesef bilginin para ile satıldığı ve satılmadığı zaman ise bir “devlet sırrı” gibi saklandığı bir zamanda yaşıyoruz. Bilgiyi paylaşmış, dağıtmış ve faydalı olması için çalışmışsınız. Elinize sağlık, gönlünüze sağlık, aklınıza sağlık diyorum. Kolay gelsin. Kalın sağlıcakla.
    Hüseyin KADEROĞLU

  • Derslerinizi çok faydalı buldum.Çok teşekkürler,Faydalı bir insansınız…

  • Mustafa Dinç

    Çok güzel bir kaynak, Uğraşıp emeği geçip bu sayfa ya aktarılmasında bizleri bilgilendirme amacıyla herkese Teşekkür ederim

  • muratm

    cok guzel olmuş elektrik elektronikçi olmamam ragmen ben bile anlayabildim.teşekkürler

  • Cevdet

    high aç low kapa demek oluyor galiba.