Elektronik / Elektronik Kaynakları/

PICBasic Dersleri PIC Basic Pro ile PIC Programlama 1

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 (TXT formatında) link-10112.zip şifre-pass: 320volt.com

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

  1. Hüseyin KADEROĞLU 2014/05/01
  2. mesah 2014/11/17
  3. Mustafa Dinç 2015/05/01
  4. muratm 2016/02/10
  5. Cevdet 2016/10/04

Yorum

Soru: