ANKARA ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
YÜKSEK LİSANS TEZİ
TIBBİ GAZ SİSTEMLERİNDE BASINÇ KONTROLÜ İÇİN BİR UYARI
SİSTEMİ TASARIMI
Oktay AYDIN
ELEKTRONİK MÜHENDİSLİĞİ ANABİLİM DALI
ANKARA
2008
Her hakkı saklıdır
TEZ ONAYI
Oktay AYDIN tarafından hazırlanan “Tıbbi gaz sistemlerinde basınç kontrolü için
bir uyarı sistemi tasarımı” adlı tez çalışması aşağıdaki juri tarafından oy birliği ile
Ankara Üniversitesi Fen Bilimleri Enstitüsü Elektronik Mühendisliği Anabilim
Dalı’nda YÜKSEK LİSANS TEZİ olarak kabul edilmiştir.
Danışman: Doç. Dr. Ziya TELATAR
Jüri Üyeleri :
Başkan : Doç. Dr. Osman EROĞUL
Gülhane Askeri Tıp Akademisi Biyomedikal Mühendislik Merkezi
Üye : Doç. Dr. Ziya TELATAR
Ankara Üniversitesi Mühendislik Fakültesi Elektronik Mühendisliği A.B.D.
Üye : Yrd. Doç. Dr. Murat EFE
Ankara Üniversitesi Mühendislik Fakültesi Elektronik Mühendisliği A.B.D.
Yukarıdaki sonucu onaylarım
Prof.Dr. Orhan ATAKOL
Enstitü Müdürü
i
ÖZET
Yüksek Lisans Tezi
TIBBİ GAZ SİSTEMLERİNDE BASINÇ KONTROLÜ İÇİN BİR UYARI
SİSTEMİ TASARIMI
Oktay AYDIN
Ankara Üniversitesi
Fen Bilimleri Enstitüsü
Elektronik Mühendisliği Anabilim Dalı
Danışman: Doç. Dr. Ziya TELATAR
Bu çalışmada; hastanelerde, ameliyathane ve hasta odalarına kadar iletilen tıbbi gazların hastanenin her bir katındaki basınçlarının merkezi bir yerden görüntülenmesini, kaydedilmesini ve basınçlar, limit değerlerinin dışına çıktığında sesli ve görsel alarm üretilmesini sağlayacak bir sistem gerçeklenmiştir. Basınç limit değerleri, kullanıcı tarafından belirlenebilmektedir. 4 katlı bir hastane için tasarlanan sistemde her bir kata medikal oksijen, medikal karbondioksit, medikal azot protoksit, basınçlı hava ve vakum hatlarının geldiği düşünülerek her kattan 5 basınç sensörü ile basınç bilgisi alınmıştır. Basınç sensörlerinden gelen veriler, tasarlanan bir kontrol devresi ile alınarak bilgisayara aktarılmakta, geliştirilen bir program ile yorumlanarak gerektiğinde alarm üretilmektedir. Hastanelerdeki merkezi gaz santralleri, her bir tıbbi gazın toplam basınç değişiminde alarm vermektedir. Ayrıca her bir kat için alarm paneli de bulunmaktadır. Ancak gerçeklenen sistem, hastanedeki bütün katların gaz basınçlarını tek bir yerden izleme, bu basınç değerlerini bilgisayara kaydetme ve geriye dönük olarak gaz basınçlarını sorgulama olanağı sağlamaktadır. Gaz basınçlarındaki değişimlerde algılanan hata payı ortalama % 4.66’dır.
Kasım 2008, 53 sayfa
Anahtar Kelimeler: Tıbbi Gazlar, Basınç, Alarm, Kontrol, Oksijen, Nitrojen Protoksit,
Basınçlı Hava
ii
ABSTRACT
Masters Thesis
AN ALARM SYSTEM FOR PRESSURE CONTROL IN MEDICAL SYSTEMS
Oktay AYDIN
Ankara University
Graduate School of Natural and Applied Sciences
Department of Electronics Engineering
Supervisor: Assoc. Prof. Ziya TELATAR
In this study, a system is realized that can monitorize and record pressures of medical gases-delivered to patient rooms and operating rooms- in every floor of a hospital. Also this system is able to produce an visual and auditory alarm when pressures of medical gases isn’t within limits. Pressure limits are entered by user. It can be used hospitals which have up to 4 floors. It is assumed that medical oxygen, medical carbon dioxide, medical nitrous oxide, medical air and vacuum lines delivered to every floor so 5 pressure sensor are used for measure pressures in every floor. A designed control circuit transmits data, which comes from pressure sensors, to a computer which can process this data with an improved programme on it. And computer produces alarm when pressures of medical gases isn’t within limits. Central gas plant in hospital can produce alarm when every gas’s total pressure isn’t within limits. Also there’re alarm systems for every single floor. But with designed system, pressures in every floor can be monitorized, stored and inquired retrospectively in any room in hospital continuously. Mean measurement accuracy while measuring pressure changes in this study is 4.66% .
November 2008, 53 pages
Key Words: Medical Gases, Pressure, Alarm, Control, Oxygen, Nitrous Oxide,
Compressed Air
iii
TEŞEKKÜR
Desteklerini esirgemeyen danışman hocalarım Sayın Doç. Dr. Ziya TELATAR’a,
(Ankara Üniversitesi Mühendislik Fakültesi), Sayın Doç. Dr. Osman EROĞUL’a
(Gülhane Askeri Tıp Akademisi Biyomedikal Mühendislik Merkezi) ve Gülhane Askeri
Tıp Akademisi Tıbbi Gazlar Bölümü personeline, aileme ve Bilim İnsanı Destekleme
Bursu ile katkılarından TÜBİTAK’a teşekkürlerimi sunarım.
Oktay AYDIN Ankara, Kasım 2008
iv
İÇİNDEKİLER
ÖZET ................................................................................................................................. i
ABSTRACT ..................................................................................................................... ii
TEŞEKKÜR ................................................................................................................... iii
SİMGELER DİZİNİ ...................................................................................................... vi
ŞEKİLLER DİZİNİ ...................................................................................................... vii
ÇİZELGELER DİZİNİ ................................................................................................. ix
1. GİRİŞ ........................................................................................................................... 1
2. KURAMSAL TEMELLER ........................................................................................ 2
2.1 Hastanelerde Kullanılan Başlıca Tıbbi Gazlar ...................................................... 2
2.1.1 Medikal oksijen ...................................................................................................... 2
2.1.2 Medikal karbondioksit ........................................................................................ 10
2.1.3 Medikal azot protoksit ......................................................................................... 10
2.1.4 Medikal hava (basınçlı hava) .............................................................................. 13
2.1.5 Medikal vakum ..................................................................................................... 15
2.2 Mikroişlemciler ve Mikrodenetleyicilere Genel Bakış......................................... 17
2.2.1 Mikroişlemciler .................................................................................................... 17
2.2.2 Mikrodenetleyiciler .............................................................................................. 18
2.2.3 PIC’in özellikleri .................................................................................................. 22
2.2.4 Bir PIC’in işlem yapabilmesi için gerekli bileşenler ......................................... 23
2.2.5 PIC 16F877 ........................................................................................................... 24
2.2.6 Bellek Organizasyonu .......................................................................................... 26
2.2.7 Program Bellek Organizasyonu .......................................................................... 26
2.2.8 Veri Bellek Organizasyonu.................................................................................. 26
2.3 Pic Basic Programlama Dili ................................................................................... 27
3. MATERYAL VE YÖNTEM .................................................................................... 28
3.1 Gaz Basınç Görüntüleme ve Alarm Sistemi ......................................................... 29
3.1.1 Sensörler ............................................................................................................... 29
3.1.2 Kontrol devresi ..................................................................................................... 30
3.1.2.1 Devrenin çalışması ............................................................................................ 34
3.1.3 Geliştirilen program............................................................................................. 36
v
4. TARTIŞMA VE SONUÇ .......................................................................................... 48
KAYNAKLAR .............................................................................................................. 51
EKLER ........................................................................................................................... 53
EK 1 Kontrol Devresindeki PIC’ler İçine Yüklenen Kodlar .................................... 54
EK 2 Bilgisayarda Çalışan Programın Kaynak Kodları ........................................... 66
EK 3 MPX5999D İçin Üretici Bilgi Sayfası ................................................................ 86
EK 4 MPX5100D İçin Üretici Bilgi Sayfası ................................................................ 89
EK 5 Pic Basic Proglamlama Dilinde Komutlar ........................................................ 94
EK 6 PIC 16F877’de Pin Tanımlamaları .................................................................... 98
EK 7 PIC 16F877’nin Basitleştirilmiş İç Yapısı ....................................................... 100
ÖZGEÇMİŞ ................................................................................................................. 101
vi
SİMGELER DİZİNİ
CPU Central Processing Unit
EPROM Erasable Programmable Read-Only Memory
FDA U.S. Food And Drug Administration
I/O Input/Output
MCU Microcontroller Unit
OTP One Time Programmable
PIC Peripheral Interface Controller
PROM Programmable Read-Only Memory
PSA Pressure Swing Adsorption
PWM Pulse-With Modulation
RAM Random-Access Memory
ROM Read-Only Memory
RISC Reduced Instruction Set Computing
SFR Special Function Register
USART The Universal Synchronous Asynchronous Receiver Transmitter
vii
ŞEKİLLER DİZİNİ
Şekil 2.1 Örnek bir oksijen santrali ................................................................................... 4
Şekil 2.2 Örnek bir yüksek basınç düşürücü ..................................................................... 4
Şekil 2.3 Örnek bir ikincil basınç düşürücü ...................................................................... 5
Şekil 2.4 Örnek bir kollektör ............................................................................................. 5
Şekil 2.5 Örnek bir bağlantı borusu .................................................................................. 6
Şekil 2.6 Örnek bir medikal hava santrali ......................................................................... 8
Şekil 2.7 Örnek bir medikal hava santrali alarm paneli .................................................... 8
Şekil 2.8 Örnek bir medikal vakum santrali ..................................................................... 9
Şekil 2.9 Örnek bir medikal hava santrali ....................................................................... 14
Şekil 2.10 Örnek bir medikal hava santrali alarm paneli ................................................ 15
Şekil 2.11 Örnek bir medikal vakum santrali ................................................................. 16
Şekil 2.12 Örnek bir medikal vakum pompası ................................................................ 17
Şekil 2.13 Bir mikroişlemci sisteminin temel bileşenlerinin blok diyagramı ................. 18
Şekil 2.14 Bir mikrodenetleyici sisteminin temel bileşenlerinin blok diyagramı ........... 19
Şekil 2.15 PIC 16F877’nin giriş çıkış portları ................................................................ 24
Şekil 3.1 Kontrol devresi genel şeması ........................................................................... 31
Şekil 3.2 Kontrol devresine ait baskı devre .................................................................... 32
Şekil 3.3 Geliştirilen kontrol devresi .............................................................................. 33
Şekil 3.4 Sensör bağlantıları ........................................................................................... 33
Şekil 3.5 Sensörlerin gaz prizlerine bağlanışı ................................................................. 34
Şekil 3.6 Geliştirilen bilgisayar programına ait akış şeması ........................................... 37
Şekil 3.7 Limit ayarlama penceresine ait ekran görüntüsü ............................................. 38
Şekil 3.8 Normal basınç için örnek ekran görüntüsü ...................................................... 39
Şekil 3.9 Pozitif basınç sensöründe düşük basınç için örnek ekran görüntüsü ............... 40
Şekil 3.10 Negatif basınç sensöründe düşük basınç için örnek ekran görüntüsü............ 41
Şekil 3.11 Pozitif basınç sensöründe yüksek basınç için örnek ekran görüntüsü ........... 42
Şekil 3.12 Negatif basınç sensöründe yüksek basınç için örnek ekran görüntüsü .......... 43
Şekil 3.13 Pozitif basınç sensöründe çok yüksek basınç için örnek ekran görüntüsü .... 44
Şekil 3.14 Negatif basınç sensöründe çok yüksek basınç için örnek ekran görüntüsü ... 45
viii
Şekil 3.15 Bir basınç sensörünün arızalı olması veya o hattaki basıncın 0 (sıfır) bar
olması durumuna ait örnek ekran görüntüsü ................................................. 46
Şekil 3.16 Kayit.txt dosyasına ait bir ekran görüntüsü ................................................... 47
ix
ÇİZELGELER DİZİNİ
Çizelge 2.1 PIC 16F877’de RP0 ve RP1 ile bank seçimi ............................................... 27
Çizelge 4.1 Ölçüm sonuçları karşılaştırması ................................................................... 49
1
1. GİRİŞ
Hastanelerde, ameliyathanelerde ve hasta odalarında çeşitli tıbbi gazlar değişik amaçlar
için kullanılmaktadır (anestezi, ameliyat bölgesinin daha iyi görülebilmesi amacıyla
vücut boşluklarının genişletilmesi v.b.). Tıbbi gazlar bu ilgili birimlere merkezi gaz
santrallerinden yollanır. Merkezi gaz santrallerinde gazların basıncı belli değerler
arasında tutulmakta ve bu değerlerin dışına çıktığında santral üzerindeki alarm paneli
marifetiyle alarm üretilmektedir.
Tıbbi gazlar, hastanenin ilgili birçok katına gönderildiği için bu katlardaki basınç
değerlerinin belirlenmiş limitler arasında olması gerekmektedir. Bunun için de her bir
kattaki her gaz hattındaki basıncın sürekli olarak gözlenmesi ve basınçların belirlenmiş
limitlerin dışına çıkması durumunda ilgili personelin bir alarm ile uyarılması hastalar
için hayati önem taşımaktadır. Bu çalışmada bu işlevi yerine getirecek bir gaz basınç
görüntüleme ve alarm sistemi yapılmıştır. Bu sistem sayesinde istenilen kat veya katlara
giden gazların basınçları sürekli olarak izlenilebilmekte, bilgisayarda saklanabilmekte,
basınç değerleri limitlerin dışında çıktığında sesli ve görsel alarm üretilebilmekte ve
geriye dönük olarak gaz basınçları sorgulanabilmektedir. Ayrıca basınç sensörlerinin
arızalı olması durumundan da kullanıcı haberdar edilmektedir. Gaz basınçlarının hangi
değerlerin dışına çıktığında alarm üretileceği ise kullanıcı tarafından
belirlenebilmektedir.
İkinci bölümde hastanelerde kullanılan başlıca tıbbi gazlar, özellikleri ve kullanım
alanları anlatılmıştır. Mikroişlemci ve mikrodenetleyicilerin özellikleri anlatılmıştır.
Üçüncü bölümde ise yapılan bu sistemin ana bölümleri ve bunların detayları
anlatılmıştır.
Dördüncü bölümde de bu çalışmanın genel değerlendirmesi ve sonuçlar anlatılmıştır.
2
2. KURAMSAL TEMELLER
2.1 Hastanelerde Kullanılan Başlıca Tıbbi Gazlar
Bu çalışma kapsamında tıbbi gazların basınçlarının görüntülenmesi, kaydedilmesi ve
olağan dışı durumlarda alarm üretilmesini sağlayan bir sistem gerçeklendiği için bu
bölümde hastanelerde ve diğer sağlık kuruluşlarında kullanılan başlıca tıbbi gazların
genel özellikleri üzerinde durulmuştur.
2.1.1 Medikal oksijen
Oksijen ve aerobik metabolizma insan yaşamının temel kaynağıdır. Ana rahmindeki
fetüsün büyümesinden, hayatının sonuna kadar vücuttaki bütün hücreler, uygun oksijen
sağlanmasına ve bunu sağlayacak taşıma aracı kana ihtiyaç duyarlar. Dünyayı
çevreleyen atmosferdeki oksijen hacmi %21’dir. Tıp dünyasında; ciğerlerden kana
oksijenin uygun aktarılabilmesi için sadece uygun oksijen hacim oranı değil, uygun
oksijen kısmi basıncına da ihtiyaç duyulduğu uzun zamandır bilinen bir gerçektir.
Medikal oksijen, bu şekilde uygun kısmi basınç ve uygun hacimsel oranda verilerek
akciğer enfeksiyonları tedavisinde kullanılmaktadır. Ayrıca medikal oksijen, genel
anestezi esnasındaki taze gaz akışının temel parçasıdır, medikal azot protoksit veya hava
ile ½ lt/dak oranında karıştırılır. Tüm dünyada operasyonlarda kullanılır
(http://www.linde-gastherapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/
nav_healthcare_profes_gases_in_medicine, 2008).
Medikal oksijen ağır karbonmonoksit zehirlenmelerinde standart tedavi malzemesidir.
Günümüzde normal basınç altında olan yüksek akışlı oksijen terapisi veya ciddi
durumlarda yüksek basınçlı oksijen terapisi, karbonmonoksit zehirlenmelerinde altın
standartta tedavi yöntemidir (http://www.linde-gastherapeutics.com/international/web/
lg/lgt/likelglgt.nsf/docbyalias/ nav_healthcare_profes_gases_in_medicine, 2008).
3
Medikal oksijen, kullanılacağı birimlerdeki prizlere kadar uygun şekilde iletilir. Bu
prizlerdeki basıncın, hastalar için hayati önemi vardır ve normal şartlarda basınç 3 bar
ile 5 bar arasında olmalıdır. Basınç olması gereken değerin altına düştüğünde veya
üzerine çıktığında ilgili personelin bir alarm ile uyarılması gerekmektedir.
Bu tez çalışmasında yapılan sistem sayesinde medikal oksijen hattına takılan sensör ile
oksijenin basıncı izlenmekte, kaydedilebilmekte ve limitlerin dışına çıktığında sistemin
bağlı olduğu bilgisayardan ilgili personel uyarılmaktadır. Basınç limitleri ise kullanıcı
tarafından belirlenebilmektedir.
Medikal oksijen, hastanelerde hasta odaları ve ameliyathanelere merkezi bir santralden
dağıtılır. Örnek bir oksijen santraline ait fotoğraf Şekil 2.1’de görülmektedir. Bu
santraller şu kısımlardan oluşur (http://www.megasan.com.tr/tr/home.htm, 2008);
a) yüksek basınç düşürücü,
b) ikincil basınç düşürücü,
c) kolektörler,
d) bağlantı boruları
Bu kısımlara ait örnek fotoğraflar Şekil 2.2 – 2.5’te görülmektedir
(http://www.megasan.com.tr/tr/home.htm, 2008).
Kolektörler gaz tüplerini gaz santrallerine bağlamak için kullanılır. Her kolektör, bağlı
olduğu gaz santralinin rengine boyalıdır.
Ayrıca burada fotoğraflarda görülen örnek santral, bir firmaya ait olup firmadan firmaya
santral bileşenleri farklılık göstermektedir. Burada temsili olarak piyasada bulunan
santral çeşitlerinden bir tanesine ait fotoğraflar konulmuştur.
4
Şekil 2.1 Örnek bir oksijen santrali
Şekil 2.2 Örnek bir yüksek basınç düşürücü
5
Şekil 2.3 Örnek bir ikincil basınç düşürücü
Şekil 2.4 Örnek bir kollektör
6
Şekil 2.5 Örnek bir bağlantı borusu
Oksijen elde etmek için kullanılan yöntemlerden birisi elektroliz yöntemidir. Suyun
doğru akım kullanılarak hidrojen ve oksijenlerine ayrılması işlemine elektroliz
denmektedir. Oksijen üretimi için en basit yöntem olarak bilinmektedir. İlke olarak, bir
elektroliz hücresi içinde, genelde düzlem bir metal veya karbon plakalar olan, iki
elektrot ve bunların içine daldırıldığı, elektrolit olarak adlandırılan iletken bir sıvı
bulunmaktadır. Doğru akım kaynağı, bu elektrotlara bağlandığında akım iletken sıvı
içinde, pozitif elektrottan negatif elektroda doğru akacaktır. Bunun sonucu olarak da,
elektrolit içindeki su, katottan çıkan hidrojen ve anottan çıkan oksijene ayrışacaktır.
Burada yalnız suyun ayrışmasına karşılık, su iyi bir iletken olmadığı için elektrolitin
içine iletkenliği artırıcı olarak genelde potasyum hidroksit gibi bir madde eklenir
(http://www.webhatti.com/kimya/49629-suyun-elektrolizi-ile-ayrismasi.html, 2008).
Suyun elektrolizi ile gerçekleşecek olan üretim, gerekli talebi ivedi bir şekilde
karşılayamayacağından ve işletme zorlukları bakımından fazla kullanılmayan bir
yöntemdir (http://www.tesamedikal.com/, 2008).
Amerikan İlaç Dairesi Başkanlığı’nın (FDA) yayınına (Fresh Air 2000) göre dolum
tüpleri ve tankları ayrı incelenmiştir, hava ayrıştırma sistemleri ayrı başlıkta
incelenmiştir (http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm, 2008);
7
Tüp tipleri sistemleri :
• Yüksek basınçlı tüpler
• Cryogenic tüpler
Tüp dolum yöntemleri :
• Yüksek basınçlı oksijen gazı dolumu
• Likit oksijenden – likit oksijen dolumu
• Likit oksijenden – gaz oksijen dolumu
Bunların dışında “Hava Ayrıştırma Sistemleri” medikal oksijen tedarik yöntemi olarak
özellikle belirtilmiştir (http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm,
2008).
Oksijen, tedarik yöntemine bağlı olarak değişik saflıkta olabilir. Özellikle tüp ve likit
olarak tedarikte, gaz oksijeni veya likit oksijeni taşıyan tankın bir önceki işlemde ortam
havasına maruz kalma riski yüzünden bu tip tedarik araçlarında yüksek saflıkta oksijene
ihtiyaç vardır. Çünkü bir önceki tedarikte tankın, ortam havasına maruz kalması gazın
saflığını düşürecektir. Bu sebeple taşımalı uygulamalarda yüksek saflık
öngörülmektedir. Oksijen konsantrasyonu; hava sıvılaştırma yönteminde minimum %
99, hava ayrıştırma yönteminde minimum % 90, maksimum % 96’dır
(http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm, 2008).
Hava bünyesinde % 21 oksijen, %78 azot, % 0.9 argon ve % 0.1 oranında diğer gazlar
bulunmaktadır. Gaz saflaştırma sistemleri, yüksek saflıkta istenilen gazı diğerlerinden
ayrıştırmaktadır. Hava -196 °C’nin altına soğutulacak olursa sıvılaşır. Daha sonra sıvı
hava buharlaşmaya bırakılacak olursa -196 °C’de azot uzaklaşır, geride oksijen kalır.
Oksijen içindeki safsızlıklar aşamalı buharlaştırma ile uzaklaştırılır. Bu şekilde hava
sıvılaştırma ile oksijen elde edilmiş olur
(http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm,2008,
http://makine.balikesir.edu.tr/ay/dersnotu/ImalatYontemleriI/ImalatYon5.pdf, 2008).
8
Hava ayrıştırma sistemine göre çalışan oksijen jeneratörü, kompresör tarafından
basınçlandırılan havadan % 93.3 saflıkta oksijen elde eder. Ekonomik, sürekli, sağlıklı
ve zahmetsiz oksijen sağlar. Kullanılan yöntem olan PSA (Basınç Atlamalı Yüzeyde
Filtreleme), molekül çapında fiziksel filtrasyon olup, herhangi bir kimyasal işlem
yoktur. Moleküler filtre havadaki azot gazını tutarak oksijen gazını saflaştırır. Bu
yönteme göre işleyen bir medikal oksijen üretim tesisine ait akış şeması Şekil 2.6’da
görülmektedir (http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm, 2008).
Şekil 2.6 Medikal oksijen üretim tesisi akış şeması
Oksijen üretim tesislerine ait örnek fotoğraflar ise Şekil 2.7 - 2.8’de görülmektedir
(http://www.tesamedikal.com/2008/, 2008).
Bu tez çalışmasında gerçeklenen sistem ile oksijen basıncının ölçülmesinde oksijenin
elde ediliş yönteminin bir önemi yoktur. Hangi yöntemle elde edilirse edilsin sağlıklı bir
şekilde basıncı ölçülebilmekte ve izlenilebilmektedir. Bu sayede sistemin kurulacağı
ünitede bulunan medikal oksijenin temin edildiği firma değişmesi halinde, yahut söz
konusu tesiste oksijen jeneratörü kurularak oksijenin tesiste üretilmeye başlanması
durumunda halihazırda kurulmuş olan gaz basınç görüntüleme ve kayıt sisteminde bir
değişiklik veya eklenti yapılmasına gerek olmadan yeni sistemin de basıncı
izlenilebilecektir.
9
Şekil 2.7 Oksijen üretim sistemi
Şekil 2.8 Oksijen üretim tankları
10
2.1.2 Medikal karbondioksit
Minimal invazif cerrahide (laparoskopi, endoskopi, artroskopi) medikal karbondioksit,
ameliyat bölgesinin daha iyi görülebilmesi amacıyla vücut boşluklarının genişletilmesi
ve düz duruma getirilmesi için gaz üflemede kullanılmaktadır (Moritary 1954).
Ayrıca medikal karbondioksit, -76 ºC’a varan sıcaklık sağladığı sıvı fazda kiryoterapi
veya deri yüzeyine dışarıdan yapılan uygulamalarda lokal analjezi için kullanılır
(Moritary 1954).
Medikal karbondioksitin de hastanelerde hasta odaları ve ameliyathanelere taşınması
için oksijen santrallerine çok benzer dağıtım sistemleri kullanılmaktadır.
Medikal karbondioksit hasta odalarındaki prizlerine 3 bar ile 5 bar arasında olacak
şekilde iletilir. Bu değerlerin dışında bir basınç değeri hastaların sağlığı açısından önem
arz ettiğinden basıncın limitlerin çıkması durumunda görevli personelin uyarılması
gerekmektedir. Bu tez çalışmasında yapılan sistem ile medikal karbondioksit iletim
hattına bağlanan sensör ile basınç sürekli izlenebilmekte, kaydedilebilmekte ve limit
değerlerinin dışına çıktığında görevli personel, üretilen alarm ile uyarılmaktadır. Basınç
limit değerleri ise kullanıcı tarafından belirlenebilmektedir.
2.1.3 Medikal azot protoksit
Diğer ismi ile nitröz oksit (N2O), solunum yoluyla uygulanan bilinçli sedasyon
ajanlarının en çok kullanılanı olup renksiz, hoş kokulu, yanma ve alev alma özelliği
olmayan inorganik bir ilaçtır. Bu ilacın kullanımına ilk olarak İskandinav ülkelerinde
(özellikle Danimarka’da) 1930’lu yıllarda başlanmıştır. Kan akımına etkisi tamamen
fiziksel olduğu için vücuttaki dokularla kimyasal bir bağlantı yapmadığı bilinmektedir.
Oksijenle birlikte kullanıldığında en önemli etkisinin, santral geri dönüşümlü sinir
sistemi baskılaması olduğu ileri sürülmektedir. Uygulandığında gazın büyük bir bölümü
hemen kana karışarak akciğerlere gönderilir. Plazmada çözünmesi düşük seviyede
11
olduğu için etki dozuna çabuk ulaşmakta ve kesildiği anda kandaki dozu hızla
azalmaktadır. Yan etkileri azdır ve yeterli oksijen ile birlikte kullanıldığında toksik
etkisi olmayan bir gazdır. Yüksek konsantrasyonlarda nitröz oksit kullanımının mide
bulantısına neden olduğu ve doğru ayarlanamayan doz verildiğinde ise hastada endişe
ve heyecanın artmasına neden olabilmektedir (Sullivan and Benger 2003,
http://sozluk.sourtimes.org/show .asp?t=azot+protoksit, 2008).
Medikal azot protoksit, çok yaygın, doza bağımlı, analjezik (ağrı kesici) ve hafif
anestezik etkileri olan bir gazdır. Medikal azot protoksit, tek başına kullanılarak genel
anestezi yapılabilecek kadar kuvvetli bir madde değildir. Solunan anestezikler veya
damardan verilen anestezikler ile karıştırılınca etkileşimi daha fazla veya daha az
doğrudan etkili olabilmektedir. Ayrıca klinik olarak kullanılan bütün hipotonik,
analjezik ve anestezikler ile birlikte kullanılabilir (Ruben 1972, http://www.linde-
gastherapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_pr
ofes_gases_in_medicine, 2008).
Medikal azot protoksit, anestezik/analjezik özelliklerinden ayrı olarak solunum ve
dolaşım gibi otonom fonksiyonlar üzerinde çok düşük etkilere sahiptir. Medikal azot
protoksit ve yaygın solunan herhangi bir anestezikle karıştırılarak yapılan
anestezilerdeki anlık nefes alma-verme, sadece herhangi bir etkili solunan anestezik ile
yapılan anestezilerdeki anlık nefes alma-verme ile kıyaslandığında daha iyi
sürdürülebildiği görülmektedir. Ayrıca kardiyovasküler değişkenler daha az
etkilenmektedir (http://www.linde-gastherapeutics.com/international/web/lg/lgt/likelglgt
.nsf/docbyalias/ nav_healthcare_profes_gases_in_medicine, 2008).
Medikal azot protoksitin hızlı “wash-in” (kavrama) ve “wash-out” (hızlı eleminasyon)
özellikleri de iyi bilinmektedir. Birçok çalışmada, bu hızlı eleminasyon ve iyi
sabitlenmiş anlık nefes alma-verme etkileri nedeniyle modern halojenlenmiş solunan
anestezikler ile medikal azot protoksitin karışımının kullanılmasıyla yapılan
anestezilerdeki anesteziden uyanma süresinin sadece solunan anestezik kullanılarak
yapılan anestezilere göre daha kısa olduğu gözlemlenmiştir (http://www.linde-gas
12
therapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_profes
_gases_in_medicine, 2008).
Medikal azot protoksit, yaygın anestezik/analjeziklere göre daha ucuz ve daha boldur.
Klinik özellikleri dikkate alındığında; hızlı başlama etkisi, minimum kardiyo-respiratori
etkileri ve hızlı denge etkisi, düşük maliyeti ve uyanmadaki hızlandırıcı etkisiyle
medikal azot protoksit, modern anestezide dikkat çeken etkin maliyetli (cost-effective)
bir seçenektir. Cerrahi larinjeal anestezik maske prosedürleri esnasında gelişen anlık
nefes alma-verme; uyanmayı kısaltmakta ve erken iyileşme sağlayarak operasyonda
hastaların sirkülasyonunu kolaylaştırmaktadır (http://www.linde-gastherapeutics
.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_profes_gases_in_
medicine, 2008).
Medikal azot protoksitin klinik kullanımdaki uzun ve hayli yaygın kayıt geçmişi
düşünmeye değerdir. Medikal azot protoksit kullanıldığında yan etki görülebilecek
hastalar için kontraindiksiyonlar iyi bilinmekte ve kolayca belirlenebilmektedir.
Günümüzde bu kadar çok hastada kullanılan böyle yaygın ve güvenli başka bir ilaç
hemen hemen yok gibidir (http://www.linde-gastherapeutics.com/internation
al/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_profes_gases_in_medicine, 2008).
Medikal azot protoksitin basıncı, kullanılacağı birimdeki prizde normal şartlarda 3 bar
ile 5 bar arasında olmalıdır. Basınç olması gereken değerin altına düştüğünde veya
üzerine çıktığında ilgili personelin bir alarm ile uyarılması gerekmektedir. Bu tez
çalışmasında yapılan sistem sayesinde medikal azot protoksit hattına takılan sensör ile
basıncı izlenebilmekte, kaydedilebilmekte ve basınç limitlerin dışına çıktığında sistemin
bağlı olduğu bilgisayardan ilgili personel uyarılmaktadır. Basınç limit değerleri ise
kullanıcı tarafından belirlenebilmektedir.
Medikal azot protoksitin, hastanelerde hasta odaları ve ameliyathanelere merkezi bir
santralden dağıtılır. Bu santraller şu kısımlardan oluşur
(http://www.megasan.com.tr/tr/home.htm, 2008);
a) yüksek basınç düşürücü,
13
b) ikincil basınç düşürücü,
c) kolektörler,
d) bağlantı boruları
Bu kısımlar, oksijen santrallerinde kullanılan elemanlara çok benzemektedir. Bir oksijen
santrali ve bileşenlerinin fotoğrafları da Şekil 2.1 – 2.5’te görülmektedir.
2.1.4 Medikal hava (basınçlı hava)
Genellikle ventilasyon ve inhalasyon terapisinde kullanılır. Ventilasyon, akciğerlerden
karbondioksitli havanın çıkarılıp oksijenden zengin hava verilmesi işlemidir. İnhalasyon
ise gaz, buhar, hava ya da sis şekline dönüştürülmüş sıvıların tedavi amacıyla solunması
ya da absorbe edilmesine verilen isimdir. Aynı zamanda inhalasyonal anestezide
narkotik maddelerin taşıyıcı gazı olarak kullanılmaktadır (http://www.linde-
gastherapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_pr
ofes_gases_in_medicine, 2008).
Pulmoner nebülizer makineleri (nebülizer olarak da bilinir, ağız ve burundan püskürtme
şeklinde ilaç uygulanmasında kullanılmaktadır) ölçülmüş dozda inhaler ve spacer
kullanmakta sorunları olan çok küçük çocuklara rutin tıbbi inhaled bronkodilatör
(solunum dalı genişleticisi, bronşları genişletebilen bir madde ya da ilaç) tedavisi
uygulamaktadır. Medikal hava, oda havasını nebülizere doğru sirküle etmekte kullanılır.
Nebülizer, sıvı ilacı, direk akciğerlere solunabilen buğuya (mist) dönüştürmektedir
(http://www.linde-gastherapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/
nav_healthcare_profes_gases_in_medicine, 2008).
Medikal hava hastanelerde hasta odaları ve ameliyathanelere merkezi bir santralden
dağıtılmaktadır.
Medikal hava basıncı, kullanılacağı birimdeki prizde normal şartlarda 3 bar ile 5 bar
arasında olmalıdır. Basınç olması gereken değerin altına düştüğünde veya üzerine
14
çıktığında ilgili personelin bir alarm ile uyarılması gerekmektedir. Bu tez çalışmasında
yapılan sistem sayesinde medikal hava hattına takılan sensör ile basıncı izlenebilmekte,
kaydedilebilmekte ve basınç limitlerin dışına çıktığında sistemin bağlı olduğu
bilgisayardan ilgili personel uyarılmaktadır. Basınç limitleri ise kullanıcı tarafından
belirlenebilmektedir.
Örnek bir medikal hava santrali fotoğrafı Şekil 2.9’da görülmektedir. Medikal hava
santrali kendi üzerinde alarm paneline sahip olup anormal durumlarda santral üzerindeki
bu panelde alarm üretilmektedir. Alarm paneline ait örnek bir fotoğraf Şekil 2.10’da
görülmektedir.
Şekil 2.9 Örnek bir medikal hava santrali
15
Şekil 2.10 Örnek bir medikal hava santrali alarm paneli
2.1.5 Medikal vakum
Medikal vakum, havanın emilerek ortamda hijyen sağlanması amacıyla
ameliyathanelerde, yoğun bakım odalarında, acil servislerde kullanılır. Havanın
ortamdan emilmesi için vakum hattı boyunca negatif bir basınç olması gerekmektedir.
Bu basınç normal şartlarda -500 mmHg ile -620 mmHg arasında olması gerekmektedir.
Bu tez çalışmasında yapılan sistem ile vakum hattına bağlanan sensör aracılığıyla
vakum basınç değeri sürekli izlenebilmekte ve kaydedilebilmektedir. Şayet basınç
değeri normal sınırları dışına çıkar ise ilgili personel sistem tarafından üretilen görsel ve
sesli alarm ile uyarılmaktadır. Basınç limit değerleri ise kullanıcı tarafından
belirlenebilmektedir.
Hastanelerde vakum, merkezi bir santralden sağlanmaktadır. Örnek bir vakum
santraline ait fotoğraf Şekil 2.11’de görülmektedir. Ayrıca vakumlama yapan vakum
pompasına ait örnek bir fotoğraf da şekil 2.12’de görülmektedir (http://www.linde-
16
gastherapeutics.com/international/web/lg/lgt/likelglgt.nsf/docbyalias/ nav_healthcare_pr
ofes_gases_in_medicine, 2008).
Şekil 2.11 Örnek bir medikal vakum santrali
17
Şekil 2.12 Örnek bir medikal vakum pompası
2.2 Mikroişlemciler ve Mikrodenetleyicilere Genel Bakış
Bu çalışmada mikrodenetleyici kontrollü bir devre ile basınç görüntüleme ve alarm
üretimi üzerine çalışıldığı için bu bölümde genel olarak mikroişlemciler,
mikrodenetleyiciler ve mikrodenetleyiciler için kod yazılmasında kullanılan ve bu
çalışmada da kullanılan programlama dili, Picbasic, genel hatlarıyla anlatılacaktır.
2.2.1 Mikroişlemciler
İşlemci; bir bilgisayarda ya da başka bir makinede, komutları yorumlayan ve yürüten
birimdir. Mikroişlemci ise; bütün öğeleri, genellikle tek bir entegre devre halinde
birleştirilmiş, minyatür işlemcidir. Oldukça genel bir komut takımıyla donatılmış,
binlerce sözcüklük bir çalışma belleği taşıyan ve 4, 8 ya da 16 hatta 32 bit üzerinden
hesap yapan bileşenlerdir (http://nedir.net/mikroislemci.html, 2008).
Bir mikroişlemci işlevini yerine getirebilmesi için aşağıdaki yardımcı elemanlara ihtiyaç
duyar. Bunlar (http://nedir.net/mikroislemci.html, 2008);
1. Giriş (input) ünitesi,
18
2. Çıkış (Output) ünitesi,
3. Bellek (Memory) ünitesi.
Bu üniteler işlemcinin dışında, bilgisayarın ana kartı üzerinde bir yerde farklı
entegrelerden veya elektronik elemanlardan oluşur. Aralarındaki iletişimi ise veri yolu
(Data bus), adres yolu (Address bus) denilen iletim hatları yapar
(http://www.donanimtr.com/mikroislemci-nedir-t704.html?s=ba73d007f8746c2c752e2b
4a75199c12&,2008).
Bir mikroişlemci sisteminin temel bileşenlerinin blok diyagramı Şekil 2.13’de
görülmektedir (http://www.donanimtr.com/mikroislemci-nedir-t704.html?s=ba73d007
f8746c2c752e2b4a75199c12&, 2008).
Şekil 2.13 Bir mikroişlemci sisteminin temel bileşenlerinin blok diyagramı
2.2.2 Mikrodenetleyiciler
Bir bilgisayar içerisinde bulunması gereken temel bileşenlerden RAM, I/O ünitesinin
tek bir entegre içerisinde üretilmiş biçimine mikrodenetleyici (Microcontroller) denir.
Bilgisayar teknolojisi gerektiren uygulamalarda kullanılmak üzere tasarlanmış olan
mikrodenetleyiciler, mikroişlemcilere göre çok daha basit ve ucuzdur. Günümüz
mikrodenetleyicileri otomobillerde, kameralarda, cep telefonlarında, fax-modem
cihazlarında, fotokopi, radyo, TV, bazı oyuncaklar gibi sayılamayacak kadar pek çok
19
alanda kullanılmaktadır (http://www.donanimtr.com/mikroislemci-nedir-t704.html?s=
ba73d007 f8746c2c752e2b4a75199c12&, 2008).
Günümüz mikrodenetleyicileri birçok entegre üreticisi tarafından üretilmektedir. Her
firma ürettiği entegreye farklı isimler vermektedir. Örneğin Microchip firması
ürettiklerine PIC adını verirken, Intel'in ürettiği ve 1980'lerin başında piyasaya sürdüğü
8051, bazen MCS-51 olarak da adlandırılır. PIC’in kelime anlamı “peripheral interface
controller” (çevresel arabirim denetleyicisi) dir. Bir mikrodenetleyici sisteminin temel
bileşenlerinin blok diyagramı Şekil 2.14’te görülmektedir
(http://www.donanimtr.com/mikroislemci-nedir-t704.html?s=ba73d007 f8746c2c752e
2b4a75199c12&, 2008).
Şekil 2.14 Bir mikrodenetleyici sisteminin temel bileşenlerinin blok diyagramı
Mikroişlemciler hafıza veya giriş çıkış entegresi gibi çevre elemanlar ile birlikte
aritmetik işlemler yapabilen, karar verebilen entegrelerdir. Mikrodenetleyici ise
mikroişlemcinin yanı sıra kendi program hafızası ve giriş çıkış özelliklerini içinde
barındıran entegrelerdir. Bu özellikleri sayesinde yüklü bir programı uygulamaya
dönüştürerek bir kontrol sistemi olarak kullanılabilir.
Mikroişlemci ile kontrol edilecek bir sistemi kurmak için en azından şu üniteler
bulunmalıdır; işlemci, bellek, giriş/çıkış üniteleri ve bu ünitelerin arasındaki veri alış
verişini kurmak için veri yolu (data bus) gerekmektedir. Elbette bu üniteleri
20
yerleştirmek için baskılı devreyi de unutmamak gerekmektedir. Mikrodenetleyici ile
kontrol edilecek sistemde ise yukarıda saydığımız ünitelerin yerine geçecek tek bir
entegre (Mikrodenetleyici) ve bir de devre kartı kullanmak yetecektir. Tek entegre
kullanarak elektronik çözümler üretmenin maliyetinin daha düşük olacağı kesindir.
Ayrıca da kullanım ve programlama kolaylığı da ikinci bir avantajıdır. İşte yukarda
saydığımız nedenlerden dolayı son zamanlarda bilgisayar kontrolü gerektiren elektronik
uygulamalarda mikrodenetleyici kullanmaya eğilimin artmasının haklılığını ortaya
koyuyor (http://www.donanimtr.com/mikroislemci-nedir-t704.html?s=ba73d007 f8746
c2c752e2b4a75199c12&, 2008).
Bir mikrodenetleyici genel olarak aşağıdaki birimlerden oluşur (Turgutlu 2002):
• CPU (Merkezi işlem ünitesi - central processing unit)
• RAM (Rastgele erişimli bellek-Random Access Memory)
• EPROM/PROM/ROM (Silinir, yazılır sadece okunur bellek-Erasable
Programmable Read Only Memory)
• I/O (Girdi/çıktı - input/output) - seri ve paralel
• Zamanlayıcılar (Timers)
• Kesmeler (Interrupt controller)
Mikrodenetleyicilerde işlemler ve komutlar bit bit kontrol edilebildiğinden giriş ve çıkış
birimleri ve kesmeler çok etkin bir şekilde kullanılabilmektedir.
Şu an kullandığımız masaüstü veya dizüstü bilgisayarlar genel amaçlı bilgisayarlardır
ve binlerce programı çalıştırabilirler. Mikrodenetleyiciler ise özel amaçlı
bilgisayarlardır ve programlandıkları şeyi en iyi şekilde yaparlar. Bunun dışında;
• Mikrodenetleyiciler sadece bir iş için programlanmışlardır ve bu program
içlerindeki sadece okunur bellekte (ROM) değişmemek üzere saklı bulunur.
• Mikrodenetleyiciler düşük güçte çalışan çiplerdir. Bir bilgisayar 50W civarı güç
harcarken mikrodenetleyiciler sadece 50 mWatt civarında güç harcarlar.
• Mikrodenetleyiciler genelde küçük ve düşük fiyatlı çiplerdir. Bir çok parçadan
oluşan kompleks bir devreyi kolayca küçük boyutlara ve maliyete indirmenizi
sağlar (Turgutlu 2002).
21
Ayrıca mikrodenetleyiciler belleklerine göre de çeşit gösterirler;
a) EEPROM Bellekli Mikrodenetleyiciler: Elektriksel olarak silinebilen ve
yazılabilen belleklerdir. Çoğu mikrodenetleyicilerde sınırlı sayıda bulunan
EEPROM lar, bir defadan fazla yazılıp silinebildikleri için oldukça kullanışlıdır.
b) Flaş (EPROM) Bellekli Mikrodenetleyiciler: Flaş bellekler EEPROM lardan
daha hızlı ve daha çok yazma silme işlemine izin vermeleri yönünden
üstündürler. Flash belleklerde bilgilerin korunması söz konusu değildir.
c) OTP Bellekli Mikrodenetleyiciler: Bir kez programlanabilen
mikrodenetleyicilerdir. OTP bir kez programlanabilen bir ROM'dur.
Programınızı bir EPROM programlayıcı ile bir kez yazdıktan sonra silemez veya
değiştiremezsiniz. Bu yöntem programınız artık tamamen hazır olduğunda ve
bütün hatalarından arındırıldıktan sonra kullanılır (Turgutlu 2002).
PIC serisi tüm denetleyiciler herhangi bir ek bellek veya giriş/çıkış elemanı
gerektirmeden sadece 2 adet kondansatör, 1 adet direnç ve bir kristal ile
çalıştırılabilmektedir. Tek bacaktan 40 mA akım çekilebilme ve entegre toplamı olarak
150 mA akım akıtma kapasitesine sahiptir. Entegrenin 4 Mhz osilator frekansında
çektiği akım; çalışırken 2 mA, stand-by durumunda ise 20uA kadardır (Matic et al.
2000).
PIC 16CXX ailesinin amatör elektronikçiler arasında en çok tanınan ve dünyada
üzerinde en çok proje üretilmiş elemanı ise PIC16C84 veya PIC16F84’tür. PIC 16F84’
ün bu kadar popüler olması onun çok iyi bir denetleyici olmasından ziyade program
belleğinin EEPROM (Elektrikle silinip yazılabilen bellek) olmasından
kaynaklanmaktadır. Seri olarak dört adet kabloyla programlanması da diğer önemli
avantajıdır. Bugüne kadar amatörce bir işlemciyle uğraşmış herkesin en büyük sıkıntısı
EPROM veya EPROM tabanlı denetleyicileri programladıktan sonra ultraviole ışık
kaynağı ile silip tekrar programlamaktır. Bu çok zahmetli ve bir amatör için ekipman
gerektiren yöntem olmuştur (http://www.elektronika.gen.tr/datasheet/16f877.pdf,
2008).
22
Tasarlanan PIC kontrollü gaz basınç kontrol sisteminde PIC 16F877 kullanılmıştır. PIC
16F877 ise PIC 16F84’ün tüm özelliklerini taşımaktadır. Ayrıca PIC 16F877’de
PIC16F84’e ek olarak bazı önemli özellikleri yer almaktadır (analog/sayısal çevirici
gibi).
2.2.3 PIC’in özellikleri
PIC tipi entegrelerin öne çıkan bazı özellikleri şöyle sıralanabilir (http://www.elektro
nika.gen.tr/datasheet/16f877.pdf, 2008):
� Güvenirlik: PIC komutları bellekte çok az yer kaplarlar. Dolayısıyla bu komutlar
12 veya 14 bitlik bir program bellek sözcüğüne sığarlar. Harward mimarisi
kullanılmayan mikrodenetleyicilerde yazılım programının veri kısmına atlama
yaparak bu verilerin komut gibi çalışmasını sağlamaktadır. Bu ise büyük
hatalara yol açmaktadır. Ancak RISC mimarisi kullanılan PIC’ lerde bu durum
engellenmiştir.
� Hız: PIC oldukça hızlı bir mikrodenetleyicidir. Her bir komut satırı 1µsn’lik bir
zaman diliminde işlenir. Örneğin 5 milyon komutluk bir programın 20Mhz’ lik
bir kristalle işletilmesi yalnız 1sn sürer. Bu süre kabaca 386 diye tanımladığımız
sayısal bilgisayarın hızının yaklaşık 2 katıdır. Ayrıca PIC’lerin RISC mimarisine
sahip olmasının hıza etkisi oldukça büyüktür.
� Komut Takımı: PIC’te bir işlem gerçekleştirmek için kullanılacak komut sayısı
oldukça azdır. Örneğin PIC16F8XX ailesinde 33 komutu kullanarak sınırsız
sayıda işlem yapabilmek mümkündür.
� Statik işlem: PIC mikrodenetleyici tamamıyla statik bir işlemcidir. Bu da demek
oluyor ki işlemciye pals sağlayan osilasyon kaynağı durdurulsa bile işlenen
veriler muhafaza edilmektedir.
23
� Sürme özelliği: PIC’ler yüksek bir sürme kapasitesine sahiptir. Çıkış olarak
tanımlanan pinlerin yalnız birinin aktif olması halinde 40mA çekilebilmektedir.
Entegre elemanın tamamı düşünüldüğünde ise 150 mA’e kadar akım
çekilebilmektedir.
� Güvenlik: PIC üretim özelliği itibariyle bir protect yani koruma bitine sahiptir.
Bu bitin programlanması yolu ile PIC içerisine yazılan programın başkaları
tarafından okunması ve kopyalanmasına engel olunmuş olunur.
� Flash olma özelliği: Bu özellik PIC’in yeniden programlanabilir olması
durumunu ifade etmektedir. Yani PIC üzerine yazılan program geliştirme amacı
ile silinebilir ve yeni bir program yüklenebilir.
2.2.4 Bir PIC’in işlem yapabilmesi için gerekli bileşenler
Bir PIC entegresinin işlem yapabilmesi için gerekli bileşenler şöyle sıralanabilir
(Turgutlu 2002);
a) Giriş-Çıkış (I/O): Mikrodenetleyicinin dış dünya ile ilişkisini sağlayan, girdi ve
çıktı şeklinde ayarlanabilen bir bağlantı pinidir.
b) Yazılım: Mikrodenetleyicinin çalışmasını ve işletilmesini sağlayan bilgidir.
Başarılı bir uygulama için yazılım hatasız olmalıdır. Yazılım C, Pascal veya
Assembler gibi çeşitli dillerde veya ikilik(binary) olarak yazılabilir.
c) Donanım: Mikrodenetleyiciyi, bellek, arabirim bileşenleri, güç kaynakları, sinyal
düzenleyici devreler ve bunları çalıştırmak ve arabirim görevini üstlenmek için
bu cihazlara bağlanan tüm bileşenlerdir.
d) Programlayıcı: Yazılan kaynak kodun nesne koda çevrildikten sonra bu nesne
kod dosyasının mikrodenetleyiciye aktarılmasını sağlayan yani
24
mikrodenetleyicinin programlamasını sağlayan bir birimdir. Çoğunlukla seri
port’a bağlanan bu birimler çok çeşitli biçim, ebat ve fiyatlara sahiptir.
e) Kaynak Dosyası: Hem asembler’in hem de tasarımcının anlayabileceği dilde
yazılmış bir programdır. Kaynak dosya mikrodenetleyicinin anlayabilmesi için
önceden assemble edilmiş olmalıdır.
f) Assembler: Kaynak dosyayı bir nesne dosyaya dönüştüren yazılım paketidir.
Hata araştırma bu paketin yerleşik bir özelliğidir. Bu özellik assemble edilme
sürecinde hatalar çıktıkça programı hatalardan arındırırken kullanılır.
g) Nesne dosyası (object file) : Assembler tarafından üretilen bu dosya; PIC
içerisine yüklenecek ve PIC’in çalışmasını sağlayacak dosyadır. Dosya uzantısı
assemble edicinin emirlerine bağlı olarak, .OBJ veya .HEX uzantılı olur.
2.2.5 PIC 16F877
Şekil 2.15 PIC 16F877’nin giriş çıkış portları
25
PIC16F877 yüksek performanslı, CMOS, full-statik, 8 bit mikrodenetleyicidir. Tüm PIC
16/17 mikrodenetleyicileri gibi PIC 16F877 de RISC mimarisini kullanmaktadır.
PIC16F87X mikroları birçok esas özelliklere sahiptir. 14 seviyeli, derin küme ve çoklu
iç ve dış kesme kaynaklarına sahiptir. 2 aşamalı komut hattı tüm komutların tek bir
saykıl ile (çevrimle) işlenmesini sağlamaktadır. Yalnızca bazı özel komutlar 2 saykıl
çekerler. Bu komutlar dallanma komutlarıdır. Şekil 2.15’te bu entegrenin giriş-çıkış
portları görülmektedir (Yalçın 2003).
PIC mikrodenetleyicilerinin en büyük özelliği sleep modu özelliğidir. Bu mod sayesinde
işlem yapılmadığı durumlarda PIC uyuma moduna geçerek çok düşük akım çeker.
Kullanıcı bir kaç iç ve dış kesmelerle PIC’i uyuma modundan çıkarabilmektedir.
Yüksek güvenilirlikli Watchdog Timer kendi bünyesindeki çip üstü RC osilatörü ile
yazılımı kilitlemeye karşı korumaktadır. PIC16F877 EEPROM program belleği, aynı
aygıt paketinin orjinali ve üretimi için kullanılmasına olanak vermektedir. Yeniden
programlanabilirliği mikroyu uygulamanın sonundan kaldırmadan kodu
güncelleştirmeye izin vermektedir. Bu aygıtın kolayca erişilemediği, fakat prototipinin
kod güncelleştirmesi gerekli olduğu durumlarda, bir çok uygulamanın geliştirilmesinde
yararlıdır. Bunun yanı sıra bu kodun güncelleştirilmesi diğer ayrı uygulamalarda da
yararlıdır. EK 6’da PIC 16F877’de pin tanımlamaları görülmektedir. EK 7’de ise PIC
16F877’nin basitleştirilmiş iç yapısı mevcuttur (Yalçın 2003).
PIC 16F877’nin belirleyici özellikleri ise şöyle sıralanabilir (Yalçın 2003, Kaçmaz
2007);
-Timer 0: 8 bit prescaler(önbölücü)’e sahip 8 bit zamanlayıcı/sayıcı,
-Timer 1: Sleep modunda artış gösterebilen ve harici saat darbesiyle artırılabilen
Prescaler’ li 16 bit zamanlayıcı/sayıcı,
-Timer 2: 8bit peryot kaydedicili, prescaler ve postscalerli (son bölücü) 16bit
zamanlayıcı/sayıcı,
-İki adet tutma, karşılaştırma, PWM (Darbe genişlik modülasyonu) modülü,
-200ns çözünürlükte 16 bitlik karşılaştırma,
-10 bit çözünürlükte PWM,
-10 bit çok kanallı analog-dijital çevirici,
26
-Seri port modülü,
-9 bit adres saptamaya sahip USART (The Universal Synchronous Asynchronous
Receiver Transmitter ),
-8 bit genişliğinde paralel slave port
2.2.6 Bellek Organizasyonu
Her PIC mikrodenetleyicisinde 3 bellek bloğu bulunmaktadır. Bunlar program belleği,
veri belleği ve bunları ayıran veri hattıdır. Her bir bellek kendi taşıyıcısına sahiptir;
böylece her bir bloğa erişim aynı osilatör süreci boyunca meydana gelebilmektedir.
Bunun ötesinde, veri belleği genel amaçlı RAM ve özel fonksiyon kayıtları (SFR)
olmak üzere ikiye bölünür. SFR`ler her bir bireysel özelleşmiş modülü ele alan bölümde
açıklanan özel modülleri kontrol etmek için kullanılmaktadır. Veri belleği EEPROM
veri belleğini de içermektedir. Bu bellek, direkt veri belleğine planlanmamış, fakat
indirekt olarak planlanmıştır ve indirekt adres göstergeleri okumak/yazmak için
EEPROM belleğinin adresini belirlemektedir (Yalçın 2003).
2.2.7 Program Bellek Organizasyonu
PIC16F877 13 bit program sayacına ve 8Kx14 adresleme kapasitesine sahiptir.
PIC16F877 denetleyicisi 8Kx14 FLASH program belleğine sahiptir. Reset vektörü
0000h ve kesme vektörü 0004h adresindedir. Şekil 3,5.’te PIC16F877 program bellek
haritası görülmektedir (Yalçın 2003).
2.2.8 Veri Bellek Organizasyonu
Veri belleği genel amaçlı yazmaçlar ve özel işlev yazmaçları (SFR) olmak üzere ikiye
ayrılır. RP0 ve RP1 bitleri küme seçimi için ayrılmış bitlerdir. Her bir bank (küme) 7Fh’
ye kadar (128 bayt) uzanır. Bank seçimi için RP0 ve RP1’e hangi değerler atanacağı
Çizelge 2.1’de belirtilmiştir. Her bankın alt kısımları özel işlev yazmaçları için ayrılır.
Üstteki özel işlev yazmaçları ise statik RAM olarak kullanılan yazmaçlardır. Bütün
27
banklarda özel işlev yazmaçları vardır. Özel işlev yazmaçlarındaki yüksek kullanım bir
banktan kod indirgemesi ve hızlı erişim için başka bankta gösterilebilir (Altınbaşak
2000).
Çizelge 2.1 PIC 16F877’de RP0 ve RP1 ile bank seçimi
RP1 RP0
0 0 BANK0
0 1 BANK1
1 0 BANK2
1 1 BANK3
2.3 Pic Basic Programlama Dili
LCD, EEPROM, analog/dijital çevirme, seri haberleşme, shift register, çeşitli şekillerde
sinyal çıkışı almak ve birçok sık görülen uygulamanın PIC ile kolay yapılabilmesi için
bu işleri yapan Assembly komutları makrolar halinde toplanmış ve Pic Basic dili
oluşturulmuştur. Bu programlama dili, bu tür işleri sadece parametreleri olan birer
komuta indirgemiştir. Bunlara örnek olarak 24Cxx serisi EEPROM’larla bilgi
alışverişini sağlayan I2CREAD, I2CWRITE, LCD ekrana yazı yazan LCDOUT, koşul
kontrolünü sağlayan IF...THEN...ELSE...ENDIF ve WHILE...WEND, Pic’in içindeki
EEPROM’la bilgi alışverişini sağlayan READ, WRITE ve senkron ve asenkron seri
haberleşmeyi sağlayan SHIFTIN, SHIFTOUT, SERIN, SEROUT komutları
gösterilebilir. EK 5’te ise Pic Basic proglama dilinde komutlar görülmektedir
(Altınbaşak 2002).
28
3. MATERYAL VE YÖNTEM
Hastanelerde, ameliyathane ve hasta odalarına medikal oksijen, medikal karbondioksit,
medikal azot protoksit, basınçlı hava iletilmektedir. Ayrıca bu kısımlardaki havayı
vakumlamak için vakum hattı da bu kısımlara iletilir. Bu beş adet iletim hattı ilgili
hastanenin gerekli olan kısımlarındaki duvarlarda prize kadar iletilir ve buradan prize
takılan konnektörler ile kullanılır.
Bu gazların basınçları belirli sınır değerleri arasında olmak zorundadır. Gaz
basınçlarının kontrolü, hastalar için hayati önem taşımaktadır. Bölüm 2’de anlatıldığı
gibi bu gazlar merkezi gaz santrallerinden kullanılacakları birime gönderilmektedir. Bu
merkezi gaz santrallerinde santralin çıkışındaki gaz basıncı bir panelde gösterilmekte ve
normal değerlerin dışına çıktığında alarm vermektedir. Ayrıca, piyasadaki ticari
sistemler arasında hastanenin gaz iletilen katlarına kurulabilen alarm panoları da
mevcuttur. Bu panolar bu kattaki basınç değişimleri için alarm üretmektedir. Ancak her
bir katın basınç durumu ile ilgili bilgiler ilgili binanın merkezi bir yerinden toplu olarak
izlenememekte ve alarm alınmamaktadır. Herhangi bir katta alarm oluşur ise o katta
bulunan görevli personelin binanın teknik kısmına telefon ile bildirmesi suretiyle teknik
personel, alarmdan haberdar olabilmektedir. Ancak o katta bir nöbetçi bulunmuyor ise
teknik birimdeki personel bu kattaki alarmdan haberdar olamamaktadır.
Bu çalışmada gerçeklenen sistem ile bir hastane binasındaki bütün katlara iletilen gaz
hatlarına takılan sensörler vasıtası ile binanın istenilen herhangi bir biriminde bütün
hatların gaz basınçları anlık olarak görüntülenebilmekte, bu gaz basınçları sisteme bağlı
bilgisayara kayıt edilebilmekte ve geriye dönük olarak gaz basınçları
sorgulanabilmektedir. Ayrıca gaz basınçları kullanıcı tarafından belirlenebilen alt ve üst
limitler dışına çıktığında ilgili personel, sesli ve görsel alarmla uyarılmaktadır. Alarm
sesi ve görsel bildirimi farklı durumlar için de farklı şekilde olmaktadır. Bu sayede daha
etkin bir şekilde gaz hatları kontrol edilebilecek, bir nöbetçi personel dahi bütün
katlardaki gazların basınçlarını bulunduğu odadan gözleyebilecektir. Ayrıca basınç
sensörlerinin arızalı olması durumundan da kullanıcı haberdar edilmektedir.
29
Yapılan çalışmada dört adet hastane gazı (medikal oksijen, medikal karbondioksit,
medikal azot protoksit, basınçlı hava) ve vakum hattının basınçları izlenebilmekte ve
kaydedilebilmektedir. Bu sistem temel olarak bir “gaz basınç görüntüleme, kayıt ve
alarm sistemi”dir. Gerçeklenen sistem ile 4 katlı bir hastanede her kata bu gazların
iletildiği durumda, bütün katlardaki iletim hatlarının basınçlarının izlenebilmesi
mümkün olabilmektedir.
3.1 Gaz Basınç Görüntüleme ve Alarm Sistemi
Sistem genel olarak 3 kısımdan oluşmaktadır.
a) Sensörler
b) Kontrol devresi
c) Geliştirilen program
3.1.1 Sensörler
Bu çalışmada gaz basınçlarını ölçmek amacıyla Freescale firmasına ait MPX5999D ve
MPX5100D model basınç sensörleri kullanılmıştır.
MPX5999D modeli pozitif basınçların ölçülmesinde kullanılan bir sensördür ve 0 ila 10
bar basınç aralığında çalışmaktadır. 5 Vdc besleme ile çalışır ve uygulanan basınç ile
doğru orantılı olarak analog bir voltaj değerini çıkış ucundan üretir. Bu sensöre ait
karakteristik özellikler, giriş basıncına karşılık verdiği analog çıkış değerleri EK 3’te
verilen üretici bilgi sayfasında mevcuttur (http://www.freescale.com, 2008).
MPX5100D modeli ise negatif basınçların ölçülmesinde kullanılan bir sensördür ve 0
ila -760 mmHg basınç aralığında çalışmaktadır. 5 Vdc besleme ile çalışır ve uygulanan
basınç ile doğru orantılı olarak analog bir voltaj değerini çıkış ucundan üretir. Bu
sensöre ait karakteristik özellikler, giriş basıcına karşılık verdiği analog çıkış değerleri
EK 4’te verilen üretici bilgi sayfasında mevcuttur (http://www.freescale.com, 2008).
30
Sistem her bir kata 5 ayrı gaz iletim hattının bulunduğu 4 katlı bir hastane için
tasarlandığından toplam 20 adet basınç sensörü giriş kapasitesine sahiptir. Ancak
maliyeti yükseltmemek amacıyla 4 adet MPX5999D ve 1 adet MPX5100D model
sensör kullanılmış, diğer sensörleri simüle etmek amacıyla 1 Kohm’luk değişken
dirençler kullanılmıştır.
3.1.2 Kontrol devresi
Basınç sensörlerinden çıkışından gelen analog voltaj değerlerinin alınıp işlem yapıldığı
ve sonuçların bilgisayar kısmına gönderildiği kısım kontrol devresidir.
Kontrol devresinde mikrodenetleyici kontrollü bir devredir. Mikrodenetleyici olarak
Microchip firmasına ait PIC16F877 model mikrodenetleyici kullanılmıştır. Bu
entegreye ait genel bilgiler ve Bölüm 3.2.5’te ayrıntılı olarak anlatılmıştır. Ayrıca
bilgisayar ile seri porttan iletişim yapmaktadır. Seri iletişim ise MAX232 entegresi ile
yapılmaktadır.
Kontrol devresindeki PIC mikrodenetleyicilerinin içerisine yüklenen programların
kodları Pic Basic dilinde yazılmıştır. Pic Basic programlama dili ile genel bilgilere ise
Bölüm 2.3’te yer verilmiştir. Mikrodenetleyicilerin içerisine yüklenen kodlar ise
main_prog, slave_prog1 ve slave_prog2 EK 1’te verilmiştir.
Kontrol devresine ait genel şema Şekil 3.1’de, baskı devre ise Şekil 3.2’de gösterildiği
gibidir. Devreye ait bir fotoğraf ise Şekil 3.3’te görülmektedir. Sensör bağlantılarına ait
örnek fotoğraf Şekil 3.4’de, sensörlerin gaz prizlerine bağlantısına ait örnek fotoğraf ise
Şekil 3.5’te görülmektedir.
31
Şekil 3.1 Kontrol devresi genel şeması
32
Şekil 3.2 Kontrol devresine ait baskı devre
33
Şekil 3.3 Geliştirilen kontrol devresi
Şekil 3.4 Sensör bağlantıları
34
Şekil 3.5 Sensörlerin gaz prizlerine bağlanışı
3.1.2.1 Devrenin çalışması
Kontrol devresi temel olarak 3 adet 16F877 PIC mikrodenetleyicisinden oluşmaktadır.
Bu entegrelerin zamanlama yapabilmesi için kullanılan kristaller 4MHz değerindedir.
Bu üç entegre de sensörlerden gelen analog voltaj değerlerini sahip oldukları dahili
analog-dijital çevirici ile sayısal değere dönüştürürler. 8 bit çözünürlüğünde analog-
dijital çevrim yapılarak bu dönüşüm gerçekleştirilir. Daha sonra devre şemasında
“16F877MAIN” isimli entegre kendi analog girişlerine bağlı sensörlerin verilerini
RS232 entegresi üzerinden seri iletişim ile bilgisayar kısmına yollar.
Öte yanda devre şemasında “16F877SLAVE1” ve “16F877SLAVE2” olarak belirtilen
entegreler, analog girişlerini bağlı olan sensörlerden okuduğu ve dijital bir değere
çevirdiği bilgileri seri olarak bağlı oldukları “16F877MAIN” entegresine yollarlar.
“16F877MAIN” entegresi, kendi uçlarına bağlı sensör bilgilerini bilgisayar kısmına
yollamayı tamamladıktan sonra bu iki entegreden gelen verileri de bilgisayar kısmına
35
yollar. Bütün sensörlerden gelen verilerin kısmına yollanması işlemi tek bir pin
üzerinden yapıldığı için her bir sensörün verisi bilgisayara yollanmadan önce bu verinin
başına tanıtıcı bir etiket eklenir. Bu sayede bilgisayar kısmı seri porttan verileri alırken
hangi sensöre ait verinin geldiğini kolayca algılayabilir. Çünkü bilgisayar kısmında
yazılan programda da sensör etiketleri tanımlanmıştır. Ayrıca “16F877SLAVE1” ve
“16F877SLAVE2” entegreleri “16F877MAIN” entegresine sensör verilerini yollarken
her bir sensöre ait verinin başına, tanıtıcı bir etiket ekler. Yine bu ayırt edici bilgi
sayesinde “16F877MAIN” entegresi, kendisine gelen verilerin hangi sensöre ait
olduğunu tayin edebilir.
Devredeki 5 Vdc voltajın kararlı şekilde sağlanması için LM7805 regülatör entegresi
kullanılmıştır. LM7805 entegresinin giriş ve çıkışında yer alan C7 ve C8
kondansatörleri devrenin beslemesini daha kararlı ve salınımlardan arınmış yapmak için
kullanılmıştır.
“MAX232” entegresi ise kontrol devresi ile bilgisayar arasındaki seri iletişim esnasında
voltaj dönüştürücü olarak görev yapar. “MAX232” entegresi, -12, +12 V seviyesindeki
seri port sinyallerini TTL (+5, 0 V) seviyesine çevirir. “16F877MAIN” entegresinden
gelen sensörlere ait bilgilerin, sisteme bağlı bilgisayara “J1” konektörü vasıtasıyla
gönderilmesini sağlar (Ünlü 2007).
J1 – J22 arası soketlere basınç sensörlerinin çıkış uçları bağlanır. J1 – J5 arası soketlere
sırasıyla oksijen, karbondioksit, azot protoksit, basınçlı hava ve vakum sensörleri
bağlanır. J5 – J22 arsı soketlere ise basınç sensörleri gibi davranan 1 kohm değerinde
değişken dirençler bağlanmaktadır. Sensör temininde yaşanan zorluklar nedeniyle bu
şekilde sensörleri simüle etmek için değişken dirençler kullanılmıştır.
D1 diyotu ise devrenin çalıştığını gösteren bir leddir.
36
3.1.3 Geliştirilen program
Kontrol devresinin seri iletişim kanalıyla yolladığı veriler, bir bilgisayar tarafından
alınarak değerlendirilmektedir. Burada kullanılan bilgisayar yaygın kullanılan
bilgisayarlardan herhangi biri olabilir. Çalışmalar esnasında Windows XP işletim
sistemi yüklü, seri port çıkışı olan, çok yüksek donanımsal özellikleri olmayan
bilgisayarlar denenmiş ve yazılımın donanım ile uyumlu çalışabildiği gözlenmiştir.
Örneğin denemelerin yapıldığı bilgisayarlardan biri 1.4 GHz işlemcili, 256 MB ram
belleği, 32 MB ekran kartı belleği olan bir masaüstü bilgisayardır.
Bilgisayar kısmında kontrol devresinden gelen verileri alıp işlem yapacak program
Visual Basic 6.0 ile yazılmıştır. Grafik arayüzü şeklinde yapılan programın kaynak
kodları EK 2’de verilmiştir. Bu programa ait akış şeması da Şekil 3.6’da görüldüğü
gibidir.
Bu program işleyişi genel olarak şöyledir; önce program ile ilgili değişkenler, seri port
atamaları yapılır, ardından seri porttan gelen veriler alınır ve voltaj ile basınç arasındaki
ilişki formülüne göre basınç değerleri her bir gaz için hesaplanır. Daha sonra bu basınç
değerleri ayrı ayrı ekrana yazdırılır. Bu esnada basınç değerleri, kullanıcı tarafından
belirlenen alarm limit değerleri ile karşılaştırır. Basınç alt ve üst limit değerleri
programın “limit ayarla” butonuna basılarak girilebilmektedir. Program açıldığında
ölçüm, kayıt ve alarm işlemine başlamadan limit ayarlama işlemi yapılabilmekte, limit
ayarlama penceresine ait ekran görüntüsü Şekil 3.7’de görülmektedir.
37
Şekil 3.6 Geliştirilen bilgisayar programına ait akış şeması
Seri Porttan Gelen Sensör Verilerini Al
Sensörlerin Tanıtıcı Etiketlerine Göre İlgili Alt
Programa Git
Sensör Tipine Göre Basıncı Hesapla
Basınç Limitler Dahilinde mi?
Başla
E
H
Sesli ve Görsel Alarm Üret
Basınç Değerlerini Dosyaya Yaz
38
Şekil 3.7 Limit ayarlama penceresine ait ekran görüntüsü
İstenilen basınç limit değerleri ilgili gaz hanelerine girildikten sonra sırasıyla “kaydet”
ve “ana programa dön” butonlarına basıldığında program basınç alarmlarını artık bu
limit değerlerine göre üretecektir. Program, kontrol devresi veya kullanılan bilgisayar
açılıp kapatılsa da bu değerler bilgisayarda saklandığı için program alarmları hep bu
değerlere göre alarm üretecektir. Eğer bu limit değerleri tekrar değiştirilmek istenirse
program çalışmıyorken yine aynı yöntem izlenerek değiştirilebilir. Ancak program
çalışırken limit değiştirilemez, önce programı “dur” butonuna tıklayarak durdurmak
gerekmektedir.
Programda varsayılan basınç limit değerleri pozitif basınç sensörleri için; alt limit 3 bar,
üst limit 5 bar’dır. Ayrıca basınç 8 bar değerini aşınca çok yüksek basınç alarmı
üretilmektedir. Negatif basınç sensörleri için; alt limit -500 mmHg, üst limit -620
mmHg’dır. Ayrıca basınç değeri -650 mmHg sınırını geçtiğinde çok yüksek basınç
alarmı üretilmektedir.
39
Program, girilen limit değerleri ile basınç değerleri arasında yaptığı karşılaştırma
sonucunda aşağıdaki seçeneklerden hangisi uygunsa bu duruma göre gerekli çıktıları
üretir.
a-)Normal basınç: Eğer herhangi bir gazın basıncı kullanıcı tarafından girilmiş alarm
limitleri dahilinde ise ekranda o gaza ait hanede sadece o gazın basıncı görünür. Bütün
gaz basınçları limit değerleri arasında iken yazılan bilgisayar programının ekran
görüntüsü Şekil 3.8’de görülmektedir.
Şekil 3.8 Normal basınç için örnek ekran görüntüsü
b-)Düşük basınç: Eğer pozitif basınç sensörü ile ölçülen gazlardan (medikal oksijen,
medikal karbondioksit, medikal azot protoksit ve basınçlı hava) herhangi birinin basıncı
kullanıcı tarafından girilmiş alt limit değerinin altında ise o gaz basıncının gösterildiği
kutucuğun altında arka planı sarı renkli, “düşük basınç” yazılı bir uyarı etiketi belirir.
Aynı zamanda bir de 150 Hz frekansında sesli bir alarm üretilir. Bu basınç değeri
40
kullanıcı tarafından belirlenmiş limitler içinde olana kadar görsel ve sesli alarm devam
eder. Bu duruma örnek olarak 2. kattaki medikal karbondioksit gazının basıncı
düştüğünde yazılan bilgisayar programının ekran görüntüsü Şekil 3.9’da görülmektedir.
Şekil 3.9 Pozitif basınç sensöründe düşük basınç için örnek ekran görüntüsü
Eğer herhangi bir kattaki negatif basınç sensörü ile ölçülen vakumun basınç değeri alt
limit değerinin üzerinde ise vakum basıncının gösterildiği kutucuğun altında arka planı
sarı renkli, “düşük basınç” yazılı bir uyarı etiketi belirir. Burada “düşük basınç”, düşük
negatif basınç anlamına gelmektedir. Aynı zamanda bir de 150 Hz frekansında sesli bir
alarm üretilir. Bu basınç değeri kullanıcı tarafından belirlenmiş limitler içinde olana
kadar görsel ve sesli alarm devam eder. Bu duruma örnek olarak 1. kattaki vakum
basıncı düştüğünde yazılan bilgisayar programının ekran görüntüsü Şekil 3.10’da
görülmektedir.
41
Şekil 3.10 Negatif basınç sensöründe düşük basınç için örnek ekran görüntüsü
c-)Yüksek basınç: Eğer pozitif basınç sensörü ile ölçülen gazlardan herhangi birinin
basıncı kullancı tarafından belirlenmiş üst limit değerinin üzerinde ise o gaz basıncının
gösterildiği kutucuğun altında arka planı kırmızı renkli, “yüksek basınç” yazılı bir uyarı
etiketi belirir. Aynı zamanda bir de 200 Hz frekansında sesli bir alarm üretilir. Bu
basınç değeri, kullanıcı tarafından belirlenmiş limitler içinde olana kadar görsel ve sesli
alarm devam eder. Bu duruma örnek olarak 3. kattaki medikal karbondioksit gazının
basıncı yükseldiğinde yazılan bilgisayar programının ekran görüntüsü Şekil 3.11’de
görülmektedir.
42
Şekil 3.11 Pozitif basınç sensöründe yüksek basınç için örnek ekran görüntüsü
Eğer herhangi bir kattaki negatif basınç sensörü ile ölçülen vakumun basınç değeri üst
limit değerinin üzerinde ise vakum basıncının gösterildiği kutucuğun altında arka planı
kırmızı renkli, “yüksek basınç” yazılı bir uyarı etiketi belirir. Burada “yüksek basınç”,
yüksek negatif basınç anlamına gelmektedir. Aynı zamanda bir de 200 Hz frekansında
sesli bir alarm üretilir. Bu basınç değeri kullanıcı tarafından belirlenmiş limitler içinde
olana kadar görsel ve sesli alarm devam eder. Bu duruma örnek olarak 2. kattaki vakum
basıncı yükseldiğinde yazılan bilgisayar programının ekran görüntüsü Şekil 3.12’de
görülmektedir.
43
Şekil 3.12 Negatif basınç sensöründe yüksek basınç için örnek ekran görüntüsü
d-)Çok yüksek basınç: Eğer pozitif basınç sensörü ile ölçülen gazlardan herhangi
birinin basıncı 8 bar değerinin üzerine çıkmış ise o gaz basıncının gösterildiği
kutucuğun altında arka planı koyu kırmızı renkli, “çok yüksek basınç” yazılı bir uyarı
etiketi belirir. Aynı zamanda bir de 300 Hz frekansında sesli bir alarm üretilir. Bu
basınç değeri 8 bar’ın üstünde olduğu sürece görsel ve sesli alarm devam eder. Bu
duruma örnek olarak 4. kattaki medikal azot protoksit gazının basıncı çok yükseldiğinde
yazılan bilgisayar programına ait ekran görüntüsü Şekil 3.13’de görülmektedir.
44
Şekil 3.13 Pozitif basınç sensöründe çok yüksek basınç için örnek ekran görüntüsü
Eğer herhangi bir kattaki negatif basınç sensörü ile ölçülen vakumun basınç değeri -650
mmHg’nın altına düşmüş ise vakum basıncının gösterildiği kutucuğun altında arka planı
koyu kırmızı renkli, “çok yüksek basınç” yazılı bir uyarı etiketi belirir. Burada “çok
yüksek basınç”, çok yüksek negatif basınç anlamına gelmektedir. Aynı zamanda bir de
300 Hz frekansında sesli bir alarm üretilir. Bu durum basınç değeri -600 mmHg altında
olduğu sürece devam eder. Bu duruma örnek olarak 2. kattaki vakum basıncı çok
yükseldiğinde yazılan bilgisayar programının ekran görüntüsü Şekil 3.14’de
görülmektedir.
45
Şekil 3.14 Negatif basınç sensöründe çok yüksek basınç için örnek ekran görüntüsü
e-)Sensör arızalı veya kullanım dışı: Eğer pozitif veya negatif basınç sensörü ile
ölçülen gazlardan herhangi birinin sensöründe arıza oluşmuş ve ölçüm yapmıyorsa ya
da o hat kullanılmadığı için basıncı 0 bar /0 mmHg ise o gaz basıncının gösterildiği
kutucuğun altında arka planı yeşil renkli, “sensör arızalı veya kullanım dışı ” yazılı bir
uyarı etiketi belirir. Bu uyarı, sensördeki arızalı giderilene kadar devam edecektir.
Sensör arızalanmamış ancak devreye gelen kablolarda bir kopukluk da olmuş olabilir.
Bu uyarı sayesinde sensör bağlantıları kontrol edilerek bu kopukluk tespit edilebilir. Bu
duruma örnek olarak 3. kattaki N2O gazının basınç sensöründen 0 (sıfır) basınç
okunması durumunda geliştirilen programa ait ekran görüntüsü Şekil 3.15’te
görülmektedir.
46
Şekil 3.15 Bir basınç sensörünün arızalı olması veya o hattaki basıncın 0 (sıfır) bar olması durumuna ait örnek ekran görüntüsü
Ayrıca bütün katların gaz basınçları, bilgisayarın C: dizini içerisine geliştirilen program
tarafından oluşturulan kayit.txt isimli dosyada saklanmaktadır. Bu dosya içinde her bir
satırda sırasıyla bütün katlardaki bütün gazlara ait ölçüm değerleri ve ölçümlerin
alındığı tarih-saat bilgisi bulunmaktadır. Alt alta ardışık satırlar halinde ölçüm değerleri
sıralanmaktadır. Eğer herhangi bir basınca ait bir alarm üretilmişse basınç değerinin sol
tarafında alarmın türü belirtilmekte, sağ tarafında ise ölçümün alındığı tarih ve saat
bilgisi bulunmaktadır. Alarm türü 3 şekilde ifade edilmektedir;
a)D.B (Düşük Basınç): İlgili gaz basıncının kullanıcı tarafından belirlenen
limitin altında olduğunu,
b)Y.B (Yüksek Basınç): İlgili gaz basıncının kullanıcı tarafından belirlenen
limitin üzerinde olduğunu,
c)C.B (Çok Yüksek Basınç): İlgili gaz basıncının pozitif basıç sensörleri için 8
bar’dan, vakum sensörleri için 650 mmHg’dan yüksek olduğunu
47
d)K.D (Sensör Arızalı veya Kullanım Dışı): İlgili gaz basınç sensörünün arızalı
veya bu hattın kullanım dışı olması sebebiyle bu hattan 0 bar basınç değeri algılandığını
ifade etmektedir.
Geliştirilen programda her “başla” butonuna basıldığında ise kayıt dosyasına ilk olarak
ayırma amacıyla yeni bir satıra tarih/saat bilgisi ve yan yana çizgiler yazılmaktadır.
Daha sonra ise sensörlerin basınç ve alarm bilgileri bu dosyaya yazılmaktadır. Kayit.txt
dosyasına ait bir ekran görüntüsü şekil 3.16’da görülmektedir.
Şekil 3.16 Kayit.txt dosyasına ait bir ekran görüntüsü
48
4. TARTIŞMA VE SONUÇ
Hastanelerdeki tıbbi gaz santrallerinde, santral çıkış basıncının normal değerler dışına
çıktığında alarm üretecek alarm panoları mevcuttur. Ayrıca hastanenin her katına
kurularak o kattaki gazların basınçları belirli limit değerlerinin dışına çıktığında alarm
verecek alarm panoları da piyasada bulunabilmektedir. Ancak bu alarm panoları monte
edildiği kattan izlenebilmekte ve alarm ürettiği zaman bu kattaki görevliler tarafından
ilgili teknik birime haber verildiği sürece teknik birim bu alarmlardan haberdar
olabilmektedir. Bu nedenle bu panoların alarmlarından haberdar olunabilmesi için her
panonun olduğu yerde bir personel bulunması gerekmektedir. Ayrıca bu alarm panoları,
kurulum esnasında belirlenen basınç limit değerlerine göre alarm üretmekte ve bu limit
değerleri kullanıcı tarafından değiştirilememektedir.
Bu çalışmada gerçeklenen sistem ise hastanenin bütün katlarındaki gazların basınçlarını
istenilen bir birimden anlık olarak görüntüleme, bu değerleri kayıt etme ve kayıtları
geçmişe yönelik sorgulama olanağı sunmaktadır. Ayrıca bütün katlardaki gaz basınçları
ile ilgili sesli ve görsel alarmları yine bu birimden izleme imkanı vermektedir. Üstelik
alarm üretilecek alt ve üst basınç limitleri ise geliştirilen programdan kullanıcı
tarafından kolayca değiştirilebilmektedir. Ayrıca sisteme bağlı olan sensörlerden biri
arızalanırsa kullanıcı haberdar edilmektedir. İstenilen kata, iletim hattının herhangi bir
noktasına gaz basınç sensörleri bağlanılarak sisteme dahil edilebilir. Sistem 4 katlı ve
her katına da 5 gaz hattı iletilen bir hastane için tasarlanmıştır. Ancak sistem
genişletilebilir bir yapıya sahiptir. İhtiyaç duyulması halinde ilave sensör bağlantıları ve
yazılımdaki küçük güncellemeler ile kapasite çok rahat arttırılabilmektedir. Daha da
büyük ihtiyaçlar doğması halinde, ana mikrodenetleyiciye başka mikrodenetleyiciler
eklenerek daha büyük kapasite artışı sağlanabilmektedir.
Bütün bu özellikleri ile bu sistem, hastanelerde gaz basınçlarının daha etkin ve kolay bir
biçimde kontrol altında tutulmasını sağlamaya yardımcı olabilecek bir sistemdir. Teknik
personelin bulunduğu kata kurulmak suretiyle bütün katlardaki basınç bilgilerinden,
katlardaki personelin bildirimine ihtiyaç duyulmaksızın haberdar olunmasını
sağlayacaktır. Ayrıca bu sistemde oluşan alarmlar internet yoluyla başka bilgisayarlara
49
da ulaştırılabilir. Hatta eklenecek bir cep telefonu modülü ile alarmlar, istenilen cep
telefonuna da ulaştırılabilir.
Gerçeklenen sistem, Gülhane Askeri Tıp Akademisi Tıbbi Gaz Santrali’nde
denenmiştir. Bu ölçümler sonucunda her bir gaz için elde edilen ölçüm sonuçların,
santal göstergelerinden okunan değerlerin ve bunlar arasındaki farkların ortalamaları
Çizelge 4.1’de görülmektedir.
Çizelge 4.1 Ölçüm sonuçları karşılaştırması
Gaz Ölçülen Değer
(bar)
Gerçek Değeri
(bar)
Hata (%)
Medikal Oksijen 4.474 4.700 4.8
Medikal Karbondioksit 4.429 4.700 5.7
Medikal Azot Protoksit 4.300 4.700 8.5
Basınçlı Hava 4.083 4.100 0.4
Vakum -0.538 -0.560 3.9
Gerçek değerler ile ölçülen değerler arasındaki farklılıklar sensörler arasındaki iç yapı
ve kalibrasyon farklılıkları gibi nedenlerden kaynaklanmaktadır. Ayrıca sensörleri
iletim hattına bağlarken kullanılan rekor ve maşonlardan kaynaklanan sızıntılar ve
kayıplar da bu hata payında rol oynamaktadır. Sonuç olarak sistemde gaz
basınçlarındaki değişimlerde algılanan ortalama hata payı % 4.66’dır.
Geliştirilen sistemin mevcut sistemlere göre üstünlüklerini özetleyecek olursak;
a) Tek bir merkezden bütün katların gaz basınçları izlenebilmekte,
kaydedilebilmekte, geçmişe yönelik sorgulama yapılabilmekte ve üretilen
alarmlar izlenebilmektedir.
b) Sistem genişleyebilir bir yapıda olup, ihtiyaç olması halinde 4 kattan fazla
katlı hastanelerde de kullanılabilecek şekilde tasarlanmıştır.
50
c) Geçmiş kayıtlar, devrenin bağlı olduğu bilgisayarda saklanmaktadır. Bunlar
kolaylıkla harici depolama birimlerine, başka bilgisayarlara aktarılabilir.
İstenilen zamanda geçmişe yönelik gaz basınç değerlerinin sorgulaması
yapılabilir.
Gerçeklenen sistem ile medikal oksijenin basıncı, oksijenin üretim yöntemi ne olursa
olsun sağlıklı bir şekilde ölçülebilmektedir.
Bu sistemi daha geniş kullanım amaçlı yapmak için daha fazla tıbbi gaz çeşidinin
ölçülebileceği sensörler eklenilebilir. Bu sayede daha fazla gaz çeşidi kullanılan
hastanelerde veya başka sektörlerde kullanılması mümkün kılınabilir.
51
KAYNAKLAR
Altınbaşak, O. 2000. Mikrodenetleyiciler ve pic programlama. Altaş Yayınevi, 323s.,
İstanbul.
Altınbaşak, O. 2002. PIC basic pro ile pic programlama. Altaş Yayınevi, 304s.,
İstanbul.
Anonim. 2008. Balıkesir Üniversitesi Ders Notları. Web sitesi.
http://makine.balikesir.edu.tr/ay/dersnotu/ImalatYontemleriI/ImalatYon5.pdf
Erişim Tarihi:20.09.2008
Anonim. 2008. Web sitesi. http://www.donanimtr.com/mikroislemci-nedir-
t704.html?s=ba73d007f8746c2c752e2b4a75199c12& Erişim Tarihi:
22.07.2008
Anonim. 2008. Web sitesi. http://www.elektronika.gen.tr/datasheet/16f877.pdf
Erişim Tarihi: 14.07.2008
Anonim. 2008. Web sitesi. http://www.megasan.com.tr/tr/home.htm
Erişim Tarihi: 14.06.2008
Anonim. 2008. Web sitesi. http://nedir.net/mikroislemci.html
Erişim Tarihi: 14.07.2008
Anonim. 2008. Web sitesi. http://sozluk.sourtimes.org/show.asp?t=azot+protoksit
Erişim Tarihi: 14.06.2008
Anonim. 2008. Web sitesi. http://www.tesamedikal.com/
Erişim Tarihi: 18.09.2008
Anonim. 2008. Web Sitesi. http://www.webhatti.com/kimya/49629-suyun-elektrolizi-
ile-ayrismasi.html Erişim Tarihi: 20.09.2008
Anonim. 2008. Web sitesi. http://www.4n2c.com/oksijen-uretim-tesisi-jeneratoru.htm
Erişim Tarihi:24.09.2008
Anonymus. 2008. Web sitesi. http://www.freescale.com Erişim Tarihi: 02.05.2008
Anonymus. 2008. Web sitesi. http://www.linde-gastherapeutics.com/interna
tional/web/lg/lgt/likelglgt.nsf/docbyalias/nav_healthcare_profes_gases_in_medic
ine. Erişim Tarihi: 12.05.2008
52
Bodur, Y. 2002. Adım adım picmicro proglamlama, İnfogate Yayınları, 213s, Ankara
Çelik, H.H. 1997. Mikroişlemcilerin yapısını ve devrelerini kavrama. M.Ü.T.E.F. ders
notları, 160s., İstanbul.
Kaçmaz, E. 2007. PIC mikrodenetleyici kullanarak ağ bağlantılı gömülü sistem tasarımı
iklimlendirme cihaz kontrol ünitesi uygulaması. Yüksek lisans tezi, Anadolu
Üniversitesi, 72s., Eskişehir
Matic, N. and Andric, D. 2000. The Pic microcontroller book 1, Microelectronica
Publications, 367s., India
Moritary, J. D. 1954. Evaluation of carbon dioxıde inhalation therapy. Am J Psychiatry.
110; 765-769
Ruben, H. 1972. Nitrous oxide analgesia in dentistry: its use during 15 years in
Denmark. Br Dent J., 132; 195–196.
Sullivan, I. O’. and Benger, J. 2003. Nitrous oxide in emergency medicine. Emerg Med
J, 20; 214–217
Turgutlu, H. F. 2002. Pic mikrodenetleyicisi kullanarak deneysel bir endüstriyel
sistemin kontrol edilmesi. Yüksek lisans tezi, Niğde Üniversitesi, 135s., Niğde
Ünlü, B. 2007. İnternet üzerinden mobil bir robotun kontrolü. Bitirme tezi, Yıldız
Teknik Üniversitesi, 42s., İstanbul
Yalçın, M. K. 2003, Mobil robot uygulaması. Yüksek lisans tezi, Niğde Üniversitesi,
90s., Niğde
53
EKLER
EK 1 Kontrol Devresindeki PIC’ler İçine Yüklenen Kodlar
EK 2 Bilgisayarda Çalışan Programın Kaynak Kodları
EK 3 MPX5999D İçin Üretici Bilgi Sayfası
EK 4 MPX5100D İçin Üretici Bilgi Sayfası
EK 5 Pic Basic Proglamlama Dilinde Komutlar
EK 6 PIC 16F877’de Pin Tanımlamaları
EK 7 PIC 16F877’nin Basitleştirilmiş İç Yapısı
54
EK 1 Kontrol Devresindeki PIC’ler İçine Yüklenen Kodlar
main_prog (16F877MAIN entegresine yüklenen program)
(Microcode Studio programı, Pic Basic dili)
'*Genel port işlemleri ve başlangıç değerleri*
ADCON1=%00000000 'PortA 0-7 arasi A/D girisler
include "modedefs.bas" 'serial out için gerekli dosya
TRISA = %11111111
'* seri port ile ILGILI TANIMLAR *
DEFINE HSER_RCSTA 90h ' Setting the receiving register
DEFINE HSER_TXSTA 20h ' Setting the emitting register
DEFINE HSER_BAUD 2400 ' Baud rate
DEFINE HSER_SPBRG 25 'Direct setting of SPBRG
' Degiskenler
sens11 var byte
sens12 var byte
sens13 var byte
sens14 var byte
sens15 var byte
sens16 var byte
sens17 var byte
sens18 var byte
sens21 var byte
sens22 var byte
sens23 var byte
sens24 var byte
sens25 var byte
sens26 var byte
sens27 var byte
sens28 var byte
sens31 var byte
55
sens32 var byte
sens33 var byte
sens34 var byte
Goto anadongu ' altdonguleri atla
' a/d converter'u okuma altdongusu
getad:
Pauseus 50 ' kanalin hazir olmasini bekle
ADCON0.2 = 1 ' okumaya basla
Pauseus 50 ' sonuc iicin bekle
Return
' 1. sensoru okuma altdongusu
get_sens11:
ADCON0 = %01000001 'AN0, Set A/D to Fosc/8, Channel 0, On
Gosub getad
sens11 = ADRESH
Return
' 2. sensoru okuma altdongusu
get_sens12:
ADCON0 = %01001001 'AN1, Set A/D to Fosc/8, Channel 1, On
Gosub getad
sens12 = ADRESH
Return
' 3. sensoru okuma altdongusu
get_sens13:
ADCON0 = %01010001 'AN2, Set A/D to Fosc/8, Channel 2, On
Gosub getad
sens13 = ADRESH
Return
' 4. sensoru okuma altdongusu
get_sens14:
ADCON0 = %01011001 'AN3, Set A/D to Fosc/8, Channel 3, On
Gosub getad
56
sens14 = ADRESH
Return
' 5. sensoru okuma altdongusu
get_sens15:
ADCON0 = %01100001 'AN4, Set A/D to Fosc/8, Channel 4, On
Gosub getad
sens15 = ADRESH
Return
' 6. sensoru okuma altdongusu
get_sens16:
ADCON0 = %01101001 'AN5, Set A/D to Fosc/8, Channel 5, On
Gosub getad
sens16 = ADRESH
Return
' 7. sensoru okuma altdongusu
get_sens17:
ADCON0 = %01110001 'AN6, Set A/D to Fosc/8, Channel 6, On
Gosub getad
sens17 = ADRESH
Return
' 8. sensoru okuma altdongusu
get_sens18:
ADCON0 = %01111001 'AN7, Set A/D to Fosc/8, Channel 7, On
Gosub getad
sens18 = ADRESH
Return
anadongu:
Gosub get_sens11 ' 1. sensoru oku
HSEROUT ["a",dec sens11] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens12 ' 2. sensoru oku
HSEROUT ["b",dec sens12] '25. pinden bilgisayara yolla
57
pause 50
Gosub get_sens13 ' 3. sensoru oku
HSEROUT ["c",dec sens13] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens14 ' 4. sensoru oku
HSEROUT ["d",dec sens14] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens15 ' 5. sensoru oku
HSEROUT ["e",dec sens15] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens16 ' 6. sensoru oku
HSEROUT ["f",dec sens16] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens17 ' 7. sensoru oku
HSEROUT ["g",dec sens17] '25. pinden bilgisayara yolla
pause 50
Gosub get_sens18 ' 8. sensoru oku
HSEROUT ["h",dec sens18] '25. pinden bilgisayara yolla
pause 50
'Slave pic1'den verileri al
serin2 portb.5,16780,100,atla1,[wait("i"),sens21] '38 pin'den slave pic1
pause 10 'den al
HSEROUT ["i",dec sens21] '25. pinden bilgisayara yolla
pause 50
atla1:
serin2 portb.5,16780,100,atla2,[wait("j"),sens22] '38 pin'den al
pause 10
HSEROUT ["j",dec sens22] '25. pinden bilgisayara yolla
pause 50
atla2:
serin2 portb.5,16780,100,atla3,[wait("k"),sens23] '38 pin'den al
pause 10
58
HSEROUT ["k",dec sens23] '25. pinden bilgisayara yolla
pause 50
atla3:
serin2 portb.5,16780,100,atla4,[wait("l"),sens24] '38 pin'den al
pause 10
HSEROUT ["l",dec sens24] '25. pinden bilgisayara yolla
pause 50
atla4:
serin2 portb.5,16780,100,atla5,[wait("m"),sens25] '38 pin'den al
pause 10
HSEROUT ["m",dec sens25] '25. pinden bilgisayara yolla
pause 50
atla5:
serin2 portb.5,16780,100,atla6,[wait("n"),sens26] '38 pin'den al
pause 10
HSEROUT ["n",dec sens26] '25. pinden bilgisayara yolla
pause 50
atla6:
serin2 portb.5,16780,100,atla7,[wait("o"),sens27] '38 pin'den al
pause 10
HSEROUT ["o",dec sens27] '25. pinden bilgisayara yolla
pause 50
atla7:
serin2 portb.5,16780,100,atla8,[wait("p"),sens28] '38 pin'den al
pause 10
HSEROUT ["p",dec sens28] '25. pinden bilgisayara yolla
pause 50
atla8:
'Slave pic2'den verileri al
serin2 portb.4,16780,100,atla11,[wait("r"),sens31] '37 pin'den slave pic2
pause 10 'den al
HSEROUT ["r",dec sens31] '25. pinden bilgisayara yolla
59
pause 50
atla11:
serin2 portb.4,16780,100,atla12,[wait("s"),sens32] '37 pin'den al
pause 10
HSEROUT ["s",dec sens32] '25. pinden bilgisayara yolla
pause 50
atla12:
serin2 portb.4,16780,100,atla13,[wait("t"),sens33] '37 pin'den al
pause 10
HSEROUT ["t",dec sens33] '25. pinden bilgisayara yolla
pause 50
atla13:
serin2 portb.4,16780,100,atla14,[wait("u"),sens34] '37 pin'den al
pause 10
HSEROUT ["u",dec sens34] '25. pinden bilgisayara yolla
pause 50
atla14:
Goto anadongu
END 'programın sonu
60
slave_prog1 (16F877SLAVE1 entegresine yüklenen program)
(Microcode Studio programı, Pic Basic dili)
'*Genel port işlemleri ve başlangıç değerleri*
ADCON1=%00000000 'PortA 0-7 arasi A/D girisler
include "modedefs.bas" 'seri haberlesme için gerekli dosya
TRISA = %11111111
' Degiskenler
sens21 var byte
sens22 var byte
sens23 var byte
sens24 var byte
sens25 var byte
sens26 var byte
sens27 var byte
sens28 var byte
Goto anadongu ' altdonguleri atla
' a/d converter'u okuma altdongusu
getad:
Pauseus 50 ' kanalin hazir olmasini bekle
ADCON0.2 = 1 ' okumaya basla
Pauseus 50 ' sonuc iicin bekle
Return
' 1. sensoru okuma altdongusu
get_sens21:
ADCON0 = %01000001 'AN0, Set A/D to Fosc/8, Channel 0, On
Gosub getad
sens21 = ADRESH
Return
' 2. sensoru okuma altdongusu
get_sens22:
ADCON0 = %01001001 'AN1, Set A/D to Fosc/8, Channel 1, On
61
Gosub getad
sens22 = ADRESH
Return
' 3. sensoru okuma altdongusu
get_sens23:
ADCON0 = %01010001 'AN2, Set A/D to Fosc/8, Channel 2, On
Gosub getad
sens23 = ADRESH
Return
' 4. sensoru okuma altdongusu
get_sens24:
ADCON0 = %01011001 'AN3, Set A/D to Fosc/8, Channel 3, On
Gosub getad
sens24 = ADRESH
Return
' 5. sensoru okuma altdongusu
get_sens25:
ADCON0 = %01100001 'AN4, Set A/D to Fosc/8, Channel 4, On
Gosub getad
sens25 = ADRESH
Return
' 6. sensoru okuma altdongusu
get_sens26:
ADCON0 = %01101001 'AN5, Set A/D to Fosc/8, Channel 5, On
Gosub getad
sens26 = ADRESH
Return
' 7. sensoru okuma altdongusu
get_sens27:
ADCON0 = %01110001 'AN6, Set A/D to Fosc/8, Channel 6, On
Gosub getad
sens27 = ADRESH
62
Return
' 8. sensoru okuma altdongusu
get_sens28:
ADCON0 = %01111001 'AN7, Set A/D to Fosc/8, Channel 7, On
Gosub getad
sens28 = ADRESH
Return
anadongu:
Gosub get_sens21 ' 1. sensoru oku
SEROUT2 portc.6,16780,["i",sens21] '25. pinden yolla main pic'e yolla
pause 10
Gosub get_sens22 ' 2. sensoru oku
SEROUT2 portc.6,16780,["j",sens22]
pause 10
Gosub get_sens23 ' 3. sensoru oku
SEROUT2 portc.6,16780,["k",sens23]
pause 10
Gosub get_sens24 ' 4. sensoru oku
SEROUT2 portc.6,16780,["l",sens24]
pause 10
Gosub get_sens25 ' 5. sensoru oku
SEROUT2 portc.6,16780,["m",sens25]
pause 10
Gosub get_sens26 ' 6. sensoru oku
SEROUT2 portc.6,16780,["n",sens26]
pause 10
Gosub get_sens27 ' 7. sensoru oku
SEROUT2 portc.6,16780,["o",sens27]
pause 10
63
Gosub get_sens28 ' 8. sensoru oku
SEROUT2 portc.6,16780,["p",sens28]
pause 10
Goto anadongu
End 'program sonu
64
slave_prog2 (16F877SLAVE2 entegresine yüklenen program)
(Microcode Studio programı, Pic Basic dili)
'*Genel port işlemleri ve başlangıç değerleri*
'**********************************************
ADCON1=%00000000 'PortA 0-7 arasi A/D girisler
include "modedefs.bas" 'seri haberlesme için gerekli dosya
TRISA = %11111111
' Degiskenler
sens31 var byte
sens32 var byte
sens33 var byte
sens34 var byte
'sens35 var byte
'sens36 var byte
Goto anadongu ' altdonguleri atla
'**********************************************************************
' a/d converter'u okuma altdongusu
getad:
Pauseus 50 ' kanalin hazir olmasini bekle
ADCON0.2 = 1 ' okumaya basla
Pauseus 50 ' sonuc iicin bekle
Return
' 1. sensoru okuma altdongusu
get_sens31:
ADCON0 = %01000001 'AN0, Set A/D to Fosc/8, Channel 0, On
Gosub getad
sens31 = ADRESH
Return
' 2. sensoru okuma altdongusu
get_sens32:
ADCON0 = %01001001 'AN1, Set A/D to Fosc/8, Channel 1, On
65
Gosub getad
sens32 = ADRESH
Return
' 3. sensoru okuma altdongusu
get_sens33:
ADCON0 = %01010001 'AN2, Set A/D to Fosc/8, Channel 2, On
Gosub getad
sens33 = ADRESH
Return
' 4. sensoru okuma altdongusu
get_sens34:
ADCON0 = %01011001 'AN3, Set A/D to Fosc/8, Channel 3, On
Gosub getad
sens34 = ADRESH
Return
anadongu:
Gosub get_sens31 ' 1. sensoru oku
SEROUT2 portc.6,16780,["r",sens31] '25. pinden yolla main pic'e yolla
pause 10
Gosub get_sens32 ' 2. sensoru oku
SEROUT2 portc.6,16780,["s",sens32]
pause 10
Gosub get_sens33 ' 3. sensoru oku
SEROUT2 portc.6,16780,["t",sens33]
pause 10
Gosub get_sens34 ' 4. sensoru oku
SEROUT2 portc.6,16780,["u",sens34]
pause 10
Goto anadongu
End 'program sonu
66
EK 2 Bilgisayarda Çalışan Programın Kaynak Kodları
(Visual Basic 6.0)
Dim dizi(40), i, e As Double ‘degisken tanimlamalari
Private Declare Function Beep Lib "kernel32" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 'beep sesi cikmasi
icin gerekli deklerasoyon
Private Sub MSComm1_OnComm()
Dim InData As String
Dim IDTag As String
If MSComm1.CommEvent = comEvReceive Then 'seri porttan alim gerçeklesirse;
InData = MSComm1.Input
IDTag = Left(InData, 1) ' InData nin ilk karakterini al (gelen verinin tanitma
bilgisi)
adval = Right(InData, Len(InData) - 1) ' tanitma bilgisini kaldir ve sonucu sakla
adval = Val(adval)
'okisjen, karbondioksit, azotprotoksit veya basincli hava sensorlerinden
(mpx5999D)gelen veriler
If adval < 256 And adval >= 0 Then
volt = adval / 255 * 5
Label11.ForeColor = &H80000011
On Error Resume Next
Else
GoTo son
End If
If volt < 0.2 Then
basinc = 0
Else
basinc = 221.975 * volt - 44.395 'kPa cinsinden
End If
bar = basinc / 100 '1 bar 100kpa eder
bar = Round(bar, 3)
67
Select Case IDTag ' tanitma bilgisine bakarak gelen verinin hangi sensore ait olduguna
karar ver
'******************** KAT 1 *****************************************
Case "a": sens11 = adval
Label6(0).Visible = False
Label6(1).Visible = False
Label6(2).Visible = False
Text1.Text = bar & " bar" ‘basinc degerini yaz
If bar < dizi(0) Then ‘limitler asiliyor mu kontrol et
Write #1, "D.B. kat1 o2", bar, "bar", Now() ‘kayit dosyasina basnc degerlerini yaz
Label6(0).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat1 o2", bar, "bar", Now()
Label6(2).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(1) Then
Write #1, "Y.B. kat1 o2", bar, "bar", Now()
Label6(1).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat1 o2", bar, "bar", Now()
End If
End If
End If
Case "b": sens12 = adval
Label7(0).Visible = False
Label7(1).Visible = False
Label7(2).Visible = False
Text2.Text = bar & " bar"
68
If bar < dizi(2) Then
Write #1, "D.B. kat1 co2", bar, "bar", Now()
Label7(0).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat1 co2", bar, "bar", Now()
Label7(2).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(3) Then
Write #1, "Y.B. kat1 co2", bar, "bar", Now()
Label7(1).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat1 co2", bar, "bar", Now()
End If
End If
End If
Case "c": sens13 = adval
Label8(0).Visible = False
Label8(1).Visible = False
Label8(2).Visible = False
Text3.Text = bar & " bar"
If bar < dizi(4) Then
Write #1, "D.B. kat1 n2o", bar, "bar", Now()
Label8(0).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat1 n2o", bar, "bar", Now()
Label8(2).Visible = True
69
a = Beep(300, 150)
Else
If bar > dizi(5) Then
Write #1, "Y.B. kat1 n2o", bar, "bar", Now()
Label8(1).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat1 n2o", bar, "bar", Now()
End If
End If
End If
Case "d": sens14 = adval
Label9(0).Visible = False
Label9(1).Visible = False
Label9(2).Visible = False
Text4.Text = bar & " bar"
If bar < dizi(6) Then
Write #1, "D.B. kat1 hava", bar, "bar", Now()
Label9(0).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat1 hava", bar, "bar", Now()
Label9(2).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(7) Then
Write #1, "Y.B. kat1 hava", bar, "bar", Now()
Label9(1).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat1 hava", bar, "bar", Now()
70
End If
End If
End If
Case "e": sens15 = adval
' vakum = (200 / 9) * volt - (40 / 9) 'kpa
' vakum = vakum * 760 / 101.325 'mmhg
Label10(0).Visible = False
Label10(1).Visible = False
Label10(2).Visible = False
vakum = adval * 760 / 255
vakum = Round(vakum, 3)
If vakum = 0 Then
Text5.Text = vakum & " mmHg"
Else
Text5.Text = "-" & vakum & " mmHg"
End If
If vakum < dizi(8) Then
Write #1, "D.B. kat1 vakum", vakum, "mmHg", Now()
Label10(0).Visible = True
a = Beep(150, 300)
Else
If vakum > 650 Then
Write #1, "C.B. kat1 vakum", vakum, "mmHg", Now()
Label10(2).Visible = True
a = Beep(300, 150)
Else
If vakum > dizi(9) Then
Write #1, "Y.B. kat1 vakum", vakum, "mmHg", Now()
Label10(1).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat1 vakum", vakum, "mmHg", Now()
71
End If
End If
End If
'******************** KAT 2 *****************************************
Case "f": sens16 = adval
Label6(3).Visible = False
Label6(4).Visible = False
Label6(5).Visible = False
Text6.Text = bar & " bar"
If bar < dizi(10) Then
Write #1, "D.B. kat2 o2", bar, "bar", Now()
Label6(3).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat2 o2", bar, "bar", Now()
Label6(5).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(11) Then
Write #1, "Y.B. kat2 o2", bar, "bar", Now()
Label6(4).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat2 o2", bar, "bar", Now()
End If
End If
End If
Case "g": sens17 = adval
Label7(3).Visible = False
Label7(4).Visible = False
Label7(5).Visible = False
72
Text7.Text = bar & " bar"
If bar < dizi(12) Then
Write #1, "D.B. kat2 co2", bar, "bar", Now()
Label7(3).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat2 co2", bar, "bar", Now()
Label7(5).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(13) Then
Write #1, "Y.B. kat2 co2", bar, "bar", Now()
Label7(4).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat2 co2", bar, "bar", Now()
End If
End If
End If
Case "h": sens18 = adval
Label8(3).Visible = False
Label8(4).Visible = False
Label8(5).Visible = False
Text8.Text = bar & " bar"
If bar < dizi(14) Then
Write #1, "D.B. kat2 n2o", bar, "bar", Now()
Label8(3).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat2 n2o", bar, "bar", Now()
73
Label8(5).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(15) Then
Write #1, "Y.B. kat2 n2o", bar, "bar", Now()
Label8(4).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat2 n2o", bar, "bar", Now()
End If
End If
End If
Case "i": sens21 = adval
Label9(3).Visible = False
Label9(4).Visible = False
Label9(5).Visible = False
Text9.Text = bar & " bar"
If bar < dizi(16) Then
Write #1, "D.B. kat2 hava", bar, "bar", Now()
Label9(3).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat2 hava", bar, "bar", Now()
Label9(5).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(17) Then
Write #1, "Y.B. kat2 hava", bar, "bar", Now()
Label9(4).Visible = True
a = Beep(200, 300)
Else
74
Write #1, " kat2 hava", bar, "bar", Now()
End If
End If
End If
Case "j": sens22 = adval
Label10(3).Visible = False
Label10(4).Visible = False
Label10(5).Visible = False
vakum = adval * 760 / 255
vakum = Round(vakum, 3)
If vakum = 0 Then
Text10.Text = vakum & " mmHg"
Else
Text10.Text = "-" & vakum & " mmHg"
End If
If vakum < dizi(18) Then
Write #1, "D.B. kat2 vakum", vakum, "mmHg", Now()
Label10(3).Visible = True
a = Beep(150, 300)
Else
If vakum > 650 Then
Write #1, "C.B. kat2 vakum", vakum, "mmHg", Now()
Label10(5).Visible = True
a = Beep(300, 150)
Else
If vakum > dizi(19) Then
Write #1, "Y.B. kat2 vakum", vakum, "mmHg", Now()
Label10(4).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat2 vakum", vakum, "mmHg", Now()
End If
75
End If
End If
'******************** KAT 3 *****************************************
Case "k": sens23 = adval
Label6(6).Visible = False
Label6(7).Visible = False
Label6(8).Visible = False
Text11.Text = bar & " bar"
If bar < dizi(20) Then
Write #1, "D.B. kat3 o2", bar, "bar", Now()
Label6(6).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat3 o2", bar, "bar", Now()
Label6(8).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(21) Then
Write #1, "Y.B. kat3 o2", bar, "bar", Now()
Label6(7).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat3 o2", bar, "bar", Now()
End If
End If
End If
Case "l": sens24 = adval
Label7(6).Visible = False
Label7(7).Visible = False
Label7(8).Visible = False
Text12.Text = bar & " bar"
76
If bar < dizi(22) Then
Write #1, "D.B. kat3 co2", bar, "bar", Now()
Label7(6).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat3 co2", bar, "bar", Now()
Label7(8).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(23) Then
Write #1, "Y.B. kat3 o2", bar, "bar", Now()
Label7(7).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat3 co2", bar, "bar", Now()
End If
End If
End If
Case "m": sens25 = adval
Label8(6).Visible = False
Label8(7).Visible = False
Label8(8).Visible = False
Text13.Text = bar & " bar"
If bar < dizi(24) Then
Write #1, "D.B. kat3 n2o", bar, "bar", Now()
Label8(6).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat3 n2o", bar, "bar", Now()
Label8(8).Visible = True
77
a = Beep(300, 150)
Else
If bar > dizi(25) Then
Write #1, "Y.B. kat3 n2o", bar, "bar", Now()
Label8(7).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat3 n2o", bar, "bar", Now()
End If
End If
End If
Case "n": sens26 = adval
Label9(6).Visible = False
Label9(7).Visible = False
Label9(8).Visible = False
Text14.Text = bar & " bar"
If bar < dizi(26) Then
Write #1, "D.B. kat3 hava", bar, "bar", Now()
Label9(6).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat3 hava", bar, "bar", Now()
Label9(8).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(27) Then
Write #1, "Y.B. kat3 hava", bar, "bar", Now()
Label9(7).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat3 hava", bar, "bar", Now()
78
End If
End If
End If
Case "o": sens27 = adval
Label10(6).Visible = False
Label10(7).Visible = False
Label10(8).Visible = False
vakum = adval * 760 / 255
vakum = Round(vakum, 3)
If vakum = 0 Then
Text15.Text = vakum & " mmHg"
Else
Text15.Text = "-" & vakum & " mmHg"
End If
If vakum < dizi(28) Then
Write #1, "D.B. kat3 vakum", vakum, "mmHg", Now()
Label10(6).Visible = True
a = Beep(150, 300)
Else
If vakum > 650 Then
Write #1, "C.B. kat3 vakum", vakum, "mmHg", Now()
Label10(8).Visible = True
a = Beep(300, 150)
Else
If vakum > dizi(29) Then
Write #1, "Y.B. kat3 vakum", vakum, "mmHg", Now()
Label10(7).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat3 vakum", vakum, "mmHg", Now()
End If
End If
79
End If
'******************** KAT 4 ***************************************
Case "p": sens28 = adval
Label6(9).Visible = False
Label6(10).Visible = False
Label6(11).Visible = False
Text16.Text = bar & " bar"
If bar < dizi(30) Then
Write #1, "D.B. kat4 o2", bar, "bar", Now()
Label6(9).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat4 o2", bar, "bar", Now()
Label6(11).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(31) Then
Write #1, "Y.B. kat4 o2", bar, "bar", Now()
Label6(10).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat4 o2", bar, "bar", Now()
End If
End If
End If
Case "r": sens31 = adval
Label7(9).Visible = False
Label7(10).Visible = False
Label7(11).Visible = False
Text17.Text = bar & " bar"
If bar < dizi(32) Then
80
Write #1, "D.B. kat4 co2", bar, "bar", Now()
Label7(9).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat4 co2", bar, "bar", Now()
Label7(11).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(33) Then
Write #1, "Y.B. kat4 co2", bar, "bar", Now()
Label7(10).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat4 co2", bar, "bar", Now()
End If
End If
End If
Case "s": sens32 = adval
Label8(9).Visible = False
Label8(10).Visible = False
Label8(11).Visible = False
Text18.Text = bar & " bar"
If bar < dizi(34) Then
Write #1, "D.B. kat4 n2o", bar, "bar", Now()
Label8(9).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat4 n2o", bar, "bar", Now()
Label8(11).Visible = True
a = Beep(300, 150)
81
Else
If bar > dizi(35) Then
Write #1, "Y.B. kat4 n2o", bar, "bar", Now()
Label8(10).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat4 n2o", bar, "bar", Now()
End If
End If
End If
Case "t": sens33 = adval
Label9(9).Visible = False
Label9(10).Visible = False
Label9(11).Visible = False
Text19.Text = bar & " bar"
If bar < dizi(36) Then
Write #1, "D.B. kat4 hava", bar, "bar", Now()
Label9(9).Visible = True
a = Beep(150, 300)
Else
If bar > 8 Then
Write #1, "C.B. kat4 hava", bar, "bar", Now()
Label9(11).Visible = True
a = Beep(300, 150)
Else
If bar > dizi(37) Then
Write #1, "Y.B. kat4 hava", bar, "bar", Now()
Label9(10).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat4 hava", bar, "bar", Now()
End If
82
End If
End If
Case "u": sens134 = adval
Label10(9).Visible = False
Label10(10).Visible = False
Label10(11).Visible = False
vakum = adval * 760 / 255
vakum = Round(vakum, 3)
If vakum = 0 Then
Text20.Text = vakum & " mmHg"
Else
Text20.Text = "-" & vakum & " mmHg"
End If
If vakum < dizi(38) Then
Write #1, "D.B. kat4 vakum", vakum, "mmHg", Now()
Label10(9).Visible = True
a = Beep(150, 300)
Else
If vakum > 650 Then
Write #1, "C.B. kat4 vakum", vakum, "mmHg", Now()
Label10(11).Visible = True
a = Beep(300, 150)
Else
If vakum > dizi(39) Then
Write #1, "Y.B. kat4 vakum", vakum, "mmHg", Now()
Label10(10).Visible = True
a = Beep(200, 300)
Else
Write #1, " kat4 vakum", vakum, "mmHg", Now()
End If
End If
End If
83
''****************************************************
Case Else: Label11.ForeColor = &H8000000D
End Select
Else
End If
On Error Resume Next
son:
End Sub
Private Sub Form_Load()
MSComm1.Settings = "2400,N,8,1" 'Haberlesme hizi ve parity ayarlari yapildi
MSComm1.CommPort = 1 'Haberlesme portu olarak COM1 seçildi
MSComm1.RThreshold = 1 'Port dan 1 karakter geldiginde Mscomm1 alt porgramina
gitmesi için bu özellik 1 seçildi
MSComm1.InputLen = 4 'Port’dan alinacak karakter sayisi 4 olarak seçildi.
Dim sayac As Integer
Open "c:\kayit.txt" For Append As #1
Open "c:\limits.txt" For Input As #2
For sayac = 0 To 39
Line Input #2, dizi(sayac)
On Error Resume Next
dizi(sayac) = Val(dizi(sayac))
Next sayac
Close #2
For sayac = 0 To 39
Text22(sayac).Text = dizi(sayac)
Next sayac
Label11.ForeColor = &H80000011
For sayac = 0 To 11
Label6(sayac).Visible = False
Label7(sayac).Visible = False
Label8(sayac).Visible = False
Label9(sayac).Visible = False
84
Label10(sayac).Visible = False
Next sayac
End Sub
Private Sub Command1_Click()
If MSComm1.PortOpen = True Then 'Port acildi
MSComm1.PortOpen = False
Command1.Caption = "BASLA"
Shape1.Visible = False
Shape2.Visible = True
Command22.Enabled = True
Else
MSComm1.PortOpen = True
Command1.Caption = "DUR"
Shape2.Visible = False
Shape1.Visible = True
Command22.Enabled = False
Write #1, Now(), "-----------------------------------------------"
Frame1.Visible = False
Form2.Hide
End If
End Sub
Private Sub Command22_Click()
If Frame1.Visible = True Then
Frame1.Visible = False
Else
Frame1.Visible = True
End If
End Sub
Private Sub Command23_Click()
Dim sayac3 As Integer
Dim sayac4 As Integer
85
For sayac3 = 0 To 39
dizi(sayac3) = Val(Text22(sayac3).Text)
Next sayac3
Open "c:\limits.txt" For Output As #2
For sayac4 = 0 To 39
Write #2, Val(Text22(sayac4).Text)
Next sayac4
Close #2
End Sub
Private Sub Command24_Click()
Frame1.Visible = False
End Sub
Private Sub oku_Click()
Form2.Show
End Sub
86
EK 3 MPX5999D İçin Üretici Bilgi Sayfası
87
88
89
EK 4 MPX5100D İçin Üretici Bilgi Sayfası
90
91
92
93
94
EK 5 Pic Basic Proglamlama Dilinde Komutlar
Operatör Açıklaması
@ Tek satırlık assembly komutu kullanmak için. ADCIN Channel, Var Channel’daki analog değerin karşılığı olan dijital değeri
Var’a atar. ASM..ENDASM Assembly komut grubu kullanmak için. BRANCH Index, [Label...] Label dizisinde Index sayısını karşılayan seçeneğe
yönlendirir. CALL Label Assembly’deki CALL komutunun aynısı CLEAR Bütün değişkenleri sıfırlar CLEARWDT WDT’nin içindeki değeri sıfırlayarak WDT’yi kapatır. COUNT Pin, Period, Var Belirli bir periyod içinde gelen puls sayısını Var’a atar DATA Location, Constant Pic’e program yüklenirken dahili EEPROM’a Location
adresinden başlayarak Constant’ları yükler DEBUG Var {,Var} Define komutuyla önceden belirlenmiş bir pin üzerinden
önceden belirlenmiş bir hızda (baud rate) seri haberleşme yoluyla Var’daki veriyi yollar.
DEBUGIN {Timeout, Label} [Var]
Define komutuyla önceden belirlenmiş bir pin üzerinden önceden belirlenmiş bir hızda (baud rate) seri haberleşme yoluyla gelen veriyi Var’a atar.
DISABLE Interrupt girişi ve Debug işlemlerini engeller. DISABLE DEBUG Debug işlemini engeller. DISABLE INTERRUPT INTCON.GIE’yi sıfırlayarak interrupt girişini kapatır. DTMFOUT Pin, {Onms, Offms,} [Tone]
Tone tuşunun telefondaki sesini Onms süresi boyunca tuşlar
EEPROM Location, Constant
DATA’yla aynı işi yapar
ENABLE DISABLE komutundan sonra interrupt girişine ve Debug komutuna izin verir.
ENABLE DEBUG DISABLE komutundan sonra Debug komutuna izin verir.
ENABLE INTERUPT DISABLE komutundan sonra interrupt girişine izin verir.
END Assembly’deki END’in aynısıdır. FOR i=Start TO End Task NEXT i
Start değerinden End değerine kadar i’yi birer birer arttırarak Task’i uygular.
FREQOUT Pin, Onms, Frequency
Pin bacağında Onms süresi boyunca Frequency frekansında sinüs dalgası üretir.
GOSUB Label Call komutuyla aynı işi yapar. GOTO Label Assembly’deki GOTO işleminin aynısı. HIGH Pin Pin bacağını bir yapar.
95
Operatör Açıklaması
HPWM Channel, Dutycycle, Frequency
16F877 gibi PWM modülü olan mikrodenetleyicilerde bu modülün Channel numaralı kanalından % (Duty+1)/2.56 duty cycle’da Frequency frekansında PWM çıkışı sağlar
HSERIN {ParityLabel,} {Timeout,Label,} [Var]
16F77 gibi USART özelliği olan mikrodenetleyicilerde donanım asenkron seri haberleşme hattından veri bekler, gelen veriyi Var’a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider.
HSEROUT [Var] 16F77 gibi USART özelliği olan mikrodenetleyicilerde Var’daki veriyi donanım asenkron seri haberleşme hattına yollar.
I2CREAD DataPin, ClockPin, Control, Address, Var
Control ve Address verilerini yollar, harici EEPROM’un Address bölgesinden gelen veriyi Var’a atar.
I2CWRITE DataPin, ClockPin, Control, Address, Var
Control ve Address bilgilerini yollayıp, harici EEPROM’un Address bölgesine Var’daki veriyi atar.
IF..THEN..ELSE..ENDIF If’ten sonra gelen şart doğruysa Then’den sonraki işlemi, değilse Else’ten sonraki işlemi yapar.
INPUT Pin Belirtilen Pin’i giriş yapar. LCDIN Address, Var LCD’deki RAM’in Address bölgesindeki veriyi Var’a
atar. LCDOUT Item Item’deki değeri LCD’ye gönderir {LET} Var = Value Var’a Value’daki işlem veya değeri atar. LOOKDOWN Search, [List], Var
Search’teki veriyi List’in içinde arar, o verinin List’teki 0’dan başlayarak kaçıncı veri olduğunu Var’a atar.
LOOKDOWN2 Search,Test, [List], Var
LOOKDOWN’dan farkı List’in içinde 16 bit gerektiren (256’dan büyük) değerler kullanılabilmesi ve Test için karşılaştırma operatörü kullanılırsa şartı sağlayan ilk sayıyı seçmesidir.
LOOKDOWN2 Search,Test, [List], Var
LOOKDOWN’dan farkı List’in içinde 16 bit gerektiren (256’dan büyük) değerler kullanılabilmesi ve Test için karşılaştırma operatörü kullanılırsa şartı sağlayan ilk sayıyı seçmesidir.
LOOKUP Index, [List], Var
List’in içinde Index’teki sayıya karşılık gelen veriyi Var’a atar.
LOOKUP2 Index, [List], Var
LOOKUP’tan farkı List’in içinde 256’dan büyük sayı kullanılabilmesidir.
LOW Pin Belirtilen Pin’i sıfırlar. NAP Period 18*2 (Period) ms süre için uyku moduna girer
96
Operatör Açıklaması
ON DEBUG GOTO Label Debug geldiğinde Label’daki işlemleri yapar. ON INTERRUPT GOTO Label
Interrupt geldiğinde Label’daki işlemleri yapar.
OUTPUT Pin Pin’i çıkış bacağı yapar. PAUSE Period Period’daki sayı kadar milisaniye bekler. PAUSEUS Period Period’daki sayı kadar mikrosaniye bekler. POT Pin, Scale, Var Pin’deki potansiyometrenin ayarına göre Scale içindeki
uygun değeri Var’a atarak PULSIN Pin, State, Var Pin’e gelen State (0 veya 1) pulsun süresinin kaç 10us
(4MHz; 20MHz’de 2us) olduğunu Var’a atar. PULSOUT Pin, Period Pin üzerinden Period’daki sayı kadar 10us(4MHz;
20MHz’de 2us) süresince olan işaretin(0 veya 1) tersi puls verir.
PWM Pin, Duty, Cycle Pin’den % (Duty+1)/2.56 duty cycle’da Cycle’daki değer kadar periyod boyunca PWM çıkışı sağlar.
RANDOM Var 0-255 arasında rastgele bir sayı seçip Var’a atar. RCTIME Pin, State, Var Pin’in State(0 veya 1) durumunda kalma süresinin kaç
10us (4MHz; 20MHz’de 2us) olduğunu Var’a atar. READ Address, Var Dahili EEPROM’un Address bölgesindeki bilgiyi Var’a
atar. READCODE Address, Var
READ komutundan farkı 16 bit verileri kullanması.
RESUME Interrupt’la devreye giren program bloğunu bitirir, ana programın kaldığı yere geri dönüş sağlar.
RETURN Call’la çağrılan program bloğunu bitirir, ana programın kaldığı yere geri dönüş sağlar.
REVERSE Pin Pin girişse çıkış yapar, çıkışsa giriş yapar.
REVERSE Pin Pin girişse çıkış yapar, çıkışsa giriş yapar.
SELECT CASE Var CASE Expr1 Statement CASE Expr2 Statement CASE ELSE Statement END SELECT
Var’ın içindeki değeri Expr’lerin içinde arar, bulduğu seçeneğin altındaki Statement komutunu işler, bulamazsa Case Else’in altındaki Statement komutunu işler.
SERIN Pin, Mode, {Timeout, Label}, [Qual], Var
Pin’e bağlı asenkron seri haberleşme hattından Mode’la belirtilen hızda (baud rate) veri bekler, gelen veriyi Var’a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider. [Qual] varsa verinin içinde Qual’dan sonraki ilk veriyi Var’a atar.
97
Operatör Açıklaması
SERIN2 Pin, Mode, {Timeout, Label}, [Qual], Var
SERIN’den farkı standart bağlantı hızlarından farklı hızlar (baud rate) kullanılmasına izin vermesidir. Mode’daki sayı (1000000/hız)-20 olarak hesaplanır.
SEROUT Pin,Mode, [Var] Var’ın içindeki verileri Pin üzerinden Mode hızında (baud rate) asenkron seri haberleşme hattına gönderir.
SEROUT2 Pin, Mode, [Var]
SEROUT’tan farkı standart bağlantı hızlarından farklı hızlar (baud rate) kullanılmasına izin vermesidir. Mode’daki sayı (1000000/hız)-20 olarak hesaplanır.
SHIFTIN Datapin, Clockpin, Mode, Var
Datapin’e bağlı senkron seri haberleşme hattından Clockpin’e bağlı ortak osilasyonu kullanarak Mode’la belirtilen transfer protokolünü kullanarak veri alır ve Var’a atar.
SHIFTOUT Datapin, Clockpin, Mode, Var
Datapin’e bağlı senkron seri haberleşme hattına Clockpin’e bağlı ortak osilasyonu kullanarak Mode’la belirtilen transfer protokolünü kullanarak Var’daki verileri gönderir.
SLEEP Period Period s süresi için uyku modunda kalır. SOUND Pin, [Note, Duration,{Note, Duration}]
Pin üstünden Note (1-127) notasını Duration*12ms süreyle üretir.
STOP Sonsuz nop döngüsü. SWAP Var1, Var2 Var1 ve Var2’nin içeriklerini takas eder. TOGGLE Pin Pin’deki değeri (0 veya 1) tersine çevirir. WHILE Condition Statement WEND
Condition doğrulandığı sürece Statement komutunu uygular.
WRITE Address, Var Var’daki veriyi dahili EEPROM’un Address bölgesine atar.
WRITECODE Address,Var
WRITE komutundan farkı 16 bit verileri kullanması.
XIN Datapin, Zeropin, {Timeout, Label}, [Var]
Datapin ve Zeropin’e bağlı X-10 interface entegresinden veri bekler, gelen veriyi Var’a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider.
XOUT Datapin, Zeropin, [Housecode\Keycode
Datapin ve Zeropin’e bağlı X-10 interface entegresine Housecode ve Keycode verilerini yollar.
98
EK 6 PIC 16F877’de Pin Tanımlamaları
PİN ADI PİN
NO
I/O BUFFER TİPİ
AÇIKLAMALAR
OSC1/CLKIN 13 I ST/CMOS (3) Osilatör clock girişi (kristal veya harici kaynak) OSC2/CLKOUT 14 O 0 Osilatör kristal çıkış ucu MCLR/Vpp 1 I/P ST Resetleme girişi / Programlama anında programla-ma
gerilimi girişi (Mikrodenetleyicinin resetlenmesi için bu pin lojik 0 yapılmalıdır.)
RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3 RA4/T0CK1 RA5/SS/AN4
2 3 4 5 6 7
I/O I/O I/O I/O I/O I/O
TTL TTL TTL TTL ST TTL
PORTA iki yönlü giriş/çıkış portudur. Analog olarak kullanılabilir. Analog olarak kullanılabilir. Analog olarak kullanılabilir. Analog olarak kullanılabilir. Bu pin (istenirse) TMR0 için bir clock girişi olabilir SSP Slave seçme pini veya analog giriş/çıkış olabilir.
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
33 34 35 36 37 38 39 40
I/O I/O I/O I/O I/O I/O I/O I/O
TTL/ST (1) TTL TTL TTL TTL TTL TTL/ST (2) TTL/ST (2)
PORTB iki yönlü giriş/çıkış portudur. Giriş konumunda iken dahili pull-up devresi aktifleşebilir. Dış kesme girişi olarak seçilebilir. Düşük akımla programlamada da kullanılabilir. Kesme girişi olarak seçilebilir. Kesme girişi olarak seçilebilir. Kesme girişi olarak seçilebilir. Seri programlamada clock pinidir. Kesme girişi olarak seçilebilir. Seri programlamada data (veri) pinidir.
RC0T1OS0/T1CK1 RC1/T1OS1/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SD1/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
15 16 17 18 23 24 25 26
I/O I/O I/O I/O I/O I/O I/O I/O
ST ST ST ST ST ST ST ST
PORTC iki yönlü giriş/çıkış portudur. Timer1 osc. çıkışı veya saat girişi olarak kullanılabilir. Timer1 osc. giriş veya Capture2 giriş/Compare2 çıkışı/PWM2 çıkışı olarak kullanılabilir. Timer1 osc. giriş veya Capture1 giriş/Compare1 çıkışı/PWM1 çıkışı olarak kullanılabilir. SPI ve I2 modunda, seri saat giriş/çıkışında kullanılır SPA modda SPI giriş verisi veya I2 C modda I/O için SPA modda SPI çıkış verisi için seçilebilir. USART asenkron gönderme ya da senkron saat için USART asenkron alma ya da senkron veri için
RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7
19 20 21 22 27 28 29 30
I/O I/O I/O I/O I/O I/O I/O I/O
TTL/ST (1) TTL/ST (1) TTL/ST (1) TTL/ST (1) TTL/ST (1) TTL/ST (1) TTL/ST (1) TTL/ST (1)
PORTD iki yönlü giriş/çıkış portudur. PSP 0. biti olarak kullanılabilir. PSP 1. biti olarak kullanılabilir. PSP 2. biti olarak kullanılabilir. PSP 3. biti olarak kullanılabilir. PSP 4. biti olarak kullanılabilir. PSP 5. biti olarak kullanılabilir. PSP 6. biti olarak kullanılabilir. PSP 7. biti olarak kullanılabilir.
RE0/RD/AN5
8
I/O
ST/TTL (3)
PORTE iki yönlü giriş/çıkış portudur. Analog olarak ya da PSP okuma kontrollü kullanılabilir.
99
RE1/WR/AN6 RE2/CS/AN7
9 10
I/O I/O
ST/TTL (3) ST/TTL (3)
Analog olarak ya da PSP okuma kontrollü kullanılabilir. Analog olarak ya da PSP okuma kontrollü kullanılabilir.
NC - - Bu pinler içerde kontrol edilmiyor, bağlı değil. VSS 8 P - Ground (toprak) uç VDD 19 P - Pozitif kaynak ucu I: Input (Giriş) O: Output (Çıkış) I/O: Input/Output (Giriş/Çıkış) TTL: TTL Giriş -: Kullanılmıyor ST: Schimitt Trigger giriş olarak çalışır. Not: 1. Bu buffer, dış kesme olarak düzenlendiğinde Schimitt Trigger giriş olarak çalışır.
2. Bu buffer, seri programlama modunda Schimitt Trigger giriş olarak çalışır. 3. Bu buffer, RC osilatör modunda ve CMOS devrelerinde Schimitt Trigger giriş olarak çalışır.
100
EK 7 PIC 16F877’nin Basitleştirilmiş İç Yapısı
101
ÖZGEÇMİŞ
Adı Soyadı : Oktay AYDIN
Doğum Yeri : Akpınar
Doğum Tarihi : 12/01/1984
Medeni Hali : Bekar
Yabancı Dili : İngilizce
Eğitim Durumu
Lise : Zonguldak Fen Lisesi, 2000
Lisans : Ankara Üniversitesi Mühendislik Fakültesi Elektronik
Mühendisliği, 2005
Yüksek Lisans: Ankara Üniversitesi Fen Bilimleri Enstitüsü Elektronik
Mühendisliği Anabilim Dalı (Eylül 2005 – Kasım 2008)
Çalıştığı kurumlar
Emniyet Genel Müdürlüğü, Haberleşme Dairesi Başkanlığı, 2006-2007
Devlet Hava Meydanları İşletmesi, 2007-…