BÖLÜM I

GİRİŞ

Yapılan son araştırmalar ve istatistikler, hırsızlık ve soygunların her geçen gün hızla arttığını ortaya koymaktadır. Günümüzde sadece lüks evler ve villalar değil, bütün evler ve işyerleri soyulma riski altındadır. Eviniz ve eşyalarınız sigortalı da olsa bir hırsızın evinize ya da işyerinize vereceği hasar, hele siz evinizdeyken başınıza gelebilecek bir hırsızlık girişimi, sigortadan karşılanamayacak zararlara neden olabilmektedir. Evinizi ve işyerinizi hırsızlığa karşı korumanın en etkili yolu bir hırsız alarm sistemi kurdurmaktır. Ama bu sistemlerin fiyatlarından dolayı bir hırsız alarm sistemi kurdurmak külfetlidir. Bu nedenle hırsız alarm sistemini daha az maliyetle ve daha az elemanla uygun olarak gerçekleştirebilmek için bu uygulama yapılmıştır.

Bu tez çalışmasında, mikrodenetleyici kullanarak sistem kontrolü gerçekleştirilmiştir. Mikrodenetleyici olarak PIC 16F877 kullanılmıştır. PIC, mikrodenetleyicisinin bu uygulamada kullanılması ile, piyasadaki eş sistemlere göre daha ucuz ve daha az yer kaplayan kullanımı kolay ve az elemanla gerçekleştirilen bir hırsız alarm sistemi meydana gelmektedir. Bu çalışmada bir PIC (Peripheral Interface Controller) mikrodenetleyicisi için program yazmak ve geliştirmek üzere, “PIC BASIC” gibi yüksek seviyeli program kullanılmıştır.

Bölüm II’de bu uygulamayı gerçekleştirmek için gerekli eleman ve yöntemlerden bahsedilmiştir. Bölüm III’de bu uygulamada kullanılan PIC 16F877 ye ait temel bilgiler ve bağlantı şemaları verilmiştir. Bölüm IV’de hırsız alarm sisteminin ve sensörlerinçalışma prensibinden ve özelliklerinden bahsedilmiştir. Bölüm V’de ise bu uygulamada PIC’e yüklenerek hırsız alarm sisteminin çalışma şeklini belirleyen ana program verilmiştir. Bölüm VI’da ise sonuç ve öneriler bulunmaktadır.

BÖLÜM II

ELEMANLAR VE YÖNTEM

Bu tez çalışmasında bir güvenlik sistemi için kullanılmış olan tüm elemanları şu şekilde sıralayabiliriz.

1) PIC mikrodenetleyicisi (PIC 16F877),
2) Program geliştirme yazılımı (PIC BASIC PRO),
3) Programlama yazılımı (PROPIC),
4) Programlama devresi,
5) Kişisel bilgisayar,
6) Uygulama devresi,
7) Güvenlik sisteminin kurulacağı maket ev.

Bu elemanları inceleyecek olursak;

2.1. PIC Mikrodenetleyicisi

Güvenlik sisteminin kontrolünü sağlamak amacıyla PIC 16F877 mikrodenetleyici kullanılmıştır. Bu mikrodenetleyici;

• Güvenlik sistemi için yeterli sayıda I/O (giriş/çıkış) ucuna sahiptir.
• 1000 defa programlanıp silinebilen EEPROM (Flash) belleğe sahiptir.
• TMR0, TMR1, TMR2 yazılım kesmesine sahiptir.
• 4-20 Mhz arası yüksek bir çalışma frekansına sahiptir.

2.2. Program geliştirme yazılımı (PIC BASIC PRO)

Bu tezde PIC mikrodenetleyicisinin programlanmasında “BASIC” dili kullanılmıştır. Bu dilde program geliştirmek için “PIC BASIC PRO” programı kullanılmıştır.

Üst seviyeli programlama dilleri (Örn: PIC BASIC PRO) sayesinde çok daha rahat ve hızlı bir şekilde programlama yapılabilmektedir. Ancak bu programlar çok karmaşık

sistemlerin çözümünde yetersiz kalabilmektedir. Bu durumda yüksek seviyeli bir PIC programlama dili ve PIC assembly dili birlikte kullanıldığında bu sorun ortadan kalkmaktadır. Yüksek seviyeli bu programlama dilinin (PIC BASIC PRO) yararları bu uygulamada görülmüştür.

2.2.1 PIC BASIC PRO Komut Seti

PIC BASIC’in komut seti BASIC programlama dilinin komut setinden alınmıştır. BASIC programlama dilinde olmayan komutlar da mevcuttur. Çizelge 1.’de PIC BASIC PRO komutları bulunmaktadır.

Çizelge 1. PIC BASIC PRO komut seti

@ END NAP S ELECT CASE
ADCIN FOR…NEXT ON DEBUG SERIN
ASM…ENDASM FREQOUT ON NTERRUPT SERIN2
BRANCH GOSUB OUTPUT SEROUT
BRANCHL GOTO OWIN SEROUT2
BUTTON HIGH OWOUT SHIFTIN
CALL HPWM PAUSE SHIFTOUT
CLEAR HSERIN PAUSEUS SLEEP
CLEARWDT HSEROUT PEEK SOUND
COUNT I2CREAD POKE STOP
DATA I2CWRITE POT SWAP
DEBUG IF…THEN PULSIN TOGGLE
DEBUGIN INPUT PULSOUT USBIN
DISABLE LCDIN PWM USBINIT
DESABLE DEBUG LCDOUT RANDOM USBOUT
DISABLE INTERRUPT
LET RCTIME WHILE…WEND
DTMFOUT LOOKDOWN READ WRITE
EEPROM LOOKDOWN2 READCODE WRITECODE
ENABLE LOOKUP RESUME XIN
ENABLE DEBUG LOOKUP2 RETURN XOUT

PIC BASIC PRO programlama dilinin tüm yönleriyle açıklanması bir kitap konusu olacağından burada sadece bu çalışma için gerekli olan komutlar ve bunların özelliklerinden bahsedilmiştir.

2.2.2 Değişkenler ( Variables )

PIC BASIC PRO programlama dilinde üç tip değişken tipi kullanılmaktadır. Değişkenler BİT, BYTE veya WORD büyüklüğünde olabilmektedir.

Örneğin: K VAR BYTE (Byte büyüklüğünde K değişkeni)

2.2.3 Etiketler ( Labels )

Etiketler GOTO veya GOSUB gibi komutlara referans teşkil etmektedirler. Bu komutların icrasından sonra program etiketle belirtilen satıra dallanmaktadır. Etiketler herhangi bir kelime olabilir ve sonuna iki nokta üst üste (:) konulmalıdır.

Örneğin: Etiket: HIGH PORTB.5

2.2.4 Nümerik sabitler ( Numeric constants )

Nümerik sabitler üç şekilde tanımlanabilmektedir. Bunlar decimal, binary ve hexadecimal‘dır. Binary değer tanımlanırken değerin başına ‘%’ ve hexadecimal değerin başına ‘$’işareti konulmaktadır. Decimal değer tanımlanırken herhangi bir işaret kullanılmamaktadır.Örneğin:

100 : Decimal değer .
%100 : Decimal 4 için binary değer.
$100 : Decimal 256 için hexadecimal değer.

2.2.5 Portlar

PIC’in herhangi bir portunun istenilen pini giriş yada çıkış olarak tanımlanabilmektedir. Daha sonra istenilen değer ilgili porta yüklenilebilir. Değerin porta’ya yüklenmesi için farklı yollar vardır.

Örneğin:

TRISB = 0 : Portb’nin tüm pinleri çıkış olarak tanımlanmaktadır.
TRISA=1 : Portb’nin tüm pinleri giriş olarak tanımlanmaktadır.
TRISC = %11110000 : Portb’nin ilk dört biti çıkış, son dört biti giriş olarak tanımlanmaktadır.

Yönlendirilen port pinlerine bilgilerin gönderilmesi için birkaç yol vardır.

Örneğin:

PORTB =%11110000 : Portb’nin ilk dört pinine lojik-0 son dört pinine ise lojik-1 değeri gönderilmektedir .
PORTB = 1 : Portb’nin bütün pinlerine lojik-1 değeri gönderilmektedir.
HIGH PORTB.4 :PORTB’nin dördüncü pinine lojik-1 değeri gönderilmektedir.
LOW PORTB.6 : PORTB’nin altıncı pinine lojik-0 değeri gönderilmektedir.

2.2.6 Zaman gecikmesi ( Pause )

‘PAUSE’, programı istenilen bir süre beklemeye almaktadır. En fazla 65535 milisaniyelik bir gecikme sağlanabilmektedir. Bu da bir dakikanın biraz üstünde bir değerdir. ‘PAUSE’ komutundaki değer milisaniye büyüklüğündedir. Örneğin, PAUSE 49000 (49 saniyelik gecikme).

Eğer 49 saniyelik gecikmeyi assembly kodunda yazmak gerekseydi, şu şekilde yazılmalıydı.

LIST = P16F877
INCLUDE “P16F877.INC”
SAYI EQU H’20’
SAYI1 EQU H’21’
SAYI2 EQU H’22’
GECIKME
	MOVLW H’FF’
	MOVWF SAYI
DONGU
	MOVLW H’FF’
	MOVWF SAYI1
DONGU1
	MOVLW H’FF’
	MOVWF SAYI2
DONGU2
	DECFSZ SAYI2,F
	GOTO DONGU2
	DECFSZ SAYI1,F
	GOTO DONGU1
	DECFSZ SAYI
	GOTO DONGU
RETURN

Oysa bunu PIC BASIC PRO programlama dilinde PAUSE 49000 şeklinde tek satırda gerçekleştirmek mümkün olmaktadır. Görüldüğü üzere PIC BASIC PRO ile program yazmak hem çok rahat hem de çok basit olmaktadır.

2.2.7 Döngü düzenlemek ( For…Next )

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekmektedir. PIC BASIC PRO programlama dilinde bu işi ‘FOR…NEXT’ döngüsü bir sayaç gibi çalışarak gerçekleştirmektedir. ‘FOR’ komutundan sonra bir değişkene ilk değer atanıp, bu değişkenin sayacağı son değer de belirtilmelidir. Ayrıca değişkenin kaçar kaçar artacağı ‘STEP’ komutuyla kontrol edilebilmektedir. Son olarak ‘NEXT’ döngüsüne gelen program eğer son değere ulaşılmamış ise döngüsüne devam edecektir. Örneğin:

FOR K=2 to 10 STEP 2
PAUSE 1000
NEXT

Burada k değişkeni 2’den 10’a kadar ikişer ikişer saymaktadır. Her bir döngüde bir saniyelik bir gecikme sağlanmaktadır. Döngü toplam beş tur atacağından 5 saniyelik bir gecikme sağlanmış olacaktır.

2.2.8 Kontrol komutları (If…Then)

Bazı işlemlerde bir durumun kontrol edilmesi gerekebilir. PIC BASIC PRO programlama dilinde bu işi ‘IF…THEN’ komutu sağlar. Bu kontrol deyimi bir veya birden çok karşılaştırmayı icra edebilir. ’IF…THEN’ kontrolörü bir durumun doğru (true) veya yanlış (false) olmasını karşılaştırarak değerlendirir. Eğer değerlendirme doğru ise ‘THEN’ komutundan sonraki ifade işlenir. Eğer değerlendirme yanlış ise program bir sonraki satıra geçecektir. Örneğin:

IF PORTB.2 = 0 THEN HIGH PORTA.1
ELSE HIGH PORTB.3

Bu program parçasında eğer portb’nin ikinci pini lojik-0 olmuşsa porta’nın birinci pini lojik-1 yapılır aksi taktirde portb’nin üçüncü pini lojik-1 olacaktır.

2.2.9 Kesmeler ( Interrupts )

PIC’in port girişlerinden veya donanım içerisindeki bir sayıcıdan gelen sinyal nedeniyle belleğinde çalışmakta olan programın kesilmesi olayına kesme denilmektedir. Programın kesildiği andan itibaren önceden hazırlanan bir alt program çalışmaktadır. Alt program işlevini bitirdikten sonra ana program kaldığı yerden itibaren çalışmasına devam etmektedir. Netice olarak bir kesme, ana program çalışmasını sadece duraklatır, ama hiçbir zaman işlevinin devam ettirmesini engellememektedir. İnterrupt alt programları kullanarak, program içerisinde kullanılacak komut sayısı azaltılıp bir sürü mantıksal karışıklıklar önlenmektedir. Kesme işlemi Şekil 1.’de sembolik olarak gösterilmiştir.

Şekil 1. Kesme işleminin sembolik olarak gösterimi

2.2.9.1 INTCON Register

INTCON (İnterrupt Control) registeri RAM bellekte h’18B’ adresinde bulunan özel registerden bir tanesidir. Bu register içerisinde her bir kesme kaynağı için bir flag ve bir de global kesme bulunmaktadır..Çizelge 2.’de intcon registerin her bir bitinin ne işe yaradığı gösterilmiştir

Çizelge 2. İntcon register

GIE EEIE TOIE INTE RBIE TOIF INTF RBIF
7 6 5 4 3 2 1 0
GIE :

  Tüm kesme işlemlerini iptal etme bayrağı
  0: Tüm kesmeler geçersiz
  1: Aktif yapılmış olan tüm kesmeler geçerli
EEIE :   EEPROM belleğe yazma işlemi tamamlama kesmesi
  0: Geçersiz
  1: Geçerli
TOIE :   TMR0 sayıcı kesmesini aktif yapma bayrağı
  0: Geçersiz
  1: Geçerli
INTE :   Harici kesmeyi aktif yapma bayrağı
  0:
Geçersiz
  1: Geçerli
RBIE :   PORTB(4, 5, 6, 7.bitleri) değişiklik kesmesini aktif yapma bayrağı
  0: Geçersiz
  1: Geçerli
TOIF :   TMR0 sayıcısı zaman aşımı bayrağı
  0: Zaman aşımı yok
  1: Zaman aşımı var
INTF :   Harici kesme bayrağı
  0: Harici kesme oluşmadığında
RBIF :   PORTB değişiklik bayrağı
  0: RB4~RB7 uçlarında değişiklik yok
  1: RB4~RB7 uçlarından en az birisinde değişiklik var.

2.2.9.2 Kesme Kaynakları

Kesme birkaç yoldan yapılabilir. Bunlardan bazıları:

• Harici(external) kesme.
• TMR0 sayıcısında oluşan zaman aşımı kesmesi.
• PORTB’deki (4, 5, 6, 7 bitler) lojik seviye değişikliğinden.
• EEPROM belleğe yazma işleminin tamamlanmasında meydana gelen kesme.

Bu çalışmada kullanılan kesme TMR0 sayıcısından oluşan zaman aşımı kesmesidir.

2.2.9.3 TMR0 Sayıcısı/Zamanlayıcısı

PIC 16F877’nin RAM belleğinin h’101’ adresinde TMR0 adı verilen özel bir register vardır. TMR0 programlanabilen bir sayıcıdır. Yani saymaya istenilen bir değerden veya baştan başlatılabilir. Herhangi bir anda içeriği sıfırlanabilir. Belli başlı özellikleri şunlardır.

• 8-bit bir sayıcıdır.
• Yazılabilir/okunabilir.
• Programlanabilen frekans bölme değeri ( prescaler value ) vardır.
• Sayı artışı harici veya dahili clock saykılı ile yapılabilir.
• Düşen ve yükselen kenar tetiklemesi ( harici olarak )
• Sayıcı değeri artan yöndedir.
• TMR0’ın değeri h’FF’den h’00’a geldiğinde ilgili flag’i “1” yaparak kesme oluşturur.

TMR0 sayıcısının önemli özelliklerinden biri de ana program veya kesme alt programları çalışırken sayma işlemini durdurmamasıdır.

2.2.9.4 OPTION Register

OPTION register, RAM belleğin h’81’adresinde bulunan özel bir registerdir. TMR0 sayıcısının kontrolünde kullanılmaktadır. Çizelge 3.’de bu registerin her bir bitinin ne görevler yaptığı açıklanmıştır.

Çizelge 3. Option register

RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
7 6 5 4 3 2 1 0
PS0, PS1, PS2 :   Frekans bölme sayısı
PSA :
  Frekans bölücü seçme biti
  0:
Frekans bölme sayısı TMR0 için geçerli
  1: Frekans bölme sayısı WDT için geçerli
TOSE   :TMR0 sinyal kaynağı kenar seçme biti
  0: RA4/TOCKI ucundan düşen kenar tetiklemesi
  1: RA4/TOCKI ucundan yükselen kenar tetiklemesi
TOCS :   TMR0 sinyal kaynağı seçme biti
  0: Dahili komut saykılı seçilir
  1: Harici dijital sinyal(RA4/TOCKI ucu)
INTEDG :   Harici kesme sinyali kenar seçme biti
  0: RB0/INT ucundan düşen kenarda tetikleme
  1: RB0/INT ucundan yükselen kenarda tetikleme
RBPU :   PORTB pull up geçerli yapma biti
  0: PORTB uçlarındaki pull-up’lar iptal edilir.
  1: PORTB uçlarındaki pull-up’lar geçerli yapılır

2.2.9.5 Prescaler Kullanılması

Option registerin 0, 1, 2. bitleri (PS0~PS2) içerisine yerleştirilen sayılar, TMR0 veya WDT’ye uygulanan sinyali böler. Böylece sayma hızları değiştirilebilir. Üç bitlik bu sayı TMR0 veya WDT’de birbirinden farklı 8 farklı oran seçme olanağı oluşturur.

Çizelge 4.’de prescaler değerleri görülmektedir.

Çizelge 4. Prescaler değerleri

Frekans bölme sayısı TMR0 Oranı WDT oranı
000 1/2 1/1
001 1/4 1/2
010 1/8 1/4
011 1/16 1/8
100 1/32 1/16
101 1/64 1/32
110 1/128 1/64
111 1/256 1/128

TMR0 veya WDT sayıcılarının kaç dahili komut saykılında bir defa bir üst sayıya geçeceğini belirleyen orandır. Örneğin:

TMR0 oranı 1/2 ise, 2 komut saykılında bir defa üst sayıya geçiş olur.
TMR0 oranı 1/8 ise, 8 komut saykılında bir defa üst sayıya geçiş olur.

Program belleğine yerleştirilen komutların çalışabilmesi için harici bir osilatörden clock sinyali ( fosc ) uygulanması gerekmektedir. Bu frekans PIC tarafından 4’e bölünerek OSC2 ucundan dışarıya verilmektedir. İşte 4’e bölünen bu frekansın bir saykılı bir komutun icrası için geçen süreyi belirlemektedir. Bu çalışmada 4 MHz’lik bir kristal osilatör kullanılmıştır. Bu frekanstaki dahili komut saykılı 1MHz’dir. Periyodu ise 1μs’dir. Yani dahili komut saykılı 1 μs’dir. Bir komut 1 μs’lik bir sürede icra edilmektedir. Prescaler değeri ile TMR0 sayıcısının kaç μs aralıklarla saydığını veya kaç μs aralıklarla kesme verdiği belirlenmektedir.

Örneğin, bu çalışmada prescaler değeri b’111’ seçilmiştir. Prescaler b’111’ olduğunda TMR0 oranı 1/256 olur. (fosc) değeri 4MHz olduğundan, komut saykılı 1μs olmaktadır. Buradan TMR0 sayıcısının içeriği 256 dahili komut saykılında bir arttığı anlaşılmaktadır. TIMER0 sayma aralığı bu çalışma için 256 μs’dir. TMR0 saymaya başladığında ilk sayı h’00’ olduğundan TIMER0;

256 μs x 256 = 65536 μs(65.5ms) aralıklarla kesme sinyali verecektir.

2.2.10 Microcode Studio

PIC BASIC PRO programlama dilinde yazılan bir program Microcode Studio programında derlenmektedir (compile). Herhangi bir editörde yazılan PIC BASIC PRO kodları Microcode Studio programında derlenebildiği gibi, bu programın kendine has editörü de bulunmaktadır. Şekil 2.’de Microcode Studio programının ana sayfası görülmektedir.

Şekil 2. Microcode Studio ana sayfası

2.3. Programlama yazılımı (PROPIC)

PRO PIC, PIC BASIC ile hazırlanıp derlenen Programın PIC mikrodenetleyicisine yüklenmesi için gereken yazılımdır. PIC’in belleğine yüklenmek üzere, Microcode Studio programında yazılan program derlenmiştir. Hexadecimal kodlar ( derlenmiş program ) bilgisayarın paralel portuna bağlanan programlayıcı ( PROTOPIC ) aracılığı ile PIC’in program belleğine yazılmıştır. PROTOPIC programlayıcısının PROPIC adında bir programı bulunmaktadır. Şekil 3.’de PROPIC’in menüsü görülmektedir.

Şekil 3. PROPIC menüsü

2.4. Programlama devresi

PROPIC yazılımı ile uyumlu çalışan ve yazılan programın PIC mikrodenetleyicisine paralel porttan yüklemek için gerekli Şekil 4.’de gösterilen devredir.

Şekil 4. PIC programlama devresi

2.5. Kişisel bilgisayar

Bütün bu işlemleri yapabilmek için hiç de yabancı olmadığımız günümüzde hemen hemen her evde, ofiste bulunan bir kişisel bilgisayar kullanılmıştır. Yukarıda belirtilen işlemleri yapabilmek için bilgisayarın minimum, Pentium 166 MMX işlemciye ve 10 MB boş hard disk alanına sahip olması gerekmektedir.

2.6. Uygulama devresi

Uygulama devresi, enerji ve osilatör girişleri vs. gibi PIC’ in çalışması için gerekli olan gereksinimleri üzerinde bulunduran ve PIC ile sensörler, tuş takımı gibi maket üzerindeki elemanlar arasında iletişimi sağlayan tarafımdan gerçekleştirilmiş olan Şekil 11.’de görülen devredir.

2.7. Güvenlik sisteminin kurulacağı maket ev

Hırsız alarmı kurulacak maket ev Şekil 8.’de gösterilmiş olup Niğde Üniversitesi, Mühendislik-Mimarlık Fakültesi, Elektrik-Elektronik Mühendisliği Bölümü Mikroişlemci laboratuarında bulunmaktadır.

Şekil 8.’de gösterilen maket, kapı sensörlerinden, pencere sensörlerinden ve hareket sensörlerinden PIC’e bilgi aktarmak amacıyla yapılmıştır.

Maket’de Şekil 8.’den de görüleceği gibi 5 (beş) adet pencere sensörü, 1 (bir) adet kapı sensörü, 2 (iki) adet hareket sensörü, şifre girişi için Şekil 6.’da bağlantılarıyla birlikte görülen 1 (bir) adet tuş takımı, elemanların bağlantılarının yapıldığı ve bacak bağlantıları Tablo 1.’de verilmiş olan 25 (yirmi beş) pinli konnektör, alarm için Şekil 7.’ da görülen buzzer, uygulama devresi ve sensör enerji beslemeleri için Şekil 5.’de görülen 12 V güç kaynağı bulunmaktadır.

Şekil 5. 12 V DC güç kaynağı devre şeması

Şekil 6. 3*4 Matris tuş takımı şematiği ve PIC’e bağlantısı

Şekil 7. Buzzer bağlantı şeması

Şekil 8. Hırsız Alarm Sistemi İçin Yapılan Maket Ev

Tablo 1. Konnektör bacak bağlantı numaraları

Konnektör bacak
bağlantı numarası
Maket elemanları bağlantı
numarası
PIC 16F877 bacak
bağlantı numarası
1
Tuş takımı 22 (D3)
2
Tuş takımı 30 (D7)
3
Tuş takımı 21 (D2)
4 Tuş takımı 29 (D6)
5 Tuş takımı 20 (D1)
6 Tuş takımı 28 (D5)
7 Tuş takımı 19 (D0)
8 Pencere sensörü1 0 V
9 Pencere sensörü1 ------
10 Hareket sensörü1 ------
11 Hareket sensörü1 ------
12 Pencere sensörü2 ------
13 Pencere sensörü2 ------
14 Kapı sensörü1 5 V
15 Kapı sensörü1 0 V
16 Alarm (Buzzer) 0 V
17 Alarm (Buzzer) 35 (B2)
18 Pencere sensörü 5 ------
19 Pencere sensörü 5 ------
20 Pencere sensörü 4 ------
21 Pencere sensörü 4 ------
22 Hareket sensörü 2 ------
23 Hareket sensörü 2 ------
24 Pencere sensörü 3 ------
25 Pencere sensörü 3 5 V

BÖLÜM III

PIC 16F877 MİKRODENETLEYİCİSİNE AİT TEMEL BİLGİLER

3.1. PIC 16F877

PIC 16F877 mikrodenetleyicisi motor kontrolü uygulamalarından, günümüz araçları, uzaktan çalışan sensörler gibi bir çok alanda kullanılmaktadır. Özellikle I/O (giriş/çıkış) sayısının fazlalığı, EEPROM (flash) belleğe sahip olmaları, geniş hafıza, çalışma frekansı, TMR yazılım kesmeleri gibi geniş özelliklere sahip olmalarından dolayı tercih edilmektedir.

PIC16F877, belki de en popüler PIC işlemcisi olan 16F84’den sonra kullanıcılara yeni ve gelişmiş olanaklar sunmasıyla hemen göze çarpmaktadır. Program belleği FLASH ROM olan 16F877’de yüklenen program 16F84’de olduğu gibi elektriksel olarak silinip yeniden yüklenebilmektedir. Aşağıdaki Tablo 2.’de 16F877 ve 16F84 işlemcileri arasındaözellik karşılaştırması yer almaktadır.

Tablo 2. PIC 16F877 ve PIC 16F84 mikrodenetleyicilerin özellikleri

ÖZELLİKLER PIC16F877 PIC 16F84
Çalışma hızı DC - 20 MHz DC - 10 MHz
Program belleği 8Kx14 word Flash ROM 1Kx14 word Flash ROM
EEPROM Veri belleği 256 byte 64 byte
Kullanıcı RAM 368x8 byte 68x8 byte
Giriş/Çıkış port sayısı 33 13
Timer Timer0, Timer1, Timer2 Timer0
A/D çevirici 8 kanal 10 bit YOK
Capture/Comp/PWM 16 bit Compare 10 bit PWM çözünürlük YOK
Seri çevresel arayüz SPI(Master) ve I2C(Master/Slave)
modunda SPI portu
YOK
Paralel slave port 8 bit, harici RD,WR ve CS kontrollu YOK


3.2. PIC 16F877 Mikrodenetleyicisinin I/O (giriş/çıkış) portları

PIC 16F877 mikrodenetleyicisinde 40 (kırk) adet pin bulunmaktadır. Bu pinlerden 29 (yirmi dokuz) tanesi I/O olarak kullanılabilmektedir. Bu I/O portundan 8 tanesi B portunu, 8 tanesi D portunu, 6 tanesi A portunu, 4 tanesi C portunu, 3 tanesi E portunu oluşturur. Şekil 9.’da PIC 16F877’ nin pin görünüşü verilmiştir.

Şekil 9. PIC 16F877 Pin şematiği

3.3. PIC 16F877 mikrodenetleyicisinin besleme ve genel çalışma bağlantıları

PIC 16F877 nin besleme gerilimi 11, 12, 31, 32 numaralı pinlerden oluşmaktadır. 11 ve 32 numaralı pinler Vdd uçları olup bu uçlara 5 V luk gerilim uygulanır. 12 ve 31 numaralı pinler Vss uçları olup bu uçlara toprağa bağlanır. PIC’e ilk enerji verildiği anda gerilim dalgalanmasını önlemek amacıyla 100 nF kondansatör Vss ile Vdd arasına bağlanır. Kullanıcının istediği anda programı kesip başa döndürmesi için PIC’in 1 nolu bacağı (MCLR) kullanılır. Programın başa dönmesi için MCLR ucunun 0 V olması gerekmektedir ve dolayısıyla programın normal olarak çalışması için MCLR ucunun 5 V olması gerekir. PIC’in çalışması için PIC’e clock girişi olmalıdır. Bu girişler 13 numaralı (OSC1) ve 14 numaralı (OSC2) uçlardır. Bu girişlere 4 çeşit osilatör tipinden biri seçilerek bağlantı yapılabilmektedir. Osilatör çeşitleri Tablo 3.’de verilmiştir.

Tablo 3. Osilatör çeşitleri ve Özellikleri

Osilatör Tipi Tanımı Özelliği Frekans
LP Kristal osilatör, seramik rezonatör Asgari akım 40 Khz
XT Kristal osilatör, seramik rezonatör Genel amaçlı 4 Mhz
HS Kristal osilatör, seramik rezonatör Yüksek hız 20 Mhz
RC Direnç/Kapasitör zaman sabiti Düşük maliyet 4 Mhz

PIC 16F877 için yukarıda bahsettiğimiz bağlantılar kristal osilatör kullanılarak Şekil 10. de verilmiştir.

Şekil 10. PIC 16F877’ nin genel çalışma devresi

BÖLÜM IV

HIRSIZ ALARM SİSTEMİNİN ÇALIŞMA PRENSİBİ

Maket üzerinde bulunan kapı ve pencere sensörleri kapı ve pencereler kapalıyken kısa devre, kapı ve pencereler açıkken ise açık devre olurlar. Yani bu sensörlere 5 V luk bir gerilim uygulandığında bir uçtan uygulanan gerilimi olduğu gibi diğer uca iletirler fakat kapı veya pencerelerden herhangi biri açıldığında sensör kontağı açılacağından 5 V luk gerilimi iletmeyecektir. Hareket sensörleri de aynı mantıkla çalışmaktadırlar: hareket algılandığı zaman kapalı kontak açılarak enerjiyi kemektedir. Bu mantıkla bu uygulamada PIC mikrodenetleyicisinin komut alması ve program akışına göre alarm verme ya da alt programlara dallanma işlemi gerçekleştirilmektedir. Bu hırsız alarm sisteminin basitçe çalışma şekli şöyledir;

• Maket üzerinde bulunan tuş takımından 5 (beş) haneli şifre girilerek enter (#) tuşuna basılarak alarm kurulacak (Set), aynı şifre tekrar girildiğinde ve enter (#) tuşuna basıldığı zaman alarm Reset olacak.

• Önce yıldız (*) tuşuna basıldığında eski şifre doğru olarak girildikten sonra 5 haneli yenişifre girilip enter tuşuna (#) basılırsa şifre değişir yani şematik olarak (*) , “5 Haneli eski şifre” , (#) , “5 Haneli yeni şifre” , (#)

• Yıldız (*) tuşuna basıldıktan sonra yanlış şifre girildiğinde şifre değişimi gerçekleşmeyecek ve 5 (beş) defa hatalı şifre girilmesinden sonra alarm çalacak.

• Alarm set durumundayken pencere sensörlerinden veya hareket sensörlerinden hareket algılandığında alarm çalacak.

• Alarm Set durumundayken kapı sensöründen kapı açıldı bilgisi geldiğinde içeri giren kişinin doğru şifreyi girerek alarmı Reset etmesi için 3 (üç) dakika süresi vardır. Kişi bu süre içerisinde şifreyi doğru olarak giremediyse alarm çalacaktır. Kişi şifreyi doğru girerse alarm Reset olacaktır.

• Bu 3 (üç) dakika içerisinde diğer sensörlerden alarm çal bilgisi gelirse alarm 3 (üç) dakikalık sürenin dolmasını beklemeden alarm çalar.

• Hangi durumda olursa olsun kişinin şifreyi 5 (beş) defa yanlış girme hakkı vardır. Eğer kişi şifreyi 5 (beş) defa yanlış girerse hemen alarm çalar.

• Alarm çalarken şifre doğru girilirse alarm susacaktır.

BÖLÜM V.

HIRSIZ ALARM SİSTEMİ İÇİN PROGRAM ve DEVRE UYGULAMALARI

5.1. Uygulama Devresi

Hırsız alarm sistemi uygulaması için gerçekleştirilen maket ev üzerinde bulunan sensörler, tuş takımı, ve buzzer arasındaki iletişimi sağlamak ve uygun program yazılımını gerçekleştirebilmek için yapılan ve Şekil 11.’de görülen devredir. Devrede görülen L7805CV voltaj regülatörü güç kaynağından gelen 12 V luk gerilimi 5 V’a düşürüp sabitlemek için kullanılmıştır. Ayrıca 4 MHz kristal ve 22 pF kondansatör PIC’in clock darbesi için, kırmızı ve yeşil led ise ara işlem sinyal ledleri olarak kullanılmıştır. Maket içerisinde bulunan elemanlar ile bağlantı 25 (yirmi beş) pinli bir konnektörle yapılmaktadır Tablo 1.’de pin bağlantı numaraları verilmiştir.

Şekil 11. Uygulama devresi

5.2. Program Akış Şeması

Bu akış şeması bu uygulamadaki alarm sistemi için istenilen özelliklere göre hazırlanmış olup bu akış şemasına göre yazılmış olan program EK-A da verilmiştir.

Programlamaya başlamadan önce yapılması istenen programın akış şeması çıkarılarak daha rahat program yazımı sağlanmıştır.

Bu uygulamada program yazmaya başlarken PIC 16F877 tanıtılmıştır. Daha sonra giriş/çıkış atamaları register tanımlamaları yapılmıştır. Programın icrası sırasında herhangi bir hata ile karşılaşmamak için bütün registerler, tüm çıkışlar başlangıç olarak sıfırlanmıştır. Bu işlemlerden sonra esas program yazılmıştır. Maket üzerinde bulunan tuş takımından herhangi bir tuşa basılmadıysa program tuşa basılana kadar tuş tarama işlemine devem etmektedir. Eğer tuşa basıldıysa basılan tuşun kodunu kaydetme işlemi gerçekleşmektedir. Daha sonra basılan tuşların kodları kontrol edilmektedir. Eğer kodlar doğruysa alarm set/reset olmaktadır. Alarm set olduysa pencere ve kapı sensörlerinden bilgi okumaktadır. Sensörlerden alarm bilgisi geldiğinde alarm çalmaktadır. Bu sırada tuş takımı okunmaktadır. Doğru şifrenin girilmesiyle alarm susup sistem reset olmaktadır ve tuş okumaya devam etmektedir. . Şifre doğru girilmediyse alarm çalmaya devam etmektedir. Bu işlemlerin şematik gösterimi Şekil 12.’de verilmiştir.

Şekil 12. Program akış şeması

BÖLÜM VI

SONUÇ VE ÖNERİLER

Bu çalışmada PIC 16F877 mikrodenetleyicisi ile maket bir eve hırsız alarm sistemi tasarlanıp gerçekleştirilmiştir. Kontrol işleminin yapılabilmesi için ilgili bölümlerde açıklandığı gibi, program geliştirme yazılımı, programlama yazılımı, programlama devresi ve uygulama devresi gibi bazı donanım ve yazılımların kullanılması gerekmektedir.

PIC mikrodenetleyicilerinin, çok geniş ürün ailesine sahip olmaları, ucuz fiyatları, EEPROM belleğe sahip olmaları, kelime kapasitelerinin yüksek olması vs. gibiözelliklerden dolayı gün geçtikçe popülerlikleri artmaktadır.

Bu tez çalışmasında PIC 16F877 kullanılmasından dolayı uzun program yazılımlarına olanak sağlanmakla birlikte giriş/çıkış adetinin fazla olması da ayrı bir rahatlıktır. Bu tezçalışmasında PIC programlama dili olarak PIC BASIC kullanıldığı için program geliştirmek daha kolay ve daha hızlı olmaktadır.

Bu hırsız alarm sistemi uygulaması için yazılan programın .HEX uzantılı dosyasının büyüklüğü 2064x14 bit olduğundan ve de sonradan programın geliştirilmesine olanak sağlamak amacıyla PIC 16F877 tercih edilmiştir.

Sonuç olarak, günümüz koşullarında can ve mal güvenliğimizi korumak için ev veya işyerimize alarm sistemi kurdurma gereksinimi artmaktadır. Ama hırsız alarm sistemlerinin fiyatı pahalı olduğundan bu uygulama üç oda bir salon ev için hırsız alarm sistemini ucuz ve güvenilir şekilde gerçekleştirmek amacı ile yapılmıştır.

 

 

 

EKLER EK-A. BU UYGULAMA IÇIN HAZIRLANMIS .BAS DOSYASI
'****************************************************************
'* Name : selcuk.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2002 [set under view...options] *
'* : All Rights Reserved *
'* Date : 22.05.2002 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
include "modedefs.bas"
trisb = %00000010
trisd = %00011111
i var byte
ii var byte
iii var byte
iiii var byte
ikur var byte
hane1 var byte
hane2 var byte
hane3 var byte
hane4 var byte
hane5 var byte
hane6 var byte
hane7 var byte
hane8 var byte
kur var byte
hane11 var byte
hane22 var byte
hane33 var byte
hane44 var byte
hane55 var byte
d var word
beskur var byte
timerset VAR BYTE
timerset = 0
low portb.2
low portb.3
low portb.0
low portb.4
beskur = 0
i = 0
ikur = 0
ii = 0
iii = 0
iiii = 0
kur = 0
ON INTERRUPT GOTO timer1
OPTION_REG = %00000111
INTCON = %10100000
ENABLE interrupt
basla1:
	if kur = 30 then alarmkur1
basla: portd.7 = 0
	portd.6 = 0
	portd.5 = 0
	if portd.3 = 0 then ucuncu_sutun
	if portd.2 = 0 then ucuncu_sutun
	if portd.1 = 0 then ucuncu_sutun
	if portd.0 = 0 then ucuncu_sutun
	goto basla1
ucuncu_sutun:
	pause 30
	if hane1 = 11 then sifreyaz
	portd.7 = 1
	portd.6 = 1
	portd.5 = 0
	if portd.3 = 0 then ucuncu_tus
	portd.7 = 1
	portd.6 = 1
	portd.5 = 0
	if portd.2 = 0 then altinci_tus
	portd.7 = 1
	portd.6 = 1
	portd.5 = 0
	if portd.1 = 0 then dokuzuncu_tus
	portd.7 = 1
	portd.6 = 1
	portd.5 = 0
	if portd.0 = 0 then enter_tusu
ikinci_sutun: portd.7 = 1
	portd.6 = 0
	portd.5 = 1
	if portd.3 = 0 then ikinci_tus
	portd.7 = 1
	portd.6 = 0
	portd.5 = 1
	if portd.2 = 0 then besinci_tus
	portd.7 = 1
	portd.6 = 0
	portd.5 = 1
	if portd.1 = 0 then sekizinci_tus
	portd.7 = 1
	portd.6 = 0
	portd.5 = 1
	if portd.0 = 0 then sifir_tusu
birinci_sutun:
	portd.7 = 0
	portd.6 = 1
	portd.5 = 1
	if portd.3 = 0 then birinci_tus
	portd.7 = 0
	portd.6 = 1
	portd.5 = 1
	if portd.2 = 0 then dorduncu_tus
	portd.7 = 0
	portd.6 = 1
	portd.5 = 1
	if portd.1 = 0 then yedinci_tus
	portd.7 = 0
	portd.6 = 1
	portd.5 = 1
	if portd.0 = 0 then yildiz_tusu
	goto basla
'*************************************************************
ucuncu_tus:
	i = i + 1
	if i = 1 then hane1 = 3
	if i = 2 then hane2 = 3
	if i = 3 then hane3 = 3
	if i = 4 then hane4 = 3
	if i = 5 then hane5 = 3
	if i = 6 then hane6 = 3
	if i = 6 then kontrol
bas:
	if portd.3 = 0 then bas
	goto basla
altinci_tus:
	i = i + 1
	if i = 1 then hane1 = 6
	if i = 2 then hane2 = 6
	if i = 3 then hane3 = 6
	if i = 4 then hane4 = 6
	if i = 5 then hane5 = 6
	if i = 6 then hane6 = 6
	if i = 6 then kontrol
bas1:
	if portd.2 = 0 then bas1
	goto basla
dokuzuncu_tus:
	i = i + 1
	if i = 1 then hane1 = 9
	if i = 2 then hane2 = 9
	if i = 3 then hane3 = 9
	if i = 4 then hane4 = 9
	if i = 5 then hane5 = 9
	if i = 6 then hane6 = 9
	if i = 6 then kontrol
bas2: if portd.1 = 0 then bas2
	goto basla
enter_tusu:
	i = i + 1
	if i = 1 then hane1 = 10
	if i = 2 then hane2 = 10
	if i = 3 then hane3 = 10	
	if i = 4 then hane4 = 10
	if i = 5 then hane5 = 10
	if i = 6 then hane6 = 10
	if i = 6 then kontrol
bas4:
	if portd.0 = 0 then bas4
	goto basla
ikinci_tus:
	i = i + 1
	if i = 1 then hane1 = 2
	if i = 2 then hane2 = 2
	if i = 3 then hane3 = 2
	if i = 4 then hane4 = 2
	if i = 5 then hane5 = 2
	if i = 6 then hane6 = 2
	if i = 6 then kontrol
bas5:
	if portd.3 = 0 then bas5
	goto basla
besinci_tus:
	i = i + 1
	if i = 1 then hane1 = 5
	if i = 2 then hane2 = 5
	if i = 3 then hane3 = 5
	if i = 4 then hane4 = 5
	if i = 5 then hane5 = 5
	if i = 6 then hane6 = 5
	if i = 6 then kontrol
bas6:
	if portd.2 = 0 then bas6
	goto basla
sekizinci_tus:
	i = i + 1
	if i = 1 then hane1 = 8
	if i = 2 then hane2 = 8
	if i = 3 then hane3 = 8
	if i = 4 then hane4 = 8
	if i = 5 then hane5 = 8
	if i = 6 then hane6 = 8
	if i = 6 then kontrol
bas7: if portd.1 = 0 then bas7
	goto basla
sifir_tusu: i = i + 1
	if i = 1 then hane1 = 0
	if i = 2 then hane2 = 0
	if i = 3 then hane3 = 0
	if i = 4 then hane4 = 0
	if i = 5 then hane5 = 0
	if i = 6 then hane6 = 0
	if i = 6 then kontrol
bas8:
	if portd.0 = 0 then bas8
	goto basla
birinci_tus:
	i = i + 1
	if i = 1 then hane1 = 1
	if i = 2 then hane2 = 1
	if i = 3 then hane3 = 1
	if i = 4 then hane4 = 1
	if i = 5 then hane5 = 1
	if i = 6 then hane6 = 1
	if i = 6 then kontrol
bas9:
	if portd.3 = 0 then bas9
	goto basla
dorduncu_tus:
	i = i + 1
	if i = 1 then hane1 = 4
	if i = 2 then hane2 = 4
	if i = 3 then hane3 = 4
	if i = 4 then hane4 = 4
	if i = 5 then hane5 = 4
	if i = 6 then hane6 = 4
	if i = 6 then kontrol
bas10:
	if portd.2 = 0 then bas10
	goto basla
yedinci_tus:
	i = i + 1
	if i = 1 then hane1 = 7
	if i = 2 then hane2 = 7
	if i = 3 then hane3 = 7	
	if i = 4 then hane4 = 7
	if i = 5 then hane5 = 7
	if i = 6 then hane6 = 7
	if i = 6 then kontrol
bas11:
	if portd.1 = 0 then bas11
	goto basla
yildiz_tusu:
	i = i + 1
	if i = 1 then hane1 = 11
	if i = 2 then hane2 = 11
	if i = 3 then hane3 = 11
	if i = 4 then hane4 = 11
	if i = 5 then hane5 = 11
	if i = 6 then hane6 = 11
	if i = 6 then kontrol
bas12:
	if portd.0 = 0 then bas12
	goto basla
kontrol:
	i = 0
	if hane6 = 10 then karsilastir
	goto tekrarhak
karsilastir:
	if hane8 = 16 then yenisifregir1
karsilastir0:
	read 0,hane11
	if hane11 = hane1 then karsilastir1
	goto tekrarhak
karsilastir1:
	read 1,hane22
	if hane22 = hane2 then karsilastir2
	goto tekrarhak
karsilastir2:
	read 2,hane33
	if hane33 = hane3 then karsilastir3
	goto tekrarhak
karsilastir3:
	read 3,hane44
	if hane44 = hane4 then karsilastir4
	goto tekrarhak	
karsilastir4:
	read 4,hane55
	if hane55 = hane5 then setreset
	goto tekrarhak
setreset:
	if hane7 = 15 then yenisifregir
	if kur = 30 then reset
	if beskur = 10 then reset
	alarmkur:
	i = -1
	kur = 30
alarmkur1:
	high portb.0
	pause 25
	low portb.0
	pause 35
	if portb.1 = 1 then alarm
	goto basla
sifreyaz:
	i = 0
	hane1 = 30
	hane7 = 15
	goto basla
yenisifregir: hane8 = 16
	high portb.3
	pause 700
	i = 0
	goto basla
yenisifregir1:
	low portb.3
	write 0,hane1
	pause 10
	write 1,hane2
	pause 10
	write 2,hane3
	pause 10
	write 3,hane4
	pause 10
	write 4,hane5
	pause 10
	high portb.3	
	pause 500
	low portb.3
	hane8 = 25
	i = 0
	hane7 = 25
	goto basla
tekrarhak:
	hane7 = 25
	i = -1
	ii = ii + 1
	if ii = 5 then alarm
	high portb.3
	pause 60
	low portb.3
	goto basla
alarm:
	iiii = iiii + 1
	if iiii > 1 then cik
	if ii = 5 then ikur1
	i = 0
	goto ikur2
ikur1:
	i = -1
ikur2:
	ii = 0
	iii = 0
	beskur = 10
	timerset = 10
	hane7 = 25
	d = 0
	high portb.2
	low portb.0
	pause 10
cik:
	enable interrupt
	goto basla
reset: i = -1
	iii= 0
	ii = 0
	iiii = 0
	kur = 19
	beskur = 0
	low portb.0
	pause 10
	low portb.2
	pause 10
	timerset = 10
	hane7 = 25
	d = 0
	goto basla
DISABLE INTERRUPT
timer1:
	if kur <> 30 then CIKIS
	if timerset = 80 then cikis3
	if portd.4 = 1 then cikis1
	goto CIKIS
cikis1:
	timerset = 80
cikis3:
asm
	bcf status,2
	bcf status,0
endasm
	if portd.3 = 0 then CIKIS
	if portd.2 = 0 then CIKIS
	if portd.1 = 0 then CIKIS
	if portd.0 = 0 then CIKIS
asm
	bcf status,2
	bcf status,0
endasm
	d = d + 1
	if d > 35000 then say
	GOTO CIKIS
say: d = 0
	timerset = 10
	iii = iii + 1
	if iii = 1 then CIKIS
	i = 0
	ii = 0
	iii = 0	
	hane7 = 25
	high portb.2
	pause 10
CIKIS:
	RESUME
	ENABLE INTERRUPT
END

KAYNAKLAR

1. Altınbaşak O., 2000, Mikrodenetleyiciler ve Pic Programlama, Atlaş Yayınevi, İstanbul
2. Turgutlu H.F., 2002, Pic Mikrodenetleyicisi Kullanarak Deneysel Bir Endüstriyel Sistemin kontrol edilmesi. Yüksek Lisans Tezi, Niğde
3. Microchip, 2000, Microchip Tecnical Library CD-ROM, Microchip Tecnology Inc.
4. Antrak Gazetesi, Pic Uygulamaları, http://www.antrak.org.tr

Etiketler :