Pic Micro işlemciler hakkında kısa bilgi

download Pic Micro işlemciler hakkında kısa bilgi

of 194

Transcript of Pic Micro işlemciler hakkında kısa bilgi

Pic Micro ilemciler hakknda ksa bilgi: Pic mikro ilemciler teknik zellikleri ve klflar asndan farkllklar gsterirler. Her eyden nce birden fazla bacaa (pin) sahip olan ilemcilerin bacaklar giri veya k olarak altrlabilirler. zellikleri asndan da bir kere programlanabilenler (C serisi) programlar ultraviyole ile silinip yeniden programlanabilenler ve birden fazla silinip programlanabilenler olarak snflandrlabilirler. Biz genelde FLASH olarak tarif edilen birden fazla silinip programlanabilen tipler zerinde alacaz.Picler tad ekstra zellikler asndan da bir ka kategoriye ayrlrlar. rnek olarak zerin de; 1) Analog-Digital eviricisi olanlar, 2) Komparatr olanlar, 3) Donanmsal olarak seri haberleme nitesi olanlar, 4) HPWM nitesi olanlar gibi Picler mevcuttur. leriki blmlerde bunlarn kullanmna ait rnekler vereceiz. Pic ilemcilerin pinlerinin hem giri hem de k olarak altrlabildiinden bahsetmi idik. Aklamalarmzla ilgili uygulamalarmza Proje adn vereceiz ve her projemizin bir numaras olacaktr. imdi Pic lerinin organizasyonu ilemlerine ksa bir gz atalm.

Kullanacamz Pic 16F84A olacak. Bu ilemcinin toplam 18 baca vardr.5 nolu bacak(-),ve 14 nolu bacak(+) besleme ,15-16 nolu bacaklar (XTAL) osilatr bacaklar ve PortA (0-4 aras 5 adet pin) < 17,18,1,2,3 nolu bacaklar > ve PortB (0-7 aras 8 adet pin) olmak zere toplam 13 adet (Girik) pine sahip bir ilemcidir. PIC16F84 Pin Bilgileri

lk projemize gemeden, anlatmda lazm olacak olan BASIC de kullanlan say gsterim formatlar konusunda biraz bilgi vermek istiyorum. Bildiiniz gibi kullanacamz 3 tr say format vardr. Formatlar ve gsterim ekilleri aada verilmitir. 1) Desimal Saylar (10 tabanna gre dzenlenmi saylar):direkt kullanlrlar 12 -23 gibi 2) Hexadesimal Saylar (16 tabanna gre dzenlenmi saylar) : balarna $ iareti koyularak gsterilirler. $1F , $31 gibi 3) Binary Saylar (2 tabanna gre dzenlenmi saylar) : ise balarna % iareti koyularak gsterilirler. %111000 , %0001 gibi. Sklkla kullandmz say sistemi desimal olduundan dier saylarn kolayca anlalabilmesi iin zaman zaman bu saylarn 10 tabanna evrilmesi gerekir. Aada bu ilemin nasl yapldn basite greceksiniz. Bu ilemde temel forml; ayn on tabanna gre saylarda olduu gibidir. Sadan sola doru haneler say tabannn katlar eklinde deer alrlar. Yani deien tek ey taban arpm deeridir. rnekle daha iyi anlayacaksnz.

Hexadesimal saylar : 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F: rnek saymz olsun. 16 tabanl say format olduundan;16lar hanesi olan 3 says 16 ile arplp F saysnn desimal karl bu sayya eklenir. Dolaysyla; 3F = 3 x 16 + 15 = 63 olarak bulunur. ayet say 23F olsa idi saymz= 2 x 256 + 16 x 3 + 15= 575 olarak bulunacak idi. Binary saylar; 0-1 , rnek saymz %11101101 olsun. Hanelerin taban saysnn katlar eklinde gittiini biliyoruz. O halde sadan itibaren ilk saymz hane deerleri yle olacaktr. say srasna gre verir isek 128 64 32 16 8 4 2 1 Bu sisteme gre saymz desimal deere evirelim; %11101101: 1281 + 641 + 321 + 160 + 81 + 41 + 20 + 1= 128+64+32+8+4+1=237 olarak bulunacaktr.

En ok kullanacamz say formatlarndan birisi olan Binary say formatnn kullanm yerine bir rnek vermek bu aamada iyi olacaktr sanrm. Bir Picin B portuna bal olan Led lerden 0-3-4-6-ve 7 nolu pinlere bal olanlar bir seferde yanar hale getirebilmek iin porta verilecek deeri desimal olarak hesaplayalm. Bu durumda PortB=%11011001 olacaktr.Desimal deeri = 128+64+16+8+1= 217 olarak bulunur.

lk projemiz, PIC16F84A ilemcinin Tm bacaklarn k olarak ayarlamak ve bu klara balanacak LEDlerin deiik aralklar ile yanmasn gsteren bir program olacaktr. Bu arada ama, Pic lerin bacaklarnn nasl k olarak ayarlandn renmek olacaktr. Pic lerde bacaklarn giri veya k olarak ayarlanmasn stlenen bir REGISTER (Trkesi YAZMA) vardr. Her bir port iin ayr olan bu registerler A portu iin TRISA , B portu iin ise TRISB olarak adlandrlr. Tris yazmalar aslnda Picin hafzasnda 8 bitlik birer hafzadrlar. Buraya yerletirilen saynn Binary formatndaki ekline bal olarak Pic bacaklarn giri veya k olarak ayarlar.8 bitlik deer sras ile porta ait pinleri temsil etmektedir.

yle ki;

A) %00000000, ifadesi 8 bitlik Binary bir saydr. Desimal karl 0 (sfr) dr. Bu deeri herhangi bir TRIS registerine verir isek tm pinlerin OUTPUT yani k olarak ayarlanacan ifade eder. B) ayet deer %11111111 olur ise tm bacaklarn INPUT yani giri olarak ayarlanacan ifade eder. Binary deerin bazlarnn sfr (0) bazlarnn bir(1) olmas ise baz pinlerin k bazlarnn ise giri olarak ayarlandn gsterir. imdi aklamamz program eklinde verelim.

TRISA=%00000 A portu k olarak ayarland TRISB=%00000000 B portu k olarak ayarland k olarak belirlediim portun k deerini Low (0) olarak ayarlamak iin u ekilde bir ifade yazabilirim.

PORTA=0 A portu tm klar Low (0) PORTB=0 B portu tm klar Low (0) Eer High yapmak isteseydim (PORTA=1),(PORTB=1)eklinde yazacaktm. Grdnz m ne kadar basit. Pinleri k olarak ayarladm ve tm klar Low yaptm. Herhangi bir portun bir pininin gsterilme ekli port ismi devamnda nokta ve pin numaras verilerek yaplr. rnek A portunun 2 nolu pini iin PORTA.2 eklinde bir gsterim kullanlr. imdi diyelim ki PORTA.0 yani A portunun sfr biti yani ilk pine bal LEDi yakalm ;Komutumuz bir ka mantkl ekilde olabilir. Sras ile; PORTA.0=1 PortA.0 High yani 1 oldu ve LED yand.veya HIGH PORTA.0 PortA.0 High oldu yani LED yand,

Komutu mmkn olduu srece eklinde kullanmay tercih edin.

Proje 1a :

imdi de birden fazla pine bal Led lerin ayn anda yaklmasn gerekletirelim. PortA=%10101 eklin de bir komut yazarsam, sadaki ilk deer olan 1 (Bir) PortA.0a verilir. Sonra sras ile yani soldan saa doru olan Binary deerler PORTA nn 0-4 nolu pinlerine verilirler. Deer sfr ise pin Low, deer bir ise pin High olur. Sonuta bu komut ; TRISA=%00000 A portu k olarak ayarland PortA.0=1 PortA.1=0 PortA.2=1 PortA.3=0 PortA.4=1 ( Bu pin dierlerinden farkldr.Open kollektr olduu iin pullup direnci kullanlr.Aksi halde istediimiz k alamayz.)eklinde karlk gelen Binary deerleri port pinlerine verir.

Demek ki bir porta bal pinlerin birden fazlasna hkmetmek iin porta sekiz bitlik bir Binary veya desimal deer verilir.imdi port pinlerinin ne amal k olarak kullanld zerine biraz bilgi verelim.

Diyelim ki port pinine bal bir Role yi bir transistor aracl ile altrmak istiyorsun. te yolu, pin kn bir diren ile (1K-2k2) bir transistor n (B)eysine bala. NPN tipi bir transistr kullanrsan transistr n (E)mitterini GND ye bala. Port Pininden High (1) kartrsan transistr iletime geecek ve (C) kollektr nden GND karacaktr. Bunu bir role ye bala ve rlenin dier ucunu +5Va balar isen pinden rleyi altrp kapatabilirsin. Bunu bir rnekle aklayalm; Diyelim ki PortB.1 pinine bir transistr zerinden role baladk ve bu rleyi ap kapayacaz.te basit programmz;

Proje 1b :

1 TRISB=%00000000 B portu k yapld 2 PortB=0 B portunun k Low(0) yapld. 3 ROLEAC: 4 HIGH PORTB.1

5 PAUSE 1000 1000 ms lik bir gecikme yaratr. 6 LOW PORTB.1 7 PAUSE 500 8 GOTO ROLEAC 1. Satrda PortB yi k olarak ayarladk. 2. Satrda PortB pinlerinin tamamn LOW yaptk. 3. c satrda ROLEAC isimli bir etiket yarattk.(Yaptrmak istediimiz dier komutlar iin ismini kendimizin koyduu baka etiketler yaratp programn daha fazla ilem yapmasn salarz.) 4. satrda PortB.1 pinini High yaptk. 5. satrda 1000 ms lik bir gecikme yarattk. Yani role 1000 ms sresince ekili kald. 6. Satrda PortB.1 pinini LOW yaptk. Yani role brakt. 7. satrda tekrar 500 ms lik bir gecikme yarattk. Sonra program tekrar ayn ileri yapmas iin ROLEAC etiketine ynlendirdik. Buraya kadar rendiklerimizi toparlar isek; - Say gsterim formatlarn rendik. - Port pinlerinin nasl giri nasl k yaplacan rendik. - Port ve port pinlerine nasl ulaabileceimizi rendik. - Milisaniye cinsinden gecikmenin nasl yaratldn rendik. - Program iinde etiket kullanarak ayn ilemlerin nasl tekrarlanabileceini rendik. Btn bu rendiklerimizi tek program zerinde gstermeye alalm.

Proje 1c :

Program PortA.0 pinine bal LED i kontrol edecek ve ayrca PortB.0 pinine bal rleyi ap kapayacaktr. Role ekildiinde PortA.0 pinine bal LED yanacak. Role braknca LEDde snecektir. Role ekili kalma sresi 1 sn. yani 1000 ms. olacaktr. TRISA=0 bu ifade TrisA=%00000e edeerdir. TRISB=0 PortA=0 PortB=0 ROLEAC: HIGH PORTB.0 role ektirildi PAUSE 500 500 ms bekleme HIGH PORTA.0 Led yand PAUSE 500 500 ms bekleme LOW PORTA.0 Led snd PAUSE 500 500 ms bekleme LOW PORTB.0 Role brakt PAUSE 500 500 ms bekleme

GOTO ROLEAC Roleac etiketine git END programn burada bittiini ifade eder.

Bu dersimizde pic pinlerinin nasl input yani giri olarak ayarlandn ve bu ilemin nerelerde kullanldn reneceiz. Hazrlanan programlarda pic in zaman zaman d ortamdan bilgi almas ve bu bilgiye gre karar vermesi istenir. rnek olarak bir tua baslmas halinde git u ii yap eklinde bir program en basitinden yazlabilir.

Yada bir anahtar kapal ise bir i yap. Ayn anahtar ak ise baka bir i yap gibi. Bir nceki dersimizde Port pinlerinin giri olarak ayarlanmas iin Porta ait TRIS yazmana 1 yani high verilmesi gerektiini renmi idik. Bu kaide her bir pin iin gerekli. Portun tamam giri yaplacak ise 8 bitlik 255 ($FF %11111111) deerinin TRIS yazmacna verilmesi gerekir.Bir rnek programla bunu aklayalm. Varsaymlarmz; Picin PortB.0 pinine bir anahtar bal. Anahtar ak iken pin low da (pull down direnci ile) anahtar kapal iken pin High da olsun. Burada Pull down eklinde bir terim geiyor. Port pinlerinin sfra yani Lowa ekilebilmesi iin pin ile GND arasna 10K lk bir diren balanr. Buna Pull-Down ilemi denir. Ayn iin tersi olarak Pin ayet 10K lk bir diren ile +5Va balanr ise bu dirence de PullUp direnci denir. imdi PortB.0 10K ile GND ye bal yani bu diren ile srekli LOW da tutuluyor. ki ucu olan Anahtarn bir ucu pine bal dier ucu da +5Va bal olsun. Anahtar kapadmz zaman pine +5V yani High gelsin. Anahtarn durumunu bir LED ile izlemeye alalm. Anahtar kapal iken PortA.0a 470 Ohm direnle bal bir LEDyansn. Anahtar ak iken Led snsn. te programmz ve aklamalar;

Proje 2a :

TRISA=0 A portu k olarak ayarland TRISB=%00000001 B.0 pini giri dierleri k olarak ayarland. SYMBOL TUS= PORTB.0 PortB.0 pinine sembol ismi olarak TUS ad verildi. SYMBOL LED= PORTA.0 PortA.0 pinine sembol ismi olarak LED ad verildi. BASLA: IF TUS=1 THEN Anahtar kapal ise HIGH LED LEDi yak ELSE Deilse LOW LED LEDi sndr ENDIF IF sorgulamas sonu GOTO BASLA BASLA isimli etikete git. END Bu programda baz yeni komutlar grdnz. Sras ile inceleyelim. nce SYMBOL komutunu grelim. Bu komut tanmlanm bir deikeni baka isimle yeniden tanmlamak veya herhangi bir port pinine bir isim vermek iin kullanlr. Burada komutu port pinlerine isim vermek iin kullandk. Ayn ii port pinini deiken olarak tanmlayarak da yapabilirdik. yle;

TUS VAR PORTB.0 LED VAR PORTA.0 eklinde yaplan tanmlama fonksiyon olarak SYMBOL tanmlamas ile ayn ilevi grr.Burada VAR isimli bir ifade gryorsunuz. Sras gelmiken bu ifadenin ne olduunu aklayalm. VAR ngilizce VARIABLEkelimesinden ksaltlarak tretilmi olup Trkesi DEKEN dir. Program iinde deiken tanmlamanza imkan tanr. Program iinde muhtelif deikenler kullanlmaktadr. PBP genel olarak 5 tip deiken tanmlamanza olanak tanr. Bunlar rneklerle aklayalm; Bit tipi deiken; TUS VAR BIT (veya TUS VAR PORTA.0) deikenin boyutu bit dir. BYTE tipi deiken; AL VAR BYTE ,burada AL isimli deiken 8 bitlik bir deiken olup alabilecei en byk rakam 255 deeridir. Bylece bu deiken 0-255 arasnda herhangi bir deer alabilir. WORD Tipi Deiken; TOPLAM VAR WORD , burada TOPLAM isimli deiken ift baytlk yani 16 bitlik bir deiken olup alabilecei rakam deerleri 0 65535 arasnda olacaktr. Dizi Tipi Deikenler ; ISIM VAR BYTE [10] isim ad altnda 11 adet deiken tanmlar. Bu deikenlere deiken numaras verilerek ulalabilir. Sralama sfrdan balar. rnein ISIM[4] beinci deiken olmaktadr. Son olarak Sabit deerli deikenleri tanmlayacaz. TA CON 3 Burada TA isimli deikene 3 deeri sabit olarak verilmektedir. Program iinde bir daha deitirilemez veya sadece ilk tanmland yerde deitirilebilir. Tekrar programmzdaki komutlara dnersek IF (ayet veya Eer) komutunu greceiz.IF komutu sorgulama yaplmas gereken veya arta bal ilerde kullanlan bir komuttur.ayet PORTA.0 pini Low ise PORTB.0 daki Led yansn eklinde bir arta bal bir ilemin program halinde yazlm u ekilde olacaktr;

IF PortA.0=0 then HIGH PortB.0 IF komutunun iinde kullanlan birde ELSE isimli ilavesi vardr. Bu komut birinci art doru deilse ikinci art olarak kullanlr. ayet PORTA.0=0 ise LEDi yak deil ise (yani PortA.0=0 deil ise) LEDi sndr eklinde verilen bir tanmlamay program olarak yazacak olur isek; IF PORTA.0=0 THEN HIGH LED ELSE LOW LED ENDIF Else komutunu kullanacamz zaman mutlaka birinci satrda THEN den sonra bir ey yazmamamz gerekir. (Yukarda olduu gibi) Devam eden ifade alta yazlr.

Yeni bir program yazacaz ve rendiimiz yeni komutlar bu programda kullanacaz. Programn konusu yle; Proje 2b:

- PortB.0 pinine bir Tu bal ve Pull-Up yaplm vaziyette. Yani pin srekli High da duruyor. Tua baslncaLOW olacaktr.

- PortB.1 pinine bir Led bal.

- Tua basld zaman LED yanacak , tua tekrar basld zaman LED snecek. Bir nevi on/off anahtar gibi altracaz tuu. Grld gibi yalnzca B portunu kullanyoruz. Sfr nolu pin (B.0) tu bal olduu iin giri olacak, bir nolu pin (B.1) ise Led bal olduu iin k olacak. imdi programmza geelim ;

TRISB=%00000001 SYMBOL TUS=PORTB.0 SYMBOL LED=PORTB.1 BASLA: IF TUS=0 THEN IF LED=1 THEN LOW LED ELSE HIGH LED ENDIF ENDIF GOTO BASLA END Burada program ksaltmak iin baka bir komut kullanabiliriz. TOGGLE komutu. Toggle bit baznda alan bir komut olup bit ayet 1 ise 0 yapar. Bit ayet 0 ise 1 yapar. Ayn program imdi Toggle kullanarak yazalm;

Proje 2c : (ema 2b ile ayn)

TRISB=%00000001 SYMBOL TUS=PORTB.0 SYMBOL LED=PORTB.1 BASLA: PAUSE 70 IF TUS=0 THEN TOGGLE LED GOTO BASLA END Grdnz gibi program baya ksald. Toggle komutu byte tipi deikenlere tatbik edilmez. rnein TOGGLE PORTB diyemeyiz. Ancak TOOGLE PORTB.2 diyebiliriz.

Biraz da matematik yapalm. Programlarda matematik drt ilem komutlar normal matematik yaplr gibi kullanlmaktadr. Gerektiinde ilemler deikenler yardm ile de kullanlabilir.

rnek vermek gerekir ise; A=24 B=12 C=A+B eklinde bir ifade kullanlabilir. C=A-B veya C=A/B veya C=A*B eklinde ifadeler kullanlabilmektedir. Sonular konusunda programclarn dikkatli olmas gerekir. 8 bitlik deikenler kullanlarak yaplacak hesaplarn sonular da 8 bit snr iinde olmas gerekir. 8 biti

aan sonular iin WORD deikeni kullanlmal, 16 biti aan hesaplamalarda ise blme iin DIV32 komutu kullanlmaldr. Bu konuda ileriki derslerimizde rnekler zerinde alacaz. Bu arada bit baznda yaplan ilemlerde baz nemli noktalara iaret etmek istiyorum. Bir ksm giri bir ksm k olarak ayarlanm portlarda ilem yapmak genellikle

problemlere sebep olur. Bu yzden bit baznda yaplan ilemleri ok iyi renmek gerekir. Bunun iin Mantksal Operatrler (Logical Operators) konusunu inceleyeceiz. ounuzun mantk konusunda bilgi sahibi olduunu dnyorum. Yinede mantk genel konularna burada deinmekte yarar var.

a) AND (ve) Operatr: Mantksal operatrlerin anlalmasnn en kolay ynlerinden birisi lamba devreleridir. ki adet anahtar ile bir adet lambay yakacamz dnrsek, ve art olarak da her iki anahtar kapal olunca lamba yansn der isek bir AND ilemine ihtiyacmz var demektir. Bu durumda eitlik aadaki gibi olmaldr. IF (SW-1=1) AND (SW-2=1) THEN HIGH LAMBA bu eitliin mantk modeli ise 1 AND 1 = 1 olumsuz hali olarak 1 AND 0 = 0 yazlabilir. Tabii ki 0 AND 0=0 olduunu sylemeye gerek yok sanrm. Lamba olayna geri dner isek, lambann yanabilmesi iin her iki anahtarn (1) yani kapal olmas gerektii ortadadr. Anahtarlardan birisi ak olur ise olumsuz hal meydana gelir ve lamba snk kalr. AND operatr bit bazndaki ilemlerde genellikle aadaki ekillerde kullanlr.

- 8 bitlik bir ifadeden baz bitleri izole edip ayrmak iin; PORTB= %11100100 olsun ve bu bilginin ilk 4 adet bitini baka bir deikene vermek isteyelim. A=PORTB AND %00001111 A= %0100 olacaktr. yani ilk 4 adet bit A deikenine eitlenmi olur. Temel kaide izole edilecek bitlerin tamam 1 ile AND lenir. - Yine 8 bitlik bir ifadede istenen baz bitleri low yapmak iin kullanlabilir. PORTB=%11100100 olsun ve biz high olan 2 biti low yapmak isteyelim. te zm; PORTB=PORTB AND %11111011

PORTB nin yeni deeri %11100000 olacaktr. Temel kaide low yaplacak bit sfr dier bitler 1 ile AND lenir. b) OR (veya) Operatr : Yine lamba devresini rnek verecek olursak, bir lambann yanabilmesi iin iki anahtardan birisinin kapal olmas yeterli ise bu durumda karmzda bir OR ilemi var demektir. Bunun artl ifadesi yledir; IF (SW-1=1) OR (SW-2=1) THEN HIGH LAMBA mantk modeli ise 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 Or ilemi artl ifadelerde kullanlr. yukardaki lamba rneinde olduu gibi. Bundan daha fazla olarak istenen bir bitin high yaplmasnda kullanlmaktadr. rnek; PortB=%11001100 ise ve 1. bit High yaplmak isteniyor ise; PortB=PortB OR %00000010 eklindeki ifade ile 1. bit High yaplr. Sonu PortB= %11001110 olur.High yaplmak istenen bit 1 dierleri 0 ile OR lanr. c) XOR (zel Veya) : Genellikle bitleri ters evirme ilemlerinde kullanlr. Mantksal model yledir. 1 XOR 1 = 0 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 A=%11100011 , B=%01010101 olsun C= A XOR B eitliine bakalm ve C nin alaca deeri hesaplayalm A= %11100011 B= %01010101

XOR C= %10110110 sonucu elde edilecektir. imdi C nin bitlerini ters evirmek istersek yle yaplacaktr; C=%10110110 %11111111 XORC=% 01001001 grld gibi C nin yeni deeri ncekinin ters evrilmi halidir. Demek ki bir saynn bitlerini ters evirmek iin o sayy tamam 1 lerden oluan bir say ile XOR lamak gerekir.Bir saynn yalnzca bir bitini ters evirmek iin TOGGLE komutu kullanlmaktadr. Ancak ayn ii XOR ile de yapabiliriz. A=%11111110 olsun bu saynn 7. bitini ters evirecek olur isek A.7=A.7 XOR %1 Bu durumda A says%011111110 olacaktr. Daha ncede belirttiimiz gibi aritmetik ilemlerinde kullandmz deiken tipine bal olarak ilem yapmaya dikkat etmeliyiz. zellikle vurgulamaya altm konu 8 bitlik saylarla alrken elde edilecek neticenin de 8 bit snrlar iinde olmasna zen gstermeliyiz. ayet hesap sonucu 8 biti aacak ise veya ama ihtimali var ise mutlaka sonucu yerletireceimiz deiken Word tipinde seilmelidir.

LCD Kullanm: Yazmz programlardan elde edeceimiz neticeleri grsel olarak takip edebilmek amac ile Piclere muhtelif byklklerde LCD ekranlar balandn biliyorsunuz. imdi Pic ile LCD kullanm konusunda detayl bir uygulama yapacaz ve LCD kullanmn her yn ile reneceiz. nce biraz LCD leri tanyalm. Bu konuda en ok kullanlan LCD 2 sra ve her srada 16 karakter yer alan LCDler kullanlr. Bunlarn 4 sral olanlar olduu gibi her srada

karakter adedi 40 a kadar olanlarda mevcuttur.LCD ler standart olarak 14 bacakl (pinli) ekranlardr. Bacak numaralarna gre fonksiyonlar aada belirtilmektedir.

1. Nolu Pin : GND bacadr. 2. +5V giri baca 3. Kontrast ayara baca olup genelde 22 K lk trimpotun bir baca GND ye dier u baca +5Va ve orta baca da bu kontrast bacana balanarak trimpot ile ekran koyuluk aklk ayar yaplr. 4. RS Reset Baca 5. R/W yazma okuma set etme baca. 6. E Enable baca. 7. D0 Data Baca sfr nolu bit. 8. D1 Data Baca 1 nolu bit. 9. D2 Data Baca 2 nolu bit. 10. D3 Data Baca 3 nolu bit. 11. D4 Data Baca 4 nolu bit. 12. D5 Data Baca 5 nolu bit 13. D6 Data Baca 6 nolu bit 14. D7 Data Baca 7 nolu bit.

Baz modellerinde 15. ve 16. c bacaklarda mevcuttur. Bunlar back light denilen arkadan ekran aydnlatmas iin kullanlan Led nn voltaj besleme ulardr. Bu ular ayr verildii gibi 15 ve 16. c bacaklar olarak da verilebilir. LCD nin kullanm ile ilgili protokole biz burada girmeyeceiz. Bu ii bize BASIC yapacak. Yalnzca LCD nin 8 adet (8 bitlik) Data giri bacaklar olduunu ve istenirse LCD ile 8 yerine 4 bit zerinden haberlemeyaplabileceini belirtmek istiyorum. Aslnda 8 bitin tek seferde verilmesi yerine ince ilk 4 bit sonrada ikinci 4 bit verilerek 8 bitlik bilgi tamamlanmaktadr ve bu ii yine BASIC yapmaktadr. Faydas ile 8 adet yerine 4 adet Data baca kullanarak Picde bize 4 adet fazladan bacak brakmasdr ve bu yzden kullanm asndan daima tercih edilmektedir. LCD nin Pic ile birlikte kullanlmas iin baz kurallar vardr. Bunlarn banda DEFINE komutu gelmektedir. Bu komut LCD nin hangi porta bal, Ka data baca kullanyor gibi bilgileri Pice vermekte kullanlr. Ksa bir rnekle aklayalm. Vereceimiz rnekte LCD tanmlama iin kullanlmas gereken tm DEFINE komutlarn ve ne amala kullanldklarn greceksiniz. DEFINE LCD_DREG PORTB LCD data bacaklar hangi porta bal? Bu rnekte LCD Data bacaklarnn PortBye bal olduu belirtiliyor. DEFINE LCD_DBIT 4 LCD data bacaklar hangi bitten balyor? Bu rnekte Data bacaklarnn PortB nin 4. bitinden itibaren balad belirtiliyor. DEFINE LCD_EREG PORTB LCD Enable Baca Hangi Porta bal? Bu rnekte LCD Enable bacann PortBye bal olduu belirtiliyor. DEFINE LCD_EBIT 3 LCD Enable Baca Hangi bite bal ? Bu rnekte LCD Enable bacann PortB.3 (3.bit) e bal olduu belirtiliyor. DEFINE LCD_RWREG PORTB LCD RW Baca PortB de bal Bu rnekte LCD RW bacann PortB de bal olduu belirtiliyor. DEFINE LCD_RWBIT 2 LCD RW Baca 2. bite bal Bu rnekte LCD RW bacann 2 bite bal olduu belirtiliyor.

ayet LCD den geriye karakter okumas yaplmayacak ise RW baca daima GND ye bal durabilir. Bu durumda 1 bacaktan tasarruf edilebilir. leride buna ait rnekler grlecektir. Burada komutun anlalmas iin biz bu baca da PortB ye bal kabul edeceiz. DEFINE LCD_RSREG PORTB LCD RS Baca Hangi Porta bal ? Bu rnekte LCD RS bacann B portuna bal olduu belirtiliyor. DEFINE LCD_RSBIT 1 LCD RS baca Hangi Bite bal ? Bu rnekte LCD RS bacann PortB.1 (1. bit) e bal olduu belirtiliyor. DEFINE LCD_BITS 4 LCD 4 bit mi yoksa 8 bit olarak bal? Bu rnekte LCD nin PortB ye ka data baca ile balandn aklyor. DEFINE LCD_LINES 2 LCD Ka sra yazabiliyor Bu rnekte LCD nin Ka sra alt aklanyor. Standart kullanmlarda buraya kadar olan DEFINE tanmlamalar yeterlidir. Ancak bazen yksek frekansl 10MHz ve zeri alma frekanslarnda LCD ekranna yazlan karakterler hzdan dolay izlenemez hale gelebilirler. Bunu nlemek iin gerek komut verildikten sonra ve gerekse DATA verildikten sonra standart bir bekleme sresi tanmlanr ve karakterler izlenebilir hale gelir. Bu komutlarda sras ile

DEFINE LCD_COMMANDUS 1000 1000 deer mikro saniye cinsinden gecikme sresi olup istee bal olarak artrlp azaltlabilir. Komut sonras gecikme sresini belirler. DEFINE LCD_DATAUS 225 Data bilgisinden sonraki gecikmeleri tanmlar. Buraya kadar verdiimiz rneklerle LCD nin Pice balantsn tanmlam olduk. Program iinde LCD nin kullanmna ait baz aklamalar verdikten sonra rnek programmza geeceiz. LCD ye bir bilgi (emir) veya Data (karakter) gndermek iin kullanlan komut; LCDOUT dr. Bu komut ayetLCDOUT $FE eklentisi ile birlikte kullanlr

ise LCD ye bir komut gnderilecei anlamna gelir. rnein Ekrann silinmesi iin LCDOUT $FE,1 komutunu verdiimizde tm ekrandaki bilgiler silinir. Program iinde sklkla kullandmz baz komutlar vardr. Bunlar, Yazma konumunu (imle in yeri) ekrann en bana almakLCDOUT $FE,2 , Yazma konumunu (imle in yerini) kinci satr bana almak iin LCDOUT $FE,$C0 gibi komutlar verilir. Ayrca yazma konumunu ekrann herhangi bir yerine almak iin ekran adresi kullanlr. lk satr birinci karakterin adresi $80, ikinci karakterin adresi $81, ve 7. karakterin adresi ise $86 dr. kinci srada bu adresler ilk karakter iin $C0, ikinci iin $C1 ve sras ile $C2-$C3-$C4 eklinde gitmektedir. rnek olarak ilk sra 7. karakterden itibaren MERHABA yazmak istersek u komutu vermeliyiz. LCDOUT $FE,$86,MERHABA rendiklerimizi artk bir programla kullanalm isterseniz.

rnek Program 3a: Ekranda ilk satrdan itibaren BASIC DERSLERI yazp ikinci satra ise DERS No:3 ifadesini yazabileceimiz program gerekletirelim. Mikroilemcimiz yine 16F84 olsun. LCD B portuna bal olacak ve 4 bit data balants olacaktr. Enable pini 3 nolu bite , R/ W pini 2 nolu bite ve RS pini ise 1 nolu bite bal olacaktr. te Programmz. DEFINE LCD_DREG PORTB LCD data bacaklar PortB de bal DEFINE LCD_DBIT 4 LCD data bacaklar 4. bitten balyor DEFINE LCD_EREG PORTB LCD Enable Baca PortB de bal DEFINE LCD_EBIT 3 LCD Enable Baca 3. bite bal DEFINE LCD_RWREG PORTB LCD RW Baca PortB de bal DEFINE LCD_RWBIT 2 LCD RW Baca 2. bite bal DEFINE LCD_RSREG PORTB LCD RS Baca PortB de bal DEFINE LCD_RSBIT 1 LCD RS baca 1. Bite bal

DEFINE LCD_BITS 4 LCD 4 bit olarak bal DEFINE LCD_LINES 2 LCD 2 sra olarak alyor. TRISA=0 A portu k olarak ayarland. TRISB=0 B portu k olarak ayarland. LOW PORTB.2 RW baca ekrana yazmaya imkan vermek iin LOW yapld. PAUSE 200 LCD nin kullanma hazr hale gelebilmesi iin gerekli sre LCDOUT $FE,1 nce Ekran siliyoruz. LCDOUT BASIC DERSLERI ilk sra batan itibaren yazdryoruz. Aslnda bu komutu baka bir ekilde de yazabiliriz, yle LCDOUT $FE,2,BASIC DERSLERI LCDOUT $FE,$C0,DERS No: 3 ikinci satra yazdrld. End Program sonu Ayn program RW bacan direkt GND ye balyarak da altrabiliriz. Bu durumda ; LOW PortB.2 komutuna ihtiya yoktur. Devre emas :

Ekran kullanmnda en ok karlalan ekillerden birisi sabit bir karakter dizisinden sonra bir deikene bal olarak deer gsterme ii dir. Diyelim ki ortam scakln lyorsunuz ve bunu ekranda gsteriyorsunuz.

Bu durumda ekranda SICAKLIK : 23,3 oC ibaresine benzer bir grnt olacaktr. Genelde 23 deeri bir deikende tutulur ve 0,3 deeri ise ayr bir deikende tutulur. imdi ISI=23 ve ONDA=3 olduunu kabul ederek bunun ekranda gsterilme eklini inceleyelim. LCDOUT SICAKLIK : komutu ekrana SICAKLIK : ibaresini yazacaktr. Devam iin LCDOUT SICAKLIK : ,#ISI eklinde bir ifade yazlr ise; Ekrana kan ekli < SICAKLIK : 23 > olacaktr. Geriye ondalk ksmn yazdrmak kalyor. Bunun iin LCDOUT SICAKLIK : ,#ISI,,,DEC1 ONDA ifadesini yazmamz gerekiyor. #ISI komutundan sonra gelen virgl peine ikinci bir komut geleceini gsteriyor. Arkasnda yer alan ,ifadesi ekrana 23 rakamndan sonra bir virgl koyacaktr. Peinden gelen DEC1 ise sonraki gelen ifadenin Desimal bir say olduunu ve 1 hanesinin yazlacan gsterir. Daha sonraki ise zaten ONDA deikeni olup 3 saysn tutmaktadr. Sonu olarak ekranda; SICAKLIK : 23,3 olarak grlr. Bu ifadelerin devamna derece iareti ve C karakterini ilave edince ilem tamam olacaktr. Ancak LCD karakterleri iinde derece iareti yoktur. Bunun nasl oluturulduunu ileride greceiz. imdilik yalnzca C karakterini koymaya alalm. Komutun tamam; LCDOUT SICAKLIK : ,#ISI,,,DEC1 ONDA, C eklinde verilir. Ekranda gsterilecek say formatlarn verdikten sonra ikinci rneimize geeceiz. Saylarmz Desimal ,Hexadesimal ve Binary olarak gsteriliyorlard. Bunlar LCD de gstermek iin aadaki formatlar kullanyoruz. Desimal Saylar : Sayy direkt olarak gstermek iin bana # ilave edilir. #ISI gibi. ok haneli

saylarda hane saysn kstlamak iin DEC komutu kullanlr. DEC1 tek hane, DEC2 iki hane DEC3 hane gsterir. Olmayan haneler yerine akrana sfr kar. rnein ISI=23 ise ve biz ekrana DEC3 ISI yazm isek ekrandaki grnts023 olarak izlenir. HEX Saylar.: Deiken veya say bana HEX veya HEX1 veya HEX2 gibi ifadeler yazlr. Rakamlar gsterilecek hane saysn ifade etmektedir. Binary Saylar: Binary saylar balarn BIN (veya BIN1-BIN2 BIN3..) ifadesi koyularak gsterilirler. Proje 2b : Bu rneimizde deikenlere bal saylarn ekranda gsterilmesi konusunu ileyeceiz. PIC16F84 ilemci ve 2X16 LCD kullanarak Baz say formatlarn ekranda izleyelim. Program nce bir SAYI deikenini kullanacak ve sfrdan balayp say deerini her seferinde bir artrarak oluan yeni SAYI deerini st satrda Desimal alt Satrda Binary olarak gsterecek. kinci admda ise Yine sfrdan balayarak bir SAYI deikeni deeri 10ar artrlacak ve elde edilen yeni deer st satrda Desimal, alt satrda ise HEX olarak gsterilecektir. zleyelim. DEFINE LCD_DREG PORTB LCD data bacaklar PortB de bal DEFINE LCD_DBIT 4 LCD data bacaklar 4. bitten balyor DEFINE LCD_EREG PORTB LCD Enable Baca PortB de bal DEFINE LCD_EBIT 3 LCD Enable Baca 3. bite bal DEFINE LCD_RWREG PORTB LCD RW Baca PortB de bal DEFINE LCD_RWBIT 2 LCD RW Baca 2. bite bal DEFINE LCD_RSREG PORTB LCD RS Baca PortB de bal DEFINE LCD_RSBIT 1 LCD RS baca 1. Bite bal DEFINE LCD_BITS 4 LCD 4 bit olarak bal DEFINE LCD_LINES 2 LCD 2 sra olarak alyor. TRISA=0 A portu k olarak ayarland. TRISB=0 B portu k olarak ayarland.

SAYI VAR BYTE Say deikenini Byte olarak ayarladk . Maksimum 255 deeri LOW PORTB.2 RW baca ekrana yazmaya imkan vermek LOW yapld. iin

PAUSE 200 LCD nin kullanma hazr hale gelebilmesi iin gerekli sre LCDOUT $FE,1 Ekran silindi SAYI=0 SAYI ilk deeri sfr olarak verildi. -ANA PROGRAM BALANGICI BASLA: LCDOUT SAYI = ,#SAYI ilk satra Say Desimal olarak yazld LCDOUT $FE,$C0, Binary = ,BIN SAYI ikinci sraya Binary olarak yazld. PAUSE 500 500 ms bekliyoruz. SAYI=SAYI+1 SAYI bir artrld. IF SAYI YUKARI IKI: LCDOUT $FE,$C0,GECE =>ASAGI BAS PAUSE 200 IF YUKARI=0 THEN GUNDUZ Yukar tuuna baslrsa GUNDUZ e git. IF ASAGI=0 THEN GECE Aa baslrsa GECE ye git. IF SEC=0 THEN BASLA Tekrar SEC tuuna baslrsa Bala ya git GOTO IKI GUNDUZ: LCDOUT $FE,1, GUNDUZ SET DEGER UC: LCDOUT $FE,$C0,ISIGUN = ,#ISIGUN Gndz Set scakl ekranda PAUSE 200 IF YUKARI=0 THEN Yukar tuuna baslnca ISIGUN=ISIGUN+1 Gndz Set bir artrlyor IF ISIGUN>50 THEN ISIGUN=50 50 ye ulanca 50 de kalyor ENDIF IF ASAGI =0 THEN Aa tuuna baslnca ISIGUN=ISIGUN-1 Scaklk bir eksiltiliyor IF ISIGUN=255 THEN ISIGUN=0 255 e ulanca sfra eitleniyor ENDIF IF SEC=0 THEN BASLA Sec tuuna baslnca baa gidiliyor. GOTO UC GECE: LCDOUT $FE,1, GECE SET DEGER

DORT: LCDOUT $FE,$C0,ISIGECE = PAUSE 200 IF YUKARI=0 THEN ISIGECE=ISIGECE+1 IF ISIGECE>50 THEN ISIGECE=50 ENDIF IF ASAGI =0 THEN ISIGECE=ISIGECE-1 IF ISIGECE=255 THEN ISIGECE=0 ENDIF IF SEC=0 THEN BASLA GOTO DORT END

,#ISIGECE

Bu programla ilgili ilave baz aklamalar yapmak mantn anlamak asndan yararl olacaktr.

Grld zere 2 satr 16 karakter bir ekran snrlar iinde birka kademeli bir men dzenlenmitir.

Programn ba tarafnda yer alan ifadelerin aklamas daha nce yaplm idi. Bu nedenle aklamamzaBALA etiketinden itibaren yapacaz. Bala etiketinden sonra hemen ekrana LCDOUT $FE,1, SEC => MENU komutu ile Mn ye gemek iin SEC tuuna baslaca aklanyor. Dikkat edilir ise LCDOUT $FE,1 komutu kullanlarak nce ekran tamamen siliniyor arkasndan Menu aklamas veriliyor. Bu satr yalnzca bir defa icra edileceinden ekrann tamamen silinmesi doru olmaktadr. Aksi taktirde bir nceki ekrandan baz karakterler ekranda kalabilir. Altnda BIR: etiketi ile birlikte LCDOUT $FE,$C0, ODA SICAKLIGI=,#ISIODA komutu ile Oda scakln veriyoruz. Mnnn ilk ksmn oluturan bu blmde oda scakl llerek ekrana getiriliyor ve kullanc isterse set scaklklarn ayarlamak zere bir alt mnye geebiliyor. Bunun iin SEC tuuna basmas yeterli oluyor. Bu konumda SEC tuuna basld zaman programda yer alan; IF SEC=0 THEN MENU

Satr sayesinde program MENU isimli etikete atlyor. Burada

LCDOUT $FE,1, GUNDUZ => YUKARI Komutu ile nce ekran siliniyor ve daha sonra Yukar tuuna baslrsa Gndz mnsne gidilecei aklanyor. Bu satrn altnda;

LCDOUT $FE,$C0,GECE =>ASAGI BAS Komutu ile Aa tuuna baslrsa da Gece mnsne gidilecei aklanyor. Doal olarak bu satrlarn altnda da hangi tua basldn kontrol eden bir blm yer alyor. lem gayet basit. Yukar tuuna baslrsaGUNDUZ isimli etikete git; IF YUKARI=0 THEN GUNDUZ Aa tuuna baslrsa GECE isimli etikete git; IF ASAGI=0 THEN GECE eklinde komutlar veriliyor. Tabii ki tm bu ilemler bittikten sonra programn asl alan blmne gitmek iinde SEC tuunu devreye sokuyoruz. SEC tuuna baslmas halinde ise program tekrar en baa atlyor. BU aamada yalnzca Gndz etiketi altnda ne yaplyor aklamak istiyorum. Zira Gece etiketinde yaplanlar gndzden ok farkl deil. Birisini anlarsanz dierini anlamanz zor deil.

Gndz etiketi altnda nce Gndz set deeri ekrana verilip aa veya yukar tularndan birisine basmanz bekleniyor. Ya da SEC tuuna basp tekrar program bana gemeniz bekleniyor. Yukar tuuna basmanz halinde Set scakl bir artrlyor. Ancak Artrlan scakln 50 dereceyi gemesi istenmediinden ayet geerseniz scaklk yine 50 ye eitleniyor. Bu bir kstlama veya snrlandrma halidir. Ayn ekilde Aa tuuna baslmas halinde scakln deer bir eskitiliyor ve sfr deeri geilip 255e ulaldnda scaklk tekrar sfra eitleniyor. Daha nce grm idik. Saylar birer eskiterek gidersek. Sfrdan sonra tekrar 255 geliyor idi.

Bu kadar rnek verdikten sonra Micro Code Studio (MCS) ile nasl program derlenip Hex dosyas elde ediliyor birazda ona deinelim. Bildiiniz gibi Pic gibi mikro ilemciler yazlan programlar icra ederler. Bunun iin yazlan programlarn Pic kayt edilmesi (yazlmas) gerekir. Basic de yazlan programlar direkt olarak Pice yazlamaz. Bas uzantl olan bu dosyalarn nce makine diline evrilerek Pic in anlayaca biime dntrlmesi gerekmektedir.

Derleme denilen bu ilem MCS tarafndan PBP derleyicisi kullanlarak yaplmaktadr. Derlendikten sonraHex formatna dntrlen programn daha sonra yine baka bir program ve bir programlayc devre yardm ile Pice aktarlmas yani yazlmas salanr. Hem program yazma ve hem de derleme ilemi iinMicro Code Studio (MCS) program kullanlmaktadr. MCS ilk defa kurulurken baz parametrelerin ayarlanmas gerekiyor. Bunlarn banda PBPro klasrnn MCS ye gsterilmesi gerekmektedir. Bu i iin MCS de View mnsnden Pic Basic Options alt mns seilir. Bu mnde PBP nun yeri programa gsterilir. Ayn ekilde Programlayc nn yeri ve parametreleri de bu seenekte MCS ye gsterilir. Bu ilemlerin yapldn kabul ederek derlemenin nasl yapldna bakalm. Program yazmay tamamladktan sonra ekrann st tarafnda bulunan derle tuuna (bir sayfa ve zerinde saa doru ok olan tu) tklanr ise yazm olduunuz derlenir ve BAS uzantl dosyanzn yer ald klasr iine ayn isimle ancak Hex uzantl olarak kayt edilir.

Dosyann derlendikten sonra Pice yazlmas iin programlaycy altrmak gerekir. MCS bunu da otomatik yapabilir. Yine ekran stnde zerinde aa doru ok bulunan bir entegre resmi greceksiniz buda derlemeden sonra programlaycy altran tu dur. Bu tua baslnca nce program derlenir ve ardndan program

otomatik olarak programlaycya (IC-Prog) yklenerek programlayc altrlr. Size yalnzca programla tuuna basarak Hex dosyasnn Pice yazdrlmas kalr. MCS iinden IC-Prog gibi programlayclarn otomatik altrlmas iin baz parametrelerinde ayarlanmas gerekir. Bunlarn nasl yapld Hem MCS help mnsnde hem de programlayclarn aklamalarnda yer almaktadr. Bu bilgiler kullanlan programa gre deitiinden ve hepsini burada aklamamz mmkn olmadndan yalnzca n bilgi vermekle yetineceiz. Pice yazma ve Pic den okuma ilemlerinde en ok kullanlan program olan ICProg hakknda da biraz bilgi vermek isterim. IC-Prog hem seri porttan hem de paralel porttan alan programlayclarla uyumlu bir programlaycdr. Kullanm son derece basittir. Gerekli parametreler ayarlanp donanm seimi de doru yaplrsa sorunsuz olarak alacaktr. Program kullanrken dikkat edilmesi gereken en nemli nokta programlama yaparken veya programlama yaptktan sonra dorulama ileminin yaptrlmasdr. Genelde hata veriyor diye bu ilem iptal edilmektedir. Hatal yaplan bir ilemi kontrol etmez iseniz hatal olduunu nasl anlayacaksnz. Hata var ise gsterilmesinde fayda vardr. Bu nedenle Seenekler mnsnden Programlanyor alt mnsnde bulunan kutucuklarn ikisini de veya en az birini iaretlemekte fayda vardr.

Pic ile Analog Digital evirici Kullanm: Gnlk hayatta kullandmz cihazlar genelde Analog ve Dijital olarak ikiye ayrlmaktadrlar. Saysal sistemle alan tm cihazlar Dijital olarak nitelendirilmekte bunun dndakiler ise Analog cihazlar olarak nitelendirilmektedirler. Mikroilemcilerin tamam dijital cihazlardr. Zaman zaman mikroilemci bazl baz cihazlarn Analog cihazlar kontrol etmesi istenir. Zaman zamanda Analog sinyallerin ilenip deerlendirilmesi iin bu sinyallerin dijital sinyaller haline getirilmesi gerekir.

te bu gibi durumlarda Analog Digital eviriciler kullanlr. Yalnzca A/D evirici olarak retilmi entegreler olduu gibi baz Picler de bu eviriciler seimli olarak hazr bulunurlar. Burada A/D eviricisi bulunan Picler incelenecek ve kullanmlar konusunda rnekler verilecektir. Bu konuda en ok kullanlan Piclerden birisi PIC16F877 entegresidir. 40 bacakl olan bu entegrede 8 kanal ve 10 bit hassasiyette A/D eviricisi bulunmaktadr. A/D evirim prensibi genelde bir kondansatrn belirli bir referans voltaj ile arj edilip dearj iin geen srenin saylmas esasna dayanr. Elde edilen sre bilgisi ise Analog deere karlk elde edilmi olan dijital deer olarak verilir.

zerinde A/D evirici bulunan bir Pic kullanlrken yaplacak ilerin banda hangi bacaklarn ANALOG hangilerinin DIGITAL olarak kullanlacana karar vermektir. Sonra A/D evirici iin referans voltaj kaynann seimi yaplmaldr. ki trl referans voltaj vardr. Birincisi Picin kendi VDD beslemesi (+5V) dieri ise harici bir voltaj kaynadr. Tabiiki harici kaynaklar referans voltajnn 5 Volttan farkl olmas durumunda seilmelidir. imdi gelelim bu seimleri yaptktan sonra bunlar Pice nasl vereceimize. A/D eviricisi olan PiclerdeADCON registeri denilen 8 bitlik bir yazma bulunmaktadr. Genellikle bu yazma ADCON1 ad ile isimlendirilir. imdi PIC16F877 nin ADCON1 yazman inceleyelim. 2: ADCON1 REGISTER (ADDRESS 9Fh)

Bit-7: A/D Sonu Format Seme biti dir. 1 olur ise sonu saa hizalanm , ADRESH nin 6. u bitleri 0 olarak okunur. 0 olur ise sonu sola hizalanm, ADRESL nin alt bitleri 0 olarak okunur. Bit 6-4 aras kullanlmaz ve 0 olarak okunur.

Bit -3-0 aras PCFG3 PCFG0 A/D portu ayarlama kontrol bitleridir. te bu bitleri ayarlayarak portlarn seimleri yaplr. Aadaki tabloya baknz.

imdi tablo zerinde biraz kafa yoralm.

ayet PCFG3:PCFG0 bitlerini 0000 olarak verir isek bu durumda RA0-RA3 , RA5, RE0-RE2 bacaklarnn tamam ANALOG olarak ayarlanm olacak ve art referans Voltaj VDD den eksi referans voltaj ise VSS yaniGND den alnacaktr. imdi diyelim ki bize 3 adet Analog giri lazm dierleri Digital olabilir. +5V ve GND de referans voltajlar olarak kullanlacak. Bu durumda tabloya bakar isek 0100 deeri tam istediimiz ayarlamay yapabiliyor. Tablonun en son hanesinde ilk deer ka Analog giri olduunu / iaretinden sonraki deer ise harici referans voltaj girii adedini gsteriyor. Setiimiz deerde buras 3/0 olarak grlmektedir. Anlam 3 adet Analog giri ve sfr referans voltaj var demek. Zaten biz Picin kendi voltaj girilerini kullanmak istediimizden gerektende bize sfr referans girii lazmdr. Picin voltaj girileri referans voltaj olarak seildiinde Pice giren Analog voltaj deerinin 5 Voltu amamasna dikkat edilmelidir.

Bu ekilde tablonun kullanlmasn anlattktan sonra bu aamada tm girilerin Digital seilmesi konusunda deinmek isterim. Analog girilerin Digital olarak kullanlmas istenir ise tablodan sa tarafta 0/0 deerinin bulunduu

satrda PCFG3:PCFG0 deeri 0111 (Desimal 7) olarak grlr. Demek ki ADCON1=7veya ADCON1=%0111 dediimiz zaman Pic 17F877 nin Analog girileri iptal edilerek normal Digital giri ka dntrlmektedir. A/D eviricisi bulunan Piclerde aksine bir komut bulunmaz ise ilk alta A/D pinler Analog olarak alrlar. Dolaysyla bu pinleri Digital kullanmak isterseniz mutlaka Adcon1=7 komutunu vermeniz gerekir. Bu kadar bilgi bir rnek zerinde almamz iin yeterlidir. imdi bir rnek program yapalm.

rnek Program: Bu programmz AN0 yani PORTA.0 bacana balayacamz bir potansiyometre zerinden voltaj okumas yaplmasn salayacaktr. Bu durumda 1 adet Analog giri gerekiyor. PCFG3:PCFG0 deeri olarak tablodan 1110 deerini seiyoruz. Bu seenek tek Analog giri (AN0-RA0) verdii gibi Pic in voltaj girilerini de referans voltaj olarak kullanmamz salamaktadr. Devremiz aadaki gibi olacaktr.

imdi Programmz yazalm *********************************************************** ***** * Name : ADC.BAS * * Author : [ETE] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 20.04.2005 * * Version : 1.0 * * Notes : * * : * *********************************************************** ***** TRISA=%00000001 TRISB=0 TRISC=0 TRISD=0

@ DEVICE pic16F877 @ DEVICE pic16F877, WDT_on @ DEVICE pic16F877, PWRT_ON @ DEVICE pic16F877, PROTECT_OFF @ DEVICE pic16F877, XT_OSC DEFINE LCD_DREG PORTB LCD data bacaklar hangi Porta bal? DEFINE LCD_DBIT 4 LCD data bacaklar hangi bitten balyor? DEFINE LCD_EREG PORTB LCD Enable Baca Hangi Porta bal? DEFINE LCD_EBIT 3 LCD Enable Baca Hangi bite bal ? define LCD RWREG PORTB LCD R/W Baca Hangi Porta bal? define LCD_RWBIT 2 LCD R/W Baca Hangi bite bal ? DEFINE LCD_RSREG PORTB LCD RS Baca Hangi Porta bal ? DEFINE LCD_RSBIT 1 LCD RS baca Hangi Bite bal ? DEFINE LCD_BITS 4 LCD 4 bit mi yoksa 8 bit olarak bal? DEFINE LCD_LINES 2 LCD Ka sra yazabiliyor DEFINE ADC_BITS 10 A/D evirim sonucu ka bit olacak DEFINE ADC_CLOCK 3 Clock kayna (3=rc) DEFINE ADC_SAMPLEUS 100 rnekleme zaman mikro saniye cinsinden. ADCON1=%10001110 7. bit 1 yapld 10 bit sonu almak iin. HAM var word ADC den okunan ham Digital deer. VOLT var word 16 bit deiken tipi setik kullanacamz deer 10 bit olacak. Mvolt var byte Low PORTB.2 LCD R/W line Low (W), emada direkt GND ye balanabilir. LCDOut $FE,1 LCD de CLS yapar pause 200 LCD nin almas iin gerekli sredir. BASLA: ADCIN 0,HAM 0 nolu kanaldan deikenine aktar. BAK: IF ADCON0.2=1 Adcon0.2=0 olacak. Analog deeri oku ve RAW

THEN BAK evirme ilemi tamamlannca

lcdout $FE,1, HAM =,# HAM Ham=ham+1 Hesap kolayl asndan Ham deerini bir artrdk Okunan deer 0-5 volt iin 0-1024 olacandan okunacak deer bana volt deeri 5/1024 =0,0048828 olacaktr. Say ok kk olduundan bu deeri 1000 ile arpmalyz. O halde (Okuma/V)= 4,8828 bu deeri 256 ile arpar isek 4,8875 x 256 = 1250 deerini buluruz. Bu deeri kullanarak 32 bit ilem yapabiliriz. 1250 deeri (5/1024)*256 deerine karlk gelmektedir. sonuta ADC HAM deerini bu say ile arpp 256ya blersek sonucu elde etmi oluruz. ancak sonu 32 bitlik snrda olduundan bu ii 32 bit arpma ile yapyoruz ve orta bayt aldmzda ise zaten saynn 256ya blnm halini aldmzdan baka bir ilem yapmadan sonucu elde etmi oluruz. Volt=(ham */ 1250)/100 Ham ile 1250 yi 32 bit olarak arp ve 100bl Mvolt=Volt // 10 Mvolt= Volt MOD 10 Burada yeni bir komut veya ilem ekli gryorsunuz. MOD alma yani (//) kalan bulma Bir sayn baka bir sayya blnmesinden sonra kalan miktar bulma ilemine MOD

alma denir. rnek W=A//1000 , Ay 1000e bl kalan W deikenine koy anlamndadr. bizde yukarda Mili volt deerini bulmak iin volt (10 ile arplm halini) 10a blp kalan Mvolt deikenine yerletiriyoruz. Volt=Volt/10 LCDOUT $FE,$C0, PAUSE 500 GOTO BASLA VOLT=,#VOLT,,,# Mvolt

ADC ilemlerinde lmler genelde ok kararl olmaz. Bir biri arkasna yaplan lmlerde ufak tefek farkllklar grlebilir. Bu nedenle ounlukla ortalama alma metodu kullanlr. Ayn yerde birden fazla lm alnr ve sonular toplanr. Sonuta ka adet lm yaplm ise toplam, o sayya blnr. rnek vermek gerekir ise; For I=1 To 10 ADCIN 0,HAM TOPLAM=TOPLAM+HAM NEXT I HAM=TOPLAM/10 Sonuta Ham deeri 10 adet lmn ortalamasn gsterecektir ve olduka kararl bir deer olacaktr.

ADC evirme ilemlerinde en nemli husus elde edilen Ham deerin istenen deere evrilmesi iin oluturulacak formln bulunmasdr. rnein bir scaklk lm yapyorsunuz ve bir s sensr deerini lyorsunuz. 8 bitlik bir ilemde 0-255 aras deerler , 10 bitlik bir ilemde 0-1023 aras deerler bulacaksnz. Peki bu deerleri nasl scaklk deeri olarak gstereceksiniz. in nemli noktas buras. Hemen u hesaplamay yapmalsnz. 8 bit hesaplama iin , Sensr den okunabilecek en yksek deer 255 olacaktr. Peki bu deer ka derece scakla

edeerdir?. Yani Sensr n gsterebilecei maksimum scaklk ne olacaktr. Bunu sensr bilgilerinden (bilgi formu veya retici bilgilerinden) alacaksnz. Diyelim ki 120 dereceye e deerdir. O halde birim okuma bana den scaklk deeri 120/255 =0,470 derece olacaktr. Bunu Pic de kullanabilmek iin 0,470 x100 = 47 olarak bir deer elde edilecektir. Demek ki ben okuduum deeri 47 ile arpp sonucu 100 e blersem scakl bulabilirim. O halde sensr den okunan 134 dijital deerinin scaklk karl ne olacaktr diye sorduumuzda formlmz bize; Scaklk =(134 x 47)/100=62,98 derece olarak bulunacaktr. ADC konusunda sylenecek son sz olarak zerinde ADC evirici bulunan her Pic farkl zellikler tayabilir. En azndan Analog pinlerinin ayarlanmas ilemi farkl olabilir. Bu nedenle farkl Pic ler ile alrken mutlaka bilgi formlarnda belirtilen ADC zelliklerine gz atmanz tavsiye ediyorum.

Dier bir husus da program banda verilen ADC DEFINE parametrelerinin ayarlanmasdr. Bunlar; DEFINE ADC_BITS 10 A/D evirim sonucu ka bit olacak DEFINE ADC_CLOCK 3 Clock kayna (3=rc) DEFINE ADC_SAMPLEUS 100 rnekleme zaman mikro saniye cinsinden. Sras ile tekrar gzden geirirsek;

DEFINE ADC_BITS 10 ADC evirim sonucunun ka bitlik olacan ayarlamaktadr. Sonu 8 bit ise buraya 8 , 10 bit ise buraya 10 yazlmaldr. Tabiiki kullanlacak deiken tespit edilen Bit deerine uygun olmaldr. DEFINE ADC_CLOCK 3 Clock kayna (3=rc) Adc evrim ilemlerinde her bit karl bir Clock pals ile belirlenir. Clock kayna olarak Pic in osilatr veya dahili

RC osilatr kullanlr. ADC ilemlerinde Bit bana evirim sresi yaklak 1,6 mikro saniye olmaldr. Pic in kendi osilatr kullanlacak ise bu sreyi tutturmak iin sistemi altran kristal frekansna gre bir hesap yaplp gerekli parametre bulunmal ve buraya yazlmaldr. imdi rnek bir hesap yapalm. Bu hesapta kullanabileceimiz forml yledir;

Tevirim= X/Fosc. Burada X deeri 2 veya 8 veya 32 olabilmektedir. Fosc ise kristal frekans olup MHZ cinsindendir. Tevirim=1,6 us. Olduuna gre imdi diyelim ki kristal frekansmz 4 Mhz ve Picin osilatr n kullanacaz. Hesaba gre ; (00) Tcevirim=2/4 = 0,5 us kar 1,6 dan ok kk olduu iin uygun deildir. (01) Tcevirim=8/4 = 2 us kar 1,6 dan byk ve yakn olduu iin kullanlabilir. (10) Tcevirim=32/4 = 8 us kar 1,6 dan ok byk olduu iin uygun deildir. Kullanlabilir olan 8 deerinin Define komutundaki karl (%01=1) 1 dir.O halde komut

DEFINE ADC_CLOCK 1 olacaktr. Ayn hesab 20 MHz iin yapar isek; (00) Tcevirim=2/20 = 0,1 us kar 1,6 dan ok kk olduu iin uygun deildir. (01) Tcevirim=8/20 = 0,4 us kar 1,6 dan ok kk olduu iin uygun deildir. (10) Tcevirim=32/20 = 1,6 us kar 1,6 ile ayn olduundan ok uygundur. O halde komut; (%10=2)

DEFINE ADC_CLOCK 2 olacaktr. Kristal osilatr n uygun olmad durumlarda (%11=3) bu komut 3 olarak verilerek dahili RC osilatr kullanlr. En ok kullanlan seenek budur.

Son olarak;

DEFINE ADC_SAMPLEUS 100 komutunu inceleyelim.

ADC evirim ileminin dahili bir kondansatrn nce arj edilip sonra dearj olma sresinin lldn sylemi idik. Belirtilen ADC_SAMPLEUS sresi ADC ileminin balatlmasn mteakip yani ADON bit inin set edilmesini mteakip uygulanan bir gecikme sresidir ve bir yerde kondansatrn arj sresi olarak aklanr. Genelde 50-100 us dolayndaki sreler evirim iin uygun gelmektedir. Son bir rnek vererek ADC konusunu bitirelim. rneimiz 5K deerinde bir termistr n s sensr olarak kullanmna ait bir rnek olacaktr. Termistr deerini lerek ekranda buna karlk gelen scaklk deerini gstermeye alacaz. Kullanacamz termistr NTC (Negative Temperature Coefficient) tipi bir termistr olacak yani scaklk arttka diren deeri azalacak. Birde PTC tipleri mevcut olup bunlarda scaklk arttka diren deeri de artmaktadr. Programa gemeden nce baz varsaymlarmz olacak. 5 K lk termistr n deeri 25 oC de llen deeridir. Varsayalm ki 0 oC de ki deeri 6 K olsun. 50 oC de ise 3 K olsun. Bu kriterleri kullanarak programmz yazalm. Amacmz bu termistr kullanarak bir termometre yapmak olacaktr. nce devremizi verelim

5 K lk termistr 0 derecede 6 K olaca ve 50 derecede 3K ya decei iin yaklak 3K lk bir diren sabit kalmakta yalnzca 3 K lk blm deimektedir. O nedenle emada 5 K lk termistr 3K (Pot) + 3K sabit Diren olarak gsterilmitir.

RNEK PROGRAM : TERMISTOR.BAS *********************************************************** ***** * Name : TERMISTOR.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 21.04.2005 * * Version : 1.0 * * Notes : *

*

: * *********************************************************** ***** TRISA=%00000001 TRISB=0 TRISC=0 TRISD=0 @ DEVICE pic16F877 @ DEVICE pic16F877, WDT_on @ DEVICE pic16F877, PWRT_ON @ DEVICE pic16F877, PROTECT_OFF @ DEVICE pic16F877, XT_OSC DEFINE LCD_DREG PORTB LCD data bacaklar hangi porta bal? DEFINE LCD_DBIT 4 LCD data bacaklar hangi bitten balyor? DEFINE LCD_EREG PORTB LCD Enable Baca Hangi Porta bal? DEFINE LCD_EBIT 3 LCD Enable Baca Hangi bite bal ? DEFINE LCD RWREG PORTB LCD R/W Baca Hangi Porta bal? DEFINE LCD_RWBIT 2 LCD R/W Baca Hangi bite bal ? DEFINE LCD_RSREG PORTB LCD RS Baca Hangi Porta bal ? DEFINE LCD_RSBIT 1 LCD RS baca Hangi Bite bal ? DEFINE LCD_BITS 4 LCD 4 bit mi yoksa 8 bit olarak bal? DEFINE LCD_LINES 2 LCD Ka sra yazabiliyor DEFINE ADC_BITS 10 A/D evirim sonucu ka bit olacak DEFINE ADC_CLOCK 3 Clock kayna (3=rc) DEFINE ADC_SAMPLEUS 100 arj zaman mikro saniye cinsinden. ADCON1=%10001110 7. bit 1 yapld 10 bit sonu almak iin. ISI VAR word HAM VAR WORD ONDA VAR BYTE Low PORTB.2 LCD R/W line Low (W), emada direkt GND ye balanabilir. LCDOut $FE,1 LCD de CLS yapar pause 200 LCD nin almas iin gerekli sredir. BASLA:

ADCIN 0,HAM 0 nolu kanaldan deikenine aktar. BAK: IF ADCON0.2=1 THEN Adcon0.2=0 olacak. lcdout $FE,1,HAM =,#

Analog deeri oku ve RAW

BAK evirme ilemi tamamlannca HAM

50 derecede okunan ADC deeri 256 ve 0 derecede okunan 146 olduundan 0-50 derece aras okunan deer fark 110 dur (256-146) . O halde her bir derece iin okunmas gereken deer 110/50=2,2 olacaktr. Pic e uyarlamak iin okunan deeri 10 ile arpp 22 ye blersek direkt scakl bulmu olacaz. ondalk deeri de hesaplamak iin 10 yerine 100 ile arpyoruz. ISI=((HAM-146)*100)/22 onda=ISI//10 ISI=ISI/10 LCDOUT $FE,$C0, ISI=,#ISI,,,#onda,`C pause 500 GOTO BASLA

KESME (INTERRUPT) KULLANIMI: Tm bilgisayarlar ve mikroislemci sistemlerinde kullanlan bir zelliktir.Basite aklamak gerekirse, bir mikroislemciye kesme annda neler yapmas gerektigi bir program blm seklinde verilir. Akas mikro islemci kesme olutugu anda yaptg isi tamamen brakarak kesme blmne gider ve orada gsterilen isleri yapar. Kesme blmnn sonunda tekrar geriye dn komutunu alr ve nceden yaptg ise kaldg yerden devam etmek zere dner.

Bu olay gnlk hayatmzda yasadgmz bir rnekle aklayalm isterseniz. Diyelim ki bir evde yasyorsunuz ve bir gn tm aileyi topladnz. Amacnz aileye bir yangn olmas durumunda ne yaplmas gerektigini greteceksiniz. Burada yangnn meydana gelmesi bir kesme olay olacaktr. Normal yasama dzeninde hi yangn olmaz ise kesme olumayacak demektir. Ama oluma ihtimali her zaman olacaktr. Simdi bir aksam yemegi esnasnda yangn ktgn varsayalm. Kesme oluacak ve herkes nceden gretildigi gibi grevinin basna kosacak. Yangn sndrlecek ve her kes yemege geri dnecektir. iste tipik bir kesme olayna

rnek. Kesme olayn ksaca akladktan sonra Pic islemcilerinde hangi olaylarn kesme yaratabilecegine bir gz atalm.

RB0/INT KESMES: En ok kullanlanlardan birisi PortB.0 pininde meydana gelen lojik seviye degisikliginin oluturacag kesme dir. Option Yazmann 6. biti nceden ayarlanarak kesmenin sfrdan bir konumuna geiste mi yoksa bir konumundan sfr konumuna geiste mi oluturulacag belirlenir. OPTION_REG.6=0 olur ise RB0 da dsen kenarda kesme oluur. OPTION_REG.6=1 olur ise RB0 da ykselen kenarda kesme oluur. Dsen veya ykselen kenar terimi bir clock palsnn kenar sekli olarak anlaslmaldr. Kesme isleminin aktif edilebilmesi iin INTCON (interrupt control registeri) yazma kullanlr. rnegin RB0 kesmesinin aktif hale getirilebilmesi iin; INTCON.4=1 yaplmal ve daha sonra ; INTCON.7=1 degeri 7 nolu bite verilerek tm kesmeler almaldr. Bu iki deger tek bir komutlada verilebilir. Syle, INTCON=%10010000

Bu kesme aktif hale getirildikten sonra sayet bir kesme oluur ise INTCON yazma nn 1 nolu biti 0 konumundan 1 konumuna geer. Bu bit sayet tekrar 0 konumuna program iinde getirilmez ise yeniden bir kesme olumaz. Bu nedenle programn KESME blmnde bu bit sfrlanmaldr. RB0/INT Kesme kullanmn toparlamak gerekir ise; RB0/INT kesmesini kullanmak iin yaplmas gerekenler sras ile; - Programn bas ksmna ON INTERRUPT GOTO KESME komutu verilerek kesme olutugunda programn gidecegi yer (KESME) belirlenir. - RB0 pini giris olarak ayarlanacak - Gerekir ise Option Yazmann 7. biti 1 veya 0 yaplarak pullup direnleri istege gre ayarlanacak. - Option Yazmann 6 biti 1 veya 0 olarak ayarlanarak kesmenin dsen kenar veya ykselen kenardam olacana karar verilecek.

- Intcon yazmana INTCON=%10010000 degeri verilerek kesme aktif hale getirilecek. - Kesme blmne baslarken DISABLE komutu verilerek kesme annda yeniden kesme oluumuna imkan verilmeyecek. - Kesme blmnde INTCON.1=0 komutu verilerek kesmeden dolay 1 olan bayrak tekrar sfrlanr ve sonradan yeni kesme olumasna imkan tannr. - Kesme blmnn sonunda RESUME komutu verilerek programn kesme olumasndan nceki yerine dnmesi saglanr. - En sona ENABLE komutu yazlarak kesmeden dnldkten sonra tm kesmeler aktif hale getirilir. Simdi de grendiklerimizi bir rnek vererek aklayalm. rnek Programmz RB0 bacagna bagl bir tus yardm ile RA.0 bacagna bagl olan bir ledi yakp sndrsn. Program iinde tusa basld m? seklinde bir komut vermeden direkt kesme zelliginden yararlanacagz.

Yani RB0 bacagn srekli 1 konumunda tutacaz (pullu up ile). Dolaysyla bu bacag tusa basarak sfra ekersek kesme oluacak ve kesme blmnde de ledi toggle komutu ile yanksa sndrecegiz, snk ise yakacagz. Tabiiki seim olarak RB0/INT bacag dsen kenar da kesme oluacak sekilde ayarlanacaktr. nce semamz verelim;

iste Programmz; *********************************************************** ***** * Name : KESME-RB0.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 23.04.2005 * * Version : 1.0 * * Notes : * * : * *********************************************************** ***** PORTA=0 TrisA=%00000000 TrisB=%00000000 @ DEVICE pic16F628 islemci 16F628

@ DEVICE pic16F628, WDT_on Watch Dog timer ak @ DEVICE pic16F628, PWRT_ON Power on timer ak @ DEVICE pic16F628, PROTECT_OFF Kod Koruma kapal @ DEVICE pic16F628, MCLR_OFF MCLR pini kullanlmyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak ON INTERRUPT GoTo KESME kesme oluursa KESME adl etikete git. OPTION_REG=%0000000 dahili Pull up direnleri aktif edildi ayrca pullup direncine gerek yok INTCON=%10010000 Tm Kesmeler aktif ve RB0/INT kesmesi aktif TRISB=%00000001 PortB.0 giris digerleri ks yapld. TRISA=%00000000 A portu tamam ks yapld. CMCON=7 16F628 de komparatr pinleri iptal hepsi giris ks SYMBOL TUS=PORTB.0 SYMBOL LED=PORTA.0 BASLA: Ana program blmnde program bir sey yapmayacak pauseus 100 kesme olumadg mddete program goto basla bu satrlar arasnda dolasr DISABLE yeniden kesme olumas nleniyor KESME: program buraya geldiginde kesme olumus demektir. TOGGLE LED LED konum degistirdi PAUSE 1 INTCON.1=0 RB0/INT Bayrag (flag) silindi. Resume geldigin yere dn Enable kesmeler yeniden aktif. End B portunda dahili pullup direnleri vardr ve OPTION Yazmann 7. biti bunlarn aktif olup olmamasn kontrol eder. Sayet bu bit 0 ise direnler aktif, 1 ise direnler devrede degildir. Sanrm rnek her seyi aka anlatyor. Burada zellikle dikkat edilecek yer ana program blmnde pauseus 100 komutundan baska bir komut olmadgdr. Normal olarak program kesme oluuncaya kadar srekli Basla etiketi ile Goto baslakomutu arasnda dnp duracaktr. Buraya kadar aklananlar yalnzca RB0/INT kesmesinin kullanmna rnektir. PORTB (RB4-RB7) DEGSKLK KESMES :

Bu kesme tipinde RB4-RB7 bacaklarnn mevcut konumlarnda oluacak bir degisiklik sonucunda da kesme oluturulmaktadr. Bu kesme PORTB nin RB4RB7 aras bacaklarnn tamamnn giris yaplmas halinde geerlidir. Bacaklardan birisi ks yaplr ise kesme iptal olur. Kesme bir kere aktif hale getirilir ise bu 4 adet bacak degeri srekli pic tarafndan okunur. Okunan deger bir nceki ile karslastrlr. Sayet fark var ise kesme oluur. Kesme de oluan RBIF bayragnn silinmesi iin PortB nin bir kere programc tarafndan mutlaka okutulmas gerekir. Aksi taktirde bayrak silinemez ve srekli kesme oluur. Tabiiki yalnzca PortB nin okunmas bayrag silmeye yetmeyecektir. Ayrca RBIF bayragnn kesme blmnde silinmesi de gerekir. RB PORT (Rb4-Rb7) Degisiklik Kesmesinin olumas in Gerekenler : Programn bas ksmna ON INTERRUPT GOTO KESME komutu verilerek kesme olutugunda programn gidecegi yer (KESME) belirlenir. - RB4-RB7 pinleri mutlaka giris olarak ayarlanacak - Intcon yazmann 3 biti bu kesme iin ayrlmstr. Bu bit 1 yaplarak kesme aktif edilir. INTCON=%10001000degeri verilerek kesme aktif hale getirilecek. - Kesme blmne baslarken DISABLE komutu verilerek kesme annda yeniden kesme oluumuna imkan verilmeyecek. - Kesme Blmnde DURUM=PORTB seklinde port degeri okunacak - Kesme blmnde INTCON.0=0 komutu verilerek kesmeden dolay 1 olan bayrak tekrar sfrlanr ve sonradan yeni kesme olumasna imkan tannr. - Kesme blmnn sonunda RESUME komutu verilerek programn kesme olumasndan nceki yerine dnmesi saglanr. En sona ENABLE komutu yazlarak kesmeden dnldkten sonra tm kesmeler aktif hale getirilir

Bu kesmeyi bir rnekle aklayalm. Bu defa yine PortA.0 pinine bir LED bagl olsun. PortB.7 pinine bir Tus baglayalm ve bu sefer tus, pulldown yani GND ye ekili olsun. Tusa baslnca PortB.7 pinine High uygulayalm. ste baglant semamz;

Program RB (4-7) Degisiklik Kesmesi: ********************************************************** ****** * Name : KESME-RBCH.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 23.04.2005 * * Version : 1.0 * * Notes : * * : * *********************************************************** ***** PORTA=0:portb=0 TRISB=%11110000 PortB tamam giris yapld. TRISA=%00000000 A portu tamam ks yapld. @ DEVICE pic16F628 islemci 16F628 @ DEVICE pic16F628, WDT_on Watch Dog timer ak @ DEVICE pic16F628, PWRT_ON Power on timer ak

@ DEVICE pic16F628, PROTECT_OFF Kod Koruma kapal @ DEVICE pic16F628, MCLR_off MCLR pini kullanlmyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak ON INTERRUPT GoTo KESME kesme oluursa KESME adl etikete git. OPTION_REG=%10000000 dahili Pull up direnleri iptal edildi INTCON=%10001000 Kesmeler aktif ve RB CHANGE kesmesi aktif CMCON=7 16F628 de komparatr pinleri iptal hepsi giris ks DURUM VAR BYTE SYMBOL TUS=PORTB.0 SYMBOL LED=PORTA.0 SYMBOL RBIF=INTCON.0 BASLA: Ana program blm DURUM=PORTB PAUSEUS 100 GOTO BASLA DISABLE yeniden kesme olumas nleniyor KESME: burada kesme olutu demektir. TOGGLE LED LED konum degistirdi PAUSE 300 DURUM=PORTB PortB degeri okundu RBIF=0 INTCON.0=0 yapld yani RB CHANGE Bayrag (flag) silindi. RESUME geldigin yere dn. ENABLE kesmeler yeniden aktif. End TMR0 KESMES : Ram bellegin 01 adresinde bulunan zel bir yazmadr. Genellikle ad stnde zamanlayc olarak kullanlr. 8 bitlik bir saycdr. Yazlabilir okunabilir. Programlanabilen bir zel blcs (prescaler) vardr. Harici veya dahili clock palslar ile saym yapabilir. Sayma yn daima artan yndedir. Bu sayc veya zamanlayc 255 degerini astg zaman degeri tekrar sfr olur ve bu anda bir kesme oluturulabilir. Bu saycnn diger nemli bir zelligi ise arka planda yani ana programdan bagmsz alsmasdr. Ana program alsrken veya kesme olutugu andan itibaren saymasna devam eder.

OPTION Yazmacnn ilk biti frekans blme (prescaler) ayarlamas iin kullanlr. Bu bitin aldg degerlere gre blcnn aldg degerler asagda gsterilmistir. Bu blc ayn zamanda WDT iinde kullanldgndan tabloda WDT iin blc degerleride gsterilmistir.

Tablodan da anlaslacag zere sinyal kaynagndan gelen palslarn TM0 saycsn 1/1 yani direkt saydracag bir konum mevcut degildir. zellikle dsardan bir sinyal kaynagndan gelen palslarn saylmasnda lazm olacak olan bu husus iin OPTION yazmacnn 3. biti 1 (bir) yaplarak frekans blme islemi WDT iin yaplr. Bu bir nevi aldatmadr. Blme WDT iin yaplnca Frekans blc TM0 iin BayPass edilmis yani atlanms olur. Dolaysyla gelen sinyaller 1/1 olarak Timer0 tarafndan saylr. Bunu yapacagmz rnekte grecegiz.TM0 saysnn kullanlmas iin baz parametrelerin nceden ayarlanmas gerekiyor. Bunlar sras ile; 1. Saycnn sayabilmesi iin gerekli olan clock sinyalinin kaynag ne olacaktr?. Bu kaynak dahili osilatr olabilecegi gibi standart olarak PortA.4 /TOCKI bacag kullanlarak dsardan bir sinyal kaynag ile beslenebilir. Bu seim OPTION yazmacnn 5. biti olan TOCS biti ile yaplr. TOCS biti = 0 ise sinyal kaynag dahili osilatr dr. TOCS biti = 1 ise sinyal kaynag PortA.4 pinin den giren harici sinyal kaynagdr.

2. Harici sinyal kaynag seilir ise, sayacn dsen kenarda m yoksa ykselen kenarda m sayma isini yapacag OPTION yazmacnn 4. biti olan TOSE biti ile ayarlanr. TOSE Biti = 0 ise dsen kenarda sayma TOSE Biti = 1 ise Ykselen kenarda sayma yaplr. 3. Frekans blme islemi TMR0 iin mi yoksa WDT iin mi geerli olacaktr? Bunu semek iin OPTIONyazmacnn 3. biti olan PSA biti kullanlr. PSA Biti = 0 ise Frekans Blme TMR0 iin geerli, PSA Biti = 1 ise Frekans Blme WDT iin geerli olur. 4. Son olarak da Frekans blme kullanlacak ise degeri ayarlanr. Bunun iinde OPTION yazmacnn ilk 3 bitinin kullanldgn sylemistik. Tabloda verdigimiz degerlerden biri seilerek OPTION yazmacna yazlr. 5. Programn bas ksmna ON INTERRUPT GOTO KESME komutu verilerek kesme olutugunda programn gidecegi yer (KESME) belirlenir. 6. INTCON yazmacnn 5. biti bu kesme iin ayrlmstr. Bu bit 1 yaplarak kesme aktif edilir. 7. Kesme blmne baslarken DISABLE komutu verilerek kesme annda yeniden kesme oluumuna imkan verilmeyecek. 8. Kesme blmnde INTCON.2=0 komutu verilerek kesmeden dolay 1 olan bayrak tekrar sfrlanr ve sonradan yeni kesme olumasna imkan tannr. 9. Kesme blmnn sonunda RESUME komutu verilerek programn kesme olumasndan nceki yerine dnmesi saglanr. 10. En sona ENABLE komutu yazlarak kesmeden dnldkten sonra tm kesmeler aktif hale getirilir. Burada bir konuyu aklamakta fayda gryorum. Dahili veya harici osilatr kullanlmas durumunda, frekans degerinin Pice bagl kristal degerinin drtte biri olacan bilmeniz gerekiyor. Diyelimki Pic 4 MHz lik bir kristal ile alsyor. O halde TMR0 iin kullanlacak sinyal kaynag 1 MHz frekansa sahip olacaktr.

Dahili osilatr ve Frekans blc pek ok uygulamalarda kullanlr. zellikle hassas zamanlama islerinde nemli bir kullanm alan vardr. Bunlarn basnda Picin bir saat olarak kullanlmas gelir. Dahili veya harici silatr ve frekans blc kullanlarak picin her bir saniyede bir kesme oluturmasn saglayabiliriz. Sayet bu zaman hassas bir sekilde ayarlayabilir isek dogru alsan bir saat yapabiliriz. Simdi bunu bir rnek ile aklayalm.

Yapacagmz rnek de 4 MHz de alsan bir PIC16F628 kullanacagz. Dahili sinyal kaynagn kullanarak gelen sinyali 64e blecegiz. Bu durumda pic, TMR0 ile 0 dan baslayp 255e kadar sayp kesme oluturabilmesi iin ; 1 us x 64 x 256 = 16384 us sre kullanacaktr. 1 sn = 1000 ms ve oda 1000.000 us ye esit oldugundan sayet 1.000.000 us degerini 16384e blersek 61 degerini buluruz. O halde her kesme olutugunda bir baska degiskeni saydrr ve bunun degeri 61 den 62 ye getigi anda degerini sfrlayp saniye degerini bir artrrsak bir saniyelik saat palslarn yakalams oluruz. Bunu bir programda kullanarak da saat yapabiliriz. Bu rnek iin bir semamz asagdadr.

Programa gemeden nce gerekli parametrelerimizi tespit edelim; Tespitlerimizin etki alan OPTIONYazmac olacandan tm tespitleri Binary olarak bu yazmaca isleyecegiz. 1. Sinyal kaynagmz dahili osilatr olacaktr. O halde TOCS (5.bit) 0 olacaktr. OPTION_REG=%00000000 2. Frekans Blme islemi TMR0 iin olacak olup 3. bit 0 olacaktr. OPTION_REG=%00000000 3. Frekans blme (prescaler) degeri 64 olacak olup bunun TMR0 iin bit karslg 101 dir. OPTION_REG=%00000101 4. TMR0 kesmesini kullanacagmzdan INCON yazmacnn 5. biti high olacaktr. Tm Kesmeleri amak iin INTCON 7. biti high olacandan bu iki durumu tek komutta

toparlarsak, INTCON=%10100000 seklinde bir komut yazmamz gerekir. Bu asamadan sonra programmz verelim. *********************************************************** ***** * Name : KESMETMR0.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 23.04.2005 * * Version : 1.0 * * Notes : * * : * *********************************************************** ***** PORTA=0:portb=0 TRISB=%00000000 PortB tamam ks yapld. TRISA=%00000000 A portu tamam ks yapld. @ DEVICE pic16F628 islemci 16F628 @ DEVICE pic16F628, WDT_OFF Watch Dog timer kapal @ DEVICE pic16F628, PWRT_ON Power on timer ak @ DEVICE pic16F628, PROTECT_OFF Kod Koruma kapal @ DEVICE pic16F628, MCLR_off MCLR pini kullanlyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak DEFINE LCD_DREG PORTB LCD data bacaklar hangi porta bagl? DEFINE LCD_DBIT 4 LCD data bacaklar hangi bitten baslyor? DEFINE LCD_EREG PORTB LCD Enable Bacag Hangi Porta bagl? DEFINE LCD_EBIT 3 LCD Enable Bacag Hangi bite bagl ? define LCD RWREG PORTB LCD R/W Bacag Hangi Porta bagl? define LCD_RWBIT 2 LCD R/W Bacag Hangi bite bagl ? DEFINE LCD_RSREG PORTB LCD RS Bacag Hangi Porta bagl ? DEFINE LCD_RSBIT 1 LCD RS bacag Hangi Bite bagl ? DEFINE LCD_BITS 4 LCD 4 bit mi yoksa 8 bit olarak bagl? DEFINE LCD_LINES 2 LCD Ka sra yazabiliyor ON INTERRUPT GoTo KESME kesme oluursa KESME adl etikete git. OPTION_REG=%10000101 Pull up direnleri PTAL- Blme oran 1/64. INTCON=%10100000 Kesmeler aktif ve TMR0 kesmesi aktif TMR0=0 CMCON=7 16F628 de komparatr pinleri iptal hepsi giris ks SAYAC VAR BYTE

SN VAR BYTE DAK VAR BYTE SAAT VAR BYTE GUN VAR BYTE CLEAR tm degiskenler sfrland PAUSE 200 LCDOUT $FE,1 LOW PORTB.2 LCD -R/W bacag LOWa ekildi. BASLA: LCDOUT $FE,$84,DEC2 SAAT,:,DEC2 DAK,:,DEC2 SN GOTO BASLA DISABLE KESME: SAYAC=SAYAC+1 kesme sayac 1 sn= 61(sayac) x 256 (Tmr0) x 64 (blme) IF SAYAC=61 then 61 adet kesme olunca 1 sn. sre geiyor. (999424 us) SAYAC=0 saya sfrlanyor SN=SN+1 saniye degeri bir artrlyor IF SN=60 THEN saniye 60 olmus ise 1 dakika sre geti o halde SN=0 saniye sfrlanyor DAK=DAK+1 dakika degeri bir artrlyor IF DAK=60 THEN dakika 60 olmus ise 1 saat sre geti DAK=0 dakika sfrlanyor SAAT=SAAT+1 saat degeri bir artrlyor IF SAAT=24 THEN saat 24 olmus ise 1 gn geti SAAT=0 saat sfrlanyor GUN=GUN+1 gn degeri bir artrlyor IF GUN=365 THEN GUN=0 gn 365 olmus ise ENDIF gn sfrlanyor 1 yl geti ENDIF ENDIF ENDIF INTCON.2=0 TMR0 Kesme bayrag sfrlanyor RESUME ENABLE END Her ne kadar hesap sonucunda kesmenin oluturacag gecikme yaklask 1 sn hesaplanms isede pratikte program komutlarnnda bir gecikmeye sebep olaca unutulmamaldr. Yukardaki programda KESME blmnde bir ok komut bulunmaktadr. Makine dilinde her bir komut yaklask (4MHz de) 1 us sre

almaktadr. Bu nedenle hesaplama dogru olsa da saat ileri gidebilir veya geri kalabilir. Bunun iin SAYAC degeri her 61 kesme yerine 60 59 -58 kesmede bir saniye artrm yaptrlabilir. En iyisi programn yazlmas tamamlannca bir dogru alsan bir saat yardm ile sre karslastrmas yaplmal ve gerekirse SAYAC degeri ile oynanarak hassas bir ayarlama yaplmaldr.

Burada ikinci bir rnek daha verecegiz ve saatin baska ilerde nasl kullanlacagna bakacagz. Diyelim ki 4 adet tus ile kontrol edilen 4 adet rlemiz var ve bunlar bir takm sistemleri alstryorlar. Her bir rle ayr bir sistemi alstryor ve biz hangi sistemin ne kadar alstgn bilmek istiyoruz. ste yazacagmz program 4 adet tus yardm ile 4 adet rleyi alstracak ve arka planda ise TMR0 kesmesi yardm ile saatimiz alsacak. Bu programda ayrca yeni bir degisken tipi ile tansacagz. Dizi degiskeni. Dizi degiskenleri ayn isimle alrlar ancak her bir degiskenin bir indeks denilen parametresi vardr. Indeks ayr bir degisken altnda saklanabilir ve degeri degistirilerek istenilen dizi degiskenine kolaylkla ulaslabilir. Kullanm degisken tanmlarnda syle yaplmaktadr.

DEGER var Byte [4] burada deger adl degiskenin 4 ayr indeksli esidi vardr. Bunlar ; DEGER[0] DEGER [1] DEGER [2] ve DEGER [3] dr. nce programla ilgili semamz verelim;

Dikkat edilirse semada rle yerine logic prop baglanmstr. Bunlarn yerine asl devrede birer role baglanacaktr. Ancak asl amacmz programn islevini gstermek oldugundan detaya girilmemistir.

ste programmz; *********************************************************** ***** * Name : KESME-R0LE.BAS * * Author : [E.Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 23.04.2005 * * Version : 1.0 *

* Notes : * * : * *********************************************************** ***** PORTA=0:portb=0 TRISB=%00001111 PortB (RB4-RB7) ks digerleri giris yapld. TRISA=%00000000 A portu tamam ks yapld. @ DEVICE pic16F628 islemci 16F628 @ DEVICE pic16F628, WDT_OFF Watch Dog timer kapal @ DEVICE pic16F628, PWRT_ON Power on timer ak @ DEVICE pic16F628, PROTECT_OFF Kod koruma kapal @ DEVICE pic16F628, MCLR_off MCLR pini kullanlyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak DEFINE LCD_DREG PORTA LCD data bacaklar hangi porta bagl? DEFINE LCD_DBIT 0 LCD data bacaklar hangi bitten baslyor? DEFINE LCD_EREG PORTA LCD Enable Bacag Hangi Porta bagl? DEFINE LCD_EBIT 7 LCD Enable Bacag Hangi bite bagl ? DEFINE LCD_RSREG PORTA LCD RS Bacag Hangi Porta bagl ? DEFINE LCD_RSBIT 6 LCD RS bacag Hangi Bite bagl ? DEFINE LCD_BITS 4 LCD 4 bit mi yoksa 8 bit olarak bagl? DEFINE LCD_LINES 2 LCD Ka sra yazabiliyor ON INTERRUPT GoTo KESME kesme oluursa KESME adl etikete git. OPTION_REG=%10000101 Pull up direnleri PTAL- Blme oran 1/64. INTCON=%10100000 Kesmeler aktif ve TMR0 kesmesi aktif TMR0=0 CMCON=7 16F628 de komparatr pinleri iptal hepsi giris ks SAYAC VAR BYTE SN VAR BYTE[5] DAK VAR BYTE[5] SAAT VAR BYTE[5] GUN VAR BYTE DURUM var byte I VAR WORD ESKI VAR BYTE ROLE VAR BYTE CLEAR tm degiskenler sfrland PAUSE 200 LCDOUT $FE,1

BASLA: LCDOUT $FE,$84,DEC2 SAAT[0],:,DEC2 DAK[0],:,DEC2 SN[0] DURUM=PORTB & %1111 IF DURUM>0 THEN PORTB=DURUM ESKI=PORTB | DURUM*16 ROLE=NCD ESKI NCD KOMUTU SAYIDAK EN YKSEK HGH OLAN BT VERR ROLE=((ROLE>0)&%1)*(ROLE-4) BR OK S GREN TEK BR KOMUT LCDOUT $FE,$C0,ROLE=,#ROLE, ,DEC2 SAAT[ROLE],:,DEC2 DAK[ROLE],:,DEC2 SN[ROLE] PORTB=ESKI FOR I=0 TO 2000 PAUSEUS 10 NEXT I GOTO BASLA DISABLE KESME: SAYAC=SAYAC+1 kesme sayac 1 sn= 61(sayac) x 256 (Tmr0) x 64 (blme) IF SAYAC=61 then 61 adet kesme olunca 1 sn. sre geiyor. (999424 us) SAYAC=0 saya sfrlanyor SN[0]=SN[0]+1 IF ROLE=0 then ATLA SN[ROLE]=SN[ROLE]+1 saniye degeri bir artrlyor ATLA: IF SN[0]=60 THEN saniye 60 olmus ise 1 dakika sre geti ohalde SN[0]=0 SN[ROLE]=0 saniye sfrlanyor DAK[0]=DAK[0]+1 DAK[ROLE]=DAK[ROLE]+1 dakika degeri bir artrlyor IF DAK[0]=60 then dakika 60 olmus ise 1 saat sre geti DAK[0]=0 DAK[ROLE]=0 dakika sfrlanyor SAAT[0]=SAAT[0]+1 SAAT[ROLE]=SAAT[ROLE]+1 saat degeri bir artrlyor IF SAAT[0]=24 THEN saat 24 olmus ise 1 gn geti SAAT[0]=0 SAAT[ROLE]=0 saat sfrlanyor GUN=GUN+1 gn degeri bir artrlyor IF GUN=365 THEN GUN=0 gn 365 olmus ise endif gn sfrlanyor 1 yl geti ENDIF ENDIF ENDIF INTCON.2=0 TMR0 Kesme bayrag sfrlanyor RESUME

ENABLE END Sayac=61 satrnda 61 says 1 sn lik sreyi ayarlamaktadr. Program komutlarndaki gecikmeler nedeni daha hassas bir ayarlama gerekebilir. Bir saatle birlikte kontrol edilerek pic saati geri kalyorsa degeri azaltlmaldr. leri gidiyor ise artrlmaldr. Programla iligli genel aklamalar; Bu programda ileri programlama teknikleri kullanlmstr. Program satrlarn esas alarak aklamaya alsalm. LCDOUT $FE,$84,DEC2 SAAT[0],:,DEC2 DAK[0],:,DEC2 SN[0] Programda saat iin 5 adet indeks li degisken kullanlms idi. Bunun amac her bir rle iin ayr bir zaman tutmak ve sfr ile alsan indeks degerini de ana saat iin kullanmaktr. Yani saat(0) sistemin ana saati olacak Saat(1-4) aras ise her bir rleye ait olacaktr. Yukardaki komutta grldg gibi [0] indeksi kullanlms ve dolaysyla sistem ana saati LCD st satrnda ekrana verilmistir. DURUM=PORTB & %1111 Bu komutta Tuslarn hangisine basldgn kontrol etmek iin tek bir komut kullanlmstr. PORTB degeri okunarak 15 (%1111) says ile AND islemi uygulanmstr. Dolaysyla PortB nin ilk 4 biti filtre edilerek ayrlms olacak ve bu bitlerden hangisi 1 ise (tusa baslms ise) belirlenecektir. IF DURUM>0 THEN PORTB=DURUM Burada herhangi bir tusa baslms ise eski baslms olan iptal etmek ve yenisini devreye sokmak iin bu komut kullanlmstr.

AKTIF=PORTB | DURUM*16 Burada baslan tusa paralel olarak hangi rolelin aktif hale getirilecegi hesaplanmaktadr. Bir yerde baslan tuun bit degeri 4 bit sola kaydrlarak PortaB ye verilmektedir. Hangi rlenin aktif oldugunu ise asagdaki komut hesaplamaktadr. ROLE=NCD AKTIF NCD KOMUTU SAYIDAK EN YKSEK HGH OLAN BT VERR NCD komutu bir say iindeki en yksek degerlikli high olan bitin konumunu verir. rnek vermek gerekir iseSAYI=%00010000 ise NCD SAYI komutu bize 5 saysn verecektir. En yksek high 5. sradaki 1 dir. Bu komut yardm ile baslan tusa gre hangi rolenin aktif oldugunu belirliyoruz. Ancak bu belirleme bize PORTB deki sray verecektir. Yani 4-8 aras bir deger. Halbuki biz 1. Role 2. Role 4.Role demek isteriz. Dolaysyla bu degeri 1-4 aras degere indirgememiz gerekir. Burada islem aslnda basit Hesaplanan degerden 4 kartr isek bize 1-4 aras degeri verir. Ancak ya deger 0 (sfr) ise. Bu durumda 0-4 bize 65531 gibi bir deger verirki buda sistemin hata yapmasna sebep olur. Bu durumda sayet Role degeri sfr ise bu hesab yapmadan atlamamz gerekir. Akllca bir programlama mantg ile bu isi tek komutla halledebiliriz. ROLE=((ROLE>0) & %1)*(ROLE 4) BR OK S GREN TEK BR KOMUT Bu komut bizi birka defa if kullanmaktan kurtarr. Bu komut asagdaki program satrlarnn grevini yapmaktadr; IF ROLE=0 THEN Hesap yapma ve Ekrana bir sey yazma

IF ROLE>0 then ROLE= Role-4 hesabn yap Simdi komut nasl alsyor bir bakalm; (ROLE>0) & %1 komutunda (ROLE>0) ifadesi bir logik operatr kullanan bir aritmetik ifadesidir. Role>0 ise degeri 255, Role=0 ise degeri 0 dr. Dolaysyla bunu %1 ile AND islemine tabi tutar isek Role 0 dan byk olunca degeri 1, sfra esit olunca ise degeri 0 olarak gelir. Bu ifadeyi (ROLE-4) ile arpar isek istedigimizi elde etmis oluruz. Yani: 1 x (Role-4) burada Role 0 dan byk oldugundan role degeri 1-4 aras kacaktr. 0 x (Role-4) ki burada Role 0 oldugundan sonu 0 olacaktr. LCDOUT $FE,$C0,ROLE=,#ROLE, ,DEC2 SAAT[ROLE],:,DEC2 D DAK[ROLE],:,DEC2 SN[ROLE] Komutu ile aktif olan role ile o rleye ait saat degeri ekrana getirilmektedir. PORTB=AKTIF Aktif olan role ekrana verilmektedir. Kesme olumasnda kolaylk saglamak zere 20 ms lik gecikme us cinsinden dng kullanlarak verilmektedir. FOR I=0 TO 2000 PAUSEUS 10 NEXT I GOTO BASLA

Goto basla ile program tekrar basa ynlendirilmektedir. Programn Kesme ksmnda ise 1 sn lik sre Sayac=61 says ile kontrol edilmekte ve bu sre sonunda Sn=Sn+1 komutu ile degeri bir artrlmaktadr. Sn degerinin 60 gemesi halinde dakika ve paralel olarak saat ve gn degerleri artrlmaktadr. Buradaki diger nemli nokta ise o andaki ROLE degeri ki burada indeks olarak kullanlmakta esas alnarak o roleye ait saat degeri ise ayrca saydrlmaktadr. Tabiiki hibir role aktif degil ise role degeri 0 olacandan sistem ana saati saydrlmaktadr.

Bu dersimizin konusu Seri letisim. Konuya seri iletiimin ne oldugunu aklayarak baslayalm. Dijital bilgi bilindigi zere bitlerden olusmaktadr. Her bir bit ya 0 (sfr) yada 1 (bir) olabilmektedir. Bunlar yana yana gelince daha byk digital bilgiyi olusturmaktadr. rnegin 8 adet bit 1 adet BAYT bilgisini olusturmakta 16 adet bit ise 1 adet WORD bilgisini olusturmaktadr. Simdi gelelim bu bilgilerin baka yerlere aktarlmas isine. 8 bitlik bir bilginin tek bir seferde baka bir niteye aktarlmas iin 8 adet balant ucu kullanrsak yani her bir bit iin bir u kullanr isek bu bir paralel aktarma islemidir. Yine 8 bitlik bir bilgiyi baka bir niteye tek bir u kullanlarak aktarmak istersek bu bir seri aktarma islemidir. Her iki sistemde ilave ularda olacaktr. Ancak biz sadece bilginin aktarlmas iin gereken ulardan bahsediyoruz. ste zerinde duracagmz konu bu seri bilgi aktarma sistemidir.

Bu sistemde verici ve alc nite bir birlerine tek bir data hatt ile balanrlar. Verici gnderdigi bitleri belirli bir formatta yani belirli zaman iinde belirli sayda bit gnderir. Bu sekilde olusturulan senkronizasyon ile 8 adet bitin gnderilmesi yaplr ve alcda bu bitleri teker teker alr. Alc ile verici nin bireysel alsma hzlarnn farkllgndan dolay seri iletiimde bir kural vardr.

Kural birim zaman iinde gnderilen veya alnan bit says ile ifade edilen BAUD RATE yani haberlesme hz dr. Alc ve vericinin ayn senkron iinde als verislerinin yaplabilmesi iin bu hzn her iki taraf iin ayn deere ayarlanmas gerekir. Sistemin baka parametreleri de bulunmaktadr. Gnderilen bilginin invert edilmesi her baytn sonunda bir stop biti gnderilmesi , parite kontrolu vs. gibi. sin teferruatna fazla girmeden konuyla ilgili komutlarn kullanmna geecegiz. Basic de seri iletiim komutlar birka tanedir. Bunlar sras ile aklayacagz. lk komutumuz; SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item} Standart Asenkron Seri data giris komutudur. Yani baka bir seri data gnderebilen bir niteden gelen bilgiyi almak iin kullanacagmz komutlardan birisidir. Parametrelerine bakacak olur isek; SERIN komutundan hemen sonra seri datann alndg pin yer almaktadr. Burada PortA.0 veya PortB.2 gibi port pinleri kullanlr. kinci parametre Mode dir.

Komut yukardaki hali ile Mod numaralarnn kullanmna imkan tanmaktadr. Sayet komutu Mode isimleri ile kullanmak isterseniz programnzn bas tarafna ; Include modedefs.bas Komutunu ilave etmeniz gerekir. Her bir mod da bilginin dzm yoksa inver edilmis hali ilemi alndg bellidir. Sistemin default olarak ayarlanms dier parametreleri yledir.

8 data biti , no parity ve 1 stop biti seklindedir. Genel gsterim 8N1 seklindedir. dier parametre olan ve gerektiginde kullanlmayan Timeout parametresi dir ve 1 ms (milisaniye) cinsinden belirlenir. Anlam ise burada verilen sre ierisinde herhangi bir data alnmaz ise program Label parametresi ile belirlenen konuma atlar. Dolaysyla Labeli de aklams oluyoruz. Burada bir program blmnn ismi (etiketi) verilir .

Bir sonraki parametre qualifier olup belirleyici anlamnda kullanlr ve birden fazla olabilir. Genellikle dogru haberlesme yaplabilmesi iin gnderilen bilgilerin basna belirli ifadeler yerlestirilir. Bu yerlestirilen bilgilere qualifier denir. Bu bilgiler rakam olabilecegi gibi bir karekter diziside olabilir. En son parametre ise gelen bilginin depolanacag degisken simidir ve ITEM olarak gsterilmistir. Buraya kullanacagnz degisken ad yazlacaktr. rnek vermek gerekir ise ; SERIN PortA.0 , 0 , [ERO] , ISIBu komutta qualifier olarak kullanlan bilgi ERO bilgisidir. Program gelen bilgilere srekli bakacak ve nceden ERO bilgisini alr ise arkasndan gelen ilk bilgiyi ISI degiskenine koyacaktr. Aksi taktirde ISI degiskeni oldugu gibi kalacaktr. Bu sistem, haberlesmede yanls data almn nleyen gzel bir sistemdir. Dier Bir komut SERIN2 komutudur. Serin komutuna benzer bir komuttur. SERIN2 , GIRIS , 396 , [WAIT ("W"), DEC AL] Bu komutda da nce data als pini belirlenir ve pin otomatik olarak giris olarak ayarlanr. Daha sonra haberlesme hz belirlenir. Bu hz iin deiik bir hesaplama mant kullanlmaktadr. Forml yledir. Haberlesme Hz= (1.000.000/Baud Rate)-20 rnek verecek olur isek , 2400 baud iin hz hesaplayalm Hz= (1.000.000/2400)-20 = 396 olacaktr. (yukardaki komutta yazldg gibi) Daha sonra belirli bir karakter veya karakter dizisinin alnmas beklenir. Bu karekterlerden sonrada esas data Bin, hex veya dec formatl olarak alnr. dier bir komut HSERIN komutu olup yalnzca Hardware Serial Portu (USART) olan Picler iin kullanlabilir. Bu port PIC16F628 , PIC16F876, PIC16F877 gibi pic lerde bulunmakta 16F84/A da bulunmamaktadr. Dolaysyla bu komutu kullanabilmemiz

iin ncelikle kullandgmz Picin bu porta sahip olup olmadgn grenmemiz gerekecektir. Komutun kullanm sekli yledir. HSERIN {ParityLabel,} {Timeout,Label,}[Item{,...}] Bu komutun parametreleri Define komutu ile belirlenir. Bunlar; DEFINE HSER_RCSTA 90h (alma yazmacnn Enable edilmesi) DEFINE HSER_TXSTA 20h (gnderme yazmacnn Enable edilmesi) DEFINE HSER_BAUD 2400 (Haberlesme hznn belirlenmesi) Komutun kullanm sekli genelde asagdaki sekilde dir HSERIN [BILGI, DEC ZX] Bu komutta tm parametreler DEFINE komutu ile verilmistir. Dolaysyla parametre olarak yalnzca Bilgi isimli bir degisken ve arkasndan Desimal olarak alnacak olan ZX degiskeni grlmektedir. Bu komutun en nemli zelligi giris pinlerinin USART zelligine bal olarak nceden belirlenmis olmasdr. Bu pinlerin hangisi oldugu Datasheetler de gsterilmektedir ve kullanc tarafndan degistirilemez. Dolaysyla komutun kullanmnda pin ad grmezsiniz. Komutun baka bir kullanls sekli asagda gsterilmektedir. HSERIN 300,ATLA,[WAIT ("ER"),AL] Bu komutta Timeout sresi 300 ms olarak verilmis ve bu sre sonunda programn ATLA isimli etikete gitmesi saglanmstr. Komut gelen bilgiler arasnda ER karakterlerini arayacak buldugu anda pesinden gelen bilgiyi AL degiskenine yerlestirecektir. Simdiye kadar vermis oldugumuz komutlar data als komutlar idi. Ayn komutlarn bir de Data gnderme komutlar vardr ve tek fark datann gnderilmesi dir. Bu komutlarda bir data gnderme pini belirlenir.

HSEROUT komutunda bu pin standart olup degistirilemez. Ancak Serout veya serout2 komutlarnda kullanc tarafndan istenildigi sekilde tanmlanr. Seri haberlesme konusunda son olarak nemli bir konuya dikkatinizi ekmek istiyorum. Pic ve benzeri cihazlarda lojik seviyeler TTL seviyesindedir. Yani bir (1) sinyali +5V , sfr (0) sinyali ise GND seviyesindedir.

Bu cihazlar kendi aralarnda haberlesir iken arada herhangi bir seviye dzenleyici sistem gerekmez. Zira high olarak gnderilen sinyal her iki taraf iin +5V dur. Low olan ise GND seviyesindedir. Ancak pic ve benzeri cihazlar bir PC ile haberlesmesi gerektiginde gnderilen veya alnan sinyallerin seviyelerinin dzeltilmesi gerekir. Zira PC lerde High sinyali -12V , low sinyali ise +12 V dur. Bu is iin RS232 evirici entegresi kullanlmas gerekiyor. Genellikle ad MAX 232 veya CP232 olarak geer. Bu entegrenin RS232 giris ve ks bacaklar bulunmaktadr. Dolaysyla Pic den gelen sinyali (+5V veya 0V High veya Low) PC nin anlayacag seviyelere (-10V veya +10v) evirir. Ayn sekilde PC den gelen sinyalleri de Picin anlayacag seviyelere evirmektedir. Dolays ile Pic-PC aras yaplacak seri haberlesme devrelerinde bu eviricinin kullanlmas gerekir. Komutlarla ilgili bu kadar bilgi verdikten sonra rneklerimize geelim; lk rnegimiz basit bir Seri iletiim rnegi olacak. SERIN ve SEROUT komutlarn kullanarak bir rolenin alstrlmasn gereklestirecegiz. Bunun iin 2 adet Pic li devre kullanacagz. Birinci devremiz verici olarak alsacak ve zerinde yalnzca iki adet tus bulunacaktr. dier devremiz ise alc olarak alsacak ve zerinde 2 adet LED ve 2 adet Role bal olacaktr. nce emamz verelim; Proje 7/1 : Seri Ver Al

lk programmz SERI-VER.BAS

*********************************************************** ***** * Name : SERI-VER.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 11.05.2005 * * Version : 1.0 * * Notes : SERI-AL.BAS programnn vericisidir. * * : * *********************************************************** ***** @ DEVICE pic16F628 islemci 16F628 @ DEVICE pic16F628, WDT_on Watch Dog timer kapal @ DEVICE pic16F628, PWRT_ON Power on timer ak @ DEVICE pic16F628, PROTECT_OFF Kod Protek kapal @ DEVICE pic16F628, MCLR_off MCLR pini kullanlyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak CMCON=7 16F628 de komparatr pinleri iptal hepsi giris ks OPTION_REG.7=0 Dahili pull-up lar AKTF yapld ayrca pull-up direncine gerek yok PortA=0

TrisA=%00000000 PortB=0 TrisB=%00000011 SYMBOL CIKIS=PORTA.0 SYMBOL TUSA=PORTB.0 SYMBOL TUSB=PORTB.1 VER VAR BYTE PAUSE 200 VER=0 BASLA: VER=0 IF TUSA=0 THEN VER=88 gosub gonder WHILE TUSA=0 WEND endIF IF TUSB=0 THEN VER=66 gosub gonder WHILE TUSB=0 WEND endif PAUSE 100 GOTO BASLA ALT PROGRAMLARGONDER: SEROUT2 CIKIS,396,["E","T","E",ver] SEROUT2 CIKIS,396,["E","T","E",ver] return END kincisi ise SERI-AL.BAS , *********************************************************** ****** * Name : SERI-AL.BAS * * Author : [E.T.E] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 13-02-2005 * * Version : 41.00 * * Notes : SERI-VER.BAS PROGRAMININ ALICISIDIR* * : * *********************************************************** ****** PORTA=0

PORTB=0 TRISA=%00000001 A portu A.0 giris dierleri ks yapld. TRISB=%00000000 B portu tamam ks yapld. @ DEVICE pic16F628 islemci 16F628 @ DEVICE pic16F628, WDT_on Watch Dog timer ak @ DEVICE pic16F628, PWRT_ON Power on timer ak @ DEVICE pic16F628, PROTECT_OFF Kod Koruma kapal @ DEVICE pic16F628, MCLR_OFF MCLR pini kullanlyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT Dahili osilatr kullanlacak degiskenler AL VAR BYTE GIRIS VAR PORTA.0 ROLEA VAR PORTB.0 ROLEB VAR PORTB.1 LEDA VAR PORTB.6 LEDB VAR PORTB.7 B A S L A N G I CMCON=7 CLEAR PAUSE 500 PORTB=0 tm kslar low seviyesinde BASLA: SerIn2 GIRIS,396,[WAIT ("ETE"),AL] IF AL=88 THEN TOGGLE LEDA TOGGLE ROLEA ENDIF IF AL=66 THEN TOGGLE LEDB TOGGLE ROLEB ENDIF PAUSE 200 GOTO BASLA END Seri haberlesme isinde en nemli faktrlerin basnda alc ile vericiyi ayn anda kar karya getirmektir. Bunun muhtelif yollar vardr. Senkronizasyon denilen bu islem iin genelde kullanlan yntem nden bir uyandrma sinyalinin gnderilmesi arkasndan belirleme datas ve onun arkasndan ise esas gerekli olan data nn gnderilmesidir.

Uyandrma sinyali nedir diyeceksiniz buna genellikle preambl sinyali denilmektedir. Uyandrma sinyali bir sinyal kombinasyonudur. Muhtelif sekillerde olabilir. Benim kullandgm ve olumlu netice aldgm kombine sinyal asagdaki sekildedir.

- lk sinyal %10101 seklinde bir sinyal arkasndan %00000 ve onun arkasndan ise %11111 seklinde bir sinyal dir. Bunun komut karlg; SEROUT2 CIKIS,396, [REP$AA5,REP$005,REP$FF5] Haberlesmeye baslamadan nce bu komut verilerek kar taraftaki devrenin als moduna gemesi saglanr. Bu komutun arkasndan esas gndermek istediginiz bilgiler gnderilir. nce belirleme bilgisi yani; (E),(T),(E) bilgisi burada bir belirleme bilgisidir. rnek; SerOut2 CIKIS,396,[("E"),("T"),(E),EKLE] Pesinden esas gndermeniz gereken bilgi veya bilgiler dizisi gnderilir. Sonuta yukardaki rnekte EKLE adl degisken de yer alan deer gndermek istedigimiz bilgi olmaktadr. Senkron konusunda hata yaplmamas iin genelde gnderme komutu birka defa arka arkaya tekrarlanr. Sayet yazlan program satr ok az ise tek komut da yeterli olabilir. Ancak uzun programlarda gnderme komutunun artrlmas gerekir.

rnek olarak; SerOut2 CIKIS,1646,[("E"),("R"),EKLE] SerOut2 CIKIS,1646,[("E"),("R"),EKLE] SerOut2 CIKIS,1646,[("E"),("R"),EKLE] SerOut2 CIKIS,1646,[("E"),("R"),EKLE] SerOut2 CIKIS,1646,[("E"),("R"),EKLE] rnekte grldg gibi en az 5 defa tekrarlanmasnda yarar vardr. Bir mahsuru olmadg gibi yarar vardr.

Alma komutu tek olabilir. nk senkron saglandktan sonra gelen sinyallerden birini mutlaka grp alacaktr. Bu kadar aklama dan sonra daha komplike bir Seri haberlesme programna geelim.

Diyelim ki bir televizyona uzaktan kumanda devresi yapmak istiyoruz. Bu devre ile televizyonu ap kapatmak, volum kontrolu yapmak ve hem Kanal+ ve Kanaltularn kullanarak kanallar arasnda gezinmek hemde sabit kanal (1-5) tularn kullanarak kanal semek istiyoruz. ki adet pic kullanacagz. Bu sefer 16F84A kullanalm. nki devrenin asl 16F84 ile yaplms idi. Devre emasn vermeden nce baz konulara aklk getirmek gerekiyor. Volum kontrolu ve program gezinmesi yapacagz. Volum kontrolu iin digital pot kullanabilirdik. Ancak program kontrol asndan bu iside kendimiz yapalm istiyoruz. Hem Volum kontrolu hemde program gezinmesi iin 4051 (Analog swich) kullanacagz. 4051in ABC adres bacaklar 1 adet giris-ks bacag ve bu bacagn seilen adrese gre Analog olarak balanabildigi 8 adet giris-ks bacag bulunmaktadr. Volum kontrolu iin 16 kademe volum elde etmek zere 2 adet (28=16) 4051 kullanacagz ve toplamda 16 adet volum seviyemiz olacak. Program gezinme iin toplam 8 adet kanal ksmz olacak. Bahsini ettigim projeyi bizzat uygulama frsatm oldu. Sistem hala basar ile alsmaktadr. sin mantgn izah edecek olur isek, verici olarak alsan pic zerinde bulunan ;

- ama / kapama tusuna basldgnda kar taraftaki pic de bir pin high / low olacak. (toggle alsma)

- Volum+ tusuna basldgnda volum artacak yani 2 adet 4051 kslar sras ile konum degistirecek.

- Ayn sekilde Volum- tusuna basldgnda yaplan isin tersi yaplacak.

- Program+ tusuna basldgnda program kademesi bir artacak. Basl tuttuka artam devam edecek.

- Program- tusuna basldgnda bu sefer seim isi terse dnecek.

- Sabit program seme tularndan birine basldgnda ise ilgili tusa karlk gelen pin kar tarafta toggle olarak alsacak. Ancak bu pin ak olan dier pinleri iptal edip yanlca kendisi ks verecek. Bir ayrnty daha izah etmekte fayda gryorum. ki pic arasndaki balantda bir inverter (NOT) kullanlmstr. Aslnda gerekli olmayan bu eleman Seri haberlesme komutlarnda alc veya vericiden birini invert edilerek kullanlmasn gstermek amac ile yaptm.

ste emamz. Biraz karsk gibi gelebilir ama iyice takip edilirse kimin nereye bal oldugu kolaylkla grlecektir.

nce Verici Ksmna ait program verelim;

*********************************************************** ***** * Name : Verici4.BAS * * Author : [Erol Tahir Erdal] * * Notice : Copyright (c) 2005 [ETE] * * : All Rights Reserved * * Date : 11.05.2005 * * Version : 1.0 * * Notes : ALICI4.BAS programnn vericisidir. * * : * *********************************************************** ***** INCLUDE MODEDEFS.BAS TRISA=%11110 TRISB=255 OPTION_REG.7=1 pull-up lar iptal CIKIS VAR PORTA.0

VER VAR BYTE TUS VAR BYTE POZ VAR BIT poz=0 START : VER=0 TUS=PORTB IF TUS =1 Then BIR baslan veya basl tutulan tusun deeri IF TUS =2 Then IKI burada okunuyor IF TUS =4 Then UC IF TUS =8 Then DORT IF TUS =16 Then BES IF TUS =32 Then ALTI IF TUS =64 Then YEDI IF TUS =128 Then SEKIZ POZ=0:GoTo START BIR: IF POZ=1 Then START on/off tusu basl tutuluyor ise islem yapma POZ=1 VER=11 GoTo EXIT On/off tusuna ilk basld tus deeri=11 gnder. IKI: VER=22 GoTo EXIT Volum+ tusuna basld tus deeri=22 , gnder UC: VER=33 GoTo EXIT Volum- tusuna basld tus deeri=33, gnder DORT: VER=44 GoTo EXIT Program+ tusuna basld Tus deerini gnder BES: VER=55 GoTo EXIT Program- tusuna basld tus deerini gnder ALTI: IF POZ=1 Then START Sabit Program tular toggle yapacak POZ=1 VER=66 GoTo EXIT YEDI: IF POZ=1 Then START Sabit program tular toggle yapacak. POZ=1 VER=77 GoTo EXIT SEKIZ:IF POZ=1 Then START sabit program tular toggle yapacak POZ=1 VER=88 EXIT: SerOut CIKIS,T2400,[("A"),VER,13,10] tus deerini gnder, deer ters evrilmemistir GoTo START END