anka5307
Üye
- Katılım
- 21 Eki 2012
- Mesajlar
- 19
- Puanları
- 1
- Yaş
- 32
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.Picler 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 Picler 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ış) pine sahip bir işlemcidir.
İ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 Picin 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 LEDlerin 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çesi 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 Picin 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 porta 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 pininin 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 pine bağlı LEDi 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 :
Şimdi de birden fazla pine 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 porta bağlı pinlerin birden fazlasına hükmetmek için porta 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 pinine 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)eysine bağla. NPN tipi bir transistör kullanırsan transistör ün (E)mitterini gnd ye bağla. Port Pininden 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 +5Va 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 :
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 :
Program PortA.0 pinine bağlı LED i kontrol edecek ve ayrıca PortB.0 pinine bağlı röleyi açıp kapayacaktır. Role çekildiğinde PortA.0 pinine bağlı LED yanacak. Role bırakınca LEDde sönecektir. Role çekili kalma süresi 1 sn. yani 1000 ms. olacaktır.
TRISA=0 bu ifade TrisA=%00000e 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)
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.Picler 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 Picler 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ış) pine sahip bir işlemcidir.
İ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 Picin 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 LEDlerin 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çesi 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 Picin 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 porta 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 pininin 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 pine bağlı LEDi 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 :
Şimdi de birden fazla pine 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 porta bağlı pinlerin birden fazlasına hükmetmek için porta 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 pinine 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)eysine bağla. NPN tipi bir transistör kullanırsan transistör ün (E)mitterini gnd ye bağla. Port Pininden 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 +5Va 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 :
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 :
Program PortA.0 pinine bağlı LED i kontrol edecek ve ayrıca PortB.0 pinine bağlı röleyi açıp kapayacaktır. Role çekildiğinde PortA.0 pinine bağlı LED yanacak. Role bırakınca LEDde sönecektir. Role çekili kalma süresi 1 sn. yani 1000 ms. olacaktır.
TRISA=0 bu ifade TrisA=%00000e 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)