Bölüm-2 PIC Mikrodenetleyicilerinin Programlanması

mikroC Editörü ve Derleyicisinin Kullanımı

Programlanabilir arayüz kontrolcüsü anlamına gelen PIC mikrodenetleyicileri, üreticisi Microchip firmasının kullanıcılara sağlamış olduğu geniş ürün yelpazesi sayesinde, diğer pek çok mikrodenetleyiciye (ATMEL, 8051, MSP430 …) göre daha fazla kullanım alanı bulmuştur. PIC programlama için kullanılabilecek dilin başında assembly gelmektedir. Fakat assembly ile program yazmak oldukça zor ve zaman alıcıdır. Bu yüzden PIC için oluşturulmuş yüksek seviyeli bir C dili tercih edilir.

Çeşitli C editörleri bulunmaktadır. Mikroelektronika firmasının mikroC derleyicisi bunlardan biridir. mikroC editörü kullanılarak PIC denetleyicileri ile yapılabilecek her türlü uygulama için kod yazılabilir.

NOT: C programlama dilinin C99, C11, ISO C, ANSI C, vb. birtakım standartları bulunmaktadır. Profesyoneller bu standart dokümanlarını okurlar ve ilgili standarta göre editörlerde programlarını yazarlar. Çoğu zaman program yazarken hazır kodların alınıp derlenmesinde çıkan problemlerin farklı standartta yazılmış programlama kodunun ilgili standartı tam desteklemeyen derleyicide derlenmesinden kaynaklandığı bilinmelidir.

Bu başlık altında Mikroelektronika firmasının "mikroC PRO for PIC" editörünün kullanımı anlatılacaktır. Bu elektronik içeriğe kaynaklık eden Mikrodenetleyiciler kitabının ekleri Marmara Üniversitesinin Mimoza Sunucusu üzerinden HTML5 formatında yayınlanmış olup, EK-A ve EK-B sayfalarından ayrıntılı bilgiye ulaşabilirsiniz.

mikroC editörü zengin kütüphane desteği ve bu kütüphanelerin projeye eklenmesindeki kolaylığı, gelişmiş zengin içerikli yardım dökümanı ve projeye eklenen mikrodenetleyicinin konfigürasyon sözcüklerinin kolaylıkla ayarlanabilmesini sağlayan proje editörüyle C tabanlı editörler içinde oldukça işlevsel olan editörlerden biridir.

Program ilgili internet sitesinden indirilip kurulduktan sonra, yeni proje oluşturulması Şekil 2.1 ve Şekil 2.2'de gösterildiği gibi gerçekleştirilir.

Şekil-2.1

“File” menüsünden “New Project” komutuyla ya da “Project” menüsünden “New Project” komutunu vererek proje sihirbazını açabilirsiniz. mikroC programında çalışma doyası proje dosyası olarak oluşturulur ve .mcppi uzantısını alır. Bu şekilde oluşturulan proje dosyaları aynı isim altında birden fazla dosyadan oluşur. C kodunun yazıldığı kod dosyası .c uzantısını alır. Derlendikten sonra .asm (assembly) ve. hex (hexadecimal) dosyaları oluşturulur. Aynı proje altında birden fazla .c uzantılı kod dosyası yazılabilir.

Proje dosyası mikroC 7 sürümünde 3 aşamalı olarak oluşturulur. 1’nci aşamada proje türü seçilir. 2’inci aşamada proje dosyasının ismi, dosyanın kaydedileceği yer ve çalışma frekansı tercihleri yapılır (Bkz. Şekil 2.2). 3’üncü aşamada projeye eklenecek dosya varsa dosya seçilir. Eski sürümlerde varsayılan olarak tüm kütüphane dosyaları projede seçilmiş olarak gelirken, 7.5 sürümünde hiçbir kütüphane dosyası seçili değildir.

Şekil-2.2

Project Name: Projenize vereceğiniz dosya adıdır. Dosya adlandırmalarında Türkçe’ye özgü ve özel karakterlerin kullanılmaması ve arada boşluk bırakılmaması tavsiye edilir.
Project folder: Proje klasörü.
Device name: Programlanacak mikrodenetleyici türü.
Device clock: Mikrodenetleyicinin hangi frekansta çalışacağını ayarlayacak olan osilatör frekansı tercihi. Önümüzdeki uygulamalar için aksi belirtilmedikçe bu frekansı 4 MHz olarak ayarlayınız.

Varsa projenize Şekil-2.3'te gösterildiği gibi “.h” ya da “.c” uzantılı diğer çalışma dosyalarını ekleyebilirsiniz.

Şekil-2.3

Projenize daha sonrasında ihtiyaç olan kütüphane dosyalarının eklenmesi için, “View --> Library Manager” menüsünden açılan kütüphane yöneticisi penceresinden (Bkz. Şekil 2.4) gerekli olan kütüphane dosyaları tıklanarak seçilir.

Şekil-2.4

Proje dosyasının oluşturulmasının son safhasında, programda ilk olarak yapmamız gereken PIC’in portlarını ayarlamaktır. Eğer programda değişkenler kullanılacaksa değişkenler tanımlanır ve programa gidilir. Tablo 2.1’de örnek bir program gösterilmiştir.

Tablo-2.1


void main() {
 TRISA = 0; // PORTA çıkış yapılıyor
 PORTA = 0; // PORTA temizleniyor
 TRISB=0; // PORTB çıkış yapılıyor
 PORTB=0; // PORTB temizleniyor
 CMCON=7; /* PIC16F628A analog karşılaştırıcıları kapatılıyor
   A3 ve A4 portları analog karşılaştırıcılıdır.
   Bu şekilde tüm portlar dijital olarak ayarlanıyor */
 for(;;){ /* Sonsuz döngü yapısı for ile bu şekilde yapılır
  sonsuz döngü için while(1){} yapısını da kullanabilirsiniz */
  PORTB.B4=1; /* PORTB'nin 4. BİTini bir yapar*/
  delay_ms(1000); /*1000 mili saniye(1SN)bekler*/
  PORTB.B4=0; /* PORTB'nin 4. BİTini sıfır yapar*/
  delay_ms(1000);
 }
}

NOT: mikroC’de program parçacıklarına birden fazla satırı kapsayacak şekilde açıklama yazmak için /* Buraya Açıklama yazınız */ şeklinde bir yapı kullanılır. Ancak tek satırlık açıklama bilgileri // işareti sonrası yazılabilir. mikroC’de kod yazımı ve sentaks düzeni hakkında ayrıntılı bilgi için EK-A'ya bakınız.

Ctrl+F9 tuş ikilisiyle ya da Şekil-2.5’teki menüden “Build” komutuyla program kodu derlenir. Ancak derlemeden önce programın Ctrl+S ya da “Save” komutuyla kaydedilmesi gerekmektedir. Kaydetme işlemi yapmadan derleme yaparsanız mikroC program kodlarının uzantısı olan “.c” uzantılı program dosyanızı kaydetmenizi isteyen bir pencere ekrana gelir. Bundan sonraki derleme işlemlerinde dosyanızı kaydetmenize gerek kalmaz. Derlemeyle birlikte otomatik olarak kayıt işlemi de gerçekleşir.

Şekil-2.5

Eğer derleme başarılı olursa, şekilde görüldüğü gibi derlemenin başarılı olduğuna ve program kodunun denetleyici hafızasında ne kadar yer kapladığına dair mesaj satırları belirir (Bkz. Şekil 2.5). Eğer Şekil 6’dakine benzer bir kod yazım hatası yaptıysanız şeklin altında gözüken hata mesajını alırsınız. Örnek hata mesajının sebebi 13’ünci satırdaki kodun sonuna yazılması gereken satır sonu “;” karakterinin yazılmamış olmasıdır. Böyle bir hatanın elde edilmesi durumunda hatanın giderilmesi ve derleme işleminin yeniden yapılması gerekir.

Şekil-2.6

PROTEUS-ISIS® İle İlk Uygulama Örneği ve Donanımsal Ayarlamalar

İlk uygulamanın PROTEUS-ISIS® çizimi Şekil 2.7’de gösterilmiştir.

Şekil-2.7

NOT-1: PIC mikrodenetleyicileri her ne kadar CMOS teknolojiyle tasarlanmış olmaları nedeniyle geniş bir besleme aralığına sahip olsalar da, DC 5V sabit gerilimli besleme kaynağı ile beslenmeleri lojik uygulamalar için daha uygun olacaktır. Mikrodenetleyicinin (+) besleme bacağına (VDD) yakın bir yere kaynağın (+) ve (-) kutupları arasına 100 nF’lık bir kondansatör bağlanması tavsiye edilir. Böylece istenmeyen voltaj kararsızlıklarına karşı ön koruma sağlanmış olur. Kullanacağınız kristalin değeri 4 MHz olabilir.

NOT-2: PIC mikrodenetleyicilerinin (MCLR) girişleri HV programlama için kullanıldıkları gibi ayrıca donanımsal resetleme için de kullanılır. Master CLeaR sözcüklerinden gelir ve mikrodenetleyici için fiziksel ana reset girişidir. Eğer bu giriş mikroC programının proje editöründen devre dışı bırakılmadıysa, diğer bir ifadeyle normal giriş portu olarak ayarlanmadıysa RESET işlevine sahip olur.

PIC mikrodenetleyicilerinde fiziksel reset girişinin lojik-0 (aktif düşük) seviyeye gelmesi durumunda resetleme işlemi gerçekleşir. Dolayısıyla program başlangıç adresi olan 0000h adresine döner. Reset işlevi etkinken (MCLR) girişine besleme voltajı uygulanmalıdır. Bu uygulama yaygın olarak 4,7 k – 10k arası bir direnç üzerinden gerçekleştirilir. Mikrodenetleyiciler hassas devre elemanlarıdır. Reset girişlerinin kararlı çalışmasını temin etmek için Şekil 2.8’de görülen reset düzeneği de kurulabilir. R3 direncinin 40 kΩ’dan küçük ve R4 direncinin 100 Ω - 1 kΩ arası olması istenir.

Şekil-2.8

NOT-3: Ayrıca yapılan ilk uygulamada görüldüğü üzere boşta kalan diğer port pinleri topraklanmıştır. Her uygulama için bunun yapılmasına gerek yoktur. Ancak gerçek endüstriyel uygulamalarda kullanılmayan portların da temizlenmesi ve mümkünse topraklanması devrenin çalışmasını etkileyecek istenmeyen parazitlerin toprak hattına iletilmesini sağlar. PIC16F628A’nın fiziksel özellikleri ve proje editörünün kullanımı ile ilgili ayrıntılı bilgi için EK-D'ye bakınız.

  • PIC Pinlerinden içeri doğru akacak akım (SINK akımı) 25 mA’dir.
  • PIC pinlerinden şaseye akacak akım (SOURCE akımı) 25 mA’dir.
  • Şekil-7'deki örnekte kullanılan mikrodenetleyici için, Port-A ve Port-B ikisinden toplamda çekilebilecek maksimum akım 200 mA’dir.
  • Bu akım seviyelerini aşmamak için (LED bağlantısı durumunda, vb.) 330-470 Ohm arası direnç kullanılması uygundur.
  • Butonların Lojik bir gerilimi sağlama dirençleri (PULL UP) 4.7 kΩ ile 10 kΩ dirençlerden seçilmelidir.
  • PIC Donanımında Analog Dijital (ADC) var mı? Karşılaştırıcı Var mı? Bunları bilmemiz gerekir. Bu yapılar varsa ve kullanılmayacaksa programda bu donanımlar kapatılmalıdır (kapatılmazsa programı olumsuz etkileyebilir).

Şekil 2.9’da ilk uygulamanın sembolik devre kurulumu gösterilmiştir. Devrede LM1117 Low-Dropout doğrusal gerilim regülatörü ile yapılmış bir besleme modülü kullanılmıştır. Bu regülatörün farklı çıkış voltajı sağlayan modelleri mevcuttur. Geniş bir giriş gerilimi aralığında çalışır ve çıkış gerilimine çok yakın giriş seviyelerinde bile regülasyon yapmaya devam eder. LM1117 hakkında ayrıntılı bilgi için EK I8’e bakmanız tavsiye edilir.

Şekil-2.9

Şekil 2.10’da ise örnek devrenin delikli devre paleti üzerine kurulumu gösterilmiştir. Burada ise beslemesini USB adaptörü üzerinden de alabilen yine benzer bir voltaj regülatör kartının kullanımı görülmektedir. Bu tür hazır modüler kartlar yerine, SOT-223 kılıfında LM1117’yi baskı kart üzerinde ayrışık olarak kullanabileceğiniz gibi, delikli plaket ve devre paneli için kullanışlı TO-92 kılıflı 78L05 de kullanabilirsiniz. 78L05 gerilim regülatörü LM1117’ye göre daha yüksek giriş gerilimlerinde de düşük ısı tüketimiyle çalışma kararlılığı gösterir.

Şekil-2.10

MikroC program editöründe kullanıcının yazdığı program kodunu adım adım çalıştırmasını ve program sayıcının (PC) durumunu izlemesini sağlayan hata izleyicisi (Debugger) bulunmaktadır. Programın ana menü çubuğunda Run→Start Debugger adımıyla ya da F9 tuşuyla hata izleyici çalıştırılabilir. Ardından Şekil 2.11’de gösterilen adımlayıcı butonuyla ya da F7 tuşuyla programın adım adım çalıştırılması sağlanır. Hata izleyicisi sayesinde programınızın ne kadar sürede tamamlandığını da izleyebilirsiniz. Böylece hassas ve zamanlamanın önemli olduğu uygulamalarda size yardımcı olur.

Şekil-2.11

mikroC'de Desteklenen Veri Türleri

Programlamada bir sayı ya da bir metin bilgisi doğrudan kullanılamazlar ve işlemler veri değişkenleri ile yapılır. mikroC’de aritmetik tür tanımlayıcıları şu sözcüklerden oluşmaktadır: ‘void’, ‘char’, ‘int’, ‘float’ ve ‘double’. Ayrıca bu değişken türleriyle birlikte ‘short’, ‘long’, ‘signed’ ve ‘unsigned’ öntakısı kullanılır. Bu sözcüklerden hem tamsayı formatında (integral) hem de kayan nokta formatında (floating-point) sayısal değişken üretebilirsiniz. Metin tabanlı değişkenlerde ‘char’ veri türü kullanılır. Her değişkenin mikrodenetleyici program belleğinde tuttuğu bir yer vardır.

Bellek miktarını verimli kullanmak için olabildiğince düşük boyutlu değişken türleriyle çalışılmalıdır. Tablo 2.2’de tamsayılardan oluşan değişken türleri gösterilmiştir. Signed işaretli anlamına gelir ve ‘char’ veri türü dışındaki tüm değişkenler varsayılan olarak ‘signed’ türündedir. Yalnızca ‘char’ veri türü varsayılan olarak işaretsizdir.

Tablo-2.2

Tablo 2.3’te kayan nokta değişken türleri gösterilmiştir. Eğer yüksek mertebeden matematiksel işlemler yapılacaksa ve noktalı sayılar kullanılacaksa bu veri türleri tercih edilir.

Tablo-2.3

Program Kontrol Deyimleri

Programların kontrol altında tutulması için bir dizi kontrol deyimi kullanılır. Bu kontrol deyimleri şu şekildedir:

  1. if – else if – else
  2. For
  3. Do-While
  4. Do
  5. GOTO
  6. break
  7. switch case

Bu komutlar sayesinde döngü yapabilir, butonla kontrol sağlanabilir veya bir değişkene bağlı olarak işleyen farklı işlemler yapılabilir.


if(şart) şeklinde kullanılır ya da
if(şart1 bağlaç sart2) gibi araya birden fazla bağlaç konarak kullanılır.
if(şart){
    // yapılacak işler
}

Şimdi “unsigned char” veri tipinde “sifre” değişkenimiz olsun ve “sifre” verisinin, örneğin “1881” olduğunda işlem yapan bir program parçası yazalım. Öncelikle program başlangıcında;

unsigned char sifre;

Tanımlamasını yapalım. PIC’in RAM hafıza alanından bir yer tahsisi yapılmış oldu. Program kodu;


if(sifre==1881) lambayı yak; // eğer şarta bağlı tek işlem varsa {} gerek yoktur.
if(sifre==1881){
    Lambayı yak;
    Fan çalıştır;
}

şeklinde alt alta sıralanabilir.

Şimdi bir “sayac” değişkeni tanımlayalım ve bu sayacı 7’ye kadar saydırıp PORTB’de gösterelim. Bu arada bu tür uygulamalarda 16F628A kullanmak daha mantıklıdır. Bunun nedeni 16F84A’dan daha ucuz ve 2Kword program belleğine sahip olmasıdır. Ayrıca gerektiğinde dâhili osilatörü kullanılabilir ve toplamda 15 pin çıkış veya 16 pin giriş olabilmektedir.

Tablo-2.4


unsigned char sayac=0;/*Ana fonksiyonun dışında "Evrensel" değişken tanımlanıyor*/
void main() {
/* Port ayarlamaları ve diğer ayarlar yapılıyor */
 TRISB=0x00;
 PORTB=0;
 TRISA=0x00;
 PORTA=0;
 CMCON =0x07; /*Comparator(karşılaştırıcı) kapatıldı pinler dijitale ayarlandı*/
 for(;;){ /*Program sonsuz döngü içinde çalışacak for(;;) sonsuz döngü */
  PORTB=sayac;
  delay_ms(1000);/*sayma işlemi 1 saniye ara ile yapılıyor*/
  sayac=sayac+1;/*sayac bir artırılıp tekrar sayac değişkenine yazılır*/
  if(sayac==8)sayac=0; /* sayac değeri kontrol ediliyor ve
    7'ye kadar saymasını istediğimiz için sayac 8 olur olmaz sıfırlıyoruz*/
 }
}

Devrenin PROTEUS-ISIS® çizimi Şekil 2.12’de gösterilmiştir.

Şekil-2.12

Döngü Yapıları

  • For
  • While
  • Do-While
Tanım: Döngüler bir programın ya da program parçasının kaç defa çalışacağını ya da sonsuza kadar mı çalışacağını belirleyeceğimiz yapılardır. Döngüler hemen hemen bütün programların bel kemiğini oluşturur.

For Döngüsü

Kullanım yapısı: For (DöngüBaşlangıçdeğeri; DöngüBitişDeğeri; ArtışVeyaAzalışMiktarı) {Buraya Maddeler halinde Yapılacak işlemler yazılır;}

Yukarıdaki yapının çalışması için {} parantezlere ve “;” Noktalı virgüllere dikkat edilmelidir. Programalarımızda For döngüsünü sıklıkla kullanacağımız için iyi öğrenilmesi gerekmektedir ve en esnek kullanımı olan döngüdür. Öncelikle döngüde kullanılacak değişkenin tanımlaması yapılmalıdır. Bunun için yaygın olarak tek harfli (i, j, k, p, q ,r) gibi isimlendirmeler kullanılır. Tablo2.5'te 10 ledle yürüyen ışık program parçasının kodlaması for döngüsüyle yapılmıştır.

Tablo-2.5


unsigned char sayac=255;
unsigned int i;
void main() {
 TRISB=0x00;
 PORTB=0;
 TRISA=0x00;
 PORTA=0;
 CMCON =0x07;
 for(i=0;i<=8;i++){
  PORTB=sayac>>i;
  delay_ms(500);
 }
}

Endekslemede kullanılan i sayısı 0’dan başlamıştır. i sayısı ++ matematiksel operatörüyle 1 artırılmış ve tekrar i içine yazılmıştır. for döngüsü içine girilmiş, i değeri 1’dir ve PortB’ye aktarılan sayac=255 değeri i’nin değeri kadar >> operatörüyle sağa kaydırılmıştır. 255 desimal değeri B11111111 binary değerine karşılık gelir ve ilk durumda 8 bitlik B portunun tüm pinleri 1 yapılmış olur. i değişkeni her defasında 1 artırılarak sayac değeri i değeri kadar sağa kaydırılır. 9’ncu döngüde B portunda B00000000 bilgisi elde edilir.

While Döngüsü


    while (şart ifadesi)
    {
        // Burada şart sağlandığı sürece komutlar çalıştırılır;
    };

While ile for’la yapılan döngüler yapılabilir ancak while döngüsü genel olarak belli bir şartın sağlanması ya da sağlanmaması koşuluna göre çalışma periyodunun devam ettirilmesinin istendiği durumlarda kullanılır.

Kelime Uzunluğu: Mikroişlemcinin her saat darbesinde işlem yapabileceği bit sayısına kelime (Word) uzunluğu denir. İşlenen veriler işlemcinin özelliğine göre 4-bit, 8-bit, 12-bit, 14-bit, 16-bit, 24-bit, 32 bit ve 64-bit uzunluğunda olabilir. Aynı mikroişlemci ya da mikrodenetleyicinin kelime uzun-luğu, veri yolu uzunluğu, adres yolu uzunluğu farklılık gösterebilmektedir. Şekil 4’te farklı kelime uzunlukları gösterilmiştir.

Tablo 2.6


unsigned char sayac=255;
unsigned int i;
void main() {
 PORT
 i=0;
 while(i<=8){
  PORTB=sayac>>i;
  i++;
  delay_ms(500);
 };
}

Başlangıçta i=0 yapılır. i’nin ilk değeri 0 olduğundan sayac=255 değeri aynen PORTB’ye atanır. Ardından i değişkeni 1 artırılır. i’nin yeni değeri 8’den küçük ya da 8’e eşitse döngü devam ettirilir.

Do While Döngüsü


do
{
    // Burada şart sağlandığı sürece komutlar çalıştırılır;
}while(şart ifadesi);

While döngüsünden farklı olarak, şart kontrolü işlemler yapıldıktan sonra gerçekleşir. Dolayısıyla do-while döngüsü while döngüsüne göre en az 1 kez döner. Tablo 2.7’deki Örnek Program 05’te Do While ve While döngüleri birlikte kullanılmıştır. “While(1)” yapısıyla sonsuz döngü oluşturulmuştur. Ayrıca mikroC programının “Vdelay_ms” fonksiyonu kullanılarak önceden tanımladığımız bir tam sayı değişkenine göre gecikmeyi istediğimiz gibi ayarlayabildiğimiz “gecikme()” isimli bir prosedür yazılmıştır.

Tablo 2.7


unsigned char sayac=255;
unsigned int sure=100;
unsigned int i;
void gecikme(){
 Vdelay_ms(sure);
}
void main() {
 TRISB=0x00;
 PORTB=0;
 TRISA=0x00;
 PORTA=0;
 CMCON =0x07;
 while(1){
  i=0;
  do{
   PORTB=sayac>>i;
   i++;
   gecikme();
  }while(i<=8);
  i=0;
  do{
   PORTB=sayac<<i;
   i++;
   gecikme();
  }while(i<=8);
 };
}

Şekil-2.13

Her üç döngü uygulamasında yazılan kodun çalışması, PROTEUS-ISIS® programında tüm B pinlerine LED bağlanmış devre uygulamasıyla izlenebilir (Bkz. Şekil 2.13). Pic programına dahil ettiğimiz değişken değerleri veya sayılar dış dünyada ikilik sayı sisteminde olan karşılıkları ile aktarılır. Örneğin PORTB=5; şeklinde yazdığımız bir programın gerçek dünyadaki görüntüsü 00000101 şeklindedir. Bir programda değişken değerleri, onluk olarak (1,2,3,7,5 gibi), ikilik olarak (PORTB=0B01010011, 0B1111111, 0B01010111 gibi) ya da hekzadesimal olarak (onaltılık sayı sistemi) (PORTB=0x0A, 0x14, 0x15, 0xff, 0x00) yazılabilir.

Mikrodenetleyici Seçimi

Mikrodenetleyiciler daha çok endüstriyel uygulamalara yönelik olarak amaca özel geliştirilirler. Bu sebeple piyasada çok fazla çeşit bulunmaktadır ve bunlardan birini seçmek doğrudan yapılacak iş ile ilgilidir.

Günümüzde mikroişlemci ve mikrodenetleyiciler üreten irili ufaklı pek çok firma bulunmaktadır. Bunlara örnek olarak INTEL, MOTOROLA, AMD, PHILIPS, SIEMENS, TEXAS INS., DALLAS, MICROCHIP (ve ATMEL), HITACHI, MITSUBISHI, SGS-THOMSON, ANALOG DEVICES, NATIONAL gibi firmalar sayılabilir. Bu firmaların bazıları sadece kendilerine özgü işlemcileri piyasaya sürerken bazıları ilk üretimi ve patenti bir başka firmaya ait olmakla birlikte, orijinal işlemci ile uyumlu fakat çeşitli başka ek özelliklere de sahip türev ürünler (derivatives) üretebilmektedir. Neredeyse her mikroişlemci (CPU) üreticisinin ürettiği birkaç mikrodenetleyicisi bulunmaktadır. Her firma ürettiği ürününe isim ve parça numarası verirken kendine özgü birtakım rakamlar ve karakterler kullanırlar. Bu rakam ve karakterler, ürünler hakkında kısa bilgiler de vermektedir.

Bir uygulamaya başlamadan önce hangi firmanın ürününün kullanılacağına, daha sonra da hangi numaralı denetleyicinin kullanılacağına karar vermek gerekir. Bunun için mikrodenetleyici gerektiren uygulamada hangi özelliklerin olması gerektiği önceden bilinmesi gerekir. PIC mikrodenetleyicisi genel olarak şu özellikleri olup olmadığına ve bunlardan hangisi ya da hangilerinin kullanılacağına göre seçilir:

  • Port sayısı,
  • Seri iletişim teknolojileri (SPI, I2C, USART, vb.),
  • Darbe genişliği modülasyonu (PWM),
  • Analog giriş/çıkış (ADC/DAC – analog-dijital, dijital-analog dönüştürücü),
  • Karşılaştırıcı (comparator) modülleri,
  • Program ve veri belleği özellikleri,
  • Çalışma hızı,
  • Düşük güç tüketimi desteği ve eXtreme Low Power teknolojisi,
  • Harici kesme,
  • Zaman kesmesi sayıları,
  • Kayan nokta hesaplaması, vb.

Tablo 2.8’de bazı mikrodenetleyiciler için teknik özellikler listelenmiştir. Bu özelliklere göre ihtiyaca uygun mikrodenetleyici seçilebilir.

Tablo 2.8

Giriş seviyesi başlangıç uygulamalarında ağırlıklı olarak Microchip® firmasının 8 bitlik veri ve adres yoluna sahip, 14 bitlik program kodu olan PIC16F628A modeli kullanılacaktır. 16F628A dâhili osilatöre, 1 tane CCP modülüne, 2 adet karşılaştırıcı girişine ve 3 adet Timer kaydedicisine sahip bir mikrodenetleyicidir. 20 MHz hıza kadar çalışabilmektedir. PIC16F628A 8 bitlik A portu ve 8 bitlik B portundan oluşur. Dâhili osilatörünün aktif edilmesiyle birlikte 16 pini I/O ve 1 pini de yalnızca giriş olarak kullanılabilir.

PORTA portunun pinleri;
PORTA.B0, PORTA.B1, PORTA.B2, PORTA.B3, PORTA.B4, PORTA.B5, PORTA.B6, PORTA.B7

PORTB portunun pinleri;
PORTB.B0, PORTB.B1, PORTB.B2, PORTB.B3, PORTB.B4, PORTB.B5, PORTB.B6, PORTB.B7
olarak kodlanır. PORTA.B5 pini (MCLR) yalnızca giriş olarak programlanabilir.

Şekil 2.14’ün sol tarafında PIC16F628A’nın bacak bağlantıları gösterilmiştir. Şekilden görüldüğü üzere bir bacağın birden fazla görevi olabilmektedir. Eski nesil PIC mikrodenetleyicilerinin veri kılavuzlarında bu görevler bacak bağlantıları üzerinde gösterilirdi. Ancak yapılan bir revizyonla 8 bitlik mikrodenetleyicilere de pin giriş/çıkışını yönlendirme anlamına gelen PPS (Peripheral Pin Select) özelliği getirilmiştir. Aynı şeklin sağ tarafında PPS özelliğine sahip yeni nesil PIC16(L)F18424-44’ün bacak bağlantısı gösterilmiştir. Görüldüğü üzere görevler gösterilmemiştir. Bu yeni nesil mikrodenetleyicilerde Analog hatlar hariç diğer tüm dijital çevresel aygıt donanımlarının giriş ve çıkışı başka portlara yönlendirilebilmektedir. Örnek mikrodenetleyicinin RA3 pini hariç diğer tüm I/O pinleri analog özelliklidir. Bunların hatları sabit kalmakla birlikte, pinlerin sahip olduğu dijital hatların çoğu başka pinlere yönlendirilebilir.

Şekil-2.14

Kitapta kullanılan mikrodenetleyicilerden PIC12F1840 mikrodenetleyicisinin bazı dijital özellikli çevresel aygıt donanımlarının pinleri sınırlı bir aralıkta başka pinlere yönlendirilebilmektedir. Bu işlem APFCON kaydedicisi ile yapılır. Bu özelliğin kullanımını sağlayan kaydedici hakkında bilgiye EK-H’dan ulaşabilirsiniz.

PIC devrelerinde besleme gerilimini 5V’a sabitlemek için 78L05 gibi ya da LM1117 gibi pozitif gerilim düzenleyici entegreleri kullanılmaktadır. XLP gibi düşük güçlü mikrodenetleyicilerde bu voltaj maksimum 3.6 V olmalıdır.

PIC Mikrodenetleyicilerinde sigorta (Fuse) diye adlandırılan ve mikrodenetleyici donanımının birtakım donanımsal özellikleri devreye alması ya da devre dışı bırakması için kullanılan yapılandırma (configuration) bitleri vardır. Kullandığınız programlama editörüne bağlı olarak bu bitlerin nasıl kontrol edileceği değişkenlik göstermektedir. mikroC editöründe ana menü başlığında “ProjectEdit Project” komutuyla açılan proje editörü penceresiyle bu ayarlamalar yapılabilir. Böylece diğer pek çok editörde olduğundan farklı olarak kod yazmaya gerek kalmaz.

Şekil 2.15’te örnek olarak PIC16F628A için karşınıza gelecek bir proje editörü penceresi görülmektedir. İlk uygulamalar için ayarların bu şekilde kalması tavsiye edilir. Kitapta kullanılan PIC12F675, PIC12F1840, PIC16F628A, PIC16F887 ve PIC18F2550 için bu konfigürasyon değişkenlerinin ne anlama geldiği ve nasıl ayarlandıkları EK-D, EK-E, EK-F, EK-G ve EK-H’da ayrıntılı olarak anlatılmıştır.

Şekil-2.15

Mikrodenetleyiciye Program Yüklenmesi

Mikrodenetleyiciye program yüklenmesi için kullanılan çeşitli programlayıcı kartları vardır. Artık günümüzde yaygın olarak USB 2.0 ya da 3.0 arabirim desteğine sahip programlayıcılar kullanılmaktadır. PICkit2 ya da PICkit3 ve en yeni versiyon PICkit4 programlayıcı Microchip firmasınca geliştirilmiş donanımlardır. 12 bit komut uzunluğuna sahip 8 bitlik PIC10 ve PIC12, 14 bit komut uzunluğuna sahip 8 bitlik PIC16, 16 bit komut uzunluğuna sahip 8 bitlik PIC17 ve PIC18, 24 bit komut uzunluğuna sahip 16 bitlik PIC24 ve dsPIC (dijital sinyal işleme özellikli) mikrodenetleyicilerini programlayabilirler.

Şekil-2.16

Şekil 2.16’daki programlayıcı hem ICSP (In-Circuit Serial Programming – Devre Paneli Üzerinde Programlayabilme) olarak hem de harici ZIF soketi ile HVP (High Voltage Programming – Yüksek Voltaj Programlama) yapabilen PICkit3 programlayıcısıdır. Şekil 2.17’de ise MPLAB X® programının son sürümüyle de uyumlu olan ve dâhili donanımsal debugger işlevi de bulunan yeni nesil PICkit4 programlayıcısı gösterilmiştir.

Şekil-2.17

Bir PIC mikrodenetleyicisini programlamak için temelde üç farklı yöntem vardır. Bunlar;

  • Yüksek voltaj programlamasının kullanıldığı normal programlama donanımı kullanmak (High Volt Programming - HVP),
  • Düşük voltaj programlaması (Low Volt Programming - LVP) ve
  • Bootloader ile yüklemedir.

İlk iki yöntemde PIC mikrodenetleyicisinin ICSP olarak etiketli programlama portu kullanılır. Bu portlar normal kullanım ve programlama işlemi için ortak kullanılan bacaklardır (PGD, PGC ve PGM pinleri). Programlama sırasında mikrodenetleyici içindeki programın çalışması durdurulur ve yeni program yüklendikten sonra programlama portları normal çalışma için hazır duruma getirilir.

ICSP ile programlama yapılırken ICSP programlayıcısının 6 bağlantı noktası devre kartında yer alan mikrodenetleyicinin bacaklarına aşağıdaki gibi bağlanır.

VPP (ya da MCLR) : Programlama Voltajı (genellikle 13V)
VCC (ya da VDD) : Besleme (genellikle 5V)
GND (ya da VSS) : Şase (sıfır volt)
PGD – Data : RB7 portu
PGC – Clock : RB6 portu
PGM – LVP Etkin : RB4 portu. Eğer düşük voltaj programlaması kullanılmıyorsa bu pin önemsenmez ve LVP özelliği programlama sırasında iptal edilir.

HVP programlamada, RS232 COM port, paralel port ya da USB port üzerinden bilgisayar ile mikrodenetleyici arasında bağlantı sağlayan donanımlar kullanılır (Bkz. Şekil 2.15 ve 2.16). Bilgisayar üzerinden hex dosyası seri iletişim programlaması yoluyla (ICSP) mikrodenetleyiciye yüklenir.

ICSP ile PIC mikrodenetleyicinin programlanması için gerekli bağlantı yolları ve PIC12F serisi mikrodenetleyici için örnek uygulaması Şekil 2.18’de gösterilmiştir.

Şekil-2.18

NOT: Devre üzerinde programlama özelliğinin düzgün çalışması için, HVP seviyesinde programlayıcı donanımının VPP hattında 13V’luk yüksek gerilim olduğu unutulmamalıdır. Bu voltaj seviyesi mikrodenetleyicinin hâlihazırda üzerinde kurulu olduğu devreye zarar verebilecek bir seviyedir. Ayrıca mikrodenetleyicinin PGD ve PGC girişlerinde yüksek akım çekilmesine neden olan (Ör: 20mA akım çeken bir LED gibi) aşırı yükleme unsurları olmamalıdır. Aksi taktirde yeterli programlama seviyesi elde edilemeyecektir. Bu nedenle Mikrodenetleyici devre kartı üzerindeyken programlama yapılacaksa Şekil 2.19’da gösterildiği gibi programlama girişleri direnç ve diyotlar yardımıyla yalıtılabilir.

Şekil-2.19

Şekil 2.20’de ise PICkit3 programlayıcının harici ZIF soketi kullanılarak 18 bacaklı PIC16F serisi bir mikrodenetleyicinin programlanması gösterilmiştir. Programlayıcı donanımlarında programlanacak mikrodenetleyicinin türüne bağlı olarak ZIF soketine nasıl takılacağı gösterilmektedir. Örneğin PICKit-3 programlama donanımında J1, J2 ve J3 harfleriyle isimlendirilmiş 3 adet campır bulunur. J1 campırının pinleri A-B-C, J2 ve J3 campırlarının pinleri 1-2-3 olarak isimlendirilmiştir. ZIF soketi devresinin arka yüzeyinde 10F, 12F, 16F, 18F, vb. serisine ve bacak sayısına göre mikrodenetleyicinin yerleşim noktası ve campırların konumu gösterilmiştir. PIC16F628A için yapılan örnek uygulamada J1 campırı B, J2 ve J3 campırları 2-3 konumlarına alınmıştır.

Şekil-2.20

Şekil-2.21

Programlama donanımıyla birlikte gelen program yükleme yazılımı çalıştırıldığında her iki bağlantı türünde de mikrodenetleyici algılanır (Bkz. Şekil 2.22). Yüklenecek hex dosyası seçilir ve Yazdırma (Write) komutuyla program mikrodenetleyiciye yüklenir.

Şekil-2.22

Düşük voltaj programlamasında (LVP) VPP voltajı normal besleme seviyesine getirilir. PGM pini bu programlama için kullanılır ve başka hiçbir iş için kullanılamaz. PGM modunu kapatmanın tek yolu mikrodenetleyiciyi bir HVP programlayıcı ile programlamaktır. Bu programlama yönteminde MCU’nun bir pini ziyan olmaktadır. Bu nedenle çok tercih edilen bir yöntem değildir. Çoğunlukla tek bir devre paneli üzerinde yer alan birden fazla mikrodenetleyicinin aynı anda programlanması için kullanılır. Papatya zinciri yoluyla bir master MCU kontrolünde tüm mikrodenetleyiciler sırayla programlanır. Bu durumda VPP’nin normal lojik seviyede olması gerekmektedir.

Bir diğer mikrodenetleyici programlama yöntemi başlangıç yüklemesi (Bootloading) denilen bir yöntemdir. Bazı mikrodenetleyicilerde besleme resetlemesi (Power-On Reset) yapıldığında başlangıç vektörü adresinin konumu diğer MCU’lardakinden farklıdır. Diğer MCU’larda başlangıç vektörü ana programın başlangıç adresine giderken bu MCU’larda ise “Bootstrap” denilen küçük bir program işletilir. Kendi hafızasını programlama kabiliyetine sahip MCU’larda olan bir özelliktir. Resetleme yapıldığında MCU bir müddet normal bağlantı arayüzü üzerinden (COM port) dinlemeye geçer ve yeni bir program yüklenip yüklenmeyeceğini bekler. Eğer yeni bir program yüklemesi varsa mevcut olanın üzerine yeni program yazılır. Bu özelliğe sahip mikrodenetleyiciler hızlı ve pratik şekilde programlanabilir. mikroC programının bu yöntemle programlama yapmayı sağlayan USB HID ara birimli “Bootloader” denilen bir aracı vardır.

Şekil-2.23