PIC16F628
Güncelleme 14/11/2024
PIC İngilizce “Peripheral Interface Controller” kelimesinin baş harflerinden alır. Türkçe çevirisi ise “Çevresel üniteleri denetleyici arabirim”’dir.
RISC (Reduced Instrucition Set Computer) mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden bir PIC16F628’i programlamak için kullanılacak komutlar oldukça az ve kolaydır.
Bir tasarım yöntemi plan RISC mimarisindeki temel düşünce, daha kolay ve az sayıda komut kullanılmasıdır.
Şekilde PIC16F628’in dış görünüşü görülmektedir.
PIC16F628 ile PIC16F84’ün Karşılaştırması
• PIC16F84 en fazla 10 MHz hızında çalışabilirken PIC16F628 en fazla 20 MHz hızında çalışabilmektedir. Bu PIC16F628’in işlemleri iki kat hızlı yapabilmesine olanak sağlamaktadır. Bu, özellikle işlem yükü fazla olan uygulamalarda avantaj sağlamaktadır [4]. • PIC16F84’ün program belleği 1k iken PIC16F628’in program belleği 2k’dır. Gelişmiş uygulamalarda program kodunun uzun olması daha geniş bellek alanı gerektirebilir. 2k program belleği ile PIC16F628 daha avantajlıdır. Ayrıca PIC16F628’in RAM belleği ve EEPROM veri belleği PICI6F84’ün iki katından daha fazladır. • PIC16F628 sahip olduğu 37 kHz/4 MHz’lik dahili osilatör ile, PIC16F84’ün çalışması için gerekli olan harici osilatöre olan ihtiyaç ortadan kaldırılmıştır. Böylece fazladan 2 I/0 ucu kullanılabilmektedir. Ayrıca MCLR ucu isteğe bağlı olarak giriş ucu olarak da kullanılabilmektedir. • PIC16F84’te sadece 8-bitlik bir zamanlayıcı (TIMER) varken PIC16F628’de iki adet 8 bitlik ve bir adet 16 bitlik zamanlayıcı bulunmaktadır. PIC16F84, 13 giriş/çıkış ucuna sahipken PIC16F628’de 16 giriş/çıkış ucu vardır. PIC16F628 daha fazla I/O uç sayısına ihtiyaç olan uygulamalarda PIC16F84’ün yerine kullanılabilir. • PIC16F628’de PIC16F84’te bulunmayan analog karşılaştırıcı modülü, PWM modülü ve seri haberleşmeye donanımsal olarak olanak sağlayan USART/SCI (Universal Synchronous/Asynchronous Receiver/Transmitter) modülü bulunmaktadır. • PIC16F628 piyasada kolay bulunabilmektedir ve fiyatı PIC16F84’e göre daha düşüktür (PIC16F84’ün 2004 yılında ABD satış fiyatı 4.38$ iken PIC16F628’in 1.61$’dır). PIC16F84’ün fiyatı 33 I/0 ucuna sahip olan P1C16F877’ye oldukça yakındır.
PIC16F628 ile PIC 16F877’nin Karşılaştırılması
• PIC 16F877, 33 giriş/çıkış ucuna sahipken PIC 16F628’de 16 giriş/çıkış ucu vardır. • Hem PIC16F877 hem de PIC16F628 en fazla 20 MHz’de çalışmaktadır. • PIC16F877’nin program belleği 8k iken PIC16F628’in ise 2k dır. 8k program belleği ile PIC16F877 daha avantajlıdır. Ayrıca PIC16F877’in RAM belleği 368 byte, PIC16F628’in ise 224 byte’tır. • PIC16F877’nin EEPROM veri belleği 256 byte iken PIC16F628’in ise 128 byte’tır. • PIC16F877 ve PIC16F628’in iki adet 8 bitlik ve bir adet l6 bitlik zamanlayıcı bulunmaktadır. • Her ikisinde de PWM modülü, analog karşılaştırıcı modülü ve seri haberleşmeye donanımsal olarak olanak sağlayan modüller bulunmaktadır. • PIC16F877’nin analog girişleri bulunmakla beraber PIC16F628’in analog girişleri çoktur. • PIC16F877’in piyasa değeri PIC16F628’den daha pahalıdır.
PIC16F628’in Özellikleri
PIC16F628, diğer picler gibi RISC yapısı üzerine kurulu Harvard mimarisi ile üretilmiştir ve flaş program belleğine sahip PIC16CXX ailesinden 8 bitlik bir mikrodenetleyicidir. PIC16F628’in mimari yapısından dolayı program ve veri bellekleri fiziksel olarak ayrı birimlerdedir ve bunlara farklı veri yolları ile erişilmektedir.
Tablo2.12’de PIC16F628’in genel özellikleri görülmektedir.
Saat Frekansı | En Yüksek Çalışma Frekansı | 20 MHz |
Bellek | Flash Program belleği | 2 k |
RAM Belleği | 224 byte | |
EEPOM Belleği | 128 byte | |
Çevresel Birimler | Zamanlama (TIMER) modüleri | TMR0, TMR1, TMR2 |
Analog Karşılaştırıcı | 2 | |
YakalaKarşılaştırPWM Modülü | 1 | |
Seri Haberleşme | USART | |
Diğer Özellikleri | Kesme Kaynağı | 10 |
GirişÇıkış Uç Sayısı | 16 | |
Çalışma Gerilimi Aralığı | 3-5.5V | |
Brown-out Algılama | Var | |
Kılıf (Package) Biçimi | 18-pin DIP, SOIC 20 pin SSOP |
1zellikleri Şekil 2.16’de ise PIC16F628’in bacak yapısının açık şekli görülmektedir
MicroChip Firmasının ürettiği PIC16F628 mikro denetleyiciye baktığımızda 1, 2, 3, 4, 15, 16, 17, 18 A Kapısına bağlı. 8 bitlik giriş-çıkış kapımız var RA5 giriş ayağımız olarak ayarlanıyor. Alkt kısımdaki 6, 7, 8, 9, 10, 11, 12, 13 B kapısı için ayarlanmış durumda. Ortadaki 5, 6, ise mikro denetleyicimizin güç beslemesi Vss, Vdd bulunuyor. Eğer devreyikristalle çalıştıracaksak RA7 ve RA6 uçları kristali bağlayacak uçlarımız olur, birde reset yapıcaksak RA5‘e bağlarız. Bir de PIC16F628 mikro denetleyicinin içerisinde 4 MHz bir osilatörümüz var çok hassas zaman aralıkları gerektirmeyen uygulamalarda RA6,RA7 ayaklarını kullanabiliriz. Farkederseniz bir bacağın birden fazla görevi olabiliyor.
RA0-7 : Input /Output port A
RB0-7 : Input/Output port B
AN0-3 : Analog input port
RX : USART Asynchronous Receive
TX : USART Asynchronous Transmit
DT : Synchronous Data
CK : Synchronous Clock
CCP1 : Capture In/Compare Out/PWM Out
OSC1/CLKIN : Oscillator In/Ecternal Clock In
OSC2/CLKOUT : Oscillator Out/Clock Out
MCLR : Master Clear ( Active low Reset ) Vpp : Programming voltage input
T0CKI : Clock input to Timer0
T1OSO : Timer1 oscillator output
T1OSI :Timer1 oscillator input
PGD : Serial programming data
PGC : Serial programming clock
PGM : Low voltage programinng input
INT : External interrupt
VDD : Positive supply for logic and I/O pins
Vss : Ground reference for logic and I/O pins
► Giriş / Çıkış ayaklarının herbiri birbirinden bağımsız şekilde çalışabiliyor.
► İlgili kapının TRIS kaydedicisi hangi ayaklarının giriş hangilerinin çıkış olduğunu belirler.
► Bir ayak birden fazla göreve sahip olabilir. Program sırasından ayak görevleri değiştirilebilir.
Şekil 2.17’de ise PIC16F628’in iç yapısının blok şeması görülmektedir. PIC16F628’de her bir komutun (operation code – opcode) uzunluğu 14-bit, işlenecek verinin (operand) uzunluğu ise 8-bittir.
RISC Mimarisinin PIC16F628’ e Kazandırdığı Özellikler
• Sadece 35 komut ile kontrol • Çalışma hızı: DC – 20 MHz’lik giriş zamanı • DC – 200 ns’ lik komut periyodu • 14 – bit uzunluğunda komutlar • 8- bit uzunluğunda veri yolu • 15 özel fonksiyonlu donanım Register’leri • 8 seviyeli derin donanım stack’i • Doğrudan – dolaylı ve izafi adresleme yöntemi • 1000 kere program silip yazma özelliğine sahip Flash bellek
PIC16F628 Portları
PIC16F628’in DIP (Dual Inline Package) kılıf için uçlarının genel görünüşü Şekil 3.2’de görülmektedir. Bu şekilde görüldüğü gibi PIC16F628, A portu ve B portu olmak üzere 8 uçlu iki porta sahiptir. B portunun her bir ucu ayrı ayrı giriş/çıkış olarak ayarlanabilirken, A portunun RA5/ ucu hariç diğer uçları ayrı ayrı giriş/çıkış olarak ayarlanabilmektedir. Bu uç sadece giriş olarak düzenlenebilir. Diğer PIC’lerde olduğu gibi, az sayıdaki uçların etkin kullanımı için bazı uçların birden fazla kullanım özelliği vardır. Böylece fazladan uç kullanımına gerek kalmadan birçok özellik kullanılabilmektedir [5]
PIC16F628 Port A
Port A 8-bit uzunluğundadır. Tablo 2.13 de Port A’nın uçları ile ilgili açıklamalar görülmektedir. Tablo 2.13. Port A uçları hakkında açıklamalar
Uç adı | Uç no | IO tipi | Açıklama |
RA0/AN0 | 17 | IO | İki yönlü I/O ucu ve analog karşılaştırıcı girişi |
RA1/AN1 | 18 | IO | İki yönlü I/O ucu ve analog karşılaştırıcı girişi |
RA2/AN2/VREF | 1 | IO | İki yönlü I/O ucu ve analog karşılaştırıcı girişi ve VREF çıkışı |
RA3/AN3/CMP1 | 2 | IO | İki yönlü I/O ucu ve analog karşılaştırıcı girişi ve analog karşılaştırıcı çıkışı |
RA4/TOCKI/CMP2 | 3 | IO | İki yönlü I/O ucu, TMR0 saat işareti girişi ve analog karşılaştırıcı çıkışı |
RA5//THV | 4 | I | Giriş ucu ve reset girişi |
RA6/OSC2/CLKOUT | 17 | IO | İki yönlü I/O ucu ve kristal osilatör çıkışı |
RA7/OSC1/CLKIN | 18 | IO | İki yönlü I/O ucu, kristal osilatör girişi ve harici saat kaynağı girişi |
Port A’nın bütün uçları Schmitt Trigger (ST) yapıdadır. TTL (Transistor Transistor Logic) yapıdaki uçlarda ‘0’dan ‘1’e ve ‘1’den ‘0’a geçiş için aynı geçiş bölgesi darken (veya tek bir değer iken), ST yapıdaki uçlarda ‘0’dan ‘1’e ve ‘1’den ‘0’a geçiş bölgesi daha geniştir. Bu farklılık şekil 2.18’te görülmektedir.
Şekil 2.18 Schmitt Trigger ve TTL uç yapıları arsındaki fark: a) Schmitt Trigger b)TTL 5V besleme gerilimi altında PIC16F628’in ST yapıdaki ucu 1V’un (Ve1) altına indiğinde “0” , 4V’un (Ve2) üstüne çıktığında “1” olmaktadır. TTL yapıdaki ucu ise 0.8V’un (Ve3) altında “0”, 2V’un (Ve4) üzerinde “1” olmaktadır. Sonuç olarak ST yapıdaki uçlarda “0” dan “1”’e geçişler daha kesindir. RA4 ucu çıkış olarak kullanılmak istenildiğinde, open drain özelliğinden dolayı, mutlaka harici bir dirençle (pull-up) besleme gerilimine bağlanmalıdır. RA4 ucu aynı zamanda TMR0 (Timer 0 – Zamanlayıcı 0) için saat (clock) işareti girişi (TOCKI -Timer 0 ClocK In) olarak da kullanılabilir. TMR0 normalde PIC’in kullandığı saat çalışırken, istenilirse program kodları ile bu uçtan girilecek farklı bir saat işaretine göre de çalıştırılabilir. RA5 ucunun çıkış özelliği bulunmamakta, bunun dışındaki bütün uçlar ayrı ayrı giriş/çıkış olarak kullanılabilmektedir.
PIC16F628 Port B
Port B 8-bit uzunluğundadır. Tablo 2.14’de Port B ‘nin uçları ile ilgili açıklamalar görülmektedir.
Uç adı | Uç no | IO tipi | Açıklama |
RB0/INT | 6 | IO | İki yönlü I/O ucu ve harici kesme girişi |
RB1/RX/DT | 7 | IO | İki yönlü I/O ucu, USART alıcı ucu ve senkron veri giriş/çıkış ucu |
RB2/TX/CK | 8 | IO | İki yönlü I/O ucu, USART verici ucu ve senkron saat darbesi giriş/çıkış ucu |
RB3/CCP1 | 9 | IO | İki yönlü I/O ucu, yakala karşılaştır PWM modülü giriş/çıkış ucu |
RB4/PGM | 10 | IO | İki yönlü I/O ucu, düşük gerilimle programlamagiriş ucu |
RB5 | 11 | IO | İki yönlü I/O ucu |
RB6/T1OSO/T1CK1 | 12 | IO | İki yönlü I/O ucu, TIMER1 osilatör çıkış ve TIMER1 saat darbesi girişi |
RB7/T1OSI | 13 | IO | İki yönlü I/O ucu ve TIMER1 osilatör girişi |
Port B’nin bütün uçları genel amaçlı giriş/çıkış olarak kullanıldığında TTL yapıdadır. RB5 dışındaki uçlar özel amaçlı fonksiyonlar (seri haberleşme, düşük gerilimle programlama v.b.) için kullanıldığında ise ST yapıdadır.Port B’nin bütün uçları özel amaçlı bir saklayıcı kullanılarak dahili pull-up dirençlerine bağlanabilir. Bu özellik kullanılmadan, ilgili uca bağlanacak direncin besleme gerilimine çekilmesi de aynı işleme karşılık gelir. Çıkış olarak koşullanan uçtaki pull-up direnci PIC tarafından otomatik olarak kaldırılır. Şekil 2.19 da, pull-up direncinin kullanımına örnek görülmektedir.
Şekil 2.19 Port B’ye a) harici direnç kullanarak b) dahili pull-up direnci kullanarak buton bağlama Normalde besleme gerilimini (‘1’) gören uç, butona basıldığında toprak potansiyelini (‘0’) görür. Böylece butona basılıp basılmadığı anlaşılabilir. Şekil 2.10’da görüldüğü gibi dahili pull-up direncinin kullanımı sayesinde harici bir dirence gerek kalmadan aynı işlem yapılabilir. PIC’e enerji verildiğinde (power-on reset durumu) pull-up dirençleri aktif değildir. Port B’nin 0 numaralı ucu (RB0/INT) kesme girişi olarak da kullanılabilir. Port B’nin 4-5-6-7 numaralı uçlarındaki verideki bir değişiklik durumunda istenirse PIC uyku (sleep) durumundan normal çalışma durumuna geçirilebilir. Uyku durumu, PIC’in sürekli işlem yapması gerekmediği durumlarda az enerji harcaması (3V besleme gerilimi için l A’ den daha az) için kullanılan bir çalışma biçimidir
PIC16F628’in Diğer Donanım Özellikleri
Besleme Gerilimi PIC16F628’in besleme gerilimi 3-5.5V arasında seçilebilir. Daha düşük gerilimle çalışması gereken sistemler için 2-5.5V gerilim aralığında çalışan PIC16LF628 kullanılabilir. PIC16F628’in beslemesi VDD ve VSS uçlarından verilmektedir. DIP kılıf yapısı için 14 numaralı uç olan VDD’nin + beslemeye, 4 numaralı uç olan VSS ise toprağa bağlanması gerekir. PIC’e besleme gerilimini sağlayan gerilim kaynağı ilk açıldığında besleme gerilimindeki dalgalanmaları ve yüksek akım çeken devre elemanlarının devreye girip çıkması ile besleme gerilimindeki ani ve istenmeyen değişimleri engellemek için VSS ile VDD uçları arasına bir kondansatör bağlanmalıdır. Böylece PIC’in istenmeyen şekilde resetlenmesi engellenmiş olur.
Şekil 2.20 de PIC16F628’in besleme bağlantı şeması görülmektedir.
PIC16F628 Osilatör Tipleri
PIC16F628 işlemleri gerçekleştirmesi için gerekli olan saat işaretleri birçok farklı devre ile elde edilebilir. Mikroişlemcilerin program kodlarını çalıştırma süresi saat işaretine bağlıdır. Yüksek saat işareti hızında çalışan bir mikroişlemci aynı sürede saat işareti hızı düşük olan bir mikroişlemciye göre daha fazla komutu işler. Öreğin 3 GHz’de çalışan bir işlemci 1 GHz’de çalışan aynı işlemciye göre 3 kat daha hızlı komut işler [5]. PIC16F628 en fazla 20 MHz saat işaretinde düzgün çalışabilir. Saat işareti farklı yollarla elde edilebilir; • LP (Low Power Crystal) : Düşük güçlü kristal • XT (Crystal/Resonator) : Kristal/rezonatör • RS (High Speed Crystal/Resonator) : Yüksek hızlı kristal/rezonatör • ER (External Resistor) Harici direnç (2 çalışma biçimi) • INTRC (Internal Resistor/Capacitor) : Dahili RC (2 çalışma biçimi) • EC (External Clock In) : Harici Saat Girişi • LP, XT veya RS tipi osilatörler OSCI ve OSC2 uçlarına bağlanırlar. Bu tip osilatör devrelerinin PIC16F628’e bağlantısı Şekil 2.21’de görülmektedir.
Şekil 2.21 LP, XT ve HS tipi osilatörlerin PIC16F628’e bağlanması RS direnci bazı tipteki kristaller için gerekebilir. Osilatör olarak genellikle kristal kullanıldığından Tablo 3.4’te kullanılacak kristal frekansına göre seçilecek C1 ve C2 kondansatör değerleri görülmektedir.
Tablo 2.15.Kristal osilatör için kondansatör değerleri
Çalışma biçimi | Frekans | C1 | C2 |
LP | 32 kHz | 68-100 pF | 68-100 pF |
200 kHz | 15-30 pF | 15-30 pF | |
XT | 100 kHz | 68-150 pF | 150-200 pF |
2 MHz | 15-30 pF | 15-30 pF | |
4 MHz | 15-30 pF | 15-30 pF | |
HS | 8 MHz | 15-30 pF | 15-30 pF |
10 MHz | 15-30 pF | 15-30 pF | |
20 MHz | 15-30 pF | 15-30 pF |
Daha büyük kondansatör değerleri osilatörün düzenli çalışmasını sağlarken enerji verildikten sonra PIC’in çalışmaya başlama süresini uzatır. Zamanlamanın çok önemli olmadığı uygulamalarda ER tipi osilatör kullanılabilir. Bu çalışma biçiminde OSC1 ucu ile Vss arasına bağlanacak tek bir direnç ile dahili osilatörün çalışma frekansı ayarlanır. Tablo 3.5’te bu uca bağlanacak direnç değerine göre PIC16F628‘in çalışma frekansı görülmektedir. ER tipi osilatör kullanılması durumunda, kullanılmayan OSC2 ucu normal giriş/çıkış ucu olarak kullanılabilir. Ayrıca bu uç, diğer harici donanımlarla eşzamanlı (synchronous – senkron) çalışmada kullanılmak üzere osilatör frekansının ¼’ünde saat işareti üretmek için de kullanılabilir. Dahili RC osilatör (INTRC) kullanımında OSC1 ve OSC2 uçlarına herhangi bir devre elemanı bağlamaya gerek yoktur. Bu uçlar giriş/çıkış ucu olarak kullanılabilir. İsteğe bağlı olarak OSC2 ucu ER tipi osilatör çalışmadaki gibi kullanılabilir, Dahili RC tipi çalışmada 4 MHz veya 37 kHz çalışma frekansı seçilebilir. Bu değerler 5V çalışma gerilimi ve 25°C ortam sıcaklığında geçerlidir.
Tablo 2.16. ER osilatör biçiminde çalışma frekansının belirlenmesi
Direnç | Frekans |
0 | 10.4 MHz |
1 K | 10 MHz |
10 K | 7.4 MHz |
20 K | 5.3 MHz |
47 K | 3 MHz |
100 K | 1.6 MHz |
220 K | 800 kHz |
470 K | 300 kHz |
1 M | 200 kHz |
Donanım reset
PIC16F628’i donanımsal olarak resetlemenin iki yolu vardır. Bunlardan ilki, besleme verildiğinde PIC’in kendini resetlemesi ve reset vektörüne giderek program kodlarını çalıştırması şeklinde olur. İkincisi ise donanım resetidir. MCLR ucunun ‘0’a çekilmesi ile gerçekleşir. Bu iş için kullanılabilecek devre Şekil 2.22’de görülmektedir.
Şekil 2.22.PIC’in MCLR ucu kullanılarak resetlenmesi Normalde “1” seviyesini gören MCLR ucu, butona basıldığında ‘0’ olur. Bu durumda da PIC yine reset vektörüne giderek program kodlarını çalıştırmaya başlar. MCLR ucu istenirse donanımsal resetleme yerine giriş ucu olarak kullanılabilir. Bu durumda PIC, besleme gerilimi kesilmediği sürece harici olarak resetlenemez.
PIC16F628’in Bellek Yapısı
PICI6F628’in 2k boyutunda program belleği vardır. Bu bellekteki her bir göz 14-bit uzunluğundadır. Bu gözlerin uzunluğu ve içindeki veriler programcıyı doğrudan ilgilendirmemektedir. Şekil 3.9’da PIC 16F628’in program belleği haritası verilmektedir. Görüldüğü gibi 0-7FFh arasındaki program belleği 2k uzunluğundadır. PIC16F628’in RAM bölgesinin 4 parçaya (bank) ayrıldığından ve bu 4 RAM bölgesinde genel amaçlı saklayıcılar (general purpose registers) ve özel amaçlı saklayıcılar (special function registers) bulunmaktadır. Her bir RAM bölgesinin ilk 32 byte’lık kısmı özel amaçlı saklayıcılar tarafından kullanılmaktadır. Genel amaçlı saklayıcılar için ise 224 byte’lık bir alan ayrılmıştır. Bu saklayıcılarda program yazarken kullanılan değişkenler tutulur. Şekil 2.23 de PIC16F628’in RAM bölgesinin haritası görülmektedir.
Şekil 2.23 PIC16F628’in program bellek yapısı Özel amaçlı saklayıcılar kullanılmak istendiğinde ilgili RAM bölgesine geçiş yapılmalıdır. Örneğin PORTA özel amaçlı saklayıcısına erişmek için mutlaka sıfırıncı RAM (Bank 0) bölgesine geçilmelidir. Bazı özel amaçlı saklayıcılar bütün RAM bölgelerinde bulunmaktadır ve bu saklayıcılara bank değiştirmeden erişilebilir. RAM bölgeleri arasında geçiş STATUS saklayıcısı kullanılarak yapılır. Microchip firması yukarıda bahsedilen RAM bölgesindeki 8-bitlik gözlere veri saklayıcısı (file register) adını vermektedir. PIC işlemlerini genellikle veri saklayıcıları ve W saklayıcısı (Working register) üzerinden yapar. W saklayıcısı 8-bitlik bir saklayıcıdır ve birçok işlem bu saklayıcı üzerinden yapılmak zorundadır. Aşağıdaki şekilde PIC 16F628’in RAM bölgesi haritasının şekli görülmektedir.
Kesmeler – Hakkında Temel Bilgiler
Mikrodenetleyicinin rutin olarak yaptığı işler dışında bazı özel durumlar oluştuğunda, rutin işlerini bırakıp bu özel durumla ilgili görevleri yerine getirmesi gerekir. Burada bahsedilen, özel durumun oluşup oluşmadığının sürekli kontrol edilmesi yerine, kesme kullanılarak özel durumun oluştuğu mikrodenetleyiciye otomatik olarak bildirilir ve böylece gereksiz kontrollerden kurtulunur. Burada bahsedilen özel durum öncelikli bir görev olabileceği gibi, nadiren yapılması gereken bir görev de olabilir. Örneğin PIC16F628 ile bir sıcaklık kontrolü yapıldığını düşünelim. Ortam sıcaklığı belirli bir değerin (ayar noktasının) üstüne çıktığında klima devreye sokulsun. Ayar noktası iki butonla kontrol edilsin. Sistem sıcaklığı ölçüp ayar noktasına göre klimayı kapatıp açmaktadır. Ayar noktasının değiştirilmesi işlemi nadiren yapılacağından bu işlem kesme ile yapılabilir. Böylece bu butonların sürekli olarak kontrolüne gerek kalmaz. Sadece butonlara basıldığında ayar noktasının değeri kesme hizmet programı ile değiştirilir ve sistem ana programa dönerek rutin sıcaklık kontrolü işlemine devam eder.
Kesme Durumunda PIC’in Yaptığı İşler
Herhangi bir program kodu çalışırken bir kesme gelmesi durumunda PIC l6F628’in otomatik olarak yapacağı işler aşağıda listelenmiştir. Şekil 2.25’te ise kesmelerin çalışma mantığı görülmektedir. 1. Kesme gelmeden önce çalıştırılan komuttan sonraki komutun program belleğindeki adresi yığına (stack) otomatik olarak atılır. Böylece kesmeden dönüldüğünde programın nerede kaldığı PIC tarafından bilinecektir
Şekil 2.25. Kesmelerin çalışma mantığı
2. PIC16F628’in kesme vektörü olan program belleğinin 0×0004 adresine gidilir ve buradaki program kodları çalıştırılmaya başlanır. Dolaysıyla kesme kullanılması durumunda 0×0004 adresine ana programa ilişkin program kodu yazılmamalıdır. 3. 0×0004 adresindeki “kesme hizmet programı (interrupt service routine-ISR)” olarak da adlandırılan kesme programı çalıştıktan sonra RETFIE komutu ile kesmeden geri dönüş sağlanır. Bu durumda PIC otomatik olarak yığından ana programda döneceği yerin adresini alır ve program sayıcısına (PC) yükler. 4. Ana program kaldığı yerden çalışmaya devam eder. Şekil 3.12’de bir kesme gelmesi durumunda kesme hizmet programının çalıştırılması görülmektedir. Şekil 2.26.a’da kesme hizmet programının program belleğinin 0×0004 adresinden itibaren yazıldığı durum, Şekil 2.26.b’de ise 0×0004 adresinden başka bir etikete dallanılarak kesme programının bu etiketten itibaren yazıldığı durum görülmektedir. Genellikle Şekil 2.26.b’deki bu yöntem kullanılmaktadır.Şimdi Şekil 2.26.b’deki durumu ayrıntılı olarak inceleyelim. 0×03 adresindeki movlw h’FF’ komutu işletilirken bir kesme geldiğini düşünelim. Bu durumda öncelikle movlw komutunun işini bitirmesi beklenir. Daha sonra 0×035 adresindeki movwf PORTB komutu işletilmeden 0×035 adresi yığına geri dönüş adresi olarak atılır. Bu işlem PIC tarafından otomatik olarak yapılır. Daha sonra yine otomatik olarak 0×0004 kesme vektörüne gidilir. Kesme vektöründe goto ACIL komutu ile ACIL etiketi altındaki program çalıştırılır. Bu programın sonundaki retfie komutunun çalıştırılması ile yığından geri dönüş adresi olan 0×035 alınarak programın bu adresten itibaren çalışmaya devam etmesi sağlanır. PIC16F628’de kesme ile ilgili işlemleri kontrol etmek için INTCON, PIE1 ve PIR1 özel amaçlı saklayıcıları kullanılır.
Şekil 2.26. Kesme durumunda hizmet programının çalışması
PIC16F628’in Kesme Kaynakları
PIC16F628’de kesmeye neden olan 10 farklı durum mevcuttur ve bunlar kesme kaynağı (interrupt source) olarak adlandırılır. Aşağıda PIC16F628’in kesme kaynakları listelenmiştir. • Harici RB0INT kesmesi • TMR0 taşma kesmesi • PORTB<4:7> bitlerindeki değişim kesmesi • Karşılaştırıcı kesmesi • USART TX kesmesi • USART RX kesmesi • CCP kesmesi • TMR1 taşma kesmesi • TMR2 kesmesi • EEPROM kesmesi Burada Karşılaştırıcı kesmesi, USART TX kesmesi, USART RX kesmesi, CCP kesmesi, TMR1 taşma kesmesi, TMR2 kesmesi, EEPROM kesmesi ‘çevresel kesmeler’ olarak adlandırılır.
Zamanlayıcılar-Zamanlayıcılar Hakkında Temel Bilgiler
PIC mikrodenetleyicilerinde zamanlayıcı/sayıcı olarak kullanılmak üzere donanımsal birim(ler) mevcuttur. Bu zamanlayıcı/sayıcılarla yapılacak işlemler yazılımsal olarak da kısmen yapılabilmektedir. Ancak bu birim(ler)in donanımsal olarak PIC’in içerisinde bulunması yazılım açısından büyük kolaylıklar sağlamaktadır. PIC16F628’de 3 farklı zamanlayıcı/sayıcı bulunmaktadır. Şimdi sı
rasıyla bunları inceleyelim.
Zamanlayıcı-0 (TIMER-0)
PIC16F84’de de bulunan bu zamanlayıcının özellikleri aşağıda listelenmektedir. • 8-bitlik bir zamanlayıcı/sayıcıdır (0-255 arası sayabilir). • TMR0 özel amaçlı saklayıcısı ile bu zamanlayıcının değeri okunabilir veya bu saklayıcıya veri yazılabilir. • 8-bitlik ön bölücü kullanılarak zamanlama süresi/sayma miktarı ayarlanabilir. • Dahili komut çevrimi veya harici saat işareti ile çalışabilir. • TMR0 saklayıcısının değeri 255’den 0’a geçtiğinde kesme üretir. • Harici saat işareti için kenar seçimi yapılabilir (saat işaretinin düşen/yükselen kenarında çalışmasının seçilebilmesi). Zamanlayıcı-0 kurulduğunda çalışmaya başlar, yani sayması için herhangi bir komut kullanılmaz. Ayarlanan ön bölücü değerine bağlı olarak belirli bir komut çevrimi sonra veya harici saat işaretine (veya bir olaya) bağlı olarak otomatik olarak ‘1’ artar. Kesme veya başka özel durumlarda bu zamanlayıcı/sayıcı çalışmaya devam eder. Zamanlayıcı -0 ’ın kontrol işlemleri için OPTION saklayıcısı kullanılır.
Zamanlayıcı-1 (TIMER-1)
PIC16F84’de bulunmayan bu zamanlayıcının özellikleri aşağıda listelenmektedir: • 16-bitlik bir zamanlayıcı/sayıcıdır. (0-65535 arası sayabilir) • 8-bitlik TMR1H ve TMR1L özel amaçlı saklayıcıları ile bu zamanlayıcının değeri okunabilir veya bu saklayıcılara veri yazılabilir. TMR1H yüksek anlamlı 8-biti, TMR1L ise düşük anlamlı 8-biti içerir. • 3-bitlik ön bölücü kullanılarak zamanlama süresi/sayma miktarı ayarlanabilir. • Taşma durumunda kesme üretebilir. (65535’den 0’a geçişte) • RB6/T1OSO/T1CKI ucundan girilen harici saat işareti ile sayıcı olarak kullanılabilir. • Bu zamanlayıcı için CCP biriminden reset üretilebilir. • Bu zamanlayıcı için harici osilatör kullanılabilir. Bu durumda osilatör RB7/T1OSI ile RB6 T1 OSOT1CK1 uçlarına bağlanmalıdır. Bu modda TRIS<7:6> bitlerinin durumu gözardı edilerek bu uçlar giriş olarak ayarlanır. Zamanlayıcı-l’in kontrol işlemleri için T1CON özel amaçlı saklayıcısı kullanılır.
Zamanlayıcı-2 (TIMER-2)
PIC16F84’de bulunmayan diğer bir zamanlayıcı olan TMR2’nin özellikleri aşağıda listelenmektedir. • 8-bitlik bir zamanlayıcıdır. Sayıcı özelliği yoktur • 4-bitlik ön bölücü ve son bölücülere sahiptir • Normal zamanlama amaçlı kullanılabileceği gibi CCP birimini PWM modunda çalıştırılması durumda, PWM süresini belirlemede kullanılabilir • TMR2 saklayıcısı okunabilir ve yazılabilirdir. Reset durumunda sıfırlanır. • Zamanlayıcı-2 birimi PR2 adında 8-bitlik bir periyot saklayıcısına TMR2, 0’dan PR2’deki değere kadar artar bu değere ulaştığında tekrar sıfırlanır. PR2 saklayıcısı da okunabilir ve yazılabilirdir. Bu saklayıcının reset sonrası ilk değeri 0xFF’dir. Zamanlayıcı-2’nin kontrol işlemleri için T2CON özel amaçlı saklayıcısı kullanılır.
Watchdog Timer (WDT)
WDT, bir programın çalışması gereken süreyi aşması durumunda PIC’i resetleyerek program kontrolünü sağlayan zamanlayıcı birimdir. WDT, aslında yazılımın bekçiliğni yapmaktadır. Çalışma mantığı, bir fabrikadaki bekçinin belirli sürelerle bir saati kurması mantığına dayanır. Eğer bu saat belirtilen sürede kurulmazsa alarm verir veya durur. Burada saatin kurulması bekçinin uyumadığını ve saatin bulunduğu yere gittiğini göstermektedir. Yazılımsal olarak bu işlem, saatin kurulması durumunda programın sorunsuz çalıştığını, saatin kurulmamasını ve dolayısıyla alarm vermesinin bir durum oluşturduğunu göstermektedir. WDT, son bölücünün 1:1 kullanılması durumunda yaklaşık 18 ms’de bir PIC’i resetler. Bu süre çalışma gerilimine, ortam sıcaklığına göre ve PIC’den PIC’e değişir. Ayrıca son bölücü değeri ayarlanarak en fazla 2.3 s civarı bir sürede PIC’in resetlenmesi sağlanabilir.
Uyku (Sleep) Modu
Uyku modu, PIC16F628’in yapması gereken herhangi bir iş olmadığı durumlarda güç tüketimini en aza indirmek için kullanılmaktadır. sleep komutu kullanılarak PIC uyku moduna sokulur. Bu komut çalıştırılıp uyku (Tl) moduna geçildiği anda, WDT ve WDT son bölücüsü sıfırlanır ve STATUS saklayıcısındakibiti “1″, biti “0″ yapılır. Uyku modunda iken, giriş/çıkış uçlarının sleep komutundan önce sahip olduğu konum korunur. Bu moddayken düşük güç tüketimi için kullanılmayan uçlar ya besleme gerilimine ya da toprağa çekilmelidir. PIC aşağıda belirtilen durumlarda uyku modundan çıkar: •MCLR ucundan harici reset darbesi geldiğinde • WDT taşması oluştuğunda • RB0/INT kesmesi, RB<4:7> değişim kesmesi veya, çevresel kesmelerden biri geldiğinde
Karşılaştırıcılar ve Referans Gerilim Birim Karşılaştırıcı Birimi
PIC16F628’de analog sayısal dönüştürücü bulunmamasına karşın, içindeki 2 analog karşılaştırıcı ile analog işaretleri de doğrudan değerlendirebilir. Bu analog karşılaştırıcılar RA<0:3> uçlarında bulunmaktadır. Şimdi bir karşılaştırıcının nasıl çalıştığına bakalım. Şekil 2.27.a’da PIC 16F628’in içerisindeki bir analog karşılaştırıcı görülmektedir. Karşılaştırıcının VIN+ ucundaki işaretin VIN- ucundaki işaretten büyük olması durumunda çıkış PIC’in besleme gerilimi olan VDD (“1”), VIN+ ucundaki işaretin VIN- ucundaki işaretten küçük olması durumunda ise çıkış sıfırdır. (VSS) Şekil 2.27.b’de VIN+ sinüsoidal bir işaret iken VIN- sabit genlikli (DC) bir işarettir. Bu şekilde VIN+’nın VIN-‘den büyük olması durumunda karşılaştırıcı çıkışının “1” olduğu, küçük olması durumunda “0” olduğu görülmektedir.
Şekil 2.27 (a) Analog karşılaştırıcı, (b) çalışması Analog karşılaştırıcının kullanımı için gerekli ayarlar CMCON özel amaçlı saklayıcısı ile yapılmaktadır.Şekil 2,28’te karşılaştırıcı çalışma modları görülmektedir.
Şekil 2.28 Karşılaştırıcı çalışma modları
Referans Gerilim Birimi
Referans gerilim birimi (VREF), karşılaştırı referans gerilimi için 16 farklı gerilim seviyesi üretir. Şekil 2.28’de görülen karşılaştırıcı çalışma modlarından CM2:CM0=010 çalışma modunda kullanılır. Referans gerilim biriminin devre şeması Şekil 2.29’te görülmektedir. Bu birimin kontrolü VRCON özel amaçlı saklayıcısı ile yapılır [5].
Şekil 2.29 Referans gerilim birimi devre şeması
YakalaKarşılaştırPWM Birimi
2.5.10.1 YakalaKarşılaştırPWM (CaptureComparePWM-CCP) Birimi
Bu birim 16-bit’lik bir yakalama saklayıcısı, 16-bit’lik bir karşılaştırıcı saklayıcısı veya bir PWM saklayıcısı olarak çalışabilen 16-bitlik bir saklayıcı içerir. Yakalama modu, RB3/CCP1 ucunda herhangi bir olay olduğunda 16-bit’lik TMR1 saklayıcısının değerini saklar. Bu özellik bu uçtan girilecek bir işaretin frekansının hesaplanması gibi uygulamalarda kullanılabilir. Karşılaştırıcı modu, CCPR saklayıcısındaki değer ile TMR1 saklayıcısıdaki değeri karşılaştırır. Bu özellik CCPR1 ve TMR1 saklayıcılarındaki değerlere bağlı olarak periyodik şekilde kesme üretmek ıçin kullanılabilir. PWM (Pulse Width Modulation — Darbe Genişlik Modülasyonu) modu, periyodik darbeler üretmek için kullanılır. Bu özellik, oluşturulacak darbelerin genişliklerini değiştirerek harici bir devreyi kontrol etmek için kullanılabilir.
PIC16F628 YAKALAMA MODU
Yakalama özelliği kullanıldığında, aşağıdaki olaylardan önceden belirlenen biri oluştuğunda TMR1 saklayıcısının değeri CCPR1H:CCPR1L saklayıcılarına atılır. Bu olaylar RB3/CCP1 ucunda;
• Her düşen kenar işareti
• Her yükselen kenar işareti
• Her 4. yükselen kenar işareti
• Her 16. yükselen kenar işareti
oluştuğunda meydana gelir. Bu olaylar CCP1CON saklayıcısı kullanılarak seçilir. Bir yakalama yapıldığında PIR1 saklayıcısının CCP1IF (2.) biti “1” olur. Bu bit, yakalama işleminin tekrar yapılabilmesi için program kodları aracılığı ile “0” yapılmalıdır. CCPR1 saklayıcısının içeriği okunmadan başka bir yakalama işlemi yapılırsa yeni değer CCPR1 saklayıcısına yazılacağından eski değerin kaybolacağı unutulmamalıdır. Yakalama özelliği kullanıldığında RB3/CCP1 ucu giriş olarak koşullanmalıdır. Bu bit çıkış olarak koşullanıp, porta bir yazma işlemi yapıldığında da yakalama işlemi gerçekleşir.
Şekil 2.30 Yakalama biriminin blok şeması
Şekil 2.30’da yakalama biriminin blok şeması görülmektedir. CCP biriminin yakalama özelliği kullanılırken Timer1, zamanlayıcı veya senkron sayıcı modunda çalıştırılmalıdır. Asenkron sayma modunda yakalama işlemi çalışmayabilir. Yakalama modu değiştirildiğinde hatalı bir yakalama kesmesi üretilebilir.
Hatalı kesmelerin gelmesini engellemek için PIE1 saklayıcısının CCP1E (2.) biti sıfırlanmalı ve yakalama modu değiştirildiğinde PIR1 saklayıcısının CCPlIF (2.) biti sıfırlanmalıdır.
Yakalama modu için 4 ön bölücü ayarı bulunmaktadır. Bu ayarlar CCP1CON saklayıcısı aracılığı ile yapılır. CCP birimi kapatıldığında veya CCP birimi yakalama modunda olmadığında ön bölücü değerleri sıfırlanır. Yani herhangi bir reset durumunda ön bölücü değeri sıfırlanır. Bir yakalama ön bölücü değerinden diğerine geçmek bir kesme üretebilir. Ön bölücü sayıcısı sıfırlanmayacağından, değişim sonrası ilk yakalama işlemi sıfırdan farklı bir ön bölücüden kaynaklanabilir. Bu sorunu gidermek amacı ile özellikle CCP1CON birimi kapatılmalı, daha sonra yeni ön bölücü değeri yüklenerek CCP birimi aktif hale getirilmelidir.,
Karşılaştırıcı Modu
Karşılaştırıcı modunda, 16 bitlik CCPR saklayıcısındaki değer, TMR1 saklayıcısındaki değer ile karşılaştırılır. Karşılaştırılan değerlerin eşitliği durumunda RB3CCP ucu o anki durumunda bırakılabilir, “0” veya “1” yapılabilir (Bu çalışma modunda RB3/CCP1 ucu çıkış olarak koşullanmalıdır). Bu işlem, CCP1CON saklayıcısının 3:0 bitleri kullanılarak yapılır. Karşılaştırılan değerlerin eşitliği durumunda, PIR1 saklayıcısındaki CCPlIF biti de “1” olur.
Şekil 2.31. Karşılaştırma biriminin blok yapısı
CCP1CON saklayıcısını sıfırlamak, RB3/CCP1 karşılaştırıcı çıkışını da sıfırlamaya zorlar. CCP biriminin karşılaştırma özelliği kullanılırken Timer1, zamanlayıcı veya senkron sayıcı modunda çalıştırılmalıdır. Asenkron sayma modunda karşılaştırma işlemi çalışmayabilir.
PIC16F628 PWM MODU
PWM modunda RB3/CCP1 ucu 10 bit çözünürlüğe kadar PWM çıkışı üretir. Bu uç PORTB veri tutucusu ile çoklandığından (aynı ucu kullandığından), TRISB’nin 3. biti sıfırlanarak RB3/CCP1 ucu çıkış yapılmalıdır. CCP biriminin PWM modundaki basitleştirilmiş blok gösterimi şekil 2.32’de görülmektedir.
Şekil 2.32 PWM biriminin basitleştirilmiş blok gösterimi
PWM birimi ile oluşturulan işaretin periyodu ve darbe doluluk oranı (duty cycle) değiştirilebilir. Şekil 2.33’de PWM çıkışındaki işaretin periyodu ve darbe doluluk oranı görülmektedir.
Şekil 2.33 PWM çıkış işareti
PWM Periyodunun Belirlenmesi
PWM periyodu, PR2 özel amaçlı saklayıcısına yazılan değer ile belirlenir ve aşağıdaki şekilde hesaplanabilir:
PWM periyodu = [(PR2)+1]x 4 x TOSC x (TMR2 ön bölücü değeri)
TMR2 değeri PR2’ye eşit olduğunda, TMR2’nin sonraki artışında aşağıdaki üç olay oluşur:
• TMR2 sıfırlanır.
• RB3/CCP1 ucu “1” yapılır (darbe doluluk oranı %0 ise bu uç “1” yapılmaz).
• PWM darbe doluluk oranı CCPR ve CCPR1H saklayıcılarına yüklenir.
Yukarıda verilen formülde de görüldüğü üzere TMR2 son bölücüsü PWM periyodu hesaplanırken dikkate alınmaz. Son bölücü, PWM çıkışından farklı bir frekansta kesme üretmek için kullanılabilir.
PWM Darbe Doluluk Oranının Belirlenmesi
PWM darbe doluluk oranı, CCPR1L saklayıcısına ve CCP1CON<5:4> bitlerine yazılan değerle belirlenir Doluluk oranı 10 bite kadar çözünürlüğe sahiptir. PWM darbe doluluk oranını hesaplamak için aşağıdaki eşitlik kullanılır:
PWM darbe doluluk oranı = (CCPR1L: CCP1CON<5:4>) x TOSC x (TMR2 ön bölücü)
CCPR1L ve CCP1CON<5:4> herhangi bir zamanda yazılabilir fakat PR2ve TMR2 eşit olana kadar bu değer CCPR1H saklayıcısına yazılmaz. Yani PWM periyodu tamamlanmadan yeni darbe doluluk oranı aktif olmaz PWM modunda CCPR1H sadece okunabilir, CCPR1H saklayıcısı ve 2-bitlik bir dahili tutucu (latch), PWM darbe doluluk oranını çift tamponda saklamak için kullanılır. Bu çift tamponlama sorunsuz PWM işlemi için gereklidir.
Belirli bir PWM frekansı için en büyük PWM çözünürlüğü aşağıdaki gibi hesaplanır:
PWM çözünürlüğü=
PWM darbe doluluk oranı, PWM periyodundan büyük olursa RB3CCP1 ucunun sıfırlanmayacağı bilinmelidir.
PWM Modunun Çalışması İçin Yapılması Gerekenler
CCP birimini PWM modunda kullanmak için aşağıdaki işlemler yapılmalıdır:
1. PR2 saklayıcısına gerekli değer yazılarak PWM periyodu ayarlanır.
2. CCPR1L saklayıcısına ve CCP1CON<5:4> bitlerine PWM darbe doluluk oranı yazılır.
3. TRISB saklayıcısının 3. biti “0” yapılarak RB3/CCP1 ucu çıkış yapılır.
4. TMR2 ön bölücü değeri ayarlanır ve T2CON saklayıcısı kullanılarak TMR2 aktif hale getirilir [5].
USART Birimi
PIC16F628’de donanımsal olarak seri haberleşmeye olanak sağlayan USART birimi bulunmaktadır. Bu birim aynı zamanda seri haberleşme arabirimi (Seril Communications Interface – SCI) olarak da bilinir. USART birimi, tam çift yönlü (full duplex) eşzamansız (Asenkron-asynchronsus) ya da yarı çift yönlü (half duplex) eşzamanlı (senkron-synchronous) modda çalıştırılabilir. Tam çift yönlü eşzamansız çalışma modunda kişisel bilgisayarlar gibi çevresel cihazlarla; yarı çift yönlü eşzamanlı çalışır modunda, ADC-DAC, seri EEPROM gibi çevresel cihazlarla haberleşilebilir. USART birimi, aşağıdaki haberleşme modlarında çalıştırılabilir:
• Eşzamansız (tam çift yönlü)
• Eşzamanlı — Master (yarı çift yönlü)
• Eşzamanlı — Slave (yarı çift yönlü)
Şimdi yukarıda bahsedilen bu kavramlara kısaca değinelim. Seri veri iletim kanalları Şekil 3.20’de görüldüğü gibi tek yönlü (simplex), yarı çift yönlü ve tam çift yönlü olmak üzere üçe ayrılır:
• Tek Yönlü Veri İletimi: Kanal üzerinden tek yönlü bir veri akışı vardır.
• Yarı Çift Yönlü Veri İletimi: Aynı kanal üzerinden her iki taraf da veri alıp gönderebilir. Fakat herhangi bir anda aynı taraftan hem gönderme hem de alma işlemi yapılamaz.
• Tam Çift Yönlü Veri İletimi: Alma ve gönderme işlemi için iki farklı kanal mevcuttur. Bu nedenle, aynı anda hem alma hem de verme işlemi yapılabilir.
Yukarıda anlatılan veri iletim kanallarında veri gönderen ve alan uçların belirli kurallar doğrultusunda haberleşmesi gerekir. Bu nedenle, iletilen verinin yapısına göre eşzamanlı ve eşzamansız veri iletim protokolleri kullanılabilir. Şimdi bu protokollere değinelim:
Şekil 2.34 Seri veri iletimi için veri kanal tipleri
• Eşzamansız Veri İletişim Protokolü: Bu protokol genellikle karakter tabanlı işlemler için kullanılır. Gönderilecek her bir veri için, verinin başlangıcını ve bitişini belirten bilgi de gönderilir. Eşzamansız veri iletiminde genel olarak kullanılan veri paketi yapısı Şekil 2.35’de görülmektedir.
Şekil 2.35 Eşzamansız veri iletiminde veri paketi yapısı
• Eşzamanlı Veri İletişim Protokolü: Veri bloklarının (örneğin; karakter dizisi) gönderimi için kullanılan bir protokoldür. Bu protokolde gönderilecek veri blok olarak ele alındığından, her bir karakter için başlangıç ve bitiş bilgisini göndermeye gerek yoktur. Veri ile birlikte, eşzamanlamayı sağlayan bir saat işareti de gönderilir.