Upload
uenal-vurus
View
333
Download
8
Embed Size (px)
DESCRIPTION
PIC 16F84 MİKRODENETLEYİCİ TEMEL BİLGİLERİ, PROGRAMLANMASI VE UYGULAMALARI
Citation preview
PIC 16F84
MİKRODENETLEYİCİ TEMEL BİLGİLERİ, PROGRAMLANMASI VE UYGULAMALARI
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.
PIC mikrodenetleyicileri PIC mikrodenetleyici eğitim seti PIC çizgi takip eden robot
İ Ç İ 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
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
(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
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
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
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
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
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
Mikrodenetleyicinin temelleri
Bölüm 1 Mikrodenetleyicinin temeli
İlk mikrodenetleyici seti (NEC TK-85)
Mikrodenetleyici chipleri
1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3
(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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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ı
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
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
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
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
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
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
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
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
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
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
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
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
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
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
PIC programlamanın temelleri
(5) Deneyin sonucu 1) Klasik tip buton devresi
2) Kondansatörlü buton devresi
3) Schmidt Trigger tersleyicili buton devresi
104
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
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
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
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
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
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
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
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
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
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
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
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
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
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ı
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
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
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
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ı
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
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
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
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
126
127
128
129
130
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
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
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
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
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
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
İş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
İş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
İş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
İş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
İşlemsel Yükselteçler ( Op-amp )
Giriş – Çıkış grafiği
140
İş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
İş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
İşlemsel Yükselteçler ( Op-amp )
Giriş – Çıkış grafiği
143
İş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
İş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
İş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
İş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
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
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
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
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
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
DA konvertör Giriş – Çıkış grafiği
153
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 bitiBilgi 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
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
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
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
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
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
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
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
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
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
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
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
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
SN
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
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
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
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
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
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
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
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
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
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 S3r
S3
S4 S4 S4si (d) Tutma
S4
S2
S2 S2S2
Motor gerilim
Motor gerilimi Motor gerilimi Motor gerilimi( Fren )
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
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
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
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
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
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
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.5mramda PWM değeri
205
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
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
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
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
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
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
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
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
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
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
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 kenar76 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
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 butonD’leri binary olarak a
1 0 7 6 5
rlanır.
21
RB
rtış gösterir
4
RBRB
RB
RB
RB
RB
RB
RA
RA
RA
RA
RA
RA
RA
RA
7
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
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
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
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 RA1
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
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
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
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
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ı
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
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
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
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
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
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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
Ç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
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
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
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
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
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
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 0Q2
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
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
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 00 0 0 0
Q2 Q3 Q4
Stacktan
POP et. İşlem yok
İşlem yok İşlem yok278
İşlem yok
İşlem yok
İşlem yok
Stack Memory(TOS)
1 0 0 0
Program Counter
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
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
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
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 registetamamlama yöntemi
; N – f >> W ,C ; f <= k
; N – f >> W ,C
; f > k
Q4
egisterine
yaz
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
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 11
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
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
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
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
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
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
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
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
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 NOPIC 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
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 +
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
kk 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
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
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
kni W registerine yükler.
k k k
Q3 Q4
W registerine
yaz
İşlem yap
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
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
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
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
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
Readegister
Process
data
Write
gister f
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 yokf registerine
yaz
PC + 2
PC + 1
10
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 yokPIC 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
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
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
ktoplayıp sonucu W
4
yaz
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 registerinioku
25İşlemi
yap
3Gideceği
yere yaz
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
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
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
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
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
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
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
292 292
293
294
295 295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
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