You are on page 1of 98

1-GİRİŞ

1970’li yıllarda mikroişlemcilerin piyasaya sürülmesinden sonra elektronik ve kontrol uygulama


alanlarında çok büyük gelişmeler olmuştur. Önceleri analog veya mantık devreleriyle tasarlanan cihazlar
yerlerini mikroişlemcili sistemlere bırakmıştır.

Yukarıdaki mikroişlemci öbek çizgesinden de görüldüğü gibi mikroişlemci tabanlı bir sistemde
esas mikroişlemci yongasına ek olarak giriş-çıkış yongası, bellek, ve zamanlama devrelerine ihtiyaç
vardır. Bu şekilde 4-5 yongadan oluşan mikroişlemci sistemine klavye, led veya lcd gibi giriş/çıkış
devreleri ilave edilince son derece akıllı bir elektronik sistem elde etmiş oluruz. İlk mikroişlemciler 4
bitlik yapıya sahip olup işlem kapasiteleri sınırlıydı ve çok kısa zamanda yerlerini çok daha güçlü 8 bitlik
mikroişlemcilere bıraktılar.
Bu mikroişlemcilerin çok fazla olumlu yanları olmasına rağmen, bazı olumsuz yanları da vardır. Örneğin;
küçük uygulamalarda parça sayısı, gerekli akım ve sonuçta da fiyatın yüksek oluşu mikroişlemci
kullanımını bazı alanlarda etkilemiştir. Bu gibi olumsuz yanları nedeniyle bir mikroişlemci için gerekli
olan birimler, bir yonga altında birleştirilmiş ve böylece mikrodenetleyici sistemler ortaya çıkmıştır.

1.1 MİKRODENETLEYİCİLER:

Tek bir yongadan oluşan bilgisayarlara mikrodenetleyici denir. Yani bir mikrodenetleyici, bir bilgisayar
sisteminde bulunması gereken bellek, giriş/çıkış ünitesi gibi temel bileşenlerin tek bir yonga içerisinde
üretilmiş biçimidir ve onu mikroişlemcilerden ayıran en önemli özelliği budur. Mikrodenetleyiciler
otomobillerde, kameralarda , cep telefonlarında , fax modem cihazlarında ,fotokopi cihazlarında, radyo
televizyonlar vb. uygulamalarda kullanılmaktadır.

1
Bir mikrodenetleyicinin temel yapısı.

1.2 NEDEN MİKRODENETLEYİCİ KULLANIYORUZ?

Mikrodenetleyicilerin ucuz oluşu nedeniyle, tek yonga kullanarak elektronik çözümler üretmenin
maliyetinin daha düşük olması tercih nedenlerinden ilkidir.
İkincisi; mikrodenetleyicinin çalıştıracağı programı, içerisinde depolaması ve istenildiğinde
çalıştırabilmesi onun oldukça kullanışlı olmasını sağlar.
Örneğin, bir programcı mikrodenetleyiciyi programlayarak önceden belirlenen koşullara yada giriş/çıkış
uçlarından gelen verilere göre kararlar verdirebilir.
Eldeki verileri kullanarak bazı matematiksel ve mantıksal işlevleri yürütüp, elde ettiği sonucu yine giriş
çıkış uçlarından sayısal veriler (mantık1 mantık0) olarak çıkartabilir. Mikrodenetleyici bu işleri yaparak,
çok karmaşık ve onlarca entegre kullanılarak oluşturulan elektronik devrelerin işlevini üstlenmiş olur.
Mikrodenetleyiciye yüklenen bazı programlar, mikrodenetleyicinin 5 volt ve 0 volt arasında sonsuz
sayıdaki değerleri de algılayabilmesini sağlar. Bu durumda mikrodenetleyici bir bulanık mantık
denetleyici görevini üstlenir. Ancak bu programlama mantığı çok daha farklıdır.

Mikrodenetleyici sistemlerin önemli bir özellikleri de, çalışmaları için dışardan sadece bir osilatör, ki bu
basit bir RC osilatörü de olabilir, kullanmak yeterlidir. Mikrodenetleyicinin içindeki merkezi işlem birimi
(MİB - CPU), mikrodenetleyicinin beyni olup bütün işlemlerin yapılmasını sağlar. Mikrodenetleyici
belleğinden okuduğu programı çalıştırır ve sonuçların alınmasını sağlar. MİB’ nin kendi içerisinde ise,
yine MİB denetiminde , aritmetik ve mantık işlemleri yapan ALU bulunur. ALU, kullanıcı programına
uygun olarak istenen toplama , çıkarma, ve , veya gibi mantıksal ve aritmetik işlemleri yapar ve sonucu
istenilen yere kaydeder. ALU işlem yaparken MİB içerisinde bulunan kaydedicileri kullanır.
Bellek genel olarak program belleği ve veri belleği olmak üzere ikiye ayrılır. Program belleği, kullanıcının
yazmış olduğu program listesini tutar. Bu bellek PIC mikrodenetleyici serisinde 14 veya 16 bitlik olup
veri belleğinden ayrılmıştır. Harward mimarisi diye adlandırılan bu mimari, program ve verilerin aynı
bellek içerisinde saklandığı klasik Von-Neumann mimarisinden daha hızlı çalışmaktadır. Program belleği
birçok PIC mikrodenetleyici serisinde EEPROM olup, bu tip bellekler ultraviyole ışığa gerek olmadan
elektriksel olarak silinip, tekrar programlanabiliyorlar. Veri belleği 8 bitlik olup, bu bellek programda
kullanılan geçici verileri tutar.

1.3 PIC ÇEŞİTLERİ VE GENEL ÖZELLİKLERİ

Genel olarak mikrodenetleyicilerde bulunan özellikler aşağıdaki gibidir;

Gerilim kaynağı; bazı mikrodenetleyiciler +5V ile çalışırlar. Bazı mikrodenetleyiciler +2.7V gibi düşük
bir gerilimle veya +6V gibi yüksek bir gerilimle çalışırlar.

Saat; tüm mikrodenetleyiciler, çalışmaları için bir saat darbesi isterler. Bu darbe bir kristal devresi
kullanılarak çok hassas bir şekilde elde edilebilir. Çok hassas olmayan uygulamalarda ise bir RC osilatör
kullanmak yeterli olabilir. Mikrodenetleyici saat hızları, mikrodenetleyici çeşidine göre değişmektedir.

2
Birçok mikrodenetleyici 20 MHz gibi yüksek bir saat hızında rahatlıkla çalışabilirler. PIC
mikrodenetleyici uygulamalarında genellikle 4 MHz’ lik saat hızı kullanılmaktadır.

Zamanlayıcı devreleri; her mikrodenetleyici uygulaması için büyük bir önem taşırlar. Bir zamanlayıcı
devresi genellikle hassas bir saat devresi tarafından çalıştırılan bir sayaçtan oluşmaktadır. Bir çok
uygulamada zamanlayıcıya bir sayı yüklenmekte ve zamanlayıcı bu sayıyı her saat darbesinde bir
arttırmakta veya azaltmaktadır. Bu şekilde, zamanlayıcı sıfıra gelince istenilen zaman elde edilmiş olur.
Bazı mikrodenetleyici sistemlerinde sadece bir tane, bazılarında ise 3 veya 4 tane zamanlayıcı devresi
görmek mümkündür.

Reset girişi; bu giriş sayesinde mikrodenetleyici resetlenebilir. Reset devresi etkinleştirildiğinde, genelde
program belleğinin sıfırıncı adresinde bulunan ilk komut alınıp işleme konur. Birçok mikrodenetleyici
sisteminde bulunan ve güç kaynağı ile reset (power-on reset) diye adlandırılan devre sayesinde, devreye
akım verildiğinde mikrodenetleyici otomatik olarak resetlenir ve çalışmaya başlar.

Bekçi köpek (watchdog); birçok mikrodenetleyici sisteminde en az bir tane bulunur. Genelde 8 bitlik bir
zamanlayıcı gibi çalışan bekçi köpek devresinin belirli aralıklarla yazılım tarafından yenilenmesi
gerekmektedir. Yenilenmediği takdirde otomatik reset olur ve mikrodenetleyici yeniden program
belleğinin sıfırıncı adresinden devam eder. Bekçi köpek devreleri genellikle gerçek zaman kontrol
uygulamalarında kullanılırlar. Pic mikrodenetleyicilerin her modelinde bekçi köpek devresi görmek
mümkündür.

Kesme (interrupt) devresi; tüm gerçek zaman uygulamalarında büyük önem taşımaktadır. Bir kesme
gelince mikrodenetleyici yapmakta olduğu işlemi bırakıp, kesme için yazılmış olan kesme servis rutinine
gider ve orada istenilen işlem ne ise onu yapar. Kesme rutininden dönüşte ise mikrodenetleyici, kesme
öncesi bıraktığı yerden devam eder. Kesme iç ve dış olmak üzere ikiye ayrılır. İç kesme genelde
mikrodenetleyicinin içindeki zamanlayıcı devrelerden gelmektedir. Örneğin bir zamanlayıcı belirli bir
zaman sonra bir kesme meydana getirmek için programlanabilir. Bu durumda ayarlanan zaman
dolduğunda kesme oluşur. Dış kesme mikrodenetleyiciye yapılan dış bağlantılardan gelir. PIC
mikrodenetleyici serisinde hem iç hem de dış kesme devreleri görmek mümkündür.

Analog / sayısal çevirici; bazı mikrodenetleyici serilerinde bulunmaktadır. 8, 10 veya 16 bitlik çeviricileri
olan mikrodenetleyiciler vardır. Yine bazılarında 1, 5 veya 8 tane çevirici vardır.

Seri Giriş - Çıkış; seri iletişim PC başta olmak üzere birçok uygulamalarda kullanılmaktadır. Genel
olarak yazılım sayesinde ve zamanlayıcı devresini kullanarak her mikrodenetleyicide seri iletişim kurmak
mümkündür. Bazı mikrodenetleyici sistemleri içerisinde bulunan USART gibi ek donanım sayesinde seri
iletişim kolaylaşmıştır.

PWM Çıkış; darbe genişlik bindirimi çıkışı bazı iletişim ve kontrol uygulamalarında önem taşımaktadır.
Birçok mikrodenetleyici çıkışları yazılım ile düzenlenebilen PWM çıkışları sunmaktadır.

LCD Sürücü; bazı mikrodenetleyici sistemlerinde LCD sürücü donanımı bulunmaktadır. Bu durumda bir
LCD doğrudan mikrodenetleyiciye bağlanabilmekte ve programlanabilmektedir. Ancak genel olarak LCD
yi yazılım ile denetlemek kolay bir işlem olup LCD sürücüye gerek olmamaktadır.

Gerçek zaman saat; bu devre bulunduğumuz tarihi ve saati tutmaktadır. Bazı mikrodenetleyicilerde
bulunur ama yazılım ile de yapılabilir.

Uyku (sleep) modu; bu mod sayesinde mikrodenetleyici uykuya konur ve osilatör devresi durdurulur.
Uyku halinde bir mikrodenetleyicinin akım harcaması son derece düşüktür. Uykuda olan bir
mikrodenetleyici zamanlayıcı veya bekçi köpek devresi tarafından uykudan kaldırılır.

3
Düşük akımla çalışma; bazı mikrodenetleyiciler 20 mA gibi bir akımla çalıştıkları halde bazıları ise
sadece 2 mA harcarlar. PIC mikrodenetleyicileri 5 V ile çalıştıklarında akım harcamakları 2 mA kadardır.
3 V luk bir gerilim ile çalıştıklarında ise akım harcamaları ise 15 mikroamperdir.

Giriş - Çıkış Akım Özellikleri; bir mikrodenetleyiciyi dış dünyaya bağlarken giriş- çıkış akım
harcamasına önem vermemiz gerekir. Bazı mikrodenetleyiciler 25 mA kadar akım verebilirler, bazıları ise
sadece birkaç miliamper akım verebilirler. PIC mikrodenetleyicilerin önemli bir özellikleri 25 mA kadar
akım verebilmeleri ve böylece birçok algılayıcı veya elektronik cihazın doğrudan mikrodenetleyiciye
bağlanabilmesidir.

PIC ÇEŞİTLERİ

PIC microchip firmasının ürettiği mikrodenetleyicilere verdiği isimdir ve adını İngilizcedeki


Çevresel Üniteleri Denetleyici Arabirim anlamına gelen Peripheral Interface Controler kelimelerinin
baş harflerinden almıştır. PIC gerçekten de çevresel üniteler adı verilen lamba , motor , röle , ısı ve ışık
algılayıcısı gibi giriş/çıkış elemanlarının denetimini çok hızlı yapabilecek şekilde tasarlanmış bir
yongadır. RISC (reduced instruction set computer – indirgenmiş komut kümesi) mimarisi kullanılarak
üretildikleri için bir PIC’ i programlamak için gerekli komutlar oldukça basit ve sayı olarak da azdır.

Mikrodenetleyiciler aile olarak isimlendirilirken aşağıdaki özellikleri dikkate alınır:

Veri yolu; bir mikrodenetleyici yonga dışındaki harici ünitelerle veri alış verişini kaç bitle
yapıyorsa buna veri yolu uzunluğu denir.
Kelime boyu; mikrodenetleyiciler, kendi içlerindeki dahili veri saklama alanları olan
kaydediciler arasındaki veri alış verişini farklı sayıdaki bitlerle yaparlar. İşte bu dahili veri yolu
uzunluğuna kelime boyu 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.
Programlayıcı, bir PIC programı yazarken kullandığı komutun kaç bitlik bir kelime boyutu
olduğuyla pek fazla ilgilenmez. Seçilen bir PIC’ i programlarken uyulması gereken kuralları ve o
PIC ile ilgili özellikleri bilmesi yeterlidir. Bu özellikler PIC’ in bellek miktarı, giriş/çıkış portu
sayısı, A/D dönüştürücüye sahip olup olmadığı, kesme fonksiyonlarının bulunup bulunmadığı,
bellek tipinin ne olduğu gibi bilgilerdir. Bu özellikler firma kataloglarından öğrenilebilir. Ancak bu
katalogların türkçesine ulaşmak zordur. Kataloglardaki bazı İngilizce kelimelerin anlamları
şöyledir;
Family (aile) : PIC’ ler program belleğinin kelime genişliğine göre sınıflara ayrılmıştır. Bu
sınıflardan her birine bir aile denir.

Architectural features (mimari özellikler): Kelime genişliği, saat frekansı, kesme


(interrupt) gibi bilgilerin verildiği sütun.

Name (isim) : Bir aile içerisinde farklı özelliklerdeki PIC’ lerin isimleri.

Tecnology (teknoloji): Program ve veri belleğinin tipini belirten sütun.

Products (ürün): PIC’ in anma adı.


PIC denetleyicileri genel olarak aşağıdaki gibi 7 aileye ayrılabilir.
• 12CXXX 12-14 bit program genişliği
• 16C5X 12 bit program genişliği
• 16CXXX 14 bit program genişliği
• 16FXXX 14 bit program genişliği
• 17CXXX 16 bit program genişliği
• 18CXXX 16 bit program genişliği

4
• 18FXXX 16 bit program genişliği

PIC12CXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
12C508 512x12 25 4 6 -
12C509 1024x12 41 4 6 -
12CE518 512x12 25 4 6 -
12C671 1024x14 128 10 6 -
12C672 2048x14 128 10 6 -
12CE673 1024x14 128 10 6 -
12CE674 2048x14 128 10 6 -

PIC16C5X Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
16C54C 512x12 25 40 12 -
16C55A 512x12 24 40 20 -
16C56A 1024x12 25 40 12 -
16C57C 2048x12 72 40 20 -
16C58B 2048x12 73 40 12 -
16C505 1024x12 72 20 12 -

PIC16CXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
14000 4096x14 192 20 20 8
16C554 512x14 80 20 13 -
16C433 2048x14 128 10 6 4
16C76 8192x14 368 20 22 5
16C782 2048x14 128 20 16 8
16C924 4096x14 176 8 52 5

PIC16FXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
16F627 1024x14 224 20 16 -
16F873 4096x14 192 20 22 5
16F874 4096x14 192 20 33 8
16F876 8192x14 368 20 22 5
16F877 8192x14 368 20 33 8
5
PIC17CXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
17C42A 2048x16 232 33 33 -
17C43 4096x16 454 33 33 -
17C752 8192x16 678 33 50 12
17C762 8192x16 678 33 66 16
17C766 16384x16 902 33 66 16

PIC18CXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
18C242 8192x16 512 40 23 5
18C452 16384x16 1536 40 34 8
18C658 16384x16 1536 40 52 12
18C858 16384x16 1536 40 68 16

PIC18FXXX Ailesi:

Mikrodenetleyici Program Ram bellek En yüksek Giriş/çıkış A/D


Bellek Hız(Mhz) çevirici
18F242 8192x16 768 40 23 5
18F442 8192x16 768 40 34 8
18F452 16384x16 1536 40 34 8
18F8620 32768x16 3840 25 68 16
18F8720 65536x16 3840 25 68 16

6
1.4 PIC 16F877 GENEL GÖRÜNÜMÜ VE AKIŞ DİYAGRAMI

Bu tezde kullanılan PIC16F877’ nin genel özellikleri aşağıdaki gibidir;

7
1.5 PIC16F877 portlarının fonksiyonları;

PORTA: Her bir biti bağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir.
6 bit genişliğindedir (16F84’de 5 bittir). RA0, RA1,RA2,RA3 ve RA5 bitleri analog/sayısal çevirici
olarak ayarlanabilir. Buna ek olarak RA2 ve RA3 gerilim referansı olarak da ayarlanabilir (bu durumda
bu bitler aynı anda A/D çevirici olarak kullanılamazlar).İlgili kaydediciler ve adresleri aşağıdaki gibidir;

PORTA 0x05

TRISA 0x85 ; giriş/çıkış belirleme kaydedicisi

8
ADCON1 0x9F ; RA portlarının A/D , referans gerilimi veya sayısal giriş/çıkış
seçiminde kullanılır.
İşlemciye ilk defa gerilim uygulandığında RA4 hariç diğer beş PORTA biti A/D çeviricidir. Eğer RA
portunun bazı bitlerini sayısal giriş/çıkış olarak kullanmak isterseniz ADCON1 kaydedicisinde değişiklik
yapmanız gerekmektedir.

PORTB: Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit
genişliğindedir. B portunun her bacağı dahili bir dirençle VDD’ye bağlıdır (weak pull-up). Bu özellik
varsayılan olarak etkin değildir. Ancak OPTION kaydedicisinin 7.bitini 0 yaparak B portunun bu
özelliğini etkinleştirebilirsiniz.

RB4-RB7 bacakları aynı zamanda, bacakların sayısal durumlarında bir değişiklik olduğunda INTCON
kaydedicisinin 0. biti olan RBIF bayrağını 1 yaparak kesme oluştururlar. Bu özelliği, işlemci SLEEP
konumundayken, devreye bağlı tuş takımının her hangi bir tuşuna basıldığında işlemcinin yeniden
etkinleşmesi için kullanılabilir. Bütün bunların yanı sıra RB6 ve RB7 yüksek gerilim programlama, RB3
ise düşük gerilim programlama seçeneklerinde de kullanılmaktadır. İlgili kaydediciler ve adresleri
aşağıdaki gibidir.

PORTB 0x06

TRISB 0x86 ; giriş/çıkış belirleme kaydedicisi

OPTION_REG 0x81 , 0x181

PORTC: Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit
genişliğindedir. SPI, USART, Capture/Compare ve PWM gibi özel fonksiyonlar, ilgili kaydedicilerin
yapılandırılmasıyla bu porttan yürütülmektedir. İlgili kaydediciler ve adresleri aşağıdaki gibidir;

PORTC 0x07

TRISC 0x87 ; giriş/çıkış belirleme kaydedicisi

PORTD: Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit
genişliğindedir. Bütün port bacakları Schmitt Tetikleme girişlidir. TRISE kaydedicisinin 4. biti olan
PSPMODE bitini 1 yaparak “parallel slave mode” da kullanılabilir. Bu fonksiyon aracılığıyla 8 bit
genişliğindeki her hangi bir mikroişlemci yoluna (bus) bağlayabilirsiniz.

PORTD 0x08

TRISD 0x88 ; giriş/çıkış belirleme kaydedicisi

PORTE: Her bir biti bağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir.
3 bit genişliğindedir. RE0, RE1 ve RE2 bacaklarında Schmitt Tetikleme giriş tamponları vardır.Her bir
bacak analog/sayısal çevirici olarak ayarlanabilir. Eğer PORTD parallel slave port olarak ayarlanırsa ,
RE0, RE1 ve RE2 bacakları PORTD’ nin bağlandığı mikroişlemci yolunda sırasıyla READ, WRITE ve
CHIP SELECT kontrol girişleri olarak kullanılır. Bunun için TRISE uygun biçimde ayarlanmalıdır. İlgili
kaydediciler ve adresleri aşağıdaki gibidir.

PORTE 0x09

TRISE 0x89 ; giriş/çıkış belirleme kaydedicisi

9
ADCON1 0x9F ; RE portlarının A/D veya sayısal giriş/çıkış olarak seçiminde kullanılır

İşlemciye ilk defa gerilim uygulandığında, PORTE’ nin üç biti de A/D çevirici olarak yapılandırılmıştır.
Eğer RE portunun bazı bitleri sayısal giriş/çıkış olarak kullanmak istenirse, ADCON1 kaydedicisinde
değişiklik yapılması gerekmektedir.

1.6 PROGRAM VE KULLANICI RAM BELLEK ORGANİZASYONU

PIC16F877’ de üç bellek bloğu bulunmaktadır. Program ve kullanıcı veri belleği ayrı yol yapısına
sahiptir ve aynı anda erişilebilir. 16F877’ de 13 bitlik bir program sayacı vardır ve 8Kx14 word
adreslemeye yeterlidir. Reset vektörü 0x00 adresinde, kesme vektörüyse 0x04 adresinde yer almaktadır.

Kullanıcı veri belleği, birden fazla kaydedici bankasına bölünmüştür. Bu kaydedici bankalarında hem
genel amaçlı kaydediciler hem de özel fonksiyon kaydedicileri (SFR) bulunmaktadır. Kaydedici
bankasını seçmek için STATUS kaydedicisindeki RP1 ve RP0 bitleri kullanılmaktadır.

STATUS kaydedicisi; <RP1,RP0> bitlerini aşağıdaki gibi ayarlayarak istediğimiz kaydedici bankasına
erişebiliriz. Her kaydedici bankası 128 byte genişliğindedir (7Fh).

00 Bank0

01 Bank1

10 Bank2

10
11 Bank3

Özel fonksiyonlar:

Parallel Slave Port: TRISE kaydedicisinin PSPMODE biti 1 yapılarak PORTD 8 bit genişliğinde
mikroişlemci portu olarak kullanılabilir. Bu arada RE0,RE1 ve RE2’yi, TRISE ve ADCON1
kaydedicilerinde ilgili ayarlar yapılarak sayısal giriş olarak da tanımlamanız gerekiyor. Böylece harici bir
mikroişlemci; RE0,RE1 ve RE2’yi denetim olarak kullanarak 8 bitlik veri yoluna bağlı 16F877’ nin D
portuna hem veri yazabilir hem de okuyabilir.

USART: USART, yani senkron/asenkron alıcı verici 16F877’ deki iki seri giriş/çıkış modülünden biridir.
Seri iletişim arayüzü (SCI: serial comm.interface) olarak da bilinen USART, monitör veya PC gibi
aygıtlara tam çift yönlü asenkron bağlantıda kullanılmak üzere ayarlanabilir. A/D veya D/A ara
yüzlerinde, seri EEPROM’ lara yarım çift yönlü senkron bağlantıda kullanılmak üzere de ayarlanabilir.
USART aşağıdaki gibi ayarlanabilir.

• Asenkron : tam çift yönlü (full duplex)


• Senkron: Master , yarım çift yönlü (half duplex)
• Senkron: Slave, yarım çift yönlü

RC6 verici, RC7 ise alıcı port olarak kullanılmaktadır. RCSTA (0x18) ve

TXSTA (0x98) kaydedicileri yapılandırmada kullanılmaktadır.

Master Synchronous Serial Port (MSSP): MSSP modülü, diğer çevre birimleri veya mikroişlemcilerle
seri iletişimde kullanılmaktadır. Bu çevre birimleri seri EEPROM, kaydırmalı kaydediciler (shift
register), gösterge sürücüleri, A/D çeviriciler vb. olabilir. MSSP modülü aynı anda aşağıdaki iki moddan
birine ayarlanabilir:

• Serial Peripheral Interface (SPI)

RC5: Seri veri çıkışı (SDO: serial data out)

RC4: Seri veri girişi (SDI: serial data in)

RC3: Seri saat (SCK: serial clock)

• Inter Integrated Circuit (I2C)

RC4: Seri veri (SDA: serial data )

RC3: Seri saat (SCK: serial clock)

Bu modlardan birine göre ayarlamak için SSPSTAT (senkron seri port durum kaydedicisi, 0x94),
SSPCON (senkron seri port kontrol kaydedicisi, 0x14) ve SSPCON2 (senkron seri port kontrol
kaydedicisi 2, 0x91) kaydedicileri ayarlanmalıdır.

Analog/Sayısal Çevirici Modülü:

A/D modülü 16C7x ailesinden farklı olarak 10 bittir. Toplam 8 A/D kanal vardır.16F877’ nin güzel bir
özelliği de işlemci SLEEP modundayken bile A/D çeviricinin geri planda çalışmasıdır. A/D kanalları için
RA4 hariç diğer RA portlarını ve RE portlarını kullanabilirsiniz. Aşağıdaki kaydediciler kullanılmaktadır.

11
ADRESH 0x1E ; A/D sonuç kaydedicisi (High register)

ADRESL 0x9E ; A/D sonuç kaydedicisi (Low register)

ADCON0 0x1F ; A/D kontrol kaydedicisi0

ADCON1 0x9F ; A/D kontrol kaydedicisi1

Capture/Compare ve PWM Modülü: Her capture/compare ve pwm modülü 16 bitlik


yakalama(capture) kaydedicisi , 16 bitlik karşılaştırma(compare) kaydedicisi veya 16 bitlik PWM(darbe
genişlikli modülasyon) kaydedicisi olarak kullanılabilir.

Yakalama modunda, TMR1 kaydedicisinin değeri RC2/CCP1 bacağının durumunda bir gelişme
olduğunda CCPR1H:CCPR1L kaydedicilerine yazılır ve PIR1 kaydedicisinin 2. biti olan CCP1IF kesme
bayrağı 1 olur. RC2 bacağının durumu, her alçalan kenarda, her yükselen kenarda , her yükselen 4. veya
16.kenarda kontrol edilecek şekilde CCP1CON kaydedicisi aracılığıyla ayarlanarak yapılandırılabilir.

Karşılaştırma modundaysa; CCPR1 kaydedicisindeki 16 bitlik değer düzenli olarak TMR1 kaydedici
değeriyle karşılaştırılır ve bir eşitlik olduğunda RC2/CCP1 bacağı CCP1CON kaydedicisinde yapılan
yapılandırmaya göre 1, 0 olur veya durumunu korur.

PWM modundaysa: RC2/CCP1 bacağı 10 bit çözünürlükte darbe genişlik modülasyonlu bir sinyal
üretecek şekilde yapılandırılabilir. PR2 kaydedicisi darbe genişlik periyodunun tayininde
kullanılmaktadır.

CCPR1H 0x16 ; Yakalama/karşılaştırma kaydedicisi (High register)

CCPR1L 0x15 ; Yakalama/karşılaştırma kaydedicisi (Low register)

CCP1CON 0x17 ; kontrol kaydedicisi

PR2 0x92 ; PWM çıkış kaydedicisi

TMR1L 0x0E ; TMR1 kaydedicisi (High register)

TMR1H 0x0F ; TMR1 kaydedicisi (Low register)

12
13
2-PICBASIC PRO VE ÖZELLİKLERİ:

Micro Engineering Labs firması tarafından mikrodenetleyiciler için geliştirilen PICBasic Pro kullanımı,
Dos ve Windows işletim sistemleriyle gelen QBASIC dilinin kullanımına çok benzemektedir. BASIC
dilinin kullanım nedenlerinden birisi de; dilin çok kolay öğrenilir olma özelliği ve dünyanın en çok
kullanılan dili olmasıdır. Programlama yapabilmek için akış diyagramı çıkartabilmek ve QBASIC diliyle
basit programlar yapabilmeyi bilmek yeterlidir.

PBP ile program yazmak çok kolay olmasına rağmen takip edilebilir ve anlaşılabilir programlar
yazabilmek için aşağıdaki sıralamanın izlenilmesinde fayda vardır;

Başlık bölümü
Tanımlar (DEFINE) bölümü
Değişkenlerin ve sabitlerin tanımlandığı bölüm
Başlangıç işlemleri
Ana program kodları
Alt programlar

2.1 PIC PROGRAMLAMAK İÇİN GEREKLİ OLANLAR

PICBasic Pro derleyicisini kullanarak PIC programlayabilmek için ve programlanmış


mikrodenetleyicileri denemek için gerekli donanımlar şunlardır;

*IBM uyumlu bir bilgisayara sahip olmak.


*DOS ve Windows işletim sistemlerini başlangıç seviyesinde bilmek.
*Bir metin editörü kullanmasını bilmek.
*QBASIC dilini orta düzeyde bilmek.
* PICBasic Pro derleyicisine sahip olmak.
*PIC programlayıcı yazılımına sahip olmak.
*PIC programlama kartına sahip olmak.
*Deneme kartına sahip olmak
*Farklı uygulamalar için gerekli elektronik elemanlar.

Yukarıda bahsedilen PIC programlayıcı yazılımı, PICBasic Pro derleyicisi tarafından derlenerek
makine diline dönüştürülmüş kodları PIC e gönderme işlemini yerine getirir. Bu konuda kullanılabilecek
programlardan birkaçı PIC16PRO , EPIC , COM84 , PICSTART plus , PIC Mate ,LET universal PIC
programmer , PICUP, IC-PROG olarak sıralanabilir. Bu tezdeki uygulamalar, IC-PROG yardımıyla
mikrodenetleyiciye aktarılmıştır. Türkçe kullanım seçeneği de sunan bu program, www.ic-prog.com
adresinden ücretsiz olarak temin edilebilir.
Ayrıca mikrodenetleyiciyi programlamak için kullanılan programlama kartı piyasadan temin
edilebileceği gibi kullanıcının kendisi tarafından da yapılabilir. Aşağıda verilen devre ile ; 8 , 18 , 28 ve
40 bacaklı mikrodenetleyiciler RS-232 portu kullanılarak programlanabilir. Bu programlama kartı
sayesinde bilgisayarda ilgili yazılımlar tarafından makine diline çevrilmiş olan program kodlarını
bilgisayardan alıp, PIC mikrodenetleyicisine yazabiliriz. Günümüzde birçok firma farklı biçimlerde ve
kapasitelerde programlayıcı kartı üretmektedir. Bu kartların bazıları seri porta bağlanırken, bir kısmı da
paralel porta bağlanarak programlama yapmaktadır. Kartların besleme biçimi ve gerilimleri birbirine göre
farklılık göstermektedir. Örneğin aşağıda verilen programlama devresi bir besleme kaynağına gereksinim
duymazken, bazı programlayıcılar en az 18 V’ luk bir güç kaynağı ile beslenirler. Bir programlayıcı kart
ile programlanabilecek PIC sayısının fazlılığı ise kartın kapasitesini belirler.

14
Bu projede kullanılan mikrodenetleyici 40 bacaklı 16F877 olduğu için aşağıdaki programlayıcı
devresi kullanılmıştır.

15
PICBasic Pro kullanılarak PIC programlama işlemi üç aşamada gerçekleşir. Önce kaynak kod
olarak ifade edilen program yazılır ve bir BASIC dosya oluşturulur. Sonra bu kaynak kod dosyası PIC
tarafından anlaşılacak şekilde derlenir. Ardından derlenen kod PIC’ e yüklenir. Bu üç adım için üç araca
gereksinim vardır:
Metin editörü, PBP derleyici, PIC programlama cihazı.

1. AŞAMA: BASIC kodunun hazırlanması ve metin editörü;

İlk aşamada kullanılan araç, BASIC kaynak kodunun yazımına yönelik bir metin editörüdür.
DOS’ un EDIT veya Windows’ un NOTEPAD editörleri, bu iş için uygundur. Biz bu tezdeki
uygulamalarda Microcode Studio programını kullandık.

2. AŞAMA: BASIC kodunun derlenmesi ve PBP derleyici;

İkinci aşamada PIC’ e yüklenecek kodun derlenmesine yönelik işler görülür. Derleme teknik
olarak iki basamakta geçekleşir. İlk basamakta BASIC kod ASSEMBLY koda çevrilir. Bu çevrim, yani
BASIC kodun ASSEMBLY kod olarak derlenmesi, BASIC derleyici denilen bir derleyici ile yapılır.
İkinci basamağı ASSEMBLY kodun HEX koda (makine diline) çevrilmesi oluşturur. Bu tercümeyi
ASSEMBLER adı verilen derleyici yürütür. İşte bu iki basamaklı derleme aşamasını yürüten araç PBP
Derleyici’ dir.

16
3. AŞAMA: PIC’ in programlanması;

Biz bu adım için IC – PROG yazılımını kullandık. Bu program üzerinden PIC’ e yazdırılmak
istenen program makine kodu olarak, programlayıcı devre aracılığıyla PIC’ e gönderilir.

2.2 PIC İLE UYGULAMALARDA KARŞILAŞILABİLECEK BAZI SORUNLAR

PIC ile çalışılırken karşılaşılan en sık problemlerden birisi PIC’ e dışarıdan bağlanan birkaç
elemanın uygun olmaması veya hatalı bağlanmasıdır. Bunun için en önemli noktalar aşağıdaki gibidir ;

• MCLR bacağı, 5V’luk güç kaynağının + ucuna, 4.7K’ lık bir dirençle doğrudan veya
gerilim sınırlayıcı bir dirençle birlikte kullanılan reset butonuyla bağlı olmalıdır. Eğer
MCLR ucu açık bırakılırsa, bu uçtaki gerilim seviyesinde dalgalanmalar oluşur ve bu
durumda normal çalışan bir program aniden reset olabilir.

• İyi bir kristal ve buna uygun değerli sığaçların OSC bacaklarına bağlı olmalıdır. .Sığaçların
değerleri çok yüksek olduğunda osilatör çalışmayabilir. 4MHz’lik kristal için 2 adet 22 pf
lık seramik sığaç PIC’ lerle ilk çalışmaya başlarken seçilecek en iyi frekansı üretecektir.
Hangi kristale hangi değerde sığaç bağlanacağı kataloglardan seçilebilir.

• Problemlerin çoğu güç kaynağından kaynaklanır. PIC çok düşük bir güç harcamasına
rağmen çıkış bacaklarına bağlı bir alıcı varsa çok akım çekebilir. Bu durumda PIC’ e enerji
verince, güç kaynağı uçlarında gerilim düşümleri olur ve PIC normal çalışmasını
sürdüremez. Bu nedenle iyi regüle edilmiş bir çıkış veren güç kaynağı kullanmalıyız.

Aşağıda görülen devre 9V’luk pilden 5V gerilim elde ediyor ve 10μf’lık sığaç yardımıyla da
dalgalanma azaltılıyor.

Bu devrenin gerçeklemesi aşağıdaki gibidir;

17
Ayrıca bir programı hazırladıktan sonra doğrudan PIC üzerinde denemek yerine bilgisayarda
simülasyon programlarından yararlanılabilir. Bu sayede hatalı bir program yazıldığında, gereksiz yere
PIC programlanmamış olur ve hata tespiti kolaylaşmış olur. Bu tür simülasyon programlarının en
kullanışlısı “Proteus 6 professional” dır.

2.3 PICBASIC PRO KOMUT KÜMESİ

PICBasic Pro derleyicisinde kullanılan komutlar ve kısa açıklamaları aşağıdaki tabloda verilmiştir.
Uygulamalarda kullanılan komutların detaylı açıklaması uygulamalar kısmında mevcuttur.

KOMUTLAR AÇIKLAMALAR
1. @ Satırın başında @ karakteri , kodun assembly dilinde bir komut olduğunu belirtir.
2. ADCIN A/D Dönüştürücü değerini okuyup, herhangi değişkene atama yapar.
3.ASM..ENDASM ASM ve ENDASM arasına yazılan ifadelerin assembly dilinde olması gerekir.
4. BRANCH İstenilen satıra dallanma sağlanır.
5.BRANCHL Eğer kod sayfası 1 den fazla ise dallanma için BRANCL kullanılır.

18
6.BUTTON Pin okumaları için kullanılır.
7.CALL Alt programı çağırmak için kullanılır.
8.CLEAR Sistem değişkenleri dahil bütün değişkenler sıfırlanır.
9.CLEARWDT Watchdog zaman sayacını sıfırlamada kullanılır.
10.COUNT Belirlenen peryodla istenilen pindeki darbe sayısını istenilen değişkene atar.
11.DATA PIC in DATA EEPROM bölümüne bilgi aktarımını sağlar.
12.DEBUG Belirlenmiş 1 veya daha çok bacağa seri bilgi gönderme işlemini yapar.
13.DEBUGIN Belirlenmiş bir bacaktan seri bilgi alımını gerçekleştirir.
14.DISABLED ENABLE komutu görülene kadar kesme rutini devre dışı bırakılır.
15.DISABLEDEBUG ENABLE veya ENABLE DEBUG görülene kadar debug devre dışı bırakılır.
16.DISABLE ENABLE görülene kadar kesme rutini devre dışı bırakılır.
INTERRUPT
17.DTMFOUT İlgili bacakta DTMF tuş tonu dizisi üretir.
18.EEPROM İlk kez programlanması sırasında birtakım sabit değerleri EEPROM’da saklar.
19.ENABLE Daha önce DISABLE ile devre dışı bırakılmış kesmeleri yeniden devreye sokar.
20.ENABLE DEBUG DISABLE DEBUG ile devre dışı bırakılmış programı devreye sokar.
21.ENABLE Daha önce DISABLE la devre dışı bırakılmış kesme rutininin,izleyen program
INTERRUPT satırlarında yeniden devreye alınmasını sağlar.
22.END Program akışını durdurur ve düşük güç moduna geçer.
23.FOR…NEXT Bir dizi tümcenin count adlı sayacın start değerinden başlayıp END değerine
kadar
Her dönüşte step adlı basamak kadar artarak işlem görmesini sağlar.
24.FREQOUT İstenilen bacakta frekans üretilmesini sağlar.
25.GOSUB Program akışını,belirtilen alt yordama yönlendirir.
26.GOTO Program akışını,belirtilen etikete yönlendirir.
27.HIGH Belirtilen bacağı mantık 1 yapar.
28.HPWM Program diğer işlemleri yürütürken arka planda durmaksızın PWM üretir.
29.HSERIN Asenkron seri haberleşmeyi sağlar.Donanımdan PIC e bilgi gönderimi.
30.HSEROUT Asenkron seri haberleşmeyi sağlar.PIC den donanıma bilgi gönderimi.
31.I2CREAD I^2C ara birimli bir bellekten okuma işleminde kullanılır.
32.I2CWRITE I^2C ara birimli bir bellekten yazma işleminde kullanılır.
33.IF…THEN Karşılaştırma işlemlerinde IF…THEN döngüsü kullanılır.
34.INPUT Belirtilen bacağı giriş olarak yapılandırır.
35.LCDIN LCD RAM içeriğini okur ve istenilen değişkene atama işlemini yürütür.
36.LCDOUT İstenilen değişkeni LCD ekranda gösterilmesini sağlar.
37.LED Belirtilen değişkene değer atamak için kullanılır.
38.LOOKDOWN 8 bitlik sabit değerler listesinde arama yapmayı sağlar.
39.LOOKDOWN 2 Sabit değerler listesinde arama yapmayı sağlar.
40.LOOKUP 8 bitlik sabit değerler tablosundan değer seçmekte kullanılır.
41.LOOKUP 2 Sabit değerler tablosundan değer seçmekte kullanılır.
42.LOW Belirtilen bacağı mantık 0 yapar.
43.NAP Entegreyi kısa süreler için düşük güç moduna geçirir.
44.ON DEBUG Bu komut görüldüğünde,programdaki her PBP komutunun önüne belirtilen
etikete
bir çağrı girilir.
45.ON INTERRUPT Kesme hizmet alt yordamına dallanmayı sağlar.
46.OUTPUT Belirtilen bacağını çıkış yapar.
47.OWIN PIC e RESET darbesi gönderir ve birkaç byte okumada kullanılır.
48.OOUT PIC e RESET darbesi gönderir ve birkaç byte yazma işleminde kullanılır.
49.PAUSE Program akışını belirtilen ms sayısı kadar durdurur.
50.PAUSE US Program akışını belirtilen micro saniye kadar durdurur.
51.PEEK Belirtilen RAM adresindeki kaydediciyi okur.
52.POKE Belirtilen adresteki yazmaca değer atamada kullanılır.

19
53.POT Belirtilen bacaktaki potansiyometreyi okur.
54.PULSIN Belirtilen bacak üzerinde darbe genişliğini ölçer.
55.PULSOUT Belirtilen periyot ve süre içerisinde,belirtilen bacakta darbe üretir.
56.PWM Belirtilen bacakta PWM üretimi sağlanır.
57.RANDOM Belirtilen değişkene rasgele bir değer atar.
58.RCTIME Belirtilen bacağın,belirtilen değerde kaldığı süreyi ölçer.
59.READ Yonganın,DATA EPROM undan 1 byte okuma yapmasını sağlar.
60.READCODE Belirtilen adresteki word boyutlu kodu okur ve istenilen değişkene atar.
61.RESUME Kesme sürecinin çıkışında,program akışını kaldığı yere döndürür.
62.RETURN Alt yordamdan dönmeyi sağlar.
63.REVERSE Giriş olan bir bacağı,çıkışa çevirir.
64.SELECT CASE IF…THEN bloklarının yerine kullanılabilir.
65.SERIN Dış ortamdan PIC e, asenkron seri formatta bir yada daha fazla sayıda bilgi alır.
66.SERIN 2 SERIN komutuyla benzer kullanılır.
67.SEROUT Standart asenkron seri formatta,belirtilen bacağa veri gönderir.
68.SEROUT 2 Standart asenkron seri formatta,belirtilen bacaklara veri gönderir
69.SHIFTIN Saat sinyaliyle senkronize olacak şekilde,istenilen bacaktaki bitleri kaydırır ve
değişkene atar.
70.SHIFTOUT Saat sinyaliyle senkronize olacak şekilde,istenilen değişkendeki bitleri kaydırır ve
istenilen bacağa atar.
71.SLEEP PIC i belirtilen süre boyunca düşük güç modunda tutar.
72.SOUND Belirtilen bacakta bir ton veya beyaz gürültü üretir.
73.STOP Programı sonsuz döngüye sokar.
74.SWAP İki değişkenin değerlerini birbirine atar.
75.TOGGLE Belirtilen bacağın tersini alır.
76.USBIN Belirtilen uç noktaya yönelik hazır USB verisini buffer ile işaret edilen tampona
koyar.
77.USBINIT USB haberleşmesiyle çalışan bir program bu komutla başlatılmalıdır.
78.USBOUT Tampondaki dizi değişkeninin byte sayısını, belirtilen uç noktaya gönderir.
79.WHILE…WEND Bu iki komut arasındaki koşul sağlanana kadar,program akışı bu döngü içerisinde
kalır.
80.WRITE Yonganın belleğine değer yüklemek için kullanılır.
81.WRITECODE Word boyutlu bir veriyi, yonganın belleğine yazmada kullanılır.
82.XIN X-10 protokolünü destekleyen cihazlardan bilgi alınımında kullanılır.
83.XOUT X-10 protokolünü destekleyen cihazlarına bilgi gönderiminde kullanılır.

20
3-UYGULAMALAR

UYGULAMA-1 :

LED li FLAŞÖR:

21
Uygulamanın PBP dilinde yazılmış hali aşağıdaki gibidir.

'****************************************************************
'* Name : flasor.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 26.03.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
led var portd.0
yanik con 1000
sonuk con 500
trisd.0=0
led=0
anaprogram:
led=1
pause yanik
led=0
pause sonuk
goto anaprogram

programın açıklanması aşağıdaki gibidir;

led var portd.0 : d portunun 0 nolu bacağına ‘led’ ismi verildi , böylece portd.0 bacağına yapılacak
işlemler (veri gönderimi alımı vb.) ‘led’ değişkeni kullanılarak gerçekleştirilebilir.

yanik con 1000 : yanik adlı sabite 1000 değeri atandı. Ledin yanık kalma süresi olarak tanımlanmıştır.
Atanan değer ms cinsindendir yani 1 sn kadar led yanık kalacaktır.

sonuk con 500 : aynı mantıkla sonuk adlı sabite 500 ms değeri atandı yani led 0,5 saniye sönük konumda
kalacak.

trisd.0=0 kullanıcı RAM belleğinde bank1-88h adresinde bulunan trisd yazmacı ile d portunun giriş/çıkış
yapılandırılması gerçekleştirilir. Kaydedicilerin bellek adresleri , PBP derleyicisi tarafından assembly
diline derlenirken otomatik olarak atanır. Yani assembly ile programlama yapılırken bu adreslerin
bilinmesine gerek duyulurken PBP kullanıldığında buna gerek duyulmaz.

Trisd.0=0 , trisd.0=%11111110 , trisd.0=$FE komutları aynı işlemi gerçekleştirir. (Sırasıyla onluk


tabanda ,ikilik tabanda ve onaltılık tabanda yazılmış halidir.) Giriş/çıkış yapılandırılması yaparken 0
çıkış olarak , 1 ise giriş olarak yapılandırmayı temsil eder. trisd.0=0 komutu ile d portunun 0. bacağı çıkış
olarak yapılandırılmıştır.

led=0 : bu komutla çıkış olarak yapılandırılmış ve led olarak isimlendirilmiş d portunun 0. bacağı mantık
0 (0 V) konumuna alınır.

anaprogram: :ana programın başladığını belirten etiket. Etiket ataması etiketin sonundaki ‘:’ işareti ile
sağlanır.

led=1 : portd.0 mantık 1 (+5 V) konumuna alındı.

22
pause yanik :yanik süresince PIC düşük güç konumuna alındı ve bu süre kadar gecikme elde edildi. Yani
1 saniye boyunca led yanık konumda kaldı.

led=0 : tekrar led sönük konuma alındı.

pause sonuk :0,5 saniye sönük konumda beklendi.

goto anaprogram : ana program adlı etikete koşulsuz dallanılarak program sonsuz döngüye sokuldu.

Sonuç olarak;
PIC bu programın işlemeye başlamasıyla portd.0 a bağlı olan led 1 saniye yanıp 0,5 saniye sönük
kalacaktır. Yanik ve sonuk adlı sabitlerin değerleri değiştirilerek ledin yanma sönme süreleri
ayarlanabilir.

UYGULAMA-2:

KAYAN LED

İlk uygulamayı biraz geliştirip program içerisindeki herhangi değişkeni portlara bağlanmış yeterli sayıda
led kullanarak ikili tabanda gösterebiliriz.
Uygulamanın devre şeması aşağıdaki gibidir;

23
'****************************************************************
'* Name : KAYAN_LED.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 26.03.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'program başında birinci led yanacak, sonra sırayla sönüp bir sonraki led yanacak'

sayac var word


trisc=0
basla:
sayac=1
anaprogram:
portc=sayac
pause 100
sayac=2*sayac
if sayac > 128 then basla
goto anaprogram

programın açıklanması aşağıdaki gibidir;

'program başında birinci led yanacak,sonra sırayla sönüp bir sonraki led yanacak' ; ' işareti ile PBP
derleyicisinde açıklama yapılabilir. Derleyici bu işaretten sonrasını dikkate almaz. Programlayıcı,
hatırlatıcı bilgileri bu işaret yardımıyla programın herhangi bir yerine yazabilir.

sayac var word ; sayac adlı değişken word olarak tanımlanmıştır. Bu tanımlama ile değişkenin kaç bit
olabileceği bilgisi derleyiciye verilir.

24
trisc=0 ; c portunun bütün bacakları çıkış olarak yapılandırılmıştır.
basla: ; programın başlangıç etiketi.
sayac=1 ; sayac adlı değişkene 1 değeri atandı.
anaprogram: ; ana programın başlangıç etiketi.
portc=sayac ; sayac değişkeninin değeri c portuna aktarıldı.
pause 100 ; 100 ms bekleme süresi olarak ayarlandı.
sayac=2*sayac ; sayac değeri 2 ile çarpıldı.
if sayac > 128 then basla ; eğer sayaç değeri 128 den büyükse basla etiketine git, değilse bir alt satıra geç.
goto anaprogram ; koşulsuz olarak ana program etiketine dallan.

Sonuç olarak,program içerisindeki sayac adlı değişkenin değeri ledlerden ikili tabanda gözlemlenebilir.

UYGULAMA-3:

A/D ÇEVRİM:

Bu uygulamada; dışardan alınan analog bilgi, sayısal bilgiye çevrildikten sonra C portuna bağlı ledlerde
gösterilme işlemi gerçeklenecektir.

İlgili devre şeması aşağıdaki gibidir.

25
'****************************************************************
'* Name : A/D_CEVRIM.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 07.07.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'Analog çevrim parametreleri
define adc_bits 8
define adc_clock 3
define adc_sampleus 50

adsonuc var byte

'başlangıç işlemleri

trisc=%00000000
trisa=%00000001
adcon1=%00000100
portc=0
anadongu:
adcin 0, adsonuc
portc=adsonuc
26
goto anadongu
end

Bu programın açıklanması aşağıdaki gibidir.

define adc_bits 8 :analog bilgi 8 bitlik sayısal bilgiye çevrilir.


define adc_clock 3 :A/D çevriminde kullanılacak osilatörün
seçimi(RC=3)
define adc_sampleus 50 :mikrosaniye olarak örnekleme süresi

adsonuc var byte :byte tipinde adsonuc adında bir değişken


tanımlandı.
'başlangıç işlemleri

trisc=%00000000 :C portu çıkış olarak seçilmiştir.


trisa=%00000001 :A portunun sadece 0. kanalı giriştir.
adcon1=%00000100 :A portunun 0. kanalı analog giriş olarak atanmıştır.

Adcon1 kaydedicisinin yapılandırılması aşağıdaki tablo yardımıyla gerçekleştirilir.

A/D dönüştürücü yapılandırılması adcon1 kaydedicisinin son dört bitine bağlı olarak
yapılır.
Örneğin adcon1 kaydedicisinin son dört biti 0101 ise;

0101 D D D D Vref+ D A A RA3 Vss 2/1

Tablonun yukarıdaki satırı geçerlidir.

portc=0 :C portunun çıkışı sıfıra çekilir ve böylece ledlerin sönük durumda olması sağlanır.

27
anadongu:
adcin 0, adsonuc : 0. analog kanal okunur ve sayısal değeri adsonuc değişkenine atanır.
portc=adsonuc :adsonuc değişkeninin değerini c portundan dışarı verir ve böylece bu değere göre
ledleri yakar.
goto anadongu :anadöngü yazılı satıra döner, böylece 0. kanalı sürekli okur ve c portuna bağlı
ledlerde gösterir.
End : programın bittiğini gösterir.

A/D ÇEVİRİCİDE DİKKAT EDİLMESİ GEREKEN HUSUSLAR

A portunun 5, E portununsa 3 kanalı her biri 10 bitlik çözünürlükte A/D çevirici olarak
yapılandırılabilir.PIC 16F877 de A ve E portları, reset anında analog kanal olarak yapılandırılmıştır.10
bitlik çözünürlük, istenirse 8 bitlik olarak da kullanılabilir.PIC 16F877 de analog kanallar kullanıldığında
10 bitlik A/D çevrim sonucunun üst byte ı adresh ve alt byte ı adresl olarak iki kaydedicide
saklanır.Analog kanal yapılandırılması için adcon1 yazmacı aşağıdaki gibi ayarlanır.

U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0


ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
bit 7 bit 0

7. bit (ADFM) :A/D sonuç format biti


1 : sağa yaslamalı.Adresh yazmacının en üst 6 biti 0 olur.
0 : sola yaslamalı.Adresl yazmacının en alt 6 biti 0 olur.

4. , 5. ve 6. bitler : kullanılmamaktadır. 0 olarak işlem yapılır.

0…3. bitlerde (PCFG3…PCFG0) : ADCON1 yapılandırılma tablosuna göre ayarlanır. Bu tablo


yukarıda verilmiştir.

Örneğin ; A portunun tüm kanallarının analog, E portununsa tüm kanallarının sayısal olmasını istiyorsak,
sola yaslamalı olarak 8 bitlik çözünürlükte işlem yapacaksak,

DEFINE ADC_BIT 8 A/D çevrim sonucunun 8 bit olmasını sağlar.

ADCON1.7=0 sonuç sola yaslamalı formatlanır, 8 bitlik çözünürlükle işlem yaptığımız için adresh
kaydedicisinde 8 bitlik sonuç yer alır ve adresl kaydedicisinin 6. ve 7. bitleri kullanılmaz.

ADCON1=%00000010 A portunun kanallarının analog, E portunun kanallarınınsa sayısal olmasını


sağlar.

ADCON0 kaydedicisinin 2. bitine bakılarak A/D çeviricinin okuma işlemini tamamlayıp


tamamlamadığını anlayabiliriz. Bu okuma işleminin tamamlanmadan o satırın geçilmesini önlemek için
programa aşağıdaki komut satırı eklenir;

oku:
if adcon0.2=1 then oku

Yani A/D çevirici okuma işlemini tamamladıktan sonra, ADCON0 yazmacının 2. biti mantık 0 olur.
Bu uygulamada bu kontrol işleminin yapılmasına gerek duyulmadığından kullanılmamıştır. Çünkü burada
program zaten sürekli olarak çevirme sonucu elde edilen sayısal değeri alıp dışarı veriyor.

ADCİN X, DEĞİŞKEN biçiminde kullanılan komut satırı, X nolu kanaldan okunan analog bilginin
sayısal değerini belirtilen değişkene atar.

28
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 3 ' (3=rc)
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.

Sırası ile tekrar gözden geçirirsek;

DEFINE ADC_BITS 10

A/D çevirim sonucunun kaç bitlik olacağını ayarlamaktadır. Sonuç 8 bit ise buraya 8, 10 bit
ise buraya 10 yazılmalıdır. Tabii ki kullanılacak değişken tespit edilen bit değerine uygun
olmalıdır.

DEFINE ADC_CLOCK 3 ‘ (3=rc)

A/D çevrim işlemlerinde her bit karşılığı bir saat darbesi ile belirlenir ve kaynak olarak
PIC’ in osilatörü veya dahili RC osilatör kullanılır. A/D işlemlerinde bit başına çevrim
süresi yaklaşık 1,6 mikrosaniye olmalıdır.
PIC’ in kendi osilatörü kullanılacak ise bu süreyi tutturmak için sistemi çalıştıran kristal
frekansına göre bir hesap yapılıp gerekli parametre bulunmalı ve buraya yazılmalıdır.
Örnek bir hesap yaparsak, kullanabileceğimiz formül şöyledir;

Tçevirim= X/fosc.

Burada X değeri 2 veya 8 veya 32 olabilmektedir. fosc ise kristal frekansı olup MHz
cinsindendir.

Tçevrim = 1,6 us. Olduğundan, diyelim ki kristal frekansımız 4 Mhz ve PIC’in osilatörünü
kullanacağız. Hesaba göre ;

(00) Tcevirim=2/4 = 0,5 us çıkar. 1,6 us’ den çok küçük olduğu için uygun değildir.
(01) Tcevirim=8/4 = 2 us çıkar.1,6 us’ den büyük ve yakın olduğu için kullanılabilir.
(10) Tcevirim=32/4 = 8 us çıkar 1,6 us’ den çok büyük olduğu için uygun değildir.

Kullanılabilir olan 8 değerinin Define komutundaki karşılığı (%01=1) 1 dir.O halde komut
DEFINE ADC_CLOCK 1 ‘olacaktır.

Aynı hesabı 20 MHz için yaparsak;

(00) Tcevirim=2/20 = 0,1 us çıkar 1,6 us’ den çok küçük olduğu için uygun değildir.
(01) Tcevirim=8/20 = 0,4 us çıkar 1,6 us’ den çok küçük olduğu için uygun değildir.
(10) Tcevirim=32/20 = 1,6 us çıkar 1,6 us ile aynı olduğundan çok uygundur.

O halde komut; (%10=2)


DEFINE ADC_CLOCK 2 ‘olacaktır.

Kristal osilatörün uygun olmadığı durumlarda (%11=3), bu komut 3 olarak verilerek dahili
RC osilatör kullanılır. En çok kullanılan seçenek budur.

29
Son olarak;

DEFINE ADC_SAMPLEUS 100 komutunu inceleyelim.

Belirtilen ADC_SAMPLEUS süresi, A/D işleminin başlatılması ile yani ADCON0.2 bitinin
mantık 1 seviyesine çekilmesiyle uygulanan bir gecikme süresidir. Genelde 50-100 us
arasındaki süreler, çevrim için uygundur.

UYGULAMA-4:

LCD GÖSTERGE UYGULAMALARI

Karakter LCD göstergeler gerek endüstriyel uygulamalarda gerekse tüketim mallarında oldukça yaygın
kullanılan gösterge aygıtlarıdır. Biz uygulamamızda 2 satır 16 karakterlik LCD kullandık.

Uygulamaya ilişkin devre şeması:

30
lcd ekranında 1. satıra ‘nasılsınız’, 2. satıra ‘merhaba’ yazdıran program:

'****************************************************************
'* Name : LCD.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 07.07.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************

DEFINE LCD_DREG PORTB 'LCD data bacakları hangi Porta bağlı?


DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
DEFINE LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor

'baslangıç işlemleri

low portB.2 'lcd read-write hattı mantık 0 (yazma işlemi yapılır)


pause 100 'LCD nin çalışmaya başlaması için 100 ms bekle

31
'ana program bloğu

basla:
lcdout $fe ,1 'göstergeyi temizle
pause 500 '500 ms bekle

lcdout "NASILSINIZ" '1. SATIR 1. KARAKTERDEN İTİBAREN NASILSINIZ


'İFADESİ GÖZÜKÜR
PAUSE 500

LCDOUT $FE , $C0 ,"MERHABA" '2. SATIR 1. KARAKTERDEN İTİBAREN MERHABA


'İFADESİ GÖRÜNÜR
PAUSE 500

GOTO basla
End

Bu uygulamadaki tanımlama (define) komutu LCD nin PIC’ e nasıl bağlandığını gösterir. Derleyici bu
tanımları dikkate alarak PIC ile LCD arasında veri alış verişini sağlayacak yapılandırmayı gerçekleştirir.
Bu uygulamada LCD’ nin veri yolu 4 bitlik seçilmiş. Bir çok uygulamada 4 bitlik veri yolu yeterlidir.

Lcdout $fe ,1
pause 500

Bu komut dizisi LCD ekranını silen bir kalıp olarak kullanılır. Aslında yaptığı işlem LCD ekranında
boşluk göstermedir.

LCD nin 1. satırında değişken , sabit yada karakter gösterimi ;

Lcdout “karakter”
Pause süre

Lcdout “#sabit”
Pause süre

Lcdout “#değişken”
Pause süre

Bir değişken LCD ekranında gösterilirken değişkenin ve con ile tanımlanmış sabitlerin önüne # karakteri
konulmalıdır. Süre adlı değişken programcıya bağlı olarak değiştirilebilir. Süre gösterilen bilginin ne
kadar süreyle ekranda kalması gerektiğini söyler.

LCD nin 2. satırında değişken , sabit yada karakter gösterimi ;

Lcdout $FE , $C0 ,”karakter”


pause

Lcdout $FE , $C0 ,”#sabit”


pause

Lcdout $FE , $C0 ,”#değişken”


pause

bu kalıpla LCD nin 2. satırı da kullanılmış olur.


32
LCD ler seri ve paralel olmak üzere ayrılabilir. Seri LCD lerle tek bir veri yolu kullanarak veri alış
verişi yapılır. Paralel LCD lerde ise 4 veya 8 bit veri yolu kullanılabilir. Biz yukarıdaki ve diğer
uygulamalarda paralel LCD kullandık.

Paralel LCD kullanımı ve genel özellikleri:

İlk LCD’ ler (liquid cyrstal gösterge) 1960 yılında kullanılmaya başlandı. Bilgisayarın seri veya paralel
portundan yada mikrodenetleyiciden gönderilen verilerle kontrol edilen LCD lerin yapısı iki bölümden
oluşur ; yazı yada grafikleri gösteren LCD ve bu göstergeyi süren yonga. Genellikle baskı devrenin bir
yüzüne LCD diğer yüzüne de sürücü yonga yerleştirilir.
Hitachi firması tarafından üretilen HD44780 yongası en çok kullanılan ve LCD’ ler için standart olmuş
bir sürücü yongasıdır. Eğer gösterge 2x8 , 1x16 veya daha küçük ise baskı devre üzerinde sadece bir tane
HD44780 yongası bulunur. Gösterge 2x16 , 2x20 ise bir HD44780 bir de bellek yongası olmak üzere iki
yonga bulunur. Gösterge bu söylenenlerden daha büyükse, bu durumda baskı devre üzerinde bir tane
HD44780 ve iki tane de bellek yongası bulunur.
Bir LCD üzerinde HD44780 veya buna uyumlu bir yonganın kullanılıp kullanılmadığını anlamak için; ilk
olarak;

• LCD nin arkasındaki yonga okunmalıdır. Eğer yonga aşağıda listelenen ve çeşitli
markalar altında üretilenlerden birisi ise , bunlar birbiriyle ve HD44780 ile uyumludur.

 Hitachi HD44780 (orjinal)


 Samsung KS0070S
 Samsung KS0066S
 Sanyo LC7985NA
 Epson SED1278
 OKI MSM6222

• İkinci işlem pinleri saymaktır. HD44780’ in bilgisayar veya PIC ile haberleşmesi için 14
bacağa ihtiyaç vardır. Bu bacaklar 14’ lü olarak ya aynı sıra halinde göstergenin sol üst
kenarında ya da yedişerli iki sıra halinde arka tarafta bulunurlar. Bazı göstergelerde 15 ve
16. uçlar da vardır. Bunlar göstergeyi ışıklandırmak için kullanılan uçlardır.

Bacak açıklamalar
numarası
1 Vss (toprak)
2 Vcc (+5v) besleme
3 VLc , parlaklık ayarı
4 RS (kaydedici seçimi)
5 R/W okuma yazma
6 E yetkilendirme
7 D0 (LSB) en düşük anlamlı veri yolu
8 D1
9 D2
10 D3
11 D4
12 D5
13 D6
14 D7 (MSB) en anlamlı veri yolu
15 LED + (anot)
16 LED - (katot)
33
Lcdout komutu kullanımı ;

Lcdout veri {,veri…}

LCD ye bir komut gönderebilmek için o komutun önüne $FE yazılması gerektiğinden bahsedilmişti.
Aşağıdaki tabloda kullanılan bazı komutların listesi verilmiştir.

Komut Yaptığı iş
$FE,1 Ekranı siler
$FE,2 Satır başına dönülür
$FE,$0C Kursorün görüntüsünü yok eder.
$FE,$0E Kursörü _ biçimine getirir.
$FE, $0F Kursörü yanıp söner yapar
$FE, $10 Kursörü 1 sola kaydırır
$FE, $14 Kursörü 1 sağa kaydırır
$FE ,$C0 Kursörü ikinci satırın başına getirir.

LCD’ ler PIC’ lere bağlanırken 8 bitlik veri yolu kullanıldığında, 8 bitin tamamı bir porta bağlanmalıdır.
4 bitlik veri yolu kullanımında ise bir portun alt veya üst 4 bitine bağlanmalıdır. Lcdout komutu sürekli
yazma işlemi yaptığı için R/W ucu daima toprağa bağlanmalıdır.

UYGULAMA 5:

LCD Lİ TERMOMETRE UYGULAMASI

Buraya kadar yaptığımız uygulamaları birleştirip, bir üst aşamaya taşırsak; bir sıcaklık algılayıcı
yapabiliriz.

Uygulamaya ilişkin devre şeması ve programı aşağıdaki gibidir.

34
'****************************************************************
'* Name : TERMOMETRE.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 10.05.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
TRISA=%00000001
TRISB=0
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi Porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
DEFINE LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------------

35
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 1 ' (3=rc)
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------
HAM var word 'ADC den okunan ham sayısal değer.
VOLT var word '16 bit değişken tipi seçtik kullanacağımız
'değer 10 bit olacak.
sicaklik var word
ons var byte
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W ucu düşük (W), devrede doğrudan
‘ toprağa bağlanabilir.
Lcdout $FE,1 ' LCD ekranını temizler.
pause 200 ' LCD nin açılması için gerekli süredir.

BASLA:
ADCIN 0,HAM

BAK: IF ADCON0.2=1 THEN BAK

Volt=(ham */ 1250)
sicaklik=volt/10 'SICAKLIĞIN TAM KISMI

ons=volt//10 'SICAKLIĞIN ONDALIK KISMI


lcdout $fe,1, #volt,"mV"
lcdout $fe ,$c0,"SICAKLIK=",#sicaklik,",",#ons
pause 500
goto BASLA

Bu programda kullanılan LCD ve ADC komutları önceki uygulamalarda açıklandı. Programa


bakıldığında;
AN0 yani PORTA.0 bacağına bağlayacağımız bir potansiyometre, üzerinden gerilim
okuması yapılmasını sağlayacaktır.

Programın A/D çevrim yaparken yaptığı işlemler açıklanırsa;

Okunan değer 0-5 volt arası gerilim değeri için; 0-1023 sayısal değerine çevrilmiş
olacağından, okunacak değer başına volt değeri;

5/1024 =0,0048828 olarak hesaplanabilir.

Okunacak sayısal değerdeki 1 bitlik değişim için , gerekli milivolt değişimi bulunan
değerin 1000 ile çarpımıyla elde edilebilir.
(Okuma/mV)= 4,8828

Bulunan bu değeri 256 ile çarparsak;

4,8875 x 256 = 1250 değerini buluruz.

36
256 ile çarpılmasının nedeni; ADC den okunan değer PIC içerisinde sekizer bitlik
ADRESH ve ADRESL kaydedicilerinde saklanır. Yani sonuç 16 bitliktir. Eğer 16 bitle
ifade edilebilecek kadar büyük bir sayı elde edebilirsek bu sayıyla 32 bit işlem yapmak
mümkün olur ve 256 yı kullanmamızın asıl nedeni eğer 16 bitlik bir sayıyı 256 ya çarpıp
bölme işlemi için PBP dilinin bize sağladığı kolaylıktır.(*/ operatörü)

Bu değeri kullanarak 32 bit işlem yapabiliriz.

1250 değeri (5000/1024)*256 değerine karşılık gelmektedir.

Sonuçta HAM değerini bu sayı ile çarpıp 256' ya bölersek sonucu elde etmiş oluruz.
Ancak sonuç 32 bit sınırında olduğundan bu işi 32 bit çarpma ile yapıyoruz ve orta baytı
aldığımızda ise zaten sayının 256'ya bölünmüş halini elde etmiş oluyoruz.
Kısacası sayısala çevrilmiş sayıyı 1250 ye çarpıp 1250 ye bölmüş oluyoruz.

Bu işlemin sonucunda ölçülen milivolt değerini elde etmiş oluyoruz.

Bu uygulamada sıcaklık ölçümü için LM35 entegresi kullanılmıştır. LM35 entegresi sıcaklıktaki 1
derecelik değişime karşılık çıkış ucunda 10mv luk değişim gösterir (10mV/°C). Dolayısıyla kabaca
sıcaklık değişimini doğrusal olarak gözlememizi sağlar. Yani yukarıdaki uygulama için teorik olarak
5000 volt 500 dereceye karşılık gelir. Sıcaklık bilgisinin tam kısmını elde edip LCD de göstermek için
hesaplanan milivolt değeri 10 a bölünür ve LCD ekranına gönderilir. Ondalık kısım işleme katılmadığı
için LCD de gözükmez. Dolayısıyla daha hassas bir uygulama için ondalık kısımda hesap edilir.
Sıcaklığın ondalık kısmı için; elde edilen sayısal milivolt değerinin 10 a bölümünden kalan hesaplanır.
Yani HAM değerinin Mod10 u hesaplanır.
Bunun için ;

Ons=ham//10 komutu kullanılır. // operatörü ham değerinin mod10 değerini hesaplar.

Örneğin sayısal çevrim sonucunda milivolt değerimiz 305 olarak hesaplandı (LM35 entegresinin çıkışı)
sıcaklık değerimizin tam kısmı 305/10=30 derece ve ondalık kısmı 305//10=5 yani sıcaklık değerimiz
30,5 derece olarak LCD de gösterilebilir hale getirildi.

Daha sonra LCD de gösterilmek için gerekli komutlar kullanıldı ve program başlangıca dallandırıldı.

ADC işlemlerinde ölçümler genelde çok kararlı olmaz. Bir biri arkasına yapılan ölçümlerde
ufak tefek farklılıklar görülebilir. Bu nedenle çoğunlukla ortalama alma metodu kullanılır.
Aynı yerden birden fazla ölçüm alınır ve sonuçlar toplanır. Sonuçta kaç adet ölçüm
yapılmış ise toplam, o sayıya bölünür. Örnek vermek gerekirse;

FOR I=1 TO 10
ADCIN0, HAM
TOPLAM= TOPLAM + HAM
NEXT I
HAM= TOPLAM/10

Sonuçta Ham değeri 10 adet ölçümün ortalamasını gösterecektir ve oldukça kararlı bir
değer olacaktır

37
UYGULAMA - 6:

ORANSAL DENETLEYİCİ İLE SICAKLIK DENETİMİ:

Bu uygulamada referans kazan suyu sıcaklığı için gerekli denetleme işaretinin nasıl üretildiği
incelenmiştir. Potansiyometre yardımıyla referans sıcaklık ve gerçek sıcaklık bilgisi dışardan PIC e
verilip bu değerlere göre denetleme işareti üretilir.
Üretilecek denetleme işareti, referans ve gerçek sıcaklık değerleri eşit olduğunda 2.5V değerini
alacaktır. Referans sıcaklık, gerçek sıcaklıktan büyük olduğunda hata değerine göre denetim işareti 2,5-
4V arasında değer alacaktır. Eğer referans sıcaklık, gerçek sıcaklıktan küçükse, bu durumda denetleme
işareti, hataya göre 1-2,5V arasında değer alacaktır.
Ayrıca belirlenen tolerans aralığına göre, programa gömülü bir histeresiz karakteristiği
kullanılacaktır.

Uygulamaya ilişkin devre şeması ve program aşağıdaki gibidir.

38
'****************************************************************
'* Name : DENETLEYICI.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 10.05.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
TRISA=%11111111
TRISB=0
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
'---------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi Porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
39
DEFINE LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------------
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 1 'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10000100 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------
TOLERANS CON 51 'SAYISAL DEĞERDİR 5 DERECEYE
' KARŞILIK GELİR.
REFS VAR WORD 'REFERANS SICAKLIK ADC den okunan ham
'SAYISAL değer.
GERS VAR WORD 'GERÇEK SICAKLIK 16 bit değişken tipi seçtik
' kullanacağımız değer 10 bit olacak.
FARK VAR WORD 'HATANIN SAYISAL DEĞERİ
DNTLYC VAR WORD 'DENETLEYİCİ İŞARETİNİN SAYISAL DEĞERİ
REFSLCD VAR WORD
REFSTAM VAR WORD
REFSONDA VAR WORD
GERSLCD VAR WORD
GERSTAM VAR WORD
GERSONDA VAR WORD
DNTLYCLCD VAR WORD
DNTLYCTAM VAR WORD
DNTLYCONDA VAR WORD
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W ucu düşük (W), devrede doğrudan toprağa
' bağlanabilir.
LCDOUT $FE,1 ' LCD ekranını temizler.
pause 200 ' LCD nin açılması için gerekli süredir.

BASLA:
GOSUB OKU 'ADC OKU

IF REFS>922 THEN ’90 DERECE SICAKLIĞA EŞİT SAYISAL DEĞER


LCDOUT $FE,1,"YUKSEK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

IF REFS<205 THEN ’20 DERECE SICAKLIĞA EŞİT SAYISAL DEĞER


LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS sıcaklığın ondalık kısmı
40
GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 500

IF GERS >= REFS-TOLERANS AND GERS<= REFS+TOLERANS THEN

'EĞER BAŞLANGIÇTA GERÇEK SICAKLIK HİSTERESİS ARALIĞINDAYSA


'DENETLEYİCİ 2,5V YANİ HATA 0 OLUR

DNTLYC=512 ’2.5 V A EŞİT, DENETİM İŞARETİNİN


‘SAYISAL DEĞERİ
DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN GERİLİM
' DEĞERİ HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI

LCDOUT $FE,1," DENETLEYICI"


LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
goto BASLA

ENDIF

IF GERS<REFS THEN DONGU_1

'GERS<REFS İSE GERÇEK SICAKLIĞI ARTIRACAK DENETLEYİCİ İŞARETİ UYGULANMALIDIR


‘BUNUN İÇİN DE DÖNGÜ_1 E GİDİLECEK, AKSİ DURUMDA GERS>REFS DEMEKTİR
DÖNGÜ_2
' YE GİDİLECEK

DONGU_2:

GOSUB OKU 'ADC OKU

IF REFS<205 THEN
LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
41
pause 3000

IF GERS>= REFS-TOLERANS AND GERS<=REFS THEN

DNTLYC=512
'DENETLEYICI PORTLARDAN BİRİSİNDEN DIŞARI VERİLECEK

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ İŞARETİN GERİLİM


' DEĞERİ HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_2
ENDIF

IF GERS < REFS-TOLERANS THEN


GOTO DONGU_1
ENDIF

FARK=GERS-REFS
IF FARK>307 THEN
DNTLYC = 205
ENDIF
IF FARK <307 THEN
DNTLYC =512-FARK
ENDIF

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ İŞARETİN GERİLİM


' DEĞERİ HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_2

DONGU_1:
GOSUB OKU 'ADC OKU

IF REFS>922 THEN
LCDOUT $FE,1,"YUKSEK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
42
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 3000

IF GERS>=REFS AND GERS<= REFS+TOLERANS THEN

DNTLYC=512

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ İŞARETİN GERİLİM


'DEĞERİ HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_1
ENDIF

IF GERS > REFS+TOLERANS THEN


GOTO DONGU_2
ENDIF

FARK=REFS-GERS
IF FARK>307 THEN
DNTLYC =819
ENDIF

IF FARK <= 307 THEN


DNTLYC=512+FARK
ENDIF

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ İŞARETİN GERİLİM


' DEĞERİ HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_1

OKU:
ADCIN 0,REFS '0. KANALDAN REFERANS SICAKLIĞI OKU
ADCIN 1,GERS '1. KANALDAN GERÇEK SICAKLIĞI OKU
DEVAM: IF ADCON0.2=1 THEN DEVAM

RETURN

43
UYGULAMAYA İLİŞKİN PROGRAM AKIŞ ÇİZELGESİ:
BAŞLA

Uyarıları
kontrol et

EVET
GERS histeresiz
aralığında mı? DNTLYC=2,5V

HAYIR

EVET HAYIR

DÖNGÜ_1 GERS<REFS DÖNGÜ_2

DÖNGÜ_1

DÖNGÜ_2

REFS VE GERS REFS VE GERS


DEĞERLERİNİ OKU DEĞERLERİNİ OKU
VE GÖSTER VE GÖSTER

REFS <GERS REFS -T< GERS


<=REFS+T <=REFS
HAYIR

HAYIR

EVET
DNTLYC=512 DNTLYC=512
YANİ 2.5 V YANİ 2.5 V

GERS > REFS + T GERS < REFS - T


HAYIR

EVET EVET
DÖNGÜ_2 DÖNGÜ_1

FARK VE DNTLYC FARK VE DNTLYC


HESAPLA VE GÖSTER HESAPLA VE GÖSTER

44
Uygulamayı açıklayacak olursak; ilk önce referans ve gerçek sıcaklık değerleri okunuyor ve LCD de
gösteriliyor. Referans sıcaklığın en yüksek değerden (90 derece) büyük ve en düşük değerden (20 derece)
küçük olup olmadığı kontrol ediliyor. Eğer 90 dereceden büyükse, yüksek referans sıcaklığı uyarısı
veriliyor ya da 20 dereceden küçükse düşük referans sıcaklığı uyarısı verilip, program işlem yapmadan
başa dönüyor.
Daha sonra gerçek sıcaklığın belirtilen tölerans aralığında olup olmadığı kontrol ediliyor.Eğer tölerans
aralığındaysa yine program işlem yapmadan başa dönüyor, Tölerans aralığında değilse gerçek sıcaklığın
referans sıcaklıktan büyük olup olmadığı sorgulanıyor.
Referans sıcaklık gerçek sıcaklıktan büyükse DÖNGÜ1’e, küçükse DÖNGÜ2’ye dallanıyor.

DÖNGÜ1’de ilk olarak gerçek ve referans sıcaklık değerleri okunur ve LCD de gösterilir.
Eğer Ref.<GERS<=Ref +Tolerans durumu söz konusu ise histeresiz gereği referans sıcaklık
gerçek sıcaklığa eşit alınır. Bu durumda hata sıfır olacağından, denetleyici işareti 2,5V olarak uygulanır.
Eğer bu durum dışında ise;
GERS>Ref + Tolerans sorgulaması yapılır. Eğer bu sorgunun cevabı EVET ise belirlenen
histeresiz aralığı aşıldığından DÖNGÜ2’ye dallanılır.Aksi durumda FARK (hata) ve denetleyici işareti
hesaplanarak LCD de gösterilir.Daha sonra DÖNGÜ1’e dönülür.
DÖNGÜ2’de ilk olarak gerçek ve referans sıcaklık değerleri okunur ve LCD de gösterilir.
Eğer Ref – Tolerans < GERS < Ref. durumu söz konusu ise histeresiz gereği referans sıcaklık,
gerçek sıcaklığa eşit alınır. Bu durumda hata sıfır olacağından, denetleyici işareti 2,5V olarak uygulanır.
Eğer bu durum dışında ise;
GERS< Ref. – Tolerans sorgulaması yapılır. Eğer bu sorgunun cevabı EVET ise belirlenen
histeresiz aralığı aşıldığından DÖNGÜ1’e dallanılır. Aksi durumda FARK (hata) ve denetleyici işaret
hesaplanarak LCD de gösterilir. Daha sonra DÖNGÜ2’ye dönülür.
Burada görüldüğü gibi histeresiz; program DÖNGÜ 1 i çalıştırırken REF ile REF + T arasında
etkili olur. Program DÖNGÜ 2 yi çalıştırırken ise, histeresiz REF ile REF – T arasında etkili olur.

Oransal denetleyicili bir sistem tasarlandığından; denetleyici işaret hesaplanırken, referans


sıcaklık değeri ile gerçek sıcaklık değerleri arasındaki farkın büyüklüğü göz önüne alınır. Bu fark ne
kadar büyükse, denetleyici işareti de o oranda büyük olmalıdır. Böylece gerçek sıcaklığın referans
sıcaklık değerine hızlı bir şekilde yaklaşması sağlanmış olur. Ancak biz uygulamamızda, denetim
işaretinin 1 V ile 4 V arasına ötelenmiş olmasını istediğimizden, fark işaretinin belli değerlerden büyük ya
da küçük olması halinde denetim işaretinin yine 1 V ya da 4 V vermesini sağlamalıyız. Bunun için de;

Program DÖNGÜ 1 e dallanmışsa; fark değeri 1.5 V gerilim değerine eşit olan 307 sayısal değerinden
büyükse, denetleyici işareti için 4 V gerilim değerine denk gelen 819 sayısal değeri veriliyor. Eğer fark
işareti 1.5 V gerilim değerine denk düşen 307 sayısal değerinden küçükse, denetleyici işaretinin,
programda görülen işlemle, 2.5 V ile 4 V arasında bir değer alması sağlanır.

Programın Döngü 2 ye dallanmış olması durumunda ise; yine fark işaretinin 307 sayısal değerinden
büyük ya da küçük olmasına göre, denetleyici işaretinin benzer şekilde 1 V ya da 1 V ile 2.5 V arasında
değer alması sağlanır.

45
UYGULAMA-7:

3 MOD SEÇMELİ SICAKLIK DENETİMİ:

UYGULAMA-6 için verilen denetleme işaretinin elde edilişi burada kullanıcı tarafından sisteme mod
girişi yapılarak elde ediliyor.
Bu uygulama soğuk, serin ve sıcak havalarda kullanılacak kazan suyu sıcaklığı denetimine benzetilmeye
çalışılmıştır. Yani ;
Sıcak havada kazana yakıt süren motor 30 saniyede 4 saniye çalışacak. Serin havada 30 saniyede 8
saniye çalışacak, soğuk havada ise 30 saniyede 12 saniye çalışacaktır. Bu süreler görülmesi ve
incelenmesi kolay olması nedeniyle böyle seçilmişlerdir.

Uygulamaya ilişkin program ve devre şeması aşağıdaki gibidir;

46
'****************************************************************
'* Name : MOD_SEC.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 09.07.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************

DEFINE LCD_DREG PORTB 'LCD data bacakları hangi Porta bağlı?


DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------------
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 1 ' (3=rc)
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10000100 '7. bit 1 yapıldı 10 bit sonucu sağa dayalı almak için

'-------------------------------------------------------------------------------

TOLERANS CON 51
REFS VAR word 'REFERANS SICAKLIK ADC den okunan ham
‘sayısal değer.
GERS VAR word 'GERÇEK SICAKLIK 16 bit değişken tipi seçtik
'kullanacağımız değer 10 bit olacak.

DNTLYC var WORD 'DENETLEYİCİ İŞARETİ


REFSLCD VAR WORD
REFSTAM VAR WORD
REFSONDA VAR WORD
GERSLCD VAR WORD
GERSTAM VAR WORD

47
GERSONDA VAR WORD
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W ucu düşük (W), devrede doğrudan toprağa bağlanabilir.
LCDOut $FE,1 ' LCD ekranını temizler.
pause 200 ' LCD nin açılması için gerekli süredir.

BASLA_2
LOW PORTD.0
IF (PORTE.0=0 AND PORTE.1=0) OR (PORTE.0=0 AND PORTE.2=0) OR (PORTE.1=0 AND
PORTE.2=0)THEN
LCDOUT,$FE,1," HATALI MOD"
LCDOUT,$FE,$C0," SECIMI "
PAUSE 500
GOTO BASLA_2
ENDIF

IF PORTE.0=0 THEN
LCDOUT,$FE,1,"MOD1 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000

DON_1:
GOSUB OKU_2
GOSUB LCD_2

HIGH PORTD.0
PAUSE 4000
LOW PORTD.0
PAUSE 26000
IF PORTE.0<>0 THEN GOTO BASLA_2
GOTO DON_1
ENDIF

IF PORTE.1=0 THEN
LCDOUT,$FE,1,"MOD2 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000
DON_2:
GOSUB OKU_2
GOSUB LCD_2

HIGH PORTD.0
PAUSE 8000
LOW PORTD.0
PAUSE 22000
IF PORTE.1<>0 THEN GOTO BASLA_2
GOTO DON_2
ENDIF

IF PORTE.2=0 THEN
LCDOUT,$FE,1,"MOD3 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000
48
DON_3:
GOSUB OKU_2
GOSUB LCD_2

HIGH PORTD.0
PAUSE 12000
LOW PORTD.0
PAUSE 18000
IF PORTE.2<>0 THEN GOTO BASLA_2
GOTO DON_3
ENDIF

'********ADC DEN OKU*********************************

OKU_2:

ADCIN 0,REFS '0. KANALDAN REFERANS SICAKLIĞI OKU


ADCIN 1,GERS '1. KANALDAN REFERANS SICAKLIĞI OKU
DEVAM_2: IF ADCON0.2=1 THEN DEVAM_2

RETURN

'****************,LCD DE GOSTER****************

LCD_2:
IF REFS>922 THEN
LCDOUT $FE,1,"YUKSEK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA_2
ENDIF

IF REFS<205 THEN
LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA_2
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEKSICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 500

RETURN

49
Programın açıklanması şu şekilde yapılabilir;

E portu mod seçme işlemi için giriş olarak yapılandırılmıştır ve çalışılması istenilen moda göre E
portunda ilgili bacağın mantık 0 a getirilmesi gerekmektedir. Örneğin soğuk hava (mod3) modu için
kullanıcı tarafından porte.3 toprak , porte.2 ve porte.1 +5 v değerine getirilmelidir.
Programın en başında kullanıcının hatalı mod girişi yapıp yapmadığı kontrol edilmektedir.
Daha sonra gerekli sorgulamalar yapılarak hangi modun seçildiği belirlenir ve seçilen moda göre motorun
çalışma ve durma süreleri belirlenerek portd.0 dan bu işaret motora gönderilir. Ayrıca gerçek sıcaklık ve
referans sıcaklık değerleri lcd den gösterilir.

Uygulama denenirken motor için 3-9 volt arası pil ile çalışabilen küçük güçlü DC motorlar kullanılabilir.
Fakat sorun ; motor her ne kadar küçük güçlü olsa da sürülebilmesi için 200mA ve daha yukarı değerde
akım gerekmektedir. PIC den gönderilen akımın en yüksek değeri ise 20 mA seviyesindedir. Dolayısıyla
bu akım değerini yükseltmek için bir yükseltici katı kullanmak gerekmektedir. Şekilde görülen L298
entegresi ile bu işlem gerçekleştirilebilir. Ayrıca bu akım değeri “darlington” devresi yardımıyla da elde
edilebilir. Darlington devresi aşağıdaki gibi gerçeklenebilir.

50
UYGULAMA-8:

RÜZGAR YÖNÜ VE HIZI ÖLÇÜMÜ

Şekil a Şekil b

Şekil b’ de verilen rüzgar türbününün kanat çapı yaklaşık 35 – 40 m. civarında olup, kule yüksekliği ise
75 m.’ dir. Bu rüzgar türbünü rüzgar açı ve hızına göre yönünü, rüzgar hızı açısını kule üzerine şekil a’ da
verilmiş kupalı anemometreden aldığı veriler sayesinde, içerisine yerleştirilmiş programlanabilir bir cihaz
ile türbünü en verimli şekilde rüzgardan yararlanmasını sağlar.

Bu uygulamada rüzgar hızı ve doğrultusunun ölçümü gerçeklendi.Rüzgarın doğrultusu ve hızı için iki
adet potansiyometre kullandık.Rüzgar hızının doğrusal olmaması nedeniyle takogeneratörün hızını
parçalı doğrusallaştırma yöntemiyle üç parça halinde doğrusallaştırdık.Rüzgar hızı 0-250 d/dak.
aralığında ise K1 , 250-550 d/dak. aralığında ise K2, 550-1000 d/dak. aralığında ise K3 katsayısı ile
doğrusallaştırılmıştır.

Yön bilgisi ise 360/8=45 derecelik açılarla ana ve ara yönler belirtilerek her bir yönün ± 22,5 derece
aralığında o yöne ait doğrultu bilgisi LCD ekranında gösterildi. Doğu 0 derece olarak alındı.

51
İlgili program ve devre şeması aşağıdaki gibidir.

52
'****************************************************************
'* Name : RUZGARGULU.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 28.05.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE LCD_BITS 4 'LCD VERİ YOLU 4 BİTLİKTİR'
DEFINE LCD_DREG PORTB 'LCD VERİ YAZMACI B PORTUNA BAĞLIDIR'
DEFINE LCD_DBIT 4 'DATA BİTİ 4. BİTİNDEN BAŞLIYOR'
DEFINE LCD_RSREG PORTB 'RS KAYDEDİCİSİ D PORTUNA BAĞLI'
DEFINE LCD_RSBIT 1 'RS KAYDEDİCİSİ 1. BİTE BAĞLI'
DEFINE LCD_EREG PORTB 'ENABLE PORT B YE BAĞLI
DEFINE LCD_EBIT 3 'ENABLE PORTB.3 E BAĞLI

DEFINE ADC_BITS 10 '10 BİTLİK ADC


DEFINE ADC_CLOCK 3 'OSİLATÖR
DEFINE ADC_SAMPLEUS 100 'ÖRNEKLEME SÜRESİ MİKRO SANİYE

ADCON1=%10000100 'AN0 AN1 AN2 ANALOG GİRİŞ SEÇİLDİ

'SABİTLER'

K1 CON 156
K2 CON 250
K3 CON 376

'DEĞİŞKENLER'

ACI VAR WORD


ACILCD VAR WORD
ACITAM VAR WORD
ACIONDA VAR WORD
HIZ VAR WORD
HIZLCD VAR WORD
HIZTAM VAR WORD
HIZONDA VAR WORD
GEN VAR WORD

LOW PORTB.2
PAUSE 200

BASLA:

53
ADCIN 0,GEN
ADCIN 1,ACI
OKU:IF ADCON0.2=1 THEN OKU

'HIZ BİLGİSİ İÇİN PARÇALI DOĞRUSALLAŞTIRMA

IF GEN<410 THEN HIZ=GEN*/K1


IF GEN=>410 AND GEN<717 THEN HIZ=250+((GEN-410)*/K2)
IF GEN=>717 AND GEN<1023 THEN HIZ=550+((GEN-717)*/K3)

'AÇI BİLGİSİ İÇİN DÜZENLEMELER


IF (ACI>=0 AND ACI<=64) OR (ACI>960 AND ACI<=1023) THEN
LCDOUT $FE,1," DOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>64 AND ACI<=192 THEN


LCDOUT $FE,1," KUZEYDOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>192 AND ACI<=320 THEN


LCDOUT $FE,1," KUZEY"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>320 AND ACI<=448 THEN


LCDOUT $FE,1," KUZEYBATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>448 AND ACI<=576 THEN


LCDOUT $FE,1," BATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>576 AND ACI<=704 THEN


LCDOUT $FE,1," GUNEYBATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>704 AND ACI<=832 THEN


LCDOUT $FE,1," GUNEY"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF
54
IF ACI>832 AND ACI<=960 THEN
LCDOUT $FE,1," GUNEYDOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF
GOTO BASLA
Parçalı doğrusallaştırma işlemi için kullanılan K1, K2, K3 değerlerinin hesaplanması;

K1 için;
Rüzgar hızı 0 – 250 d/d aralığındayken takogeneratörden 0 – 2 V arasında gerilim alındığını kabul ettik.
Gerilim aralığımız 0 - 5 V arasında olduğundan ve bunu 10 bitlik A/D çevirici ile sayısala
dönüştürdüğümüzden, 2 V gerilim değeri sayısal olarak;
(2*1023)/5 hesabından yaklaşık 410 olarak bulunur. Buna göre 1. bölge için eğimin tersi;
1/m1=250/410=0.609 olur. Daha önceki uygulamada da değinildiği gibi bu değer çok küçük olduğundan,
bu değeri 256 ile çarparsak;
K1=256*0.609 = 156 olarak bulunur. Program içerisinde gerçek değer bulunacakken, yine */1250 işlemi
uygulanacaktır.

K2 için;
Rüzgar hızı 250 – 550 d/d arasındayken alınan gerilimin 2 – 3.5 V arasında olduğunu kabul ettik.
Yukardaki hesaplamalar ile;
3,5 V sayısal olarak 717 değerine denk gelir. Buradan 2. bölge için eğimin tersi;
1/m2 = (550-250)/(717-410) = 0.977 olarak bulunur. Buna göre;
K2= 0.977*256 = 250 olur.

K3 için;
Rüzgar hızı 550 – 1000 d/d arasındayken alınan gerilimin 3.5 – 5 V arasında olduğunu kabul ettik.
Yukarıdaki hesaplamalar ile;
5 V sayısal olarak 1023 değerine denk gelir. Buradan 3. bölge için eğimin tersi;
1/m3 = (1000-550)/(1023-717) = 1.47 olarak bulunur. Buna göre;
K3= 1.47*256 = 376 olur.

55
‘rüzgar hızı ile gerilimin ve gerilimin sayısal değeri arasındaki ilişkiyi gösteren grafikler’

Benzer işlem rüzgarın doğrultusu için de yapılır.doğu yönü 0 derece kabul edildi. Buna göre 0 – 5 V
arasında gerilim üreten bir potansiyometre üzerinden rüzgarın doğrultusu bilgisinin alındığı kabul edildi.
Bu gerilim değeri de 10 bit olarak sayısala çevrildiğinden 0 – 1023 arası sayısal değer alır. Yön bilgisinin
±22.5 derece arasında kaydırılmış olduğu söylenmişti. Buna göre gerilimin sayısal değerine rüzgarın
doğrultusu;
0 – 64 ve 960 – 1023 arası doğu
64 – 192 arası kuzeydoğu
192 – 320 arası kuzey
320 – 448 arası kuzeybatı
448 – 576 arası batı
576 – 704 arası güneybatı
704 – 832 arası güney
832 – 960 arası güneydoğu olarak alınmıştır.

Programın işleyişinde ise; potansiyometreler üzerinden gerilim olarak alınan hız ve doğrultu bilgisi
sayısal değerlere çevrilmiştir. Daha sonra ise hız için hangi K değerinin ve doğrultu için hangi yön
bilgisinin geçerli olduğunu anlamak için gerekli karşılaştırmalar yapılmış. Buna göre doğrultu bilgisi
doğrudan LCD e yazdırılmış, hız bilgisi ise gerekli işlemden sonra yazdırılmıştır.

Bu uygulama geliştirilerek ek 2 de anlatılan uygulamalarda kullanılır.

UYGULAMA-9:

BİRDEN FAZLA PROGRAM ÇALIŞTIRABİLME ÖRNEĞİ:

Program belleği yeterli olduğu sürece, PIC içerisine birden fazla program yerleştirilip uygulama
yapılabilir. Önemli olan; her bir uygulamanın donanımı farklılık gösterebileceği için giriş çıkış olarak
yapılandırmalarda dikkatli olmaktır. Bu uygulamaya örnek olarak ; Uygulama 6,7,8 in tek bir programla
PIC program belleğine kaydedilmesi ve uygulanmasını gerçeklenmiştir.
56
İlgili devre şeması ve program aşağıdaki gibidir.

57
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2006 [set under view...options] *
'* : All Rights Reserved *
'* Date : 10.05.2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
TRISA=%11111111
TRISB=0
TRISC=%11111111
TRISE=%111
'-------------------------------------------------------------------------------
'---------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi Porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
DEFINE LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarakmı bağlı?
DEFINE LCD_LINES 2 'LCD Kaç satır yazabiliyor?
'-------------------------------------------------------------------------------
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10000100 '7. bit 1 yapıldı 10 bit sonucu sağa dayalı almak için

'-------------------------------------------------------------------------------
TOLERANS CON 51
REFS VAR WORD 'REFERANS SICAKLIK ADC den okunan ham
'sayısal değer.
GERS VAR WORD 'GERÇEK SICAKLIK 16 bit değişken tipi seçtik
'kullanacağımız değer 10 bit olacak.
FARK VAR WORD 'HATA
DNTLYC VAR WORD 'DENETLEYİCİ SİNYALİ
REFSLCD VAR WORD
REFSTAM VAR WORD
REFSONDA VAR WORD
58
GERSLCD VAR WORD
GERSTAM VAR WORD
GERSONDA VAR WORD
DNTLYCLCD VAR WORD
DNTLYCTAM VAR WORD
DNTLYCONDA VAR WORD

'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W ucu düşük (W), devrede doğrudan toprağa bağlanabilir.
LCDOut $FE,1 ' LCD ekranını temizler.
pause 200 ' LCD nin açılması için gerekli süredir.

PROGSEC:

IF PORTC.1=0 AND PORTC.0=0 THEN BIR


IF PORTC.1=0 AND PORTC.0=1 THEN IKI
IF PORTC.1=1 AND PORTC.0=0 THEN UC
GOTO PROGSEC

BIR:

'T1CON=%00000001
LCDOUT $FE,1," 1.PROGRAM "
LCDOUT $FE,$C0,"SICAKLIK DENETIM"
PAUSE 3000
BASLA:
GOSUB OKU 'ADC OKU

IF REFS>922 THEN

LCDOUT $FE,1,"YUKSEK REFERANS"


LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

IF REFS<205 THEN
LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS sıcaklığın ondalık kısmı

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEKSICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK sıcaklığın ondalık kısmı

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 500
59
IF GERS >= REFS-TOLERANS AND GERS<= REFS+TOLERANS THEN

'EĞER BAŞLANGIÇTA GERÇEK SICAKLIK HİSTERESİZ ARALIĞINDAYSA


'DENETLEYİCİ 2,5V YANİ 0 OLUR

DNTLYC=512
DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN VOLT DEĞER HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI

LCDOUT $FE,1," DENETLEYICI"


LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO BASLA

ENDIF

IF GERS<REFS THEN DONGU_1

'GERS<REFS İSE GERS Yİ ARTIRACAK DNTLYC SİNYALİ UYGULANMALIDIR BUNUN


'İÇİN DE DÖNGÜ_1 E GİDİLECEK AKSİ DURUMDA GERS>REFS DEMEKTİR DÖNGÜ_2 'YE
‘GİDİLECEK
DONGU_2:

GOSUB OKU 'ADC OKU

IF REFS<205 THEN
LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 3000

IF GERS>= REFS-TOLERANS AND GERS<=REFS THEN

DNTLYC=512

'DENETLEYICI PORTLARDAN BİRİSİNDEN DIŞARI VERİLECEK


60
DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN VOLT
'DEĞER HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_2
ENDIF

IF GERS < REFS-TOLERANS THEN


GOTO DONGU_1
ENDIF

FARK=GERS-REFS

IF FARK>307 THEN
DNTLYC = 205
ENDIF
IF FARK <307 THEN
DNTLYC =512-FARK
ENDIF

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN VOLT DEĞER


'HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_2

DONGU_1:

GOSUB OKU 'ADC OKU

IF REFS>922 THEN
LCDOUT $FE,1,"YUKSEK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI
61
lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 3000

IF GERS>=REFS AND GERS<= REFS+TOLERANS THEN

DNTLYC=512

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN VOLT DEĞER


'HESABI
DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_1
ENDIF

IF GERS > REFS+TOLERANS THEN


GOTO DONGU_2
ENDIF

FARK=REFS-GERS

IF FARK>307 THEN
DNTLYC =819
ENDIF

IF FARK <= 307 THEN


DNTLYC=512+FARK
ENDIF

DNTLYCLCD=(DNTLYC*/1250)/100 'DENETLEYİCİ SİNYALİN VOLT DEĞER 'HESABI


DNTLYCTAM=DNTLYCLCD/10 'TAM DEĞERİ
DNTLYCONDA=DNTLYCLCD//10 'ONDALIK KISMI
LCDOUT $FE,1," DENETLEYICI"
LCDOUT $FE,$C0," ",#DNTLYCTAM,",",#DNTLYCONDA,"VOLT"
PAUSE 2000
GOTO DONGU_1

OKU:
ADCIN 0,REFS '0. KANALDAN REFERANS SICAKLIĞI OKU
ADCIN 1,GERS '1. KANALDAN REFERANS SICAKLIĞI OKU
DEVAM: IF ADCON0.2=1 THEN DEVAM

RETURN

'*******MOD SEÇMELİ İŞLEM YAPAN PROGRAM.........**********


62
IKI:
LCDOUT $FE,1," 2.PROGRAM "
LCDOUT $FE,$C0," MOD SECMELI"
PAUSE 3000
BASLA_2
LOW PORTD.0
IF (PORTE.0=0 AND PORTE.1=0) OR (PORTE.0=0 AND PORTE.2=0) OR (PORTE.1=0 AND
PORTE.2=0)THEN
LCDOUT,$FE,1," HATALI MOD"
LCDOUT,$FE,$C0," SECIMI "
PAUSE 500
GOTO BASLA_2
ENDIF

IF PORTE.0=0 THEN
LCDOUT,$FE,1,"MOD1 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000

DON_1:
GOSUB OKU_2
GOSUB LCD_2

HIGH PORTD.0
PAUSE 4000
LOW PORTD.0
PAUSE 26000
IF PORTE.0<>0 THEN GOTO BASLA_2
GOTO DON_1
ENDIF

IF PORTE.1=0 THEN
LCDOUT,$FE,1,"MOD2 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000
DON_2:
GOSUB OKU_2
GOSUB LCD_2

HIGH PORTD.0
PAUSE 8000
LOW PORTD.0
PAUSE 22000
IF PORTE.1<>0 THEN GOTO BASLA_2
GOTO DON_2
ENDIF

IF PORTE.2=0 THEN
LCDOUT,$FE,1,"MOD3 SECILDI"
LCDOUT,$FE,$C0,"LUTFEN BEKLEYIN"
PAUSE 3000
DON_3:
GOSUB OKU_2
63
GOSUB LCD_2

HIGH PORTD.0
PAUSE 12000
LOW PORTD.0
PAUSE 18000
IF PORTE.2<>0 THEN GOTO BASLA_2
GOTO DON_3
ENDIF
'********ADC DEN OKU*********************************
OKU_2:
ADCIN 0,REFS '0. KANALDAN REFERANS SICAKLIĞI OKU
ADCIN 1,GERS '1. KANALDAN REFERANS SICAKLIĞI OKU
DEVAM_2: IF ADCON0.2=1 THEN DEVAM_2

RETURN
'****************,LCD DE GOSTER****************
LCD_2:
IF REFS>922 THEN
LCDOUT $FE,1,"YUKSEK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA_2
ENDIF

IF REFS<205 THEN
LCDOUT $FE,1,"DUSUK REFERANS"
LCDOUT $FE,$C0, " SICAKLIGI"
PAUSE 500
GOTO BASLA_2
ENDIF

REFSLCD=(REFS */ 1250)/5
REFSTAM=REFSLCD/10 'REFERANS SICAKLIĞIN TAM KISMI
REFSONDA=REFSLCD//10 'REFERANS SICAKLIĞIN ONDALIK KISMI

GERSLCD=(GERS */ 1250)/5
GERSTAM=GERSLCD/10 'GERÇEK SICAKLIĞIN TAM KISMI
GERSONDA=GERSLCD//10 'GERÇEK SICAKLIĞIN ONDALIK KISMI

lcdout $fe,1,"REF.ISI=",#REFSTAM,",",#REFSONDA
lcdout $fe ,$c0,"GERCEK ISI=",#GERSTAM,",",#GERSONDA
pause 500
RETURN

'*****************RUZGAR HIZI VE YÖNÜNÜ VEREN PROGRAM***************


UC:
LCDOUT $FE,1," 3.PROGRAM "
LCDOUT $FE,$C0,"RUZGARGULU"
PAUSE 3000

ACI VAR WORD


HIZ VAR WORD
GEN VAR WORD
64
BASLA_3:

ADCIN 0,GEN
ADCIN 1,ACI
OKU_3:IF ADCON0.2=1 THEN OKU_3

'HIZ BİLGİSİ İÇİN PARÇALI DOĞRUSALLAŞTIRMA

IF GEN<410 THEN HIZ=GEN*/156


IF GEN=>410 AND GEN<717 THEN HIZ=250+((GEN-410)*/250)
IF GEN=>717 AND GEN<1023 THEN HIZ=550+((GEN-717)*/376)

'AÇI BİLGİSİ İÇİN DÜZENLEMELER

IF (ACI>=0 AND ACI<=64) OR (ACI>960 AND ACI<=1024) THEN


LCDOUT $FE,1," DOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>64 AND ACI<=192 THEN


LCDOUT $FE,1," KUZEYDOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>192 AND ACI<=320 THEN


LCDOUT $FE,1," KUZEY"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>320 AND ACI<=448 THEN


LCDOUT $FE,1," KUZEYBATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>448 AND ACI<=576 THEN


LCDOUT $FE,1," BATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>576 AND ACI<=704 THEN


LCDOUT $FE,1," GUNEYBATI"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF

IF ACI>704 AND ACI<=832 THEN


LCDOUT $FE,1," GUNEY"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
65
ENDIF

IF ACI>832 AND ACI<=960 THEN


LCDOUT $FE,1," GUNEYDOGU"
LCDOUT $FE,$C0," ",#HIZ
PAUSE 500
ENDIF
GOTO BASLA_3

Program seçimi için c portunun 0 ve 1 nolu bacağı kullanılmıştır.

C0=00 için 1.program(uygulama-6)


C0=01 için 2.program(uygulama-7)
C0=10 için 3.program(uygulama-8)
C0=11 için boş

Program bellek kapasitesi yettiği sürece seçici uç sayısı ve program sayısı artırılabilir.

4- EKLER:

EK-1 ENDÜSTRİYEL UYGULAMALAR:


FREKANSMETRE

66
:10000000B401DD280408A70089100910091083161F :1001900023080318230FA5070310A00DA10DA60B1C
:100010008910091009100F30880583122708B418B9 :1001A000BB282008D828840031088A003008820043
:100020002F283A30A1009830A3203330A600432077 :1001B000831303138312640008008316FF30850045
:100030001330A1008830A32043206430A220432045 :1001C00082309F00831209118316091183120130B6
:100040006430A2202230A600432028302E200C301D :1001D000A300F4308A019620FE308A01032001300A
:100050002E2006302E20B41427082F283414A60092 :1001E0008A01032020308A01032020308A01032065
:10006000341C3D280910033C031C42284220073061 :1001F00020308A01032049308A01032073308A01AC
:10007000A100D030A320031408003414FE3C03195F :10020000032069308A0103206B308A0103202030EB
:10008000D8280914341C341089140F308805260828 :100210008A01032045308A0103206C308A010320C3
:10009000F03988048910A60E341843283230A22083 :1002200065308A0103206B308A01032074308A0113
:1000A00003140800B51329080319B5170530A80073 :10023000032072308A0103206F308A0103206E3060
:1000B0002730A300103068200330A300E830682008 :100240008A01032069308A0103206B308A01032070
:1000C000A30164306820A3010A30682024086F2847 :1002500020308A0103200530A300DC308A0196207B
:1000D000A2002508A1002408A000B7202008A00045 :100260000530A300DC308A01962000308A0180200E
:1000E000A8030319B513290803197928280203184E :10027000BA002108BB00FE308A01032001308A0148
:1000F00008002008031DB513B51B0800303ED328A7 :10028000032046308A01032072308A010320653042
:10010000A000A00DA00DA00D3830A005C130200426 :100290008A0103206B308A01032065308A01032024
:100110009F000030A1003230A3201F151F198E2828 :1002A0006E308A01032073308A0103203D308A01B9
:100120001E08A10083161E08D828A301A200FF30D4 :1002B000032020308A0103203A308A0103202030B5
:10013000A207031CA307031CD8280330A100DF304B :1002C0008A010320A9013A08A4003B08A5000230D6
:10014000A3209728A101E83EA000A109FC30031CD0 :1002D000B000B1018A01522064308A0195208A0160
:10015000AC28A0070318A928A0076400A10FA928AC :0802E000352963008A01712930
:100160002018B228A01CB6280000B62808001030BD :02400E00753DFE
:10017000A600A501A401210DA40DA50D2208A4022D :00000001FF
:100180002308031C230FA5020318CD282208A40767

Devrenin şekli ve PIC’e gönderilecek makine kodu yukarıdaki gibidir. Frekans / Gerilim (F/V) çeviriciler, girişlerindeki
herhangi bir dalga şeklinin frekansı ile lineer olarak değişen bir çıkış gerilimi üretirler. Devrenin girişine 20Mhz 'e kadar giriş
uygulanabilir. Giriş frekansının dalga şekli önemli değildir. Her türlü dalga şekli ile çalışabilir. Burada F877 LCD görüntüleme
ve 20Mhz altında 0,25 milisaniye olarak analog gerilimleri capture olarak yakalayıp LCD'de 10bit olarak görüntüleme
yapmaktadır. Sistem 9.400 F/V çevirici entegresi ile yakalamış olduğu frekansları DC 0=5 Volt 0,01Hz ile 20Mhz sinyalleri 0-
5 Volt RA0 referans RA1 port girişi ile 10Bit'lik A/D ile çevrim sonuçları LCD'den görüntülenir. Bunun yanı sıra 9.400- F/V
ile 20Mhz lik bir ölçüm yapılabilir.

YÜRÜYEN IŞIKLI YAZI PANOSU:


GİRİŞ

Günümüzde bir firma veya kuruluş kendini tanıtabilmek için ilk etapta reklamı düşünmektedir. Büyük küçük birçok firma veya
kuruluş kendi ürettikleri malları tüketicilere en iyi şekilde tanıtmak isterler. Bundan dolayı reklamı tercih etmektedirler. Her ne
kadar çoğunlukla çeşitli basın kuruluşları kullanılırsa da reklamcılık da şehrin en önemli caddelerine yerleştirilen reklam
panolarının ve büyük binaların yüzeyleri boyanarak yapılan reklamların da önemi çok büyüktür. Bu reklam türleri içinde en
etkili ve akılda kalıcı olanı görüntülü reklamlardır. Çünkü insan hafızasında en uzun süre kalıcı olanlar gözler tarafından
görülenlerdir.

Bu proje çalışmasında, insanların gözlerine hitap eden ışıkların kullanılması ve hareketli olması sebebiyle oldukça dikkat
çeken bir reklam panosu tasarlanmıştır. Bu pano sadece reklam amacıyla değil bir duyuru ve olayı geniş kitlelere iletmek için
de kullanılabilir.

Devrenin blok diyagramı aşağıda gösterilmektedir. Blok diyagramında görüldüğü gibi 6 ayrı bölümden oluşmaktadır. Gösterge
olarak 6x48 dot matris gösterge kullanılmıştır. Tarama katında ise 3 adet 4x16 kod çözücü ve bu kod çözücüleri seçmek için de
3x8 kod çözücü kullanılmıştır.(2)

67
Gösterge Katı;
Gösterge katı, 6x48 dot matris göstergeden meydana gelmektedir. Bu göstergelerin sürülmesinde satırlar için BC237 PNP
tipi transistörler kullanılmıştır. Satırlardaki transistörlerin bazlarında 100 W’ luk bir direnç ve sütunlardaki transistörlerin
bazlarında da 2,2 kW’ luk birer direnç kullanılmıştır.

Tarama Katı;
Tarama katı göstergelerin sütun taraması gerçekleştirilir. 6 giriş 48 çıkışı sağlamak için 3 Adet 74LS154 (3x16 kod çözücü)
kullanılmıştır. Ayrıca bu 3 adet 74LS154 kod çözücüyü seçmek amacıyla bir adet 74LS138 (3X8 kod çözücü) kullanılmıştır.
74LS154 kod çözücüler aktif iken Lojik-0 çıkışını, pasif iken de Lojik-1 çıkışını üreten bir entegredir. Bu entegrelerin Çıkışları
2.2. kW’ luk direnç üzerinden gösterge katının BC327 PNP tipi transistörünün bazına girer. Bu transistörler anahtarlama
elemanı olarak görev yapar ve bir sütunun aktif olmasını sağlarlar. Bu katta bulunan kod çözücülere seçme işi sayıcı 1’den
gelen yedi adet giriş tarafından sağlanmaktadır. İlk dört giriş 74LS154 kod çözücüye, geriye kalan üç giriş de 74LS138 kod
çözücüye girmektedir.

Sayıcı Katı;
Sayıcı 1 katı, göstergelerin sütunlarının birini seçmek üzere kod çözücülere giren 7 bitlik bilgiyi üretmektedir. Bu sayıcı 0-48
arası sayarak istenilen sütunu seçmektedir. Bu sayma işlemini sağlamak için bir adet 12 bitlik 4040 paralel yüklemeli sayıcı
kullanılmıştır. Bu sayıcı, 0'dan 127'e kadar saydıktan sonra 127 olduğu an kendini sıfırlar. Bu sayıcının yedi adet çıkışının ilk
dört tanesi 3 adet 74LS154 kod çözücü girişine girmektedir. Bu dört adet çıkış vasıtasıyla hangi sütunun seçileceğine karar
verilir. Geriye kalan üç adet çıkış ise 74LS138 kod çözücüye girmektedir.

Osilatör Katı;
Burada 555 entegresi dirençler yardımıyla sayıcı için gereken frekansı üretmektedir .Yazının kayma hızını ayarlayan 555
entegresinde ayarlı direnç kullanılmalıdır.

PIC16F877 Katı;
PIC16f877, bu devrede karakter bilgilerinin kontrolünde, sütun ve satır kontrolünde kullanılır.

MALZEMELER:
74LS154 3 adet
74LS138
NE555
PIC16F877
4040
BC327 48 adet
BC237 6 adet
2.2kohm 48 adet
100ohm 6adet
7805
4MHZ Kristal

68
YÜRÜYEN IŞIKLI YAZI PANOSUNA
KLAVYE EKLENMESİ:

Tuş Takımı Bölümü 16 adet bas-çek buton 4x4 matris düzeninde PORTB’ nin 8 bacağına bağlanmıştır. Matris oluşturan 4
satır PORTB.4-PORTB.3 arasına 270 ohm luk dirençler (R1-R4) üzerinden, 4 sütunsa PORTB.4-PORTB.7 arasına doğrudan
bağlanmıştır. Bu bağlantı düzeniyle herhangi bir butonun durumunun basılı veya değil PICmicro tarafından okunabilmesi
amaçlanmıştır. Butonların durumu okumadan önce PORTB "pull up" dirençleri uygulama programınızda etkinleşmiş
olmalıdır. "pull up" dirençlerini etkinleştirdiğimizde PICmicro sanki PORTB.4-PORTB.7 bacaklarıyla VDD arasına direnç
bağlamışsınız gibi davranacaktır.

Anolog portu olan PICmicro'ların çalışmaya başlama anında PORTA konfigürasyonu analog giriştir.

69
Aşağıdaki PICBasic PRO komutunu

OPTION-REC.7=0

veya assembly komutunu

bcf status,6 ;1.yazmaç


bsf status,5 ;bankasını seç.
bcf option-reg,7 ;portB”pull-up” dirençleri etkin.
bcf status,5 ;0.yazmaç bankasına dön.

bu etkileştirme işleminde kullanabiliriz. Bu proje çalışmasında, insanların gözlerine hitap eden ışıkların kullanılması ve
hareketli olması sebebiyle oldukça dikkat çeken bir reklam panosu tasarlanmıştır. Bu pano sadece reklam amacıyla değil bir
duyuru ve olayı geniş kitlelere iletmek için de kullanılabilir.

Devrenin blok diyagramı aşağıda gösterilmektedir. Blok diyagramında görüldüğü gibi 6 ayrı bölümünden oluşmaktadır.
Gösterge olarak 6x48 dot matrisi gösterge kullanılmıştır. Tarama katında ise 3 adet 4x16 kod çözücü ve bu kod çözücüleri
seçmek için de 3x8 kod çözücü kullanılmıştır.(2)

Butonların durumları, sırasıyla satırlardan birini toprağa çekip, diğer PORTB bacaklarını da GİRİŞ yaptıktan sonra, 4 sütuna
bağlı PORTB.4-PORTB.7 bacaklarının mantıksal seviyesi okunarak anlaşılmaktadır. Butonun basılı olması mantıksal değer
olarak "0"a, basılı olmamasıyla mantıksal değer olarak "1"e karşılık gelmektedir. Program akışında sütunlardan birinin değeri
"0" olduğunda toprağa çekilen satırda baştan bilindiğinden, matriste o satır-sütun değerine karşılık gelen butonun basıldığı da
program tarafından belirlenmiş olacaktır.

UYGULAMANIN MAKİNA KODLARI AŞAĞIDAKİ GİBİDİR

:100000002828A301A200FF30A207031CA307031C9A
:1000100023280330A100DF300F200328A101E83E90
:10002000A000A109FC30031C1828A00703181528FC
:10003000A0076400A10F152820181E28A01C222844
:1000400000002228080083130313831264000800B1
:1000500086018316860188018701850107309F008C
:1000600083120911831609118312BB016400163033
:100070003B028A110A120318512885148316851031
:10008000643083128A010120851083168510831243
:100090000814831608108312BB0A8A110A12031D62
:1000A00036288501860187018801B9016400153071
:1000B00039028A110A1203186C28071783160713CE
:1000C000831288018A110A126E20FF308800B90A53
:1000D0008A110A12031D56288A0155280514013079
:1000E000A3005E308A0102200510080063008A0127
:0200F000762870
:02400E00753DFE
:00000001FF

70
DTFM TONU İLE UZAKTAN CİHAZ KONTROLÜ:

DTFM ton kontrolü 8 adet her hangi bir devrenin ya da cihazın uzaktan kontrolünde kullanılabilir. Buradaki amaç telsizle veya
telefonla uzaktan bir sistemin çalışmasını sağlayabilmektir.

Devrenin Çalışması:

Telefondan veya telsizden çıkan DTMF ton sinyali bir yükselteç yardımıyla genliği büyütüldükten sonra 100 nf' lık
kondansatörden geçerek 100 kW' luk dirençle CM8870 kod çözücü entegresi tarafından 5 bitlik veriye dönüştürülür. Normal
telefon DTMF' i için CM8870'e 3.574Mhz'li kristal takılmaktadır. Kod çözücü' den çıkan 5 bitlik veri PIC 16F877'nin
portlarına aktarılır. PIC 16F877 tarafından klavyeden girilen değerle karşılaştırılır ve ilgili röleleri anahtarlar.

71
:10000000B201F3280408A70089100910091083160B :10023000032073308A01032069308A0103202030B3
:100010008910091009100F30880583122708B218BB :100240008A01032047308A01032069308A01032094
:100020002F283A30A1009830B9203330A600432061 :1002500072308A01032069308A0103206E308A01DE
:100030001330A1008830B92043206430B820432019 :10026000032069308A0103207A308A01032020307C
:100040006430B8202230A600432028302E200C3007 :100270008A01032020308A01032020308A010320D4
:100050002E2006302E20B21427082F283214A60096 :10028000A9010608A400A5010230B000B1018A014D
:10006000321C3D280910033C031C42284220073063 :10029000752028308A01AB2064000608013C8A11D1
:10007000A100D030B920031408003214FE3C03194B :1002A0000A12031D56298A110A1258298A014C295B
:10008000EE280914321C321089140F308805260816 :1002B00064000608093C8A110A12031D62298A118A
:10009000F03988048910A60E321843283230B8206F :1002C0000A1264298A01582964000608063C8A112A
:1000A00003140800B31329080319B3171030A8006C :1002D0000A12031D6E298A110A1270298A016429E3
:1000B0000301A40DA50D0318013092202808031D8B :1002E00064000608023C8A110A12031D7A298A1149
:1000C00058280800B31329080319B3170430A800EF :1002F0000A12C029FE308A01032001308A0103203E
:1000D000250E6F2025086F20240E6F2024080F396D :1003000020308A01032020308A01032020308A0116
:1000E000F63E0318073E0A3E9228B3132908031967 :10031000032053308A01032069308A0103206630AC
:1000F000B3170530A8002730A30010308B20033041 :100320008A01032072308A01032065308A0103208C
:10010000A300E8308B20A30164308B20A3010A30C8 :1003300020308A01032079308A01032061308A014C
:100110008B2024089228A2002508A1002408A00012 :1003400003206E308A0103206C308A01032069305B
:10012000CD202008A000A8030319B3132908031940 :100350008A01032073308A01032020308A010320A0
:100130009C282802031808002008031DB313B31BD2 :1003600021308A01032021308A01032021308A01B3
:100140000800303EE92803178D0083168C130C1429 :1003700003200330A300E8308A01AC208A017029F1
:1001500083120C08EE28A301A200FF30A207031CA3 :100380000608B8000608B900FE308A0103200130D3
:10016000A307031CEE280330A100DF30B920AD281F :100390008A01032054308A0103206F308A01032030
:10017000A101E83EA000A109FC30031CC228A00791 :1003A0006E308A010320A9013808A400A50102309B
:100180000318BF28A0076400A10FBF282018C828A3 :1003B000B000B1018A01752020308A010320483045
:10019000A01CCC280000CC280800A501A401103028 :1003C0008A01032065308A01032078308A010320E6
:1001A000A600210DA40DA50D2208A4022308031CFE :1003D0003D308A010320A9013908A400A50102309B
:1001B000230FA5020318E3282208A4072308031825 :1003E000B000B1018A01622020308A01032042302E
:1001C000230FA5070310A00DA10DA60BD128200811 :1003F0008A01032069308A0103206E308A010320BC
:1001D000EE28840031088A0030088200831303135C :10040000A9013A08A400A5010230B000B1018A0197
:1001E000831264000800831604309F0083120911F3 :10041000522028308A01AB2064000608063C8A116D
:1001F00083160911643083128A01AB2083160F30F5 :100420000A12031D172A8817831688138312B8012E
:10020000860083128601BA01FE308A010320013084 :10043000B90101308A01A320BA003A08BA008A0142
:100210008A01032053308A01032069308A010320B8 :08044000C02963008A01212A92
:1002200066308A01032072308A01032065308A011A :02400E00753DFE
:024202000100B9
:00000001FF

RADYO FREKANSI İLE İLETİŞİM:


300-400 Mhz arası frekanslarda uzaktan 8 bitlik sayısal veri gönderme ile ilgili bir uygulama üzerinde durulacaktır. Bu
çalışmada kullanılan TWS-434 Transmitter RF (Radyo Frekans) kod çözücü entegresi ile sayısal veriler 5 Khz' e modüle
edilerek kısa mesafelerde gönderilebilmektedir. Bu entegre devre 6 bacaklı olup aşağıda bazı özellikleri verilmiştir.

Modülasyon türü : AM
Çalışma gerilimi : 1.5-12 VDC
RF çıkış gücü : 8 mwatt

Bu entegre ve teknik özellikleri http://www.renton.com/ adresinden temin edilebilir.

Devrenin çalışması, yine her zamanki gibi PIC16F877 kullanılarak dot-matris klavye'den girilen 8 bitlik sayısal verilerin LCD
göstergede görüntülenmesi ve aynı zamanda TWS-434 RF entegresi ve bir anten ile karşıda bulunan bir alıcıya gönderilmesi
şeklinde gerçekleşmektedir.

72
RF entegresine PIC16F877’ den gönderilen 8 bitlik seri bilgiler RA1 bacağından, Start ve Stop bitleri ise RA0 bacağından
gönderilmiş ve bu bitler bir OR entegresi ile birleştirilmiştir. Bilindiği gibi seri bilgi göndermek için aşağıdaki şekilde de
görüldüğü gibi önce start biti ardından veri bitleri ve en son stop biti kullanılmaktadır.

Start ve Stop bitleri gönderilecek olan veri bitlerinin başlangıç ve sonuna konularak 8 bitlik verilerin karışmasını önlemek
amacıyla kullanılmaktadır.

Aşağıdaki uygulama devresinde de görüldüğü gibi PIC16F877 entegresinin D portuna ait 4 bacağı (RD4-RD7) ile dot-matris
klavyeden girilen bilgiler okunmakta ve diğer 4 biti (RD0-RD3) ile de LCD göstergeye bu bilgiler gönderilmektedir.
Göstergede görülen veriler aynı zamanda TWS-434 entegresinin 6 nolu bacağına yukarıda belirtildiği PIC' in RA0 ve RA1
ucundan gönderilmektedir. TWS-434'e gelen bu veriler ise 5 nolu bacağına bağlı 30-35 cm uzunluğundaki bir anten ile karşıda
bulunan bir alıcıya gönderilir. Devre şemasında görülen diğer bağlantılar da yapıldıktan sonra verici devremiz tamamlanmış
olur.

Aşağıdaki uygulamada ,300-400 MHz arası radyo frekansı ile 8 bitlik sayısal veri gönderen devreden, bu bilgileri alıp LCD
göstergede görüntüleyecek olan PIC16F877' li alıcı devre ve her iki devre için program kodları verilecektir.

73
Verici devrede bulunan TWS-434 Transmitter entegresi ile gönderilen verileri, Alıcı devrede bulunan RWS-434 Receiver
entegresi algılayarak PIC16F877 entegresine gönderecektir. Bu iki entegre birbirine uyumlu olarak çalışabilmektedir. RWS-
434 entegresinin pin görünüşü ve özellikleri aşağıda verilmiştir.

Modülasyon türü : AM
Çalışma gerilimi : 4.5-5.5 VDC
Hassaslık : 3 uVrms
Çıkış tipi : Sayısal & lineer

Entegrenin sayısal ve lineer olarak 2 adet çıkış ucu bulunmakta ve bu uçlardan birisi çıkış olarak kullanılabilmektedir. Diğer uç
ise boş kalmaktadır. Biz uygulamamızda sayısal çıkış kullandığımız için 2 nolu çıkış ucunu kullanacağız. Verileri algılayacak
olan 8 nolu uca 30-35 cm anten bağlamak gerekmektedir.

RWS-434 Entegresi, PIC16F877 ve LCD gösterge'den oluşan alıcı devresine ait şema aşağıda verilmiştir.

74
Bu devrede RWS-34 Receiver entegresinin 8 nolu bacağına gelen 8 bitlik seri veriler, 2 nolu sayısal veri çıkış ucundan
PIC16F877'nin RA0 bacağına iletilmektedir. PIC16F877 içerisine gelen bu seri bilgiler ise D portunun ilk dört biti (RD0-RD4)
tarafından LCD göstergeye gönderilmektedir.

Her iki devrede de gerilim dalgalanmalarını önlemek amacıyla Vdd ve GND arasına 0.01 mF’ lık kondansatör bağlanmalıdır.

Bu şekilde verici ve alıcı devrelerinin uyumlu bir biçimde çalışması sonucunda RF (Radyo frekansı) kullanılarak kısa
mesafelerde 8 bitlik verilerin iletilmesi işlemi gerçekleştirilebilmektedir.

TWS entegreleri http://www.renton.com/ adresinden temin edilebilmektedir.

SAAT DEVRESİ:
Programımızın çalışmasındaki anahtar işlev Timer kesmesinin kullanılmasıdır. Timer kesmesi programcının belirlediği zaman
aralıklarında bir kesme üretir. Programımızda bu zaman aralığı OPTION_REG = $55 (MOVLW 0x55, MOVF OPTION_REG
assembly karşılığı) komutuyla 16,348ms' ye ayarlanmıştır. Kesmeyi aktif hale getirmek için INTCON yazmacı $A0'a
ayarlanır. 61 adet kesme oluştuğunda 61 x 16,348ms = 1sn olacağından "saniye" değişkenimiz bir artırılır ve LCD
güncellenmesi aktif hale getirilir. PICBASIC PRO derleyicisinde kesme işlevi gerçekleşirken STATUS , W ve PRESCALER
yazmaçları derleyici tarafından saklanır. Assembly'de mutlaka bu yazmaçlar kesme alt programının hemen başında
saklanmaları gerekir. Bunun yapılması programın kaldığı yerden tekrar devam etmesi için gereklidir.

75
76
ŞİFRE DEVRESİ:

Devre belirlenen bir şifrenin klavyeden girilmesi ile röleyi tetikliyor. Şimdi sistemin genel çalışma prensibi üzerinde biraz
duralım. Programın ana döngüsü klavyeden girilen şifreyi LCD' de görüntülüyor, doğruluğunu kontrol ediyor ve eğer doğru
şifre girilmiş ise röleyi tetikliyor. Yanlış ise tekrar başa dönüyor. Burada dikkat edilmesi gereken husus, eğer klavyede
mekanik düğme kullanırsanız, düğmenin basılıp basılmadığını okurken mutlaka bir süre bekleme döngüsü kullanmanız
gerektiğidir. Eğer bekleme döngülerini ihmal ederseniz, siz düğmeye bir defa basmış olsanız bile program 3-4 defa basılmış
gibi işlem yapar. Mesela şifrenin 1782 olduğunu varsayalım. Siz şifreyi girmek için sırasıyla "1", "7", "8" ve "2" ye tekabül
eden düğmelere basarsınız ama program girdiğiniz sayıyı "1117" veya "1177" gibi bir değer olarak algılar ve şifre doğru girilse
bile röle tetiklenmez. Bunun sebeplerini, mikrodenetleyicilerin çok hızlı çalışması ve mekanik düğmelerin ark yapması olarak
sıralayabiliriz. Mikro kontroller beklediğinizden çok hızlı çalışırlar. Örneğin 4 MHZ'de çalışan bir mikro kontrol saniyede
1.000.000 adet işlem yapar. (Neden 4 milyon değil de bir milyon? Çünkü saat darbeleri dahili olarak işlemci içinde dörde
bölünür.) buradan şu neticeyi çıkarabiliriz; siz düğmeye basıp bırakana kadar mikro kontrol çok fazla işlem yapar ve birden
fazla basılmış gibi işlem görür. Mekanik düğmelerin ark yapması ise şöyle izah edelim; düğmeyi bırakırken elektronların
atlamasından dolayı düğme ark yapar ve voltaj dalgalanmaları meydana gelir, bu da mikrodenetleyici tarafından düğmeye
birden fazla basılmış gibi algılanır. Tüm bu sebeplerden dolayı düğme basılma durumunu okurken mutlaka bir miktar bekleme
sağlanması gerekir. Bu bekleme miktarını siz çeşitli denemeler yaparak tespit edebilirsiniz. Yalnız bu beklemeyi çok
uzatmanın da düğme basışlarını kaybedebileceğini hatırınızda bulundurun.

77
ŞİFRE DEVRESİ UYGULAMASINA İLİŞKİN MAKİNA KODLARI:

:10000000B201C8280408A700891009100910831636 :100130006400A10F942820189D28A01CA12800006D
:100010008910091009100F30880583122708B218BB :10014000A1280800A501A4011030A600210DA40DCE
:100020002F283A30A10098308E203330A60043208C :10015000A50D2208A4022308031C230FA5020318DF
:100030001330A10088308E20432064308D2043206F :10016000B8282208A40723080318230FA5070310A3
:1000400064308D202230A600432028302E200C3032 :10017000A00DA10DA60BA6282008C32884003108D5
:100050002E2006302E20B21427082F283214A60096 :100180008A0030088200831303138312640008007E
:10006000321C3D280910033C031C42284220073063 :10019000831604309F0083120911831609116430FD
:10007000A100D0308E20031408003214FE3C031976 :1001A00083128A01802083160F3086008312860115
:10008000C3280914321C321089140F308805260841 :1001B000BA010608B800FE308A01032001308A0126
:10009000F03988048910A60E3218432832308D209A :1001C000032054308A0103206F308A0103206E30EF
:1000A00003140800B31329080319B3170530A80077 :1001D0008A01032020308A010320A9013808A400E5
:1000B0002730A300103068200330A300E830682008 :1001E000A5010230B000B1018A01522020308A01FD
:1000C000A30164306820A3010A30682024086F2847 :1001F000032048308A01032041308A010320523015
:1000D000A2002508A1002408A000A2202008A0005A :100200008A01032046308A01032020308A0103201E
:1000E000A8030319B3132908031979282802031850 :1002100020308A0103203A088A01032028308A010D
:1000F00008002008031DB313B31B0800303EBE28C0 :10022000802064003808073C8A110A12031D1A292D
:10010000A301A200FF30A207031CA307031CC328FE :0E0230004130BA008A01D92863008A011C29D6
:100110000330A100DF308E208228A101E83EA0003C :02400E00753DFE
:10012000A109FC30031C9728A00703189428A007F6 :00000001FF

HIZ ÖLÇÜMÜ:

Bu projemizin amacı hareket halindeki bir aracın hızının ölçülmesi. Genellikle, bu ölçüm yolu dikey olarak kesen ve üzerinden
araç geçtiğinde mekanik anahtar gibi davranan plastik şeritlerle yapılır. İki anahtarın işlem görmesi arasındaki zaman ölçülerek
aracın hızı saptanır.Biz projemizde biraz farklı bir yaklaşım kullandık. Algılayıcı olarak ışığa duyarlı iki direnç kullanıldık.
Araç bu algılayıcıların üzerinden geçtiğinde devre ışık seviyesindeki değişimi ölçer ve bir PIC 16F84 aradaki zaman farkından
yararlanarak aracın hızını tespit eder.

Devremiz çok basit. İki adet karşılaştırıcı ışığa duyarlı dirençlerde oluşan ışık seviyesindeki değişim ile üretilen voltaj
değişikliğini ölçmek için kullanılır. İki potansiyometre karşılaştırıcıların çıkış durumunu değiştiren ışık seviyesinin eşiğini
ayarlamak için kullanılır. Çıkışlar değiştiği zaman PIC bunu tespit eder ve değişikliğin oluşma zamanını hesap ederek hızı
ölçer. Sonuç iki haneli göstergede görüntülenir.Aynı zamanda sonuç ileride kullanılma ihtimaline karşılık PIC' in dahili
EEPROM' unda da saklanır. Eğer oku düğmesine cihaz ilk açıldığında basılırsa göstergede karşılaştırıcıların o anki durumu
görüntülenir. "S" güneşli hava için, "C" bulutlu hava için. Göstergedeki duruma bakarak kodları ayarlayın ve cihaz kullanıma
hazır hale gelmiş olacaktır.

Cihazı açın ve reset tuşuna basın. Cihaz karşılaştırıcıların değişmesini bekleyecektir. İki karşılaştırıcı birden değiştiğinde PIC
hızı görüntüleyecektir. Güç kesilip tekrar geldikten sonra oku düğmesine basılarak son okunan hız ekranda görüntülenebilir.

Cihazın düzgün çalışması için algılayıcılar arası 2 m olmalıdır.

NOT:
PIC' i programlarken sigortalara aşağıdaki ayarları yaptığınıza emin olun.

WDT(Watchdog Timer) OFF


PWRTE(Power On Reset) OFF
OSC(Ossilator) HS
CP(Code Protection) OFF

Cihazın kalibirasyonu:

Cihazın ışık seviyesini ayarlamak için cihazın kapalı olduğuna emin olun.
Oku düğmesine basılı tutarak cihazı açın.
Gösterge'ler "C"den "S"ye dönene kadar potları ayarlayın.
Bundan sonra elinizi salladığınız zaman gösterge "C"den "S"ye geçerse cihazın kalibrasyonun tamamlanmıştır.
Cihazı kapatın.

78
:020000040000FA :1001A000A10A85192928F3208C1329280C1CDD2885
:100000008501860183161C308500803086008101C1 :1001B00010088D0011088E000C108C18E9288C1482
:1000100083120B118C01AD01143093008A019021E1 :1001C0008501000000000D08860000000000851475
:10002000051E74280A301A20900003011A2091003E :1001D00008008C108501000000000E088600000059
:100030000C14272882077E3448343D346D344B3409 :1001E00000000514080001309400193095004030DB
:10004000673473344C347F344F3400343634810198 :1001F00096002108970022089800230899004621BC
:100050000B1100000B1D29280B11D13081008C1BC6 :100200001508A4001608A5002321290E0F3903198B
:10006000C328930B362814309300D620AC0803190C :100210000A3E1A20900088000230890082212908B5
:100070003B28AC032928051E4B28AD1C4328AD1096 :100220000F391A2091008800033089008221AA30FA
:100080006430AC002928861F67282D1C29282D10D4 :100230008800003089008221553088000130890013
:100090006430AC002928AD182928AD146430AC00B8 :1002400082210C14080003101030A000AB01A8019B
:1000A00000307C21AA3A03195A28013090009100AF :10025000A901A50DA40DA90DA80DAB0DA00B312969
:1000B0000C14292801307C21553A031D55280230A3 :100260000800293084003B21283084003B212B30BA
:1000C0007C21900003307C2191000C1429282D18EC :1002700084003B21292903300007AA00AA19800025
:1000D00029282D146430AC008C1B72288C178601E3 :1002800030300007AA00AA1B800008001830A00028
:1000E0000C1129288C13292890219021051E742891 :1002900014089D0015089E0016089F009401950102
:1000F00090219021E7308C05051983288C1103018C :1002A00096019A019B019C0103109F0D9E0D9D0DCF
:100100001A20900087288C1501301A20900085193C :1002B0009C0D9B0D9A0D17081A02031D652918083D
:100110008E280C1203011A20910092280C1601302F :1002C0001B02031D652919081C02031C7629190845
:100120001A2091000C1481010B1100000B1D952861 :1002D0009C02031C9B031B08FF3A03199A0318088E
:100130000B11D1308100930B952814309300D620F9 :1002E0009B02031C9A0317089A020314960D950D9E
:100140000519AA288C1DB1288C110B301A2090009B :1002F000940DA00B5429080089008316081483125A
:100150000C14B1288C19B1288C1505301A20900088 :1003000008080800831608120815000055308900F7
:100160000C148519BB280C1E95280C120B301A2074 :10031000AA3089008814081E8B290811831208004E
:1001700091000C1495280C1A95280C1605301A209D :0A032000A0010000A00B91290800C5
:1001800091000C1495280C19CC28051929280C1558 :00000001FF
:10019000A101A201A3012928A30FD128A20FD128D0

79
AĞIRLIK VE BASINÇ ÖLÇÜMÜ:
Ağırlık ve basınç ölçümlerinde kullanılan load cell (yük hücresi) algılayıcı ile kilogramın ölçülüp LCD ile görüntülenmesi.

Öncelikle biraz load cell hakkında bilgi vermeye çalışalım. Load cell alüminyum çerçeve üzerine gergin bir şekilde wheatstone
direnç köprüsü kurularak oluşturulan son derece hassas direnç yapısına sahiptir.

LOAD CELL alüminyum çerçeve üzerine uygulanan ağırlıkla orantılı olarak değişme olur. Bu zaman da A ve D uçlarının
alanları büyür. Bunun sonucu olarak direnç değerleri artar. Diğer taraftan B ve C uçlarının alanları küçülür. Bu dört gergin ağız
bir wheatstone direnç köprüsü oluştururlar. Yükün oluşturduğu etki direnç değerlerindeki değişimler aracılığı ile gerilim olarak
toplanır.

Burada toplanmış olan gerilim mikrovolt cinsinden olduğu için değişimler son derece küçüktür. Bizim burada kullandığımız
mikro denetleyici PIC F877 bu kadar küçük değişimleri algılayamamaktadır. Bunun için iki adet işlemsel yükselteç kullanarak
F877nın algılayabileceği konuma getirilmiştir. Bu iş için [OP077] kullanılmıştır OP077’nın 2 ve 3 nolu bacaklarından
uygulanan load cell gerilimi birinci yükselteç de ortalama tam yük gerilimi 1.2.V yüksüz olarak 100mili volt/v opm 6 nolu
ucundan U3 opm ulaşarak 1.2 katı artırılarak PIC16F877 nin RA0 ucundan 10 bitlik çözülünürlükle A/D çevirme işlemi
gerçekleşir sonuç bir değişkene atanır.
* Hiç yük yoksa çıkış voltajı 500 mikrovolt altında bir gerilim olmalıdır.
* Tam yük altında ise çıkışta 1,3 mili volt/v oranında bir değer okunur.
* 1. ve 2. uçlar arası empedans 350 ohm.
* 3.ve 4. uçlar arası empedans ise 410 ohm dur.
* R sıcaklık etkisini düşürücü bir direnç olarak konmuştur.
Sistem kısaca çalışması ve kalibrasyonu {SW1} anahtarı kapatıldıktan sonra lcd Ayar yazısı çıkacak. Bu aşamada lcd’ nin
durumunun 0000 olması gerekir. Aksi durumda mutlaka RV1 trimpotu ile sıfıra gelene kadar ayar yapılır. Bu işlem yapılırken
load cell düz ve sabit bir zemin üstünde olmalı, yoksa 0’ a getirilmesi hayli zor olur. 2. Aşamada {M-} basılarak load cell
özelliğine göre yükleme yapmak gerekir. Bu sistem de kullandığımız load cell 15Kg VT015 tipi bunun için 15 Kg dan fazla
yükleme yapılamaz .Bu tür kalibrasyonlar yapılırken 3/1 kadar yük uygulanmalıdır. Bizim bu sistem için en az 2 Kg yük
uygulanması gerekir. Load cell yükleme işlemi yapıldıktan sonra 10sn beklenip, {M+) basarak PIC16F877 eeprom kaydedilir.
LCD ekranında (SON) işlemi yazdıktan sonra SW1 anahtarı açık konuma getirilir.Devremizin çalışması eeproma kaydedilen
değer ile load cell yüklenen Ağırlık önceden eeproma kaydedilen değer baz alınarak işlemine tabi tutulur. Örneğin uygulanan
yük 450gr ise eeprom daki sabit değerle karşılaştırılarak sonuç değer olarak lcd’ de görüntülenir.

80
PIC 16F84 Mikrodenetleyicisi ile Bir Deneysel Endüstriyel Sistemin Kontrol Edilmesi:
Bu çalışmada, bir PIC16F84 mikrodenetleyicisi kullanılarak bir deneysel endüstriyel sistem kontrol edilmiştir. Çalışmada
kullanılan deneysel endüstriyel sistem parça tanıma, ayırma ve birleştirme işlemlerinin gerçekleştirilebildiği bir sistemdir. Bu
çalışmada farklı çalışma senaryoları için dört ayrı PIC assembly programı geliştirilmiştir. Bu dört ayrı program, sonuçta tek bir
entegre devre (PIC16F84) içerisine yüklenmiş ve program seçimi dört anahtar ile gerçekleştirilmiştir. Endüstriyel sistem
denetimi için bir PIC mikrodenetleyicisinin kullanılmasıyla, tasarımı kolay ve maliyeti oldukça düşük bir kontrol sistemi elde
edilmiştir.

1. Giriş
Günümüzde otomasyon teknolojisinin çok hızlı bir gelişme içinde olduğu görülmektedir. Bunun en önemli sebeplerinden biri
de hiç şüphesiz mikroişlemci ve mikrodenetleyicilerde ulaşılan çok hızlı gelişmelerdir. Çünkü, otomasyon sistemlerinin en
önemli kısmını, bu sistemlere büyük esneklik veren programlanabilen cihazlar oluşturmaktadır ve bu cihazların temelini de
mikroişlemciler ya da mikrodenetleyiciler oluşturmaktadır. Bu programlanabilen cihazların başında da PLC (Programlanabilir
Lojik Denetleyici) cihazları yer almaktadır. Gerçekte PLC’ ler mikroişlemciler ya da mikrodenetleyiciler kullanılarak
gerçekleştirilmiş cihazlardır [Bryan 1997]. PLC’ ler kolay programlanabilmeleri, endüstriyel ortamlarda çalışmak üzere
tasarlanmış olmaları v.b. gibi sebeplerden dolayı otomasyon sistemlerinin gerçekleştirilmesinde çok yaygın olarak
kullanılmaktadır. PLC’ lere alternatif olarak daha ucuz bir çözüm yolu olması sebebiyle mikroişlemci ya da mikrodenetleyici
temelli sistemler görülmektedir.

Bu çalışmada, bir endüstriyel sistemin kontrolünde, PLC cihazı veya mikroişlemcili sistemin yerine, bir PIC16F84
mikrodenetleyicisinin [Predko 1998] kullanılması incelenmiştir. PIC, mikrodenetleyicilerinin böyle bir uygulamada
kullanılması ile birlikte, PLC’ lere göre çok daha ucuz ve diğer mikroişlemcili sistemlere göre daha sade ve az yer kaplayan,
kullanılması kolay bir yapı meydana gelmektedir. Bu çalışmada bir PIC mikrodenetleyicisi için program yazmak üzere “PIC
ASSEMBLY” dili kullanılmıştır.

Şekil 1’de yapılan çalışma özet olarak görülmektedir. Yapılan bu çalışmada öncelikle deneysel endüstriyel sistem için 4 farklı
problem tanımlanmış ve bu problemlerin çözümüne ilişkin akış şemaları çizilmiştir. Çizilen akış şemalarına göre, bilgisayar
ortamında MPLAB ve MPASM programları [Predko 1998, Predko 2000] kullanılarak PIC16F84 için PIC ASSEMBLY dilinde
programlar hazırlanmıştır. Hazırlanan her program, PROPIC (http://jaichi.virtualave.net/electr-e.htm) yazılımı ile çalışan bir
programlama devresi kullanılarak PIC16F84 mikrodenetleyicisine yüklenmiştir. Programlanan PIC16F84 mikrodenetleyicisi
uygulama devresine taşınarak deneysel endüstriyel sistemin kontrolü gerçekleştirilmiştir.

Deneysel endüstriyel sistemin kontrol edilmesi için yazılan her program için şu işlemler tekrarlanmıştır:
a) Problemin tanımlanması.
b) Programın hazırlanması,
c) Hazırlanan programın PIC’ e yüklenmesi,
d) Programlanan PIC’ in uygulama devresine takılarak, endüstriyel sistemin kontrol edilmesi.

Şekil 1.Yapılan çalışmalar.


2. Çalışmada Kullanılanlar
81
2.1. Deneysel endüstriyel sistem

Şekil 2’te görülen deneysel endüstriyel sistem (ICT-Industrial Control Trainer), Niğde Üniversitesi, Mühendislik-Mimarlık
Fakültesi, Elektrik-Elektronik Mühendisliği Bölümü, Mikroişlemci Laboratuarı’nda bulunmaktadır. Bu sistem; parça tanıma,
ayırma ve birleştirme işlemlerinin yapılması amacıyla geliştirilmiştir. Üst konveyör ve alt konveyör sırasıyla üst konveyör
motoru (A2) ve alt konveyör motoru (A3) ile çalıştırılmaktadır. Orijinal sistemde sadece metal çubuklar ve plastik halkalar
bulunmaktadır. Metal çubuklar ve plastik halkalar rastgele bir şekilde üst konveyör tarafından seçme işleminin yapılacağı
seçme bölgesine taşınırlar. Metal çubuk ve plastik halkayı tanımlayıp, birbirinden ayırt etmek için iki algılayıcı (B1: proximity
sensor, B4: infra-red reflective algılayıcı) kullanılmaktadır. Parça seçme selenoidi (A0) ile plastik halkalar, halka toplama kolu
üzerine aktarılırlar. Halka toplama kolu üzerine en fazla beş tane halka yerleştirilebilir. Metal çubuklar ise üst konveyörün
sonuna doğru yerleştirilmiş olan bir engele çarparak üst konveyörden alt konveyöre bir kızak üzerinden aktarılırlar.
Kullanılmayan ve üst konveyörün sonuna kadar giden plastik halkalar bu engele çarpmadan üst konveyör sonundaki bir kutuya
düşerler. B0 algılayıcısı (infra-red emitter/detector) birleştirme noktasının boş olup olmadığını tespit etmek için kullanılır. Eğer
birleştirme noktası boş ise birleştirme selenoidi (A1) halka besleme kolundan birleştirme noktasına bir plastik halka aktarmak
için kullanılır. Birleştirme noktası alt konveyörün biraz üzerine yerleştirilmiştir ve bir metal çubuk alt konveyör üzerinden bu
noktadan geçtiği anda burada bulunan plastik halka ile birleşir. Böylece metal çubuk ile plastik halka birleştirilmiş olur.
Birleştirilmiş iki parça üst üste gelerek birbirini tamamlar. Alt konveyör birleştirilmiş parçaları toplama kabına iletir.
Birleştirilmiş veya birleştirilmemiş parçalar alt konveyör tarafından, birleştirilmiş parçaları toplama kabına giderken bu
parçaların birleştirilmiş (sağlam) ya da birleştirilmemiş (hatalı) olduğu, test edilebilir. Bu iş için iki algılayıcı (B3 ve B6)
kullanılır. Eğer hatalı parça tespit edilmiş ise B2 algılayıcısı ve A2 itici selenoidi kullanılarak reddetme işlemine tabi tutularak
bozuk malzeme kutusuna aktarılır. Bu sayede toplama kabında sadece birleştirilmiş (sağlam) parçalar toplanır.

Şekil 2. Deneysel Endüstriyel sistem

Bu çalışma kapsamında orijinal sistemde bazı değişiklikler yapılmış ve sistem daha karmaşık kontrol uygulamaları için
yeniden düzenlenmiştir. Yapılan ilk değişiklik, üst konveyörde parçaların ayrıldığı kısmın biraz önüne konulan metal algılayıcı
algılayıcıdır. Şekil 2’deki orijinal sistemde alt konveyörde bulunan metal cisimleri algılamak için kullanılan B7 algılayıcısı,
üst konveyörde parça seçme selenoidinin biraz önüne yerleştirilmiştir. Ayrıca orijinal sistemde bulunan metal çubuk ve plastik
halkalara ilave olarak metal halka ve plastik çubuklar kullanılmıştır. Parça çeşidinin artması ile birlikte birleştirilebilecek
malzeme çeşidi (ürün) de artmıştır. Buna göre Şekil 3’te görüldüğü gibi 4 farklı parça ile dört farklı ürün elde edilebilmektedir.
Bu sayede sistemdeki birleştirilecek olan parçaların birleşme ihtimalleri artmış ve buna göre çeşitli programlar geliştirilerek
değişik birleştirme uygulamaları yapılmıştır.

82
Şekil 3. Deneysel endüstriyel sistemde kullanılan parçalar ve sistemden elde edilen ürünler.

2.2. Endüstriyel sistem uygulama problemleri

Problem 1 : İlk olarak, deneysel endüstriyel sistemde sadece metal çubuk ve plastik halkaların birleştirilmesi işlemi
gerçekleştirilecektir. Ayrıca alt konveyör sonunda birleşmeyen (tek) parçalar varsa, bu parçalar hatalı olarak değerlendirilip
bozuk malzeme kutusuna atılacaktır. Halka toplama (besleme) kolu en fazla 5 adet halka alabildiği için, eğer bu kolda 5 adet
halka bulunuyor ise üst konveyörde gelen halkalar, halka toplama koluna itilmeyecek ve üst konveyör sonunda bulunan,
kullanılmayan halkaları toplama kabına taşınacaktır.

Problem 2 : Endüstriyel sistemde üst konveyörde sırası belli olmadan karışık bir şekilde gelen plastik ve metal halkalardan
öncelikle arda arda gelen metal halkalar halka toplama koluna itilecek. Bu arda arda gelen metal halka sayısı kadar plastik
halka da bu metal halkalardan sonra gelen ilk plastik halka ile birlikte yine halka toplama koluna itilecek. İtilen metal
halkalardan sonra plastik halka gelmiş ise, bu gelen plastik halkalardan itilen metal halka sayısı kadar itilmedikçe arada gelen
metal halkalar itilmeyecektir. Bu problemde çubukların metal ya da plastik olması önemli olmayıp gelen her çubuk halka
toplama kolunda halka varsa, bu halkalarla birleştirilecektir. Birinci problemde olduğu gibi halka toplama kolunda en fazla 5
adet halka bulunabilecek ve alt konveyör sonunda hatalı parça varsa ayrılacaktır.

Problem 3 : Üst konveyörden karışık bir biçimde gelen 4 farklı parçadan 4 farklı şekilde birleşmeler sağlanacaktır. Plastik
halka (Plastic Ring) PR, metal halka (Metallic Ring) MR, plastik çubuk (Plastic Peg) PP, metal çubuk (Metallic Peg) MP ile
gösterilirse, 3 adet PRPP, 3 adet MRMP, 2 adet PRMP ve 2 adet MRPP olmak üzere toplam 10 adet birleşme işlemi
gerçekleştirilecek ve bu sayılara ulaşıldığında birleşme ve ayıklama işlemleri duracaktır. Bir birleşme için sayı tamamlanmış
ise, örneğin MRPP birleşmesi 2 adet üretilmiş ve o anda halka toplama kolunda MR varsa ve PP gelmiş ise bu parçaların
birleştirilmesi engellenecektir. Bu problemde halka toplama kolunda bir anda sadece 1 adet halka bulunacak ve gelen çubuklar
ile karşılaştırılıp gerekiyorsa kullanılacaktır. Birinci ve ikinci problemlerdeki gibi (hatalı) bozuk parça ayırma işlemi bu
problemde de yapılacaktır.

Problem 4 : 3. Problemde verilen sayıda birleşmeler gerçekleştirilecek olmakla birlikte, üretilmek istenen sayıya ulaşıncaya
kadar gelen bütün halkalar, (halka toplama kolundaki halka sayısı 5’ten az ise) sırası önemli olmadan halka toplama koluna
yerleştirilecek ve gelen her çubuk, bu kolun en başında bulunan halka ile karşılaştırılarak birleştirilecektir. Bu sayede birleşme
işlemi, seri ve hızlı bir şekilde gerçekleşecektir. Bozuk parça ayırma işlemi bu problem için de geçerlidir.

83
2.3. PIC 16F84 mikrodenetleyicisi

Deneysel endüstriyel sistemin kontrol edilebilmesi için PIC16F84 mikrodenetleyicisi kullanılmıştır. Bu mikrodenetleyicinin
tercih edilmesinin sebeplerinden bazıları şunlardır:
§ Kontrol edilecek olan endüstriyel sistem için yeterli sayıda (13 adet) I/0 (giriş/çıkış) ucuna sahip olması.
§ 1000 defaya kadar tekrar programlanabilen EEPROM (Flash) belleğe sahip olması.
§ Programlanması için ucuz maliyetli programlama devresi bulunması.
§ Fiyatının ucuz olması.
§ Hakkında kolay elde edilebilir ve bol miktarda bilgi bulunması (internet aracılığıyla).

2.4. Programlama birimi

PIC mikrodenetleyicisi için programların hazırlanmasında “PIC ASSEMBLY” dili kullanılmıştır. Bu dilde program
geliştirmek için gerekli olan MPLAB ve bu programla birlikte gelen MPASM programı http://www.microchip.com/ internet
adresinden ücretsiz olarak temin edilebilmektedir. Hazırlanan PIC programlarının PIC16F84’ün içerisine yüklenebilmesi için
http://jaichi.virtualave.net/electr-e.htm internet adresinden yine ücretsiz olarak temin edilebilen PROPIC programı ve bu
programla uyumlu olarak çalışabilen bir paralel port programlayıcı devresi kullanılmıştır.

2.5. Uygulama devresi

Deneysel endüstriyel kontrol sisteminin PIC microdenetleyicisi ile kontrol edilebilmesi için, PIC ile sistem arasındaki
bağlantıyı sağlayacak ve PIC ’in çalışması için gerekli enerji ile osilatör devresi vb. ihtiyaçları karşılayacak olan Şekil 4'teki
devre gerçekleştirilmiştir. PROPIC programı ve programlama devresi ile içerisine program yüklenmiş olan PIC16F84 bu
uygulama devresine takılarak endüstriyel sistem kontrol edilmiştir.

Uygulama devesinde görülen reset butonu PIC’ i reset etmek için ve dörtlü dip-switch ise bu çalışmada geliştirilen 4 farklı
programdan birisini seçmek için kullanılmıştır. PIC16F84’ün iki girişi (RA4 ve RB0) program seçmek için ayrılarak bu dip-
switch’e Şekil 4’te görüldüğü gibi bağlanmıştır. Bu şekilde PIC içerisine yazılan 2’den 4’e kod çözücü mantığıyla çalışan bir
program parçası ile 4 farklı programdan birini seçmek mümkün olmaktadır.

Devrede ayrıca PIC bacaklarına gelen ve giden sinyalleri gözlemlemek için 13 adet 470 ohm’ luk ön dirençli LED
bağlanmıştır. Algılayıcılara bağlı olan PIC bacaklarına gelen bilgiler ile parça seçme ve bırakma işini yapan selenoidlere PIC
bacaklarından gönderilen bilgiler, 470 ohm’ luk dirençler üzerinden uygulanmaktadır. Ayrıca 470 ohm’ luk dirençler, PIC
bacaklarında hiçbir bilgi yok iken, bütün bacaklara sürekli 0 V uygulanmasını sağlamaktadırlar.

3. Uygulama Problemlerinin çözümleri


Bu kısımda yukarıda tanımlanan 4 problem için ortaya konan çözümler incelenmektedir. Burada sadece birinci problemin
PIC16F84 için PIC assembly dili ile çözümlerine ilişkin yazılan programın akış şeması verilmiştir. Buna göre, birinci
problemin çözümü için Şekil 5’te verilen akış şeması çizilmiştir. Bu akış şemasında karşılaştırma (karar) işlemlerinin yapıldığı
akış şeması sembollerinin yanlarına evet yada hayır cevabı yazılmamış olup, eğer sorulan soruya evet cevabı veriliyor ise
aşağıya çizilen ok, hayır cevabı veriliyor ise yanlara çizilen oklar geçerlidir.

84
Şekil 5. Birinci problemin çözümü için akış şeması.

Sonuçta, 4 problem için ayrı ayrı çözümler elde edilmiş ve bu programlar birleştirilerek tek bir PIC16F84 mikrodenetleyicisine
yüklenmiştir. Programların ayrı ayrı elde edilen HEX dosyalarının toplam büyüklüğü 1 Kx14 bit olan PIC16F84 program
belleğinden çok daha fazla yer tutmaktadır. Bu yüzden, toplu programda her program için aynı veya farklı isimlerle kullanılan
file registerlerin çoğu ortak kullanılmıştır. Ayrıca her programda yer alan hatalı (bozuk) malzeme ayıklama program parçası ve
bazı kesme gecikmeleri de ortak kullanılarak gerekli toplam program hafızası azaltılmıştır. Bu sayede 1 Kx14 bit program
hafızası olan PIC16F84’e yüklenebilecek büyüklükte bir program elde edilmiştir. Uygulama devresinde verilen dörtlü dip-
switch ile her programın ayrı ayrı seçilerek çalıştırılabilmesi için de bir program parçası eklenmiştir. Bu program parçası ve
toplu programa ait akış şeması Şekil 6’da görülmektedir.

85
Şekil 6. Toplu programa ait akış şeması.

4. Sonuçlar ve Değerlendirme
Bu çalışmada PIC 16F84 mikrodenetleyicisi ile deneysel bir endüstriyel sistemin kontrolü gerçekleştirilmiştir. Bunun için dört
farklı program geliştirilmiştir. Program geliştirmek için PIC assembly dili kullanılmıştır. Buna göre PIC 16F84’e yüklenmek
üzere birinci problem için 75x14 bit’lik bir program hafızası, ikinci problem için 299x14 bit’lik bir program hafızası, üçüncü
problem için 365x14 bit’lik bir program hafızası ve dördüncü problem için 621x14 bit’lik bir program hafızası kullanılmıştır.
Her bir programın ayrı ayrı gerçekleştirilmesi durumunda toplam 1360x14 bitlik bir hafıza gerektiğinden 1024x14 bitlik
program hafzasına sahip olan PIC 16F84 mikrodenetleyicisi bu işlem için yeterli gelmedi. Bu problemin çözümü için
programlarda bazı kısımların ortak kullanılmasıyla dört program 1012x14 bitlik bir yer kaplamış ve böylelikle sadece bir PIC
16F84 mikrodenetleyicisi kullanılarak kontrol işlemi gerçekleştirilmiştir. PIC assembly diline alternatif olarak yüksek seviyeli
diller kullanmak mümkün olmakla birlikte, bu durumda elde edilecek programlar daha fazla yer kaplamaktadır. PIC
microdenetleyicileri, programlanması için ucuz maliyetli programlama devresi bulunması, fiyatlarının ucuz olması, çok geniş
ürün ailesine sahip olması, (flash) EEPROM belleğe sahip olup kullanım kolaylığı sağlaması vb. birçok özellikleri sayesinde
gün geçtikçe yaygın olarak kullanılmaktadır. Bir mikrodenetleyicinin endüstriyel sistem kontrolü amacıyla kullanılmasıyla,
sistem tasarımı kolaylıkla ve ucuz bir şekilde gerçekleştirilmiş olur. Buna göre tasarım ve program geliştirme aşamaları PLC’
lere göre uzun olmakla birlikte PIC mikrodenetleyicileri ile endüstriyel sistemler için ucuz ve etkin çözümler elde etmek
mümkün olmaktadır.

86
Uygulamaya ilişkin devre şeması:

PIC-BASIC İLE YEDİ PARÇALI GÖSTERGE KULLANIMI:

Şekildeki devrede; - ve + butonları ile değişken 0..99 sayıları arasında değiştirilmektedir. Değişen sayı
değeri 2 adet 7 parçalı LED ekran üzerinde gösterilir. Bu örneğin amacı 7 parçalı display'in PIC-Basic ile
nasıl kullanılabileceğini göstermektir.

87
PIC-BASIC Kaynak Kodu:
'****************************************************************
'* Name : TN020.BAS *
'* Author : [HUSEYIN SERIMER] *
Date : 12.10.2005 *
'* Version : 1.0 *
*'****************************************************************
'CPU 16F628 4MHZ INT-RC OSC, MCLR, PUT
'BU PROGRAM 7 SEGMENT ORTAK KATOD LED DISPLAYIN PIC-BASIC ILE
'NASIL KULLANILACAGINA AIT BIR YÖNTEM GÖSTERMEKTEDİR
'BU AMAÇLA İKİ ADET BUTONLA ARTAN/AZALAN 0-99 ARASINDAKİ
'SAYILARI LED DISPLAY ÜZERİNDE GÖSTERİR
'ÖRNEKTE AYNI ZAMANDA DEĞİŞİK BİR BUTON UYGULAMASI DA GÖRÜLEBİLİR

'program değişkenleri tanımlanır

TEMP0 VAR BYTE


TEMP1 VAR BYTE
TEMP2 VAR BYTE
DIGIT1 VAR BYTE
DIGIT2 VAR BYTE
SAYAC_00 VAR BYTE
SAYAC_01 VAR BYTE

Button_up VAR porta.1


Button_down VAR porta.0

new_key VAR BYTE

BASLA:

GOTO RESET_ALG
'********************************************************************

'********************************************************************
;INTERRUPT YÖNETİCİSİ

DEFINE INTHAND MYINT_VECTOR


ASM
MYINT_VECTOR
BCF INTCON,GIE
BTFSC INTCON,GIE
GOTO MYINT_VECTOR
ENDASM

;TIMER0 INTERRUPT

IF INTCON.2=1 THEN
GOTO PROGRAM_ALG
PROGRAM_ALG_RETURN:

INTCON.2 = 0 ' İnterrupt bayrağını temizle


ENDIF
ASM
RETFIE
ENDASM

;INTERRUPT YONETICISI
'********************************************************************

'********************************************************************

;INTERRUPT BEKLEME DONGUSU

88
WAIT_LOOP:
ASM
NOP
NOP
NOP
CLRWDT
BTFSS INTCON,7
BSF INTCON,7
NOP
NOP
NOP
ENDASM
GOTO WAIT_LOOP

;INTERRUPT BEKLEME DONGUSU

'********************************************************************
'********************************************************************
RESET_ALG:

ASM
BCF INTCON,GIE
BTFSC INTCON,GIE
GOTO _RESET_ALG

;OSILATOR 4 MHZ AYARLANIR

BSF PCON,3 ;1=4, 0=32K

ENDASM

;EGER ENERJI ILK KEZ VERILIYORSA RAM HAFIZA SIFIRLANIR


CLEAR

;ENERJI HATLARINDAKI PARAZITIK ETKI ICIN ACILIS GECIKMESI


PAUSE 1000

CMCON=%00000111 'NO COMPARATOR PORTA IO MODE

OPTION_REG = %00000010 ' 7.Enable PORTB pullups 2-0 prescalar

INTCON=%00100000 ' Enable INTE interrupt


TRISB=0 ' PORTB CIKIS OLARAK TANIMLANIR
GOTO WAIT_LOOP

'********************************************************************
'********************************************************************

PROGRAM_ALG:
SELECT CASE SAYAC_00
CASE 0 'BUTONLAR KONTROL EDILIR
'Sadece butona ilk basılıiğı an işlem yapılması için new_key isimli bir değişken kullanılmış ve bu ‘değişken ile kilitleme
yapılmıştır.

if button_up=1 and button_down=1 then ;butonlara basılı değil


new_key=0
endif

if new_key=0 then
if button_up=0 then
sayac_01=sayac_01 +1
if sayac_01>99 then sayac_01=99
new_key=1
endif
if button_down=0 then

89
sayac_01=sayac_01 -1
if sayac_01>99 then sayac_01=0
new_key=1
endif
endif
CASE 1

TEMP0=SAYAC_01 DIG 1
GOSUB CNV_7SEG
DIGIT2=TEMP1

TEMP0=SAYAC_01 DIG 0
GOSUB CNV_7SEG
DIGIT1=TEMP1

CASE 3 '1.DISPLAYE YAZDIRILIR


LOW PORTA.3
LOW PORTA.2
PORTB=DIGIT2
HIGH PORTA.3
LOW PORTA.2

CASE 5 '2.DISPLAYE YAZDIRILIR


LOW PORTA.3
LOW PORTA.2

PORTB=DIGIT1
LOW PORTA.3
HIGH PORTA.2

END SELECT

SAYAC_00=SAYAC_00+1
IF SAYAC_00>5 THEN SAYAC_00=0
GOTO PROGRAM_ALG_RETURN

'********************************************************************
'********************************************************************

'BU RUTIN BCD KODLU SAYININ 7 SEGMEN KODUNU BELIRLER


'GIRIS DEGISKENI TEMP0
'CIKIS DEGISKENI TEMP1

CNV_7SEG:
temp1=0

;ABCDEFGP

LOOKUP

TEMP0,
[%11111100,%01100000,%11011010,%11110010,%01100110,%10110110,%10111110,%11100000,%11111110,%11110110
],TEMP1 '
Return

'********************************************************************
END

* Bu ekdeki uygulamalar www.antrak.org ve çeşitli web sitelerinden alınmıştır.

90
EK 2:
ANEMOMETRELER:

Bir anemometre, rüzgarın hızını ve yönünü ölçmek için kullanılır. Anemometreler meteoroloji için ve bir
rüzgar türbünü üstüne monte etmek için uygun olabilirler, çünkü burada çok büyük bir doğruluk gerçekte
önemli değildir. Fakat, rüzgar enerji endüstrisinde rüzgar hızı ölçümleri için ucuz anemometreler uygun
değildir. Çünkü onlar çok yanlış ölçebilirler ve kalibre edilmeleri zordur, %5 hatta %10 kadar hatalı
ölçüm yapabilirler. Eğer bir rüzgar çiftliği kurmak planlanıyorsa ve rüzgar hız ölçümleri %10 luk bir hata
içeriyorsa, bu ekonomik bir felaket olabilir. Bu durumda rüzgarın enerji içeriği %33lük bir hata
içerecektir. Farklı bir rüzgar türbününün kanat bağlantı yüksekliğinde ( diyelim ki, 10 m den 50 m ye
kadar) hesaplarınızı yeniden yapmak zorunda kalırsınız. İyi kalibre edilmiş olan profesyonel
anemometrelerin rüzgar ölçüm hatası %1 civarındadır. Bir rüzgar türbünü üstündeki anemometre rüzgara
karşı türbünü harekete geçirmek için gerçekte hızın yeterli olup olmadığını belirlemek için kullanılır.

RÜZGAR HIZININ DEĞİŞEBİLİRLİĞİ:

Rüzgarın Kısa Süreli Değişebilirliği:

Rüzgar hızı daima dalgalıdır, bu sebeple rüzgar enerji içeriği de değişkendir. Tam olarak bu
değişimin ne kadar olacağı, hava şartları, lokal yüzey şartları ve engellere bağlıdır. Bir rüzgar
türbününden alınan enerji, çok hızlı rüzgar değişimlerinin türbün rotorunun eylemsizliği ile bir miktar
düzenlenmesine rağmen, rüzgar değiştikçe değişmektedir.
Alttaki grafik 10 s içinde rüzgar hızındaki değişimlerin bir örneğini göstermektedir.

Rüzgarın Günlük ( Gece ve Gündüz ) Değişimleri


Dünya üzerindeki çoğu alanda gün boyunca geceden daha fazla rüzgar görülür. Alttaki grafik 3’ er saat
aralıklarla rüzgar hızındaki değişimi gösteriyor. Bu değişim büyük ölçüde sıcaklık farklılıkları gerçeğine
bağlıdır, yani kara ve deniz yüzeyleri arasındaki sıcaklık farkı gündüz, gece farkından daha fazla olmaya
meyillidir. Rüzgar da daha dalgalıdır, rüzgar yönü gündüz geceye göre daha sık yön değiştirmeye
meyillidir. Rüzgar türbün sahiplerinin bakış açısına göre, gündüz daha fazla enerji üretilmesi bir
avantajdır, çünkü elektrik tüketimi gün içinde geceden daha fazladır. Çok sayıda güç şirketleri gün
içindeki en yüklü tüketim saatlerini karşılayacak elektrik üretimi için daha fazla para öderler ( ucuz
elektrik üretim kapasitesinin olmadığı zaman).

91
Rüzgarın Mevsimsel Değişimleri

Aylara göre rüzgar enerjisindeki değişim aşağıda gösterilmiştir.

RÜZGARIN GÜCÜ:

Rüzgar Hızının Küpü:

Rüzgar hızı, bir rüzgar türbününün elektriğe dönüştürebileceği enerji miktarı için oldukça önemlidir.
Rüzgarın enerji içeriği hızın küpüyle değişir, yani enerji hızın 3. kuvvetiyle değişmektedir. Eğer rüzgar
hızı iki katına çıkarsa, enerji 2 ^3 = 8 kat artar. Rüzgardaki enerji neden hızın küpü ile değişir, bunu
açıklayalım. Günlük bilgilerimizden, eğer bir arabanın hızı iki katına çıkartılırsa, onu durdurmak için 4
katı fazla fren gücü gerekecektir. ( Esas olarak, bu Newton’un hareket yasalarını ikincisidir). Gelelim
rüzgar türbünü durumuna, türbün enerjisini rüzgarı frenleyerek kazandığı için, eğer rüzgar hızını 2 katına
çıkarırsak, rotordan her saniyede geçerek türbüne çarpan hava dilimi iki katına çıkmış olacaktır ve bunu
frenlemek için bir arabayı durdurma örneğinden öğrendiğimiz gibi, bu hava dilimlerinin her biri 4 katı
enerji üretecektir. Grafikten görülen 8 m/s lik bir rüzgar hızına maruz kalan bir türbün yüzeyinin 1 m2
sinden 314 W enerji ( 1 saniyede üretilen enerji ) elde ederiz. (Rüzgar, rotorun taradığı alana dik bir
doğrultuda gelmektedir). 16 m/s de biz bu enerjinin 8 katını, yani 2509 W/m2 enerjiyi elde ederiz.
Aşağıdaki grafikte rüzgar hızlarına karşılık olan rüzgar enerji değerlerinin çizimi gösterilmiştir.

92
Rüzgar Gücünün Formülasyonu:

Dairesel bir alandan dik olarak geçen rüzgarın gücü;

P = 1/2 ρ v3 Π r2

Burada P, W (watt) olarak ölçülen rüzgar gücü,

ρ = (rho) = kuru havanın yoğunluğu = 1,225 kg/m3 (deniz seviyesinde ortalama .atmosfer basıncında ve
15° C de ölçülen, 1m3 havanın ağırlığı )
.
v : m/s olarak ölçülen rüzgar hızı,

Π (pi) = 3.1415926535...,

r: m olarak ölçülmüş türbün kanatının yarıçapı ( yani, çapın yarısı).

RÜZGAR GÜLÜ:

Kuvvetli rüzgarlar, rüzgar enerji kaynağı bölümünde anlatıldığı gibi. çoğunlukla özel bir yönden gelir.
Rüzgar yönlerinin değişen frekanslarını ve rüzgar hızlarının dağılımını göstermek için, rüzgar hızı ve
yönünün meteorolojik gözlemler esas alınarak, rüzgar gülü şeklinde bir çizim yapılmaktadır. Bir rüzgar
gülü 8 veya 16 yöne göre olabilir, ya da Avrupa Rüzgar Atlasında esas alındığı gibi 12 yöne, 30’ ar
derecelik yön aralıklarına göre de olabilir.

93
EK-3:
PIC ve diğer denetleyiciler endüstride birbirleriyle haberleşmek için PROFIBUS , FIELDBUS,
CAN ürünlerini kullanırlar. Aşağıda NATIONAL INSTRUMENTS firmasının ürünleri teknik
özellikleriyle verilmiştir.

Endüstriyel İletişim

Laboratuvar ve test ortamlarında olduğu gibi endüstri uygulamalarında da PC'lere; güvenilir, kararlı,
kullanımı kolay yazılım ve donanım araçlarına ihtiyaç vardır. Bu araçların proses enstrümantasyonu,
PLCler, tek döngülü denetleyiciler, değişik I/O ve veri toplama araçlarıyla iletişim kurabilmesi önemlidir.
Özellikle otomotiv uygulamalarında kullanılmakta olan CAN (Controller Area Network) için de ürünler
mevcuttur.

Seri Haberleşme (RS-232/422/485)

94
Bir çok endüstri ve laboratuvar uygulamalarındaki araçlar birbirlerine ve bilgisayarlara bağlanmak için
EIA standardında RS-232, RS-422 ya da RS-485 kullanırlar. Bu standartlar hakkındaki yaygın bir yanlış
düşünce, bunların belli yazılım protokolleri tanımladığıdır. Gerçekte ANSI/EIA sadece elektriksel
karakterleri tanımlar, yazılım protokolü tanımlamaz. RS-232 sadece tek yüke izin veren, noktadan
noktaya bir ağdır. Buna karşın RS-422 ve RS-485 çok yüklü olarak çalışabilir.

National Instruments'ın ISA, PCI, PCMCIA ve PXI/CompactPCI seri ara yüz kartları seri araçlarla
iletişim kurmakta kullanılan asenkron seri arayüzlerdir. Arayüzler kullanılan veri yolu tipine bağlı olarak
8 porta kadar izin verir. Bunları standart COM portlar olarak kurabilir ve kullanabilirsiniz. National
Instruments LabVIEW, LabWindows/CVI, BridgeVIEW, Lookout ve VB, VC++ ve Excel gibi standart
geliştirme ortamları standart giriş çıkış fonksiyonlarıyla bu portlara erişebilirler. Tüm arayüz kartları daha
iyi performans, portlar arasında güvenilir kesme paylaşımı ve RS-485'e erişim için bir gelişmiş COM port
içerir.

DeviceNet, Üretim Sistemleri için Endüstriyel Ağ Çözümleri

DeviceNet algılayıcılar ve aktuatörler için endüstriyel network' de liderdir. DeviceNet endüstriyel araçları
yüksek düzey denetleyicilere bağlamakta kullanılan düşük düzey networkdür. DeviceNet, değişik
üreticilerin ürünlerini bir arada kullanabilmemize imkan tanır.

National Instruments DeviceNet DeviceNet networkleri üzerinde arayüzleri yüksek performanslı


Master/Scanner yeteneğinin sağlanması için Intel 80386EX işlemcilerle donatılmıştır. NI-DNET National
Instruments programları için sürücüler içerir. National Instruments DeviceNet kitleri Intel 80386EX
işlemcileri içeren CAN donanımlarıyla yüklüdür. DeviceNet arayüz kitleri NI-DNET yazılımı yüksek

95
düzey API ve OPC server içerir. NI-DNET yazılımını kullanmak için , önce diğer DeviceNet araçlarıyla
iletişiminizi uygulamanız içinde konfigure edip daha sonra kolayca networklenmiş giriş çıkış
değerlerinizi okuyor/yazıyorsunuz. İletişimin tüm detaylarıyla CAN arayüz kartının 80386EX işlemcisi
ilgilenir.

Controller Area Network (CAN)

Controller Area Network (CAN) öncelikle endüstriyel tıbbi ve taşınabilir uygulamalarda düşük maliyetli
çözümler getirmek üzere geliştirilmiş sayısal iletişim ağıdır. Şu anda CiA (CAN in Automation) adlı
bağımsız bir grup özellikleri belirlemekte ve gerçekleştirmektedir.

CAN otomotiv endüstrisinde araç içi iletişimde ve endüstriyel otomasyon uygulamalarında sıklıkla tercih
edilir oldu. CAN' i bu kadar başarılı yapan etmenlerden biri üretici-tüketici uyumlu veri toplama ve
multimaster kapasitesidir.

CAN' lerle iletişim National Instruments CAN arayüzleriyle çok kolaydır. Tüm CAN arayüzlerinin 1 ya
da 2 portlu konfigurasyonları mevcuttur ve hepsi Intel 80386 işlemcisiyle donatılmıştır. Tüm CAN
arayüzleri NI-CAN sürücü yazılımı ile birlikte gelir. Bu yazılım National Instruments programları için
yüksek düzey bir API sağlar.

FOUNDATION Fieldbus

The National Instruments FBUS arabirimleri (AT-FBUS/2) FOUNDATION Fieldbus cihazlarını standart
masaüstü veya endüstriyel bilgisayarlara bağlar. Bu arabirim serisi, This series of interfaces, H1 (31.25
kb/s) ağlarına bağlanır, 1 veya 2-port konfigürasyonlara sahip olabilir, aynı zamanda da FOUNDATION
Fieldbus uyumluluk testinden geçmiştir. NI-FBUS iletişim yöneticisi (CM) yazılımı (Windows NT/98/95
için) bütün kartlarla birlikte kullanıcıya verilir. NI-FBUS CM kullanıcıya alt-seviye fieldbus
protokollerini bilmesini gerektirmeyen yüksek seviye bir arabirim sunar. HMI ve DCS uygulamaları NI-
FBUS CM yazılımını veri toplama ve denetim için kullanabilirler. AT-FBUS ile , bir ISAbus bilgisayar
FOUNDATION Fieldbus sistemi içinde bir sunucu gibi davranabilir.

PROFIBUS

National Instruments'ın PROFIBUS ve Siemens iletişim protokolleri için ürettiği ürünler bir yazılım
sistemi ve 1-8 portlu PC1500PFB kartından oluşur. PC1500PFB protokol uygulamaları için özel
işlemciye sahip bir ISA kartıdır. Sunucu ve protokol yazılımı standart PROFIBUS protokollerini kabul
ettiği gibi Siemens PLC lere özel protokolleri de destekler. PC1500PFB üstündeki işlemci sayesinde
bilgisayarınızın işlemcisi endüstriyel sistemle olan iletişim yüzünden performans kaybına uğramaz.

YAPISAL OLARAK PROFIBUS

96
Profibus Özellikleri

PROFIBUS dünyadaki en yaygın endüstriyel fieldbus' tır. Ağ 32 bağlantı elemanını destekleyebilir veya
12Mbps. gibi yüksek hızlarda veri iletimine uygundur. Birçok fieldbus sistemi gibi, PROFİBUS çalışma
maliyetini azaltır ve verimliliği arttırır. Yeni ürünler için pazarlama hızını ve ürün kalitesini geliştirebilir.
PROFIBUS, standart 4-20mA kontrolden farklı olarak, tek perli bu kablo üzerinden 32 istasyonu
destekleyebilir.

Hat yükselticisi yardımıyla 127 bağlantı elemanına kadar destekleyebilir. Maksimum hat uzunluğu,
1200mt. hat yükselticisi kullanıldığında 4800mt.' dir. Max. 4 yükseltici kullanılabilir. Standart bağlantılar
9-Pin D-Sub konnektör kullanılarak yapılır. İletişim hızları 9.6 Kbps' den başlayarak seçilebilir.

KAYNAKLAR

1) Mikrodenetleyiciler ve PIC Programlama : Orhan ALTINBAŞAK, ALTAŞ


YAYINCILIK 2003

2) PICBasic Pro ile PIC Programlama : Orhan ALTINBAŞAK, ALTAŞ YAYINCILIK


2002

3) PIC C ile PIC Programlama : Doç.Dr.Doğan İBRAHİM, BİLEŞİM YAYINCILIK


2003

YARARLANILAN WEB SİTELERİ

1. www.microchip.com
2. www.ic-prog.com
3. www.antrak.org.tr
4. www.turkengineers.com
5. www.onsemi.com
6. www.maxoverclocking.com
7. www.elektronik.zevki.com
8. www.elektronik.gezgini.com
9. www.wekatronik.com
10. www.rswww.com
11. www.windpower.org
12. www.PICprogramlama.com
13. www.atlaskitap.com
14. www.tomshardware.com
97
EK KAYNAKLAR

1. Bilim ve Teknik Dergisi


2. Otomasyon Dergisi

KULLANILAN PROGRAMLAR

1. PROTEUS 6 PROFESSIONAL
2. MICROCODE STUDIO
3. IC-PROG
4. EWB-MULTISIM 8
5. MATLAB

98

You might also like