323
PIC 16F84 MİKRODENETLEYİCİ TEMEL BİLGİLERİ, PROGRAMLANMASI VE UYGULAMALARI

Pic 16f84 Mikrodenetleyici

Embed Size (px)

DESCRIPTION

PIC 16F84 MİKRODENETLEYİCİ TEMEL BİLGİLERİ, PROGRAMLANMASI VE UYGULAMALARI

Citation preview

Page 1: Pic 16f84 Mikrodenetleyici

PIC 16F84

MİKRODENETLEYİCİ TEMEL BİLGİLERİ, PROGRAMLANMASI VE UYGULAMALARI

Page 2: Pic 16f84 Mikrodenetleyici

Sunuş Kişisel bilgisayarları kullandığımızda genellikle onun donanımı hakkında fazlaca

düşünmeyiz. Sadece kullanma yöntemlerini öğrenmeye çalışırız. Çünkü bilgisayarlarla interneti kullanmayı veya word, excel, powerpoint programları bizler için daha önem taşırlar. Biz burada mikrodenetleyicileri daha sonra öğrenmeye çalışacağız. Mikrodenetleyicileri anlayıp öğrenebilmek için aşağıdaki basamakları takip etmemiz gerekmektedir. (1) İfade değerinin şekli ( Binary sayı, Hexadecimal sayı, Decimal sayı ) (2) Mikrodenetleyicileri kullanabilmek için Assembler dili (3) Elektronik malzemeler ve karakteristikleri hakkında bilgi ( IC, LED, diyot, direnç, transistör, vb.)

Endüstriyel matematik dersinde bu sayısal değerlerin ve bunların birbirlerine dönüşümleri ile çarpma, toplama, bölme ve çıkarma gibi işlemlerin nasıl olduğunu öğrendik. Bu ders kitabında bu değerleri kullanmayı dahada ileri seviyelere ulaştıracağız.

Assembler dili mikrodenetleyici programları için kullanılmaktadır. Ancak assembler dili oldukça zor olmasına rağmen temel oluşturduğundan dolayı pek çok insan tarafından kullanılmaktadır. Çünkü assembler dilini kullanabilmek için donanım bilgisine ihtiyaç vardır. Makine dilini anlayabilirsek bu mikrodenetleyici dilini anlayabiliriz. Assembler dili makine diline benzerlik gösterir. Bu dilde sık sık register, adres, byte, flag, vb. gibi terimler kullanmaktayız. Üstelik program hatasız olmalı ve sonunda derlememiz gerekmektedir. Bu program dili fazla esnek değildir. Program yazarken mikrodenetleyici işlemcisinin data bilgilerini kullanırız. Bu nedenle hata yapmamamız gerekir. Assembler dilinde bir program yazacağımızda komutlarının görevlerini iyi anlamamız gerekmektedir. Assembler veya makine dilinin bu kadar zor ve dikkat edilmesi gereken bir programlama yöntemi olmasına rağmen neden bu dil günümüzde de tercih edilmekte olduğunu aşağıdaki maddelerle sıralayabiliriz..

(1) İşlem hızı çok hızlıdır. (2) Assembler dili fazla hafıza kullanmaz. (3) Makine dili ile direk bağlantılı olduğundan kontrol için uygundur.

Mikrodenetleyici teknolojisi aracılığı ile PIC in Assembler dilini öğreneceğiz. Her

nekadar PIC programlama gelecekte C dili ile kontrol edilip yazılsada assembler dili temel bilgi olarak çok önem taşımaktadır. Bununla birlikte elektronik parçaların özelliklerini ve çalışma prensiplerini eğitim setiyle daha iyi öğrenmiş olacağız. Buna sensörlerde dahil olmaktadır. Mikrodenetleyici teknolojisini Otomasyon teknolojisine geçişte bir adım olarak kullanmaktayız.

Page 3: Pic 16f84 Mikrodenetleyici

PIC mikrodenetleyicileri PIC mikrodenetleyici eğitim seti PIC çizgi takip eden robot

Page 4: Pic 16f84 Mikrodenetleyici

İ Ç İ N D E K İ L E R Bölüm 1 Mikrodenetleyicinin temeli 1 - 11 1 Mikrodenetleyici

(1) Bilgisayarın temel donanımı 2 (2) Mikrodenetleyici işletimi 3 (3) Hafızası ve fonksiyonları 3

2 PIC mikrodenetleyici

(1) PIC in yapısı 5 (2) PIC çeşitleri 6 (3) PIC in yapısı 6 (4) PIC programının geliştirilmesi 7

3 Sayıların ifadesi

(1) Sayıların tipi 9 (2) Binary dijit nedir? 10 (3) Hexedesimal dijit nedir? 11 (4) Binary, desimal, hexedesimal sayıların dönüşümleri 11

Bölüm 2 PIC yazıcısı ve eğitim seti yapmak 13 - 25 1 Elektronik elemanların anlatımı

(1) Transistör 14 (2) LED ( light emitting diode )( Işık yayan diyot ) 15 (3) Diyot ( anahtar diyot ) 15 (4) Seri regülatör ( Gerilim düzenleyici ) 16 (5) Kristal osilatör 17 (6) Transistor düzeni ( ULN2803 ) 17

2 PIC eğitim setinin yapılışı

(1) Elektronik devre üzerinde deliklerin delinmesi 18 (2) Alt taban ( Şeffaf ) deliklerinin açılması 19 (3) Lehimleme yöntemi 19 (4) Elektronik parça elemanlarının yerleştirilmesi 20 (5) PIC yazıcısının devre diagramı 21 (6) PIC yazıcı parçalarının düzenini gösteren şema 21 (7) PIC eğitim seti devre diyagramı 22 (8) PIC eğitim seti parça düzeni şeması 22 (9) Parça listesi 23 (10) Bağlama aparatının yapımı 24 (11) Bilgisayar bağlantı kablosunun yapımı 25

Page 5: Pic 16f84 Mikrodenetleyici

Bölüm 3 PIC’in yapısı 26 - 39 1 PIC16F84

(1) PIC16F84 26 (2) PIC16F84’ ün yapısı 27 (3) Clock düzeni / Komut süresi 28 (4) Komut akışı / Bilgi iletim kanalı 28 (5) W yazmacı ( register ) 29 (6) Program belleği ( memory ) 30

2 Veri belleği ( DATA memory )

(1) Veri belleği 31 (2) Yığın hafıza ( Stack Memory ) 32 (3) Program sayıcı ( Program counter ) 32 (4) STATUS Yazmacı ( Register ) 33

3 I / O port ( input / output )

(1) Giriş İşlemi 34 (2) Çıkış işlemi 35

4 Reset Devresi (1) Resetleme İşlemi ( Power on Reset ) ( POR ) 36

(2) Butonla Reset 37 5 Osilatör özellikleri

(1) osilatör modelleri 38 (2) Kristal / seramik resonator işlemi 38 (3) RC Osilatör 39

Bölüm 4 PIC Programlamının temeli 40 - 124 1 MPLAB (MPASM) ‘ı nasıl Kullanırız ?

(1) Basit bir program 40 (2) Sayıların ifade edilmesi 40 (3) Programın temel ifade şekli 41 (4) Program yazmanın yöntemi 42 (5) MPLAB nasıl kullanılır ? 43 (6) MPASM 56

2 PIC yazıcı setini nasıl kullanırız ?

(1) PIC yazıcının ( writer ) kullanılması 57 (2) Bağlantısı kablosunu PC’ye bağlayınız. 57 (3) PICWW ( PIC yazıcı programı ) nasıl kullanılır ? 58 (4) Bu programın sonuç ifadesi 65

3 Programın açıklanması

(1) Program Listesi ve akış diyagramı 66 (2) Yöntem şartnamesi ( Specification of processor ) 67 (3) Port’un kurulumu 68

Page 6: Pic 16f84 Mikrodenetleyici

(4) LED‘lerin yakılması 71 Alıştırma 4-1 72 Alıştırma 4-2 72

4 İki veya daha fazla LED‘ in yakılması

(1) Program 4-1 73 (2) Include dosyası 73 (3) MOV komutu 75 Alıştırma 4-2 76 Alıştırma 4-3 76

5 Timer Programı (DECFSZ) (1) Zamanlayıcı ( timer ) program 77 Alıştırma 4-4 80 (2) Program 4-2 81 Alıştırma 4-5 83 Alıştırma 4-6 83

6 LED lerin ardışık olarak yanması ( Dönüş uygulaması ) (1) Dönüş programı 1

1) Dönüş uygulaması 84 2) Program 4-3 85 3) Akış diyagramı 86 Alıştırma 4-7 86

(2) Dönüş programı 2 1) BTFSC komutun uygulaması 87 2) Program 4-4 88 3) Akış diyagramı 89 Alıştırma 4-8 90 Alıştırma 4-9 90

7 İncrement and decrement uygulaması ( INC , DEC ) (1) Program 4-5

1) Akış diyagramı 91 2) Program yazılışı 92 Alıştırma 4-10 92

8 Anahtarlama arabirimi (1) Anahtarlama devresi 93 (2) Programın açıklanması 93 (3) Program 4-6 94 (4) Akış diyagramı 95 Alıştırma 4-11 95 Alıştırma 4-12 96

9 RETLW komutunun uygulaması

(1) Retlw işlem sırası 97 (2) Program 4-7 97 Alıştırma 4-13 98

Page 7: Pic 16f84 Mikrodenetleyici

10 Buton arabirimi 2 (1) chattering 100 (2) Alıcı ile buton uygulaması

1) Klasik tip buton devresi 100 2) Kondansatörlü buton devresi 100 3) Schmidt Trigger ters çeviricili devre 101

Alıştırma 4-14 (1) Alıştırmanın açıklanması 101 (2) Alıştırma 4-14 ( akış diyagramı ) 102 (3) Buton uygulama devresi 103 (4) Buton uygulama devresinin üstten görünüşü 103 (5) Deneyin sonucu 104

11 Uygulanabilir buton programı (1) Uygulanabilir buton programında izlenecek yol 105 Alıştırma 4-15 106

12 Mantıksal işlemler (AND,OR,XOR) (1) AND işlemi

1) ANDLW 107 2) ANDWF 107 3) Program 4-8 108 4) Akış diyagramı 108 5) Program 4-8 listesi 109

(2) IOR işlevi 1) IORLW 110 2) IORWF 110 3) Program 4-9 111 4) Akış diyagramı 111 5) Program 4-9 listesi 112

(3) XOR işlevi 1) XORLW 113 2) XORWF 113 3) Program 4-10 114 4) Akış diyagramı 114 5) Program 4-10 listesi 115

Alıştırma 4-16 115

13 Aritmetik komutlar ( ADD , SUB komutları) (1) ADD komutları

1) Program 4-11 116 2) Akış diyagramı 116 3) Program 4-11 listesi 117

Alıştırma 4-17 117 Alıştırma 4-18 117 (2) İki bit bilginin toplanması

1) Düşünme yöntemi 118 2) Akış diyagramı 118 3) Program 4-12 listesi 120

(3) Çıkartma komutları 1) SUBLW 121

Page 8: Pic 16f84 Mikrodenetleyici

2) SUBWF 121 3) Çıkarma yöntemi 122 4) Program 4-13 122

5) Program 4-13 listesi 123 Alıştırma 4-19 123 Alıştırma 4-20 123 6) SUB komutunu çeşitli şekillerde karşılaştırması 124 Alıştırma 4-21 124

Bölüm 5 PIC Program Uygulamaları 125

1 Yedi Segment kod çözücü ( Segment decoder ) 125 - 129 (1) Yedi segment kod çözücüler 125 (2) Programın planlanması 126 (3) Yedi segment programın akış diyagramı 128 (4) Programın yapılması ve uygulanması 129

2 Röle kontrol (Relay control ) 130 - 135 (1) Mekanik röle 130

1) Röle deney devresi 131 2) İletken bağlantısı 132 3) Program yapımı 133 Alıştırma 5-1, 5-2, 5-3 133

(2) SSR ( Solid State Relay ) 1) SSR 134 2) İletken bağlantısı 134 3) Program yapımı 135 Alıştırma 5-4, 5-5, 5-6, 5-7 135

3 İşlemsel Yükselteçler (“Operational amplifier” Op-amp) 136 - 147 (1) İşlemsel yükselteçler 136 (2) Tersleyen yükselteç devresi 137 (3) Tersleyen yükselteç devresi

1) Tersleyen yükseltecin yükseltme faktörü 137 2) Tersleyen yükselteç devresine uygulama 138

(4) Terslemeyen yükselteç devresi 1) Terslemeyen yükselteçlerin yükseltme faktörü 141 2) Terslemeyen yükselteç devresine uygulama 141

(5) Karşılaştırıcı ( Comparator ) olarak kullanılması 1) Karşılaştırıcı 144 2) Karşılaştırıcı uygulaması 144

Alıştırma 5-8 146 Alıştırma 5-9 147 (6) Voltaj takip devresi 147

4 DA konvertör 148 - 156 (1) DA konvertör prensibi 148 Alıştırma 5-10, 5-11 149 (2) DENEY 1

1) DA konverterin çıkışı 150 2) DA konvertörün deneyi 150

(3) Testere dişli dalga yapımı 154

Page 9: Pic 16f84 Mikrodenetleyici

Alıştırma 5-12 156

5 AD konvertör 157 - 163 (1) AD konvertör prensibi 157 (2) AD konvertör tipinin ardarda tahmin prensibi 159 (3) Program yapımı 161 Alıştırma 5-13, 5-14 163

6 Seri iletişim (RS-232C) 164 - 182 (1) Bilgi iletişiminin ana hatları 164

1) Bilgi iletişim sistemi 164 2) Transmisyon sinyal sistemi 165 3) RS232C 165 4) Seri komünikasyonun formatı 166 5) Seri komünikasyon uygulama devresi 168

(2) Seri komünikasyon programı 1 1) Program 1 169 2) Program mantığı 170 3) Programın akış diyagramı 170 4) Program1 örneği 172 5) Teraterm programını nasıl kullanırız ? 173 6) Programın uygulanması 175

Alıştırma 5-15 175 (3) Seri komünikasyon programı 2

1) Program 2 hakkında 176 2) Program mantığı 176 3) Program2 örneği 176 4) Program uygulaması 180 Alıştırma 5-16, 5-17, 5-18 181-182

7 Step Motor kontrolü 183 - 197 (1) Step motorlar hakkında genel bilgiler

1) Her adımın derecesi 183 2) Uçlarının tesbiti 184 3) Step motorların temel özellikleri 184 4) Çalışma prensibi 185 5) Unipolar Step motor ( 1 fazlı sürme metodu ) 186 6) Unipolar Step motorun 2 fazlı olarak sürülmesi 187 7) Unipolar Step motorların 1-2 fazlı olarak sürülmesi 188

(2) Step motor uygulaması1 1) Step motor uygulama devresi 189 2) Step motorun programı 191 3) Programın akış diyagramı 191 4) Program listesi 192

Alıştırma 5-19, 5-20, 5-21, 5-22 194 (3) Step motor uygulaması 2 ( Pozisyon kotrol )

1) Foto interrupter 195 2) Program 195 3) Programın akış diyagramı ( Alıştırma 5-23 ) 196

Page 10: Pic 16f84 Mikrodenetleyici

8 DA motor kontrolü 198 - 211 (1) DA motorları hakkında genel bilgi

1) Transistör ve FET ile DA motor kontrolü yapabiliriz. 198 2) H köprü devresi 199 3) Motor sürücü 199 4) DA motorlarında hız kontrolü

(a) Gerilim kontrolü 200 (b) PWM kontrol (Faz genişlik kontrollü ) 201

5) DA motor ders eğitim setinin devre şeması 202 (2) Eğitim malzemesi

1) Motor eğitim malzemesi 203 2) DA motor eğitim seti 203

(3) DA motor programı 1) Program1 ( FET ile ) ( Uygulama 5-24 ) 204 2) Program2 ( TA7257 ile ) ( Uygulama 5-25 ) 204 3) Program 3 ( PWM programı ) 205

(a) PWM Dalgası ( PB1 ) 205 (b) PWM dalgasını nasıl oluşturuz. 205 (c) Program3’ün akış diyagramı 206 (d) Program3 listesi 207 (e) Program3’ün uygulama sonucu 209

Uygulama 5-26 210 Uygulama 5-27 211

9 Kesme ( İnterrupt ) 212 - 232

(1) Kesme 1) Kesme kavramı 212 2) TMR0 kesme 213 3) Dış kesme RB0/INT ucu 213

(2) INTCON Yazmacı ( register ) ( Adres 0Bh,8Bh ) 214 (3) OPTION_REG REGISTER ( ADRES 81h ) 215 (4) RB0/INT kesme

1) RB0/INT kesme programı 217 2) programın akış diyagramı 218 3) RB0 / INT kesmesi için program 219

Uygulama 5-28 221 Uygulama 5-29 222 (5) TMR0 (Timer0 zaman aşımı kesme)

1) Timer0 zaman aşımı kesme hakkında 223 2) Zaman aşımı frekans nasıl elde edilir ? 225 3) Interval zamanlayıcı ( timer ) 226

(6) Timer0 program1 1) Akış diyagramı 227 2) Timer0 program1 228

(7) Timer0 program2 ( TMR0’ın Initial değeri setleme ) 1) Timer0 program2 230

Uygulama 5-30, 5-31 232

Page 11: Pic 16f84 Mikrodenetleyici

10 Çizgi takip eden Robot ( Line trace robot control ) 233 - 247 (1) Çizgi takip eden robot anlatımı

1) Çizgi sensörü 233 2) Foto transistor uygulaması 235 3) Foto IC ( Hamamatsu S7136 ) 238

(2) Çizgi takip eden robot 1) Çizgi takip eden robot devre şeması 239 2) Çizgi takip eden robotun programı 240

(a) Çizgi takip eden robotun temel çalışma prensibi a) PIC ucu ( PORT ) 240 b) TA7257P ( Toshiba ) 240 c) Temel program 1 ( İleri hareket ) 241 d) Temel program 2 243

3) Çizgi takip eden program 1 ( Uygulama 5-33 ) 244 4) Program 1 ‘in akış diyagramı 245

Uygulama 5-34 246

11 Müzik programı 247 - 251 (1) Müzik programı 247 (2) Müzik programı

1) Program çerçevesi 248 2) Program listesi 249

Uygulama 5-35 250 (3) Müzik program 250 Uygulama 5-36 250

Eki PIC komutlarının açıklanması 251 - 286 Include dosyalar 287 - 291 Bilgi sayfaları 292 - 309 Öğrenim seti 310

Page 12: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

Bölüm 1 Mikrodenetleyicinin temeli

İlk mikrodenetleyici seti (NEC TK-85)

Mikrodenetleyici chipleri

1

Page 13: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

1 Mikrodenetleyici

Mikrodenetleyici gerçekte küçük bir bilgisayardır. Çevremizde o kadar çok

mikrodenetleyici kontrollü elektronik cihaz vardır ki bunlara örnek televizyon, radyo, fax-modem, oyuncaklarda, VCR, kamera vb. verebiliriz. Bunları aşağıda ( Şekil 1-1 ) de görmektesiniz.

micro

computer

Şekil 1-1 Çevremizde kullanılan aktif Microdenetleyici örnekleri (1) Bilgisayarın temel donanımı

Bütün bilgisayarlar verilen programla çalışmaktadır. Buna sistem programının kayıt edilmesi denir.

Genel mikrodenetleyici sistemleri şekil 1-2 de görülmektedir. Bu mikrodenetleyiciler CPU ( Merkezi işlem birimi ) , ROM ( Sadece okunabilen bellek ), RAM ( Rastgele erişilebilen bellek ) ve LSI ( Arabirim ) den oluşmaktadır.

Clock

CPUInterface

Adress BUS

Data BUS

ROM RAM

input/output

LSI

Şekil 1-2 Genel mikrodenetleyici sistemleri

2

Page 14: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

8-bitlik bir mikrodenetleyici dizayn etmek istediğimizde ilkönce CPU seçmemiz

gerekmektedir. Günümüzde popüler CPU lar i8085(Intel), Z80, M6809(Motorola) dır. En popüleri Z80dir. Z80 i8085’ in tüm özelliklerini kullanmakta bu nedenle çok sayıda komuta sahip olmaktadır. Ancak mikrodenetleyicilar sadece CPU ile çalışmamaktadır. Mikrodenetleyici sistemlerinin oluşabilmesi için I/O ( Giriş Çıkış ) birimlerinin yanı sıra adres tanımlama devresine ( burada RAM ve ROM bellek adreslerini ve arabirimi seçebiliriz ), işlem hızını sağlayan clock devresine ve LSI ( 8255,Z-80PIO ) arabirimine ihtiyaç bulunmaktadır Bu nedenle LSI ve bellek mutlaka mikrodenetleyici sistemleri için gereklidir. (2) Mikrodenetleyici işletimi

Mikrodenetleyiciler üç birimi sürekli tekrar ederler.

a) Alma ( Fetch )

Hafızaya yüklenmiş olan program komutlarını alır. b) Kod çözme ( Decode )

Yazmaçtaki komutları kod çözücü ( decoder )

yardımıyla çözer. c) Uygulama ( Execution )

Çözülen komutları uygular ve bu işlemi sürekli

tekrar eder.

Fetch

Decode

Execution

Şekil 1-3 Mikrodenetleyici devresi (3) Hafızası ve fonksiyonları

Mikrodenetleyicinin ana hafızası olarak genellikle IC hafıza ( RAM or ROM ) kullanmaktadır.

a) ROM (Sadece okunabilir bellek) ROM sadece dış verileri okumak üzere tasarlanmıştır, CPU ve IC ile buna veri yazılımı

gerçekleştirilemez. Bilgileri üzerinde düzenli bir şekilde saklamaya yarar ve elektrik kaynağı kesilse bile üzerindeki bilgiler silinmez, ROM bellek içeriği kalıcı olarak saklanır ROM üç ana çeşitten oluşmaktadır.

3

Page 15: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

Mask ROM

IC işleminin içeriğini düzenleyebildiğimiz bellek çeşididir. Yeniden yazılması mümkün değildir.

PROM (Programlanabilir ROM) Kullanıcı tarafından yazılabilen bellektir. Yeniden yazılması mümkün değildir EPROM (Silinebilir PROM)

Kullanıcı tarafından tekrar tekrar yazılabilmekte veya silinebilmektedir.

b) RAM ( Rastgele erişilebilen bellek )

RAM kullanıcıların belleği özgürce okuyup yazabilmesi için bir IC belleğidir. Fakat elektrik kaynağı kesildiğinde bütün bilgiler bellekten silinir. Bu nedenle RAM aritmetik işlemlerin sonucunu geçici süreler içerisinde bellekte depolama işlemine yarar

Mask ROM

Üretim işleminde yazılmıştır, içerikler silinemez.

PROM

PROM yazıcısı ile yazılmıştır silinemez.

UV-EPROM

PROM yazıcısı ile yazılmıştır ultraviole ışınları ile silinebilir.

ROM

EEPROM

PROM yazıcısı ile yazılmıştır, elektrik sinyalleri ile silinebilir.

Statik RAM

Kullanışı basit ve kolaydır ancak pahalıdır. RAM Dinamik RAM

Kullanışı zordur ancak pahalı değildir.

Tablo 1-1 Bellek Çeşitleri

4

Page 16: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

2 PIC mikrodenetleyici (1) PIC’ in yapısı

PIC Mikrodenetleyici İngilizce ( Peripheral Interface Controller ) kelimesinin başharflerinden oluşmaktadır. Anlamı ise dış üniteleri denetleyen arabirimdir. Bunun aracılığı ile çeşitli alıcıları ( lamba, role, motor vb. ) kolaylıkla kontrol edebiliriz.

C P U

ROM

RAM

I / O port

P I C

Şekil 1-4 PIC paketi

PIC mikrodenetleyici bir entegre şeklinde olup I/O giriş ve çıkış kontrollerini çok kolay ve hızlı bir şekilde yapabilmekteyiz Bu nedenle robot gibi ufak sistemleri kontrol edebiliriz.

PIC mikrodenetleyici aşağıdaki özelliklere sahiptir. (a) Komut sayısı diğer CPU lardan daha azdır. PIC ler RISC( Reduced Instruction Set Computer ) denilen bir sistem mantığı ile

üretildiklerinden komut sayıları azdır ( sedece 35 Adet ) ve basittir. Bunun yanısıra Z-80 CPU da 158 adet komut sayısı mevcuttur.

(b) Küçük gerilim altında işlem yapmak mümkündür. PIC ler piyasada bulunan kuru pil olarak tabir ettiğimiz bataryalarla çalışabilmektedir.

Çünkü çalışma gerilimleri 2 ila 6 Volt arasındadır. (c) Çıkış pininden yüksek akım alınabilir.

PIC’ in uçlarına direk olarak LED sürebiliriz çünkü PIC yaklaşık 20mA çıkışı güvenli bir şekilde sağlayabilir.

(d) Fiyatı oldukça ucuzdur. PIC16F84 normal bir PIC mikrodenetleyici olup CPU lardan çok daha ucuza satın

alabiliriz.

Şekil 1-5 PIC16F84 ve diğer PIC’ ler.

5

Page 17: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

(2) PIC çeşitleri PIC yaklaşık 3 ayrı katagoride inceleyebiliriz. 1) Düşük seri 12 Bit kelime boyuna sahip eski kuşak PIC’ lerdir. ( model numarası: 12C5xx,16C5x ) 2) Orta seri 14 Bit kelime boyuna sahip PIC’ lerdir. Bu seri oldukça kullanışlı ve tercih edilen bir seridir. Analoğu digitale çeviren ve seri porta sahip PIC tir. Aşağıdaki PIC ler bu serinin elemanlarıdır. ( model numarası:12C6xx,16C55x,16C62x,16C6xx,16C7xx,16F8xx,16C92x ) 3) Yüksek son seri 16 Bit kelime boyuna sahip PIC’lerdir. Yüksek performanslı olan bu PIC lerin kullanımı zordur. ( model numarası:17Cxxx,18Cxxx )

PIC çeşitleri İsmi bilgi biti Hafıza kapasitesiHafıza tipi A/D I/O port paketi

PIC16C54 12 0.5 E 12 18P DIP

PIC16C56 12 1 E 12 18P DIP

PIC16C57 12 2 E 20 28P DIP

PIC16C64A 14 2 E 33 40P DIP

PIC16C71 14 1 E 4CH 13 18P DIP

PIC16C74 14 4 E 8CH 33 40P DIP

PIC16F84 14 1 EE 13 18P DIP

PIC16F873 14 4 EE 5CH 22 28P DIP

PIC16F874 14 4 EE 8CH 33 40P DIP

PIC16F877 14 8 EE 8CH 33 40P DIP

* Hafıza tipi E: EPROM EE:EEPRPM U:UVEPROM

Tablo 1-2 Orta seri PIC çeşitleri (3) PIC in yapısı

Genel mikrodenetleyicilerin yapısı 'Von Neumann mimarisi ' olarak adlandırılır. Bilgi çıkışları birlikte bir hafızadadır ve ALU bir data bus ile hafıza ( memories ) arasındadır. ( Şekil 1-6 ) Alışılagelmiş mikrodenetleyiciler bu 'Von Neumann ‘ mimarisindedir. ( bus: Sinyal hattı bus olarak adlandırılır. Örneğin 8 bitlik bilgisayar data bus 8 sinyal hattına sahiptir. )

6

Page 18: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

peripheral

circuit

periph

circuit

mai

memo

instruction

decode & control

register

A L U

DATA bus

LogicALU:Arithmetic

Unit

eral

n

ry

Şekil 1-6 Von Neumann mimarisi

PIC Harvard mimarisine sahiptir ve data hafızası ile program hafızası vardır. (Şekil 1-7) Data hafızası bilgi yoluna ( bus ), program hafızası ise program yoluna ( bus ) sahiptir. Bu iki yol ( bus ) birbirlerinden tamamen bağımsızdırlar. İç yapısı basittir ve işletimi hızlıdır. Program hafızası bağımsız olduğundan dolayı kapladığı alanda bağımsızdır. Ve bu tanımlar birtek kelimeylede ifade edilebilir.

peripheral

circuit

DATA memory

instruction

decode & control

register

A L U

Program Memor

DATA bus Program bus

y

Şekil 1-7 Harvard mimarisi (4) PIC programının geliştirilmesi

PIC programının geliştirilmesi Şekil 1 – 8 gösterilmiştir. 1) Kişisel bilgisayar OS(operating system)( işletim sistemi ): Windows 95,98,Me Specification ( Özellikleri ): Pentium 75MHz ve üstü, paralel port , seri port 2) PIC programlama yazılımı (MPLAB - IDE) MPLAB PIC’ i programlamak için windows altında çalışan bir yardımcı yazılımdır. MPLAB IDE (Integrated Development Environment) olarak da adlandırılır. Microchip Technology

7

Page 19: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

Co. (United States) firması tarafından geliştirilmiştir Bu program internetten ücretsiz indirilebilir. Web adresi http://www.microchip.com 3) PIC’e windows da yazdırma programı ( Ic – prog )

PIC’ e programı yazdırmak için özel bir elektronik devreye ihtiyaç vardır. Bu devreyle PIC’ e program yazdırma işlemini ic - prog yazılımı gerçekleştirir. Bu program internetten ücretsiz indirilebilir. Web adresi http://www.ic-prog.com Programı ilk defa çalıştırılacağında bazı ayarları yapmanız gerekmektedir. Bu ayarlar Bölüm 4’ de açıklanmıştır. 4) PIC yazıcı ve PIC Eğitim seti

PIC yazıcısı elektronik bir devre olup PIC’ e yazılmış programı yükleme işine yarar. PIC eğitim seti ise yazılan programın doğru olup olmadığını kontrol etmek için yapılmış elektronik bir devredir.

PIC YAZICIPIC Eğitim seti

MPLAB

Windows için PIC yazıcı

MPLAB* Kaynak dosya* Derleme* HEX Dosya

* Program YazımıYükleme

Windows için PIC yaz ıcı

Şekil 1-8 PIC programının geliştirilmesi

8

Page 20: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

3 Sayıların ifadesi (1) Sayıların tipi

Microdenetleyiciler binary, decimal ve hexedesimal sayı sistemlerini kullanırlar. Binary sayı sistemi mikrodenetleyicilerin anlayabildiği bir sayı kod sistemidir. Desimal sayı sistemi bize yabancı olmayan bir sayı sistemidir. Hexedesimal sayı sistemi ise bizim binary sayı sistemimizi kolayca anlamamıza yardımcı olan bir sistemdir. Bunun yanısıra kullanıcının ( programlayıcının ) bu üç sayı sistemi arasındaki ilişkiyi çok iyği bilmesi gerekir ve bunlar arasında dönüştürmeleri kolayca yapabilme bilgisine sahip olmaları gerekmektedir.

Desimal sayılar Binary sayılar Hexadecimal sayılar

0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F

Tablo 1-3 Desimal, binary ve hexedesimal karşılıkları tablosu

Binary ve decimal sayı sitemlerini öğrendikten sonra bunların birbirlerine dönüşüm metodlarını öğrenmemiz gerekmektedir.

9

Page 21: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

dijital sayı

maksimum kısaltma dijital sayı maksimum kısaltma

1 2 17 131072 128K 2 4 18 262144 256K 3 8 19 524288 512K 4 16 20 1048576 1M 5 32 21 2097152 2M 6 64 22 4194304 4M 7 128 23 8388608 8M 8 256 24 16777216 16M 9 512 25 33554432 32M

10 1024 1K 26 67108864 64M 11 2048 2K 27 13217728 128M 12 4096 4K 28 268435456 256M 13 8192 8K 29 536870912 512M 14 16384 16K 30 1073741824 1G 15 32768 32K 31 2147483648 2G 16 65536 64K 32 4294967296 4G

Tablo 1-4 Digital numara ve onların maksimum değerleri (2) Binary dijit nedir?

“0” ve “1” den meydana gelen özel bir sayı sistemidir. Gerçekte desimal sayı

sistemlerinde 9 ve 1 toplandığında 10 elde edilir ancak binary sayı sistemlerinde 1 ve 1 toplandığında 2 olmaz. ( 1 ve 0 ) 10 olur.

Mikrodenetleyicilerin sinyal seviyeleri yalnızca iki çeşittir. Ya yüksek ( 1 ) yada alçak ( 0 )’dır. Bu mikrodenetleyici komutları için çok uygundur. Fakat mikrodenetleyiciler için çok kolay ve anlaşılır olan bu binary sayı sitemi gerçekte insanlar için çok zor anlaşılmaktadır.

Binary sayı sitemi kolayca hexedesimal sayı siteminede dönüştürülebilemektedir. Sonunda B harfi olan tüm sayılar binary sayı anlamını taşımaktadır. Örneğin 21 olan desimal sayısı binaride 10101B olarak ifade edilir. 21 = 1x24 + 0x23 + 1x22 + 0x21 + 1x20 = 10101B

10

Page 22: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

(3) Hexedesimal dijit nedir?

Hexedesimal sayı sistemi 16 tabanlı bir sayı sistemi olup 0 – 15 arasında sayılarla ifade edilmektedir. Ancak 10 – 15 arası rakamla değil; A – F gibi harflerle ifade edilir. Örneğin F ( 15 ) sayısına 1 eklediğimizde 10B binary sayısını elde ederiz.

8-bit binary sayıyı 4 er bitlik iki kısıma böleriz ve Hexedesimal sayıya karşılık gelir. Hexedesimal sayıları ifade ederken sonuna H (Hexedesimal) harfini ilave ederiz.

10 = 0AH

(4) Binary, desimal, hexedesimal sayıların dönüşümleri 1) DESİMALİN BİNARY’E DÖNÜŞTÜRÜLMESİ

Desimal sayıyı 2 ‘ e böleriz. Kalanı yan tarafa yazarız. Buda binary sayıyı verir. Örneğin decimal 19 olan sayıyı binary sayı sistemine dönüştürelim. 2 ) 19 2 ) 9 ------ 1 Lowest bit(LSB) En düşük bit 2 ) 4 ------ 1 2 ) 2 ------ 0 19 = 10011B

1 ------------ 0 Highest bit(MSB) En yüksek bit

Desimal sayı sisteminden hexedesimale dönüştürme işlemi aynı yolla gerçekleştirilir.

2) BİNARY SAYILARIN DESİMAL’E DÖNÜŞTÜRÜLMESİ

Her binary sayısının biti karesi ile çarpılır. ( 20, 21, 22, 23, ------), ve çıkan toplam decimal sayıyı verir. Örneğin , 1001 binary sayısının decimal sayıya dönüştürülmesi 1 0 0 1 = 1x23 + 0x22 + 0x21 + 1x20 = 8 + 0 + 0 + 1 = 9

11

Page 23: Pic 16f84 Mikrodenetleyici

Mikrodenetleyicinin temelleri

3) DECİMAL SAYININ HEXEDESİMALE DÖNÜŞTÜRÜLMESİ Desimal sayıyı 16 ve 16n nın üstüyle böl kalanı 16n-1 ile böl tekrar kalanı 16n-2 ile böl bu

işlemi 160 olana kadar tekrarla. Örneğin 677 in hexedesimale dönüştürülmesi.

• 677 / 162 = 2 Bölüm : 165 ( 677 / 16*16 = 2.64453125 Tam kısmı “2” alınır. 677 – 2 * 16 * 16 = 165 )

• 165 / 161 = 10(0AH) Bölüm : 5 ( 165 / 16 = 10.3125 Tam kısmı “10=A” alınır 165 – 10 * 16 = 5 )

• 5 / 160 = 5 ( 5 / 1 = 5 Tam kısmı alınır. )

SONUÇ 677 = 2A5H Desimal sayı sisteminden binariye dönüşme metodu da kullanılabilir.

4) HEXEDESİMALİN DESİMALE DÖNÜŞTÜRÜLMESİ

Her hexedesimalin sayısı karesi ile çarpılır ( 160,161,162, ----), çıkan sonuç toplanır buda desimal sayıyı verir. Örneğin A4H in decimal sayıya dönüştürülmesi. A4H = 10x161 + 4x160 = 160 + 4 = 164 5) BİNARİNİN HEXEDESİMALE DÖNÜŞTÜRÜLMESİ

Binary sayıları her biri 4’er bitlik gruplara ayırırız ve bunları hexedesimale dönüştürüz. sonra bunları bir düzene koyarız. Bu hexedesimal sayıdır.

Örneğin 101110B nin hexedesimal sayıya dönüştürülmesi. 0010 1110

00101110B = 2EH 2 E

6) HEXADESİMAL’İN BİNARY SAYI SİSTEMİNE DÖNÜŞTÜRÜLMESİ Her bir Hexedesimal sayıyı 4‘ er bitlik binary sayılara dönüştürürüz ve bunları

bieleştirdiğimizde Binary karşılığını bulmuş oluruz. Örneğin B2H hexedesimal sayıyı binarye dönüştürelim.

B 2 B2H = 10110010B 1011 0010

12

Page 24: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak

Bölüm 2 PIC yazıcısı ve eğitim seti yapmak

PIC Yazıcısı ve Eğitim seti

13

Page 25: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak

PIC mikrodenetleyiciyi göreceğiz. Mikrodenetleyiciye program yazmayı ve yazılan programı denemek için gerekli olan deney setini burada hazırlayacağız.

1 Elektronik elemanların anlatımı

Temel endstriyel elektronik dersinde ana elektronik parçaların özelliklerini öğrendik. Burada PIC yazıcı ve deney setini öğrenmiş olacağız. (1) Transistör 1) 2SC1815 ( npn transistör ) 2SC1815 npn tipi küçük sinyal transistörü E : emitter C : kolektör B : beyz

C

E

B

E CB

2SC

1815

Şekil 2-1 2SC1815 2) 2SA1015 ( pnp transistör ) 2SA1015 pnp tipi küçük küçük sinyal transistörü

E : emitter

C : Kollektör B : beyz

B

C

E

E CB

2SA

1015

Şekil 2-2 2SA1015

14

Page 26: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (2) LED ( light emitting diode ) ( Işık yayan diyot )

Güç kaynağında enerjinin olup olmadığını öğrenmek için ve eğitim setinde yazılan programa gore işevini yapıp yapmadığını kontrol amacıyla LED kullanacağız. Görünen ışığın dalga boyu LED( Light Emitting Diode ) 380 – 760 nm. arasındadır.

K

A

Uzun uç anadu göstermektedir. ( + ) LED aşağıdaki özellliklere sahiptir..

lead frame

bonding wire

lens

LED chip

a) Uzun ömürlüdür b) Düşük güç harcarlar c) Sahip oldukları ısı çok azdır. d) Yüksek hızda çalışma gösterirler e) Çizimi kolaydır f) Işıklandırma kontrolü kolaydır.

Şekil 2-3 LED’in yapısı Mavi LED 1993 de japonyada bir şirket tarafından geliştirildi. Günümüzde bir çok alanda

kullanılmaktadır çünkü 3 ana renge sahiptir. ( kırmızı, yeşil ve mavi. ) ( örneğin : dot matrix ekran tam renkli ekrandır. )

(3) Diyot ( anahtar diyot ) 1S1588 küçük bir anahtar diyottur. Düz polarma durumunda 0,6 V. gerilime sahiptir.

Şekil 2-4 Diyot

15

Page 27: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak

(4) Seri regülatör ( Gerilim düzenleyici ) Sabit bir gerilim elde etmek seri regülatör ile çok kolaydır. Örneğin, eğer 7805 seri regülatör

şekil 2-5 deki gibi kullanılırsa 5V. düzenli ve sabit bir gerilim elde edilmiş olur. Şayet 7812 de aynı şekilde kullanılacak olursa bu defada 12 volt sabit gerilim elde edilmiş olur.

out 7 8 0 5 in

G N D

Şekil 2-5 seri regülatör 1 2

7805

G şir i Ç ş ı k ı D C 5 V D C 8 V

3

PIC programını yazma devresi için gerekli olan voltaj 12,5 volttur. 12,5 Voltu elde edebilmek için 7812 seri regülatörün toprak ( GND ) kısmına diyot elde etmemiz yeterli olacaktır. Şekil 2-6

Çıkış gerilim 12,5 volt değerindedir ve diyotun her iki ucunda da 0,5 volt’luk gerilim oluşmuş olur.

7 8 1 2 in out

G N D Gi ş r i Çı ı k ş

D

C 1 5 V D C 1 2 . 5 V

Şekil 2-6 12,5 Volt elde edilmesi

Uçların karşılıkları Kutup

Model numarası

Çıkış akımı

1 2 3

pozitif 78M serisi 500mA Giriş GND Çıkış

78 serisi 1A Giriş GND Çıkış

negatif 79M serisi 500mA GND Giriş Çıkış

79 serisi 1A GND Giriş Çıkış

Tablo 2-1 Seri regülatör

16

Page 28: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak

(5) Kristal osilatör

Kristal osilatör mikrodenetleyicilere pals üreterek çalışmalarını sağlayan elemandır. 4MHz. lik kristal osilatörler kullanmaktayız.

PIC ‘e göre en doğru kristali seçmemiz

gerekmektedir. Eğer uygun kristal seçersek en doğru pals elde etmiş oluruz. PIC’ ler 4 – 10 – 20 MHZ gibi hızlara sahiptir ve kristali yüksek hızda da seçsek PIC in en yüksek hızına göre çalışma sağlanır.

Şekil 2-7 Kristal osilatör

(6) Transistor düzeni ( ULN2803 )

Transistor düzeninde 8 adet darlington transistor kullanılmıştır. Diyotlarda bu transistor düzeni içinde bulunmaktadır ve röle veya benzerleri elemanları kontrol edilebilme özelliği vardır. ULN2803 50 Volt ve 500 mA yükü kontrol edebilir. Mikrodenetleyici kontrolleri için transistor düzeneği çok kullanışlıdır.

+

GNDULN2803

LEDröle

ULN2803U L N2803

Şekil 2-8 Transistor düzeneği ( ULN2803 )

17

Page 29: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak 2 PIC eğitim setinin yapılışı (1) Elektronik devre üzerinde deliklerin delinmesi

Delik delme işlemi her iki devre içinde yapılır. 0.8mm lik matkap ucu kullanılmalıdır. Şekil 2-9 ve Şekil 2-10. de gösterildiği gibi de 1mm, 1.5mm, 3mm, and 6mm çaplarındada

deliklerde mevcuttur. 1mm

JICA 2003

1mm

1mm

1mm

1mm

2.5mm

Şekil 2-9 PIC Yazıcı

1mm

3mm

3mm

3mm

3mm

1mm

1mm

Şekil 2-10 PIC deney seti

18

Page 30: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak

(2) Alt taban ( Şeffaf ) deliklerinin açılması

Alt taban yapılan elektronik devrenin biraz havada kalmasını sağlayan ve yerle temasını gerçekleştiren bölümdür. Şeffaf malzeme üzerindeki koruma yapışkanı delikler açıldıktan sonra çıkartılmalıdır. Bütün delikler 3 mm olmalıdır.

200mm

170mm

150m

m

120m

mBu deliklerin yerlerini elektronikdevrenize göre işaretleyiniz.

Şekil 2-11 Şeffaf alt taban delikleri (3) Lehimleme yöntemi 1) Lehimleme Elektronik devrelerin montajında lehimleme çok önemli bir aşamadır. (a) Havyanın ucunu lehimlenecek olan yere tut. ( yaklaşık 1 saniye )

(b) Sonra lehimi tut ve lehim erir.

(c) Daha sonra lehim ve havya ucunu aynı zamanda lehim yapılan yerden uzaklaştır. le

h i m h a a v y h a a v y leh i m ha v y a

(a) (b) (c)

Şekil 2-12 Lehimleme yöntemi

19

Page 31: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak 2) Lehimlemeyi kontrol et.

İYİ KÖTÜ

Şekil 2-13 Lehimleme

3) Kalan fazla kablo başlarının kesilmesi

Kalan azl ı na ıl keserizf a l ğ ı s '

kes

Ucu eğip bükmeyiniz

kes

Şekil 2-14 Kablo fazlalıkları nasıl kesilir. (4) Elektronik parça elemanlarının yerleştirilmesi Direnç ve kondansatörler şekilde gösterildiği gibi montajı yapılır.

U p nc u e ğ i b ü k m e y i i z

KÖTÜ İYİ

104K

104K

1mm

Şekil 2-15 Elektronik parça elemanlarının yerleştirilmesi

20

Page 32: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (5) PIC yazıcısının devre diagramı

7812 7805

12.5V 5.0V

+5V

MCLR

GND

D3

GND

220uF 0.1uF 0.1uF1S1588

0.1uF 0.1uF

2.2k

2.2k

2.2k

2.2k

2SA1015

2SC1815

2SC18151S1588

2200pF

1k 300

LED

74LS244

74LS244

D2

D5

D0

D1

DATA(RB7)

CLOCK(RB6)

PIC 14P

PIC 4P

PIC 5P

PIC 13P

PIC 12P

D4

BUSY

1

2

3

4

5

6

7

8

9

1k

LED74HC00

DC15V

Dsub (9P)male

Şekil 2-16 PIC yazıcısının devresi (7) PIC yazıcı parçalarının düzenini gösteren şema

Şekil 2-17 Yerleşim şeması

21

Page 33: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (7) PIC eğitim seti devre diyagramı

abC

de

fg

P

RB0

RB1

RB2

RB3

RB4

RB5

RB6

RB7

RA0

RA1

RA2

RA3

BZ

a

b

Cd

e

fg

P

OSC1

OSC2

MCLR

22k

1k

4

10k

1S1588

4MHz

22pF

22pF

ULN2803 300 X 8 LED X 8

+5V

CLOCK

DATA

PIC16F84

+5V

+

GNDULN2803

7segment LEDanode common

MCLR

22

10k X

GND

Şekil 2-18 PIC eğitim seti devresi (8) PIC eğitim seti yerleşim şeması

Şekil 2-19 Yerleşim şeması

22

Page 34: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (9) Parça listesi

Parça ListesiSıra No Parçanın ismi Özelliği Adedi

1 Baskı devre Yazıcı ve Eğitim seti için 12 IC soket 14pin 13 IC soket 18pin 34 IC soket 20pin 15 IC 74HC00 16 IC 74LS244 17 PIC microdenetleyici PIC16F84A 18 Transistör düzenleyici ULN2803 19 Regülatör IC 7805 1

10 Regülatör IC 7812 111 LED kırmızı 912 LED yeşil 213 Transistör 2SA1015 114 Transistör 2SC1815 315 Diyot 1N4148 316 Direnç 300Ω 1/4W 917 Direnç 2.2kΩ 1/4W 418 Direnç 1kΩ 1/4W 319 Direnç 10kΩ 1/4W 520 Direnç 22Ω 1/4W 121 Direnç 22kΩ 1/4W 122 Kondansatör 0.1uF 423 Kondansatör 2200pF 124 Kondansatör 22pF 225 Elektrolitik kondansatör 220uF 16V 126 Anahtar 3P üç uçlu 227 Konnektör ( PC için ) D sub 25P erkek 128 Kablo konnektörü Dsub 25P 129 Konnektör D sub 9P dişi 130 Kablo konnektörü Dsub 9P 131 Konnektör ( set için ) D sub 9P erkek 132 Konnektör 5P erkek devre için 233 Konnektör 5P dişi 234 Konnektör 10P erkek devre için 235 Güç giriş soketi 2P 136 AC adaptör 15V 300mA 137 Kablo 8 li 1.2m 138 Kristal 4MHz 139 Basmalı buton 540 Piezoelektrik hoparlör 141 7 segment LED 142 Şeffaf alt taban 100*150 243 Vida M3*30 844 Vida somunu M3 845 Yükselti elemanı 20mm 8

23

Page 35: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (10) Bağlama aparatının yapımı

TU

NIK

15

TU

NIK

15

20cm

Şekil 2-20 PIC devrelerinin birbirine bağlanma aparatı Şekil 2-21 Açık pinleri kapatma aleti 1 2 3 4

Şekil 2-22 Aletin kullanılması

Şekil 2-23 Uçları plastiğe geçir

24

Page 36: Pic 16f84 Mikrodenetleyici

PIC yazıcısı ve eğitim seti yapmak (11) Bilgisayar bağlantı kablosunun yapımı

2

34

5

6

7

10

25

2 3 4 5

1 6 7 8 9

D s u b 2 5 P D sub 9 P

80 c m

(D ş ) i i ( Erkek )

2 ………... 8 ( D0 )

3 ………... 9 ( D1 )

4 ………... 4 ( D2 )

5 ………... 1 ( D3 )

6 ………... 2 ( D4 )

7 ………... 5 ( D5 )

10 ………. 3 ( ACK )

25 ………. 7 ( GND )

2-24 Kişisel bilgisayar için kablo

25

Page 37: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

Bölüm 3 PIC’in yapısı 1 PIC16F84 (1) PIC16F84

PIC16F84

RA1RA2

RA0

RB7

RB6

RB5

RB4

RA3

RB0,INT

RB1

RB2

RB3

+Vcc

OSC1/CLOCKIN

OSC2/CLOCKOUT

GND

MCLR

RA4/T0CLKI

Şekil 3-1 PIC16F84 Her bir ucun açıklanması : OSC1/CLOCKIN : Osilatör girişi / External oscillator input OSC2/CLKOUT : Osilatör girişi / OSC1 frekansının ¼ değerindeki çıkış clock ucu MCLR ( inv ) : Reset girişi RA0 – RA3 : Giriş Çıkış uçları RA4/T0CKI : Giriş Çıkış ucu / TMR0 için clock puls giriş ucu RB0/INT : Giriş Çıkış ucu / Dış kesmeler için giriş ucu RB1-RB7 : Giriş Çıkış ucu GND : Güç kaynağının eksi ( - ) ucu Vcc : Güç kaynağının artı ( + ) ucu

Yazılan bir programı PIC’e kayıt ederken ise RB6 ucuna clock pulse, RB7 ucuna data

bilgilerini vermemiz gerekir. Ayrıca MCLR ucuna 12,5 Volt, GND ucuna ( - ) eksi, Vcc ucuna da +5 Voltu vermeyi unutmamalıyız.

26

Page 38: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

PIC16F84 18 uçlu 1 Kbyte flaş program belleği, 68 bayt RAM bellek, 64 Byte EEPROM belleğe sahiptir. PIC16F84’ e program elektrik sinyalleri ile kolayca tekrar tekrar yazılabilir veya silinebilir. Ancak ROM bellek olanlarda ise tekrar yazabilmek için ültraviyole ışınlara ihtiyaç vardır. (2) PIC16F84’ ün yapısı

RAM

0

0

0

3

PIC kullanmakprogramlagerçekleştbirbirinde

Flash Program Belleği

INDIRECT ADDRINDIRECT ADDR

OPTION TMR0

PCLPCL

STATUSSTATUS

FSRFSR

TRISA

TRISB

PORTA

PORTB

EECON1

EECON2

EEDATA

EEADR

PCLATH

INTCON

PCLATH

INTCON

00

01

02

03

04

05

06

07

08

09

0A

0B

0C

4F

80

81

82

83

84

85

86

87

88

89

8A

8B

RESET

INTERRUPT POINT

PROGRAM AREA

00

04

05

FF

EEPROM(1Kbyte)

PORTA5bit

PORTB8bit

workmemory

36byte

EEPROM

DATAMEMORY

64byte

Fetch/Decode

ALU

Working resistorW

program counter

stack8 lebel

clock

reset

watch dog timer

Bank 1

Şekil 3-2 PIC16F84’ ün blok diyagramı

RISC ( Reduced Intruction Set Computer ) denilen azaltılmış komut sistemini tadır. Bu sistem sayesinde komutlar daha sade ve daha azdır. Bir PIC i mak için 35 komut kullanılır. PIC de yöntem bir komutu genellikle bir clock ile irmesidir. Program belleği ( memory ) ( ROM ) ve data belleği ( memory ) n bağımsızdır. ( Harward mimarisine göre ) Bu hafıza yapısı ile her iki hafızada

27

Page 39: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı aynı anda çalıştırılabilmekte ve böylece işletim çok daha hızlı olmaktadır. Data belleğinin genişliği yapıya göre değişiklik gösterir. ( Program belleği 14 bit , data belleği 8 bittir.) Çünkü 1 kelimenin makineye tanıtımı 14 bit ile gerçekleştirilir. Örneğin MOVLW B '01011111' komutunu makine 11000001011111 olarak tanır. Bunun 6 biti olan 110000 MOVLW komutunu ifade eder, 01011111 ise data bölümünü tanımlar. (3) Clock düzeni / Komut süresi

Clock girişi (OSC1 den) içten dörde bölünmüştür. Bunlar Q1, Q2, Q3, Q4 olan bu bölümler kare dalga şeklindedir. Program sayacı ( PC ) her Q1 de bir artırılmakta ve komutlar program belleğinde işleme sokularak Q4 de sona ermektedir. Komutlar Q1 den Q4 e kadar çözülerek işleminin gerçekleşmesi sağlanır. Clock pulse ve bunun düzeni Şekil 3-3 de görülmektedir.

( Microchip technology inc. Manual)

Şekil 3-3 Clock / Komut örneği (4) Komut akışı / Bilgi iletim kanalı

Komut süreci “Instruction Cycle” dört Q den oluşmaktadır. Bunlar (Q1,Q2,Q3 ve Q4). Komutun aktarılması ve işleyişi şu şekilde olmaktadır. Devir bir komut sürecini üstlenirken iletim ve yürütme diğer komut sürecini üstlenmektedir. Bununla birlikte bilgi iletim nedeniyle her bir komut etkin olarak bir süreçte yürütülür. Eğer komut bir program sayacının değişmesine neden olmuşsa ( Örneğin GOTO ) komutu kullanılmışsa o zaman komutun tamamlanması için iki süreç gereklidir. (Şekil 3-4)

28

Page 40: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

Devir süreci her Q1 de değeri bir artan program sayacı ( PC ) ile başlar. Yürütme sürecinde işleyen komut Q1 sürecindeki komut kaydına gönderilir. Daha sonra bu komut Q2,Q3,Q4 süreçleri boyunca çözülür ve işlem gerçekleştirilir. Veri belleği Q2 boyunca okunur ( Bilgi okuması ) ve Q4 boyunca yazılır ( Yazılacak hedef ) ( Bilgi iletim kanalı (Pipeline) : PIC; komutları uygularken bir sonraki komutu da alır. Onu çözüp uygulamaya geçerken aynı anda bir sonraki komutu alır. Bu işlem sürekli devam eder.

execution execution execution execution

fetch fetch fetch fetchjum p instructio

n

No operation

clock

execution clock

fetch

Şekil 3-4 Bilgi iletim kanalının yapısı (5) W yazmacı ( register )

W ( working ) yazmacı bilgilerin geçici olarak depolandığı ve bilgilerin aktarılmasında kullanılan bir kısımdır. Direk olarak ulaşamayız. PIC’te yapılan tüm işlemler ve atamalar bunun üzerinden yapılmak zorundadır.

memory

Wregister

M1

M2

00111010

00111010

Örneğin M1 deki data bilgilerini M2 ye aktarmak istersek once M1 deki bilgileri W yazmacına ( register ) aktarırız daha sonrada geçici alanda bulunan ( w registeri ) bu bilgileri M2 kısmına aktarırız. M1 deki bilgiler M2 ye direk olarak aktarılamaz mutlaka W yazmacını kullanmak zorundayız.

Şekil 3-5 W yazmacı ( register )

29

Page 41: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı (6) Program belleği ( memory )

Assembly de kullanılan komutlarla yazılmış programın yüklendiği alandır. Program belleği ( memory ) (ROM). Bu alan PIC16F84 de EEPROM şeklindedir. Program yazıcısı kullanarak ROM’a programımızı rahatlıkla yazabiliriz. Çünkü elektrik dalgasıyla yazılıp silinebilme özelliği vardır. Mikrodenetleyici uygulayacağı komutları ve işlem sırasını bunun ilgili adreslerine bakarak uygular. İlgili adresler ise PC ( Program Counter ) program sayıcıda saklanır. Bir PIC te ROM belleğe program yaklaşık 1000 defa yazılabilir. ( Program belleğinin genişliği 14 bittir. PIC16F84 program belleğinin 1024 ( 1K ) alanı 000 dan 3FF kadar olan adrestedir ve 3FF de 1024 demektir. ( Bölüm 1 deki Tablo 1-2 de daha detaylı bilgi verilmiştir. )

RESET

INTERRUPT POINT

PROGRAM AREA

000

004

005

3FF

program memory

Şekil 3-6 ROM belleğin haritası ( program memory )

30

Page 42: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

2 Veri belleği ( DATA memory ) (1) Veri belleği ( Ram Bellek )

Veri belleği iki kısımdan meydana gelmektedir. Bunların her birine Bank adı verilir.

Bank 0 ve Bank 1 dir. Bank 1 dediğimiz ilk bölüm özel fonksiyon ( Special Function Register ) ( SFR ) yazmaç alanıdır. Bank 0 ise ikinci bölümdür ve buna da genel amaçlı yazmaç ( General Purpose Register ) ( GPR ) denir.

GPR alanı genel amaçlı RAM ‘ın 16 baytından daha fazlasına olanak sağlamak amacıyla bölünmüştür. SFR ise özel fonksiyonları kontrol eden kayıtlara aittir. Bunların seçimleri için kontrol bitleri gerekmektedir. İşte bu kontrol bitleri de STATUS yazmacında bulunmaktadır. Şekil 3-7 de veri belleğinin harita organizasyonu göstermektedir.

Veri belleği genel amaçlı kayıt ve özel fonksiyon kaydını içeren iki bölümü vardır. Bank0’ ı seçmek için RP0 bitini ( ki bu STATUS’un 5. biti oluyor ) temizlemek gerekir. Aynı bitin kurulması ( set ) ile de BANK1 seçilmiş olur. Her iki bankın ilk onikisinin yerleşimi özel fonksiyon kaydı için ayrılmıştır. Kalanı ise statik RAM olarak genel amaçlı kayıtları yürütmektedir.

INDIRECT ADDR INDIRECT ADDR

OPTIONTMR0

PCL PCL

STATUS STATUS

FSR FSR

TRISA

TRISB

PORTA

PORTB

EECON1

EECON2

EEDATA

EEADR

PCLATH

INTCON

PCLATH

INTCON

00

01

02

03

04

05

06

07

08

09

0A

0B

0C

4F

80

81

82

83

84

85

86

87

88

89

8A

8B

68byte

Bank 0 Bank 1

Work memory

RP1 RP0bit5bit6bit7

bit 5 ' 1 '

bit 5 ' 0 '

STATUS regi

GPR

ster

Şekil 3-7 PIC16F84 ün Kayıt dosya haritası

31

Page 43: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı 1) Genel amaçlı kayıt dosyası

Bütün cihazlar belli bir miktar genel amaçlı kayıt alanlarına sahiptirler. Bu PIC 16F84 de 68 byte’dır. Her bir GPR 8 bit genişliğindedir ve dolaylı yada doğrudan SFR üzerinden erişilmektedir. 2) Özel Fonksiyon Kayıtları

Özel fonksiyon kayıtları aygıtın işlemini kontrol etmek için CPU ve özel fonksiyonlar tarafından kullanılmaktadır. Bu kayıtlar statik olan RAM’ dadır. (2) Yığın hafıza ( Stack Memory )

PIC16F84 8 derinliğinde ve 13 bit genişliğinde yığına ( stack ) sahiptir. ( Şekil 3-2 ). Bu yığın alanı program veya bilgi ( data ) yeri değildir ve direk olarak okunamaz veya yazılamazlar. CALL komutu veya kesme ile 13 bitlik ( PC ) program sayıcı yığının üzerine konur bu işleme “pushed “ denir.. Yığındaki bu adres alt programlar çalışıp bittikten sonra en sonunda bulunan ‘RETLW , RETFIE’ komutları ile yığından atılır bu işlemede “popped” denir.

Burada dikkat edilecek iç içe en fazla 8 altprogram veya kesme kullanabiliriz. Fazla kullandığımız takdirde yığın taşması dediğimiz ( stack overflow ) hatası belirir.

(3) Program sayıcı ( Program counter ) ( Adres 02h , PCLATH Adres 0Ah)

Program Sayıcı ( Program Counter ) (PC) 13-bit genişliğindedir. Yürütülecek komutun program belleğindeki adresini tutar. Bu nedenle kendisi bir gösterge olarak görev yapar. Program sayıcının alt 8 bitine PCL düşük byte denir PCL okunabilen - yazılabilen bir yazmaçtır. Üst 5 bitine ise PCH yüksek byte denir ki bu ( PC <12:8> ) arasındadır ve direk olarak okunup yazılamaz. RAM bellekte H’0A’ adresinde bulunan özel PCLATH ( PC latch high ) yazmacından okunup yazılabilirler. PCLATH’ın içeriği program sayıcının üst bitlerine transfer olur ve PC yeni bir değerle yüklenmiş olur. Bunu şekil 3-8 de görebilirsiniz. CALL, GOTO gibi komutlar PCL ye yazılırlar çünkü 256 byte’ dan küçüktürler. RESET durumunda ise üst bitler temizlenir.

PCH PCL

Şekil 3-8 Program sayıcı

078 12

P C L A T HALU s uo n ç

5 8

Adres 02 ‘de

Program Sayıcı

32

Page 44: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı (4) STATUS Yazmacı ( Register ) ( Adresi 03h,83h )

STATUS yazmacı ( register ) aritmetik mantık ünitesine ( Arithmetic Logic Unit ) ALU sahiptir. RESET durumu içeren veriler ve bank seçimi sağlayan bilgilerde mevcuttur.

b7 b6 b5 b4 b3 b2 b1 b0 R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x

IRP RP1 RP0 TO PD Z DC C R=Okunabilir bit W=Yazılabilir bit -n=Reset değeri

İlk değer ( enerji verildiği andaki değeri ) 0 0 0 1 1 x x x bit7: IRP: Bank seçme bit’i ( Register Bank Select bit ) IRP bit’i PIC 16F84A’larda kullanılmaz. .IRP sıfır olarak kalmalıdır. bit 6-5: RP1:RP0: Bank seçme bit’i ( Register Bank Select bit ) 00 = Bank 0(00h-7Fh) 01 = Bank 1(80h-FFh)

Her bir bank 128 byte’dır. PIC16F84A ‘da sadece RP0 kullanılır. RP1 sıfır olmalıdır.

bit 4: TO: Zaman aşım bit’i ( Time-out bit ) 1= PIC’ e enerji verildiğinde ve CLRWDT ve SLEEP komutu çalışınca 0 = WDT zamanlayıcısında zaman dolduğunda bit 3: PD: Enerji kesilme bit’i ( Power-down bit ) 1 = PIC’e enerji verildiğinde ve CLRWDT komutu çalışınca 0 = SLEEP modu çalışınca bit 2: Z: Zero bit ( Sıfır bit’i ) 1 = Bir aritmetik işlem veya mantıksal işlem sonucu 0 ( sıfır ) olduğunda 0 = Bir aritmetik işlem veya mantıksal işlem sonucu 0 ( sıfır ) olmadığında. bit 1: DC: Taşma ve Ödünç bit’i ( Digit carry/borrow bit )( ADDWF ve ADDLW

komutları için ) 1 = Alt dört bitin 4. bitinde taşma meydana geldiğinde 0 = Alt dört bitin 4. bitinde taşma meydana gelmediğinde bit 0: C: Taşma ve Ödünç bit’i ( Carry/borrow bit )( ADDWF ve ADDLW komutları

için ) 1 = En soldaki 7.bitte taşma olduğunda 0 = En soldaki 7.bitte taşma olmadığında Not: RLF ve RRF komutları çalıştığında en sol bit veya en sağ bitin değeri carry bitine

yüklenir.

33

Page 45: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı 3 I / O port ( input / output )

I/O portları sinyalin giriş ve çıkışlarıdır. PIC16F84 ‘e ait I/O portlar şekil 3-9 da görülmektedir. Buradan da anlaşılacağı gibi PIC16F84’ün en fazla uçları I/O için ayrılmış olup program kontrolü için kullanılmaktadır.

A portu 5 Adettir ( RA0,RA1,RA2,RA3,RA4 ) B portu 8 Adettir.( RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7 ) Toplam 13 Adet giriş veya çıkış olarak kullanılmak üzere

uçları vardır. Şekil 3-9 I/O portları

PIC16F84

RA1RA2

RA0

RB7

RB6

RB5

RB4

RA3

RB0

RB1

RB2

RB3

RA4

(1) Giriş İşlemi

Eğer PIC giriş ( input ) modunda olursa, FET çıkışları kapatır Giriş sinyali tampona doğru akar. ( Şekil 3-10 )

VDD

R

I / O PIN

VSS

input mode > OFF

input mode > OFF

PIC

VSS

DATA read

Şekil 3-10 Giriş işlemi

34

Page 46: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı (2) Çıkış işlemi

PIC’ in çıkışı FET’ lidir. Eğer akım gerilim kaynağından çıkış portuna doğru ise buna SİNK akım( Şekil 3-11 ), I/O pininden GND’ye doğru ise buna da KAYNAK ( Source ) akımı denir. ( Şekil 3-12 ) Kaynak akımı en fazla 20 mA. iken sink akımı ise en fazla 25mA.dir.

VDD

R

LED

I / O PIN

VSS

' 0 ' or input mode > OFF

' 0 ' > ON

PIC

MAX=25mA

P

N

etc

Şekil 3-11 Sink akımı

VDD

R

LED etc

I / O PIN

' 1 ' > ON

' 1 ' or input mode > OFF

PIC

MAX=20m

P

N

A

Şekil 3-12 Kaynak ( source ) akımı

35

Page 47: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı 4 Reset Devresi

(1) Resetleme İşlemi ( Power on Reset ) ( POR ) MCLR ( Memory Clear ) ucuna düşük gerilim ( 0V ) uyguladığımızda, PIC16F84 reset

edilmiş olur ve program başlangıçtaki adresine geri döner. MCLR ucu tekrar yüksek gerilim 5V olduğunda PIC16F84 programın çalışmasına ilk adresten itibaren devam eder. Kısaca MCLR ucu 0V. olduğunda program çalışmaz sadece ilk adrese gider. Programın çalışabilmesi için MCLR ucunun tekrar 5V. olması gerekir. 1) VDD’ ye direk olarak resetleme

VDD yüksek gerilimi bulduğunda ( 1.2V – 1.7V ) reset çalışmaya başlar. PIC’in resetinden yararlanabilmek için MCLR ucunu direk olarak VDD ye bağlayınız. Buna dirençte eklenebilir.

Şekil 3-13 VDD’ ye direk olarak resetleme

PIC

MCLR

VDD

10K

2) PIC’ in dışarıdan resetlenmesi Eğer VDD ile resetleme yavaş oluyor ve bunun hızlı gerçekleşmesini istiyorsak dış reset

yapmamız gerekir. VDD gerilimini hızlı bir şekilde 0 yapmak için LED ve kondansatör kullanmamız gerekir. LED kondansatörü hızlı bir şekilde boşaltır ( deşarj ) ve işlem hızlanmış olur. (C : 1 – 10 uF)

PIC

MCLR

VDD

10KD

C

Şekil 3-14 PIC in dışarıdan resetlenmesi

36

Page 48: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

(3) Butonla Reset Şekil3-15 de görüldüğü gibi MCLR ucunu düşük gerilime ulaştırmak için reset butonu

vardır. Bu buton basılıp çekilir ve program ilk adresten itibaren çalışmaya başlar.

PIC

MCLR

VDD

10KD

CPIC

MCLR

VDD

10K

buttonSwitch

buttonSwitch

Şekil 3-15 Butonla Reset

37

Page 49: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı 5 Osilatör özellikleri (1) osilatör modelleri PIC16F84 dört değişik osilatörleme ile çalışabilir. Bunlar LP : Düşük güç kristal ile Low Power crystal ( yaklaşık 40KHz) XT : Kristal / Rezanatör ile Crystal / Resonator (0 – 10MHz) HS : Yüksek hız kristali / Resonatör High Speed Crystal / Resonator (4 – 10MHz) RC : Direnç / Kondansatör ile Resistor / Capacitor (0 – 4MHz) (2) Kristal / seramik resonator işlemi

Seramik rezanatör Düşük güç kristali Kristal osilatör

Şekil 3-16 Kristal Çeşitleri XT, LP veya HS modeller kristal veya seramik rezanatör ile OSC1/CLKIN ve OSC2/CLKOUT uçlarına bağlanırlar. Böylece osilatör sağlanmış olur. ( Şekil 3-17 )

OSC1

OSC2XTAL

C1

C2

PIC

rezanatör

OSC2

OSC1

PIC

Şekil 3-17

38

Page 50: Pic 16f84 Mikrodenetleyici

PIC’ in yapısı

Mod Frekans OSC1 / C1 OSC2 / C2

32kHz 68-100pF 68-100pF LP

200kHz 15-33pF 15-33pF

100kHz 100-150pF 100-150pF 2.0MHz 15-33pF 15-33pF XT 4.0MHz 15-33pF 15-33pF 4.0MHz 15-33pF 15-33pF

HS 10.0MHz 15-33pF 15-33pF

Tablo 3-1 Kristal osilatör için Kondansatör seçimi

(3) RC Osilatör Zamanın çok hassas olmadığı durumlarda RC osilatör kullanılarak maliyet düşürülür.

RC osilatör frekansı gerilim kaynağının özelliğine, direncin değerine, kondansatörün değerine ve işlem ortamının sıcaklığına bağlıdır. Buna ek olarak osilatör frekansı normal işlem parametrelerine göre sapmalar gösterir. Bu sapma % 20 civarındadır. Şekil 3-18 de bu osilatör tipinin PIC16F84‘ e nasıl bağlandığı görülmektedir. Direnç değeri 4k-ohm’un altında olan osilatör işlemlerinde osilasyon sabit olmayabilir veya tamamen durabilir. Çok yüksek değerde dirençler ise ( yaklaşık 1M-ohm ), gürültüye, neme ve sızmaya çok hassaslaşır. Bu nedenle direnç değerini 5 k-ohm ve 100k-ohm arasında kullanılmalıdır.

Her ne kadar osilatör dış bir kondansatörle çalışmıyor olsa bile biz gürültü ve sabitliliği sağlamak için 20pF değerinin üzerindeki değerde bir kondansatörün kullanılmasını tavsiye ederiz. OSC1

OSC2

PIC

Rext

Cext

VDD

Tavsiye edilen değerler 5k < Direnç < 100k Kondansatör > 20pF

Şekil 3-18 RC Osilatör

39

Page 51: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Bölüm 4 PIC Programlamının temeli 1 MPLAB ( MPASM ) ‘ı nasıl Kullanırız ? (1) Basit bir program

INCLUDE”P16F84.INC” ;Adresleri belirten dosyayı yükle (1) LIST P=16F84 ;16F84 ün tanıtımını yap (2) BSF STATUS,5 ;Bank 1’ e geç (3) CLRF TIRSB ;PORTB nin hepsini çıkış yap (4) BCF STATUS,5 ;Bank 0’ a geç (5) CLRF PORTB ;PORTB’ nin hepsini 0 yap (6) BSF PORTB,0 ;PortB’ nin 0.bitini 1 yap ( LED yak ) (7) DEVAM GOTO DEVAM ;Sonsuz döngü ile programı sonlandır (8) END (9)

Bu program eğitim setindeki 8 ledden bir tanesini ( ilk led ) yakan diğerlerinin sönük kalmasını ( sıfır olduğu için ) sağlayan bir programdır. Bu programı daha ayrıntılı inceleyecek olursak, (1) TRISB, PORTB, STATUS gibi değişkenlerin adreslerini içerisinde bulundurur. Bunu PIC’ e yükleme işlemini gerçekleştirir. ( Ayrıntılı bilgi sayfa 73’ dedir. ) (2) Hangi pic çeşidinin kullanılacağını tanımlar Programın (3) - (6) satırları arasında ise PIC’in portlarının çıkış veya giriş olacağı tanımlanır. Bu işlemin nasıl olduğu sayfa 69 ‘ da ayrıntılı olarak açıklanmıştır. (6) Belirlenen bir LED’in yanması sağlanır. (7) Sonsuz döngüye girerek programda başka bir işlem yapmamasını sağlanır. (8) END komutu ile programın bittiğini belirtiriz. (2) Sayıların ifade edilmesi

Form Format Örnek

Desimal D’ < digit >’ . ‘< digit >’

D’100’ . ’100’

Heksadesimal H’< hex_digit>’ 0x<hex_digit>

H ’9F’ 0 x 9F

Oktal O’<oktal_digit>’ O’67’ Binary B’<binary_digit> B’00111011’

ASCII Kod A‘<karakter> ‘ ’<karakter>’

A‘C’ ’C’

Tablo 4-1 MPASM için sayıların ifade edilmeleri

40

Page 52: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (3) Programın temel ifade şekli Etiket Komut Belleteç Tanımlama PROGRAMDA DİKKAT EDİLECEK NOKTALAR 1: Etiket en başta olmalıdır.

• İki alt çizgi “__” ile başlamamalıdır. • Bir alt çizgi ve sonrasında rakam “_2” olmamalıdır. • Assembly komutları ve kullandığı kelimeler etiket olamaz. • Bir etiket en fazla 32 karakter olmalıdır. • Etikette büyük küçük harf ayrımı mevcut olup büyük ve Türkçe olmayan harflerin

kullanılması tavsiye edilir. 2: Etiket yazılması gerekmediği zaman komut yazılacağında bir veya daha fazla boşluk bırakılması gerekmektedir. 3: Açıklama yazılacaksa (;) noktalı virgül den sonra yazılmalıdır. 4: Bir satırda en fazla 200 karakter olmalıdır. 5: Her paragraf bir veya daha fazla boşlukla ayrılmalıdır.

Etiket Komut Belleteç Tanımlama DEVAM

INCLUDE LIST BSF CLRF BCF CLRF BSF GOTO END

”P16F84.INC” P=16F84 STATUS,5 TIRSB STATUS,5 PORTB PORTB,0 DEVAM

;Adresleri belirten dosyayı yükle ;16F84 ün tanıtımını yap ;Bank 1’ e geç ;PORTB nin hepsini çıkış yap ;Bank 0’ a geç ;PORTB nin hepsini 0 yap ;PortB’nin 0.bitini 1 yap ( LED yak ) ;Sonsuz döngü ile programı sonlandır

41

Page 53: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (4) Program yazmanın yöntemi

Editör ile program yazma

MPASM ile dosyayı

HEX dosya haline

derleme

Hata var mı ?

Evet

Hayır

Yazılan program PIC’e transfer edilir ve doğruluğu kontrol edilir.

Evet Hata Var mı ?

Hayır

SON

Başla

Şekil 4-1 Program yazmanın yöntemi

42

Page 54: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (5) MPLAB nasıl kullanılır ?

1) MPLAB PROGRAMININ BAŞLATILMASI 【Windows】start → program → Microchip MPLAB IDE → MPLAB IDE

MPLAB programını başlattığımızda aşağıdaki ekran görünür.

Şekil 4-2 MPLAB başlama penceresi 2) MPLAB IDE YAZI EDİTÖRÜNE PROGRAM YAZILMASI

Şekil 4-3 Program girişi Programın sonuna END adlı komutu mutlaka yazmamız gerekmektedir.

43

Page 55: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) DOSYANIN SAKLANMASI

Şekil 4-4 Dosyanın saklanması

Yeni yapılan dosyanın hangi klasöre ve hangi isimde kayıt edilip saklanacağına kendin karar vererek Save as type bölümünde Assembly Source Files kısmını seçtiğimizde dosya adından sonra asm yazmamıza gerek yoktur. Program otomatik olarak atama yapar. Eski versiyonlarda bu olmadığından dolayı dosya adından sonra nokta koyup mutlaka asm uzantısını da yazmamız gerekir. Örnekte dosyamız "PROG1" adı altında saklanmıştır ve bu dosya bizim kaynak dosyamız olmaktadır.

Şekil 4-5 Dosyanın adı

44

Page 56: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 4) YAZILAN DOSYANIN DERLENMESİ ( Hex dosya haline getirilmesi ) Program yazılıp saklandıktan sonra bunun derlenmesi gerekmektedir. Derleme işlemini iki yoldan yapmamız mümkündür. Kısa tuş kullanımını tercih edersek ALT + F10 tuşuna basmamız yeterlidir. Menülerden yapmak istediğimizde ise; Project / Quickbuild kısmını takip etmeliyiz. Program yazılıp saklandıktan sonra o program içerisinde ufak değişiklikler yapıldığında tekrar saklamak için save etmemize gerek yoktur. Derleme; işlemine başlamadan son değişiklikleri otomatik olarak kayıt etmektedir.

Şekil 4-6 Assembly’ nin başarılı olma penceresi

Şekil 4-7 Assembly’ nin başarısız olma penceresi Başarılı olması demek program doğru çalışır anlamına gelmemelidir. Derleme

esnasında sadece komut yazılım hatası olup olmadığı kontrol edilir, mantık hatası kontrolü yapılmaz.

45

Page 57: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Program yazılırken iki tür dosya vardır. Giriş dosyalarından olan kaynak dosyayı kendimiz oluştururuz. Yükleme dosyasını ise

hazır olandan kullanırız. ( P16F84.INC gibi.) Bu tür dosyalar MPLAB programı yüklenirken otomatik olarak gelmektedir. ( Geniş bilgi sayfa 73’ dedir. )

Çıktı dosyaları ise derleme sonucunda oluşan dosyalardır ve kaynak dosyanın bulunduğu klasörün içerisindedirler.

1. GİRİŞ DOSYALARI

a. Kaynak dosya ( dosya adı.ASM ) b. Yükleme ( Include ) dosya ( dosya adı.INC )

2. ÇIKTI DOSYALARI ( Derleme esnasında assembler tarafından üretilir )

a. Liste dosyası ( dosya adı.LST ) b. Hata dosyası ( dosya adı.ERR ) c. Sembol ve debug dosyası ( dosya adı.COD ) d. Hex formatında dosya ( dosya adı.HEX, dosya adı.HXL, dosya adı.HXH )

LİSTE DOSYASI Dosyanın hangi yazılım tarafından üretildiği, versiyonu, tarih ve saati, sayfa numarasından sonra;

birinci kolonda komutların hafızadaki adreslerini, ( LOC ) ikinci kolonda set, equ, variable gibi emirlerin ve komutların oluşturduğu 32 bitte hex

karşılıklarını, ( OBJECT CODE ) üçüncü kolonda kaynak program ve bunun satır numaraları ve varsa açıklamalar

(LINE SOURCE TEXT) Programda kullanılan etiketler (SYMBOL TABLE) ve adresleri (VALUE) Hafıza kullanım haritası (MEMORY USAGE MAP) X Kullanılan kısım - Kullanılmayan kısmı gösterir PROG1.ASM örnek programında kullanılan alan 6 kullanılmayan alan 1018’ dir. Hata (Error) sayısı ve Uyarı (Warning) sayısı da verilmektedir. Bu uyarı ve hataların

nerelerde olduğu ise açıkça komutların altlarına yazılmıştır.

46

Page 58: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

ÖRNEK PROG1.LST DOSYASI :

Şekil 4-8 PROG1.LST Dosyası

HATA ( ERROR ) DOSYASI

MPASM assembler derleme sonunda hata çıktısı olarak OUTPUT penceresinde gösterdiği kısmı ERR uzantılı bir dosyada oluşturur. Bu dosya içerisinde; programda hata varsa bunun hangi satırda olduğu ve açıklamasını buluruz. Hata yok ise bu dosyanın içeriği boştur.

Örneğin hata var ise aşağıdaki gibi bir dosya oluşmuştur. Burada hatanın bulunduğu satır numarası ve ne gibi hata olduğu açıkça görünmektedir.

HataHata satır no

Şekil 4-9 PROG1.ERR Dosyası LİSTE dosyasında hata olan satırın hemen üstünde ne gibi hata olduğu açıkça yazdığından

dolayı hatayı bulmak LİSTE dosyasında daha kolaydır.

47

Page 59: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri HEX FORMATINDA DOSYA

MPASM assembler derleme sonunda başarılı oldu ise kaynak dosya adında fakat uzantısı HEX olan bir dosya meydana getirir. Bu dosya bizim PIC ‘ e kayıt edeceğimiz dosyadır. Değişik formatlarda derleme yapılabilmektedir. Bunlar; Intel Hex Format INHX8M .hex 8 bit Intel Split Hex Format INHX8S .hxl .hxh tek çift Intel Hex 32 Format INHX32 .hex 16 bit

Intel HEX Format ( INHX8M )

Şekil 4-10 PROG1.HEX Dosyası

Intel HEX Format (INHX8M) aşağıdaki gibidir.. :BBAAAATTHHHH…………..HHCC BB : İki heksedesimal sayı digiti ile bir satırdaki data sayısını gösterir. AAAA: Dört heksedesimal sayı digiti ile ilk datanın kayıt edildiği adresi gösterir. TT : Kayıt şeklidir 00 = Data kayıt 01 = Data kayıt sonu HH : İki heksedesimal sayı digiti ile 1 byte datayı gösterir. CC : Toplam kodu kontrol eder ( Bütün baytların toplamının ikili complementi ) Örnek ( PROG1.ASM Programı ) 0C 0000 00 831686018312860106140528 71 0C >> 83 16 86 01 83 12 86 01 06 14 05 28 ( data numaraları 12 = 0Ch ) 0000 >> İlk adres 0000h. dır. 00 >> Bu satır data kayıt satırıdır. 83 16 86 01 83 12 86 01 06 14 05 28 >> 83 16(BSF STATUS,5), 86 01(CLRF PORTB) …… ( Bu hexdesimal sayı karşılıklarını PROG1.LST dosyasında Şekil 4 – 8 de görebilirsiniz. ) 71 >> 0Ch+83h+16h+86h+01h+83h+12h+86h+01h+06h+14h+05h+28h = (2)8Fh (2)8Fh nin ikili complementi >> (1)71h

48

Page 60: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) EDİTÖR AYARLARI

Taralı bölgede ( Gutter ) Mouse sağ tuşa basılır

Açılan yandaki menüden Properties seçilir

Şekil 4-11 Editör ayarları penceresinin açılması

Şekil 4-12 Editör ayarları

Yazı ayarları için Text Seçiniz

Satır numaralarını göster

49

Page 61: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Yazı büyüklüğünü ve tipini seçebiliriz.

Kod sayfasının dilini seçebiliriz.

Editörde kullanılan renk ayarlarını değiştirebiliriz.

İlk renk değerlerine geri dönmemizi sağlar.

Şekil 4-13 Yazı ( Text ) ayarları penceresinin kullanımı

Sekme ( Tab ) tuşuna basıldığında gitmesi istenen miktar

Program ilk açıldığındaki editör sayfa boyutu

Şekil 4-11 de taralı bölge olarak tanımlanan alan genişlik miktarı

Şekil 4-14 Ölçümlendirme ( Size ) ayarları penceresi

50

Page 62: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 6) SİMULATÖR KULLANIMI

Yazılan programı elektronik ortamlarda denemek yerine yazılım olarak ta adım adım çalıştırarak kontrol edebiliriz. Böylece mantık hatamız var ise daha kolay bulma imkanımız olur. Bu işleme similasyon denmektedir. Burada bunun nasıl yapılacağını öğreneceğiz.

Şekil 4-15 Similatör için Device seçimi penceresi Configure / Select Device seçiminden sonra açılan pencerede kullanacağımız pic çeşidi

seçilir. Seçilen PIC’e göre programın neleri desteklediğini görebiliriz. MPLAB SIM desteği varsa

similatör yapabiliriz anlamına gelmektedir. Daha sonra bunu aktif hale geçirebilmek için Debugger

/ Select Tool menüsünü takip ederek 3. satırdaki MPLAB SIM ‘i seçmemiz gerekir.

Şekil 4-16 Similatörü aktif hale getirilmesi

51

Page 63: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Son olarak yazdığımız programı derlediğimizde artık similatör çalışmaya hazır hale

gelecektir. Derleme işlemi yapılmadan similatör çalışmaz.

3

2

1

Şekil 4-17 Similatör doğrulama penceresi Similatörün aktifleştiğini yukarıda görüldüğü gibi üç şekilde anlayabiliriz. Similatör aktif

olmadığında 3 numaralı kutucuk içindekiler görünmez. Similatörün çalışması esnasında bir takım değerleri görmemiz gerekmektedir. Bunlardan

Özel fonksiyon registerleri görebilmek için view / Special Function Registers seçmemiz yeterli olacaktır.

Şekil 4-18 Özel fonksiyon registerlerinin ( SFR ) görüntülenmesi

52

Page 64: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Eğer kendi oluşturduğumuz dosya içeriklerini veya

özel fonksiyon registerlerinin bir kısmını görmek istediğimizde yanda şekilde görüldüğü gibi Watch penceresini açmamız gerekmektedir.

Şekil 4-19 Watch penceresinin açılması

Şekil 4-20 Görüntülemek istediğimiz dosyaların seçilmesi

Özel Fonksiyon registerlerini buradan seçebiliriz.

Kendi yaptığımız ve değişik dosyaları buradan seçebiliriz.

Seçim ok tuşu ile açılan kısımdan yapılmaktadır. Daha sonra sol

tarafta bulunan Add SFR veya Add Symbol ile bunu görüntü penceresine aktarmamız gerekmektedir. Burada gelen görüntü değeri hex formatında olup Value üzerinde iken Mouse sağ tuşa basıldığında açılan pencereden hangi tipte görüntüleneceğini klik yapmamız yeterli olacaktır.

53

Page 65: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Şekil 4-21 Görüntüleme özelliğinin belirlenmesi

7) BUTON EKLENMESİ VE KULLANILMASI :

Şekil 4-22 Buton eklenmesi

Add Row ikonuna bastığımızda buton eklemek için bir bölüm açılır. Daha sonra Pin kısmının altında beliren pinlerden bir tanesi seçilir. Action kısmında ise butonun 1 – 0 veya değiştirilebilir olacağına karar verilir. Genellikle burada toggle ile değiştirilebilen buton seçilir. Eğer bunu seçersek similasyon esnasında Fire butonuna her klik yapmamızda buton değeri; 1 ( high ) ise 0 ( Low ), 0 ( Low ) ise 1 ( high ) olarak değiştirilmiş olur. Yapılan bu düzeni istediğimizde kullanmak için saklayabiliriz.

Şekil 4-23 Butonların kullanımı syon

çalışt

Program satırında similaesnasında durma yapmak istiyorsak ( Break ) hangi satırda duracaksa bu satır üzerinde Mouse sol tuşu iki defa klik yapılırsa sol tarafta

işareti çıkacaktır. Run komutu ırıldığında bu işarete kadar çalışır ve

program beklemeye başlar. Eğer çift klik yapmada bu işaret çıkmıyorsa Editör ayarlarından ( Şekil 4 – 12 ) işaretlememiz gerekir.

54

Page 66: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Şekil 4-24 Çalışma arası verme 8) SİMİLATÖR İKONLARININ AÇIKLANMASI :

F6

Şekil 4-25 Similatör ( Debug ) ikonları

RUN : Similasyon çalışmaya başlar, halt tuşuna basılana kadar sürer ve durdurulduğunda

ALT : Program çalışmasını kesme tuşudur. Program olduğu yerde durur.

NİMATE : Belirtilen zaman aralıklarında program satır satır otomatik olarak çalışır. Ne

TEP INTO : Bu ikonu her klik yapmada programda bir satır çalıştırılmış olur.

TEP OVER : Bu ikonu her klik yapmada programda bir satır çalıştırılmış olur. Ancak CALL

TEP OUT : Eğer step into ile adım adım çalıştırılırken alt programın içerisine girilmiş ise bu

ESET : Programı reset eder ve tekrar programın en baştan başlaması için hazır hale getirir.

ütün bu tuşlar programda Debugger menüsünün içerisinde de mevcuttur. Bu menünü

F9 F5 Kısa yol tuşları F7 F8

Run Halt Animate Step Into Step Over Step Out Reset

değerleri yazar. H Akadar sürede satır çalıştıracağımızı setting kısmının Debugger animation kısmından değiştirebiliriz. S Skomutu ile çalıştırılan Altprogramları göstermez RETURN komutuna kadar otomatik çalıştırır. Program CALL ile çağrılma satırının bir altından devam eder. Örneğin CALL TIMER dediğimizde timer alt programının nasıl çalıştığını adım adım göremeyiz. Sikona klik yapmayla alt programdan hemen çıkılır ve ana programda kaldığı yerden devam eder. R

Bn en altında bulunan setting kısmından ise kullanılan osilatör hızını seçerek gerçek

zamanda program similasyonu da sağlanmış oluruz.

55

Page 67: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (6) MPASMWIN

ğer başka bir editör kulla

MPLAB progr

adır. Şekil 4-26 MPASMWIN bulunduğu kalasör

Yeri ise yükleme esnasında değişiklik yapılmamış ise şekil 4 - 26 deki gibidir. Bu Wind

MPASM çalıştırıldığında

Enmışsak ( örneğin >

Windows Note Pad). Sadece MPASM assembler kullanabiliriz. Gerçekte de MPLAB programı derleme esnasında MPASM’ yi kullanmaktadır.

Bu yazılım amı yüklenirken

bilgisayara aktarılmakt

ows versiyonu olup DOS versiyonunda çalışanı da vardır. şekil 4 – 27 deki pencere açılmış olur. Önce Browse kısmından kaynak dosyayı bulunuz. Daha sonra Hex Output kısmından INHX8M işaretlememiz gerekmektedir. Processor kısmından ise hangi tür pic kullanıyorsak bunu da burada seçmeliyiz. Son olarak Assemble ikonuna klik yaptığımızda program derlenmiş olur. Derlenen dosya kaynak dosyamız hangi klasörde ise aynı klasöre oluşturulur.

Şekil 4-27 MPASMWIN

56

Page 68: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 2 PIC yazıcı setini nasıl kullanırız ?

) PIC yazıcının ( writer ) kullanılması

) Bağlantısı kablosunu PC’ye bağlayınız.

Şekil 4-29 PC’ye bağlama yöntemi

(1

Şekil4-28 PIC Yazıcı ve eğitim seti

(2 Desk top makinelerde Note book makinelerde

57

Page 69: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (3) IC-PROG PROGRAMININ KULLANILMASI

ilgisayarda çeşitli dillerde yazılmış programlar derlenerek HEX dosya haline

devreyi de desteklemektedir. Bu kita

Bgetirilmektedir. Bu dosyaları da PIC mikrodenetleyiciye yazmamız gerekmektedir. Bunun için çeşitli devreler ve yazılımlar mevcuttur. En yaygın olarak kullanılanlardan biri de

IC-PROG yazılımıdır. IC-PROG yazılımı ile PIC çeşidinin büyük bir çoğunluğunu programlamamız mümkündür. Bunun yanı sıra bir çok programlayıcı ptaki yazıcı devresi AN589 Programmer donanımına

göre yapılmıştır. Programı çalıştırdığımızda donanım kısmından AN589 seçmemiz gerekmektedir. Bu yazılımı kurmamıza da gerek yoktur. Herhangi bir yerden kopyalamamız veya internetten indirmemiz yeterli olacaktır. Programın internet adresi www.ic-prog.com ‘dur.

ININ YAPILMASI ımızda ilk defa karşımıza İngilizce versiyonu açılır. İlk

donanım

1) YAZICI AYARYukarıdaki ikona çift tıkladığ seçimi ise JDM programmer’dir. Makinemize bu ayarları bir defa yapmamız yeterli

olacaktır. Kapanıp açıldığında bizim son ayarlarımız gelmektedir. Öncelikle yazıcı tipimize göre donanım ( hardware ) AN589 Programmer’ e seçmemiz gerekmektedir. Bunun için Setting ve Hardware menülerini takip etmemiz, F3 tuşuna basmamız veya ana sayfada

tuşuna basmamız yeterli olacaktır. Her üç yolda aynı menüyü açar.

Şekil 4-30 AN589 seçim penceresi

etting / Hardware menüsünden Programmer için AN589 seçmemiz gerekir. Daha sonra O

SK ile menüdeki işlemimiz son bulmaktadır.

58

Page 70: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) YAZILIMIN TÜRKÇELEŞTİRİLMESİ Kullandığımız yazılımın Türkçe

olab

Ş türülmesi

Şekil 4-33 Yazılımın Türkçe olmuş durumu

ilmesi içinde Setting Options menüsünü takip etmemiz gerekmektedir. Açılan Options menüsünden Language kısmıondan Turkish seçilip OK ile çıkıldığında program kendini bir defa açıp kapamak suretiyle programımız artık Türkçe olmuştur.

Şekil 4-31 Options ayarları

ekil 4-32 Yazılımın Türkçe hale dönüş

59

Page 71: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

3) PIC TÜRÜNÜN SEÇİLMESİ

Bu yazılım ve yazıcı devremiz ile bir çok PIC çeşidini rahatlıkla program

zde karşım

sa yol atamasının yapılması Tamam ile menüden er atanmış olur ve

artık s

Şekil 4-35 PIC çeşidinin seçilmesi

layabilmekteyiz. Tabi ki her defasında programlamak istediğimiz PIC çeşidini bulmak zaman almakta ve sıkıcı olmaktadır. Bunu için daha önceden belirleyeceğimiz 4 adet PIC çeşidine CTRL + F1 den CTRL + F4 e kadar kısa yol oluşturabilmek mümkündür.

Bunu gerçekleştirebilmek için Ayarlar Seçenekler menüsünü takip ettiğimiıza aşağıdaki menü çıkmaktadır. Burada Kısayollar menüsü seçilerek hangi kısa yol

tuşuna hangi PIC çeşidi atanacaksa bunlar seçilir.

Şekil 4-34 Kıçıkıldığında kısa yol tuşlarına seçilen PIC’ l

ürekli onlar karşımıza çıkar. PIC çeşidi seçmenin bir başka yolu ise ana menüde aşağıdaki şekilde olduğu gibi açılan pencereden olmaktadır.

60

Page 72: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

4) KULLANILAN İŞLETİM SİSTEMİNE UYUMU SAĞLAMA

IC-PROG yazılımını kullanmaya başlamadan evvel son yapacağımız ayar ise kullana

Şekil 4-36 İşletim sistemi uyumunu ayarlama

unun için Ayarlar Seçenekler menüsü takip ederek Karışık yazan kısmı seçmemiz

daha

ekil 4-37 İşletim sistemi uyumunu

cağımız bilgisayarda kurulu olan yazılıma uyum sağlamak olacaktır. Programı eğer Windows 95 – Windows 98 – Windows 98 me gibi yazılım yüklü makinelerde kullanacaksak bunun için ayarlarında herhangi bir değişiklik yapmamıza gerek yoktur. Ancak Windows 2000 - WindowsXP – Windows NT gibi yazılım yüklü makinelerde kullanacaksak ayarlarını buna uyumlu hale getirmemiz gereklidir.

Bsonra karşımıza çıkan pencerede ise NT/2000/XP kutucuğunun işaretli olması

gerekmektedir. Bunu işaretleyip Tamam ile pencereyi kapattığımızda ayarların geçerli olabilmesi için program kendini bir kez açıp kapaması gerekmektedir. Tekrar açılan programda artık kullandığınız yazılım türüne uygun hale gelmiş olmaktadır.

Şayarlama

61

Page 73: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) SÜRÜKLE BIRAK AYARI

Kullanımı daha kolay hale getirebil

Şekil 4-38 Sürükle Bırak ayarı

6) DO RULAMA AYARI

Ic-prog yazılımı ile programlama

Şekil 4-39 Doğrulama ayarı

mek için değişik ayarlar da gerçekleştirebiliriz. Bunlardan HEX uzantılı bir dosyayı sürükleyerek programımızın üzerine bıraktığımızda açılmasını istiyorsak Ayarlar / Seçenekler / Sürükle Bırak kısmına ulaşıp buradaki kutucuğu işaretleyip Tamam ile çıkmamız yeterli olacaktır. Bu ayarı bir defa yapmamız yeterli olacaktır.

Ğ

gerçekleştirirken veya PIC’teki bir bilgiyi silme esnasında bunun yanlışlıkla yapılabileceğini düşünenler için doğrulama bölümünü aktif hale getirmemiz mümkündür. Hangi durumda onaylama istiyorsak bunun kutucuğunu işaretlememiz yeterli olacaktır. Örneğin Aygıt programlanıyor kutucuğu işaretli ise ve biz yazılıma programlama komutunu uyguladığımızda aşağıdaki soruyu mutlaka sorarak doğrulama gerçekleştirir. Eğer işaretli değilse direk programlama işlemini gerçekleştirir.

Şekil 4-40 Doğrulama penceresi

62

Page 74: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 7) ANA MENÜDEKİ İKONLAR VE İŞLEVLERİ

Dosya Açma Dosya kayıt etme Programlayıcı Seçimi

Seçenekler menüsünü açar PIC’teki programı okuma PIC’e program yazma

PIC’teki programı silme Aygıt doğrulaması yapar Smartcard sihirbazı

Yazılan veya okunan programın Assembler görünümü

Yazılan veya okunan programın HEX görünümü

Programlanacak PIC türü

Osilatör seçim penceresi

Aktif olan Buffer katları. Bunlardan herhangi birini

seçebiliriz.

PIC’ in kimlik numarası seklindedir. Bunu değiştirmekte mümkündür.

Yazılım programa göre bir sayı üretir. Her hangi bir değişiklik yapıldığında bu sayı da değişi

7) KARŞILAŞTIRMA YAPILMASI İki program arasında

fark v

i

r. Böylece programda bir değişiklik yapıldığında yenisinin açılıp açılmadığını bu sayı ile kontrol edebiliriz veya Buffer 2’ye yazılan program okutulursa bu sayı aynı ise yazım kesin olarak doğru sonucuna varılır.

ar ise ve bu farkın nerelerde olduğunu anlamak çin karşılaştırılacak iki programı

değişik Buffer‘lara açmamız gerekir. istiyorsak bunu da yazılım ile karşılaştırabiliriz. Bunun

63

Page 75: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Örneğin birini BUFFER 1 ‘e diğerini ise BUFFER 2 ‘ ye açabiliriz. Daha sonra Tampon

Karşılaştır seçildikten sonra Buffer 1

Şekil 4-41 Karşı ştırma penceresi

Eğer programda d şekildeki gibi adım adım österebilmektedir. Örnekte 2135 ile 2145 arasındaki farkı göstermektedir. Başka değişikliler

menüsünden karşılaştır seçilir.

aktif olduğundan karşılaştırılacak diğer Buffer işaretlenir. Daha sonra Compare ( Karşılaştır) ikonu seçilerek karşılaştırma yapılır. Her ikisi

de aynı ise yandaki bilgi mesajı gözükür.

la

eğişiklik varsa bunu da aşağıdaki golup olmadığını anlayabilmek için ise Next tuşuna basmamız yeterli olacaktır.

Şekil 4-42 Farklı programların karşılaştırılması

8) YAZIM DOĞRUL

program yazarken iki çeşit kontrol yapmaktadır. Birincisi önce ir adresi yazar, sonra onu okur ve doğrular bu işlem program yazımı bitene kadar gerçekleşir.

Hata o

AMASI

IC-Prog yazılımı PIC’ e b

lursa hemen uyarı verir. İkinci bir seçenek ise tümünü PIC’ e yazar ve hepsini okuyup doğrulama yapar. Bu iki seçenek programın PIC’ e doğru yazılıp yazılmadığını büyük ölçüde bize bildirir. Tabi ki bu işlem bize program yazma esnasında zaman harcamamıza sebep olur ve işlem süresi uzar. Ancak okuyup doğrulama yapmasını istemediğimizde daha kısa sürede işlem gerçekleşir fakat sağlıklı yazıp yazmadığı kuşkuludur.

64

Page 76: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Bu işlemleri yazılımda Ayarlar / Seçenekler kısmına girdiğimizde karşım

Şekil 4-43 Programlama doğrulama penceresi

(4) Bu sonuç ifadesi

Şekil 4-44 Sonuç ifadesi

ıza aşağıdaki gibi çıkan pencereden ayarlayabiliriz.

programın

PB0 LED yanar

65

Page 77: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Programın açıklanması ) Program Listesi ve akış diyagramı

84.INC” ;Adresleri belirten dosyayı yükle (1) F84 ün tanıtımını yap (2)

tini 1 y p ( LED yak ) EVAM dır

(1 INCLUDE”P16F LIST P=16F84 ;16 BSF STATUS,5 ;Bank 1’ e geç (3) CLRF TIRSB ;PORTB nin hepsini çıkış yap (4) BCF STATUS,5 ;Bank 0’ a geç (5) CLRF PORTB ;PORTB’ nin hepsini 0 yap (6) BSF PORTB,0 ;PortB’ nin 0.bi a (7) D GOTO DEVAM ;Sonsuz döngü ile programı sonlan (8) END (9)

Akış Diyagramı

INCLUDE”P16F84.INC”

LIST P=16F84

BSF STATUS,5

CLRF TRISB

BCF STATUS,5

CLRF PORTB

BSF PORTB,0

GOTO DEVAM

l 4- gramı

BAŞLA

Adres le leri yük

Bank 1’ e geç

PIC seçimi

Port B’

ış

nin tümü

çık

nin hepsi 0

Bank 0’ e geç

PortB’

LED yak

Son

Şeki 45 Akış diya

66

Page 78: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

) Yöntem şartnamesi ( Specification of processor )

List opsiyonu

NHX8M,R=DEC

ek Varsayım Tanım

(2

LIST P=16F84 (1) LIST talimat dilidir. LIST 1) Format List [<list_opsiyon>,…,<list_opsiyon>] Örnek >>> LIST P=16F84,F=I 2) Açıklama

Seçen

b=nnn 8 TAB boşluk sayısının tanımı c=nnn 132 Bir satırtaki harf ın tanımı sayısınf=<format> HX8M nın tanımı IN HEX dosya formatındaki çıktıfree FIXED Serbest form fixed FIXED Sabit form mm=ON|OFF asının listeye yazılması ON|OFF ON Memory haritn=nnn ki satır sayısının tanımı 60 Bir sayfadap=<type> None İşlemci tanımı ( Example: P=,16F84 ) r=<radix> X > HE Numerik değer tipi <HEX,DEC,OCTst=ON|OFF ON|OFF ON Sembol tablosunun listeye yazılması t=ON|OFF OFF > ON|OFFSatır değiştirme < satır taşması sonucuw=0|1|2 0 Assemblerin mesaj seviye tanımı x=ON|OFF ON Makro geliştirilmiştir. ON|OFF

nn’ mal numa

‘n desi ralarla tanımlama eklenmesidir.

Tablo 4-2 Opsiyonların açıklanması

67

Page 79: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

) Port’un kurulumu

IC’i kullanmaya başlamadan önce portların kurulması ( I/O belirlenmesi ) gerekmektedir.

Şekil 4- tun k

Şekil 4-47 Bank seçimi

(3 1) Bank seçimi P

46 I/O Por urulumu

INDIRECT ADDR00

Bank 0INDIRECT ADDR

OPTIONTMR0

PCL PCL

STATUS STATUS

FSR FSR

TRISA

TRISB

PORTA

PORTB

EECON1

EECON2

EEDATA

EEADR

PCLATH

INTCON

PCLATH

INTCON

01

02

03

04

05

06

07

08

09

0A

0B

0C

4F

A

8B

68byte

Bank 1

Work memory

80

81

82

83

84

85

86

87

88

89

8

RP1 RP0bit5bit6bit7

bit 5=' 1 '

bit 5= ' 0 '

STATUS register

GPR

(Address 03h)

BAŞLA

PORT’un kurulumu

Bank1 seçimi

Bank0 seçimi

SON

BSF STATUS,RP0 ( BSF H’03,5 )

B Portların giriş veya çıkış olarak kullanılacaTRISA ve TRIS

ğının karar verildiği yerdir.

( BSF H’03,5 )BSF STATUS,RP0

68

Page 80: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

PIC’in portlarının giriş/çıkış ( I/O ) belirlendiği yazmaç ( Special Function Register )( Özel fonksiyon kayıdı ) h) olarak adlandırılır.

( BSF H’03’,5 ) imi

ak kurulumu. )

BCF STATUS,RP0 ( BCF H’03’,5 )

çimi

(Örnek 1) PORTB nin hepsi ÇIKIŞ

F TRISB ( CLRF H’86’ )

H’00’ ; W register << 00 MOVWF TRISB ; TRISB << W register

(TRISA(85h) ve TRISB(86

TRIS registerleri Bank1’dedir. Bank1’e geçiş STATUS yardımı ile olur. Statusun adresi de (03h)’ dir.. (Şekil 4-47) Bank 1 seçimini gösterdiği örnek program aşağıdaki gibidir.

BSF STATUS,RP0

Bank1 seç (PORT ların I/O olar

Bank0 se

2) PORT ‘ların kurulumu (form 1) CLR (form 2) MOVLW ( MOVWF H’86’ )

7 5 4MSB

H'86'TRISB

H'06'PORTB

6 3 2 1 0 LSB

00000000

PB0PB1PB2PB3PB5 PB4PB6PB7

OUTOUTOUTOUTOUTOUT OUTOUT

Şekil 4-48 PORTB’nin hepsi ÇIKIŞ

69

Page 81: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

rnek 2) PORTB’nin hepsi GİRİŞ (form 1) MOVLW H’FF’ ; W register << FF

VWF TRISB ; TRISB << W register

; TRISB << W register

(Örnek 3) PORTB bit 0, bit 1,bit3 >> GİRİŞ

H’0A’ ; W register << 0Ah MOVWF TRISB ; TRISB << W register

010’ ; W register << FF MOVWF TRISB ; TRISB << W register

(Ö MO ( MOVWF H’86’ ) (form 2) MOVLW B’11111111’ ; W register << FF MOVWF TRISB ( MOVWF H’86’ ) 7 5 4 2MSB

H'86'TRISB

H'06'PORTB

Şekil 4-49 PORTB’nin hepsi GİRİŞ

bit 2,bit 4,bit 5,bit 6,bit 7 >> ÇIKIŞ (form 1) MOVLW ( MOVWF H’86’ ) (form 2) MOVLW B’00001 ( MOVWF H’86’ )

6 3 1 0 LSB

11111111

PB0PB1PB2PB3PB5 PB4PB6PB7

INININ IN IN IN IN IN

H'86'

H'06'PORTB

TRISB

7 5 4MSB 6 3 2 1

01010000

PB0PB1PB2PB3PB5 PB4PB6PB7

0 LSB

ININ OUTOUTOUTOUTOUTOUT Şekil 4-50 Farklı I/O Giriş Çıkışlar

70

Page 82: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (Örnek 4) PORTA’nın heps

OVLW H’1F’ ; W register << 1Fh MOVWF TRISA ; TRISA << W register

; W register << 1F MOVWF TRISA ; TRISA << W register

(4) LED‘lerin yakılması

RTB ;PORTB nin hepsi 0 >> Bütün LED’ler sönük BSF PORTB,0 ;PORTB’nin 0. bitindeki LED yanar

1) PORTB’nin adresi 06h dir. CLRF ile bu adresteki bilgileri 0 hale getiririz.( Temizleriz )

i GİRİŞ (form 1) M ( MOVWF H’86’ ) (form 2) MOVLW B’11111’ ( MOVWF H’86’ )

H'85'TRISA

H'05'PORTA

4 3 2 1 0 LSBMSB

11111

PA0PA1PA2PA3PA4

IN ININININ

PIC16F84not available

PIC16F84not available

Şekil 4-51 PORTA’nın hepsi GİRİŞ

CLRF PO

(BSF H’06’,0) STOP GOTO STOP ;program biter END

CLRF H’06’

7 6 5 4 3 2 1 0 LSBMSB

H'06'PORTB

00000000

Şekil 4-52 PORTB’nin temizlenmesi

71

Page 83: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) BSF PORTB,0 ( BSF

k ) lıştırma 4-1

Aşağıdaki şekle göre PB

lıştı Aşağıdaki şekle göre PB7 deki LED’in yanmasını sağlayınız.

Şekil 4-53 PORTB >> 0 (LED sönük)

H’06’,0 )

Şekil 4-54 BIT0’ ın set (1) hale getirilmesi

Şekil 4-55 PORTB >> 1 ( LED yanıA

2 deki LED’in yanmasını sağlayınız. A rma 4-2

LED

ULN2803

300

'1' '0'

PORTB

+5V

PIC

16F8

4

LED

ULN2803

300

'0' '1'

PORTBPI

C16

F84

+5V

H'06'

3 2 1 0 LSBMSB

10000000PORTB

7 6 5 4

PB0

LED ON

PB7 PB2 PB1PB3PB4PB5PB6

PB0

LED ON

PB2P B 7 PB1PB3P B4P B 5 P B 6

72

Page 84: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

4 İki veya daha fazla LED‘ in yakılması ( MOV komutunun kullanılması ) Örnek 1 Aşağıdaki LED lerin yanmasını sağlayan programın tasarımı. PB0PB2PB7 PB1PB3PB4PB5PB6

LED ON LED ONLED ON

Şekil 4-56 Örnek 1 (1) Program 4-1 Bir kaç LED in yakılması. INCLUDE ”P16F84.INC” ;include dosyasının kullanımı (1) LIST P=16F84 ;16F84 ün tanıtımı (2)

BSF STATUS,RP0 ;bank 1 seçimi (3) CLRF PORTB ;PORTB’nin tümü çıkış (4) BCF STATUS,RP0 ;bank 0 seçimi (5) CLRF PORTB ;PORTB’nin hepsi 0 (6) MOVLW H’54’ ;W register << 54h (7) MOVWF PORTB ;PORTB << W register(LED ON) (8) STOP GOTO STOP ;program sonu (9) END (10)

(1) >> (5) Program başlangıcı

(2) Include dosyası

INCLUDE “P16F84.INC”

16F84 gibi Mikrodenetleyicilerin belleğinde bulunan yazmaçların ( registerlerin ) adresleri sabittir. Bu nedenle bunları her programda yazmak yerine INCLUDE komutunu kullanarak tamamını tek bir komutla tanımlama imkanına kavuşmuş oluruz. ( Dosyanın tamamı sayfa ........ ) Register adını include dosyasında kullanabiliriz.

73

Page 85: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

* Sık kullandığımız yazmaç ( registerler ) adları ve adresleri ; Yazmaç ( register ) tanımları

W EQU H'0000'

F EQU H'0001'

INDF EQU H'0000'

TMR0 EQU H'0001'

PCL EQU H'0002'

STATUS EQU H'0003'

FSR EQU H'0004'

PORTA EQU H'0005'

PORTB EQU H'0006'

OPTION_REG EQU H'0081'

TRISA EQU H'0085'

TRISB EQU H'0086'

;----- STATUS Bitleri------------------------------------------------------

IRP EQU H'0007'

RP1 EQU H'0006'

RP0 EQU H'0005'

NOT_TO EQU H'0004'

NOT_PD EQU H'0003'

Z EQU H'0002'

DC EQU H'0001'

C EQU H'0000'

(6) >> (8) Programda LED lerin yakılması

CLRF PORTB ;PORTB nin tamamının 0 olması (6) MOVLW H’54’ ;W register << 54h (7) MOVWF PORTB ;PORTB << W register (LED ON) (8)

74

Page 86: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Akış diyagramı

PORTB<<W reg

(LED yak)

PORTB yi temizle

Son

W reg << 54h

(LED data)

PORTB nin

tamamı çıkış

Başla

Şekil 4-57 Akış diyagramı (3) MOV komutu

00101010

H'06'PORTB

7 6 5 4 3 2 1 0 LSBMSB

00101010

Wregister

MOVWF PORTB

LED

ON ON ONOFF OFF OFFOFF OFF

MOVLW H'54'

0 1 0 1 0 1 0 0

Şekil 4-58 MOV komutu

75

Page 87: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Alıştırma 4-2 7 segment LED display’in kullanımı

7segment bilgi x g F e d c b a PORTB 0 1 1 1 0 0 0 1

a

b

d

e c

f

x

g

Şekil 4-59 7 segment LED display’in kullanımı

Alıştırma 4-3 PIC uçları için 7 segment display tablosunu doldurunuz.

7segment x g f e d c b a

PORTB PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

HEX data

0 1 2 3 4 5 6 7 8 9 A b C d E F 0 1 1 1 0 0 0 1 71h

76

Page 88: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

5 Timer Programı (DECFSZ) Bu program bir LED’in ( PB0’ daki ) yanıp sönmesini sağlar. Bunun yanıp sönmesini sağlayabilmek için zamanlayıcıya ( timer ) ihtiyaç vardır. Zamanlayıcı aşağıdaki şekilde yapılır.

LED

LED

LED

LED

PB0

ON

ON

OFF

OFF

50ms

50ms

50ms

50ms

Şekil 4-60 LED’in yanıp sönmesi (1) Zamanlayıcı ( timer ) program systemclock

execution clock

(4 MHz)

(1 MHz)

1 uS

Şekil 4-61 Zaman ( darbe ) pulsleri

PIC eğitim setinde 4 MHz’lik kristal osilatör kullandık. Uygulama zamanı ise sistem zamanının 1/4 katıdır. Bir başka ifadeyle sistem zamanı uygulama zamanının dört katıdır. 1 clock zamanı ( 1 / 1 x 106 = 1 x 10-6 = 1 us).

PIC de bir komutun uygulanması da çoğunlukla bir saykıldır. PIC uygulama tablosundan PIC’in hangi komutu kaç saykıl sürede çalıştığını bulabiliriz.

77

Page 89: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

1) Timer program ( yaklaşık 2ms )

COUNTER EQU H’10’ MOVLW D’200’ ;1CLOCK MOVWF COUNTER ;1CLOCK DLY1 GOTO $+1 ;2CLOCK GOTO $+1 ;2CLOCK GOTO $+1 ;2CLOCK NOP ;1CLOCK DECFSZ COUNTER,1 ;1(2)CLOCK GOTO DLY1 ;2CLOCK

1 clock = 1 / 4 = 1 us Zamanlayıcı ( timer ) programın toplam gecikme süresini hesaplayacak olursak ; 1 + 1 + 200 x (2 + 2 + 2 + 1 + 1 + 2) + 1 = 2003 us = 2ms

DECFSZ COUNTER,1 GOTO DLY1

Evet

RETURN

COUNTER << COUNTER - 1

Harcanan zaman (7 clock)

COUNTER : 0 ?

Hayır

COUNTER << 200

BAŞLA

Şekil 4-62 Timer programının akış diyagramı

78

Page 90: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Timer program ( yaklaşık 50ms ) Eğer daha uzun süreli bir zamanlayıcı yapmak istiyorsak iki tane döngüye ihtiyaç vardır. Örneğin 50 ms lik bir zamanlayıcı ( timer ) program yazmak istersek

COUNT1 << 25

RETURN

COUNT2 << 200

COUNT1 << COUNT1 - 1

Harcanan Zaman (7 clock)

COUNT2 : 0 ?

Hayır

Evet

Evet

COUNT1 : 0 ?

COUNT2 << COUN2 - 1

DLY2

Hayır

BAŞLA

DLY1

Şekil 4-63 Uzun süreli zamanlayıcı programın akış diyagramı

79

Page 91: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

( 50ms program ) COUNT1 EQU H’10’ COUNT2 EQU H’11’ MOVLW D’25’ MOVWF COUNT1 DLY1 MOVLW D’200’ ;1CLOCK MOVWF COUNT2 ;1CLOCK DLY2 GOTO $+1 ;2CLOCK GOTO $+1 ;2CLOCK

GOTO $+1 ;2CLOCK NOP ;1CLOCK

DECFSZ COUNT2,1 ;1(2)CLOCK GOTO DLY2 ;2CLOCK DECFSZ COUNT1,1 ;1(2)CLOCK GOTO DLY1 ;2CLOCK Alıştırma 4-4 Yukarıdaki programın harcanan zamanını lütfen hesaplayınız.

80

Page 92: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(2) Program 4-2 ; LED’ in 50mS. aralıklarla yanıp sönmesini sağlayan program.

PORTB yi temizle

PORTB nin sıfırıncı

bitini 0 yap

50ms TIMER

çağır

PORTB nin sıfırıncı

bitini 1 yap

50ms TIMER

çağır

PORT B’ nin tümünü

çıkış yapınız

Başla

Şekil 4-64 50ms aralıklarla yanıp sönen programın akış diyagramı

81

Page 93: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

; LED yanıp sönme programı (50ms) LIST P=16F84,R=DEC INCLUDE ”P16F84.INC” ;include dosyasını kullandık COUNT1 EQU H’10’ COUNT2 EQU H’11’ BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 CLRF PORTB LOOP

BSF PORTB,0 CALL TIMER BCF PORTB,0 CALL TIMER GOTO LOOP TIMER MOVLW D’25’ MOVWF COUNT2 DLY1 MOVLW D’200’ ;1CLOCK MOVWF COUNT1 ;1CLOCK DLY2 GOTO $+1 ;2CLOCK GOTO $+1 ;2CLOCK

GOTO $+1 ;2CLOCK NOP ;1CLOCK

DECFSZ COUNT1,1 ;1(2)CLOCK GOTO DLY2 ;2CLOCK DECFSZ COUNT2,1 ;1(2)CLOCK GOTO DLY1 ;2CLOCK RETURN ;2CLOCK END

82

Page 94: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Alıştırma 4-5 Programı 0.5S olarak hesaplayıp değiştiriniz ve uygulayınız. Alıştırma 4-6 Aşağıdaki şekildeki gibi LED lerin yanıp sönmesini sağlayan program yazınız ve uygulayınız.

LED

LED

LED

ON200ms

200ms

200ms

ON ONON

ON200ms

ON ONON

ONON ONON

ONON ONON

83

Page 95: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

6 LED lerin ardışık olarak yanması ( Dönüş uygulaması ) (1) Dönüş programı 1

LED

LED

LED

LED

ON200ms

200ms

200ms

200ms

ON

ON

ON

LED

200ms

LED

200ms

LED

200ms

LED

200ms

ON

ON

ON

ON

LED

200ms

Şekil 4-65 Dönüş programı 1) Dönüş uygulaması

RLF f,d ‘f ’ file yazmacının ( registerinin ) içeriği tam bir bit sola doğru kaydırılır. En son bitteki b7 ise Carry Flag dediğimiz taşıma bayrağına aktarılır, taşıma bayrağındaki ise baş taraftaki b0’a aktarılarak dönüş sağlanmış olur.

b7 b6 b5 b4 b3 b2 b1 b0Z C D

W yazmacı

Memory f

d=0

d=1

Şekil 4-66 Dönüş uygulaması

84

Page 96: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Program 4-3 ;******************************************************************* ; LED’lerin yaklaşık 200 ms ile dönmesi ;*******************************************************************

LIST P=16F84,R=DEC INCLUDE “P16F84.INC” COUNT1 EQU H'10' COUNT2 EQU H'11' BSF STATUS,RP0 ;Bank 1 e geç CLRF TRISB ;TRISB=0 PORTB tümü çıkış BCF STATUS,RP0 ;Bank 2 ye geç CLRF PORTB ;PORTB yi temizle INIT BCF STATUS,0 ;taşıma bayrağını temizle MOVLW B'00000001' ;ilk değer girişi MOVWF PORTB ;Bu girişin PORTB’ye aktarımı LOOP CALL TIMER ;200ms gecikme RLF PORTB,F ;1 bit sola kaydır GOTO LOOP TIMER ; yaklaşık 200ms gecikme ;************************************************************ ;* 1+1+100*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=200605us * ;************************************************************ MOVLW 100 ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW 200 ; 1clock

MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2) clock GOTO DLY2 ; 2clock

DECFSZ COUNT1,1 ; 1(2 )clock GOTO DLY1 ; 2clock RETURN ; 2clock END

85

Page 97: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

3) Akış diyagramı

Taşıma bayrağını temizle

PORTB yi temizle

PORTB’dekileri 1 bit sola kaydır

200ms TIMER çağır

PORTB << B’00000001’

PORTB nin tamamı

çıkış

Başla

Şekil 4-67 Yaklaşık 200 ms.yanan LED’lerin sola doğru hareket akış diyagramı

Alıştırma 4-7 LED lerin sağa doğru hareketin sağlayan program yazınız.( Gecikme 500ms )

LED

LED

LED

LED

500ms

500ms

500ms

500ms

ON

ON

ON

LED

500msLED

500ms

LED

500ms

LED

500ms

ON

ON

ON

ON

LED

500ms

ON

86

Page 98: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(2) Dönüş programı 2 LED’ lerin yanması aşağıdaki gibi olacaktır.

Şekil4-68 LED’lerin yanma şekli

1) BTFSC komutun uygulaması ( Bit Test f, Skip if Clear ) BTFSC f,b

Eğer f yazmacını ‘b’ ninci biti ‘0’ ise program akışı bir satır atlayarak ikinci satırdan devam eder. Eğer f yazmacının ‘b’ ninci biti ‘1’ ise program akışı bir alt satırdan çalışmaya devam eder.

7 6 5 4 3 2 1 0

BTFSC memory,bit

7 6 5 4 3 2 1 00BTFSC memory,4

GOTO ADDRMOVLW H'0A'

7 6 5 4 3 2 1 01BTFSC memory,4

GOTO ADDRMOVLW H'0A'

Şekil 4-69 BTFSC komut uygulaması

87

Page 99: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Program 4-4 ;******************************************************************* ; LED’lerin sağa ve sola doğru hareketi ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” COUNT1 EQU H'10' COUNT2 EQU H'11' BSF STATUS,RP0 ;Bank 1’e geç CLRF TRISB ;TRISB=0 PORTB’nin tümünü çıkış yap BCF STATUS,RP0 ;Bank 0’a geç CLRF PORTB ;PORTB’yi temizle INIT BCF STATUS,C ;taşıma bayrağını temizle MOVLW B'00000001' ;ilk değer girişi MOVWF PORTB ;ilk değeri PORTB’ye aktar LOOP1 CALL TIMER ;0.5s gecikme RLF PORTB,F ;1 bit sola kaydır BTFSS STATUS,C ;carry bit=1 >> ise >> LOOP2’ye git GOTO LOOP1 LOOP2 CALL TIMER ;0.5s gecikme RRF PORTB,F ;1 bit sağa kaydır BTFSS STATUS,C ;carry bit=1 >> ise >> LOOP1’ye git GOTO LOOP2 GOTO LOOP1 TIMER ; yaklaşık 0.5s Timer ;************************************************************ ;* 1+1+250*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=501505us * ;************************************************************

MOVLW 250 ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW 200 ; 1clock MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock

88

Page 100: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END 3) Akış diyagramı

200ms

gecikme

Başla

yap

PORTB’yi temizle

Taşıma bayrağını temizle

PORTB << B’00000001’

Hayır

1

200ms

gecikme

Carry bit = 1

Hayır

PORTB yi sola

doğru 1 bit kaydır.

PORT B’ nin tamamını çıkış

Evet

1

Carry bit = 1

Şekil 4-70 Akış diy

89

PORTB yi sağa doğru

1 bit kaydır

ag

Evet

ramı

Page 101: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Alıştırma 4-8 Aşağıdaki şekilde görüldüğü gibi LED leri yakan program yapınız ve uygulayınız ( Gecikme 200ms )

Alıştırma 4-9 Aşağıdaki şekilde görüldüğü gibi LED leri yakan program yapınız ve uygulayınız ( Gecikme 200ms )

90

Page 102: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

7 İncrement and decrement uygulaması ( INC , DEC ) Artırma ve Azaltma komutunun uygulaması Bu program data bilgilerini +1 artırır veya -1 azaltır. Eğer +1 artırmak istiyorsak bunun için “increment file” kısaltması olan “INCF” kullanılır, -1 azaltmak istiyorsak “decrement file” kısaltması olan "DECF" komutu kullanılır. Her iki komutta PIC de mevcuttur. (1) Program 4-5 0 dan 255 e kadar ardışık olarak artan ve bunu LED’le gösteren bir program yapalım ( gecikme yaklaşık 0.1s )

Şekil 4-71 Uygulama 4-13 1) Akış diyagramı

PORTB’yi temizle

PORTB’ yi 1 artır.

0.1s gecikme yap

PORT B nin

tamamı çıkış

Başla Şekil 4-72 Uygulama 4-13’ün akış diyagramı

91

Page 103: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Program yazılışı ;******************************************************************* ; PORTB data bilgilerini 0 dan 255’e kadar 1’er artıran program ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” COUNT1 EQU H'10' COUNT2 EQU H'11' BSF STATUS,RP0 ;Bank 1 e geç CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank 0 a geç CLRF PORTB ; PORTB’yi temizle LOOP CALL TIMER ;0.1s gecikmeyi çağır INCF PORTB,F ;PORTB’yi 1 artır. GOTO LOOP TIMER ; about 0.1s Timer ;************************************************************ ;* 1+1+50*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=100305us * ;************************************************************

MOVLW 50 ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW 200 ; 1clock MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

Alıştırma 4-10 4-13 programındaki INCF komutunu DECF komutu ile değiştirerek tekrar

uygulayınız.

92

Page 104: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

8 Anahtarlama arabirimi (1) Anahtarlama devresi

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA0

PA1

PA2

PA3

OSC1

OSC2

10k X 4 PIC16F84

MCLR

Şekil 4-73 PIC eğitim setinin anahtarlama birimi

1) Anahtarlama arabirimin açıklanması Butona basmadığımız zaman >> PA girişi '1' dir. Butona bastığımız zaman >> PA girişi '0' dır. (2) Programın açıklanması 1) PA0 butonu basıldığında LED1(PB0) yakan “LED2(PB1) sönüktür.” 2) PA1 butonu basıldığında LED2(PB1) yakan “LED1(PB0) sönüktür.” 3) Her iki butonada basılı değilse LED ler sönük olan bir program yapalım.

93

Page 105: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(3) Program 4-6 ;******************************************************************* ; PA0 >> ON PB0 >> ON ; PA1 >> ON PB1 >> ON ; INCLUDE DOSYASI KULLANILACAKTIR ;******************************************************************* LIST P=16F84,R=DEC INCLUDE”P16F84.INC” ;include dosyası INIT BSF STATUS,RP0 ;Bank 1 e geç MOVLW H’1F’ MOVWF TRISA ;PORTA Tamamını giriş yap CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank 0 a geç CLRF PORTB ;PORTB yi temizle MAIN BTFSC PORTA,0 ;PA0 basılımı?(PA0 << Low) GOTO SKIP1 ;PA0 basılı değil >> SKIP1(PA0 << High) MOVLW H'01' ;PA0 basılı >> PB0 LED yanar MOVWF PORTB GOTO MAIN SKIP1 BTFSC PORTA,1 ;PA1 basılımı? GOTO SKIP2 ;PA1 basılı değil >> SKIP2 MOVLW H'02' ;PA1 basılı >> PB1 LED yanar MOVWF PORTB GOTO MAIN SKIP2 MOVLW H'00' ;RA0 ve RA1basılı ise >> LED ler sönük MOVWF PORTB ;PORTB >> 0 yap GOTO MAIN STP GOTO STP END

94

Page 106: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(4) Akış diyagramı

PORTB bit0’daki LED

yak

Hayır

Evet

PORTB bit1’deki LED

yak

PORTB tümünü

söndür

Hayır

Evet

PA1 : Basılımı(Low)?

PA0 : Basılımı(Low)?

PORTB’yi temizle

PORTB çıkış

PORTA giriş yap

Başla

Şekil 4-74 Akış diyagramı

Alıştırma 4-11

Buton PA0 >> Basılı ON 7Segment >> 0 Buton PA1 >> Basılı ON 7Segment >> 1 Buton PA2 >> Basılı ON 7Segment >> 2 Buton PA3 >> Basılı ON 7Segment >> 3 Buton basılı değil OFF 7Segment >> F

95

Page 107: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Alıştırma 4-12 Aşağıdaki şekilde görüldüğü gibi LED leri yakan bir program yapalım.

> PA0 Buton basılı olduğu sürece.( gecikme 200ms )

> PA1 Buton basılı olduğu sürece.( gecikme 200ms )

96

Page 108: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

9 RETLW komutunun uygulaması (1) Retlw işlem sırası

PIC işlem sırası ”ADDWF PCL,W” ve ”RETLW” komut uygulaması şeklindedir.

( Altprogram formu ) (2) Program 4-7 Bu program 7 segmenli ardışık LED lerin 0 dan 9 a kadar göstermesinde kullanılır.

1) W registerine 0 dan 9 a kadar olan değerler atanır ve program bunu altprogram tablosundan çağırır.

(CALL SEGDAT) 2) Örneğin, W register ”1” değerine sahipken CALL SEGDAT komutu ile altprogram çalıştırılır ve program sayıcı 40h olur. 3) Sonra ADDWF PCL,F komutunu çalıştırdığımızda program sayıcı 41h(PCL(41h) + W register(01h)) olur. Böylece program sayıcısına +1 eklenir. Sonra program sayıcısı 42h. olarak belirlenir. 4) Program 42h’i uygular. RETLW B’00000110’ ( 7segment datası = 1 ). 5) Altprogramdan sonra gerçek programa geri döner W registeri B'00000110'. olur.

6) 7segment LED de ‘1’ görünür. CALL SEGDAT

PC(program sayıcı) 40h SEGDAT ADDWF PCL,F ;PCL( program counter ) + W >>PCL 41h RETLW B'00111111' ;segmen data 0 >> W (PCL+0) 42h RETLW B'00000110' ;segmen data 1 >> W (PCL+1) 43h RETLW B'01011011' ;segmen data 2 >> W (PCL+2) 44h RETLW B'01001111' ;segmen data 3 >> W (PCL+3) 45h RETLW B'01100110' ;segmen data 4 >> W (PCL+4) 46h RETLW B'01101101' ;segmen data 5 >> W (PCL+5) 47h RETLW B'01111101' ;segmen data 6 >> W (PCL+6) 48h RETLW B'00100111' ;segmen data 7 >> W (PCL+7) 49h RETLW B'01111111' ;segmen data 8 >> W (PCL+8) 4Ah RETLW B'01101111' ;segmen data 9 >> W (PCL+9)

97

Page 109: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

;******************************************** ;* program 4-7 ;* RETLW komutunun kullanılması ;* 0 dan 9 a kadar 7segment LED kullanımı ;********************************************

LIST P=16F84,R=DEC INCLUDE ”P16F84.INC”

COUNT1 EQU H'10' ; MEMORY ADRESİ COUNT2 EQU H'11' ; COUNT3 EQU H'12' ; RAM1 EQU H'13' ; INIT BSF STATUS,RP0 ; Bank 1’e geç

CLRF TRISB ; PORTB nin tamamı çıkış BCF STATUS,RP0 ;Bank 0’a geç CLRF PORTB ; PORTB’yi temizle

LOOP MOVLW D'10' ; segmen data numarası = 10

MOVWF COUNT3 ; count3 = 10 CLRF RAM1 ; RAM1 = 0

LOOP1 MOVF RAM1,W ;RAM1 >> W CALL SEGDAT ; RAM1 data 0 dan 9’a kadar MOVWF PORTB ; W(segmen data) >> PORTB CALL TIMER ; 0.3s gecikmeyi çağır INCF RAM1,F ; RAM1+1 >> RAM1 DECFSZ COUNT3,F ; COUNT3-1 >> COUNT3 = 0

GOTO LOOP1

GOTO LOOP STP GOTO STP SEGDAT ADDWF PCL,F ;PCL(program counter) + W >>PCL

RETLW B'00111111' ;segmen data 0 >> W (PCL+0) RETLW B'00000110' ;segmen data 1 >> W (PCL+1) RETLW B'01011011' ;segmen data 2 >> W (PCL+2) RETLW B'01001111' ;segmen data 3 >> W (PCL+3) RETLW B'01100110' ;segmen data 4 >> W (PCL+4)

98

Page 110: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

RETLW B'01101101' ;segmen data 5 >> W (PCL+5) RETLW B'01111101' ;segmen data 6 >> W (PCL+6) RETLW B'00100111' ;segmen data 7 >> W (PCL+7) RETLW B'01111111' ;segmen data 8 >> W (PCL+8)

RETLW B'01101111' ;segmen data 9 >> W (PCL+9) TIMER ;yaklaşık 0.3s zamanlayıcı ;************************************************************ ;* 1+1+150*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=300905us * ;************************************************************

MOVLW 150 ; 1clock MOVWF COUNT1 ; 1clock

DLY1 MOVLW 200 ; 1clock MOVWF COUNT2 ; 1clock

DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock

GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

Alıştırma 4-13 0 dan F’e kadar ardışık sayan ve bunu 7 segment LED displayde gösteren program yapınız ve uygulayınız.

99

Page 111: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

10 Buton arabirimi 2 (1) chattering

to PORT

Vcc

Vcc

0v

chattering

Şekil 4-75 Buton akımı ve PORT’un dalga formu

Şekil 4-75 tipik bir buton akımını göstermektedir. Burada PIC uygulama setinde aynı giriş akımını kullandık. LED’lerin yanmasında herhangi bir problemle karşılaşmadık. Ancak butona basma sayısına göre bir program yazacak olsaydık o zaman problemlerle karşılaşırdık. ( örneğin PA0 butonuna 5 defa bastığımızda PB0 LED’ini yakan program ) Şekilde de görüldüğü gibi butonda ( chattering ) dalgalanma meydana gelir. Çünkü mikrodenetleyicinin işletim hızı oldukça hızlıdır butona bir defa basmakla iki veya daha fazla işlem görmüş olur.

(2) Alıcı ile buton uygulaması 1) Klasik tip buton devresi

to PORT

Vcc

H level

L level

Vin H

Vin L

Şekil 4-76 Klasik tip buton devresi

Bu devrede de dalgalanma ( chattering ) mevcuttur. Microdenetleyicilerde için bu atlamayı önlemek mümkündür. Bu devreyi kullanacağımızda dalgalanmayı programla önlememiz gerekir. Genellikle biz bu devreyi kullanırız ve program yardımıyla dalgalanmayı önleriz. İleri konularımızda programla dalgalanma önleme açıklanacaktır.

100

Page 112: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Kondansatörlü buton devresi

to PORT

Vcc

H level

L level

Vin H

Vin L

Şekil 4-77 Kondansatörlü buton devresi

Şekilde kondansatör eklenmiş bir devrenin akımını görmektesiniz. Bu devre kalasik tip anahtarlama devresinden daha iyidir. VL den VH kadar olan kısımda geçen zaman tanımlanmamıştır. 3) Schmidt Trigger ters çeviricili devre Vcc

H level

L level

Vin H

Vin Lto PORT

Şekil 4-78 Schmidt Trigger ters çeviricili devre

Eğer biz bu dalgalanmaları ( chattering ) donanımla yok etmek istiyorsak en iyi çözüm . Schmidt Trigger tersleyicisi kullanmaktır. Genellikle gürültülü devrelerde kullanılır. Alıştırma 4-14 (1) Alıştırmanın açıklanması

1) Her butona bastığımızda LED lerin artarak yandığını sağlayan bir program yapalım.

2) Her üç metod ile bu uygulamayı gerçekleştiriniz. (Yanlızca buton uygulama devresini kullanınız.)

3) Bu üç yöntemde butona her basılışta LED ler aynı şekilde mi yandı ?

101

Page 113: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(2) Alıştırma 4-14 ( akış diyagramı ) SW : Klasik tip buton devresi PORTA >> 0 Kondansatörlü buton devresi PORTA >> 1

Schmidt Trigger tersleyicili buton devresi PORTA >> 2

PORTB’yi artır

Evet

SW :Basılımı(Low)?

Hayır

SW : Basılı değilmi

(High)?

Evet

Hayır

PORTB’yi

temizle

PORTB çıkış

PORTA giriş

Başla

Şekil 4-79 Akış diyagramı

102

Page 114: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(3) buton uygulama devresi

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

ULN2803

300 X 8

+5VGND

CLOCK

DATA

PIC16F84

MCLR

+5v

LED x 8

10k x 3

74HC14

+5v

+5V

+5V

Şekil 4-80 Buton uygulama devresi

(4) Buton uygulama devresinin üstten görünüşü

ULN2803

LED x 8

PIC

16F8

4

PB0PB1PB2PB3PB4PB5PB6PB7

PA0

PA2

Extension Connector

+GPB0PB7

RESET

PA1

74HC14

Şekil 4-81 Buton uygulama devresinin üstten görünüşü

103

Page 115: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

(5) Deneyin sonucu 1) Klasik tip buton devresi

2) Kondansatörlü buton devresi

3) Schmidt Trigger tersleyicili buton devresi

104

Page 116: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

11 Uygulanabilir buton programı ( Dalgalanmayı önlemek için )

to PORT

Vcc

H level

L level

10-30ms

First reading second reading

Şekil 4-82 Buton programı

(1) Uygulanabilir buton programında izlenecek yol 1) İlk once butonu okumak gerekir 2) Dalgalanma ( chattering ) zamanı kadar beklemeli. (10 – 30ms) 3) Tekrar butonu ikinci kez okumalı 4) Eğer butona basılı ise takip eden komut devam etmelidir. SW1 BTFSC PORTA,0 GOTO SW1

t

SW : Basılı mı?

Hayır

SW

Pro

Şekil 4-83

Eve

CALL TIMER

BTFSC PORTA,0 GOTO SW1

t

: Basılı mı?

Eve

Hayır

Dalgalanma süresince

bekle (10 - 30ms)

grama devam et Buton programının akış diyagramı

105

Page 117: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

Alıştırma 4-15

PA0 daki butona her basılmada 7 segment LED displayi artıran program yazınız. ( Alıştırma 4-13 bakınız ve uygulanabilir buton programını kullanınız. )

PA0 Basılı Basılı Basılı Basılı ------- Basılı Basılı ---- 7segment LED 0 1 2 3 ------- F 0 ---- (1) Akış diyagramını çiziniz. (2) Programı uygulayınız.

106

Page 118: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 12 Mantıksal işlemler (AND,OR,XOR) (1) AND işlevi AND devresi girişlere çarpma işlemi uygulandığı bir devredir ve çıkış sadece her girişin 1 olduğu zaman 1 olur.

Giriş Çıkış

A B X

0 0 0

0 1 0

1 0 0

1 1 1

B

A

X

Şekil 4-84 AND devresi

1) ANDLW W yazmacının değeri sekiz bitlik ‘k’ sabiti ile AND işlemine tabi tutulur ve sonuç

tekrar W yazmacına kayıt edilir. ANDLW k W yazmacı

11110000

10110011 W yazmacı k

10110000

Şekil 4-85 ANDLW komutu 2) ANDWF

W yazmacı ile ‘f ’ yazmacı AND işlemine tabi tutulduğunda eğer d=0 ise sonuç W yazmacına, d=1 ise sonuç f yazmacına kayıt edilir.

ANDWF f,d W Yazmacı

11110000

10110011

FSR

d=0

d=1

W yazmacı

F yazmacı

10110000

Şekil 4-86 ANDWF komutu

107

Page 119: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Program 4-8 AND komutunu kullanarak 4 bitlik ledleri yakan program yazalım. ( yüksek olan 4 bitler daima 0 olacak ) ( Program4-5 kullanılacak ) 4) Akış diyagramı

PORTB’yi

temizle

PORTB’yi 1 artır

0.1s TIMER

çağır

PB << PB AND Wreg

Wreg << 11110000

PORTB’nin

tamamını çıkış

yap

Başla

Şekil 4-87 Program 4-8’in akış diyagramı

108

Page 120: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) Program 4-8 listesi

;******************************************************************* ; AND komutunu kullanarak PORTB bilgisinin artırımı ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” COUNT1 EQU H'10' COUNT2 EQU H'11' BSF STATUS,RP0 ;Bank1 e geç CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank0 a geç CLRF PORTB ;PORTB’yi temizle LOOP CALL TIMER ;0.1s timer çağır INCF PORTB,F ;PORTB’yi 1 artır MOVLW B’00001111’ ;Wreg << 00001111 ANDWF PORTB,F ;Düşük 4 bitten kalan data GOTO LOOP ;TIMER ; yaklaşık 0.1s gecikme ;************************************************************ ;* 1+1+50*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=100305us * ;************************************************************

MOVLW 50 ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW 200 ; 1clock MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

109

Page 121: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (2) IOR işlevi Herhangi bir girişin 1 olduğu zaman çıkışı 1 olan çoklu OR devresi

A Giriş Çıkış

A B X

0 0 0

0 1 1

1 0 1

1 1 1

X B

Şekil 4-88 OR devresi 1) IORLW 8 bitlik ‘k’ sabiti ile OR lanan W yazmacının içeriğinin sonuçu W yazmacına yazılır.

IORLW k W yazmacı

00101100 W yazmacı k

Şekil 4-89 IORLW komutu 2) IORWF W yazmacı ‘f ’ yazmacı ile OR işlemine tabi tutulduğunda eğer d=0 ise sonuç w yazıcısına, eğer d=1 ise sonuç ‘f ’ yazmacına yazılır. IORWF f,d

11110000 11111100

W yazmacı

W yazmacı

00101100

f

d=0

d=1 Memory f

Şekil 4-90 IORWF komutu

110

Page 122: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Program 4-9 IOR komutunu kullanarak 4 düşük LED’ lerle program yazalım ( 4 yüksek bit değerleri daima 1 olacak ( Program4-5 kulanıldı.) 4) Akış diyagramı

0.1s

çağ

PB <<

Wreg

Şekil 4-91 Program

Başla

PORTB’nin

tamamını çıkış

yap

TIMER

ır

PORTB’yi 1 artır

PORTB’yi

temizle

PB IOR Wreg

<< 11110000

4-9’un akış diyagramı

111

Page 123: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) Program 4-9 listesi

;******************************************************************* ; IOR komutunu kullanarak PORTB bilgi artışı ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” COUNT1 EQU H'10' COUNT2 EQU H'11' BSF STATUS,RP0 ;Bank1 e geç CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank0 a geç CLRF PORTB ;PORTB’yi temizle LOOP CALL TIMER ;0.1s timer çağır INCF PORTB,F ;PORTB’yi 1 artır MOVLW B’11110000’ ;Wreg << 11110000 IORWF PORTB,F ;Düşük 4 bitten kalan data GOTO LOOP ;TIMER ; yaklaşık 0.1s gecikme ;************************************************************ ;* 1+1+50*(1+1+200*(2+2+2+1+1+2)+1+1+2)+1+2=100305us * ;************************************************************

MOVLW 50 ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW 200 ; 1clock MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

112

Page 124: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (3) XOR işlevi

XOR girişler aynı ise 0, ayrı ( farklı ) ise 1 olduğu devredir. Doğruluk tablosunda görüldüğü gibi iki giriş aynı olduğu zaman çıkış ( Low ) düşük, iki giriş farklı olduğu zaman ise ( High ) yüksek olan devredir. Böylece XOR devresi ile iki girişin aynı olup olmadığını kontrol edebiliriz. 8 bitlik iki sayıyı XOR tabi tuttuğumuzda Zero bayrağı bu iki sayı eşit ise 1 olur. Eşit değil ise 0 olur. Böylece sayı kontrolünüde gerçekleştirmiş oluruz.

Giriş Çıkış

A B X

0 0 0

0 1 1

1 0 1

1 1 0

A

X B

Şekil 4-92 XOR devresi

1) XORLW 8 bit ‘k’ sabiti ile W yazmacı XOR işlemine tabi tutulduğunda sonuç W yazmacına yazılır.

XORLW k

11000011

W yazmacı

11110000

00110011 W yazmacı

k

Şekil 4-93 XORLW komutu 2) XORWF W yazmacı ‘f ’ yazmacı ile EXOR işlemine tabi tutulduğunda eğer d=0 ise sonuç w yazmacına, eğer d=1 ise sonuç ‘f ’ yazmacına yazılır XORWF f,d

W yazmacı 00110011

W yazmacı

11110000

11000011

f

d=0

d=1 Memory f

Şekil 4-94 XORWF komutu

113

Page 125: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Program 4-10 XOR komutunu kullanarak tersleme programı yapalım. PORTB ye data '01010101' kayıt edilir. PA0 butonuna basılana kadar beklenir. PORTB nin XOR işlemi ve '11111111' terslenir. 4) Akış diyagramı

Wreg << 01010101

Wreg << 11111111

PB << PB X OR Wreg

PA0 : ON Hayır

Evet

Program sonu

PORTB’yi temizle

PORTB << Wreg

PORTB’nin tamamı çıkış

PORTA’nın tamamını giriş

yap

Başla

Şekil 4-95 Program 4-10’un akış diyagramı

114

Page 126: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) Program 4-10 listesi

;******************************************************************* ; XOR komutunu kullanarak PORTB bilgilerini çevirme ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” BSF STATUS,RP0 ;Bank1 e geç MOVLW B’00011111’ ;TRISA data MOVWF TRISA ;PORTA tamamı giriş CLRF TRISB ;TRISB=0 PORTB tamamı çıkış BCF STATUS,RP0 ;Bank0 a geç CLRF PORTB ; PORTB’yi temizle MOVLW B’01010101’ ;Wreg << 01010101 MOVWF PORTB ;PORTB << Wreg LOOP BTFSC PORTA,0 ;PA0 = ON ? ( Basılımı ? ) GOTO LOOP ;PA0 = OFF MOVLW B’11111111’ ;Wreg << 11111111 XORWF PORTB,F ;PORTB data tersi STP GOTO STP END

Alıştırma 4-16 Şekil 4-86.da görüldüğü gibi Led’leri mantıksal komutları kullanarak yapınız.

LED

LED

LED

ON200ms

200ms

200ms

ON ONON

ON200ms

ON ONON

ONON ONON

ONON ONON

Şekil 4-96 Alıştırma 4-15

115

Page 127: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

13 Aritmetik komutlar ( ADD , SUB komutları) (1) ADD komutları PIC te iki adet toplama komutu vardır. "ADDLW" sabit olan sayıyı W yazamacına toplama komutudur. “ADDWF" ise dosyadaki sayıyı W yazmacına toplama komutudur. 1) Program 4-11 "30+129=159" matematiksel işlemini yapalım. Burada taşınacak bir değer yoktur çünkü hesaplama sonucu 255 içerisindedir. 2) Akış diyagramı

Hayır

W r

a

Şekil 4-97

Başl

PORTB’nin tamamı çıkış

PORTA’nın tamamını giriş yap

PORTB << W reg

W reg << STATUS

YES

PA0 : ON ?

u

W reg << 00010100(30)

PORTB << W reg

PORTB’yi temizle

Carry biti temizle

eg << W reg + 10000001(129)

P

Program son

rogram 4-11’in akış diyagramı

116

Page 128: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Program 4-11 listesi

;******************************************************************* ; Program 4-11 (30 + 129 = 159) Taşıma biti yok ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” BSF STATUS,RP0 ;Bank 1’e geç MOVLW B’00011111’ ;TRISA data MOVWF TRISA ;PORTA tamamını giriş yap CLRF TRISB ;TRISB=0 PORTB tamamı çıkış BCF STATUS,RP0 ;Bank 0’a geç CLRF PORTB ;PORTB’yi temizle BCF STATUS,C ;Carry biti temizle

MOVLW D’30’ ;Wreg << D’30’ ADDLW D’129’ ;W reg << 30 + 129 MOVWF PORTB ;PORTB << Wreg LOOP BTFSC PORTA,0 ;PA0 = ON ? ( Basılımı ? ) GOTO LOOP ;PA0 = OFF MOVF STATUS,W ;Wreg << STATUS MOVWF PORTB ;PORTB << W reg STP GOTO STP ;Program sonu END

Alıştırma 4-17 "130+129=259".matematiksel işlemini yapan program yazınız. ( Dikkat edilecek olursa taşıma biti vardır. ) Alıştırma 4-18 "Alıştırma 4-16" daki programı aşağıdaki şekle göre değiştiriniz.

Dikkat : Buton girişinde atlama vardır. Sadece taşıma bitini displayde nasıl gösterebiliriz? Bunu AND komutunu düşünerek bulunuz.

117

Page 129: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri (2) İki bit bilginin toplanması Taşımayı kullanrak iki bitlik sayısal değeri toplayınız. ( Sekiz bitlik mikroişlemcilerde bile en fazla değer 255 olmaktadır. )

Soru : 25000+12000=37000 (61A8h + 2EE0h = 9088h)

Program 4-12 1) Düşünme yöntemi a) Her düşük bit değeri toplanmıştır.

10101000 (A8h) DL1 + ) 11100000 (E0h) DL2 1 ← 10001000 (88h) (Taşıma) b) Eğer taşıma varsa yüksek bite 1 ilave edilir. 01100001 (61h) DH1 + ) 1 (Carry) 01100010 (62h) DH1

( Not : Taşıma bu programda dikkate alınmaz.)

c) Her yüksek bit toplanır 01100010 (62h) DH1 + ) 00101110 (2Eh) DH2 Hafıza 10010000 (90h)

62h

90h

E0h

2Eh

A8h

61h DH1

DL1

DH2 DL2

AH AL Şekil 4-98 İki bitlik sayının to

118

Sonuç

Sonuç

planması

Page 130: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

2) Akış diyagramı

Hayır

DL2 << E0h

DH2 << 2Eh

DL1 << A8h

Evet

PORTB << AH

DH1 << DH1 + 1

AH << W reg

PORTB << AL

RA0 : ON

Hayır

W reg << DH1 + DH2

Evet

Carry ?

AL << W reg

W reg << DL1 + DL2

Program sonu

DH1 << 61h

PORTB’yi temizle

Carry biti temizle

PORTB’nin tamamını çıkış

PORTA’nın tamamını giriş yap

Başla

Şekil 4-99 Akış giyagramı

119

Page 131: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Program 4-12 listesi

;******************************************************************* ; Program 4-12 ( 25000+12000 = 37000 ) ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” DH1 EQU H’10’ DL1 EQU H’11’ DH2 EQU H’12’ DL2 EQU H’13’ AH EQU H’14’ AL EQU H’15’ BSF STATUS,RP0 ;Bank 1’e geç MOVLW B’00011111’ ;TRISA data MOVWF TRISA ;PORTA tamamını giriş yap CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank 0’a geç CLRF PORTB ;PORTB’yi temizle BCF STATUS,C ;Carry biti temizle

MOVLW H’61’ ;W reg << 61h MOVWF DH1 ;DH1 << W reg

MOVLW H’A8’ ;W reg << A8h MOVWF DL1 ;DL1 << W reg

MOVLW H’2E’ ;W reg << 2Eh MOVWF DH2 ;DH2 << W reg

MOVLW H’E0’ ;W reg << E0h MOVWF DL2 ;DL2 << W reg

MOVF DL1,W ;W reg << DL1 ADDWF DL2,W ;W reg << DL1 + DL2 BTFSC STATUS,C ;Carry bit ? INCF DH1,F ;Carry = 1 >> DH1=DH1 + 1 MOVWF AL ;AL << W reg

MOVF DH1,W ; ADDWF DH2,W MOVWF AH

120

Page 132: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri

MOVF AL,W MOVWF PORTB

LOOP BTFSC PORTA,0 GOTO LOOP ;PA0 = OFF MOVF AH,W ;W reg << STATUS MOVWF PORTB ;PORTB << W reg STP GOTO STP ;Program sonu

END (3) Çıkartma komutları

PIC ‘de iki adet çıkarma komutu vardır. Bunlar "SUBLW" ve "SUBWF" ‘dir. "SUBLW" sabit olan sayıyı W yazamacına çıkarma komutudur. “SUBWF" ise dosyadaki sayıyı W yazmacına çıkarma komutudur 1) SUBLW k Sekiz bitlik sabitten ( ‘k’ literalden ) W yazmacının içeriği ikiye tamamlama yöntemi ile çıkarılır ve sonuç W yazmacına yazılır.

W yazmacı k W yazmacı

Şekil 4-100 SUBLW 2) SUBWF f,d f yazmacından W yazmacı ikiye tamamlama yöntemi ile çıkartılır. Eğer d=0 ise sonuç W yazmacına d=1 ise f yazmacına yüklenir

W yazmacı d=0

d=1

W yazmacı Memory f

Memory f

Şekil 4-101 SUBWF

121

Page 133: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 3) Çıkarma yöntemi Örnek 1 70 – 38 = 32 ( 38’in ikiye tamamlama yöntemi ile >> 11011010 “218” ) 01000110 (70) + ) 11011010 (218 >> -38) 1 00100000 (32) (taşıma) Örnek 2 37 – 38 = -1 (38 in ikiye tamamlama sı >> 11011010 “218”) 00100101 (37) + ) 11011010 (218 >> -38)

P

a

0 11111111 (255 >> -1) (taşıma yok) 4) Program 4-13 "70 – 38 =32" işlemini yapalım. Hayır Şekil 4-10

122

Başl

PORTB’nin tamamını çıkış

ORTA’nın tamamını giriş yap

PORTB << W reg

W reg << STATUS

Evet

PA0 : ON ?

W reg << D’38’

PORTB << W reg

PORTB’yi temizle

Carry biti temizle

W reg << D’70’ – W reg

Program sonu

2 Program 4-13 ün akış diyagramı

Page 134: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 5) Program 4-13 listesi

;******************************************************************* ; Program 4-13 ( 70 - 38 = 32 ) Carry bit ;******************************************************************* LIST P=16F84,R=DEC INCLUDE “P16F84.INC” BSF STATUS,RP0 ;Bank1’e geç MOVLW B’00011111’ ;TRISA data MOVWF TRISA ;PORTA tamamını giriş yap CLRF TRISB ;TRISB=0 PORTB tamamını çıkış yap BCF STATUS,RP0 ;Bank0’a geç CLRF PORTB ;PORTB’yi temizle BCF STATUS,C ;Carry biti temizle

MOVLW D’38’ ;Wreg << D’38’ SUBLW D’70’ ;W reg << 70 – 38 MOVWF PORTB ;PORTB << Wreg LOOP BTFSC PORTA,0 ;PA0 = ON ? ( Basılı mı ? ) GOTO LOOP ;PA0 = OFF MOVF STATUS,W ;Wreg << STATUS MOVWF PORTB ;PORTB << W reg STP GOTO STP ;Program sonu

END Alıştırma 4-19 "37 – 38 = - 1 (255) ". matematiksel işlemini yapalım. ( Taşıma biti yok ) Alıştırma 4-20 "25000 – 12000 = 13000 ". Matematiksel işlemini yapalım ( 2 bitlik bir bilgi )

“ 61A8 – 2EE0 = 32C8” Not : 4-12 programına göz atalım. İlkönce, her düşük byte işlemini tamamlamıştır. ( taşıma biti yok.)

123

Page 135: Pic 16f84 Mikrodenetleyici

PIC programlamanın temelleri 6) SUB komutunu çeşitli şekillerde karşılaştırılması a) SUBLW k

W <= k F <= k SUBLW k MOVF F,W BTFSC STATUS,C SUBLW k ; N – F >> W GOTO NEXT ;W <= k BTFSC STATUS,C GOTO NEXT ; F <= k W > k F > k SUBLW k MOVF F,W BTFSS STATUS,C SUBLW k ; N – F >> W GOTO NEXT ;W > k BTFSS STATUS,C GOTO NEXT ; F > k k > W register Z=0,CY=1

k = W register Z=1,CY=1 k < W register Z=0,CY=0

b) SUBWF F,d F > W register Z=0,CY=1 F = W register Z=1,CY=1 F < W register Z=0,CY=0

1

0

2

3

255

254

253

1

254

Alıştırma 4-21 Yandaki şekilde görülen LED lerin programını yapınız. ( SUB komutunu kullanınız .)

124

Page 136: Pic 16f84 Mikrodenetleyici

PIC Programlama uygulamaları

Bölüm 5 PIC Programlama uygulamaları

1. Yedi segment kod çözücü 2. Röle kontrol 3. İşlemsel Yükselteçler ( OP Amp ) 4. D / A konvertör 5. A / D konvertör 6. Seri iletişim ( RS – 232C ) 7. Step motor kontrolü 8. DA motor kontrolü 9. Kesmeler 10. Çizgi takip eden robot kontrolü 11. Ses programlama

Page 137: Pic 16f84 Mikrodenetleyici

Yedi segment kod çözücü ( Segment decoder ) 1 YEDİ SEGMENT KOD ÇÖZÜCÜ ( Segment decoder ) (1) YEDİ SEGMENT KOD ÇÖZÜCÜLER

PIC’i kullanarak yedi LED segmentli kod çözücü yapalım. Günümüzde bunun hazır entegreleri vardır ve bunlar 7447 ve 9368 ‘dir. Şekil.5-1 de 7447’nin iç yapısı görülmektedir. Şekilde görüldüğü gibi bu kod çözücü tamamen lojik devrelerden meydana gelmiştir.

Şekil 5-1 7447’nin paket ve iç yapısı Biz burada bu yedi segmentli kod çözücüyü programla yapacağız. Bunun için

uygulama devresi şekil 5-2 de verilmiştir.

abC

de

fg

P

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA3

PA2

PA1

PA0

a

b

Cd

e

fg

P

OSC1

OSC2

300 X 8PIC16F84

+5V

7segment LEDanode common

MCLR

abC

de

fg

P

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA3

PA2

PA1

PA0

a

b

Cd

e

fg

P

OSC1

OSC2

300 X 8PIC16F84

+5V

7segment LEDanode common

MCLR

+5v

10k x 2

22pF

22pF

10k x 2

Şekil. 5-2 Yedi segmentli kod çözücü devre şeması

125

Page 138: Pic 16f84 Mikrodenetleyici

126

Page 139: Pic 16f84 Mikrodenetleyici

127

Page 140: Pic 16f84 Mikrodenetleyici

128

Page 141: Pic 16f84 Mikrodenetleyici

129

Page 142: Pic 16f84 Mikrodenetleyici

130

Page 143: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

2 RÖLE KONTROL ( Relay control ) Bu bölümde de PIC ile role kontrolünün nasıl yapıldığını öğreneceğiz. Elektronik devrelerde küçük rölelerden çok çeşitli tipleri kullanılmaktadır. Büyük elektrik güçleri olan devrelerde ise güç röleleri kullanılmaktadır., Ayrıca bobin ile kontak arasında hiç bir bağlantı olmayan tamamen ışık ile kontrol eden rölelerde vardır. Bunlar SSR ( Solid State Relays ) adı verilir. Normal rölelerde a, b ve c kontak noktalarıdır ve çok amaçlı kullanılmaktadırlar. Kontrol ünitelerinde ihtiyaç sayısınca kontak bulunduran röleler tavsiye edilir. Rölenin iç şekli ve kontak noktalarını gösteren şemalar Şekil 5-7 de gösterilmiştir.

a kontak c kontak

b kontak

Röle bobini

Şekil 5-7 Rölenin iç şekli ve kontak noktalarının şeması (1) MEKANİK RÖLE Rölenin çalışması için bir LED den daha fazla bir akım gerekmektedir. Bu nedenle PIC in uçlarına direk olarak röle bağlayamayız. PIC ile bir röle kontrolü yapmak istediğimizde aşağıdaki şekilde ( Şekil 5-8 ) görüldüğü gibi transistor kullanmalıyız.

DC Relay

24v

Darlington transistor1k

PORTB

LED

Şekil 5-8 Rolenin kumandası

130

Page 144: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

1) Röle deney devresi

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

+5VGND

CLOCK

DATA

PIC16F84

MCLR

10k x 3

NC1

C1

NO1

NC2

C2

NO2

1k

+24v

NC1

C1

NO1

NC2

C2

NO2

1k

+24v

+24v

Şekil 5-9 Röle deney devresinin şeması

Role için DC24V

RESET

Role (PB1)

Role (PB0) PIC

PIC Yazıcı

PA2 PA1 PA0

SSR(PB3)

SSR(PB2)

Bağlantı board(PB1)

Bağlantı board

(PB0)

Şekil 5-1 Röle deney boardunun görünüşü

131

Page 145: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

c Kontak

c Kontak

a Kontak

b Kontak

a Kontak

b Kontak

Deney boarduna

Şekil 5-11 Bağlantı boardı görünüşü 2) İletken bağlantısı (a) Kullanılan aletler

a) Uygulama boardu 1 b) Bağlantı boardu 1

c) Güç kaynağı 1 d) AC kablo 1 e) Soketli lamba duyu 1

AC220V

Lamba duyu a

c

b

Röle bağlantı bordu

Şekil 5-12 Uygulama devre şeması

132

Page 146: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

Röle uygulama devresi Röle bağlantı bordu

ı

AC220V PB1

3) Alışdiya

Alışda l

AlışPA1ile b

PIC Yazıc

Güç kaynağı

5V GND +15 GND -15

Kırmızı Siyah

DC30V PB0

Lamba duyu

Şekil 5-13 Uygulamanın iletken bağlantı şeması

Program yapımı

tırma 5-1 PA0 butonuna basıldığında lambanın yanmasını sağlayan programı akış gramı ile birlikte yapınız.

tırma 5-2 PA0 butonuna basıldığında lambanın yanmasını, PA1 butonuna basıldığında ambanın sönmesini sağlayan programı akış diyagramı ile birlikte yapınız.

tırma 5-3 PA0 butonuna basıldığında lambanın 0.5 saniye aralıklarla yanıp sönmesini, butonuna basıldığında da lambanın sürekli sönmesini sağlayan programı akış diyagramı irlikte yapınız.

133

Page 147: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

(2) SSR ( Solid State Relay ) 1) SSR SSR (Solid State Relays) bobin ile kontak arasında hiç bir bağlantı olmayan tamamen ışık ile kontrol eden rolelerdir. vardır. AA güç kontrolü için oldukça kullanışlıdır. Giriş ve çıkış birimleri tamamen birbirinden ayrıdır ve sadece foto ışık ile birbirlerine etki ederler. Sadece foto triyakın LED ini ON off yapmak suretiyle AA gücünü kolaylıkla kontrol edebiliriz. Bu nedenle PIC portları ile bu LED i kontrol etmek suretiyle AA gücünüde kontrol etmiş oluruz.

330 100

DA(5V) RL(AA)

+

Triyak

Foto triyak

Şekil 5-14 SSR ( Solid State Relay ) 2) İletken bağlantısı (a) Kullanılan aletler

a) Uygulama boardu 1 b) SSR board 1 c) AA kablo 1 d) Soketli lamba duyu 1

SSR

AC220V

Lamba duyu

PORTB

Şekil 5-15 Uygulama devre şeması

134

Page 148: Pic 16f84 Mikrodenetleyici

Röle kontrol (Relay control ) & SSR ( Solid State Relay )

Röle deney devresi SSR board

AC 220VPB2

PIC

Yazıcı

Lamba duyu

Şekil 5-16 Deneyin iletken bağlantı şeması

3) Program yapımı Alıştırma 5-4 PA0 butonuna basıldığında lambanın yanmasını sağlayan programı akış diyagramı ile birlikte yapınız.

Alıştırma 5-5 PA0 butonuna basıldığında lambanın yanmasını, PA1 butonuna basıldığında da lambanın sönmesini sağlayan programı akış diyagramı ile birlikte yapınız.

Alıştırma 5-6 PA0 butonuna basıldığında lambanın 0.5 saniye aralıklarla yanıp sönmesini, PA1 butonuna basıldığında da lambanın sürekli sönmesini sağlayan programı akış diyagramı ile birlikte yapınız.

Alıştırma 5-7 Bu tür uygulamaları yaptıktan sonra mekanik röleler ile SSR arasındaki görebildiğiniz farkları açıklayınız.

135

Page 149: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

3 İşlemsel Yükselteçler (“Operational amplifier” Op-amp) (1) İŞLEMSEL YÜKSELTEÇLER

İşlemsel yükselteçlerin ortak adları Op-amp’dır. Burada biz sürekli olarak Op-amp ismini kullanacağız. Op-amp 20 veya 30 bipolar transistor veya FET lerden meydana gelmiş tamamlayan ( Iintegrated Circuit IC ) devreler olup düşük frekanslı sinyaller için çok yüksek kazanca sahip yükselteçlerdir. Op-amp’ın toplama, çıkarma dalga formunu değiştirmek için diferansiyel ve integral olarak, sinyal üreteci olarak, uygun dış devre tasarımları yapımında olmak üzere çok zengin bir kullanım alanı vardır IC’ler siyah birer kutu gibi çok çeşitli devrelerin yapımında oldukça faydalı elemanlardır. Op-ampların devre sembolu şekil 5-17 de gösterilmiştir. G ortak toprak ucu, +V ve –V Besleme gerilimi uçlarıdır ve bu uçlar devre şemaları çizilirken karmaşık bir görüntüden kaçınmak için genellikle gösterilmezler ancak unutulmamalıdırlar çünkü Op-amplar besleme olmadan çalışmazlar. Sonuç olarak ta beslemenin bir ucu ve giriş gerilimin bir ucu ortak toprağa bağlanmalıdır. +V

Vi- ucunducundaki birOp-amplarda Bu ilişki aşağ A>0 durumunyaklaşık 0 ( spotansiyel farOp-ampların ulaşmadığı za( sıfır ) dır.

A > 0

A

-V

Vi- Vo

Vi+

G Şekil 5-17 Op-amp devre sembolü

aki bir giriş Vo ucunda yükseltilmiş ve ters çevrilmiş olarak görünür. Vi+ giriş ise Vo’da yükseltilmiş fakat terslenmeden gözükür. Sonuç olarak iki giriş ucundan Vi- ters çeviren uç, Vi+ ters çevirmeyen uç olarak adlandırılır. ıdaki eşitlikle belirtilir. Vo = A (Vi+ - Vi-) da A yükselteç kazancı apaçık şekilde çıkış değerini yükseltir, (Vi+ - Vi-) değeri ıfır )’a eşit olmalı ve potansiyel farkı bulunmaması gerekir. Eğer herhangi bir k var ise Op-amp doyuma ulaşmış olur ve pozitif veya negatif gerilim değişmez. düzenli olarak çalışabilmesi için bu nokta çok önemlidir ve Op-amp doyuma man iki giriş içten kısa devre olmuş gibi olur, aralarındaki potansiyel fark 0

136

Page 150: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Gerçekte bir elektrik akışı olmadığından bu duruma virtual short (IMAGINARY SHORT) veya virtual ground olarak adlandırılır. Yukarıda da açıklandığı gibi Op-ampların kazançları o kadar yüksek ki yükselteç olarak kendi üzerlerinde kullanılamazlar. Çünkü çok küçük bir girişle kolayca doyuma ulaşırlar ve buda hassas ayarlarla yapıldığından dolayı karakteristik bir özelliktir. Sonuç olarak Op-ampı yükselteç olarak kullandığımızda dış eksi geri beslemeyi ona bağlamalıyız ki kazanç elde edip ayarlama yapabilelim. (2) TERSLEYEN YÜKSELTEÇ DEVRESİ İdeal bir yükselteç olarak Op-amp aşağıdakilere sahip olmalıdır. 1) Yükseltme faktörü çok büyüktür ( A=1010) 2) Frekans genişliği sonsuzdur ve her frekansta çalışır. 3) Giriş empedansı çok büyüktür. 4) Çıkış empedansı çok küçüktür. 5) Sessizdir ve giriş sıfır olduğunda çıkışta sıfır olur. 6) Deep negative feedback can be applied steadily. Op-ampı sabit yükseltme faktörü ile yükselteç olarak kullandığımız zaman, ya tersleyen yükselteç yada terslemeyen yükselteç olur. -

(3) TERSLEYEN YÜKSELTEÇ DEVRESİ ( Reverse amplifier circuit ) Rf

Rs

Rceoei

i

i

Şekil 5-18 Giriş polaritesini tersleyerek çıkış polaritesi yapan yükselteç devresi 1) Tersleyen yükseltecin yükseltme faktörü

Şekilde görüldüğü gibi devrede Rs giriş direnci Rf ise geri besleme direncidir. Op-amp ın iki girişi arasında potansiyel fark yoktur ve hayali kısa devre durumundadır. Negatif girişin değeri 0V. sıfırdır.

137

Page 151: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Bu durumda giriş gerilimin “ei” değeri Rs direncinden geçen akımla ilişkili olarak aşağıdaki eşitliği yazabiliriz. ei = Rs · I ------- (1) Devreden geçen “i” akımı once Rs giriş direncinden geçerek Op-amp yükseltecin içinden geçmek yerine Rf geri besleme direncinden geçer. Çünkü yükseltecin giriş direnci çok yüksektir. Böylece aşağıdaki eşitliği yazabiliriz. eo = -Rf · I ------ (2) formül (1) ve (2)’den çıkış gerilimini giriş gerilimine orantılarsak tersleyen yükseltecin yükseltme faktörünü ( A ) bulabiliriz. A = eo / ei = -Rf · I / Rs · I = - Rf / Rs 2) Tersleyen yükselteç devresine uygulama (a) Kullanılan aletler a) Op-amp uygulama seti 1

b) Voltmetre veya dijital avometre 1 veya 2 (b) Kullanılan malzemeler a) Direnç 1/4W 5.1k 1

b) Direnç 1/4W 10k 2 c) Direnç 1/4W 20k 1

Uygulama devresini uygulama borduna kurarak ölçü aletlerini bağlayıp ölçüm yapılacak devreye –10V - +10V uygulayınız. Çıkış gerilimini ölçerek grafiğini çiziniz. (c) Çıkış geriliminin ölçülmesi a) Potansiyometreyi çevirin ve giriş gerilimini –10V dan +10V kadar çeşitli aralıklarda değiştirerek her değişimde çıkış gerilimini ölçüp kayıt ediniz. Grafik çiziminin kolay ve daha güzel görünmesi için bu aralıkların birer volt olması tavsiye edilir.

138

Page 152: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

b) Ölçüm yapılacak uygulama devresi.

20k

10k

5.1k

+15V

-15V

10k

+15V

-15V

Şekil. 5-19 Op-amp uygulama devresi c) Ölçme sonuçlarının kayıt edileceği tablo

Giriş gerilimi [V] -10 -9 -8 -7 -6 -5 -4 -3 -2 Çıkış gerilimi[V]

Giriş gerilimi [V] -1 0 +1 +2 +3 +4 +5 +6 +7 Çıkış gerilimi[V]

Giriş gerilimi [V] +8 +9 +10

Çıkış gerilimi[V]

139

Page 153: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Giriş – Çıkış grafiği

140

Page 154: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

(4) TERSLEMEYEN YÜKSELTEÇ DEVRESİ ( Non-reverse amplifying circuit ) Rf

Rs

eoei

Ri

Şekil 5-20 Çıkış gerilimiyle giriş gerilimi aynı olan yükselteç 1) Terslemeyen yükselteçlerin yükseltme faktörü Negatif giriş gerilimi çıkış gerilimi eo ve Rf direnci ile Rs direncinin Rs ye bölünmesinden oluşur. ei olarak adlandırılan negatif giriş gerilimi pozitif giriş gibi görünür çünkü içte hayali kısa devre olmuş gibidir. Böylece aşağıdaki formülü yazabiliriz.

ei = Rs / (Rs+Rf) · eo Buradan da çıkış gerilimini giriş gerilimine orantılarsak tersleyen yükseltecin yükseltme faktörünü ( A ) bulabiliriz.

A = eo / ei = (Rs + Rf) / Rf = 1 + (Rf / Rs) Bir başka ifadeyle eo = iRs + iRf dir. Buradan i = ei / Rs ise eo = ( ei /Rs ) x Rs + ( ei /Rs ) x Rf. eo = ei ( 1 + Rf / Rs ) bulunur. A = eo / ei den A = 1 + ( Rf / Rs ) bulunur. 2) Terslemeyen yükselteç devresine uygulama (a) Kullanılan aletler

a) Op-amp uygulama seti 1 b) Voltmetre veya dijital avometre 1 veya 2

141

Page 155: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

(b) Kullanılan malzemeler a) Direnç 1/4W 10k 2 b) Direnç 1/4W 20k 1 Uygulama devresini uygulama borduna kurarak ölçü aletlerini bağlayıp ölçüm yapılacak devreye –10V - +10V uygulayınız. Çıkış gerilimini ölçerek grafiğini çiziniz. (c) Çıkış geriliminin ölçülmesi a) Potansiyometreyi çevirin ve giriş gerilimini –10V dan +10V kadar çeşitli aralıklarda değiştirerek her değişimde çıkış gerilimini ölçüp kayıt ediniz. Grafik çiziminin kolay ve daha güzel görünmesi için bu aralıkların birer volt olması tavsiye edilir. b) Ölçüm yapılacak uygulama devresi. 20k

+

-15V

10k

+15V

-15V

10k

Şekil 5-21 Op-amp uygulama devresi c) Ölçme sonuçlarının kayıt edileceği tablo

Giriş gerilimi [V] -1 0 +1 +2 +3 +4 +5 +6 +7 Çıkış gerilimi [V]

Giriş gerilimi [V] -10 -9 -8 -7 -6 -5 -4 -3 -2 Çıkış gerilimi [V]

Giriş gerilimi [V] +8 +9 +10

Çıkış gerilimi [V]

142

Page 156: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Giriş – Çıkış grafiği

143

Page 157: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

(5) KARŞILAŞTIRICI ( Comparator ) OLARAK KULLANILMASI

1) Karşılaştırıcı Burada iki giriş gerilimi karşılaştırılır. Hangisinin büyük hangisinin küçük olduğu kararı bu şekil kullanma ile anlaşılabilir. Girişlerden birine referans gerilimi, diğerine de karşılaştırılacak gerilim uygulanır. Daha sonra sonuç çıktı olarak alınabilir.

V1V2

Vo

Şekil 5-22 Karşılaştırıcı

Terslenmiş veya terslenmemiş iki farklı yükselteç devresinde direnç yoktur ve direk olarak çıkıştan girişe doğru geri besleme yapılır. Bu nedenle çıkış gerilimi girişe bağlı olarak değiştiğinden onbinlerce yükseltme faktörüne sahiptir. Onbinlerce çeşit giriş gerilimide bir o kadar çıkış gerilimi meydana getirir.. Fakat pratik uygulamalarda bu kadar fazla sayıda gerilim elde edilmez ve gerçek çıkış gerilimi kararlı kaynak gerilimiyle doyumda olur. Çıkış gerilimi ile giriş gerilimi arasındaki ilişki aşağıdaki gibi olur. Eğer V1 > V2, Vo = negatif gerilim olarak doyumdadır. Eğer V1 < V2, Vo = pozitif gerilim olarak doyumdadır. 2) Karşılaştırıcı uygulaması (a) Kullanılan aletler a) Op-amp uygulama seti 1 b) Voltmetre veya dijital avometre 1 veya 2 (b) Kullanılan malzemeler a) Direnç 1/4W 1k 1

144

Page 158: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Uygulama devresini uygulama borduna kurarak ölçü aletlerini bağlayıp ölçüm yapılacak devreye –10V - +10V uygulayınız. Çıkış gerilimini ölçerek sonuç tablosunu doldurunuz. (c) Çıkış geriliminin ölçülmesi a) Potansiyometreyi çevirin ve giriş geriliminin 1V. dan +9V. a kadar değiştirerek çıkış gerilimini ölçünüz. b) Potansiyometreyi çevirin ve giriş geriliminin +9V. dan 1V. a kadar değiştirerek çıkış gerilimini ölçünüz. Yukarıdaki iki çeşit uygulamayıda yaparak devre çalışması yapıp ölçümleri gerçekleştiriniz. c) Ölçme devresi 1

+

1k

+15V

-15V

+15V

-15V

+15V

-15V

+

10k

20k

Şekil 5-23 Ölçme devresi 1 d) Ölçüm sonucu 1

Giriş gerilimi [V] Çıkış gerilimi[V]

Giriş gerilimi [V] Çıkış gerilimi [V]

145

Page 159: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

e) Ölçme devresi 2

Şekil 5-24 Ölçme devresi 2

f) Ölçüm sonucu 2

Alıştırma 5-8 Aşağıdaki tersleyen yükseltecin yükseltme faktörünü bulunuz.

Giriş gerilimi [V] Çıkış gerilimi [V]

Giriş gerilimi [V] Çıkış gerilimi [V]

+

1k

+15V

-15V+15V

-15V

+15V

-15V

+

10k

20k

Cevap

25k

outin

5k

146

Page 160: Pic 16f84 Mikrodenetleyici

İşlemsel Yükselteçler ( Op-amp )

Alıştırma 5-9 Aşağıdaki terslemeyen yükseltecin yükseltme faktörünü bulunuz

45k

out

in

5k

Cevap

(6) Voltaj takip devresi

1mA

5k

4V

1mA

5k 20k

1mA

5k

5V

5V

i

Şekil görülmektedikkate alıdışarıdan bdış devrelevoltaj takip

(a)

Şe

5-25 (a),(b) deki voltmetdir. Ortak direncin 4k Ondığında çıkış gerilim değağlanan devreler yükseltrin arasındaki boşluğa e edene bir örnektir.

(b)

kil 5-25 Voltaj takibi

rede dirençli karşılaşhm olduğundan volteri 80 % oranında daecin çıkış değerini etk

klenirler. Şekil 5-25(c)

147

(c) Voltaj takib

tırma devresinin çıkış gerilimini metrenin 20k Ohm iç direnci de ha gerçeğe yakın olur Bunun gibi ilemezler. Empedans devreler bu deki devre Op-amp kullanılarak

Page 161: Pic 16f84 Mikrodenetleyici

DA konvertör 4 DA KONVERTÖR (1) DA KONVERTÖR PRENSİBİ

Most physical quantities in nature are continuous (analog quantities). On the other hand, digital technology deals with discrete quantities, as computer cannot directly handle continuous quantities. For a computer to handle analog quantities, the following process becomes necessary: AD dönüşüm + Digital işletim + DA dönüşüm.

Dijital işletim sistemi

analog değeri

AD dönüşümü

DA dönüşümü

analog değeri

Şekil 5-26 DA, AD dönüşümü şeması

DA konvertör converts binary numeric data held in the digital output device to an analog quantity. DA konvertörleri R-2R ladder devresi ile öğreneceğiz.

PB0

PB1

PB2

PB3

PB5

PB6

PB7

PB4

Analog OUT2R

2R

2R

2R

2R

2R

2R

2R

2R

R

R

R

R

R

R

R

LSB

MSB

Şekil 5-27 R-2R leder devresi

148

Page 162: Pic 16f84 Mikrodenetleyici

DA konvertör Vout aşağıdaki eşitlikle bulunur.

⎟⎠⎞

⎜⎝⎛ +++++++×=

1280

641

322

163

84

45

26

17

2PBPBPBPBPBPBPBPBVoVout

( Vo = 5V , PB0 – PB7 : 0 or 1 ) Örneğin, B portundaki çıktı '10000000' olduğunda bunun anlamı çıkış gerilimi 2.5 Volttur.

5.21280

640

320

160

80

40

20

11

25

=⎟⎠⎞

⎜⎝⎛ +++++++×=Vout

Alıştırma 5-10

Dijital giriş F0h( heksedesimal sayı ) olduğunda analog çıkış gerilimi ( Vout ) kaç volttur. Hesaplayınız.

Cevap Alıştırma 5-11

Çıkış geriliminin minimum değeri ( Vmin ) nedir ?

Cevap

149

Page 163: Pic 16f84 Mikrodenetleyici

DA konvertör (2) DENEY 1 1) DA konverterin çıkışı DA konvertörün çıkışının ölçülmesi ve hesaplanan değerle karşılaştırılması

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

ULN2803

300 X 8

+5VGND

CLOCK

DATA

PIC16F84

MCLRJumper

Analog in

+5v

GND

DigitalOUT

Comparater

+5v

20k

10k

10k

10k

10k

10k

10k

20k

20k

20k

20k

20k

20k

20k

20k

LED x 8 +5v

GND

10k10k

0.22uF 0.22uF

4.7uF

4.7uFMAX662A

+12v

+5v

+12v

+12v

LM358

LM358

10k

R-2R D/A Converter

D-D Converter(MAX662A)

+5V

+5v

Şekil 5-28 DA konvertör deney devre şeması 2) DA konvertörün deneyi (a) Kullanılan aletler

a) DA konvertör deney devresi 1 b) Giriş / Çıkış boardı 1 c) Digital Avometre 1

150

Page 164: Pic 16f84 Mikrodenetleyici

DA konvertör Deney devresini kurunuz ve ölçme boardunu takınız. PA1 butonuna basıp giriş değerini değiştirerek çıkış gerilimini ölçünüz. ( 4-13 deki programı kullanınız. ) Çıkış gerilimlerini ölçüp grafiğini çiziniz.

Kontak boardu

PA1PA2

RESET

Op-ampLED

PIC

Ext çıkış

ULN2803

R-2R DA konvertör

PIC Yazıcı

Şekil 5-10 DA konvertör deney boardunun görünümü

PIC Yazıcı

AD

GND +5V

DA çıkış

Digital Avometre

DA konvertör deney boardu Kontak boardu

Şekil 5-11 Deneyin iletken bağlantısı

151

Page 165: Pic 16f84 Mikrodenetleyici

DA konvertör

Giriş değeri Çıkış gerilimi Decimal DATA

Binary DATA Hexadecimal DATA

Hesaplanan değer [V]

Ölçülen değer [V]

0 00000000 00h 0.0V 8 00001000 08h 0.15625V

16 00010000 10h 0.3125V 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248

255

152

Page 166: Pic 16f84 Mikrodenetleyici

DA konvertör Giriş – Çıkış grafiği

153

Page 167: Pic 16f84 Mikrodenetleyici

DA konvertör (3) TESTERE DİŞLİ DALGA YAPIMI DA konvertör ile testere dişli dalga yapacağız. v[V] t[s] Şekil 5-12 Testere dişli dalga 1) Program yapımı

PORTB << PORTB + 1

PORTB’yi temizle

PORTB’ nin

tamamını çıkış yap

Başla

0

255

0

Şekil 5-13 Akış diyagramı 2) Akış diyagramına göre testere dişli dalga programını yapınız. 3) DENEY 2 (a) Kullanılan aletler

a) DA konvertör deney devresi 1 b) Giriş / Çıkış boardı 1 c) Osilaskop 1

154

Page 168: Pic 16f84 Mikrodenetleyici

DA konvertör Deney devresini kurarak osilaskobu bağlayınız. Testere dalga programını yapınız ve testere dalgayı gözlemleyerek dalga şeklini çıkarınız. Dalganın şeklinden de frekansını hesaplayınız.

AD

DA Çıkış

GND +5V

DA konvertör deney boardu Kontak boardu

PIC Writer

Şekil 5-14 Deneyin iletken bağlantısı Volt ( ) V/DIV

Zaman ( ) s/div

155

Page 169: Pic 16f84 Mikrodenetleyici

DA konvertör Alıştırma 5-12 Üçgen dalga programını yapınız ve üçgen dalgayı gözlemleyerek dalga şeklini çıkarınız. Dalganın şeklinden de frekansını hesaplayınız. v[V]

t[s] Volt ( ) V/DIV

Zaman ( ) s/div

156

Page 170: Pic 16f84 Mikrodenetleyici

AD konvertör 5 AD KONVERTÖR (1) AD KONVERTÖR PRENSİBİ A CPU binary digit olan 1 ve 0 bilgileri işleyebilir. Mikrobilgisayarlar veya kişisel bilgisayarlar ses gibi analog bir sinyali işleyebilmesi için bunu öncelikle digital sinyale çevirmek zorundadır. Bunun için analoğu digitale çeviren devreler mevcuttur. Biz bu devrelerede AD ( Çevirici ) konvertör devresi diyoruz. Analog sinyal ilk önce örnekleme haline getirilir. Daha sonra bu sinyal AD çeviriciden çıkış sinyali olarak alınır. Bu örnekleme durumu digital sinyal çevriminin tamamlanmasına kadar sabit seviyede durur.

Miktarının belirlenmesi

Sample and hold circut

Analog sinyal Dijital sinyal

fm

Ts Ts Ts

Şekil 5-15 A/D konvertör akışı A/D konvertörde ilk durum analog sinyallerinin sayılaştırıldığı bir örnekleme durumudur. Örnekleme pulslerinin frekansı örnekleme frekansı olarak adlandırılır. Örnekleme frekansı ( Sayısı ) ne kadar fazla olursa o derece digital bilgi sayısıda fazla olur. Fm giriş analog sinyallerinin frekansı ve fs örnekleme frekansı na oranı fs >= 2fm kadar olması yeterlidir. fs >= 2fm tarafından sunulan bu ilişki örnekleme teoremidir. Giriş analog sinyallerinin frekansının yarısını geçmemelidir.

157

Page 171: Pic 16f84 Mikrodenetleyici

AD konvertör The sample-and-hold circuit is not used in our experiment.

Örnek frekans sampling cycle telefon 8 kHz 125.0us compact disk 44.1kHz 22.7us

Mikrofon için giriş olacak analog sinyalin en yüksek frekansı çoğu kez bilinmeyendir. Yüksek frekanslı sinyallerde örnekleme teorisinin kullanılabilmesi için frekans düşürücü filitreler kullanılmalıdır. Örnek analog sinyalleri sayılaştırma yolu ile digital sinyallere dönüştürülür. Elde edilmek istenen digital sinyalin bit sayısı kadar analog sinyallerin amplitude eşit genişlikli kısımlara ayrılması gerekir. Örneğin 3 bit digital sinyalin kazanılması için analog sinyal seviyesinin 8 kısıma ayrılması gerekir. 3 bit sinyal 8 nümerik değer ile ifade edilebilir.

1/8 2/8 3/8 4/8 5/8 6/8 7/8 1 [V]

111 110

101

100 011

010

001 000

Şekil 5-16 Quantization

Maximum Quantization error = 1 / 2n [%]

( Örnek şekil 5-16 1/8 = 12.5[%] )

158

Page 172: Pic 16f84 Mikrodenetleyici

AD konvertör (2) AD konvertör tipinin ardarda tahmin prensibi

Analog giriş Karşılaştırıcı

DA konvertör

PA0 PIC16F84

PB7 PB0

Şekil 5-17 AD konvertör tipinin ardarda tahmin prensibi

1 2 3 4 5 6 7 8

11111111 Giriş gerilimi 00000000

zaman Şekil 5-18 Değişim karakteristiği

İlkönce, en yüksek pozisyon biti 1 ile setlenir daha sonra analog giriş değeri ile DA değişim değeri karşılaştırılır. Eğer giriş değeri yüksek ise bu pozisyon 1 e setlenir aksi takdirde 0 olur. Sonra bir sonraki bit 1 olarak denenir ve aynı işlem takip edilir. Buna göre 1 veya 0 olduğu tesbit edilir. Bu işlem yüksek bitlerden düşük bitlere doğru devam eder. Bütün bitlerin set veya reset ( 1 veya 0 ) oldukları tesbit edildikten sonra DA konvertörün giriş bilgisi AD konvertör değeri olarak bulunur.

159

Page 173: Pic 16f84 Mikrodenetleyici

AD konvertör Şekil 5-16 deki örnek 1) PORTB >> 10000000

Bit6 = 0

Bit5 = 1

Bit4 = 1

Bit3 = 0

Bit1 = 0

Bit2 = 1

Bit0 = 1

10110101

Bit7 = 1 DA konvertör gerilimi < Analog giriş Karşılaştırıcı >> 0(PA0) 2) PORTB >> 11000000 DA konvertör gerilimi > Analog giriş Karşılaştırıcı >> 1(PA0) 3) PORTB >> 10100000 DA konvertör gerilimi < Analog giriş Karşılaştırıcı >> 0(PA0) 4) PORTB >> 10110000 DA konvertör gerilimi < Analog giriş Karşılaştırıcı >> 0(PA0) 5) PORTB >> 10111000 DA konvertör gerilimi > Analog giriş Karşılaştırıcı >> 1(PA0) 6) PORTB >> 10110100 DA konvertör gerilimi < Analog giriş Karşılaştırıcı >> 0(PA0) 7) PORTB >> 10110110 DA konvertör gerilimi > Analog giriş Karşılaştırıcı >> 1(PA) 8) PORTB >> 10110101 DA konvertör gerilimi < Analog giriş Karşılaştırıcı >> 0(PA0) Dijital değer = 10110101

160

Page 174: Pic 16f84 Mikrodenetleyici

AD konvertör (3) PROGRAM YAPIMI 1) AD konvertör programının görünümü

PA1PA2

RESET

PIC Ext connector

LED(PB7 – PB0)

Fix : test değeri remove : Dış giriş

Gerilim test değeri

ULN2803

Op-amp

PIC Yazıcı

Şekil 5-19 AD konvertör deney boardu

(a) Programın işleyişi

AD dönüşümün başlaması ( LED de sonuç görülür )

AD dönüşüm devam eder ( Test değer yerini döndürün ve

değişken giriş değerleri elde edin )

PA1 butonuna basınız

Şekil 5-20 AD konvertör programının işleyişi

161

Page 175: Pic 16f84 Mikrodenetleyici

AD konvertör (b) Programın akış diyagramı

1

Başla

COUNT << 8

BIT << 10000000 PORTB << 10000000 MASK << 011111111

PORTA ( giriş ) PORTB ( çıkış )

TIMER 0.1ms

PA1 = 0 ?

Hayır

Evet

Hayır

PA0 = 0 ? DA < Giriş

Evet ERASE

1

COUNT = 0 ?

Evet

Hayır

TIMER 40ms

ERASE

PORTB << PORTB AND MASK

RETURN

COUNT << COUNT - 1

PORTB << PORTB veya BIT

Rotate right to MASK (1bit)

Carry << 0

Rotate right to BIT (1bit)

Carry << 1

Şekil 5-21 AD konvertör programının akış diyagramı

162

Page 176: Pic 16f84 Mikrodenetleyici

AD konvertör (c) Program kontrolü a) Programı yaptıktan sonra DA / AD konvertör deneme boardunda deneyiniz. b) Test değerinin değiştirerek değişik değerler elde ediniz. Alıştırma 5-13 LED de görülen gerilim değeri elde ederek gerilimin ne kadar olduğunu bulunuz.

İfade 10101010 3.32[V] Alıştırma 5-14 AD konvertör programını değiştirerek LED de değer gösterimini yavaşlatınız.

“ Zamanlayıcı ( Timer ) değiştirilecek ve bu şekilde LED ler yavaş yanarak AD değişimin işlemini daha kolay anlayabileciğiz

163

Page 177: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

6 Seri iletişim (RS-232C) (1) Bilgi iletişiminin ana hatları 1) Bilgi iletişim sistemi

Bilgi iletiminde düzenli iki sistem mevcuttur. Birisi paralel sistem diğeri ise seri sistemdir. Paralel sistem teşkil eden datanın bit sayısının komünikasyon hattını kullanır. Seri sistem ise iletişimde komünikasyon hattının sadece birini kullanır. Transmitter paralelden seri geçişe dataların her bir bite parçalanması için gereklidir. ( Paralel-Seri dönüşüm ). Receiver ise bilgileri toplama için gereklidir. ( Seri-Parallel dönüşüm )

01110101

Şekil 5-22 Paralel komünikasyon sistemi

1 0 1 0 1 1 1 0

Şekil 5-23 Seri komünikasyon sistemi Paralel sistemlerde bilgi iletimi seri iletimlere göre çok daha fazladır. Paralel komünikasyon hat sayısı seri sistemlere göre çok çok daha fazladır. Bu yüzden uzun mesafeli komünikasyonda seri sistem daha avantajlıdır.

164

Page 178: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

2) Transmisyon sinyal sistemi Burada dijital sinyallerin nasıl sinyal hattına aktarıldığını açıklayacağız. Alçak band ( base-band ) transmission 1 ve 0 sinyal için atama yapılmış gerilim sistemidir. Bu sistemde sadece bir band kullanımına izin verilmektedir. Sadece bir tek cihaz bilgi gönderebilir. Geniş band ( broad-band ) transmission ise yüksek frekans 0 ve 1 için düşük frekansa atanmış sistemdir. Base-band’ın tam tersidir. Sanal olarak bir çok kanala bölünmüştür. Her kanalın kendine ait taşıyıcı frekansı vardır. Bu farklı frekanslar sayesinde aynı anda bir çok farklı bilgi birbirine karışmadan iletilebilir. 1 0 1 0 1 1 1 0 (a) base-band

1 0 1 0 1 1 1 0 (b) broad-band

Şekil 5-24 Transmission sinyal sistemi

3) RS232C RS232C Amerika Birleşik devletleri endüstriyel elektrik kurumunca ( Electric Industrial Association ) standartlaştırılmıştır. RS232C nin nedeni ise kişisel bilgisayarlara terminallerin ve modemlerin kolayca bağlanmasıdır. RS232C’ nin gerilimide standarttır ve artı eksi 12 Volttur. ( Artı eksi 3V’dan fazlasıylada çalışabilir. ) 0V. İlede bağlantısını kesebiliriz. +5 – +12V GND -5 – -12V

Şekil 5-25 RS232C’ nin gerilim durumu

165

Page 179: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

Özel IC kullanılarakta artı 5V. dan artı eksi 9V. kadarda yapılırlar ( MAX232 )

Şekil 5-26 Özel IC kullanımlı (MAX232)

4) Seri komünikasyonun formatı

Bitiş biti Bitiş biti

LSB MSB

0 11 0 1 1 0 011 0 1 11 1 0

Başlama biti

Bilgi ( 8bit ) Bilgi ( 8bit )

Başlama biti

T 1 karakter 11bit

Zaman

Şekil 5-27 Seri komünikasyonun formatı

Seri komünikasyonun transmisyon formatı Şekil 5-24 de görülmektedir. Bilgi çıkışı komünikasyon hattında Şekil 5-24 deki gibi soldan sağa doğrudur. Bilgi sürekli 1 ise iletişim yok demektir. Bilgi gönderilmeye başlandığı zaman başlangıç biti olarak 1 bit 0 gönderilir. Sonra çıkış bilgisi ardarda en az bitle ( LSB ) iletilir. Şekil 5-24 de 8 bitlik bir bilgi gönderilmesi örneklenmiştir. Daha sonra gönderilen bilginin sonunu belirtmek için bitiş biti gönderilir. Bu stop biti şekilde görüldüğü gibi 2 bitten meydana gelmektedir. Böylece bir

166

Page 180: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

karakter 1 bit başlangıç biti, 8 bit bilgi biti, 2 bitte bitiş biti olmak üzere 11 bitten iletişim sağlayabilmektedir. Receiver, bir karakter için başlangıç ve bitiş bitini ayırarak bilgi bitinide ekleyerek paketleme yapar.

Bilgi transmisyon hızı 1 saniyede göndermiş olduğu bitlerin sayısı ile ifade edilir. Birim olarakta ( bit per second ) bps kullanılır. Örneğin, Bilgi transmisyon hızı 300 bps olan olan dalganın bit genişliğini hesaplayınız. [ ]ms

bpsT 3.300333.0

30011

==== 3.3ms

Şekil 5-28 Bit genişliği 300 bps den anladığımız bir karakter 11 bitten oluştuğundan dolayı bir karakterin gidiş hızı 11 x 3,3 = 36,3ms olur. Ayrıca 1 saniyede giden karater sayısınıda yaklaşık olarak bulmak istersek 300bps / 11bit = 27 karakter olur. Bitiş biti

Başlama biti

Bilgi ( 8bit )

01 1 1 0 1 1 1

MSBLSB

36.7ms 3.3ms

Şekil 5-29 Bilgi ( data ) gönderme zamanı (300bps)

Tipik bps hızları (300,600,1200,2400,4800,9600)

167

Page 181: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

5) Seri komünikasyon uygulama devresi

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

ULN2803

300 X 8

+5VGND

CLOCK

DATA

PIC16F84

MCLR

+5v

D x 8LE

10k10k

PA2

126

3459

78

DR

SG

RSCSCI

CDRDTDER

3

14

7

13

8

1

16

6

11

10

12

9

4

5

2

15

MAX232

9Pin Male (DTE)

+5V

+5V

10uF

10uF 10uF

10uF

Şekil 5-30 Uygulama boardunun devre şeması

LED(PB7 – PB0)

PA2

RESET PIC

PA3 ULN2803

Ext connector

MAX232

PC RS232C Bağlantısı

PIC Yazıcı

Şekil 5-31 Seri komünikasyon uygulama boardu üst görünümü

168

Page 182: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

(2) Seri komünikasyon programı 1 1) Program 1 PA2 butonuna bastığımızda kişisel bilgisayarımız ekranında ( teraterm program sayfasında ) ‘A’ harfinin görünmesini sağlayınız. ( ‘A’ ASCII kod sisteminde 41h (01000001) dir.)

Bilgi gidiş hızı ( baud rate ) >> 300bps Bilgi ( data ) >> 8 bit Bitiş biti ( stop bit ) >> 2 bit

Bitiş bitiBaşlama biti

Bilgi ( 8bit )

11 0 0 0 0

MSBLSB

36.7ms 3.3ms

0 0

Şekil 5-32 RS232C ile ‘A’ nın ASCII çıkış kodu

169

Page 183: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

(a) ACSII ( American Standard Code for Information Interchange ) kod tablosu

0 1 2 3 4 5 6 7 0 NUL DLE SP 0 @ P ` p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 “ 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAC % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB ‘ 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y I y A LF/NL SUB * : J Z j z B VT ESC + ; K [ k C FF FS , < L ¥ l | D CR GS - = M ] m E SO RS . > N ^ n ~ F SI US / ? O _ o DEL

Örneğin, 'A' >> '41h' / ‘d’ >> ‘64h’ / ‘T’ >> ‘54h’ gibi

Tablo 5-1 ASCII kod tablosu 2) Program mantığı

a) Başlangıç biti oluşturunuz ( düşük bit ‘0 ‘ )

b) Dönerek sağa doğru bilgi bitini gönderiniz. (1 bit)

c) Taşıma bitini ( carry bit ) kontrol ediniz. ( data = 0 veya 1 )

d) [ b) , c) ] şıklarını 8 kez tekrar ediniz.

e) Bitiş bitini oluşturunuz. ( yüksek bit ‘1’)

170

Page 184: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

3) Programın akış diyagramı

1

1

PORTA0 = Çıkış PORTA1_4 =Giriş PORTB ( Çıkış )

PA2 = 0 ?

Evet

Hayır

Carry = 0 ?

SDATA kontrolü

Evet

SCNT << SCNT - 1

TIMER 3.3ms

SDATA Sağa kaydır (1bit)

Hayır

TIMER 3.3ms

PA0 << yüksek bit

PA0 << 0 (düşük bit)

(Başlama biti)

SDATA << 41h(A)

SCNT << 8

Program sonu

TIMER 3.3ms

TIMER 3.3ms

PA0 << 1 (yüksek bit) ( bitiş biti )

Evet

Hayır SCNT = 0 ?

PA0 = 0

PA0 = 1

Başla

Şekil 5-33 Programın akış diyagramı

171

Page 185: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

4) Program1 örneği ; program RS_1 ; RS-232C program (300bps) ; 'A' nın Bilgisayara çıkışı LIST P=16F84,R=DEC INCLUDE "P16F84.INC" CNT EQU H'10' CNT1 EQU H'11' SDATA EQU H'12' SCNT EQU H'13' BSF STATUS,RP0 ;Bank1’e geç MOVLW B'11110' ;PORTA 0bit >> çıkış diğerleri >> giriş MOVWF TRISA ; CLRF TRISB ;PORTB >> tamamı çıkış BCF STATUS,RP0 ;Bank0’a geç BSF PORTA,0 ;RS232C port << yüksek CLRF PORTB ;PORTB << 0 MOVLW B'01000001' ;ascii data 41h >> A MOVWF SDATA ;SDATA << 'A' SW BTFSC PORTA,2 ;PA2 SWITCH ON? GOTO SW ;PA2 SWITCH OFF >> GOTO SW MAIN SND BCF PORTA,0 ;Başlama biti >> düşük CALL TIMER ;3.3ms timer >> 300bps MOVLW 8 ;bilgi >> 8bit MOVWF SCNT ; SND1 RRF SDATA,F ;1 bit sağa kay BTFSC STATUS,C ; carry bitini kontrol et (check data bit) GOTO BITON ;carry bit = 1 >> goto BITON BCF PORTA,0 ;carry bit = 0 >> PA0 bit düşük GOTO SND2 ;BITON’u atla BITON BSF PORTA,0 ;Eğer bilgi (data) =1 SND2 CALL TIMER ;3.3ms timer >> 300bps DECFSZ SCNT,1 ;Bilgi sonu? GOTO SND1 ;bilgi sonu değilse SND1 e git BSF PORTA,0 ;bitiş biti >> yüksek

172

Page 186: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

CALL TIMER ;3.3ms timer CALL TIMER ;3.3ms timer STP GOTO STP ; timer = 1+1+10*(1+1+110*(1+2)+1+2)+2 =3354us=3.4ms TIMER MOVLW D'10' ;1CLOCK MOVWF CNT ;1CLOCK DLY1 MOVLW D'110' ;1CLOCK MOVWF CNT1 ;1CLOCK DLY11 DECFSZ CNT1,1 ;1CLOCK GOTO DLY11 ;2CLOCK DECFSZ CNT,1 ;1CLOCK GOTO DLY1 ;2CLOCK RETURN ;2CLOCK END 5) Teraterm programını nasıl kullanırız ? 1) tterm başlatınız. Bunun için aşağıdaki ikona double click yapınız (a) Teraterm 1

Şekil 5-34 Seri modunu seçiniz.

173

Page 187: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

(b) Teraterm 2

Şekil 5-35 Seri portu setup yapınız. (c) Teraterm 3

Şekil 5-36 Baud rate seçimini yapınız.

Şekil 5-37 Seri portu setup yapınız

174

Page 188: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

6) Programın uygulanması (a) Boardu PC ye bağlayınız.

paralel porta PIC Yazıcı

RS232C özel kablosu

RS232C portuna

Şekil 5-38 Uygulamanın bağlantı şeması (b) PA2 butonuna bastığımızda kişisel bilgisayarımız ekranında ( teraterm program sayfasında ) ‘A’ harfinin görünür.

Şekil 5-39 Program uygulamasının sonucu Alıştırma 5-15 Boud rate hızını 300 bps den 9600 bps’ye değiştirerek tekrar deneyiniz. ( Programda zamanlayıcıyı ( timer ) değiştirmeniz gerekmektedir. )

175

Page 189: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

(3) Seri komünikasyon programı 2 1) Program 2 hakkında Klavyeden yazılan karakterin ASCII kodunu LED lerle gösteren program yapınız. (a) Bilgisayar klavyesinde eğer ‘B’ harfine bastıysak, (b) Uygulama boardundaki LED lerde bu harfe karşılık gelen ASCII koduna göre yanacaktır.

( ‘B’ nin ASCII kodu 42h.)

Şekil 5-40 Uygulama örneğinin sonucu 2) Program mantığı

B

i

Bilgi ( 8b

0 0 0 0

LSB

1.1452us

1

10

Şekil 5-41 Programla sin

176

Bitiş bit

Başlama biti

Bilgi gidiş hızı ( baud rate ) >> 9600bps Bilgi ( data ) >> 8 bit Bitiş biti ( stop bit ) >> 2 bit

it )

10

MSB

4ms

0

4us

yali okuma methodu

Page 190: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

(a) Başlama bitini bekler ( düşük bit ) (b) Düşük sinyal ( 0 ) geldiği zaman 52us bekler ( 9600bps in bir biti 104us dir. )

( It is a position of the center of the start bit.) (c) Bir bit zamanı kadar bekler ( 104 us ) (d) Sinyali okur. ( yüksek veya düşük ) (e) Okuduğu sinyali taşımada ( Carry ) stoklar (f) Bir bit sağa doğru kayarak hafızada biriktirir. (g) .( (d) şıkkından (f) şıkkına kadar olan işlemleri 8 kez tekrar eder. (h) 208us bekler ( 2 bitiş biti ) (i) Depolanan bilgi LED ye çıkış olarak gönderilir. (j) İşlem baştan tekrar yapılır.

177

Page 191: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

1

Başla

PORTA ( Giriş ) PORTB ( Çıkış )

PA1 = 0 ?

Evet

Hayır

Evet

Rotate right to SDATA (1bit)

Hayır

TIMER 52us

SCNT << 8

carry bit << 1

PA1 = 0 ?

carry bit << 0

SCNT = 0 ?

SCNT << SCNT - 1

Hayır

Evet

PORTB << SDATA

TIMER 208us

1

TIMER 52us

TIMER 52us

TIMER 52us

2

2

Şekil 5-42 Program 2 nin akış diyagramı

178

Page 192: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

3) Program2 örneği ; ; RS-232C alıcı programı (9600bps) ; Keyborda yazılan karakterin ASCII koduna göre LED’in yanması ( PORTB ) ; LIST P=16F84,R=DEC INCLUDE"P16F84.INC" COUNT EQU H'10' ; MEMORY ADRES SDATA EQU H'11' SCNT EQU H'12' BSF STATUS,RP0 ;Bank1’e geç MOVLW B'11111' ;PORTA tamamı giriş MOVWF TRISA CLRF TRISB ;PORTB tamamı çıkış BCF STATUS,RP0 ;Bank0’a geç CLRF PORTB ;PORTB LED tamamını söndür MAIN RCV BTFSC PORTA,1 ;Başlangıç biti? GOTO RCV ;Başlama biti yoksa CALL TIMH ;sinyalin yarı hareketi ; ; ___ Başlangıç biti _____ ; | | ; |<TIMH>|<TIMH>| ; |________|________| ; ; | <--- 104us ---> | ; MOVLW D'8' ;bilgi = 8bit MOVWF SCNT ;SCNT << 8 SEND2 CALL TIMH ;Sinyalin orta hareketi CALL TIMH ; BCF STATUS,0 ;carry bit = 0 ( default : signal=0) BTFSC PORTA,1 ;signal = 0 ? BSF STATUS,0 ;carrybit = 1den sinyal 0 değilse

179

Page 193: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

RRF SDATA,1 ;SDATA >> 1bit sağa kay DECFSZ SCNT,1 ;bilgi sonu ?(SCNT << SCNT - 1) GOTO SEND2 ;bilgi sonu değil CALL TIMH ;bitiş biti işlemi CALL TIMH ;bitiş biti işlemi CALL TIMH ;bitiş biti işlemi CALL TIMH ;bitiş biti işlemi MOVF SDATA,W ;W << SDATA MOVWF PORTB ;PORTB << W GOTO MAIN ;sinyali tekrar okuma STP GOTO STP ; TIME = 52us (104 / 2 = 52 ) TIMH MOVLW D'15' ;1CLOCK MOVWF COUNT ;1CLOCK DLY DECFSZ COUNT,F ;1CLOCK GOTO DLY ;2CLOCK RETURN ;2CLOCK END 4) Program uygulaması

RS232C özel kablosu

PIC Writer

Şekil 5-43 Uygulamanın iletken bağlantısı

180

Page 194: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

Alıştırma 5-16 Program 1 ve Program 2 nin birleşimi bir program yapalım. (1) Klavyeden girilen karakterin ASCII kod karşılığına göre LED lerin yanmasının sağlanması

A Tuşa basınız

LED lerin yanması

(2) ASCII karşılığını bilgisayara gönderilmesi ve ekranda ona karşılık gelen karakterin görünmesi

A Bilgisayar ekranı

( teraterm ) Alıştırma 5-17 (1) PA2 butonuna basınız (2) Ekranda isminiz veya diğer istediğiniz bir kelimenin görünmesi ( teraterm ) ( İsim veya kelimenin bitmesinde ‘9’ sayısını kullanınız. )

turgay

181

Page 195: Pic 16f84 Mikrodenetleyici

Seri iletişim ( RS-232C )

Alıştırma 5-18 PA2 butonuna her basışımızda aşağıda görüldüğü gibi displayde 0( 30h ) den z( 7Ah ) ye kadar gösteren bir program yapınız.

PA2 butonuna basınız

0123456789:; ……………………xyz01234…… teraterm

182

Page 196: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

7 STEP MOTOR KONTROLÜ

(1) STEP MOTORLAR HAKKINDA GENEL BİLGİLER

Step motorlar fırçasız DA motorları sınıfına girmektedir. Step motorların en fazla kullanıldığı yerler yazıcılar ( printer ), küçük ölçekli CNC tezgahlarında, disket sürücülerde, diğer ufak çaplı uygulamalarda ve azda olsa hız kontrolleri gereken yerlerde kullanlırlar. DA motorlarında en fazla arıza gösteren yerler fırça kısımlarıdır. Bu nedenle fırçasız motorlar fırçalı motorlara göre daha uzun ömürlüdürler. Bu yüzden endüstriyel kontrol sistemleri gibi yerlerde arıza fazla olması istenmediğinden dolayı fırçalı motorlar tercih edilmezler.

Normal DA motorları ile Step motorları karşılaştırdığımızda step motorların donanımları daha karmaşık olduğu görülür. Uygulamada hız ve adım kontrolü istenmiyorsa DA fırçalı motorlar daha iyi sonuç verirler. Ancak hız kontrolü veya pozisyon kontolü gerekli olduğu uygulamalarda step motorlar gerekli olurlar. Bu doğrultuda step motorlar geri besleme olmadan hız kontrolünde veya pozisyon kontrolünde asla kayma ve şaşma göstermezler. Eğer geri besleme gerektiren bir motor kullanmış olsaydık bu defada geri besleme ünitesi motorun maliyetinden daha fazla yük getirebilirdi. Tipik geri besleme sensörleri optic kod çözücüler, takometreler ve kara vericilerdir.

Şekil 5-44 Step motor

1) Her adımın derecesi

Yapacağımız uygulaya göre seçeceğimiz step motor özellikleri çok önemlidir. Motorun her tam adımda döneceği derece miktarı kesin olarak bilinmelidir. Motorun yarım adım işletiminde adım veya dönme miktarı iki katı olacaktır. Ve her adım derecesi yarıya inecektir. Üzerinde adımın kaç derece olduğu yazılmayan motorlar için bu adım sayısı dikkatli bir şekilde elle döndürülerek sayılmalıdır. Bir tam dönüşteki adım sayısını tesbit ettikten sonra dairenin açısı olan 360 ‘a bölersek her bir adımın kaç derece olduğunu bulmuş oluruz. Genel standart olarak : 0.72, 1.8, 3.6, 7.5, 15, ve hatta 90.derece bulabiliriz. Her adımın derecesi motorun kararlılığı ile ilgilidir. Eğer motorun üzerinde sadece adım sayısı veya tur sayısı yazıyorsa bu adım sayısını veya tur sayısını 360’a bölmeliyiz ki bir adımın kaç dereceye tekabül ettiğini bulabilelim.

183

Page 197: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

2) Uçlarının tesbiti

Step motorların uç bağlantıları ile ilgili elimizde bir catalog veya döküman yok ise uçlarını ohm metre ile bir kaç ölçme ve bir kaç deneme ile ( en fazla 16 deneme ) bulabiliriz.

Step motorlarda 4 adet bobin vardır. Her bobinden birer uç çıkartılmıştır. Bir adette ortak uç olmak üzere 5 uç mevcuttur. Ohm metre ile ölçümümüzde ortak uç ile diğer 4 bobin ucu arasında sabit bir direnç değeri vardır. Böylece ortak uç bulunabilir. Bu uca motorun çalışma gerilimi uygulanır. Kalan 4 ucu ise transistor veya FET gibi anahtarlama ( ON – OFF ) uçlarına bağlarız. Bağlantımız dıoğru ise motor dönmeye başlar yanlış ise motor dönmez ve titreme yapar. Bu durumda 4 uçtan bazılarının yerini değiştirmemiz gerekir. Doğru uçları bulup motor dönene kadar bu işleme devam edilirki 4 ucun 16 adet kambinasyonu vardır ve en fazla 16 deneme sonucunda gerçek uçları bulmuş oluruz.

Eğer step motorumuz 6 uçlu ise bunun anlamı mevcut olan 4 bobin ikişerli gruplara ayrılarak birer ortak uç çıkartılmış demektir. 2 Bobin ucu 1 ortak uç olmak üzere 3 uçlu iki grup vardır ve bunlar arasında elektriksel bir bağ bulunmamaktadır. Avometre ile 3’lü grupları birbirinden ayırmak oldukça kolaydır. Ayrılan bu gruplarda sabit direnç gösteren uç ortak uçtur. Sonuç olarak bulunan iki ortak uç birleştirilmek suretiyle 5 uçlu step motor elde edilmiş olur. Zaten 5 uçlu step motorlarda bu ortak uçlar içeride yapılmıştır. Bundan sonra yapılacak işler 5 uçlu ile aynıdır.

3) Step motorların temel özellikleri (a) Dönüş açısı giriş faz sayısı ile orantılıdır. (b) Dönüş hızı giriş faz oranı ile orantılıdır. ( Faz frekansına ) (c) Bazı torklar kendi kendine de oluşabilmektedir çünkü kalıcı bir mıknatıs kullanılmaktadır. (d) Yüksek tork, iyi sonuç ve hafiftirler. (e) Küçük açı, yüksek verim ve ucuzdurlar. (f) Bakıma ihtiyaç yoktur çünkü fırçasız bir DA motordur.

184

Page 198: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

4) Çalışma prensibi

Y

X

Y

Y

C

X

Y

X

X X

X

Y YC

M

Pulse Motor

Şekil 5-45 Step motorların çalışma prensipleri

Unipolar step motorlar 4 fazlı fırçasız motorlardır ve tipik 5 veya 6 uçlu olarak tanınırlar. Eğer 5 uçlu ise ortadaki uç motorun içerisinde bağlamışlar ve ortak uç olarak dışarıya çıkmıştır.

X

X Y Y

Kontrol birimi

Şekil 5-46 Tipik step motor devresi

185

Page 199: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

Şekil. 5-46’da görüldüğü gibi anahtarlamada transistor kullanılmış, ancak kontrol ünitesi olarak transistörlerin açılıp kapanmasını sağlayan kısım gösterilmemiştir. Anahtarların kontrolü için ihtiyaç olan çıkış sinyallerini üreten bu birim genel olarak bilgisayar programları ile hazırlanıp bir ara birimle sürülmektedir

Şekil 5-47 de görüldüğü gibi motorun çalışması için bobinleri kullanarak manyetik alanlar oluşturabiliriz

4) Unipolar Step motor ( 1 fazlı sürme metodu ) Sürekli olarak bir fazlı düzenli bir gerilim vermeliyiz.

Y X

X

YN S

SN

S NS N

X Y Y X

1 0 0 0 0 1 0 0 0 0 1 0

0 0 0 1

Saat yönünde X Y Y X

0 0 0 1 0 0 1 0 0 1 0 0

1 0 0 0

Saat yönünün

tersi yönde

Şekil 5-47 Ünipolar step motorun 1 fazlı olarak sürülmesi Bu metodla çalışma prensibini daha iyi anlayabiliriz. Ancak bu metod step motorların tork ve durma karakteristikleri iyi olmadığından çok fazla kullanılmaz.

186

Page 200: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

5) Unipolar Step motorun 2 fazlı olarak sürülmesi

N

N

X

Y N X

NY Y

X

X

Y

S N S

N

S NS

N

X Y Y X 1 1 0 0 0 1 1 0 0 0 1 1

1 0 0 1

Saat yönünde

X Y Y X 1 0 0 1 0 0 1 1 0 1 1 0

1 1 0 0

Saat yönünün

tersi yönünde

Şekil 5-48 Ünipolar step motorun 2 fazlı olarak sürülmesi Genellikle bu methot kullanılmaktadır çünkü torkları yüksek ve durma karakteristikleri iyidir.

187

Page 201: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

6) Unipolar Step motorların 1-2 fazlı olarak sürülmesi

N X

N X

Y

Y

N

S N

N

S

N

X

Y

Y N

Y X

X

Y

N SS N

S NS N

X Y X 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0

0 0 1 0 0 0 1 1 0 0 0 1

1 0 0 1

Saat yönünde

Şekil 5-49 Ünip Yarım açılı ( adımlı ) dönme meth

X

Y X Y Y X 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0

0 1 1 0 0 1 0 0 1 1 0 0

1 0 0 0

Saat yönünün tersi yönünde

olar step motorun 1-2 fazlı olarak sürülm

odu gibi

188

esi

S

S

N

Page 202: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

(2) Step motor uygulaması1 1) Step motor uygulama devresi

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

+5VGND

CLOCK

DATA

PIC16F84

MCLR

10k x 3

1k

1k

PA4 PA3

+5V

+5V

Motor

+5V

+5V

1k

1k

74HC14

X

X

Y YC

M

X

X

Y

Y

C

200 24k

5v 5v

Photo Interrupter

Pulse Motor

300

300

300

2SD1276A x 4

Voltage

200 24k

5v 5v

Photo Interrupter

Şekil 5-50 Step motor uygulama devre şekli

189

Page 203: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

PA2

RESET

PIC

Ext connector

PA1 PA0

PA0

PB1

PB2

PB3

Motor gerilimi

Step motor 7.5 derece 5 – 10V

PA3PA4

Sensor Girişi

270

90

0 180Step motor 1.8derece 5V

PIC Yazıcı

Photo interrupter

Şekil 5-51 Eğitim uygulama seti

190

Page 204: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

2) Step motorun programı (a) PA0 butonuna basılır. (b) Step motor 1 faz saat yönünde döner. (Motor yaklaşık 1 saniyede 360 derece yol alır )

(Her bir adımı 1.8 derece olan step motor kullanmalıyız.) 3) Programın akış diyagramı

TIMER 20ms

SCNT << 8

1

PORTB << W (Steper motor data gönderme)

TABLE << TABLE + 1

Başla

PORTA ( Giriş ) PORTB ( Çıkış )

PMDAT

PA0 = 0 ?

Evet

Hayır

MDATA << 4 ( Step motor datasayısı )

MDATA = 0?

Hayır

Evet

RETLW

1

PCL << PCL + W

Başla

2

2

TABLE << 0

W << TABLE

Şekil 5-52 Programın akış diyagramı

191

Page 205: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

4) Program ;******************************************** ;* ;* RETLW komutunu kullanarak 1 fazlı step motor kontrolü ;* ;******************************************** LIST P=16F84,R=DEC INCLUDE "P16F84.INC" CNT1 EQU H'10' ; MEMORY ADRES CNT2 EQU H'11' ; MDATA EQU H'12' ; TABLE EQU H'13' ; INIT BSF STATUS,RP0 ; Bank1’e geç MOVLW B'11111' MOVWF TRISA CLRF TRISB ; PORTB tamamı çıkış BCF STATUS,RP0 ; Bank0’a geç CLRF PORTB ; PORTB = 0 SW BTFSC PORTA,0 ;PORTA Butonu basılımı ? GOTO SW LOOP MOVLW D'4' ; step motor data sayısı= 4 MOVWF MDATA ; MDATA = 4 CLRF TABLE ;TABLE = 0 LOOP1 MOVF TABLE,W ;W << TABLE CALL PMDAT ; TABLE data 0 dan 3’e MOVWF PORTB ;PORTB << W (motor data) CALL TIMER ; 20ms gecikme INCF TABLE,F ; TABLE << TABLE+1 DECFSZ MDATA,F ; MDATA << MDATA-1 = 0 ?

; GOTO LOOP1 GOTO LOOP STP GOTO STP

192

Page 206: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

;*********************************************************** ; step motor data ;*********************************************************** PMDAT ADDWF PCL,F ;PCL ( program counter ) ;+ W >>PCL RETLW B'00000001' ;motor data 1 >> W (PCL+0) RETLW B'00000010' ;motor data 2 >> W (PCL+1) RETLW B'00000100' ;motor data 4 >> W (PCL+2) RETLW B'00001000' ;motor data 8 >> W (PCL+3) TIMER ;yaklaşık 5ms zamanlayıcı ;************************************************************ ;* 1+1+2*(1+1+250*(2+2+2+1+1+2)+1+1+2)+1+2=5017us * ;************************************************************ MOVLW D'2' ; 1clock MOVWF CNT1 ; 1clock DLY1 MOVLW D'250' ; 1clock MOVWF CNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ CNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ CNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

193

Page 207: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

Alıştırma 5-19 ( Her bir adımı 1.8 derece olan step motor kullanmalıyız. ) (1) PA0 butonuna basılır. (2) Step motor 2 faz sürülerek saat yönünde döner. ( Motor yaklaşık 1 saniyede 360 derece yol

alır ) Alıştırma 5-20 ( Her bir adımı 1.8 derece olan step motor kullanmalıyız .) (1) PA0 butonuna basılır. (2) Step motor 1-2 faz sürülerek saat yönünde döner. (Motor yaklaşık 1 saniyede 360 derece

yol alır ) Alıştırma 5-21 ( Her bir adımı 1.8 derece olan step motor kullanmalıyız. ) PA0 butonuna basılır >> Step motor saat yönünde 2 faz döner. PA1 butonuna basılır >> Step motor saat yönünde 2 faz döner. PA2 butonuna basılır >> Step motor durur. Alıştırma 5-22 ( Her bir adımı 1.8 derece olan step motor kullanmalıyız .) PA0 butonuna basılır >> Step motor yanlızca 360 derece döner.

194

Page 208: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

(3) Step motor uygulaması 2 ( Pozisyon kotrol ) 1) Foto interrupter

0 1 1 0 200 24k

5v 5v

200 24k

5v 5v

(a) Arada her hangi bir cisi Şekil

Foto interrupter LED ile foto tranher hangi bir cisim yok iken “1” ( 2) Program Yapılan bu programla sensör kontadet sensör ile bir adet step mogerilimi ise 5 -10 Volt arasındadır

m yokken (b) Arada bir cisim varken

5-53 Foto interrupter

sistörün birleşiminden meydana gelmektedir. ÇıkŞekil a ) , arada bir parça var ise “0” ( şekil b ) olma

rolünü ve motor kontrolünü öğreneceğiz. Eğitim setor kullandık. Step motorun bir adımı 7.5 derece. İki faz sürücülüdür.

195

ışı arada ktadır.

tinde iki çalışma

Page 209: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

3) Programın akış diyagramı ( Alıştırma 5-23 )

Step motor saat yönünde döner.

Bant sola doğru hareket eder.

Parça PA4 deki foto interruptere gelince motor 1 saniye durur.

Step motor saat yönünün tersi yönde döner

Bant sağa doğru hareket eder.

Parça PA3 deki foto interruptere gelince motor 1 saniye durur.

PA0 butonuna basılır.

Şekil 5-54 Programın akış diyagramı

196

Page 210: Pic 16f84 Mikrodenetleyici

Step Motor kontrolü

PA2

RESET

PIC

Ext connector

PA1 PA0

PA0

PB1

PB2

PB3

MOTOR gerilimi

Motor gerilim

Step motor 7.5 derece 5 – 10V

PA3PA4

Sensör girişi

PIC Yazıcı

Foto interrupter

Şekil 5-55 Step motor eğitim seti

197

Page 211: Pic 16f84 Mikrodenetleyici

DA motor kontrolü 8 DA MOTOR KONTROLÜ (1) DA motorları hakkında genel bilgi 1) Transistör ve FET ile DA motor kontrolü yapabiliriz.

20k

MM

Motor gerilimi

1k

diyod

PIC port

PIC port

Motor gerilimi (a) Transistor (b) FET Şekil 5-56 DA motor kontrol metodları

Şekil. 5-56 DA motorlarının kontrol metodları görülmektedir. Eğer PIC ‘in portundan gelen sinyal 1

( 5V ) ise motor dönmeye başlar. Eğer PIC ‘in portundan gelen sinyal 0 ( 0V ) ise motor durur. Bu metodla

motor da sadece bir yönde dönme sağlanır.

2) H köprü devresi

Motorun her iki yöndede dönmesini istediğimiz zaman şekil 5-57 deki devreyi kullanmalıyız.

i

S1

M

(a) Boşta

S1

M

(b) Saat yönünde

Şekil 5-57 H kö

19

S1

M

(c) Saat yönünün te

prü metod devresi

8

S1

M

S3 S3 S3

r

S3

S4 S4 S4

si (d) Tutma

S4

S2

S2 S2

S2

Motor gerilim

Motor gerilimi Motor gerilimi Motor gerilimi

( Fren )

Page 212: Pic 16f84 Mikrodenetleyici

DA motor kontrolü

M

TR3

TR1

SW1

TR1

SW2

TR2

SW3

TR3

SW4

TR4

Açiklama

OFF OFF OFF OFF Boşta

ON OFF OFF ON Saat yönünde

OFF ON ON OFF Saat yönü tersi

OFF OFF ON ON Tutma ( Fren )

TR2

TR4

Şekil 5-58 Transistörle yapılmış H köprü devresi

3) Motor sürücü

Motor sürücüsü DA motorlarda devir yönü değiştirmek için tam köprü sürücüye sahiptir. Bu devre elemanı ile DA motoru saat yönünde, saat yönünün tersi yönde, boşta ve fren durumunda kolaylıkla kontrol edebiliriz. Özelliği (Motor sürücü TA7257P) (a) Çıkış akımı ortalama 1.5A , maksimum 4.5Adir. (b) 4 fonksiyon moda sahiptir.(İleri, Geri, Boşta,Fren) Bütün

bunları 2 ucunu besleyerek 2 lojik sinyalle gerçekleştirebiliriz

(c) Aşırı akım,kısa devre ve ısıya karşı koruma vardır. (d) İşletim gerilimi : Vcc = 6 – 18V, Vs = 0 – 18V Şekil 5-59 TA7257P

kontrol

Isı koruma

Aşırı akım koruma4

5

3

6

1

Vcc7

Giriş

Giriş 2

Vs

Çıkış1

Çıkış2

GND

Şekil 5-60 Blok diyagramı (TA7257P)

199

Page 213: Pic 16f84 Mikrodenetleyici

DA motor kontrolü

PIN No. Sembol Fonksiyon Açıklaması 1 IN1 Giriş ucu 2 IN2 Giriş ucu 3 OUT1 Çıkış ucu 4 GND Toprak ucu 5 OUT2 Çıkış ucu 6 Vs Motor sürücüsü için gerilim ucu 7 Vcc Lojik devrenin çalışması için gerilim ucu

Şekil 5-61 TA7257P’nin PIN uçları

Giriş 1 Giriş 2 Çıkış 1 Çıkış 2 Çalışma şekli 1 1 H H Fren 0 1 L H İleri 1 0 H L Geri 0 0 L L Boşta

Şekil 5-62 TA7257P’nin fonksiyonları

4) DA motorlarında hız kontrolü DA motorlarında hızı kontrol etmek için iki yöntem vardır. Bunlardan birisi gerilim kontrolü diğeri ise faz kontrolüdür.

M

Şekil 5-63 Gerilim kontrolü (a) Gerilim kontrolü

Gerilim kontrolü analog bir kontroldür. ( Şekil 5 -63 ) Bu yöntem genel olarak kullanılan bir metodtur. Bu metodu kullanmak için elektrik amplifikatörüne ihtiyaç vardır ancak verimli ve kullanışlı bir metod değildir. Bu metodu mikrodenetleyiciler ile kullanamayız.

200

Page 214: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (b) PWM kontrol (Faz genişlik kontrollü ) ( Pulse Width Modulation )

PWM metodu fazın genişliğini kontrol ederek motorun hızını kontrol etmektedir. PWM yöntemi tamamen dijital bir kontroldür. ( 0/1 kontrollüdür. ) PWM ile fazın 1 veya 0 olma durumlarını kontrol ederiz ve çok kullanışlı bir metodtur. Sadece motor hızını değil lambanın yanma parlaklığınıda kontrol edebiliriz. (Şekil 5-64)

High

Hız Low

Bu alan değişmez

Şekil 5-64 PWM control

FET(2SK2936)or (2SK3142)

M

D

SG

Motor gerilimi

0k2

G : Gate

D : Drain S : Source

PIC PB1 portundan

Şekil 5-65 PIC ile PWM kontrolü

Şekil 5-65’de görüldüğü gibi bu şekilde DA motorunu kontrol etmek için FET ( Field Effect Transistor ) ihtiyaç vardır.. Çünkü FET’in anahtarlama özelliği iyidir ve PWM için en uygun özelliğe sahiptir.

201

Page 215: Pic 16f84 Mikrodenetleyici

DA motor kontrolü 5) DA motor ders eğitim setinin devre şeması

PB1 FET(Gate) PB2 IN1(TA7257) PB3 IN2(TA7257)

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

+5VGND

CLOCK

DATA

2SK3142

MCLR

10k x 3

PA4 PA3

+5V

+5V

+5V

74HC14

200 24k

5v 5v

+12v(motor)

+12v(motor)

TA7257P

MotorDriver

+12v(motor)+5V

IN0

IN1

M1

M2

GND

1

2

3

5

4

67

PIC16F84

(Nch MOS FET)

20k

Photo interrupter

RB0/INT

Short pin

Şekil 5-66 DA motor ders eğitim setinin devre şeması

202

Page 216: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (2) Eğitim malzemesi 1) Motor eğitim malzemesi

Delikli disk

Foto sensörü ( PA3 )

Sensör Bağlantı

Motor Bağlantı

Redüktörlü DA motor ( TSUKASA TG23A-SG 12V ) Foto sensörü (T oshiba TP507A )

Şekil 5-67 Sensörlü DA motor

2) DA motor eğitim seti

Motor gerilimi

RESET

TA7257 den

FET’ den

Sensör’den

TA7257

FET

PB2 PB3

PB1

PA0 PA1 PA2

PIC yazıcı

For oscilloscope

terminal

Foto interrupter girişi Pin seçimi (PA3 , PB0) oscilloscope

terminal(GND)için

DC 12V

Şekil 5-68 DA motor eğitim seti

203

Page 217: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (3) DA motor programı 1) Program1 (Motorun FET ile bağlantısının sağlanması) ( Uygulama 5-24 ) (a) PA0 butonuna basılır >> Motor döner. (b) PA1 butonuna basılır >> Motor durur.

Güç kaynağı (DC 12V) 2) Program2 ( TA7257 ile motor bağlantısının sağlanması ) ( Uygulama 5-25 ) (a) Butonlara basılı değil >> Motor durur(fren modu) ve giriş butonunu bekleme (b) PA0 butonuna basılı >> Motor saat yönünde döner CW(clockwise). (c) PA1 butonuna basılı >> Motor saat yönünün tersi yönde döner CCW(counter clockwise) (d) PA2 butonuna basılı >> Motor durur(fren modu) ve giriş butonunu bekleme. Not : Eğer motorun dönüş yönünü değiştirmek istiyorsak once PA2 ( stop ) butonuna basılmalı daha sonra diğer butonları kullanmalıyız.

Güç kaynağı (DC 12V)

204

Page 218: Pic 16f84 Mikrodenetleyici

DA motor kontrolü 3) Program 3 ( PWM programı : Motorun FET ile bağlantısının sağlanması )

DA motor şekil 5-62 deki dalga konumuna göre dönmektedir. Bir dalga boyu 7.5 ms. Dir. ON zamanı 1.5ms ve OFF zamanı 6 ms.’dir. Bu data bilgileri PB1 ucuna gönderilerek motorun dönmesi sağlanır. (a) PWM Dalgası ( PB1 )

7.5ms

1.5ms 6ms

Şekil 5-69 DA motorun PWM dalgası

(b) PWM dalgasını nasıl oluşturuz.

Bir saykılın nümerik toplam değeri (250) dir. Bunun ON zamanı için (50) nümeric değer ayırırsak OFF zamanı içinde (250) – (50) = (200) nümerik değer buluruz.

s s

PWM ON zamanı PON = 50 X 0.03ms = 1.5m

s

Şekil 5-70 Prog

PWM OFF zamanı POFF = 200 X 0.03ms = 6m

PWM dalga zamanı Saykıl = 250 X 0.03ms =7.5m

ramda PWM değeri

205

Page 219: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (c) Program3’ün akış diyagramı

1

Başla

PORTA( Giriş ) PORTB( Çıkış )

PB1 << 1( Bit on )

PON << PON -1

TIME1 0.03ms

Evet

PON = 0? Hayır

PA0 = 0 ?

Evet

Hayır

CYCLE << 250

Hayır

Evet

1

TIME1 0.03ms

POFF << POFF -1

POFF = 0?

PB1 << 0( Bit off )

2

PON << 50

POFF << CYCLE - PON

Şekil 5-71 Program3’ün akış diyagramı

206

Page 220: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (d) Program3 listesi ;******************************************************************* ; Bu program PWM programıdır. ;******************************************************************* LIST P=16F84,R=DEC INCLUDE "P16F84.INC" ;file include CYCLE EQU H'10' PON EQU H'11' POFF EQU H'12' COUNT1 EQU H'13' COUNT2 EQU H'14' INIT BSF STATUS,RP0 ;Bank1’e geç MOVLW B’11111’ ;PORTA tamamı giriş MOVWF TRISA ; CLRF TRISB ;TRISB=0 PORTB tamamı çıkış BCF STATUS,RP0 ;Bank0’a geç CLRF PORTB ;PORTB’yi temizle MAIN MOVLW D'250' ;Wreg << PWM cycle = 250 MOVWF CYCLE ;CYCLE << W reg PWM MOVLW D'50' ;Wreg << PWM ON time = 50 MOVWF PON ;PON << W reg SUBWF CYCLE,W ;Wreg << PWM cycle - PWM ON MOVWF POFF ;POFF(PWM OFF time) << Wreg ;*********************************************************** ; PWM on time 0.03ms * 50 = yaklaşık 1.5ms ;*********************************************************** BSF PORTB,1 ;PORTB bit1 = 1 PWM0 CALL TIME1 ;0.03ms gecikme DECFSZ PON,F ;PON-1 >> PON = 0? Eğer PON=0 ise atla ; Eğer PON=0 ise atla GOTO PWM0 ; PWM0’ a git

207

Page 221: Pic 16f84 Mikrodenetleyici

DA motor kontrolü ;*********************************************************** ; PWM off time 0.03ms * 200 = yaklaşık 6ms ;*********************************************************** BCF PORTB,1 ;PORTB bit1 = 0 PWM1 CALL TIME1 ;0.03ms gecikme DECFSZ POFF,1 ;POFF-1 >> POFF =0?

;Eğer POFF=0 ise atla GOTO PWM1 ;PWM1’e git GOTO PWM ;PWM’e git TIME1 ; yaklaşık 0.03ms gecikme ;************************************************************ ;* 1+1+1*(1+1+2*(2+2+2+1+1+2)+1+1+2)+1+2=32us * ;************************************************************ MOVLW D'1' ; 1clock MOVWF COUNT1 ; 1clock DLY1 MOVLW D'2' ; 1clock MOVWF COUNT2 ; 1clock DLY2 GOTO $+1 ; 2clock GOTO $+1 ; 2clock GOTO $+1 ; 2clock NOP ; 1clock DECFSZ COUNT2,1 ; 1(2)clock GOTO DLY2 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock END

208

Page 222: Pic 16f84 Mikrodenetleyici

DA motor kontrolü (e) Program3’ün uygulama sonucu

osilaskop

Güç kaynağı (DC 12V)

Şekil 5-72 Uygulamanın osilaskopa bağlantısı

Çıkan dalganın çizilmesi

209

Page 223: Pic 16f84 Mikrodenetleyici

DA motor kontrolü Uygulama 5-26 (1) PA0 butonuna basınız. (2) DA motor 10 tur saat yönünde döner. (Motorun dönüş sayısını PA3 ucuna bağlı bulunan

foto sensörü ile tesbit etmekteyiz.) (3) DA motor 1 saniye durur. (4) DA motor bu defada saat yönünün tersi yönünde 10 tur döner. (5) Bu işlem (2) – (4) defa tekrarlanır.

Foto sensor (PA3) PA0

TA7257

Güç kaynağı (DC 12V)

Şekil 5-73 Uygulama 5-23’ün iletken bağlantısı

210

Page 224: Pic 16f84 Mikrodenetleyici

DA motor kontrolü Uygulama 5-27 (1) DA motor dururken PA0 butonu başlatma butonudur.

(Dönüş hızını kendin belirleyebilirsin) (2) PA1 butonu dönüş hızının artması için butondur. (3) PA2 butonu dönüş hızının azalması için butondur. (4) DA motoru dönerken, PA0 butonu durdurma butonudur. (5) PWM programının çıktısını osilaskop ile doğrulayınız.

PA0PA1 PA2

osilaskop

Güç kaynağı (DC 12V)

Şekil 5-74 Uygulama 5-24’ün iletken bağlantısı

211

Page 225: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 9 KESME ( İnterrupt ) (1) KESME Biz burada PIC’de temel kesme konusunu ve önemini işleyeceğiz. 1) Kesme kavramı

Kesme ana program çalışırken dışarıdan gelen herhangi bir sinyal sonucu ana programın durması ve kısa bir kesme programının çalışmasının ardından ana programın kaldığı yerden devam etmesidir. Bunu bir örnekle açıklayacak olursak evde TV seyrederken kapı çalındığında TV seyretmeyi bırakıp kapıyı açar ve daha sonrada TV seyretmeye devam ettiğimizde kapının çalması dışarıdan gelen bir sinyal olur ve kapıyı açmanızda kesme program olmuş olur. Bu gibi örneklere günlük hayatımızdan çok fazla verebiliriz. Peki biz buna PIC te neden ihtiyaç duyarız gibi aklımıza soru takıldığında, kesme programlar kullanarak ana programın daha fazla karışık olmasını önler ve daha az komutlar kullanırsınız. PIC lerde kesme sinyal girişi 04h adresindedir. Örneğin, herhangi bir robot çalışırken sensörden gelen bir sinyal olursa bu defa robot başka bir işlemi gerçekleştirmiş olacaktır. Sonuç olarak bir kesme program ana programın çalışmasına son vermez sadece geçici olarak durdurur kesme alt programı çalışmasını bitirdikten sonra ana program kaldığı yerden devam eder. İki çeşit kesme vardır. ( Dış kesme ve iç zamanaşımı kesmesi olan TMR0 )

İşlem 2

İşlem 1

İşlem 3

İşlem 4

Son

Başla Ana program

Dış kesme ( TMR0 zamaPORTB değiEEPROM Bi

00h(Adres)

Şekil 5-75 Kesmenin şemas

212

Kesme

İşlem 1

İşlem 2

RETFIE

Başla Kesme progra

interrupt ) RB0/INT ucu n aşımı kesmesi şen kesmeler (RB7:RB4 uçları)lginin yazıldığı yer

ı ( PIC16F84 )

04h(Adres)m

Page 226: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt )

c

PIC16F84 4 çeşit kesme kaynağına sahiptir.

Harici ( External ) kesme RB0/INT u undaki sinyal girişi TMR0 zamanaşımı kesme PORTB değiştirerek kesme ( RB7:RB4 uçları ) Data EEPROM belleğe yazma işleminin tamamlanmasından oluşan kesme Biz burada iki çeşit kesme kaynağı öğreneceğiz. ( External kesme ve zaman aşımı TMR0 kesme ) Kesme kontrol yazmacı ( INTCON ) bayrak bitlerinde bağımsız olarak tek tek kayıt eder. Bu enable bitler tek tek ve global kesmede içermektedir., GIE(INTCON<7>) enable ( eğer setse ) bütünü geçerli ( masakelenmemiş ) kesmelerdir veya disable ( eğer temizse ) ise geçersiz ( maskelenmiş ) kesmelerdir. Tek tek olan kesmeler INTCON registerinde anable bitlerine karşılık olarak disable olabilirler. Resette GIE biti temizlenir. “kesmeden geri dönen” bilgi, RETFIE, exits kesme routine as well as sets the GIE bit, which re-enable kesmes. INTCON yazmacında ( registerinde ) RB0/INT kesme ucu, RB değişim kesme portu ve TMR0 zamanaşım kesme bayraklarını üzerinde taşımaktadır. Kesmenin olduğu anda ; GIE biti temizlenir ve disable olur, 0004h ile geri döner. Dış kesme olayları için, RB0/INT ucu veya PORTB değişim kesmesi gibi, gizli kesmede 3 veya 4 bilgi saykılında olmaktadır. Sonsuz defa kesmeleri kullanmak istediğimizde kesme bayrak biti beya bitleri yazılımla temizlenmelidir.. 2) TMR0 kesme TMR0(Timer0) de zaman aşımını (FFh >> 00H) T0IF(INTCON<2>) bayrak biti setleyecektir. Enable biti T0IE(INTCON<5>) set ve temizleme yaparak kesmeyi enabled/disabled yapar. 3) Dış kesme RB0/INT ucu Dış kesme RB0/INT de kenar seçimine göre çalışır. Eğer INTEDG biti (OPTION_REG<6>) set ise yükselen kenarda INTEDG biti clear ise alçalan kenarda işlem görür. RB0/INT bitinde geçerli kenar göründüğünde INTF biti (INTCON<1>) settir. Bu kesmeyi INTE (INTCON<4>) kontrol bitini temizleyerek disable yapabiliriz. Tekrar kullanmadan önce yazılımda INTF bayrak bitini temizlememiz gerekir.

213

Page 227: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (2) INTCON Yazmacı ( register ) ( Adres 0Bh,8Bh ) INTCON ( Interrupt Control )yazmacı okunabilir ve yazılabilir bir yazmaçtır ve her kesme için bir flag birde global kesme bayrağı içerirler.

b7 b6 b5 b4 b3 b2 b1 b0 R/W-0 R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-x

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF R=Okunabilir bit W=Yazılabilir bit -n=Value at POR reset

Enerji verildiğinde ilk atanan değer 0 0 0 0 0 0 0 x bit7: GIE : Tüm kesme işlemlerini iptal etme biti ( Global Interrupt Enable bit ) 1 = Tüm kesmeler maskesiz geçerli ( Enable ) 0 = Tüm kesmeler geçersiz ( Disable ) bit 6: EEIE : EE belleğe yazma işlemini tamamlama biti 1 = Geçerli ( Enable ) 0 = Geçersiz ( Disable ) bit 5: T0IE : TMR0 zaman aşımı kesmesini aktif yapma biti 1 = Geçerli ( Enable ) 0 = Geçersiz ( Disable ) bit4: INTE : RB0/INT Dış kesmeyi aktif yapma biti

1 = RB0/INT kesmesi geçerli ( Enable ) 0 = RB0/INT kesmesi geçersiz ( Disable ) bit 3: RBIE : RB Portları değiştirme kesmesini aktif yapma biti

1 = RB portlarındaki değişiklikler kesme meydana getirir ( Enable ) 0 = RB portlarındaki değişiklikler kesme meydana getirmez ( Disable ) bit 2: T0IF : TMR0 zamanaşımı kesme bayrak biti

1 = TMR0 zaman aşımına sahip ( yazılımla temizlenmeli ) 0 = TMR0 zaman aşımı yok demektir. bit 1: INTF : RB0/INT Kesme bayrak biti 1 = RB0/INT kesme olduğunda 0 = RB0/INT kesme olmadığında bit 0: RBIF : RB Port değişim kesme bayrak biti 1 = RB7:RB4 portlarından en az birinin değişmesi durumunda ( yazılımla temzilenmelidir )

0 = RB7:RB4 portlarında değişiklik olmadığı durumda

214

Page 228: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (3) OPTION_REG REGISTER ( ADRES 81h ) OPTION_REG yazmacı okunabilir ve yazılabilir özelliğe sahiptir. Çeşitli kontrol bitleri vardır bunlar dışkesme ( INT) ve zaman aşımı TMR0/WDT özelliğini taşırlar

b7 b6 b5 b4 b3 b2 b1 b0 R/W-1 R/W-1 R/W-1 R-1 R-1 R/W-1 R/W-1 R/W-1 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

R=Okunabilir bit W=Yazılabilir bit -n=Value at POR reset Enerji verildiğinde ilk atanan değer 0 0 0 0 0 0 0 x bit7: RBPU : PORTB Pull-up geçerli yapma biti 1 = PORTB uçlarındaki pull-uplar geçersiz olur. ( Disable ) 0 = PORTB uçlarındaki pull-uplar geçerli olur. ( Enable ) bit 6: INTEDG : Harici kesme için kenar seçme biti 1 = RB0/INT ucunun yükselen kenarda işlem görmesi 0 = RB0/INT ucunun alçalan kenarda işlem görmesi bit 5: T0CS : TMR0 Clock sinyalinin kaynağını seçme kaynağı. 1 = RA4/T0CKI ucuna harici sinyal girişi yapılacağında pin 0 = Dahili komut saykılı seçildiğinde (CLKOUT) bit4: T0SE : TMR0 sinyal kaynağı kenar seçme biti

1 = RA4/T0CKI ucundan yükselen kenara göre işlem gerçekleştirir. 0 = RA4/T0CKI ucundan alçalan kenara göre işlem gerçekleştirir bit 3: PSA : Frekans bölücü ( prescaler ) ayırma biti

1 = Frekans bölme sayısı WDT için geçerli 0 = Frekans bölme sayısı TMR0 için geçerli bit 2-0: PS2:PS0 : Prescaler bölme sayılarının değeri

Bit değeri TMR0 WDT

0 0 0 1 : 2 1 : 1 0 0 1 1 : 4 1 : 2 0 1 0 1 : 8 1 : 4 0 1 1 1 : 16 1 : 8 1 0 0 1 : 32 1 : 16 1 0 1 1 : 64 1 : 32 1 1 0 1 : 128 1 : 64 1 1 1 1 : 256 1 : 128

215

Page 229: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (4) RB0/INT kesme RB0 ucundan gelen sinyal sonrası RB0/INT kesmesi oluşur. Yükselen kenar ve düşen kenara göre kesme durumu OPTION yazmacının 6. biti tarafından karar verilir. ( default durumunda yükselen kenar geçerlidir. )

GND

Yükselen kenar

Şekil 5-

PB0/INT

PB1

PB2

OSC1

OSC2

MCLR

10k

4MHz

+5V

CLOCK

DATA

PIC1

MCLR

10k x 2

74HC14

+5V

+5V

interrupt switch

Şekil 5-77 RB0/IN

Düşen kenar

RB0/INT

Düşen kenar

Yükselen kenar

76 RB0/INT kesmesi

PA3

PA21

PA1

PA0

PB7

PB6

PB5

PB4

ULN2803

300 X 8

6F84 +5v

LED x 8+5v

+5V

10k74HC14

T kesmesinin deney devre şeması

216

Page 230: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt )

RB2

RA2

RA3 RA1

RA0

RB5

RB6

RB7

RB4

PIC YAZICI

RESET

PIC

ULN2803

RB0/INT RB1

Şekil 5-78 RB0/INT kesmesinin deney seti 1) RB0/INT kesme programı Programın ana hatları

a) PB0/INT butonuna basılır

b) RA0 – RA3 LE

u

3 2

c) PB0/INT buton

d) RA0 – RA3 LE

3 2 e) Bu işlem tekra

RB0/INT buton

D’leri binary olarak artış gösterir.

1 0 7 6 5 4

una basılır

u

RB0/INT buton

D’leri binary olarak a

1 0 7 6 5

rlanır.

21

RB

rtış gösterir

4

RB

RB

RB

RB

RB

RB

RB

RA

RA

RA

RA

RA

RA

RA

RA

7

Page 231: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 2) programın akış diyagramı

00h dan başlayan

ana program

04h dan başlayan

kesme programı

PORTB’yi temizle

NOP Kesmeyi bekle

COUNT temizle

RB0/INT interrupt enableINTCON INTE bit << 1

Enable interrupt INTCON GIE bit << 1

PORTA’yı temizle

PORTA ( Çıkış ) PORTB PB0-PB3 ( Giriş ) PB4-PB7( Çıkış )

Başla

interrupt flagı temizle

RETFIE

STATUS ve W yazmaçlarını geri yükle

COUNT << COUNT + 1

PORTA << COUNT

STATUS ve W yazmaçlarını sakla

Başla

Şekil 5-79 Programın akış diyagramı

218

Page 232: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 3) RB0 / INT kesmesi için program ;******************************************************************* ; ; RB0 kesme programı ; ;******************************************************************* LIST P=16F84,R=DEC INCLUDE "P16F84.INC" ; include dosyası W_TEMP EQU H'10' ; STATUS_TEMP EQU H'11' COUNT EQU H'12' ORG H'00' GOTO MAIN ORG H'04' GOTO ISR ; Ana program 00h adresinden başlar MAIN BSF STATUS,RP0 ;Bank1’e geç MOVLW B'00000' ;PORTA I/O data MOVWF TRISA ;PORTA tamamı çıkış MOVLW B'00001111' ;PORTB I/O data MOVWF TRISB ;PB0-PB3 >> giriş , PB3-PB7 >> çıkış BCF STATUS,RP0 ;Bank0’a geç CLRF PORTB ;PORTB << 0 CLRF PORTA ;PORTA << 0 CLRF COUNT ;COUNT << 0 BSF INTCON,INTE ;RB0/INT kesme enable BSF INTCON,GIE ;enable kesme LOOP NOP ;kesmeyi bekle GOTO LOOP

219

Page 233: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) ;************************************************* ; Kesme program ; Kesme programı 04h den başlar ;************************************************* ISR BCF INTCON,INTF ; kesme bayrağını temizle PUSH MOVWF W_TEMP ;W yazmaç değerini sakla SWAPF STATUS,W ;SWAP komutu Z bayrağından etkilenmez

MOVWF STATUS_TEMP ;STATUS yazmaç değerini sakla INCF COUNT,F ;Kesme programı MOVWF PORTA POP SWAPF STATUS_TEMP,W ;STATUS yazmaç değerini geri yükle MOVWF STATUS SWAPF W_TEMP,F ; W yazmaç değerini geri yükle SWAPF W_TEMP,W RETFIE END Not : Kesme zamanında içeriği koruma

Kesme durumunda, yanlızca stack hafızada geri dönmek için PC ( Program Counter ) değeri korunur. Ancak kullanıcılar anahtar yazmaç değerlerinde korunmasını isterler. ( W yazmacı ve STATUS yazmacı gibi ). Bu işlemi sadece yazılımda programla yerine getirebiliriz. Örneğin STATUS ve W yazmaç değerlerini saklamak ve ihtiyaçta tekrar kullanmak için geçici dosyalar oluştururz ki bunlara ve STATUS_TEMP isimleri verebiliriz. Aşağıdaki işlemi gerçekleştirmeliyiz. W yazmacını W_TEMP dosyasına atarız. STATUS yazmacını STATUS_TEMP dosyasına atarız

220

Page 234: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) Kesme işlemi gerçekleştirilir. STATUS yazmacı geri kazandırılır W yazmacı geri kazandırılır STATUS ve W register değerlerinin korunması örneği PUSH MOVWF W_TEMP ;W yazmacı TEMP yazmacına aktar SWAPF STATUS,W ;STATUS’u swap yap MOVWF STATUS_TEMP ;statusu STATUS_TEMP yazmacına aktar

Interrupt Service Routine POP SWAPF STATUS_TEMP,W ; STATUS_TEMPi swap yap ;yazmaç ve sonucu W yazılır MOVWF STATUS ; W yazmacı STATUS’a aktar ;( orjinal STATUS yüklenir) SWAPF W_TEMP,F ;W_TEMP’i swap yap. ;sonucu W_TEMP yaz

SWAPF W_TEMP,W ;W_TEMP’i swap yap ve sonucu W yazmacına yaz.

Uygulama 5-28

a) PB0/INT butonuna basınız

u

b) RB4 – RB7 LE

3 2 c) Bu işlem tekra

RB0/INT buton

D leri artarak yanar.

1 0 7 6 5 4

rlanır.

22

RB

RB RB RB RA RA RA RA

1

Page 235: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) Uygulama 5-29 RB0/INT kesmesiyle Uygulama 5-26 daki programı değiştiriniz. .

1) PA0 butonuna basınız 2) DA motor saat yönünde 10 defa dönsün ( dönüş sayısını RB0/INT kesmesine bağlı opto-kuplor ile sağlanmaktadır ) 3) DA motor 1 saniye durur. 4) DA motor 10 defa saat yönünün tersi yönünde dönsün. 5) Bu işlem (2) – (4) defa tekrarlasın.

Foto opto kuplor (RB0/INT) PA0 RB0/INT jumper değiştiriniz

TA7257

Güç kaynağı (DC 12V)

222

Page 236: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (5) TMR0 (Timer0 zaman aşımı kesme) 1) Timer0 zaman aşımı kesme hakkında

TMR0 (Timer0 zamanaşımı kesme) zamanlayıcı yapmada veya düzenli zaman aralıklarında sensör kontrollerinde çok elverişlidir. TMR0 bütün PIC çeşitlerinde kullanılabilr. TMR0 sekiz bitte artan yöndedir, yukarı sayıcıdır. timer0 modulü timer/counter aşağıdakilere sahiptir. 8-bit zamanlayıcı ( timer ) / sayıcılıdır. ( counter ) Okunabilir ve yazılabilir 8-bit programlanabilen frekans bölme ( prescaler ) değerlidir Dahili veya harici zamanlayıcı ( clock ) seçimine sahiptir. Kesme FFh den 00ha gelince gerçekleşmektedir. Harici zamanlayıcı ( clock ) için yükselen alçalan kenar seçimine sahiptir.

1 2 6

Zaman ( clock ) girişi Dahili veya harici ( RA4/T0CKI ucu )

TMR0 yazmacı 0 >> 255

Zaman aşımında ( 255>>0 )

T0IF(INTCON) biti setlenir

Şekil 5-80 Timer0 kesmesinin şeması

TMR0 registeri FFh den 00h geldiğinde zaman aşımına uğrar TMR0 kesmesi gerçekleşir. Bu zaman aşımıda T0IF ( INTCON<2> ) bitini set durumuna geçirir. Kesme T0IE enable bitinide ( INTCON<5> ) maskeleyebilir. T0IF biti Timer0 modul kesme olarak kullanılacaksa yazılım ile mutlaka temizlenmelidir ( sıfırlanmalıdır ) Ffh den 00h Timer0 zaman aşımı

T0IF biti (INTCON<2>) = 1

T0IF bitini mutlaka Interrupt Service Routine ile sıfırlamalıyız.

Şekil 5-81 T0IF biti hakkında

223

Page 237: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt )

0

Prescaler Timer0 RA4/T0CKI

T0CS PSA PS2 PS1

0:Timer0

PS0 T0SE

0:yükselen kenar1:alçalan kenar

1

Sistem clock

OPTION yazmacı ( register )

0 0 0 1/2 0 0 1 1/4 0 1 0 1/8 0 1 1 1/16 1 0 0 1/32 1 0 1 1/64 1 1 0 1/128 1 1 1 1/256

Şekil 5-82 Timer0 mimarisi Örnek OPTION registerin değerini aşağıdaki gibi elde edebiliriz. Clock >> internal clock Prescaler >> 1/256

1 1 1 0 1 0 1 1

OPTION register değeri = D7h

Şekil 5-83 OPTION register değeri

224

Page 238: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 2) Zaman aşımı frekans nasıl elde edilir ? Sistem zamanını ( clock ) zaman kaynağı olarak kullandığımız zaman zaman aşımı frekansı elde edebiliriz. Zaman aşımı frekansı = sistem zamanı ( closk ) / Prescaler oranı / 256 Örneğin Osilatör hızı 4MHz >> Sistem zamanı ( clock ) = 4MHz / 4 = 1MHz Prescaler 1/256

1MHz 1

25615.26Hz

256

1 Prescaler Timer0 counter Zaman aşımı frekansı = 1000000Hz / 256 /256 = 15.26Hz Cycle = 1 / 15.26 = 65.5ms Kesme bu örnekte her 65.5ms sonunda meydana gelmektedir. Eğer bir saniyelik zaman gerekli ise bu programda bu süreci 15 defa çalıştırmamız yeterli olacaktır. (1 / 0.0655 = yaklaşık 15) Prescaler frekans(Hz) cycle(ms)

1/2 1953.12 0.51/4 976.56 1.021/8 488.28 2.04

1/16 244.14 4.11/32 122.07 8.21/64 60.04 16.7

1/128 30.52 32.81/256 15.26 65.5

Şekil 5-84 Prescaler ve frekans

225

Page 239: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 3) Interval zamanlayıcı ( timer )

TMR0 kesmesini kullanarak sürekli olarak belli aralıklarla sensör durumunu ( değerini ) kontrol eder. Örneğin, 50ms interval zamanlayıcı yapıldığında PIC in TMR0 ı CPU zamanı ile sayar. Sayılan bu değer aşağıdaki gibi elde edilir. Sayılan değer = Interval zamanı / saat saykılı (50ms X 1000) / (1 us) = 50000 sayılan değer TMR0’ın sayılan değeri = 50000 / 256 ( Prescaler değer ) TMR0’ın sayılan değeri = 195 (C3h) Bu nedenle, TMR0’ın ilkdeğeri ( FFh C3h = 3Ch )

1MHz T=1us

20Hz T=50ms

195

1

256

1

r

Şekil 5-85 TMR0 ile Inter TMR0 ilk değeri set etme methodu MOVLW H’3C’ MOVWF TMR0 ;TMR0’ın adresi 01h.

226

Timer0 sayıcısı 3Ch danFFh a kadar sayar.

Prescale

val zamanlayıcı

Page 240: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (6) Timer0 program1 Şekilde görüldüğü gibi LED lerin yanıp sönmesini sağlayan program yapalım ( Interval : 1s ) ( Eğitim boardunun üzerinde ) 1) Akış diyagramı Şekil 5-86 Program akış diyagramı

Setup timer0 Internal clock Prescaler 1/256

PORTB << 0Fh

W << COUNT - W

Evet

Hayır W reg = 0

CALL DSP

W reg << 15

COUNT temizle

TMR0 interrupt enable INTCON T0IE bit << 1

Enable interrupt INTCON GIE bit << 1

Initialize PORTA ( Giriş ) PORTB (Çıkış )

Başla

Kesme bayrağını temizle

RETFIE

STATUS ve W yazmacını geri yükle

COUNT << COUNT + 1

PORTA << COUNT

STATUS ve W yazmacını sakla

Başla

DSP

RETURN

COMF PORTB

COUNT temizle

227

Page 241: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) 2) Timer0 program1 ;**************************************************************************** ; Timer0 programı (4MHz Oscillator >> System clock 1MHz ; Zaman açımı frekansı = 1000000Hz / 256 /256 = 15.26Hz ; Cycle = 1 / 15.26 = 65.5ms ;**************************************************************************** LIST P=16F84,R=DEC INCLUDE "P16F84.INC" ; include dosyası W_TEMP EQU H'10' ; STATUS_TEMP EQU H'11' COUNT EQU H'12' ORG H'00' GOTO MAIN ORG H'04' GOTO ISR MAIN BSF STATUS,RP0 ;Bank1’e geç BCF INTCON,GIE ;disenable intrrupt MOVLW B'11010111' ;internal clock , prescaler 1:256 MOVWF OPTION_REG ; CLRF TRISB ;TRISB=0 PORTB tamamı çıkış MOVLW B'11111' ;PORTA DATA MOVWF TRISA ;PORTA tamamı giriş BCF STATUS,RP0 ;Bank0’a geç MOVLW B'00001111' ;PORTB ilk data MOVWF PORTB ;PORTB data CLRF COUNT BSF INTCON,T0IE ;timer0 zaman aşımı kesme enable BSF INTCON,GIE ;enable kesme LOOP MOVLW D'15' ;65.5ms X 15 = 982.5ms( yaklaşık 1s ) SUBWF COUNT,W ;Kesme sayısı = 15? BTFSC STATUS,Z ; 15 >> CALL DSP , veya 15 >> LOOP CALL DSP ;

228

Page 242: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) GOTO LOOP DSP CLRF COUNT ;COUNT temizleme COMF PORTB,F ; PORTB bilgiyi tersleme RETURN ;************************************************* ; Timer0 kesme programı 04h adresinden başlar. ;************************************************* ISR BCF INTCON,T0IF ;kesme bayrağını temizleme PUSH MOVWF W_TEMP ;W register değerini sakla SWAPF STATUS,W ;SWAP komutu Z bayrağından etkilenmez MOVWF STATUS_TEMP ;STATUS register değerini sakla INCF COUNT,F ;Kesme program POP SWAPF STATUS_TEMP,W; STATUS register değerini geri yükle MOVWF STATUS SWAPF W_TEMP,F ; W register değerini geri yükle SWAPF W_TEMP,W RETFIE END

229

Page 243: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) (7) Timer0 program2 ( TMR0’ın Initial değeri setleme ) Şekilde görüldüğü gibi LED lerin yanıp sönmesini sağlayan program yapalım ( Interval : 1s ) ( Eğitim boardunun üzerinde ) 1) Timer0 program2 ;**************************************************************************** ; Timer0 programı.(4MHz Oscillator >> System clock 1MHz ; Zaman aşımı frekansı = 1000000Hz / 256 /195 = 20.03Hz ; Cycle = 1 / 20.03 = 49.93ms ;**************************************************************************** LIST P=16F84,R=DEC INCLUDE "P16F84.INC" ; include dosyası W_TEMP EQU H'10' ; STATUS_TEMP EQU H'11' COUNT EQU H'12' ORG H'00' GOTO MAIN ORG H'04' GOTO ISR MAIN BSF STATUS,RP0 ;Bank1’e geç BCF INTCON,GIE ;disenable intrrupt MOVLW B'11010111' ;internal clock , prescaler 1:256 MOVWF OPTION_REG ; CLRF TRISB ;TRISB=0 PORTB tamamı çıkış MOVLW B'11111' ;PORTA DATA MOVWF TRISA ;PORTA tamamı giriş BCF STATUS,RP0 ;Bank0’a geç MOVLW B'00001111' ;PORTB ilk data

230

Page 244: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) MOVWF PORTB ;PORTB data CLRF COUNT MOVLW H'3C' ;FFh – C3h = 3Ch MOVWF TMR0 ;TMR0 << 3Ch(195) BSF INTCON,T0IE ;timer0 zamanaşımı kesme enable BSF INTCON,GIE ;enable kesme LOOP MOVLW D'20' ;49.93ms X 20 = 998.5ms( yaklaşık 1s SUBWF COUNT,W ;Kesme sayısı = 20? BTFSC STATUS,Z ; 20 >> CALL DSP , veya 20 >> LOOP CALL DSP ; GOTO LOOP DSP CLRF COUNT ;COUNT temizle COMF PORTB,F ; PORTB datayı tersleme RETURN ;************************************************* ; Timer0 kesme programı 04h adresinden başlar. ;************************************************* ISR BCF INTCON,T0IF ;kesme bayrağını temizle PUSH MOVWF W_TEMP ;W register değerini sakla SWAPF STATUS,W ;SWAP komutu Z bayrağından etkilenmez MOVWF STATUS_TEMP ;STATUS register değerini sakla MOVLW H'3C' ;TMR0 << 3Ch(195) MOVWF TMR0 INCF COUNT,F ;Kesme program POP SWAPF STATUS_TEMP,W ;STATUS register değerini geri yükle MOVWF STATUS SWAPF W_TEMP,F ; W register değerini geri yükle SWAPF W_TEMP,W RETFIE END

231

Page 245: Pic 16f84 Mikrodenetleyici

Kesme ( İnterrupt ) Uygulama 5-30 timer0 program 1 ile timer0 program 2 arasındaki farklılıkları yazınız. Uygulama 5-31 Eğitim boardunuzda bulunan yedi segment displayde 0 dan F’e kadar sayan bir program yapınız. ( Interval 1 saniye ) Timer0 kesmesini kullanmalısın.

232

Page 246: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

10 ÇİZGİ TAKİP EDEN ROBOT ( Line trace robot control ) (1) ÇİZGİ TAKİP EDEN ROBOT

Çizgi takip eden robotu PIC ile kontrol edebiliriz. Bizim çizgi takip eden robotumuz siyah çizgide hareket eder. Bu tür çizgi takip eden robotların büyükleri fabrikalarda kullanılmaktadır.

DA motor PIC16F84 Çizgi sensörü

Şekil 5-87 Çizgi takip eden robot hattı 1) Çizgi sensörü

Çizgi sensörü PIC’e çizgi hakkında bilgi gönderir. Bu sensor çizgi takip eden robot için gerekli olan siyah veya beyaz çizgi bilgilerini sağlar. (a) Infra-red LED and Foto transistor

Foto transistörden geçen akım bu transistöre düşen ışık miktarına bağlıdır. Bu karakteristik özelliğini kullanarak optic sensor yapabiriz.

233

Page 247: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

Foto TR

Güçlü yansıma

Beyaz zemin

IR LED

IR LED

Zayıf yansıma

Foto TR

Siyah zemin

Şekil 5-88 Siyah ve Beyaz zeminde sensor durumu

Foto transistör

200PIC Ucuna

10k – 50k

Infra-red LED

Şekil 5-89 Sensör devresi (b) Foto transistörler

Beyaz zeminin ışık yansıması

Siyah zeminin ışık yansıması

100uA 300uA

Şekil 5-90 Foto transistörde ışığa göre akımın geçişi

234

Page 248: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

2) Foto transistor uygulaması (a) Kullanılan aletler a) Bread board 1 b) Dijital avometre 1 c) 5V Güç kaynağı ( Anahtarlı güç birimi ) 1 (a) Kullanılan malzemeler a) Foto transistor (Toshiba TPS603A) 1 b) Infra red LED (Toshiba TLN103A) 1 c) LED (Kırmızı renkte) 1 d) IC Çevirici (74HC04 or 74HC14) 1 e) Direnç 1/4W 200 1 f) Direnç 1/4W 1k 2 g) Direnç 1/4W 10k 1 h) Direnç 1/4W 20k 1 i) Direnç 1/4W 30k 1 j) Direnç 1/4W 51k 1

Bread board üzerinde uygulama devresini yaparak enerji veriniz.

Infra-red LED TLN103A

Foto transistörTPS603A

200 LED

1k

74HC04 or 74HC14

V

5V

5V

Dirençleri değiştir (1k , 10k , 20k , 30k , 51k)

Şekil 5-91 Uygulama devresi

235

Page 249: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

Şekil 5-92 TPS603A nın uç bağlantıları

Şekil 5-93 TLN103A nın uç bağlantıları (c) Çıkış geriliminin ölçülmesi a) Direnç değerlerini 1k dan 51k ya kadar değiştirerek çıkış gerilimini ölçünüz. Siyah ve

beyaz zeminde foto transistörün çıkış gerilimini ölçerek lojik olarak ( 1 veya 0 ) kararını veriniz.

236

Page 250: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

b) Ölçme devresi

Siyah ve Beyaz kağıt

LED

Foto transistorInfra-red LED

bread board

Şekil 5-94 Deney şeması Not : Bu deney için eğer bulunan ortam çok aydınlık olursa iyi sonuç elde edilemez bu nedenle normal aydınlıkta yapılmalıdır ve extra bir aydınlık verilmemelidir. c) Ölçme sonucu

Direnç 1k 10k 20k 30k 51k

Gerilim değeri V V V V VSiyah kağıt Lojik çıkış Gerilim değeri V V V V VBeyaz kağıt Lojik çıkış

d) Sonuç

Beyaz kağıtta, kırmızı renkte LED ( ON OFF )

Siyah kağıtta, kırmızı renkte LED ( ON OFF ) Sensör sistemi için uygun olan direnç değerine karar veriniz. ( ……… k ) ** Aşırı aydınlık altında hatalar vardır. Parlak dış aydınlıkta sensör ayarını yapmak oldukca zordur. Çizgi takip eden robotlar için özel sensörler kullanırız.

237

Page 251: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

3) Foto IC ( Hamamatsu S7136 )

Şekil 5-95 S7136 şeması

Bu ışık modilasyonlu foto IC ler arka zeminin ( bulunduğu ortamın ) parlak olmasında geliştirilmiş optic sensörlerdir. Foto IC chipte fotodiyod, önyükselteç, karşılaştırıcı, osilatör, LED sürücü ve sinyal işletim devresi vb. elemanlar bulunmaktadır. Optik sekroniz tip foto sensörler foto reflektör ve foto kesmelere sahip olduklarından bulunduğu ortamın aydınlığından en az şekilde etkilenirler. Ayrıca kolay bir şekilde bu foto IC lere dış LED bağlayarak çıktıları görebiliriz.

S7136Sinyal LED’i

Infra red LED

5V

2k VR1k

GND

PIC ucuna

Beyaz >> Lojik 0 Siyah >> Lojik 1

Şekil 5-96 S7136’in iletken bağlantısı

238

Page 252: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

(2) Çizgi takip eden robot 1) Çizgi takip eden robot devre şeması

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

PA0

PA1

PA2

OSC1

OSC2

MCLR

10k

4MHz

+5VGND

CLOCK

DATA

MCLR

+5V

TA7257P

MotorDriver

+5V

IN1

IN2

M1

M2

GND

1

2

3

5

4

67

PIC16F84

TA7257P

MotorDriver

+5V

IN1

IN2

M1

M2

GND

1

2

3

5

4

67

PA3

+5V

Motor

PIC Writer

5VBattery

M

M

Motor0.1uF

0.1uF

monitor LED

IR LED S7136

1k

2k

5V

IR LED S7136

1k

2k

5V

IR LED S7136

1k

2k

5V

line sensor

+5V

line sensor

monitor LED

monitor LED

Şekil 5-97 Çizgi takip eden robot devre şeması

239

Page 253: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

2) Çizgi takip eden robotun programı (a) Çizgi takip eden robotun temel çalışma prensibi a) PIC ucu ( PORT )

PORT RA4 RA3 RA2 RA1 RA0N/A Çalıştırma butonu Çizgi sensörü Bağlantı

N/A Basılı > Düşük ( Low ) Sol Orta Sağ

PORT RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

PIC yazıcı için N/A N/A Sol motor sürücü Sağ motor sürücü Bağlantı data clock N/A N/A IN2 IN1 IN2 IN1

b) TA7257P ( Toshiba ) Motor sürücüsünün dataları Giriş 1 Giriş 2 Çıkış 1 Çıkış 2 MODE

1 1 H H Fren 0 1 L H İleri 1 0 H L Geri 0 0 L L Boşta

PB2 PB3PB1PB0

PIC

TA7257P Motor bağlantısı

Güç anahtarı

PA2 PA1 PA0

Reset

PA3 butonu

Pil

PIC yazıcı

Şekil 5-98 Çizgi takip eden robot

240

Page 254: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

c) Temel program 1 ( İleri hareket ) PA3 butonuna basınız Çizgi takip eden robot sadece ileri yönde hareket eder.

M M

Şekil 5-99 Temel Program 1 ;************************************************************************** ; Çizgi takip eden robot programı 1 ( ileri yönde hareket ) ;************************************************************************** ; sensör durumu ; ; o o o ; RA2 RA1 RA0 ; ; beyaz>> '0' sinyali gönderildiğinde sinyal LED’i yanar. ; siyah>> '1' sinyali gönderildiğinde sinyal LED’i yanmaz. ; portb xxxx0101 ileri ; portb xxxx1010 geri ; portb xxxx1111 fren ; portb xxxx0000 boşta ; portb xxxx0100 sola dönüş ; portb xxxx0001 sağa dönüş ;

LIST P=16F84,R=DEC INCLUDE "P16F84.INC" ;include dosyası COUNT EQU H'10'

ORG H'00' ;başlangıç 00h GOTO INISET ;

241

Page 255: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

INISET ;Etiket BSF STATUS,RP0 ;Bank1’e geç MOVLW B'11111' ;11111111B >> W reg 0;OUT 1;IN MOVWF TRISA ;W >> trisa porta >> giriş MOVLW B'00000000' ;00000000B >> W reg 0;Çıkış 1;Giriş MOVWF TRISB ;W >> trisb portb >> Çıkış BCF STATUS,RP0 ;Bank0’a geç MOVLW B'00001111' ;00001111 >> W reg MOVWF PORTB ;W reg >> portb fren

;************************************************************************* ; ana bölüm ;************************************************************************* START ;Etiket

BTFSC PORTA,3 ;switch(RA3) on ? ( Basılı mı ? ) GOTO START ;switch off >> startta geri dön

MAIN ; Etiket MOVLW B'00001010' ;00000101 >> W reg MOVWF PORTB ;W reg >> portb ileri

GOTO MAIN END

242

Page 256: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

d) Temel program 2 ( Uygulama 5-32 ) Aşağıdaki şekilde görüldüğü gibi hareketi sağlayan program yapalım PA3 butonuna basılır. İlk once çizgi takip eden robot 2 saniye ileri gidecek

2s

M M

Daha sonra çizgi takip eden robot 2 saniye ters yöne hareket eder.

M M

2s

Son olarakta çizgi takip eden robot 2 saniye sağa doğru döner.

M M

Şekil 5-100 Temel program 2

243

Page 257: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

3) Çizgi takip eden program 1 ( Uygulama 5-33 ) Aşağıdaki şekil 5-101’de görüldüğü gibi ( PA1 ) sensörüyle tek bir siyah çizgide hareket eden bir program yapalım.

Şekil 5-101 Çizgi takip eden robot program1

M M

M M

M M

Sensör durumu >> White Sol motor >> ON Sağ motor >> OFF

Sensör durumu >> Siyah Sol motor >> OFF Sağ motor >> ON

Sensör durumu >> Beyaz Sol motor >> ON Sağ motor >> OFF

244

Page 258: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

4) Program 1 ‘in akış diyagramı

PA3 buton ON

Evet

Hayır

Sol motor ON

Sensör değerini oku

Sol motor ON Sağ motor OFF

Sol motor OFF Sağ motor ON

PA1 : Beyaz

Evet

Hayır

Tanımlama

Başla

Şekil 5-102 Program 1 ‘in akış diyagramı

245

Page 259: Pic 16f84 Mikrodenetleyici

Çizgi takip eden Robot

Uygulama 5-34 Çizgi takip eden robot iki sensör yardımıyla ( PA0 ve PA2 ) siyah bir çizgi üzerinde aşağıdaki şekildeki gibi hareket etmelidir. ( Akış diyagramını yapınız. )

Sensör durumu >> 1 0 0 Sola dönmeli

Sensör durumu >> 0 1 1 Sağa dönmeli

Sensör durumu >> 0 0 1 Sağa dönmeli

Sensör durumu >> 1 1 0 Sola dönmeli

M M

M M

M M

M M

M M

Sensör durumu >> 1 1 1 İleri hareket etmeli

MM

Sensör durumu >> 0 0 0 Siyah çizgiyi bulana kadar geri gitmeli

Şekil 5-103 Çizgi takip eden program 1

246

Page 260: Pic 16f84 Mikrodenetleyici

Müzik programı 11 MÜZİK PROGRAMI (1) Müzik programı

Bizim eğitim setinde buzzer bulunmaktadır. Bu buzzer PIC’in PA3 ucuna bağlıdır. Tabiki bu ucu aynı zamanda da LED çıkışı içinde kullandığımızdan dolayı birde kalıcı tip anahtar mevcuttur. Biz müzik programını kullanmak istediğimizde bu anahtarının konumunu değiştirmemiz gerekir. Böylece PA3 ucuna Buzzer bağlanmış olur. .

Buzzer

Anahtar seçimi

5V

5V

10k

22k

1k 2SC1815

22 -- 100

PA3 PORT

Şekil 5-104 Eğitim setindeki Buzer devresi

Aşağıdaki şekilde görüldüğü gibi bir kare dalga gönderdiğimizde buzzerde dalgalı bir ses duyulur. Biz PIC programları yardımıyla bu tür ses dalgası üretebiliriz. Audio frekansı (20 – 20000Hz) arasındadır.

Buzzer

Şekil 5-105 Müzik ( Ses ) dalgası

247

Page 261: Pic 16f84 Mikrodenetleyici

Müzik programı (2) Müzik programı 1Khz’ lik kare dalgada buzerde müzik üreten program yapalım. 1) Program çerçevesi

Başla

PA0 anahtarını açın

Buzzer ON

PA0 anahtarını kapayın

Buzzer OFF

PA3OFF PA3ON PA3OFF PA3ON

1ms

0.5ms 0.5ms

Şekil 5-106 1kHz de Buzzer

248

Page 262: Pic 16f84 Mikrodenetleyici

Müzik programı 2) Program listesi ;************************************************ ; 1Khz Buzer programı ;************************************************ LIST P=16F84,R=DEC INCLUDE "P16F84.INC" COUNT1 EQU H'10' COUNT2 EQU H'11' INI BSF STATUS,RP0 ;Bank1’e geç MOVLW B'10111' ;PORTA3 > çıkış MOVWF TRISA ; MOVLW B'00000000' ;PORTB > tamamı çıkış MOVWF TRISB BCF STATUS,RP0 ;Bank0’a geç MAIN BTFSC PORTA,0 ;PORTA butonu basılı mı? GOTO MAIN ;PORTA basılı değil >> bekle LOOP BSF PORTA,3 ;PORTA bit3 on MOVLW D’166’ ;3 x 166 = 498uS=0.5ms MOVWF COUNT2 ; LOOP1 DECFSZ COUNT2,F ; GOTO LOOP1 BCF PORTA,3 ;PORTA bit3 off MOVLW D’166’ ;3 x 166 = 498uS=0.5ms MOVWF COUNT2 ; LOOP2 DECFSZ COUNT2,F ; GOTO LOOP2 GOTO MAIN END

249

Page 263: Pic 16f84 Mikrodenetleyici

Müzik programı Uygulama 5-35 PA0 butonuna bastığımızda bir saniye buzzerde ses çıkaran program yapınız. (3) Müzik program Müzik skalası ile frekansı arasındaki ilişki tablosu aşağıda görülmektedir. Biz bu frekansları kullanarak müzik yapabiliriz. C# D# F# G# A#

C

D

E

F

G

A

B

C

C C# D D# E F F# 1046.5Hz 1108.7Hz 1174.7Hz 1244.5Hz 1318.5Hz 1396.9Hz 1480.0Hz

G G# A A# B C 1568.0Hz 1661.2Hz 1760.0Hz 1864.7Hz 1975.5Hz 2093.0Hz

Şekil 5-107 Müzik skalası ile frekansı arasındaki ilişki tablosu

Uygulama 5-36 Lütfen sevdiğin bir müziği PIC de programlayınız.

250

Page 264: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

PIC KOMUTLARININ AYRINTILI AÇIKLAMALARI

1 ADDLW

19 IORLW

2 ADDWF

20 IORWF

3 ANDLW

21 MOVF

4 ANDWF

22 MOVLW

5 BCF

23 MOVWF

6 BSF

24 NOP

7 BTFSC 25 RETFIE

8 BTFSS 26 RETLW k

9 CALL 27 RETURN

10 CLRF

28 RLF

11 CLRW

29 RRF

12 CLRWDT

30 SLEEP

13 COMF

31 SUBLW

14 DECF

32 SUBWF

15 DECFSZ 33 SWAPF

16 GOTO 34 XORLW

17 INCF

35 XORWF

18 INCFSZ

251

Page 265: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

25 RETFIE ( Return from interrupt ) Komut RETFIE İşleçler Yok İşlem

1 Status Etkisi Yok Açıklama Kesme alt programından ana programa dönemek için kullanılır.

Saat çevrimi ( Cycle ) için POPed ve TOS ( Top of Stack ) ları PC ye yüklenir. (GIE)(INTCON<7>). (Global Interrupt Enable bit) 1 ( set ) yapılır. İki zamanlı bir komuttur.

Kelimeler 1 Saat çevrimi ( Cycle ) 2 Örnek ORG 4 BSF PORTB,2 RETFIE Kodlama

Q Çevrimi ( Q Cycle Activity ) Q1

Kod çöz Birincide

İkincide

0 0 0 0

0 0

Q2

0 0 0 0

276

1 0 0 1

Q3

Program Sayıcı

Q4

İşlem yok İşlem yok İşlem yok İşlem yok

İşlem yok

Stack Memory(TOS)

GIE bit

GIE bitini

set et

Stacktan

POP et

Page 266: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

26 RETLW ( Return with Literal in W ) Komut RETLW k İşleçler 0 <= k <= 255 İşlem

Stack Memory(TOS)

W register

Program Sayıcı k Status Etkisi Yok Açıklama Alt programda W registerine sekiz bitlik ‘k’ literalini yükleme

işini yapar. Program sayıcı döneceği adresi TOS dan PC ye yükleyerek gerçekleştirir. İki zamanlı bir komuttur.

Kelimeler 1 Saat çevrimi ( Cycle ) 2 Örnek W << Z flag BTFSC STATUS,Z RETLW 0 RETLW 1 7 Segmen display bilgi tablosu SEGDAT ADDWF PCL,F ;PCL(program sayıcı) + W >>PCL

RETLW B'00111111' ;segmen data 0 >> W (PCL+0) RETLW B'00000110' ;segmen data 1 >> W (PCL+1) RETLW B'01011011' ;segmen data 2 >> W (PCL+2) RETLW B'01001111' ;segmen data 3 >> W (PCL+3) RETLW B'01100110' ;segmen data 4 >> W (PCL+4) RETLW B'01101101' ;segmen data 5 >> W (PCL+5)

Kodlama

k k k kk k k k1 1 0 1 x x Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Stacktaki

POP u W

registere yaz

GIE bitini set et

Kod çöz

İşlem yok

literal k sabiti

oku

İşlem yok

İşlem yok

İşlem yok

Birincide İkincide

277

Page 267: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

27 RETURN ( Return from Subroutine ) Komut RETURN İşleçler Yok İşlem

Status Etkisi Yok Açıklama Alt programdan dönmek için kullanılır. Program sayıcıya POPed

ve TOS yüklenir. Böylece program sayıcıdaki adrese geri dönülür. İki zamanlı bir komuttur.

Kelimeler 1 Saat çevrimi ( Cycle ) 2 Örnek Altprogramdan geri Saat çevrimi ( Cycle ) CALL SUB1 SUB1 DECF f,F RETURN

Kodlama

Q Çevrimi ( Q Cycle Activity ) Q1

Kod çöz

Birincide İkincide

0 0 0 0

0 0

0 0 0 0

Q2 Q3 Q4

Stacktan

POP et. İşlem yok

İşlem yok İşlem yok

278

İşlem yok

İşlem yok

İşlem yok

Stack Memory(TOS)

1 0 0 0

Program Counter

Page 268: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

28 RLF ( Rotate Left f through Carry ) Komut RLF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem STATUS Status Etkisi Taşıma bayrağı ( C flag ) Açıklama f registerinin içeriğini bir bit SOLA doğru kaydırır. Eğer d=0 ise

sonuç w registerine d=1 ise f registerinin içine yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek MEMORY multiplied by four. BCF STATUS,C RLF MEMORY,F BCF STATUS,C RLF MEMORY,F MEMORY multiplied by two and transfer to W register. BCF STATUS,C RLF MEMORY,W Kodlama Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

1 1 0 10 0 d f f f f f f f

W register

Memory f d=1

d=0

b7 b6 b5 b4 b3 b2 b1 b0D C

Kod çöz Gideceği

yere yaz

İşlem yapF registeri

oku

Z

279

Page 269: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

29 RRF( Rotate Right f through Carry) Komut RRF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem STATUS Status Etkisi Taşıma bayrağı ( C flag ) Açıklama f registerinin içeriğini bir bit SAĞA doğru kaydırır. Eğer d=0 ise

sonuç w registerine d=1 ise f registerinin içine yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek MEMORY devided by four. BCF STATUS,C RRF MEMORY,F BCF STATUS,C RRF MEMORY,F MEMORY divided by two and transfer to W register. BCF STATUS,C RRF MEMORY,W Kodlama Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

1 1 0 1 0 0 d f f f f f f f

W register

Memory f d=1

d=0

b7 b6 b5 b4 b3 b2 b1D C b0Z

Kod çöz İşlem yap

280

Gideceği

yere yaz

F registeri

oku

Page 270: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

30 SLEEP (Sleep) Komut SLEEP İşleçler Yok İşlem 00h >> WDT 0 >> WDT prescaler 1 >> TO 0 >> PD Status Etkisi TO,PD Açıklama Statustaki güç kesim (power-down PD ) bitini temizler ve sure

aşım (Time-out TO ) bitini bir ( set ) yapar. Watchdog Timer ( WDT ) ve önbölücü ( prescaler ) da temizlenir. İşlemciyi uyku moduna geçirir ve daha az güç harcamasını sağlar.

Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek WKesme ile uykudan uyandırma ve bir alt satırdan çalışmasına

devam ettirme. SLEEP

CALL JOB Kodlama

0 0 1 10 1 1 00 0 0 0 0 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Sleep’e git Kod çöz İşlem yok

2

İşlem yok

81

Page 271: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

31 SUBLW ( Subtract W from Literal ) Komut SUBLW k İşleçler 0 <= k <= 255 İşlem Status Etkisi Açıklama

Kelimeler Saat çevrimi ( Cycle ) Örnek W <= k SUBLW BTFSC GOTO W > k

r r

SUBLW BTFSS GOTO k > W

k = Wk < W

Kodlama Q Çevrimi ( Q Cycle Ac

k

C,DC,Z flag

k literalinden W registeri çıkartılır ( 2 ye ile ) ve sonuç W registerine yüklenir.

1 1

f <= k k MOVF f,W STATUS,C SUBLW N

NEXT ;W <= k BTFSC STATUS GOTO NEXT f > k k MOVF f,W STATUS,C SUBLW k

NEXT ;W > k BTFSS STATUS GOTO NEXT register Z=0,CY=1 register Z=1,CY=1 register Z=0,CY=0

k k k kk k k k1 1 1 1 0 x

tivity ) Q1 Q2 Q3

Kod çöz literal k sabiti

oku W rİşlem yap

282

W registe

W registe

tamamlama yöntemi

; N – f >> W ,C ; f <= k

; N – f >> W ,C

; f > k

Q4

egisterine

yaz

Page 272: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

32 SUBWF ( Subtract W from f ) Komut SUBWF f,d İşleçler 0 <= f <= 127 d 0,1 ∋ İşlem Status Etkisi C,DC,Z flag Açıklama f registerinden W registeri ( ikiye tamamlama yöntemi ile )

çıkartılır. Eğer d=0 ise sonuç W registerine d=1 ise f registerine yüklenir.

Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek (W) << f - (W) f << f +(W) SUBWF f,W SUBWF f,F f > W register Z=0,CY=1 f = W register Z=1,CY=1 f < W register Z=0,CY=0 Kodlama Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

0 0 1 00 0 d f f f f f f f

Memory f W register W register

Memory f d=1

d=0

Kod çöz

İşlem yap

283

Gideceği

yere yaz

F registeri

oku

Page 273: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

33 SWAPF ( Swap Nibbles in f ) Komut SWAPF f,d İşleçler 0 <= f <= 127 d ∋ 0,1 İşlem Memory f

d=0 W register Memory f

Status Etkisi Açıklama

Kelimeler Saat çevrimi ( Cycle ) Örnek Kodlama

0 0 Q Çevrimi ( Q Cycle Activ Q1

Kod çöz

0

Yo

f rise

1 1 HiSWAN

SeMOMOSWMOANAN

ity )

0

k

egist son

gh 4APFDLW

paraVWVWAPFVLWDWDW

1 1

F r

0

eriniuç W

bit t

te of F F

F F

1 0

Q2

egist

oku

0

n alt regi

ake oDAT B’0

highMEMMEMMEMB’00MEMMEM

d f

eri

0

0

0

0

dörsteri

ut A,W0001

4bit1 2 1,F

00111,F2,f

f f

284

0

t bitne d

111’

and

11’

f

Q3

İşlem

0

1

1 1

1

1

1

d=1 Memory f

i ile üst dört biti yer değiştirir. Eğer d=0 =1 ise f registerine yüklenir.

low 4bit of W register.

; high 4bit ;low 4bit

f f f

Q4

Gideceği

yere yaz

yap

Page 274: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

34 XORLW ( Exclusive OR literal with W ) Komut IORLW k İşleçler 0 <= k <= 255 İşlem 11000011 00110011 11110Status Etkisi Açıklama

Kelimeler Saat çevrimi ( Cycle ) Örnek W XO W

r

r

XO

Kodlama Q Çevrimi ( Q Cycle A

k

W registe

000 Z flag W registerinin içeriği ile 8 bSonuç W registerine yüklenir. 1 1

registerinin yüksek 4 bitini tersler. RLW B’11110000’

registerinin tam tersini alır. RLW H’FF’

k k k kk k k k1 1 1 0 1 0

ctivity ) Q1 Q2

Kod çöz literal k sabiti

oku İşlem y

285

W registe

itlik k literaline XOR uygulanır.

Q3 Q4

W registerine

yaz

ap

Page 275: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

35 XORWF ( Exclusive OR W with f ) Komut XORWF f,d İşleçler 0 <= f <= 127 d ∋ 0,1 İşlem 11000011 00110011 11110000 00110011 Status Etkisi Z flag Açıklama W registeri ile f registerine XOR mantıksal ifadesi uygulanır.

Eğer d=0 ise sonuç W registerine d=1 ise f registerine yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek PORTB(bit2) yi tersler MOVLW B’00000100’ XORWF PORTB,F MEMORY(düşük 4bit) tersler ve sonucu MEMORY dosyasına yazar. MOVLW B’00001111’ XORWF MEMORY,F MEMORY dosyasının AA olduğunu kontrol eder. AA ise Zero = 1 dir.

W register

k

d=0

d=1

W register

Memory f

MOVLW H’AA’ XORWF MEMORY,W BTFSS STATUS,Z GOTO ( AA değilse ) GOTO ( AA ise ) Kodlama

f f f f d f f f 0 0 0 1 1 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz İşlem yap

286

Gideceği

yere yaz

F registeri

oku

Page 276: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

11 CLRW ( Clear W ) Komut CLRW İşleçler Yok İşlem W register Zero flag = 1 ( Sıfır bayrağı ) Status Etkisi Z flag Açıklama W registerinin içeriğini temizler ve Sıfır ( Zero ) bayrağını 1

yapar. ( set eder ) Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek CLRW W register is cleared. Kodlama

x x x x1 x x x0 0 0 0 0 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz İşlem yok

262

İşlemi

yap

W registerine

yaz

00000000

Page 277: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

12 CLRWDT ( Clear Watchdog Timer ) Komut CLRWDT İşleçler Yok İşlem 00h >> WDT 0 >> WDT prescaler ( önbölücü ) 1 >> TO 1 >> PD

Zero flag = 1 Status Etkisi Z flag ( Z bayrağı ) Açıklama CLRWDT komutu Watchdog Timer içeriğini temizler ( resetler )

Status da bulunan sıfır bayrağıda 1 ( set ) olur. Aynı zamanda ( TimeOut ) TO ve ( Power Down ) PD bitleride 1 ( set ) olurlar.

Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek CLRWDT Kodlama

0 1 0 00 1 1 00 0 0 0 0 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz İşlem yok

263

İşlemi

yap

WDT counter’a

yaz

Page 278: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

13 COMF ( Complement f ) Komut COMF f,d İşleçler 0 <= f <= 127 d ∋ 0,1 İşlem 00111101 11000010 11000010

W register d=0

d=1 Memory f

Memory f

Status Etkisi Z flag Açıklama ‘f ’ registerinin içeriği terslenir. Eğer ‘d’ 0 ise sonuç W registerine

‘d’ 1 ise ‘f ’. registerine yazılır. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek COMF MEM,0 ;MEM datasını tersler ve sonucu W

registerine yazar COMF MEM,1 ; MEM datasını tersler ve sonucu MEM

registerine yazar COMF PORTB,0 ;PORTB değerini tersler ve W registere yazar H‘FF’ datasının karşılaştırılması. COMF MEM,0 BTFSC STATUS,Z GOTO NEXT Kodlama

f f f f d f f f 0 0 1 0 0 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz Gideceği

yere yaz

İşlem yapF registeri

oku

264

Page 279: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

14 DECF ( Decrement f ) Komut DECF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem 1

d=0

d=1

f W register

Memory f Status Etkisi Z flag Açıklama ‘f ’ registerinin değeri bir azaltılır Eğer ‘d’ 0 ise sonuç W registere

1 ise f registere yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek DECF f,0 ;f registerinin değerini bir azaltır sonuç W

registerine yüklenir. DECF f,1 ;f registerinin değerini bir azaltır sonuç f registerine

yüklenir. DECF DATA,F

BTFSC STATUS,Z GOTO NEXT Burada DATA bilgisi bir eksilir eğer DATA 0 olursa sıfır bayrağı ( Z flag ) 1 olur ve program GOTO NEXT ten devam eder. Kodlama

f f f f d f f f 0 0 0 0 1 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz

İşlem yap

265

Gideceği

yere yaz

Memory

F registeri

oku

Page 280: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

15 DECFSZ ( Decrement f, Skip if 0 ) Komut DECFSZ f,d İşleçler 0 <= f <= 127 d ∋ 0,1 İşlem 1 = 0

d=0

d=1

Memory f W register PC + 2

Status Etkisi Yok

Memory f

Açıklama f registerinin değeri bir azaltılır. Eğer d=0 ise sonuç W registerine yüklenir, d=1 ise f registerine yüklenir.

İşlem sonucunda sonuç 1 ise bir sonraki satırdan program devam eder, 0 ise NOP ( işlem yok ) uygulayarak 1 satır atlar ve ikinci satırdan program devam eder.

Kelimeler 1 Saat çevrimi ( Cycle ) 1(2) Örnek MOVLW 8 MOVWF CNT LOOP INCF f,1 DECFSZ CNT,1 GOTO LOOP Kodlama

f f f f d f f f 0 0 1 0 1 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz Gideceği

yere yaz

İşlem yapF registeri

oku Birincide

Eğer ikinciye atlarsa

İşlem yok

İşlem yok

2

İşlem yok

66

İşlem yok

Page 281: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

16 GOTO ( GOTO Unconditional Branch ) Komut GOTO k İşleçler 0 <= k <= 2047 İşlem

Bölüm Adresi Program Sayıcı Status Etkisi Yok Açıklama GOTO koşulsuz bir yönlendirme komutudur. Onbir bitlik bir

adres hemen PC bitine <10:0>.yüklenir. PC nin yüksek bitleri de PCLATH<4:3> ‘den yüklenir ve bu adrese program yönlenmiş olur. GOTO iki çevrimli ( clock ) bir komuttur.

Kelimeler 1 Saat çevrimi ( Cycle ) 1(2) Örnek GOTO H’3AA’ Bu komut 3Aah.bölüm adresine git demektir.

GOTO LOOP Bu komut LOOP etiketinin adresine git demektir. Bu adres PC de oluşur.

;1ms gecikme alt programı TIMER MOVLW 200 ; 1clock

MOVWF COUNT1 ; 1clock DLY2 GOTO $+1 ; 2clock

DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock

Kodlama

kkkk k k k k1 0 1 k k k Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4 Birincide

İkinci çevrimde C F( Clea )

literal k sabiti oku İşlemi yap

P P

Kod çöz

267

F registerine

yaz

P P

LRNO r fNO NO NO
Page 282: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

17 INCF ( Increment f ) Komut INCF f,d İşleçler 0 <= f <= 127 d ∋ 0,1 İşlem 1

d=0

d=1 Status Etkisi Z flag ( Sıfır bayrağı ) Açıklama ‘f ’ registerinin sahip olduğu değeri bir artırır. Eğer d=0 ise sonuç

W registerine d=1 ise f registerine yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek NCF f,0 ; f registerinin değerini 1 artırarak sonucu W

registerine yükler. NCF f,1 ; f registerinin değerini 1 artırarak sonucu f

registerine yükler.

W register

Memory f

aşıma bayrağı ile kullanılması BTFSC STATUS,C NCF f,1

8 bitlik D/A ( dijital / Analog ) çeviriciden çıkış dalgasını görmek için

LOOP INCF PORTB,F GOTO LOOP Kodlama

f f f f d f f f 0 0 1 0 1 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz İşlem yap

268

Gideceği

yere yaz

Memory f

F registeri

oku

Page 283: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

18 INCFSZ ( Increment f, Skip if 0 ) Komut INCFSZ f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem 1 = 0

d=0

d=1

f W register 2

Memory f Status Etkisi Yok Açıklama ‘f ’ registerinin değerini bir artırır Eğer d=0 ise sonucu W

registerine d=1 ise f registerine yükler. İşlem sonucunda sonuç 1 ise bir sonraki satırdan program devam

eder, 0 ise NOP ( işlem yok ) uygulayarak 1 satır atlar ve ikinci satırdan program devam eder.

Kelimeler 1 Saat çevrimi ( Cycle ) 1(2) Örnek INCFSZ f,0 INCFSZ f,1 Kodlama

f f f f d f f f 0 0 1 1 1 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz

İşlem yap Birincide

Eğer ikinciye atlarsa

İşlem yok

İşlem yok

2

İşlem yok

69

İşlem yok

Gideceği

yere yaz

Memory

F registeri

oku

PC +

Page 284: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

19 IORLW ( Inclusive OR literal with W ) Komut IORLW k İşleçler 0 <= k <= 255 İşlem Status Etkisi Açıklama

Kelimeler Saat çevrimi ( CycÖrnek

r

Kodlama Q Çevrimi ( Q Cyc

W registe

Z flag ( Sıfır bayrağı ) W registerinin içeriği 8 bitlikregisterine yüklenir. İşlem so( Zero flag ) 1 olur.

1 le ) 1

IORLW B’11110000’ W regiW registeri FFh. Ile OR lanır.

IORLW H’FF’

bit test ( W registerinin 0 testi

r

IORLW 0

k k k kk k k k1 1 1 0 0 0

le Activity ) Q1 Q2

Kod çöz

literal k sabiti

oku İşlem y

270

W registe

k

k literali ile OR lanır. Sonuç W nucu 0 ise statusun sıfır bayrağı

steri 4 biti 1 olanla OR lanır.

)

Q3 Q4

W registerine

yaz

ap

Page 285: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

20 IORWF ( Inclusive OR W with f ) Komut IORWF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem Status Etkisi Z flag Açıklama W registeri f registeri ile OR mantıksal işlemin yapılır. Sonuç

eğer d=0 ise W registerine d=1 ise f registerine yüklenir. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek IORWF f,0 (W) << f OR (W) IORWF f,1 f<< f OR (W) MOVLW B’00001111’ IORWF PORTB,F MOVLW B’00000111’ IORWF f,1 Kodlama Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

0 1 0 00 0 d f f f f f f f

W register

Memory f d=1

d=0 r

Kod çöz

İşlem yap

271

Gideceği

yere yaz

W registe

F registeri

oku

k

Page 286: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

21 MOVLW ( Move Literal to W ) Komut MOVLW k İşleçler 0 <= k <= 255 İşlem

r Status Etkisi Yok Açıklama Sekiz bit literal ‘k’ bilgisi Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek (W) << 30h ADDLW H’30’ FSR << AFh MOVLW H’AF’ MOVWF f PORTB << B’00001111’ MOVLW B’00001111’ MOVWF PORTB Kodlama

kk k k k1 1 0 0 x x Q Çevrimi ( Q Cycle Activity ) Q1 Q2

Kod çöz

literal k sabiti

oku

272

W registe

k

ni W registerine yükler.

k k k

Q3 Q4

W registerine

yaz

İşlem yap

Page 287: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

22 MOVF (Move f) Komut MOVF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem

d=0

d=1

W register f

Memory f Status Etkisi Z flag Açıklama f registerinin içeriği d=0 ise W registerine d=1 ise f registerine

( kendisine ) yüklenir. d=1 olduğu durumlarda f registerinin içeriğini test etmemizde ( 0 olup olmadığına ) fayda vardır. Çünkü bu durumda statustaki sıfır bayrağı etkilenir.

Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek Memory Test MOVF f,F F registerinin sıfır bayrağına etkisini test etmekte fayda vardır.

f1 registerindeki bilgilerin f2 registerine iletilmesi. MOVF f1,W

MOVWF f2

F registerindeki bilgilerin PORT B den çıkış olarak alınması MOVF f,W

MOVWF PORTB Kodlama

f f f f d f f f 0 0 1 0 0 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz

İşlem yap

273

Gideceği

yere yaz

Memory

F registeri

oku

Page 288: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

23 MOVWF (Move W to f) Komut MOVWF f İşleçler 0 <= f <= 127 İşlem

r

Status Etkisi Açıklama Kelimeler Saat çevrimi ( Cycle Örnek Kodlama Q Çevrimi ( Q Cycle

W registe

Yok

W registerindeki bilgil

1

) 1

(0Ah) değeri f registeriMOVLW H’0A’ MOVWF f

1 f f f 0 0 0 0 0 0

Activity ) Q1 Q2

Kod çöz f registerini

oku

274

Memory f

er f registerine taşınır.

ne iletilir.

f f f f

Q3 Q4

f registerine

yaz İşlemi

yap

Page 289: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

24 NOP ( İşlem yok ) Komut NOP İşleçler Yok İşlem İşlem yok Status Etkisi Yok Açıklama İşlem yok Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek Zamanlayıcı alt programı

TIMER MOVLW 200 ; 1clock MOVWF COUNT1 ; 1clock

DLY2 GOTO $+1 ; 2clock NOP ;1clock NOP ;1clock

DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock

Kodlama

0 0 0 00 x x o0 0 0 0 0 0 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

İşlem yok

İşlem yok

Kod Çöz İşlem yok

275

Page 290: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

5 BCF( Bit Clear f) Komut BCF f,b İşleçler 0 <= f <= 127 0 <= b <= 7 İşlem 0 AND FSR

Status Etkisi Açıklama Kelimeler Saat çevrimi ( Cycle ) Örnek Kodlama Q Çevrimi ( Q Cycle Ac Q1

Kod

b7

Y

‘f

1

1

BBBB

0 1

tivity

çöz

b6

ok

’ regis

CF PCF SCF SCF S

0 0 b

)

f re

b5

terinin

ORTBTATUTATUTATU

b

Q2

gisteri

oku

b4

‘b’ nin

,1 S,0 S,RP0S,2

b f f f

ni

25

b3

ci biti

POC

BZe

f f

Q3

İşle

yap

6

b2

ni tem

RTBarry baank0’ aro bay

f f

mi

b1

izle. (

in 1. byrağı geçişrağın

Q

f regi

y

b0

0 Sıfır yap )

itini sıfırlar. nı sıfır yapar yapar ı sıfırlar

4

sterine

az

Page 291: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

6 BSF ( Bit Set f ) Komut BSF f,b İşleçler 0 <= f <= 127 0 <= b <= 7 İşlem 1 OR FSR 0 123456 7

Status Etkisi Açıklama Kelimeler Saat çevrimi ( Cycle ) Örnek Kodlama Q Çevrimi ( Q Cycle Ac Q

Dec

b

Y

‘f

1

1

BBBB

PBCB

0 1

tivity1

ode

b

ok

’ regis

SF PSF SSF SSF S

ORTBSF PALL TCF P

0 1

)

r

b

terinin

ORTBTATUTATUTATU

’nin 0ORTBIMERORTB

b b

Q2

f

b

içerin

,3 S,0 S,RP0S,2

.bitinin,0 ,0

b f f f

25

b

de bu

B

kare

f f

Q3

7

b

lunan

PORTCarry

ank1Zero b

dalga

f f

b

sayını

B’nin bayra’ e geçayrağı

oluşm

Q

re

b

n ‘b’ ninci bitini 1 yapar.

3.bitini 1 yapar ğını 1 yapar iş yapar nı 1 yapar

ası ( yanıp sönmesi )

4

Read

egister

Process

data

Write

gister f

Page 292: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

7 BTFSC ( Bit Test f, Skip if Clear ) Komut BTFSC f,b İşleçler 0 <= f <= 127 0 <= b <= 7 İşlem Skip if (f<b>) = 0 Status Etkisi Yok Açıklama ‘f ’ registerinin ‘b’ ninci biti 1 ise program akışı bir alt satırdan

devam eder, eğer 0 ise bir alt satırı atlayarak sonraki komuttan devam eder.

Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek BTFSC Memory,7 Eğer Memory’nin 7. biti 0 ise işlem bir

satır atlayarak sonraki satırdan devam eder.

b7 b6 b5 b4 b3 b2 b1 b0

BC ( Branch Carry ) BTFSC STATUS,0 Carry flag= 0 >> 1 satır atlayarak

devam eder GOTO LABEL Carry flag=1 >> GOTO LABEL BZ ( Branch Zero ) BTFSC STATUS,2 Zero flag = 0 >> 1 satır atlayarak

devam eder GOTO LABEL Zero flag =1 >> GOTO LABEL Kodlama

f f f f b f f f 0 1 1 0 b b Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz Birincide

İşlem yok İkinci çevrimde ( Atlama varsa )

f registeri

oku

258

İşlemi

yap

İşlem yok İşlem yok İşlem yok

f registerine

yaz

PC + 2

PC + 1

1

0

Page 293: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

8 BTFSS ( Bit Test f, Skip if Set ) Komut BTFSS f,b İşleçler 0 <= f <= 127 0 <= b <= 7 İşlem Skip if (f<b>) = 1 Status Etkisi Yok Açıklama ‘f ’ registerinin ‘b’ ninci biti 0 ise program akışı bir alt satırdan

devam eder, eğer 1 ise bir alt satırı atlayarak sonraki komuttan devam eder.

NOP( No operation “ işlem yok demektir ve bu sürede 2 saykıllık “ 2T “ zaman harcanır )

Kelimeler 1 Saat çevrimi ( Cycle ) 1(2) Örnek BTFSS Memory,7 Eğer Memory’nin 7. biti 1 ise işlem bir

satır atlayarak sonraki satırdan devam eder.

b7 b6 b5 b4 b3 b2 b1

1

0

b0

PC + 1

PC + 2

BNC ( Branch None Carry ) BTFSS STATUS,0 Carry flag= 1 >> 1 satır atlayarak

devam eder GOTO LABEL Carry flag=0 >> GOTO LABEL BNZ (Branch Yok Zero) BTFSS STATUS,2 Zero flag = 1 >> 1 satır atlayarak

devam eder GOTO LABEL Zero flag =0 >> GOTO LABEL Kodlama

f f f f b f f f 0 1 1 1 b b Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz f registerine

yaz İşlemi

yap

f registerini

oku Birincide

İşlem yok İkinci çevrimde ( Atlama varsa )

İşlem yok

259

İşlem yok

İşlem yok
Page 294: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

9 CALL ( Call Subroutine ) Komut CALL k İşleçler 0 <= k <= 2047 İşlem

Program Counter + 1 Stack Memory

Altprogram adres Program Counter Status Etkisi Yok Açıklama Altprogramı çağırır. Önce program counter’ı bir artırır (PC+1) ve bunu stack memory’e yükler Sonra ait program adresi PC nin<10:0> bitlerine yüklenir. PC’nin üst bitleri PCLATH deki değerlerle yüklenir. CALL işlemi 2 saykıllık bir komuttur.. Kelimeler 1 Saat çevrimi ( Cycle ) 1(2) Örnek CALL H’3AA’ Bu komut programın 3AAh adresinden

itibaren çalışmasını sağlar. CALL SUB1 Bu komut SUB1 den itibaren programın

çalışmasını sağlar. 1ms pulse programı

BSF PORTB,1 ;pulse on CALL TIMER ;yaklaşık 1ms Timer

BCF PORTB,1 ;pulse off ;1ms timer altprogram

TIMER MOVLW 200 ; 1clock MOVWF COUNT1 ; 1clock

DLY2 GOTO $+1 ; 2clock DECFSZ COUNT1,1 ; 1(2)clock GOTO DLY1 ; 2clock RETURN ; 2clock

Kodlama

kkkk k k k k1 0 0 k k k Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4 Birincide

İkinci çevrimde CLRF( Clear f)

literal k sabiti oku

PC yi stack’a yaz

İşlemi yap F registerine

yaz

NOP NOP NOP NOP

Kod çöz

260

Page 295: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

10 CLRF ( Clear f ) Komut CLRF f İşleçler 0 <= f <= 127

00000000İşlem Memory f Zero flag = 1 ( Sıfır bayrağı ) Status Etkisi Z flag Açıklama ‘f ’ registerinin içeriğini temizler Z bayrağını 1 yapar. ( set eder ) Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek CLRF MEMORY MEMORY ‘i temizler( sıfırlar ) Kodlama

f f f f 1 f f f 0 0 0 0 0 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz f registerine

yaz İşlemi

yap

f registerini

oku

261

Page 296: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

1 ADDLW (Add Literal ve W) Komut ADDLW k İşleçler 0 <= k <= 255 İşlem

r r Status Etkisi Açıklama registerine yazar. Kelimeler Saat çevrimi ( Cyc Örnek Kodlama Q Çevrimi ( Q Cyc

W registe

C,DC,Z flag( bayrak )

W registerinin içeriğini k sabit sayısı ile

1

le ) 1

(W) << (W)+30h (W) << (W)+1 ADDLW H’30’ ADDLW 1

(W) << (W)-1 ADDLW H’FF’

MOVLW H’63’ 01100011 ADDLW H’AF’ + 10101111 100010010 (W) << H’12’ C flag = 1

k k k kk k k k1 1 1 1 1 x

le Activity ) Q1 Q2 Q3 Q

Kod çöz W’ye İşlemi

yap

‘k’ literalini

oku

252

W registe

k

toplayıp sonucu W

4

yaz

Page 297: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

2 ADDWF ( Add W ve f ) Komut ADDWF f,d İşleçler 0 <= f <= 127 d 0,1 ∋ İşlem d=0

f W register r

Status Etkisi C,DC,Z flag Açıklama W registerinin

sonucu W regis d = 0 ise d = 1 ise Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek (W) << f + (W) ADDWF f,0 ADDWF f,0 İşlem öncesi İşlem sonrası Kodlama

d0 0 0 1 1 1 Q Çevrimi ( Q Cycle Activity ) Q1 Q2

Kod çöz

W registe

Memory

d=1 Memory f

içeriğini ‘f ’ registeri ile toplar. Eğer ‘d’ 0 olursa terine 1 olursa f registerine yazar. W registerine f registerine

FSR << f +(W) ADDWF f,1

W = 05h , f = F5h W = FAh , f = F5h

f f f f f f f

Q3 Q4

f registerini

oku

25

İşlemi

yap

3

Gideceği

yere yaz

Page 298: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

3 ANDLW ( AND literal with W) Komut ANDLW k İşleçler 0 <= k <= 255 İşlem Status Etkisi Z flag Açıklama W registerin içeriği ile k sabitine AND ( ve ) işlemi uygulanır ve

sonuç W registerine yazılır. Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek ANDLW B’11110000’ low 4 bits clear

W register

k W register

ANDLW 0 = CLRW ANDLW H’FF’ test W register bit test( 0 test of low 3 bits of W register) ANDLW B’00000111’

BTFSC STATUS,Z

GOTO NEXT

bit test( 0 test of low 3 bits of f) MOVF f,W ANDLW B’00000111’

BTFSC STATUS,Z

GOTO NEXT

Kodlama k k k kk k k k1 1 1 0 0 1

Q Çevrimi ( Q Cycle Activity ) Q1 Q2 Q3 Q4

Kod çöz W’ye yaz İşlemi

yap

‘k’ literalini

oku

254

Page 299: Pic 16f84 Mikrodenetleyici

PIC komutlarının açıklanması

4 ANDWF ( AND W with f ) Komut ANDWF f,d İşleçler 0 <= f <= 127 d 0,1 ∋İşlem

W register

f

d=0

d=1

W register

Memory f Status Etkisi Z flag Açıklama W registeri ile ‘f ’ registerine AND işlemi uygulanır ve sonuç ‘d’ 0

ise W registerine, ‘d’ 1 ise ‘f ’ registerine yazılır. d = 0 ise W registerine d = 1 ise f registerine Kelimeler 1 Saat çevrimi ( Cycle ) 1 Örnek ANDWF f,0 (W) << f AND (W) ANDWF f,1 FSR << f AND (W) Clear of PORTB (bit 0 – bit 3 : 4bit) MOVLW B’11110000’ ANDWF PORTB,1 Bit test of F (bit 0 – bit 2 : 3bit) MOVLW B’00000111’ ANDWF f,0 BTFSC STATUS,Z GOTO NEXT Bit test of F MOVLW B’00000100’ ANDWF f,0 BTFSC STATUS,Z GOTO NEXT Kodlama Q Çevrimi ( Q Cycle Activity )

f f f f d f f f 0 0 0 1 0 1

Q1 Q2 Q3 Q4

Kod çöz Gideceği

yere yaz

İşlemi

yap

f registerini

oku

255

Page 300: Pic 16f84 Mikrodenetleyici

Include dosyalar

INCLUDE DOSYALAR

PIC lerin RAM belleklerinde bulunan adresler sabittir ve bunları her progamın

başına yazmak gereksiz olmaktadır. Bu nedenle Microchip firması bunu önlemek için INCLUDE dosyaları yazmıştır. Bunları .INC uzantıları şeklinde sunmuştur. Biz program yazarken en başa INCLUDE “P mik odenetleyicinin kodu . INC yazmak suretiyle tüm RAM bellekte bulunan adresleri tek satırla tanıtabiliriz.

r

Örneğin ; INCLUDE “P16F84.INC” 16F84 Mikrodenetleyici için adreslerin bulunduğu dosya INCLUDE “P16F877.INC” 16F877 Mikrodenetleyici için adreslerin bulunduğu dosya

Aşağida P16F84.INC dosyanın içeriğini verdik. Bu dosya MPLAB dizini içerisinde bulunmaktadır. İstenildiğinde değişikliklerde yapılabilir.

287

Page 301: Pic 16f84 Mikrodenetleyici

Include dosyalar

Ayrıca Status registerinin her bir bitinede adres verildiğinden dolayı hangi biti

kullanacaksak onun isminide yazmak yeterli olmaktadır. Örneğin Bank1 ( Page 1 ) geçmek için ; BSF STATUS,6 yerine BSF STATUS,RP1 kullanabiliriz. Bunun yanında d=0 iken W registerine yükleme, d=1 iken f reigisterine yüklemeyide 0,1 şeklinde kullanabildiğimiz gibi W,f karakterlerinide direk kullanabilmekteyiz. Örneğin COMF PORTB,1 yerine COMF PORTB,F kullanabiliriz. COMF PORTB,0 yerine COMF PORTB,W kullanabiliriz.

LIST

; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.

NOLIST

; This header file defines configurations, registers, and other useful bits of

; information for the PIC16F84 microcontroller. These names are taken to match

; the data sheets as closely as possible.

; Note that the processor must be selected before this file is

; included. The processor may be selected the following ways:

; 1. Command line switch:

; C:\ MPASM MYFILE.ASM /PIC16F84

; 2. LIST directive in the source file

; LIST P=PIC16F84

; 3. Processor Type entry in the MPASM full-screen interface

;==========================================================================

; Revision History

;==========================================================================

;Rev: Date: Reason:

;2.00 07/24/96 Renamed to reflect the name change to PIC16F84.

;1.01 05/17/96 Corrected BADRAM map

288

Page 302: Pic 16f84 Mikrodenetleyici

Include dosyalar

;1.00 10/31/95 Initial Release

;==========================================================================

; Verify Processor

;==========================================================================

IFNDEF __16F84

MESSG "Processor-header file mismatch. Verify selected processor."

ENDIF

;==========================================================================

; Register Definitions

;==========================================================================

W EQU H'0000'

F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'

TMR0 EQU H'0001'

PCL EQU H'0002'

STATUS EQU H'0003'

FSR EQU H'0004'

PORTA EQU H'0005'

PORTB EQU H'0006'

EEDATA EQU H'0008'

EEADR EQU H'0009'

PCLATH EQU H'000A'

INTCON EQU H'000B'

OPTION_REG EQU H'0081'

TRISA EQU H'0085'

TRISB EQU H'0086'

EECON1 EQU H'0088'

EECON2 EQU H'0089'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'

RP1 EQU H'0006'

289

Page 303: Pic 16f84 Mikrodenetleyici

Include dosyalar

RP0 EQU H'0005'

NOT_TO EQU H'0004'

NOT_PD EQU H'0003'

Z EQU H'0002'

DC EQU H'0001'

C EQU H'0000'

;----- INTCON Bits --------------------------------------------------------

GIE EQU H'0007'

EEIE EQU H'0006'

T0IE EQU H'0005'

INTE EQU H'0004'

RBIE EQU H'0003'

T0IF EQU H'0002'

INTF EQU H'0001'

RBIF EQU H'0000'

;----- OPTION Bits --------------------------------------------------------

NOT_RBPU EQU H'0007'

INTEDG EQU H'0006'

T0CS EQU H'0005'

T0SE EQU H'0004'

PSA EQU H'0003'

PS2 EQU H'0002'

PS1 EQU H'0001'

PS0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEIF EQU H'0004'

WRERR EQU H'0003'

WREN EQU H'0002'

WR EQU H'0001'

RD EQU H'0000'

;==========================================================================

290

Page 304: Pic 16f84 Mikrodenetleyici

Include dosyalar

;

; RAM Definition

;

;==========================================================================

__MAXRAM H'CF'

__BADRAM H'07', H'50'-H'7F', H'87'

;==========================================================================

;

; Configuration Bits

;

;==========================================================================

_CP_ON EQU H'000F'

_CP_OFF EQU H'3FFF'

_PWRTE_ON EQU H'3FF7'

_PWRTE_OFF EQU H'3FFF'

_WDT_ON EQU H'3FFF'

_WDT_OFF EQU H'3FFB'

_LP_OSC EQU H'3FFC'

_XT_OSC EQU H'3FFD'

_HS_OSC EQU H'3FFE'

_RC_OSC EQU H'3FFF'

291

Page 305: Pic 16f84 Mikrodenetleyici

292 292

Page 306: Pic 16f84 Mikrodenetleyici

293

Page 307: Pic 16f84 Mikrodenetleyici

294

Page 308: Pic 16f84 Mikrodenetleyici

295 295

Page 309: Pic 16f84 Mikrodenetleyici

296

Page 310: Pic 16f84 Mikrodenetleyici

297

Page 311: Pic 16f84 Mikrodenetleyici

298

Page 312: Pic 16f84 Mikrodenetleyici

299

Page 313: Pic 16f84 Mikrodenetleyici

300

Page 314: Pic 16f84 Mikrodenetleyici

301

Page 315: Pic 16f84 Mikrodenetleyici

302

Page 316: Pic 16f84 Mikrodenetleyici

303

Page 317: Pic 16f84 Mikrodenetleyici

304

Page 318: Pic 16f84 Mikrodenetleyici

305

Page 319: Pic 16f84 Mikrodenetleyici

306

Page 320: Pic 16f84 Mikrodenetleyici

307

Page 321: Pic 16f84 Mikrodenetleyici

308

Page 322: Pic 16f84 Mikrodenetleyici

309

Page 323: Pic 16f84 Mikrodenetleyici

PIC 16F84 Öğrenim Seti

Komutlar Kullanım Şekli Status registerinde etkilenen bayrak

Saat çevrimi ( Cycle ) Açıklamalar Sonucun Yazıldığı

register

MOVF f,W d=0 f >> W Z 1 F registerinin içeriğini W registerine yükler. WMOVF f,F d=1 f >> F Z 1 F registerinin içeriğii aynı dosyaya yükler FMOVWF f W >> f 1 W registerinin içeriğini F registerine yükler. FMOVLW k k >> W 1 k sabitini W registerine yükler. W

SWAPF f,W d=0 1 f registerinin alt dört biti ile üst dört biti yer değiştirir. W

SWAPF f,F d=1 1 f registerinin alt dört biti ile üst dört biti yer değiştirir. F

ADDWF f,W d=0 W+f >> W C / DC / Z 1 W registerinin içeriğini f registeri ile toplar. WADDWF f,F d=1 W+f >> f C / DC / Z 1 W registerinin içeriğini f registeri ile toplar. FADDLW k W+k >> W C / DC / Z 1 W registerinin içeriğini k sabit sayısı ile toplar. WSUBWF f,W d=0 f-W >> W C / DC / Z 1 F registerinden W registeri çıkartılır. WSUBWF f,F d=1 f-W >> f C / DC / Z 1 F registerinden W registeri çıkartılır. FSUBLW k k-W >> W C / DC / Z 1 k sabit sayısından W registeri çıkartılır. WANDWF f,W d=0 W AND f >> W Z 1 W registeri ile F registerine AND işlemi uygulanır. WANDWF f,F d=1 W AND f >> f Z 1 W registeri ile F registerine AND işlemi uygulanır. FANDLW k W AND k >> W Z 1 W registerinin içeriği ile k sabitine AND işlemi uygulanır. WIORWF f,W d=0 W OR f >> W Z 1 W registeri ile F registerine OR işlemi uygulanır. WIORWF f,F d=1 W OR f >> f Z 1 W registeri ile F registerine OR işlemi uygulanır. FIORLW k W OR k >> W Z 1 W registerinin içeriği ile 8 bitlik k sabiti OR işlemi uygulanır. WXORWF f,W d=0 W XOR f >> W Z 1 W registeri ile F registerine XOR işlemi uygulanır. WXORWF f,F d=1 W XOR f >> f Z 1 W registeri ile F registerine XOR işlemi uygulanır. FXORLW k W AND k >> W Z 1 W registerinin içeriği ile 8 bitlik k sabiti XOR işlemi uygulanır. W

RLF f,W d=0C

1 F registerinin içeriğini bir bit sola doğru kaydırır. W

RLF f,F d=1C

1 F registerinin içeriğini bir bit sola doğru kaydırır. F

RRF f,W d=0C

1 F registerinin içeriğini bir bit sağa doğru kaydırır. W

RRF f,F d=1C

1 F registerinin içeriğini bir bit sağa doğru kaydırır. F

BCF f,b f deki b bitini 0 yap 1 F registerinin b'inci bitini sıfır yapar. -BSF f,b f deki b bitini 1 yap 1 F registerinin b'inci bitini bir yapar. -

BTFSC f,b F,b test et eğer 0 ise atla 1(2) F registerinin b'inci biti 1 ise program akışı bir alt satırdan devam eder. Eğer 0 ise bir alt satırı atlayarak sonraki komuttan devam eder -

BTFSS f,b F,b test et eğer 1 ise atla 1(2) F registerinin b'inci biti 0 ise program akışı bir alt satırdan devam eder. Eğer 1 ise bir alt satırı atlayarak sonraki komuttan devam eder. -

CLRF f f temizle Z = 0 1 F registerinin içeriğini temizler. -CLRW W registerini temizle Z = 0 1 W registerinin içeriğini temizler. -CLRWDT WDT temizle TO / PD 1 Watchdog timer içeriğini temizler. -COMF f,W d=0 tersle f DATA >> W Z 1 F registerinin içeriği terslenir. WCOMF f,F d=1 tersle f DATA >> f Z 1 F registerinin içeriği terslenir. FDECF f,W d=0 f-1 >> W Z 1 F registerinin değeri bir azalır. WDECF f,F d=1 f-1 >> f Z 1 F registerinin değeri bir azalır. F

DECFSZ f,W d=0 f-1 >> W Sıfır ise atla 1(2)F registerinin değerini bir azaltır. İşlem sonucunda sonuç 0 ise bir satır atlayarak ikinci satırdan, diğer durumlarda satır atlamadan program devam eder.

W

DECFSZ f,F d=1 f-1 >> f Bir ise atla 1(2)F registerinin değerini bir azaltır. İşlem sonucunda sonuç 0 ise bir satır atlayarak ikinci satırdan, diğer durumlarda satır atlamadan program devam eder.

F

INCF f,W d=0 f+1 >> W Z 1 F registerinin değerini bir artırır. WINCF f,F d=1 f+1 >> f Z 1 F registerinin değerini bir artırır. F

INCFSZ f,W d=0 f+1 >> W Sıfır ise atla 1(2)F registerinin değerini bir artırır. İşlem sonucunda sonuç 0 ise bir satır atlayarak ikinci satırdan, diğer durumlarda satır atlamadan program devam eder.

W

INCFSZ f,F d=1 f+1 >> f Bir ise atla 1(2)F registerinin değerini bir artırır. İşlem sonucunda sonuç 0 ise bir satır atlayarak ikinci satırdan, diğer durumlarda satır atlamadan program devam eder.

F

GOTO addr Belirtilen etikete git 2 Belirtilen etiketteki adrese gider. -

CALL addr Belirtilen etikete git 2 Belirtilen etiketteki alt programı RETURN kelimesini bulana kadar çalıştırır. Sonra ilk adresin bir altındaki satıra geri döner -

RETLW k RETURN + MOVLW 2 Alt programda W registerine 8 bitlik k sabitini yükler ve ana programın bir sonraki satırına geri döner. W

RETFIE Kesmeden geri dön 2 Kesme programının sonuna eklenir ve bu programı sonlandırıp ana programa dönmeyi sağlar. -

RETURN Alt programdan geri dön 2 Alt programdan ana programa dönmek için kullanılır. -

NOP İşlem yok 1 Her hangi bir işlevi yoktur. Programda zaman kazanmak için kullanılır. -

SLEEP standby moduna gir TO/PD 1 PIC'i standby moduna girmesini sağlar. -F: Memory W : W register = 1 , F : file register = 0 , b : bit numarası , k : sabit sayı

f

4bit

4bit

W

f

4bit

4bit

f

C0 7 W

C 07 W

C 07 f

C0 7 f