pic16f84_pic16c84.jpg
ÇoĞumuzun programladığı ilk Microcihp PIC Serisinden PIC16F84 :) Bende ilk denemelerimi bu entegre ile yapmıştım bu entegre üzerine hazırlanmış yeni başlayan kişiler için faydalı bir yazı var

PIC16F84 Mikrodenetleyici Genel Özellikleri

· Sadece 35 komut ile programlama
· 13 adet giriş/çıkış portu
· Çalışma hızı DC-10 MHz
· 8 bit data
· 1Kx14 EEPROM Program Hafızası
· 64 Byte EEPROM Data Hafızası
· Direkt/Dolaylı Adresleyebilme
· 4 adet Kesme Fonksiyonu. (PB0,TMR0,RB Change,EEPROM Write)
· 1 milyondan fazla yazma silme
· Kolay ve ucuz programlayabilme
· Her bir pinden 25 mA e kadar akım verebilme
· 8 bit programlanabilir Timer

PIC16F84 pin diyagramı

pic16f84_bilgi_01.png
CMOS teknolojisi ile üretilmiş olan PIC16F84 çok az enerji harcar.Flash belleğe sahip olması nedeniyle clock girişine uygulanan sinyal kesildiğinde registerleri içerisindeki veri aynen kalır.Clock sinyali tekrar geldiğinde PIC içerisindeki program kaldığı yerden itibaren çalışmaya başlar.RA0-RA3 pinleri ve RB0-RB7 pinleri I/= portlarıdır.Bu portlardan girilen dijital sinyaller vasıtasıyla PIC içerisinde çalışan programa veri girilmiş olur.Program verileri değerlendirerek portları kullanmak suretiyle dış ortama dijital sinyaller gönderir.Dış ortama gönderilen bu sinyallerin akımı yeterli olmadığı durumda yükselteç devreleri (röle,transistör v.s) ile yükseltilerek kumanda edilecek cihaza uygulanır.Portların maksimum sink ve source akımları aşağıda verilmiştir.Bu akımlar genellikle bir LED sürmek için yeterlidir.

I/0 pini
Sink akımı 25mA
Source akımı 20 mA

Sink akımı,gerilim kaynağından çıkış portuna doğru akan akıma,source akımı ise I/0 pininden GND’ye doğru akan akıma denir.Sink ve Source akımları Şekil 3.2’de gösterilmiştir.
pic16f84_bilgi_02.png
PIC 16F84’ün çektiği akım,besleme gerilimine ,clock girişine uygulana sinyalin frekansına ve I/0 pinlerindeki yüke bağlı olarak değişir.Tipik olarak 4 MHz’lik clock frekansında çektiği akım 2mA kadardır.Bu akım uyuma modunda (sleep mode) yaklaşık olarak 40 μA ‘e düşer.

CMOS entegrelerdeki giriş uçları muhakkak bir yere bağlandığı için kullanılmayan tüm girişler besleme geriliminin +5V luk ucuna bağlanmalıdır. PIC16C84 ve PIC16F84 özellikleri tamamen aynı olan PIC’lerdir.Her ikisi de EEPROM belleğe sahip olmalarına rağmen Microchip ilk ürettiği EEPROM bellekli PIC’leri ‘C’ harfi (C harfi CMOS’dan gelmektedir.) ile tanımlarken,son zamanlarda ürettiği EEPROM bellekli PİC’leri ‘F’ harfi (FLASH) ile tanımlamaktadır.Bu projede her iki PIC’de kullanılabilir.Ayrıca PIC16F84A ile PIC16F84 arasında da herhangi bir fark yoktur.PIC’i tanımlayan bu harf ve rakamlardan sonra yazılan 10/P,04/P clock girişine uygulanacak maksimum frekansı belirtir.Örneğin 10 MHz’e kadar frekanslarda PIC16F84-10/P kullanılırken, 4MHz’e kadar frekanslarda PIC16F84-04/P kullanılabilir.

Besleme Gerilimi

PIC’in besleme gerilimi 5 ve 14 numaralı pinlerden uygulanır.5 numaralı Vdd ucu +5 V’a 14 numaralı Vss ucu da toprağa bağlanır.PIC’e ilk defa enerji verildiği anda meydana gelebilecek gerilim dalgalanmaları nedeniyle istenmeyen arızaları önlemek amacıyla Vdd ile Vss arasına 0.1 μf lık bir dekuplaj kondansatörü bağlamak gerekir.PIC’ler CMOS teknolojisi ile üretildiklerinden çok geniş besleme gerilimi aralığında (2~6 V) çalışmalarına rağmen 5 V luk gerilim deneyler için ideal bir değerdedir.
pic16f84_bilgi_03.png

Clock Uçları ve Clock Osilatörü Çeşitleri

PIC belleğinde bulunan program komutlarının çalıştırılması için bir kare dalga sinyale ihtiyaç vardır.Bu sinyale clock sinyali denir.PIC16F84’ün clock sinyal girişi için kullanılan iki ucu vardır.Bunlar OSC1(16.pin) ve OSC2 (15.pin) uçlarıdır.Bu uçlara farklı tipte osilatörlerden elde edilen clock sinyalleri uygulanabilir.Clock osilatör tipleri şunlardır:
RC-Direnç/kondansatör (Resistor/Capacitor)
XT-Kristal veya seramik resonetör (Xtal)
HS-Yüksek hızlı kristal veya seramik resonetör (High Speed)
LP-Düşük frekanslı kristal (Low Power).
Seçilecek olan osilatör tipi PIC’in kontrol ettiği devrenin hız gereksinimine bağlı olarak seçilir. Tablo 3.1’de hangi osilatör tipinin hangi frekans sınırları içerisinde kullanılabileceğini gösterir.

Osilatör tipi Frekans Sınırı
RC 0~4 MHz
LP 5~200 KHz
XT 100 KHz~4 MHz
HS (-04) 4 MHz
HS (-10) 4~10 MHz
HS (-20) 4~20 MHz

Tablo: Osilatör Tipi-Frekans Sınırı İlişkisi

PIC’e bağlanan clock osilatörünün tipi programlama esnasında PIC içerisinde bulunan konfigürasyon bitlerine yazılmalıdır. Bu projede kristal kontrollü clock osilatörü kullanılacaktır.

Kristal Kontrollü Clock Osilatörleri

Bu tip osilatörler zamanlamanın çok hassas olması gerektiğinde kullanılır.Bu tip clock osilatörleri metal bir kutu görünümündedir.Bu tip osilatörlere kondansatör bağlantısı gerekmez.PIC assembly programlama dili ile yazılan zaman geciktirme (time delay) döngülerinde yapılacak hesaplamaları kolaylaştırmak için genellikle 4MHz’lik kristal clock osilatörleri kullanılır.Bu durumda harici clock frekansı (OSC1) 4’e bölündüğünde,dahili clock frekansı 1 MHz olur (OSC2).Çoğu PIC assembly komutu bir komut saykılı süresinde (dahili clock )çalıştığından,bir komutun işlevini gerçekleştirme süresi 1μs olur.Bu süre ise deneysel çalışmalar için oldukça uygundur.
pic16f84_bilgi_05.png

Kristal ve kondansatör kullanılarak yapılan osilatörler de zamanlamanın önemli olduÄŸu yerlerde kullanılır.Kristal osilatörlerin kullanıldığı devrelerde kristale baÄŸlanacak kondansatörün seçimine özen gösterilmelidir. Tablo 3.2′de hangi frekansta kaç μf lık kondansatör kullanılacağını gösteren bir tablo görülmektedir.

Osilatör Tipi Frekans Kondansatör
LP 32KHz 33-68 pF
200KHz 15-47 pF
100KHz 47-100 pF
XT 500KHz 20-68 pF
1MHz 15-68 pF
2MHz 15-47 pF
4MHz 15-33 pF
HS 8MHz 15-47 pF
20MHz 15-47 pF

Tablo: Frekans – Kapasitör İlişkisi

Seçilen kondansatör değerlerinin yukarıdaki değerlerden yüksek olması,elde edilen kare dalganın bozuk olmasına ve PIC’in çalışmamasına neden olur.C1 ve C2 kondansatörün değerleri birbirine eşit olmalıdır.
pic16f84_bilgi_06.png

Reset Uçları ve Reset Devresi

PIC16F84’ün besleme uçlarına gerilim uygulandığı anda bellekteki programın başlangıç adresinden itibaren çalışmasını sağlayan bir reset devresi vardır.Bu reset devresi PIC içerisindedir ve ‘Power-on-reset’ denir.
MCLR ucu ise kullanıcının programı kesip,kasti olarak başlangıca döndürebilmesi için kullanılır.PIC’in 4 numaralı MCLR ucuna uygulanan gerilim 0 V olunca programın çalışması başlangıç adresine döner.Programın ilk adresten itibaren tekrar çalışabilmesi için reset ucuna uygulanan gerilimin +5 V olması gerekir.Bir buton aracılığı ile reset işlemini yapan devre şekilde görülmektedir.
pic16f84_bilgi_07.png

I/0 Portları

PIC16F84’ün 13 adet giriş/çıkış portu vardır.Bunlardan 5 tanesine A portu (RA0~RA4),8 tanesine de B portu (RB0~RB7) denir.13 portun her biri giriş ya da çıkış olarak kullanılabilir.PIC içerisinde adına TRIS denilen özel bir data yönlendirme registeri vardır.I/0 portlarından geçebilecek 25 mA lik bir sink akımı veya 20 mA lik source akımı LED’leri doğrudan sürebilir.Bu akımlar aynı zamanda LCD,lojik entegre ve hatta 220 V luk şehir şebekesine bağlı bir lambayı kontrol eden triyakı bile tetiklemeye yeterlidir.Çıkış akımı yetmediği durumda yükselteç devreleri kullanarak daha yüksek akımlara kumanda etmek mümkün olabilir.
pic16f84_bilgi_08.png

B portunun 8 ucu,PIC içerisinde dahili olarak 50 KΩ luk dirençlerle pull-up yapılmış gibi etki gösterir.Bu durum Şekil 3.8’de temsili olarak gösterilmiştir.PIC’in içerisinde gerçekte pull-up direnci değil,farklı bir mantıksal devre vardır.
pic16f84_bilgi_09.png

Bu 8 pull-up direncinin tamamı option register içerisindeki yazılım aracılığı ile iptal (Disable) edilebilir veya geçerli (Enable) kılınabilir.Port uçlarından herhangi birisi çıkış olarak yönlendirildiğinde o uçtaki pull-up direnci otomatik olarak iptal olur.PIC’e enerji verildiğinde (Power-on-reset) ise tüm pull-up’lar iptal edilir. A portunun 4. bit’i, TOCKI adı verilen harici timer/counter giriş ucu ile ortaklaşa kullanılır.Bu nedenle 16F84’ün pin görünüşü üzerinde 3 numaralı pin ucuna RA4/TOCKI yazılmıştır.RA4 ucu çıkış olarak yönlendirildiğinde açık kolektör özelliğinden dolayı harici olarak muhakkak bir pull-up direncine bağlanmalıdır.

PIC16F84’ün Belleği

PIC16F84 mikrodenetleyicisinin belleği,program ve RAM belleği olmak üzere iki ayrı bellek bloğundan oluşur.Microchip’in kataloglarında PIC denetleyicilerin RISC işlemci olarak tanıtılmasının nedeni de budur.Çünkü Harvard Mimarisi ile üretilen RISC işlemcilerde program belleği ile data belleği birbirinden ayrıdır.Oysa PC’lerde kullanılan çoğu mikroişlemci mimarisinde böyle bir ayrım yoktur.Dolayısıyla mikrodenetleyiciler,mikroişlemcilere göre komut işlemede daha hızlıdırlar. Şekil 3.9’da PIC16F84’ün mimarisi verilmiştir.Amaç sadece bir fikir edinilmesini sağlamaktır.

pic16f84_bilgi_10.png

Program BelleÄŸi

PIC16F84’ün 1 Kbyte’lık program belleği vardır.Her bir bellek hücresi içerisinde 14 bit uzunluğundaki program komutları saklanır.Program belleği flash (elektriksel olarak yazılıp silinebilir.) olmasına rağmen ,programın çalışması esnasında sadece okunabilir.
pic16f84_bilgi_11.png

PIC16F84’ün program belleği içerisinde sadece assembly komutlar saklanır.Bu komutlar dışında RETLW komutu ile birlikte kullanılan sınırlı miktarda data da yüklenebilir.

NOT: Yukarıda PIC16F84’ün program bellek haritasındaki adresler gösterilirken sol tarafta heksadesimal notasyon kullanılmıştır.PIC programlama esnasında da bellek adresleri bu ÅŸekilde yazılır.0xXX heksadesimal notasyonunda X’ler 0~F arasındaki herhangi bir sayıyı,’0X’ ise bu sayıların heksadesimal olduÄŸunu belirtir.ÖrneÄŸin 0×0F,heksadesimal 0F sayısı demektir. 0×3FF ise 3FF heksadesimal sayısını gösterir.PIC16F84’ün program belleÄŸine 14 bit uzunluÄŸunda toplam 1024 tane komut yazılabilir.Bellek haritasında son bellek adresinin 0×3FF=1023 gösterilmesinin nedeni,adresin 0’dan baÅŸlamasındandır.Adres 1’den baÅŸlasaydı son adres 0×400=1024 olacaktı.

RAM Bellek

PIC16F84’ün 0×00~0×4F adres aralığında ayrılmış olan RAM belleÄŸi vardır.Bu bellek içerisindeki file registerleri içerisine yerleÅŸtirilen veriler PIC CPU’ sunun çalışmasını kontrol eder.File registerlerinin bellek uzunluÄŸu 8 bit’tir.Sadece PCLATH registeri 5 bit uzunluÄŸundadır.File register adı verilen özel veri alanlarının dışında kalan diÄŸer bellek alanları,normal RAM bellek olarak kullanılırlar.Yani bu alanlarda programda içerisindeki deÄŸiÅŸkenler için kullanılır. Åžekil 3.11’de PIC16F84’ün file register haritası gösterilmiÅŸtir.
pic16f84_bilgi_12.png

PIC16F84’ün RAM belleÄŸi iki sayfadan (Bank’tan) meydana gelir.Bank0’daki registerlerin adresleri 0×00~0×4F arasında,Bank1’deki registerlerin adresleri de 0×80~0xCF arasındadır.Toplam 80 tane file register olmasına raÄŸmen Bank0 ‘da 80,Bank1’de 80 olmak üzere 160 register alanı olduÄŸu sanılabilir.Oysa dikkat edilirse bazı özel amaçlı registerler her iki bank’ta da görülür.ÖrneÄŸin PCL,STATUS,PCLATH,INTCON gibi. Gölgeleme,otomatik kopyalama iÅŸlemi olarak algılanabilir.

Bir bank’taki registeri kullanabilmek için o bank’a geçmek gerekir.Bazı özel registerlerin her iki bank’ta da görülmesinin nedeni ,bank değiştirme işlemine gerek duyulmaksızın kullanılabilmesi içindir.

W register

PIC16F84’ün RAM bellek alanında görülmeyen bir de W registeri vardır.W register bir akümülatör veya geçici depolama alanı olarak düşünülebilir.W registerine direkt olarak ulaşmak mümkün değildir.Ancak diğer registerlerin içerisindeki verileri aktarırken erişmek mümkündür.Bir PIC’te gerçekleşen tüm aritmetik işlemler ve atama işlemleri için W register kullanılmak zorundadır.Örneğin iki register içerisindeki veriler toplanmak istenildiğinde,ilk olarak registerlerden birinin içeriği W registere aktarılır.Daha sonra da diğer registerin içerisindeki veri W registeri içerisindekiyle toplanır.
pic16f84_bilgi_13.png