Professional Documents
Culture Documents
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ı.
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.
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İ
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.
Name (isim) : Bir aile içerisinde farklı özelliklerdeki PIC’ lerin isimleri.
4
• 18FXXX 16 bit program genişliği
PIC12CXXX Ailesi:
PIC16C5X Ailesi:
PIC16CXXX Ailesi:
PIC16FXXX Ailesi:
PIC18CXXX Ailesi:
PIC18FXXX Ailesi:
6
1.4 PIC 16F877 GENEL GÖRÜNÜMÜ VE AKIŞ DİYAGRAMI
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
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
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
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
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
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.
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.
RC6 verici, RC7 ise alıcı port olarak kullanılmaktadır. RCSTA (0x18) ve
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:
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.
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)
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.
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
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ı.
İ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.
İ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.
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.
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.
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
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.
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.
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ı.
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'
'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.
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
'başlangıç işlemleri
trisc=%00000000
trisa=%00000001
adcon1=%00000100
portc=0
anadongu:
adcin 0, adsonuc
portc=adsonuc
26
goto anadongu
end
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;
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 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.
Ö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,
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.
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.
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.
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.
(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.
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;
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:
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.
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 : *
'* : *
'****************************************************************
'baslangıç işlemleri
31
'ana program bloğu
basla:
lcdout $fe ,1 'göstergeyi temizle
pause 500 '500 ms bekle
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.
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.
İ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.
• İ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ı ;
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:
Buraya kadar yaptığımız uygulamaları birleştirip, bir üst aşamaya taşırsak; bir sıcaklık algılayıcı
yapabiliriz.
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
Volt=(ham */ 1250)
sicaklik=volt/10 'SICAKLIĞIN TAM KISMI
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;
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
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ü)
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 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 ;
Ö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:
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.
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
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
ENDIF
DONGU_2:
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
DNTLYC=512
'DENETLEYICI PORTLARDAN BİRİSİNDEN DIŞARI VERİLECEK
FARK=GERS-REFS
IF FARK>307 THEN
DNTLYC = 205
ENDIF
IF FARK <307 THEN
DNTLYC =512-FARK
ENDIF
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
DNTLYC=512
FARK=REFS-GERS
IF FARK>307 THEN
DNTLYC =819
ENDIF
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
DÖNGÜ_2
HAYIR
EVET
DNTLYC=512 DNTLYC=512
YANİ 2.5 V YANİ 2.5 V
EVET EVET
DÖNGÜ_2 DÖNGÜ_1
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.
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:
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.
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 : *
'* : *
'****************************************************************
'-------------------------------------------------------------------------------
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.
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
OKU_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:
Ş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
'SABİTLER'
K1 CON 156
K2 CON 250
K3 CON 376
'DEĞİŞKENLER'
LOW PORTB.2
PAUSE 200
BASLA:
53
ADCIN 0,GEN
ADCIN 1,ACI
OKU:IF ADCON0.2=1 THEN OKU
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.
UYGULAMA-9:
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:
BIR:
'T1CON=%00000001
LCDOUT $FE,1," 1.PROGRAM "
LCDOUT $FE,$C0,"SICAKLIK DENETIM"
PAUSE 3000
BASLA:
GOSUB OKU 'ADC OKU
IF REFS>922 THEN
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
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
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 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
DNTLYC=512
FARK=GERS-REFS
IF FARK>307 THEN
DNTLYC = 205
ENDIF
IF FARK <307 THEN
DNTLYC =512-FARK
ENDIF
DONGU_1:
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
DNTLYC=512
FARK=REFS-GERS
IF FARK>307 THEN
DNTLYC =819
ENDIF
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
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
ADCIN 0,GEN
ADCIN 1,ACI
OKU_3:IF ADCON0.2=1 THEN OKU_3
Program bellek kapasitesi yettiği sürece seçici uç sayısı ve program sayısı artırılabilir.
4- EKLER:
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.
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
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.
: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
Modülasyon türü : AM
Çalışma gerilimi : 1.5-12 VDC
RF çıkış gücü : 8 mwatt
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.
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.
NOT:
PIC' i programlarken sigortalara aşağıdaki ayarları yaptığınıza emin olun.
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 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.
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.
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).
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.
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.
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ı:
Ş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
BASLA:
GOTO RESET_ALG
'********************************************************************
'********************************************************************
;INTERRUPT YÖNETİCİSİ
;TIMER0 INTERRUPT
IF INTCON.2=1 THEN
GOTO PROGRAM_ALG
PROGRAM_ALG_RETURN:
;INTERRUPT YONETICISI
'********************************************************************
'********************************************************************
88
WAIT_LOOP:
ASM
NOP
NOP
NOP
CLRWDT
BTFSS INTCON,7
BSF INTCON,7
NOP
NOP
NOP
ENDASM
GOTO WAIT_LOOP
'********************************************************************
'********************************************************************
RESET_ALG:
ASM
BCF INTCON,GIE
BTFSC INTCON,GIE
GOTO _RESET_ALG
ENDASM
'********************************************************************
'********************************************************************
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 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
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
'********************************************************************
'********************************************************************
CNV_7SEG:
temp1=0
;ABCDEFGP
LOOKUP
TEMP0,
[%11111100,%01100000,%11011010,%11110010,%01100110,%10110110,%10111110,%11100000,%11111110,%11110110
],TEMP1 '
Return
'********************************************************************
END
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 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.
91
Rüzgarın Mevsimsel Değişimleri
RÜZGARIN GÜCÜ:
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:
P = 1/2 ρ v3 Π r2
ρ = (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Ü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.
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 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.
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) ö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.
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. 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
KULLANILAN PROGRAMLAR
1. PROTEUS 6 PROFESSIONAL
2. MICROCODE STUDIO
3. IC-PROG
4. EWB-MULTISIM 8
5. MATLAB
98