Page 1

ÖZET Bu tezde bir mikrodenetleyici ve onun programlama dili kullanılarak bir elektronik saat yapımı ile ilgilenilmiştir. Mikrodenetleyici olarak PIC 16F877 kullanılmıştır. Mikrochip firması tarafından üretilen PIC’i tercih etmemim sebebi çok yaygın bir kullanım alanına sahip olmaları ve düşük bir maliyetle kolay bir şekilde temin edilebilmeleridir. Kitabın 1. bölümünde mikrodenetleyiciler hakkında genel bir bilgi verilmiştir.

2.

bölümde PIC’ler donanımsal olarak tanıtılmış, 3. bölümde ise kullanılan malzemeler ve devrenin çalışması hakkında konuşulmuştur. Son bölümde ise program yapısından söz edilmiştir.

2


ÖNSÖZ

Bize bu bitirme tezi konusunda çalışma imkanı sağlayan, destek veren ve yol gösteren değerli hocam Arş. Görevlisi Sayın XXXXXXXU’ya, ve tezi hazırlamamda yardımcı olan XXXXXXX teşekkürlerimi sunarım. Ayrıca her türlü desteğini gördüğüm aileme ve değerli XXXXXXXXXX teşekkürü bir borç bilirim. Saygılarımla , XXXXXXXXXXXXXX Haziran 2003

3


İÇİNDEKİLER ÖZET..................................................................................................................................2 ÖNSÖZ...............................................................................................................................3 İÇİNDEKİLER...................................................................................................................4 BÖLÜM 1...........................................................................................................................6 1.1Mikroişlemci Nedir ?.................................................................................................6 1.2. Mikrodenetleyici Nedir?.........................................................................................7 1.2.1 Mikrodenetleyicilerin, Mikroişlemcilere Göre Avantajları...............................7 1.3 Mikrodenetleyiciler Hakkında Genel Bilgiler..........................................................8 1.3.1 Neden PIC?........................................................................................................9 1.3.2 PIC Programlamak İçin Nelere İhtiyacınız Var ?............................................10 BÖLÜM 2 ........................................................................................................................14 2.1. PIC DONANIM ÖZELLİKLERİ..........................................................................14 2.1.1. PIC Çeşitleri...................................................................................................14 2.1.2. PIC Bellek Çeşitleri........................................................................................15 BÖLÜM 3.........................................................................................................................17 16F877 ile SAAT ve TERMOMETRE UYGULAMASI................................................17 3.1. Devre Şeması ........................................................................................................18 3.2. 16F877...................................................................................................................19 3.2.1. 16F877’nin Ayak Bağlantıları........................................................................19 3.2.2 Besleme Gerilimi.............................................................................................20 3.2.3. Saat Uçları ve Saat Osilatörü Çeşitleri...........................................................21 3.2.4. Reset Uçları ve Reset Devresi........................................................................23 3.2.5. Giriş-Çıkış Portları.........................................................................................24 3.2.6. Hafızası...........................................................................................................25 3.3. LM 35 Sıcaklık Sensörü......................................................................................28 3.3.1. Özelikleri........................................................................................................28 3.4. Display’ler ..............................................................................................................1 3.4.1. Display Ayak Bağlantıları................................................................................1 4


3.4.2. Display’lerin Sürülmesi....................................................................................2 3.5. Transistörler.............................................................................................................4 3.6. Kristaller..................................................................................................................4 3.7. LM324.....................................................................................................................4 3.8. Ayar Butonları.........................................................................................................5 3.9. Güç Katı...................................................................................................................6 3.10. Baskı Devre Şemaları............................................................................................6 BÖLÜM 4...........................................................................................................................9 PIC PROGRAMI................................................................................................................9 4.1. PIC Assembly..........................................................................................................9 4.1.1. Assembler Nedir ?............................................................................................9 4.1.2.PIC Assembly Dili Nedir?.................................................................................9 4.2. Özel Registerler.....................................................................................................10 4.2.1. Intcon Register................................................................................................10 4.2.2. PIR1 Register..................................................................................................12 4.2.3. Status Register................................................................................................14 4.2.4. Adcon0 Register.............................................................................................15 4.2.5. Adcon1 Register.............................................................................................16 4.2.6. PIE1 Register..................................................................................................17 4.3. Program Algoritması.............................................................................................19 4.4. PIC Program Kodları.............................................................................................20 tobcd.h..........................................................................................................................24 KAYNAKLAR.................................................................................................................28

5


BÖLÜM 1

1.1 Mikroişlemci Nedir ?

Günümüzde kullanılan bilgisayarların özelliklerinden bahsedilirken duyduğunuz 80386, 80486, Pentium II, Pentium-lll birer mikroişlemcidir. Mikroişlemciler bilgisayar programlarının yapmak istediği tüm işlemleri yerine getirdiği için, çoğu zaman merkezi işlem ünitesi olarak da adlandırılır. Kişisel bilgisayarlarda kullanıldığı gibi, bilgisayarla kontrol edilen sanayi tezgahlarında ve ev aygıtlarda da kullanılabilmektedir. Bir mikroişlemcinin işlevini yerine getirebilmesi için aşağıdaki yardımcı elemanlara ihtiyaç duyar. Bunlar: 1. Giriş ünitesi. 2. Çıkış ünitesi. 3. Bellek ünitesi. Bu üniteler merkezi işlem ünitesi entegrenin dışında, bilgisayarın ana kartı üzerinde bir yerde farklı entegrelerden veya elektronik elemanlardan oluşur. Aralarındaki iletişimi ise veri yolu ), adres yolu denilen iletim hatları yapar.

Şekil.1.1. Bir mikroişlemci sisteminin temel bileşenlerinin blok diyagramı 6


1.2. Mikrodenetleyici Nedir?

Bir bilgisayar içerisinde bulunması gereken temel bileşenlerden RAM, giriş-çıkış ünitesinin tek bir entegre içerisinde üretilmiş biçimine mikrodenetleyici denir. Bilgisayar teknolojisi

gerektiren

uygulamalarda

kullanılmak

üzere

tasarlanmış

olan

mikrodenetleyiciler, mikroişlemcilere göre çok daha basit ve ucuzdur. Günümüz mikrodenetleyicileri otomobillerde, kameralarda, cep telefonlarında, fax-modem cihazlarında, fotokopi, radyo, TV, bazı oyuncaklar gibi sayılamayacak kadar pek çok alanda kullanılmaktadır.

Şekil. 1.2. Bir mikrodenetleyici sisteminin temel bileşenlerinin blok diyagramı Günümüz mikrodenetleyicileri birçok entegre üreticisi tarafından üretilmektedir. Her firma ürettiği entegreye farklı isimler vermektedir. Örneğin Microchip firması ürettiklerine PIC adını verirken, Intel’in ürettiği ve 1980’lerin başında piyasaya sürüldüğü 8051, bazen MCS-51 olarak da adlandırılır. 1.2.1 Mikrodenetleyicilerin, Mikroişlemcilere Göre Avantajları

Mikroişlemci ile kontrol edilecek bir sistemi kurmak için en azından şu üniteler bulunmalıdır; merkezi işlem ünitesi, rastgele erişimli hafıza, giriş-çıkış ve bu ünitelerin 7


arasındaki veri alış verişini kurmak için veri yolu gerekmektedir. Elbette bu üniteleri yerleştirmek için baskılı devreyi de unutmamak gerekmektedir. Mikrodenetleyici ile kontrol edilecek sistemde ise yukarıda saydığımız ünitelerin yerine geçecek tek bir entegre (Mikrodenetleyici) ve bir de devre kartı kullanmak yetecektir. Tek entegre kullanarak elektronik çözümler üretmenin maliyetinin daha düşük olacağı kesindir. Ayrıca da kullanım ve programlama kolaylığı da ikinci bir avantajıdır. İşte yukarda saydığımız nedenlerden dolayı son zamanlarda bilgisayar kontrolü gerektiren elektronik uygulamalarda mikrodenetleyici kullanmaya eğilimin artmasının haklılığını ortaya koyuyor.

1.3 Mikrodenetleyiciler Hakkında Genel Bilgiler

Neredeyse her mikroişlemci (CPU) üreticisinin ürettiği birkaç mikrodenetleyicisi bulunmaktadır. Bu denetleyicilerin mimarileri arasında çok küçük farklar olmasına rağmen aşağı yukarı aynı işlemleri yapabilmektedirler. Her firma ürettiği entegreye bir isim ve özelliklerini birbirinden ayırmak için de parça numarası vermektedir. Örneğin Microchip firması ürettiklerine PIC adını, parça numarası olarak da 120508, 16084, 16F84, 16C711 gibi kodlamalar verir. Intel ise ürettiği mikrodenetleyicilere MOS-51 ailesi adını vermektedir. Genel olarak bu adla anılan mikrodenetleyici ailesinde farklı özellikleri bulunan ürünleri birbirinden ayırt etmek için parça numarası olarak da 8031AH, 8051AH, 8751AHP, 8052AH, 8005İFA gibi kodlamalar kullanılmaktadır. Bir uygulamaya başlamadan önce hangi firmanın ürü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 gereklidir. Aşağıda bu özellikler sıralanmıştır:

8


Programlanabilir dijital paralel giriş/çıkış.

Programlanabilir analog giriş/çıkış.

Seri giriş/çıkış (senkron, asenkron ve cihaz denetimi gibi).

Motor veya servo kontrol için darbe sinyali çıkışı.

Harici giriş vasıtasıyla kesme.

Zamanlayıcı vasıtasıyla ile kesme.

Harici bellek arabirimi.

Harici yol arabirimi (PC, ISA gibi).

Dahili bellek tipi seçenekleri(ROM, EPROM, PROM ve EEPROM).

Dahili rast gele erişimli hafıza seçeneği.

Kayan nokta hesaplaması.

Daha da ayrıntıya girecek olursak bu listede sıralanacak özellikler uzayıp gidecektir. Şimdi de bizim burada ele aldığımız Microchip firmasının ürünü olan PIC’i neden seçtiğimize değinelim. Microchip firması, 8-bitlik mikrodenetleyici ve EEPROM üreten bir Amerikan şirketidir. Arizona eyaletinde iki, Tayland ve Tayvan’da da birer tane olmak üzere toplam dört fabrika ile kendi alanında dünyada söz sahibi olan bir entegre üreticisidir.

1.3.1 Neden PIC?

Bilgisayar

denetimi

gerektiren

bir

uygulamayı

geliştirirken

seçilecek

mikrodenetleyicinin ilk olarak tüm isteklerinizi yerine getirip getirmeyeceğine, daha sonra da maliyetinin düşüklüğüne bakmalısınız. Ayrıca, yapacağınız uygulamanın devresini kurmadan önce seçtiğiniz mikrodenetleyicinin desteklediği bir yazılım üzerinde simülasyonunu yapıp yapamayacağınızı da dikkate almalısınız. Yukarda saydığımız özellikleri göz önüne aldığımızda Microchip firmasının ürettiği PlC’leri kullanmak en akılcı bir yol olduğunu görülmektedir. 9


PIC, adını İngilizce’deki Peripheral lnterface Controller (çevresel üniteleri denetleyici) cümlesindeki kelimelerin baş harflerinden almış olan bir mikrodenetleyicidir. Eğer bu cümleyi Türkçe’ye çevirirsek, çevresel üniteleri denetleyici arabirim gibi bir anlam çıkacaktır. PIC gerçekten de çevresel üniteler adı verilen lamba, motor, role, ısı ve ışık sensörü gibi giriş-çıkış elemanların denetimini çok hızlı olarak yapabilecek şekilde dizayn edilmiş bir entegredir. RISC mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden bir PIC’i programlamak için kullanılacak olan komutlar oldukça basit ve sayı olarak da azdır. 1980’lerin başından itibaren uygulanan bir tasarım yöntemi olan RISC (İndirgenmiş Komut Grup Bilgisayar) mimarisindeki temel düşünce, daha basit ve daha az komut kullanılmasıdır.

1.3.2 PIC Programlamak İçin Nelere İhtiyacınız Var ?

PIC

16/17

mikrodenetleyicilerin

programlamasını

ve

uygulamalarda

nasıl

kullanılacağını öğrenmek için neleri bilmek ve nelere sahip olunması gerekenler aşağıda sıralanmıştır: •

IBM uyumlu bir bilgisayara sahip olmak ve temel kullanımları bilmek.

Bir metin editörünü kullanmasını bilmek.

Bir assembler programına sahip olmak.

PIC programlayıcı donanımına sahip olmak.

PIC programlayıcı yazılımı.

PIC

Programlanmış PIC’i denemek için borda, güç kaynağı ve elektronik elemanlar.

10


1.3.2.1 IBM Uyumlu Bilgisayar

Assembly program kodlarını kolayca yazabilmek, doğru ve hızlı bir şekilde PIC’in program belleğine gönderebilmek için bilgisayara ihtiyaç vardır. Bir metin editörü kullanarak yazılan program kodları, derlendikten sonra PIC’e gönderilmesi gerekir. Program kodlarının PIC’e yazdırma işlemi paralel veya seri porta bağlanan bir elektronik devre aracılığı ile yapılır. Bu işleri yapabilmek için bilgisayarın temel kullanım fonksiyonlarını bilmeniz gerekir.

1.3.2.2 Metin Editörü

Assembly dili komutlarını yazıp bir metin dosyası oluşturmak için EDIT veya NotPad gibi bir editörü kullanabilmeniz gerekir. İsterseniz ASM uzantılı metin dosyalarınızı yazabileceğiniz PFE editörünü de kullanabilirsiniz. 1.3.2.3 Assembly Programı

PIC Assembly dili adı verilen ve toplam 35 komuttan oluşan programlama dilinin tamamı burada verilmiştir. Bu komutları basit bir editörde yazabiliyoruz. Ancak, İngilizce’deki bazı kelimelerin kısaltmasından oluşan bu dilin komutlarını P1C’in anlayabileceği makine diline çeviren bir programa ihtiyacımız vardır. Bu programa assembler adını veriyoruz. Text dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren MPASM'nin hem DOS altında hem de WINDOWS altında çalışan versiyonu bulunmaktadır. Bu program Microchip firmasının internetteki www.microchip.com adlı sitesinden parasız olarak yüklenilebiliyor. MPASM’nin kullanımı hakkında detaylı bilgiyi 2. bölümde bulacaksınız. 11


Microchip bir de içerisinde hem metin editörü hem MPASM assembler programını bulunduran MPLAB programını PIC programlayıcılarının kullanımına sunmaktadır. Aşağıdaki şekilde MPASM’nin WINDOWS sürümünün görünüşü verilmektedir.

Şekil.1.3. MPASM programının görünüşü.

1.3.2.4 PIC Programlayıcı Donanımı

Makine

diline

çevrilmiş

program

kodlarını

bilgisayardan

alıp

PIC

16/17

mikrodenetleyicisine yazmak için bir elektronik devreye ihtiyaç vardır. Bu elektronik devre, birçok üretici tarafından piyasada satılmaktadır. Bu kitaptaki örnek programları verebilmek için programladığımız PIC’leri aşağıda görülen devre kartını kullandık. ProtoPlC adı verilen bu kartla 50’den fazla PICmicro programlanabilmektedir. ProtoPlC’in LITE ve PRO olarak iki ayrı sürümü bulunmaktadır. LITE sürümü, PIC’lerle ilgilenmeye yeni başlayanlar için ve eğitim amacıyla düşünüldüğünden sadece 12


16F8xx serisi PlCmicro’ları, PRO sürümü ise hemen hemen tüm PlCmicro’lar programlayabilmektedir.

1.3.2.5 PIC Programlayıcı Yazılımı

MPASM tarafından derlenerek makine diline dönüştürülmüş assembly programı kodlarının PIC’e yazdırılmasında kullanılan bir programa gereksinim vardır. Programlayıcı yazılımları, PIC’i programlamak için kullanılan elektronik karta bağımlıdır. Yani her programlayıcı yazılımı ile elinizde bulunan karta kod gönderemeyebilirsiniz. Genellikle programlama kartı üreticileri, ürettikleri karta uygun yazılımı da birlikte sunarlar. Biz burada PIC16F877 programlama kartına gönderdiği kodlarla bu PIC’leri sorunsuz olarak programlayan P16PRO adlı programı kullandık.

13


BÖLÜM 2

2.1. PIC DONANIM ÖZELLİKLERİ

2.1.1. PIC Çeşitleri

Microchip ürettiği mikrodenetleyicileri 4 farklı gruba ayırarak isimlendirmiştir. PIC ailelerine isim verilirken kelime boyu göz önüne alınmıştır. Şimdi kelime boyunun ne anlama geldiğine bakalım. Mikrodenetleyiciler kendi içlerindeki dahili veri saklama alanları olan saklayıcıları arasındaki veri alış verişini farklı sayıdaki bitlerle yaparlar. Örneğin 8088 mikro işlemcisi entegre içerisindeki veri alış verişini 16-bit ile yaparken, Pentium işlemcileri 32-bitlik verilerlerle iletişim kurarlar. Bir merkezi işlem birimi dahili veri yolu uzunluğuna kelime boyu denir. Microchip PIC’leri 12/14/16 bitlik kelime boylarında üretmektedir ve buna göre aşağıdaki aile isimlerini vermektedir. PICİ6C5XX ailesi 12-bit kelime boyu, PIC16CXXX ailesi 14-bit kelime boyu, PI0İ7CXXX ailesi 16-bit kelime boyu, PIC12OXXX ailesi 12-bit/14-bit kelime boyuna sahiptir. Bir merkezi işlem birimi entegre dışındaki harici ünitelerle veri alışverişini kaç bit ile yapıyorsa buna veri yolu bit sayısı denir. PIC’ler farklı kelime boylarında üretilmelerine rağmen harici veri yolu tüm PIC ailesinde 8-bittir. Yani bir PIC, girişçıkış portu aracılığı ile çevresel ünitelerle veri alışverişi yaparken 8-bitlik veri yolu kullanır. PIC programlayıcıları program kodlarını yazarken bir komutun kaç bitlik bir kelime boyundan oluştuğuyla pek fazla ilgilenmezler. Seçilen bir entegreyi programlarken


uyulması gereken kuralları ve o entegrelerle ilgili özelliklerin bilinmesi yeterlidir. Bu özellikler PIC’in bellek miktarı, giriş-çıkış portu sayısı, analog-dijital dönüştürücüye sahip olup olmadığı, kesme fonksiyonlarının bulunup bulunmadığı, bellek tipinin ne olduğu (EPROM, EEPROM vb.) gibi bilgilerdir.

2.1.2. PIC Bellek Çeşitleri

Farklı özellikte program belleği bulunan PIC’ler microchip firması tarafından piyasaya sürülmektedir. Bunlar: •

Silinebilir ve programlanabilir bellek.

Elektriksel olarak silinebilir ve programlanabilir bellek

Sadece okunabilir bellek

Her bir bellek tipinin kullanılacağı uygulamaya göre avantajları ve dezavantajları vardır. Bu avantajlar; fiyat, hız, defalarca kullanmaya yatkınlık gibi faktörlerdir. EPROM bellek hücrelerine elektrik sinyali uygulayarak kayıt yapılır. EPROM üzerindeki enerji kesilse bile bu program bellekte kalır. Ancak silip yeniden başka bir program yazmak için ultraviyole ışığı altında belirli bir süre tutmak gerekir. Bu işlemler EPROM silici denilen özel aygıtlarla yapılır. EPROM bellekli PIC’ler iki farklı ambalajlı olarak bulunmaktadır: •

Seramik ambalajlı ve cam pencereli olan tip, silinebilir olan tiptir.

Plastik ambalajlı ve penceresiz olan tipler ise silinemez (OTP) tiptir.

Seramik ambalajlı ve pencereli olan bellek içerisindeki programın silinmemesi için pencere üzerine ışık geçirmeyen bir bant yapıştırılır. Ültraviyole ışığı ile silinmesi istenildiğinde bu pencere açılır ve silici aygıt içerisinde belirli bir süre bekletilir. Plastik ambalajlı EPROM’lar ise programlandıktan sonra silinmesi mümkün değildir

15


ve fiyatı silinebilen tipe göre oldukça ucuzdur. Silinemeyen tipe bir defa programlanabilir olarak adlandırılır. EEPROM belleği bulunan bir PIC içerisine program yazmak için PIC programlayıcı vasıtasıyla elektriksel sinyal gönderilir. EEPROM üzerindeki enerji silse bile bu program bellekte kalır. Programı silmek veya farklı yeni bir program yazmak istendiğinde PIC programlayıcıdan elektriksel sinyal gönderilir. Bu tip belleğe sahip olan PIC’ler genellikle uygulama geliştirme amacıyla kullanılırlar. microchip bu tip belleğe çoğu zaman çok kez programlanabilen bellek olarak da adlandırmaktadır. Fiyatları silinemeyen tiplere göre biraz pahalıdır. Bellek erişim hızları ise EPROM ROM’lara göre daha yavaştır. ROM program belleğine sahip PIC’lerin programları fabrikasyon olarak yazılırlar. EPROM ve EEPROM eşdeğerlerine nazaran fiyatları oldukça düşüktür. ancak fiyatının düşüklüğünden dolayı gelen avantaj bazen çok pahalıya da mal olabilir. ROM bellekli PIC programlarının fabrikasyon olarak yazılması nedeniyle PIC’in elde edilme süresi uzundur. Programda oluşabilecek bir hatanın PIC’e program yazıldıktan sonra tespit edilmesi, eldeki tüm PIC’lerin atılmasına da neden olabilir. Bu tip PlC’ler çok miktarda üretilecek bir ürünün maliyetini düşürmek amacıyla seçilir. Program hataları giderilemediği için uygulama geliştirmek için uygun değildir. Microchip, ROM program bellekli PIC’lere parça numarası verirken “CR” (PIC16CR62, PIC16CR84 gibi) harfleri kullanılır.

16


BÖLÜM 3 16F877 ile SAAT ve TERMOMETRE UYGULAMASI Elektronik bir saat çok çeşitli elemanlar kullanılarak yapılabilir. Hatta yapılan elektronik saatlerin birçoğu hazır saat entegreleri kullanılarak mikrodenetleyici kullanılmadan hazırlanır. Fakat bu tezin amacı mikrodenetleyici ile daha doğrusu PIC ile bir uygulama yapmak olduğundan devrenin tasarımı klasik elektronik saat tasarımından farklıdır. Devrenin donanım olarak çok karışık olduğu söylenemez. Bu tezde amacımız PIC programlamayı öğrenmek olduğu için asıl önemli kısım devrenin yazılım kısmıdır. Şimdi sırasıyla devre şemasını, devrede kullanılan malzemeleri, kullanım biçimlerini ve program yapısını inceleyelim.

17


3.1. Devre Şeması

Şekil 3.1 Devre şeması

18


3.2. 16F877

3.2.1. 16F877’nin Ayak Bağlantıları

Şekil.3.2. PIC16F877 ‘nin ayak bağlantısı CMOS teknolojisi ile üretilmiş olan PIC16F877 çok az enerji harcar. Çok kez programlanabilen belleğe sahip olması nedeniyle saat girişine uygulanan sinyal kesildiğinde saklayıcıları içerisindeki veri aynen kalır. Saat sinyali tekrar verildiğinde PIC içerisindeki program kaldığı yerden itibaren çalışmaya başlar. RA0RA5, RB0-RB7,RC0-RC7, RD0-RD7,RE0-RE2 pinleri giriş-çıkış 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, transistor v.s) ile yükseltilerek kumanda edilecek cihaza uygulanır. Portların sink akımı 25 mA ve source akımı da 20 mA’ dir. Hatırlatma amacıyla sink ve source akımlarının ne olduğundan bahsedelim. Sink akımı, gerilim kaynağından çıkış portuna doğru akan akıma, source akımı ise girişçıkış pininden şaseye entegrenin pini üzerinden akan akıma denir.

19


Şekil.3.3. Sink ve source akımları PIC16F877’nin çektiği akım, besleme gerilimine, saat girişine uygulanan sinyalin frekansına ve giriş-çıkış pinlerindeki yüke bağlı olarak değişir. Tipik olarak 4 MHz’lik saat frekansında çektiği akım 2 mA’ kadardır. Bu akım uyuma modunda yaklaşık olarak 40 µA’ e düşer. Bilindiği gibi CMOS entegrelerdeki giriş uçları muhakkak bir yere bağlanır. Bu nedenle kullanılmayan tüm girişler besleme geriliminin eksi ucuna bağlanmalıdır.

3.2.2 Besleme Gerilimi

PIC’in besleme gerilimi 11, 32 ve 12, 31 numaralı pinlerden uygulanır. 11 ve 32 numaralı Vdd ucu +5 V’a, 12 ve 31 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 100µF’ lık bir dekuplaj

20


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ğerdir.

3.2.3. Saat Uçları ve Saat 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 saat sinyali denir. P1C16F877’nin saat 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 kare dalga sinyalleri uygulanabilir. Saat osilatör tipleri şunlarıdır: •

RC - Direnç/kondansatör XT - Kristal veya seramik resonatör (Xtal).

HS - Yüksek hızlı kristal veya seramik resonatör

LP - Düşük frekanslı kristal

Seçilecek olan osilatör tipi PIC’in kontrol ettiği devrenin hız gereksinimine bağlı olarak seçilir. Aşağıdaki tablo hangi osilatör tipinin hangi frekans sınırları içerisinde kullanılabileceğini gösterir.

Tablo 3.1. Osilatör tipi ve frekansları Osilatör tipi

Frekans sınırı

R0

0-4

MHz

LP

5-200 KHz

XT

100KHz.- 4MHz

HS (-04)

4 MHz

HS (-10)

4-10

MHz

HS (-20)

4-20

MHz

21


PIC’e bağlanan saat osilatörünün tipi programlama esnasında PIC içerisinde bulunan konfigürasyon bitlerine yazılmalıdır. 3.2.3.1. Osilatör Tiplerinde Kullanılacak Kondansatörler 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östermek gerekir. Aşağıda hangi frekansta kaç µf 'lık kondansatör kullanılacağını gösteren tablo görülmektedir. Tablo 3.2. Kondansatör değerleri Osilatör Tipi

Frekans

Kondansatör

LP

32KHz

33-68

pF

200KHz

15-47

pF

100KHz

47-100 pF

500KHz

20-68

pF

1MHz

15-68

pF

2MHz

15-47

pF

4MHz

15-33

pF

8MHz

15-47

pF

20MHz

15-47

pF

XT

HS

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

22


Şekil.3.4. Kristal ve kondansatörlerin PIC’e bağlantısı.

3.2.4. Reset Uçları ve Reset Devresi

PIC16F877’nin besleme uçlarına gerilim uygulandığı anda bellekteki programı başlangıç adresinden itibaren çalışmasını, besleme gerilimi normal seviyesine yükselinceye kadar belli bir gecikme sağlayan bir reset devresi vardır. Bu reset devresi PIC içerisindedir ve besleme gerilimi normal seviyesine ulaşıncaya kadar PIC entegresini reset konumunda tutar. Buna yeniden güç verme denir ve yazılım olarak aktif yapılırsa çalışır. MCLR ucu ise kullanıcının programı kesip, kasti olarak başlangıca döndürebilmesi için kullanılır. PIC’in 1 numaralı MCLR ucuna uygulanan gerilim 0 V seviyesine düştüğü zaman programın çalışması reset vektörü denilen adrese döner. Programın bu 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.

23


Şekil.3.5. PIC16F877‘nin harici reset devresi. 3.2.5. Giriş-Çıkış Portları

P1C16F877’ün 33 adet giriş/çıkış portu vardır. Bunlardan 6 tanesine A portu , 8 tanesi B portu, 8 tanesi C portu, 8 tanesi D portu ve 3 tanesi de E portudur. 33 portun her biri giriş ya da çıkış olarak kullanılabilir. PIC içerisinde adına TRIS denilen özel bir data yönlendirme saklayıcı vardır. Bu saklayıcı aracılığı ile portların giriş/çıkış yönlendirmesinin nasıl yapılacağı hakkında detaylı bilgiyi ileriki bulacaksınız. 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, mantıksal 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.

24


Şekil.3.6. PIC16F877’ nin portlarıyla kontrol edilen 220V’ luk lamba ve LED

3.2.6. Hafızası

PIC16F877 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.

3.2.6.1. Program Belleği

PIC16F877’nin 8 Kbyte’lık program belleği vardır. Her bir bellek hücresi içerisine 14 bit uzunluğundaki program komutları saklanır. Program belleği elektriksel olarak yazılıp silinebilir olmasına rağmen, programın çalışması esnasında sadece okunabilir. PIC16F877’nin 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üklenilebilir.

25


3.2.6.2. RAM Bellek

PIC16F877’nin 0x00_0x4F adres aralığında ayrılmış olan RAM belleği vardır. Bu bellek içerisindeki file saklayıcıları içerisine yerleştirilen veriler PIC merkezi işlem biriminin çalışmasını kontrol ederler. File saklayıcıların bellek uzunluğu 8 bittir. Sadece PCLATH saklayıcı 5 bit uzunluğundadır. File saklayıcı 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.

26


Şekil 3.7. PIC 16F877’nin RAM haritası Görüldüğü gibi bazı alanlar gölgelendirilmiştir. Gölgeleme, otomatik kopyalama işlemi olarak algılandığında anlaşılması daha kolay olacaktır. Örnekle izah edecek olursak: 0x8C adresine yazılan bir veri 0x0C adresinde de görülür. Bazı özel saklayıcıların birden fazla bankta görülmesinin nedeni, bank değiştirme işlemine gerek duyulmaksızın kullanılabilmesi içindir.

27


3.2.6.3 W Saklayıcı

PIC16F877’nin RAM bellek alanında görülmeyen bir de W saklayıcısı vardır. W saklayıcı bir akümülatör veya geçici depolama alanı olarak düşünülebilir. W saklayıcısına direkt olarak ulaşmak mümkün değildir. Ancak diğer saklayıcıların içerisindeki verilen 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 saklayıcı kullanılmak zorunluluğu vardır. Örneğin iki saklayıcı içindeki veriler toplanmak istendiğinde, ilk olarak saklayıcılardan birinin içeriği W saklayıcısına aktarılır. Daha sonra da diğer saklayıcı içerisindeki veri W saklayıcısı içerindekiyle toplanır. Bu saklayıcının kullanım özellikleri yine programlama konusunda detaylı olarak ele alınacaktır.

3.3. LM 35 Sıcaklık Sensörü LM35 çıktı voltajı ısıya doğrudan orantılı bir ısı sensörüdür. Bu yüzden Kelvin olarak ölçen diğer sensörlere göre avantajlıdır. LM35 dış kalibrasyon gerektirmez. Silikon seviyesindeki kalibrasyonla düşük maliyet sağlanmıştır. LM35’in düşük çıktı empedansı , lineer çıktı voltajı ve iç kalibrasyonu kontrol devrelerine montajı kolaylaştırılmaktadır.

3.3.1. Özelikleri . Direkt olarak o C kalibre edilmektedir. . Lineer 10.0 mV/ o C . 0.5 o C

oran faktörü

doğruluk garanti edilmiştir

. Uzaktan uygulamalar için uygundur . 4 voltan 30 volta kadar çalışa bilir . 60 µA’den az kaçak akım . Düşük kendini ısıtma , 0.08 o C durgun havalarda . ± ¼ oC

derecesinde non-lineerite

. Düşük empedans çıktısı , 0.1Ω 1mA yükte

28


LM 35’ in devrede kullanılma biçimi aşağıdaki gibidir.

Şekil 3.8. LM35’in devredeki kullanım şekli Bu uygulama şekli ile LM 35, 0 °C için çıkışında 0 V vermektedir ve her 1 °C artış için çıkışı 10 mV arttırmaktadır. Yani 25 °C oda sıcaklığı için LM 35 çıkışında 250 mV vardır. Bu gerilim LM 35’in çıkışındaki opamp yardımı ile uygun bir değere yükseltilmektedir.

Opampın

kazancı

potansiyometre

yardımı

ile

değiştirilebilmektedir. Bu şekilde termometrenin kalibrasyonu yapılır.

3.4. Display’ler

Devrede saat ve dakikayı göstermek amacıyla toplam 4 tane display kullanılmıştır. Bunlar her bir segmentin yanması için yaklaşık 8 V gerilim gerektiren ortak katotlu display’lerdir.

3.4.1. Display Ayak Bağlantıları

1


Şekil 3.9. Devrede kullanılan display’lerin ayak bağlantıları Şekil 3.9. ‘da devrede kullanılan display’lerin segmentlerine bağlı olan ayaklar gösterilmiştir. Her bir segmentin yanabilmesi için yaklaşık 8 V gerilime ihtiyaç vardır. 3.4.2. Display’lerin Sürülmesi

Devre şemasında görüldüğü gibi display’ler T1 – T7 transistörleri tarafından sürülmektedir. Her bir display’de yazılması gereken rakama karşılık gelen giriş D portuna bağlı olan bu transistörler üzerinden yapılmaktadır.

Tablo 3.3. Display’lerde yazılan rakamların karşılıkları D Portundaki Binary Çıkış 11000000 11111001 10100100

Display’de Yazılan Rakam 0 1 2

2


10110000 10011001 10010010 10000010 11111000 10000000 10010000 10011100 11000110

3 4 5 6 7 8 9 Derece işareti C

Eğer D portunun ilgili pini yüksek konuma getirilirse o pine bağlı transistör doyumda çalışmaya başlayacaktır. Kolektör ile emiler arasındaki gerilim bu durumda yaklaşık 0 V olacaktır. Bu ise o pide bağlı olan segmentin yanmaması manasına gelir. Eğer D portunun ilgili pini düşük konumda ise o pide bağlı transistor kesimde olacağından ilgili segment direnç üzerinden 12 V gerilime bağlanır. Yani o segment için uygun gerilim sağlanmış olacaktır. Fakat display’in çalışması için bu yeterli değildir. Display’in yanması için katoduna bağlı olan transistörün doyumda olup o display'i topraklaması gerekmektedir. Bu ise ancak T8-T11 transistörlerinin bağlı olduğu pinin yüksek konumda olması ile sağlanır. Her display’in 7 segmenti olduğu ve her display'de 1 toprak olduğu düşünülürse 7x4 =28+4 =32 tane pine ve transistöre ihtiyacımız olduğu görülür. Fakat devremizde sadece 11 pin ve transistör kullanarak bu sağlanmıştır. 4 display’in aynı segmentleri birbirine bağlanır ve bu 7 ortak segmente birer transistör takılır. Displaylerin ortak katotlarına da aynı şekilde birer transistör bağlanır. Bu 11 transistör uygun şekilde kutuplanarak girişlerinde 5 V olduğunda doyumda, 0 V olduğunda ise kesimde olmaları sağlanır. Daha sonra 1-7 numaralı transistörlerden sırasıyla 1,2,3 ve 4 numaralı display’in yazması gereken rakamlara ait kodlar girilir ve o an sadece ilgili displayin topraklanması dolayısıyla çalışması sağlanır. Display kısa bir süre yanar. Bu yanma süresini programda kullanılan WAIT alt programı belirlemektedir. Gerçekte display’ler sıra ile yanar fakat bu işlem çok hızlı olduğundan göz bunu fark edemez ve aynı anda yandıklarını zannederiz.

3


3.5. Transistörler

Saat devremizde 11 tane transistör kullanılmıştır. Bunlar BC237 düşük güçlü NPN transistörlerdir. T1-T7 transistörleri display’lere yazacakları rakamı içeren datayı göndermede kullanılırlar. Buradaki kullanım amaçları yükseltme işlemi değil anahtarlamadır. T8-T11 transistörleri ise display’lerin katotlarındadır. Aynı anda sadece bir display çalışır ve o an hangi display’in aktif olduğu bu transistörler tarafından belirlenir. Girişinde 5V olan trnasistör doyumdadır ve ilgili display’i topraklayarak çalışmasını sağlar. Diğerlerinde olduğu gibi bu transistörlerde devrede anahtarlama amacı ile kullanılmışlardır.

3.6. Kristaller

Devrede 2 tane kristal kullanılmıştır. PIC belleğinde bulunan program komutlarının çalıştırılması için bir kare dalga sinyale ihtiyaç vardır. 4 MHzlik kristal bu amaçla kullanılmıştır. Kristal PIC’in OSC1 ve OSC2 girişlerine bağlıdır. Frekansı 4 MHz olduğundan; bir komut saykılı süresi 1/4MHz= 250 n saniyedir. Diğer kristal ise timer1’in taşma süresini ayarlamak için kullanılmıştır. PIC’in TMROSC1 ve TMROSC2 girişlerine bağlıdır. Bu kristal 32 kHz frekansındadır. Yani sayıcının her adımı için yaklaşık 1/32768= 30,5 µs geçmelidir.

3.7. LM324

LM324 yüksek band genişliği (1 MHz) ve DC gerilim kazancına sahip (100 dB), düşük bias akımıyla çalışabilen (700 µA), buna karşılık besleme gerilim aralığı yüksek olan (3-32V) düşük güçlü entegre işlemsel yükselteçtir.

4


LM 324’ün içinde 4 tane opamp bulunmaktadır. Devrede bunlardan sadece bir tanesi kullanılmıştır. Bu opamp faz döndürmeyen şekilde dizayn edilmiş ve LM35’in çıkışına bağlanmıştır. Kullanılmasının amacı LM35’ in çıkış gerilimini yükselterek termometrenin kalibrasyonunun yapılmasını sağlamaktır. Opampın çıkışındaki gerilim:

V0 =

1000 .VLM 35 100 + R pot

formülü kullanılarak bulunabilir.

Şekil 3.10. LM 324’ ün iç yapısı 3.8. Ayar Butonları

Saat devresinden “Ayarlama”, “Saat” ve “Dakika” olmak üzere 3 tane buton vardır. Dakikayı 1 arttırmak için ayarlama butonuna basılırken aynı zamanda dakika butonuna da basılmalıdır. Aynı şekilde saati 1 arttırmak için ayarlama butonuna basılırken aynı anda saat butonuna da basılmalıdır.

5


Şekil 3.11. Ayar butonları Butonlar RB0, RB1 ve RB2 pinlerine bağlıdır. Butona basıldığında ilgili pini toprağa çeker, butonun basılı olmadığında ise ilgili pin 1k’lık direnç üzerinden 5 V gerilime bağlıdır. 3.9. Güç Katı

16F877 çalışmak için 5V’luk bir gerilime ihtiyaç duyar. Ayrıca display’leri süren transistörleri beslemek için 12 V’luk gerilime ihtiyaç vardır. Devrenin ihtiyaç duyduğu bu gerilimleri elde etmek için 7805 ve 7812 pozitif gerilim regülatörleri kullanılmıştır.

Şekil 3.12. Güç katı 3.10. Baskı Devre Şemaları

6


Baskı devre şemasının alttan görünüşü aşağıdaki gibidir.

Şekil 3.13 Baskı devre şemasının alttan görünüşü Baskı devre şemasının üstten görünüşü aşağıdaki gibidir. Bu yollar kablolar yardımı ile jumper olarak yapılmıştır.

Şekil 3.14. Baskı devre şemasındaki atlamalar Devredeki elemanların yerleşim planı aşağıdaki gibidir.

7


Şekil 3.15. Elemanların yerleşim planı

Şekil 3.16. Dispaly’lerin bulunduğu kartın baskı devre şeması

8


BÖLÜM 4

PIC PROGRAMI

4.1. PIC Assembly 4.1.1. Assembler Nedir ?

Assembler, bir text editöründe assembly dili kurallarına göre yazılmış olan komutları PIC’in anlayabileceği onaltılık kodlara çeviren (derleyen) bir programdır. Microchip firmasının hazırladığı MPASM bu işi yapan assembler programıdır. Assembler’e çoğu zaman derleyici denilir.

4.1.2. PIC Assembly Dili Nedir?

PIC Assembly dili toplam 35 komuttan oluşur. Bu komutları basit bir editörde yazabiliyoruz. Ancak, İngilizce’deki bazı kelimelerin kısaltmasından oluşan bu dilin komutlarını P1C’in anlayabileceği makine diline çeviren bir programa ihtiyacımız vardır. Bu programa assembler adını veriyoruz. Text dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren MPASMnin hem DOS altında hem de WINDOWS altında çalışan versiyonu bulunmaktadır. Bu program Microchip firmasının

internetteki

www.microchip.com

adlı

sitesinden

parasız

olarak

yüklenilebiliyor. Microchip bir de içerisinde hem metin editörü hem MPASM assembler programını bulunduran MPLAB programını PIC programlayıcılarının kullanımına sunmaktadır. Assembly dili, bir PIC’e yaptırılması istenen işlerin belirli kurallara göre yazılmış komutlar dizisidir. Assembly dili komutları İngilizce dilindeki bazı kısaltmalardan meydana gelir. Bu kısaltmalar genellikle bir komutun Çalışmasını ifade eden

9


cümlenin baş harflerinden oluşur. Böylece elde edilen komut, bellekte tutulması kolay bir hale getirilmiştir. Örneğin: BTFSC (Bit Test F Skip if Clear) - File saklayıcılardaki biti test et, eğer sıfırsa bir sonraki komutu atla, anlamında kullanılmıştır.

4.2. Özel Registerler

PIC’leri düzgün olarak kullanabilmek için sadece PIC assembly komutlarını bilmemiz yeterli olmaz. Bununla birlikte programladığımız PIC’in özelliklerini ve bu özellikleri nasıl kullanabileceğimizi bilmemiz gerekir. PIC’lerde her nesneyi kontrol eden özel registerler vardır Daha önce bahsettiğimiz gibi 16F877 içinde 8 kanallı bir ADC, Timer0, Timer1 ve Timer2 adında 3 tane sayıcı bulundurur. PIC’in bu bölümlerini kullanabilmemiz ve kontrollerini denetim altında tutabilmemiz için bu bölümleri denetleyen registerlerin kullanımını bilmemiz gereklidir. 4.2.1. Intcon Register

Intcon register; Timer0 sayıcısının taşma durumu için bayrak bitlerini içeren, RB Port değişimi ve harici RB0/INT kesmeleriyle ilgili ayarlamaların yapıldığı, yazılabilir ve okunabilir bir registerdir. 0Bh, 8Bh, 10Bh ve 18Bh adreslerindedir.

Şekil 4.1. Intcon register

Bit7) GIE (Global Interrupt Enable Bit) Kesme Enable Biti: Bu bit kesmelerin enable veya disable olma durumlarını ayarlamada kullanılır. 1= Tüm maskelenmemiş kesmeler enable 0= Tüm kesmeler disable 10


Bit6) PEIE (Peripheral Interrupt Enable Bit) Çevresel Kesme Enable Biti: Çevresel kesmelerin enable veya disable olma durumlarını ayarlamada kullanılır. 1= Tüm maskelenmemiş çevresel kesmeler enable 0= Tüm çevresel kesmeler disable Bit5) T0IE (Timer0 Overflow Interrupt Enable Bit) Timer0 Taşma Kesme Enable Biti: Timer0 kesmesinin oluşturacağı kesmeleri enable veya disable yapar. 1= Timer0 kesmesi enable 0= Timer0 kesmesi disable Bit4) INTE (RB0/INT External Interrupt Enable Bit) RB0/INT Harici Kesme Enable Biti: RB0 yolu ile oluşturulan kesmeyi enable veya disable yapar. 1= RB0/INT harici kesmesi enable 0= RB0/INT harici kesmesi disable Bit3) RBIE (RB Port Change Interrupt Enable Bit) RB Portu Değişimi Kesme Enable Biti: RB4-RB7 bitlerinin değişimiyle oluşan kesmelerin enable veya disable olmasını ayarlar 1= RB portu değişiminden oluşan kesme enable 0= RB portu değişiminden oluşan kesme disable

Bit2) T0IE (Timer0 Overflow Interrupt Flag Bit) Timer0 Taşma Kesme Bayrak Biti: Timer0 sayıcısında taşma olup olmadığı bilgisini içerir. 1= Timer0 registerinde taşma var

11


0= Timer0 registerinde taşma yok Bit1) INTF (RB0/INT External Interrupt Flag Bit) RB0/INT Harici Kesme Bayrak Biti: RB0 yoluyla kesme oluşup oluşmadığı bilgisini içerir. 1= RB0/INT harici kesmesi meydana geldi 0= RB0/INT harici kesmesi meydana gelmedi Bit0) RBIF (RB Port Change Interrupt Flag Bit) RB Port Değişimi Kesme Bayrak Biti: RB portunun değişimiyle kesme oluşup oluşmadığı bilgisini içerir. 1= RB4-RB7 bitlerinden en az birinde değişim var 0= RB4-RB/ birlerinden hiç biri değişmedi.

4.2.2. PIR1 Register

PIR1 register, çevresel kesmeler için özel bayrak bitlerini içerir. 0Ch adresindedir.

Şekil 4.2. PIR1 register

Bit7) PSPIF (Parallel Slave Port Read/Write Interrupt Flag Bit) Paralel Slave Port Okuma/Yazma Kesme Bayrak Biti: Paralel slave Portta okuma yazma işlemi olmasından bilgisini içerir. 1= Bir okuma veya yazma işlemi gerçekleşti

12

kaynaklanan kesme


2= Okuma veya yazma işlemi yok Bit6) ADIF (A/D Converter Interrupt Flag Bit) A/D çevirici Kesme Bayrak Biti: A/D çevirimin tamamlanıp tamamlanmadığı bilgisini içerir. 1= Bir A/D çevrim tamamlandı 0= A/D çevrim tamamlanmadı Bit5) RCIF (USART Receive Interrupt Flag Bit) USART Alıcı Kesme Bayrak Biti USART’ da alım yapılıp yapılmadığı bilgisini içerir. 1= USART alıcı tamponu dolu 0= USART alıcı tamponu boş Bit4) TXIF (USART Transmit Interrupt Flag Bit) USART Verici Kesme Bayrak Biti USART’ da vericinin çalışıp çalışmadığı bilgisini içerir. 1= USART verici tamponu boş 0= USART verici tamponu dolu Bit3) SSPIF (Synchronous Serial Port Interrupt Flag) Senkron Seri Port Kesme Bayrak Biti: Senkron seri port kesmesinin meydana gelip gelmediği bilgisini içerir. Bit2) CCP1IF (CCP1 Interrupt Flag Bit) CCP1 Kesme Bayrak Biti Bit1) TMR2IF (Timer2 to PR2 Match Interrupt Flag Bit) Timer2’nin PR2’ye Uygunluk Kesme Bayrak Biti

Bit0) TMR1IF (Timer1 Overflow Interrupt Flag Bit) Timer1 Taşma Kesme Bayrak Biti Timer1 sayıcısının taşma durumu bilgisini içerir. 1= Timer1 sayıcısında taşma var 0= Timer1 sayıcısında taşma yok

13


4.2.3. Status Register

Status register ALU’nun artimetiksel durumunu, reset durumunu ve bank seçme bitlerini içerir.status registerin içeriği bir çok komutun çalışması sonucunda değişebilir. Z, DC veya C bitlerini etkileyen bir komut kullanıldığında bu bitlere yazma işlemi yapılamaz. Bu bitlerin 1 veya 0 olma durumu kullanılan PIC’e bağlıdır. 03h, 83h, 103h ve 183h adreslerindedir.

Şekil 4.3. Status register Bit7) IRP (Register Bank Select Bit) Bank Seçme Biti Bir banktan bir diğerine geçmek için kullanılır. 0= Bank0,1 (00h-FFh) 1= Bank2,3 (100h-1FFh) Bit6-5) RP1:RP0 (Register Bank Select Bit) Bank Seçme Bitleri Bank değiştirmek için kullanılır. 00= Bank0 (00h-7Fh) 01= Bank1 (80h-FFh) 10= Bank2 (100h-17Fh) 11= Bank3 (180h-1FFh) Bit4) TO (Time-out Bit ) Zaman Dolma Biti 0= WDT zamanlayıcısında, zaman dolduğunda 1= PIC’e enerji verildiğinde, CLRWDT ve SLEEP komutu çalışınca Bit3) PD (Power-down Bit) Enerji Kesilme Biti 0= SLEEP komutu çalışınca 1= PIC’e enerji verildiğinde ve CLRWDT komutu çalışınca

14


Bit2) Z (Zero Bit) Sıfır Biti 0= Bir aritmetik veya mantıksal komutun sonucu 0 olduğunda 1= Bir aritmetik veya mantıksal komutun sonucu 0 olmadığında Bit1) DC (Digit Carry/Borrow Bit) Taşma/ Ödünç Biti ADDLW ve ADDWF komutları kullanıldığında oluşan taşma ve ödünç alma olduğunda kullanılır. 0= Alt dört bitin 4. bitinde taşma meydana gelmediğinde. 1= Alt dört bitin 4. bitinde taşma meydana geldiğinde. Bit0) C ( Carry/Borrow Bit) Taşma/Ödünç Biti 0= En soldaki 7. bitte taşma meydana gelmediğinde. 1= Enable soldaki 7. bitte taşma olduğunda

4.2.4. Adcon0 Register

A/D çevrim ile ilgili ayarlamaların yapıldığı registerlerden biridir.

Şekil 4.4. Adcon0 Register Bit7-6) ADCS1: ADCS0 (A/D Conversion Clock Select Bits) A/D Çevrim Clock Seçme Bitleri 00= Fosc/2 01= Fosc/8 10= Fosc/32 11=FRC (Clock işareti RC osilatöründen elde edilir) Bit5-3) CHS2: CHS0 (Analog Kanal Select Bits) Analog Kanal Seçme Bitleri 000 = kanal 0, (RA0/AN0) 001 = kanal 1, (RA1/AN1) 010 = kanal 2, (RA2/AN2) 011 = kanal 3, (RA3/AN3) 15


100 = kanal 4, (RA5/AN4) 101 = kanal 5, (RE0/AN5) 110 = kanal 6, (RE1/AN6) 111 = kanal 7, (RE2/AN7) Bit2) GO/DONE (A/D Conversion Status Bit) A/D Çevrim Durum Biti Eğer ADON=1 ise 0= A/D çevrimi yapılmıyor 1= A/D çevrimi yapılıyor Bit1) Kullanılmıyor Bit0) ADON (A/D On Bit) A/D Çevirici Durum Biti 0= A/D çevirici modülü çalışmıyor 1= A/D çevirici modülü çalışıyor

4.2.5. Adcon1 Register

A/D çevrim ile ilgili ayarları içerir. 9Fh adresindedir.

Şekil 4.5. Adcon1 register bit 7) ADFM (A/D Result format select) A/D Sonuç Biçim Seçim Biti 0= Left Justified (ADRESL registerinin önemli 6 biti 0 olarak okunur) 1= Right Justified (ADRESH registerinin önemsiz 6 biti 0 olarak okunur) Bit 6-4) Kullanılmıyor

16


Bit3-0) PCFG3:PCFG0 (A/D Port Configuration Control Bit) A/D Port Konfigürasyon kontrol Bitleri

4.2.6. PIE1 Register

PIE1 register çevresel kesmeler için bir çok ayar bitleri içerir. 8C adresindedir.

Şekil 4.6. PIE1 register

Bit7) PSPIE (Parallel Slave Port Read/Write Interrupt Enable Bit) Paralel Slave Port Okuma/Yazma Kesme Enable Biti: 0= PSP okuma yazma kesmesi disable 1= PSP okuma yazma kesmesi enable Bit6) ADIE (A/D Converter Interrupt Enable Bit) A/D Çevirici Kesme Enable Biti 0= A/D çevirici kesmesi disable 1= A/D çevirici kesmesi enable Bit5) RCIE (USART Receive Interrupt Enable Bit) USART Alıcı Kesme Enable Biti: 0=USART alıcı kesmesi disable 1= USART alıcı kesmesi Enable Bit4) TXIE (USART Transmit Interrupt Enable Bit) USART Verici Kesme Enable Biti: 0= USART verici kesmesi disable 1= USART verici kesmesi Enable

17


Bit3) SSPIE (Synchronous Serial Port Interrupt Enable Bit ) Senkron Seri Port Kesme Enable Biti: 0=SSP kesmesi disable 1=SSP kesmesi enable Bit2) CCP1IE (CCP1 Interrupt Enable Bit) CCP1 Kesme Enable Biti 0= CCP kesmesi disable edilir 1= CCP kesmesi enable edilir Bit1) TMR2IE (TMR2 to PR2 match Interrupt Enable Bit ) Timer2’nin PR2’ye Uygunluk Kesme Biti

Bit0) TMR1IE (Timer1 Overflow Interrupt Bit) Timer1 Taşma Kesme Biti Timer1 sayıcısının kesme bilgisini içerir. 0= Timer1 sayıcı kesmesi disable 1= Timer1 sayıcı kesmesi enable

18


4.3. Program Algoritması

Programda ilk önce gerekli koşullamalar ve ilk ayarlar yapılmaktadır. Bu amaçla init alt programı kullanılmıştır.. Bunlar, portların gerekli şekilde yönlendirilmesi (giriş/çıkış), kesmeler ve timer1 için gerekli ilk ayarlamalar olarak özetlenebilir.

19


Programda kullanılan timeout registeri display’lerde sıcaklığın 1 sn saatin ise 9 sn gösterilmesini sağlar.

Bu register her seferinde 1 arttırılır ve kontrol edilir. 10

olduğunda flag_reg registerinin saat ve termometre bitlerinin durumlarını değiştirerek display’lerde sıcaklık ve saatin sırayla gösterilmesini sağlar. Timer 1 sayıcısı 16 bitlik bir sayıcıdır. Bu sayıcıya 8000h atanmıştır ve Timer’in harici clock işaretinin frekansı 32768 Hz dir. Bu durumda timer1 her 1 sn de kesme oluşturur. Oluşan her kesme için saniye registeri 1 arttırılır. Saniye registeri 60 olduğunda dakika registeri 1 arttırılır ve saniye registeri sıfırlanır. Aynı şekilde dakika registeri 60 olduğunda saat registeri 1 arttırılır ve dakika registeri sıfırlanır. Saat registeri ise 24 e ulaştığında sıfırlanır. Böylece display’lerde sıcaklığın ve saatin gösterilmesi sağlanmış olur.

4.4. PIC Program Kodları Clock .asm LIST P = 16F877, n = 66, mm = ON ERRORLEVEL -302 INCLUDE <p16F877.inc> __CONFIG _CP_ALL & _DEBUG_OFF & _BODEN_ON & _WRT_ENABLE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF

goto goto org

org 0x0000 STARTER org 0x0004 Interrupt_v 0x0005

; RESET vector location ; Interrupt vector location

STARTER ; PAGESEL Init call Init bSf Flag_Reg,Saat BCF Flag_Reg,Termometre clrf Timeout START ; PAGESEL RefreshDisplay CALL RefreshDisplay goto START INCLUDE <VAR.H> INCLUDE <INIT.H> RefreshDisplay BTFSS GOTO ShowSaat CLRF movf CALL

Flag_Reg,Saat ShowTermometre ;saat dakika gosterir PORTB MIN,W BINTOBCD

20


MOVF CALL MOVWF BSF CALL BCF

MSD,W CEV7SEGMENT PORTD PORTB,0x07 WAIT PORTB,0x07

MOVF CALL MOVWF BSF CALL BCF

LSD,W CEV7SEGMENT PORTD PORTB,0x06 WAIT PORTB,0x06

movf CALL MOVF CALL MOVWF BSF CALL BCF

SEC,W BINTOBCD MSD,W CEV7SEGMENT PORTD PORTB,0x05 WAIT PORTB,0x05

MOVF CALL MOVWF BSF CALL BCF GOTO ShowTermometre clrf movf ANDLW CALL MOVWF BSF CALL BCF

LSD,W CEV7SEGMENT PORTD PORTB,0x04 WAIT PORTB,0x04 RefSon PORTE D100,W 0x0F CEV7SEGMENT PORTD PORTB,0x07 WAIT PORTB,0x07

movf ANDLW CALL MOVWF BSF CALL BCF

D10,W 0x0F CEV7SEGMENT PORTD PORTB,0x06 WAIT PORTB,0x06

movlw CALL MOVWF BSF CALL BCF

0x0A CEV7SEGMENT PORTD PORTB,0x05 WAIT PORTB,0x05

movlw CALL MOVWF BSF CALL BCF

0x0B CEV7SEGMENT PORTD PORTB,0x04 WAIT PORTB,0x04

RefSon return CEV7SEGMENT addwf retlw retlw retlw retlw retlw retlw retlw retlw

PCL,F B'11000000' B'11111001' B'10100100' B'10110000' B'10011001' B'10010010' B'10000010' B'11111000'

;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7

21


WAIT

retlw retlw retlw retlw

B'10000000' B'10010000' B'10011100' B'11000110'

movlw movwf

0x10 SAYAC1

WAIT1

movlw movwf decfsz goto decfsz goto return Interrupt_v

GOTO T1_OVRFL BCF MOVLW MOVWF clrf MOVLW XORWF INC_TIME ; INC_SEC

INCSECone INC_MIN

INCMINOne INC_HOUR

INCHOUROne

;8 ;9 ;derece ;C

0x40 SAYAC2 SAYAC2,F $-1 SAYAC1,F WAIT1 BCF STATUS, RP0 ; Bank 0 BCF INTCON,GIE BTFSC PIR1, TMR1IF ; Timer 1 overflowed? T1_OVRFL ; YES, Service the Timer1 Overflow Interrupt GOTO ENDINT ; NO, Error Condition - Unknown Interrupt PIR1, TMR1IF 0x80 TMR1H TMR1L 0xFF PORTE,F

; Clear Timer 1 Interrupt Flag ; ; 1 Second Overflow

bcf

FLAG_REG,INT_OCCURED

incf movlw subwf btfsc goto GOTO

SEC,F .60 SEC,W STATUS,Z INCSECone ENDINT

clrf

SEC

incf movlw subwf btfsc goto GOTO

MIN,F .60 MIN,W STATUS,Z INCMINOne ENDINT

clrf

MIN

incf movlw subwf btfsc goto GOTO

HOUR,F .24 HOUR,W STATUS,Z INCHOUROne ENDINT

clrf

HOUR

ENDINT BCF BSF bsf bcf incf movlw subwf btfss goto clrf bcf bsf CALL CALL sonint

RETFIE

STATUS, RP0 INTCON,GIE Flag_Reg,Saat Flag_Reg,Termometre Timeout,F 0x0A Timeout,W STATUS,Z sonint Timeout Flag_Reg,Saat Flag_Reg,Termometre READSENS TOBCD

; Bank 0

; Return / Enable Global Interrupts

22


BINTOBCD value value TENS_SUB GOTO

BINTOBCDSON RETURN

Var.h

CLRF

MSD

; This value contain the 10's digit

MOVWF

LSD

; This value contain the 1's digit

MOVLW SUBWF BTFSS BINTOBCDSON MOVWF INCF GOTO MOVF LSD,W

.10 LSD, W STATUS, C

; A decimal 10 ; ; Did this subtract cause a Negative Result?

LSD MSD, F TENS_SUB

; No, move the result into LSD ; Increment the most significat digit ;

INCLUDE <READSENS.H> INCLUDE <TOBCD.H> CBLOCK 0x20 HOUR ; Holds counter value for HOURS MIN ; Holds counter value for MINUTES SEC ; Holds counter value for SECONDS MSD;Temporary register, Holds Most Significant Digit of BIN to BCD conversion LSD; Temporary register,Holds Least Significant Digit of BIN to BCD conversion TEMP ; Temporary register BINLSB ; 8 BIT (LSB) BINMSB ; 2 BIT (MSB) (Right justified) D1 ; 1 ler basamagi D10 ; 10 lar basamagi D100 ; 100 ler basamagi D1000 ; 1000 ler basamagi Flag_Reg SAYAC1 ;WAIT ICIN SAYAC2 ;WAIT ICIN Timeout ;SAAT VE TERMOMETRE GOSTERIMI ICIN

ENDC ;BIT TANIMLAMALARI Flag_Reg ICIN Termometre EQU 0x00 Saat EQU 0x01 Readsens.h READSENS bcf BSF BCF MOVLW MOVWF MOVLW MOVWF BCF BCF MOVLW MOVWF BSF BTFSC GOTO

INTCON,GIE STATUS,RP0 STATUS,RP1 B'10001110' ADCON1 H'0F' TRISA STATUS,RP0 STATUS,RP1 B'01000001' ADCON0 ADCON0,GO ADCON0,GO $-1

; BANK1'E GECILIYOR ; ; ;BANK0'E GECILIYOR ;fosc/8,CHANNEL0, AD ENABLED ;RA0 ANALOG GIRIS OKUNUYOR

MOVF MOVWF BSF BCF

ADRESH,W BINMSB ; OKUNAN SICAKLIK DEGERI AKTARILIYOR STATUS,RP0 ; BANK1'E GECILIYOR STATUS,RP1

MOVF BCF BCF MOVWF BSF

ADRESL,W STATUS,RP0 STATUS,RP1 BINLSB INTCON,GIE

; BANK0'E GECILIYOR

RETURN İnit.h Init clrf

MCLR_RESET

STATUS MOVLW MOVWF CLRF CLRF

0x80 TMR1H TMR1L

; TIM1H:TMR1L = 0x8000 gives 1 second ; overflow, at 32 KHz. ; ; A Master Clear Reset STATUS ; Do initialization (Bank 0)

23


weak pull-ups

DIGITAL

CLRF MOVLW MOVWF

CLRF BSF BCF bsf return

CLRF CLRF BSF MOVLW

INTCON PIR1 STATUS, RP0 0x30

MOVWF

OPTION_REG ; ; Disable all peripheral interrupts ; left JUSTIFIED, RA0, RA1 ANALOG INPUT, OTHERS

PIE1 B'00001110' ADCON1 BCF CLRF PORTA CLRF CLRF CLRF CLRF BcF BSF MOVLW 0x01 MOVWF TRISA CLRF TRISB movlw 0xFF movwf TRISC CLRF CLRF BSF BCF CLRF HOUR CLRF SEC CLRF MIN CLRF MOVLW MOVWF INTCON INTCON,GIE INTCON,T0IE INTCON,PEIE BSF

; Bank 1 ; The LCD module does not like to work w/

STATUS, RP0 ; Bank 0 ; ALL PORT output should output Low. PORTB ;output PORTC PORTD PORTE T1CON, TMR1ON ; Timer 1 is NOT incrementing STATUS, RP0 ; Select Bank 1 ; PORTA ANALOG INPUTS ; TRISD TRISE PIE1, TMR1IE STATUS, RP0

; ; ; ;

RD Port are RE Port are Enable TMR1 Select Bank

outputs ANALOG INPUTS Interrupt 0

PIR1 0x0E T1CON

;

T1CON, TMR1ON

; Turn Timer 1 ON

; RC1 is overridden by TCKO

tobcd.h ;************************************************************************* ;* TOBCD altprogrami icin gerekli equ tanimlamalari ;* BINLSB ve BINMSB icindeki 10 bit binary sayiyi ;* D1000, D100, D10, D1 icinde ;* ayrilmis halde BCD sayiya cevirir ;************************************************************************* ; ORG 0x0300 TOBCD movlw HIGH TOBCD movwf PCLATH CLRF D1 CLRF D10 CLRF D100 CLRF D1000 BTFSC BINMSB,0 GOTO ADD256 DEV512 BTFSC BINMSB,1 GOTO ADD512 GOTO DEVSON ADD256 MOVLW H'06' MOVWF D1 MOVLW H'05' MOVWF D10 MOVLW H'02' MOVWF D100 GOTO DEV512 ADD512 MOVLW H'02'

24


DEVSON

ADD1

ADD2

ADD4

ADDWF MOVLW ADDWF MOVLW ADDWF

D1,F H'01' D10,F H'05' D100,F

MOVF BTFSC CALL BTFSC CALL BTFSC CALL BTFSC CALL BTFSC CALL BTFSC CALL BTFSC CALL BTFSC CALL RETURN

BINLSB,W BINLSB,0 ADD1 BINLSB,1 ADD2 BINLSB,2 ADD4 BINLSB,3 ADD8 BINLSB,4 ADD16 BINLSB,5 ADD32 BINLSB,6 ADD64 BINLSB,7 ADD128

MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF RETURN

H'01' D1,F H'0A' D1,W STATUS,C

MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF RETURN

H'02' D1,F H'0A' D1,W STATUS,C

MOVLW ADDWF MOVLW SUBWF BTFSS

H'04' D1,F H'0A' D1,W STATUS,C

;1 EKLENECEKMI?

D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F

D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F

25


ADD8

ADD16

INCYUZ

RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF RETURN

D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F ; DISPLEYE 8 EKLE

MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF RETURN

H'08' D1,F H'0A' D1,W STATUS,C

INCF MOVLW SUBWF BTFSC GOTO GOTO

D10,F H'0A' D10,W STATUS,C INCYUZ NOINCYUZ

MOVWF INCF MOVLW SUBWF BTFSS GOTO MOVWF INCF NOINCYUZ MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF

D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F

D10 D100,F H'0A' D100,W STATUS,C NOINCYUZ D100 D1000,F H'06' D1,F H'0A' D1,W STATUS,C D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F

26


RETURN ADD32

INCD100

MOVLW ADDWF MOVLW SUBWF BTFSC GOTO GOTO

MOVWF INCF MOVLW SUBWF BTFSS GOTO MOVWF INCF NOINCD100 MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF RETURN ADD64 MOVLW ADDWF MOVLW SUBWF BTFSC GOTO GOTO ADD640 MOVWF INCF MOVLW SUBWF BTFSS GOTO MOVWF INCF ADD641 MOVLW ADDWF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS RETURN MOVWF INCF MOVLW SUBWF BTFSS

H'03' D10,F H'0A' D10,W STATUS,C INCD100 NOINCD100 D10 D100,F H'0A' D100,W STATUS,C NOINCD100 D100 D1000,F H'02' D1,F H'0A' D1,W STATUS,C D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C D100 D1000,F H'06' D10,F H'0A' D10,W STATUS,C ADD640 ADD641 D10 D100,F H'0A' D100,W STATUS,C ADD641 D100 D1000,F H'04' D1,F H'0A' D1,W STATUS,C D1 D10,F H'0A' D10,W STATUS,C D10 D100,F H'0A' D100,W STATUS,C

27


ADD128

RETURN MOVWF D100 INCF D1000,F RETURN CALL CALL CALL CALL CALL RETURN

ADD8 ADD8 ADD16 ADD32 ADD64

KAYNAKLAR 1. PIC16F877 Data sheet 2. Orhan ALTINBAŞAK, Mikrodenetleyiciler ve PIC Programlama, Altaş Yayınevi, İstanbul, 2001 3. www.microchip.com 4. www.national.com 5. www.mustafapatan.com

28

Real Time Clock with Thermometer Saat devres'  

Gercek zamanli saat devresi

Read more
Read more
Similar to
Popular now
Just for you