Pıc Dersleri | 1bilgi.com | Nedir? | Kimdir? | Kısa Bilgiler
Ana Sayfa Elektronik & Bilgisayar Pıc Dersleri
Yazar: adminTarih: Kasım 06, 2007 Kategori: Elektronik & BilgisayarYorum Yok
Çevre hardware elemanlari olmayan, RAM ve BUS içinde, I/O ünitesi kendinden olan, kompakt bir eleman olsa ve bununla periferik üniteleri kontrol etsek ne kadar da iyi olurdu…
Öyle bir eleman olmali ki, kolaylikla programlanabilmeli, benim verdigim komutlari bacaklarina baglanan perifer ünitelerde gerçeklestirebilmeli…
Dual -in-line kilifta 8/18/26/40 bacak bir entegreyi soketine takiyorsunuz ve pekçok çevre birimini kontrol ediyorsunuz. Burada gereken, biraz bilgi bir de bilgisayar… o halde Microcontroller” Amatörler için çok gerekli ve faydali bir elemandir. Içinde giris, çikis üniteleri, RAM ‘i BUS’i herseyi var, bir de program yazdin mi bu is tamam!…
Pekçok firma Mikrocontroller üretmektedir, fakat Amatörler arasinda Microchip firmasinin PIC’leri çok popülerdir.
PIC: Pripheral Interface Controller -çevre birimlerini kontrol eden ünite- demektir. RISC (Reduced Instruction Set Computer) yapisinda, Flash bellekli islemcilerdir. Çesitli pic’lerin çesitli özellikleri vardir. Bellek tipleri, seri, analog giris çikis özellikleri, bellek büyüklügü, A/D konvertör özelligi vs… gibi.
Pic 16F84’ün mimari blok diyagrami bu aşağıdadır. Burada hangi üniteler oldugu, veri transfer kelime boyu, bellek tipi, kapasitesi, diger özellikleri sematize edilmistir.
Burada 4 Mhz kristal kullanilmistir.10 Mhz ile çalisan bir 16F84’de 10 Mhz kristal kullanilacaktir. Bu temel prensipte esan olan +5 volt ile beslemek, MCLR (Master Clear Reset) pinini yani 4 nolu pini 10 K ile +5 volt’a asmaktir. Kristal yerine rezonatör de kullanilabilir. Bu halde 22 pf kondansatörlere gerek kalmayacaktir. 16 nolu pin’e osc modülü de baglayabiliriz, baglanti semalari ileride verilecektir. 4 nolu pin’i bir push-button ile sase ye baglarsak MCLR reset elde edilmis olur.
Bu sekilde çalisan bir 16F84’de sink akimi 25 mA, source akimi ise 20 mA’dir. Bu akimlar bir çevre üniteyi sürmek için gereken akimlardir. Bu akim ile transistor sürülebilir, led yakilabilir, triyak-thyristor tetiklenebilir.
CMOS entegrelerde giris uclarini +5 Volt’a baglamak gerekir.16F84 de bir CMOS entegredir, fakat burada pic içinde I/O pinleri özel sekilde baglanmislardir ve program araciligi ile giris veya çikis haline getirilir. Giris pozisyonunda bu uçlar pull-up konumundadir, yani pic içinde bir sekilde +5 volta bir direnç üzerinden bagli gibidir. Burada pull-up dirençleri 50 K kadardir.
Bir 16F84’de + gerilim ile GND uçlari arasina bir adet 0.1 uf kondansatör konmasi, istenmeyen bazi gerilim dalgalanmalarini önler.
16 nolu bacaktan girilen osilatör sinyali, pic içinde 4’e bölünür ve frekansin 1/4’ü 15 nolu bacaktan alinabilir. Bu 4’e bölünmüs saat frekansinin karsiligi olan periyota "instruction cycle"yani komut süresi denir. Bu bir komutun islenmesi için gereken zamandir.16F84’de bu 4 Mhz de 1 mikrosaniye 10 Mhz de ise 0.4 mikrosaniyedir. Bu zaman, programlama esnasinda çok önem arzeder, bu komut sürelerinin toplami ile zamanlar hesaplanir.
16F84’ün 13 ucunu da çikis olarak kulllanabiliriz. Bu çikislar A ve B diye ikiye ayrilir A çikislari 5 adettir RA0-RA1-RA2-RA3-RA4 diye adlandirilir. B çikislari ise 8 adettir ve bunlarda RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7 diye adlandirilirlar. Bu çikislar da bir tek RA4 yani TOCKI ucu digerlerinden farklidir ve bu uç açik kollektör özelligi gösterir, bu nedenle çikis olarak kullanildiginda, 10 K lik bir direnç le + 5 V a asilir.
RB0 ucu giris olarak ayarlanirsa, ayni zamanda "external interrupt" girisidir. Yine B port’un 4-5-6-7 çikislari (RB4-RB5-RB6-RB7) internal interrupt alma özelligindedir.
Pic power-on reset ile yani pic’e enerji verildiginde, baslangiç adresinden baslar. Bu durumda tüm pull-uplar iptal edilmis olur ve pic portlari çikis pozisyonundadir. Programlama ile port çikislari giris veya çikis olarak yönlendirilir, bunun için "option" register içinde de disable veya enable seçenekleri vardir. Power-on reset ile disable olan pic de tüm portlar çikistir.
Pic 16F84’ün en önemli registerleri sekilde görülmektedir. 68 GPR alaninda bizim tanimladigimiz:sayaç, timer vs… gibi registerler yazilir.
Pic Assembly: Pic’in yapmasini istedigimiz islemleri, pic’in anlamasi için, kisa komutlardan olusturulmus bir dildir. Bu dil ile yazilan program ASM dosyasi olarak kaydedilir daha sonra MPASM ile HEX dosyasi haline getirilip,pic içine yazilir.
MPLAB içinde yazip ASM olarak kaydettiginiz dosyayi , Baslat\Programlar\Microchip\MPLAB IDE v7.41\MPASMWIN’i açarak ve dosyanizi "source file name" penceresinden bularak compile edebilirsiniz. Bu sirada basarili ise yesil, basarisiz ise kirmizi uyari isareti verilir.
Basari ile compile ettigimiz hex desyasini PIC’e atmak icin elimizde bir adet programlayici kart ve bilgisayarimizda gerekli software bulunmalidir. Bu is icin bir cok sowtware vardir. Ornegin IcProg, WiinPic, PicUp. Biz su asamada hemen hemen hicbir programlayici kartla uyumsuzluk gostermeyen PicUp programini kullanacagiz. PicUpi indirmek icin Tiklayin
Ekranda Loaded HEX- File… seklinde bir mesaj belirlendiyse hex dosyaniz sorunsuz demektir. Fakat Error in Hex file… Error Loading… seklindeki bir mesaj ile karsilastiysaniz, File menusunden Settings’e girin, "Abort an error" secenegi basindaki isareti kaldirin. Bu durumda dosyanizi yuklarken yine Error in Hex File.. mesaji cikacek fakat Loaden HEX file yazisi da belirecektir. Bu mesaj hex dosyanizin yazima hazir oldugunu gosterir.
Verify Chip : PIC ‘i kontrol ederek adreslerde sorun olup olmadigini denetler.
Genel kurallara geçmeden önce son olarak su konuya da dikkatinizi çekelim. Bir program yazildiktan sonra compiler’in bunu tanimasi için ASM olarak kaydedilen bu dosya, compiler’in yani mpasmwin’in bulundugu direktörde olmalidir. Eger program yaziminda inc dosyasi kullanilmis ise o da burada olmalidir. Inc dosyasi program içinde yazili font ile klasör altinda bulunmalidir, aksi halde compiler tarafindan taninmaz.
SAYAC EQU h’0D’ ; h’0D ‘ adresinde sayac diye bir register tanimla
BSF STATUS,5 ; bank 1 ‘ e geç
Pic Assembler ile bir program yazmadan evvel, pic’in hangi adimlarla programi isleyecegini planlamamiz gerekmektedir.Bu planlama islemi akis diyagramlari ile yapilir.Akis diyagrami islenecek komutlarin sirasidir.Uzun ve karmasik programlarda, akis diyagramlari, hangi seviyeden programin ayrilacagini ve hangi komutlari yerine getirecegini, sonra tekrar nereye dönecegini göstermesi nedeni ile faydalidir. Akis diyagramlarinin kendine has sembolleri de vardir.
ETIKET : Etiketler iki tiptir. Birinci tipi adres atanan etiketlerdir, ikinci tipi ise adres atanmayan etiketlerdir.Tüm etiketler birinci blok ‘a yazilir. Adres atanan etiketler EQUATE komutu ile kullanilir veya INC. Dosyasi sayesinde tanimlanirlar. Bu etiketler sayesinde tanimlanan registerler, program içinde tekrar tanimlamaya gerek kalmadan kullanilir
BuradaPORTB ve STATUS Etikettir. EQU komutu ile tanimlanan bu registerler,daha sonra kullanildiginda, hangi adreste oldugu otomatik olarak pic tarafindan bilinir. Bir diger etiket çesidi ise adres atanmayan etiketlerdir. Adres atanmayan etiketler, pic ‘in çalismasi sirasinda dönecegi program seviyesini göstermekte kullanilir. Bu etiketler programci tarafindan yaratilirlar.
10 lu sistemdeki bir sayiyi binary ‘e çevirirken, busayiyi olusturan ,ikinin katlari seklinde yazilabilen sayilari büyükten küçüge dogru toplariz, burada ikinin her üs sayisi kullanilmalidir.Bir üs seklinde ifade edilemiyorsa 0X seklinde yazilir.Örnek :
Burada 128 den baslayarak ikinin üs ‘sü seklinde tüm üsleri kullanarak129 sayisini elde edelim.
Burada decimal 10 sayisina A karsilik olarak gelmektedir, F de 15’e karsilik olur.0 ile birlikte 16 sembol içeren bu sayi sistemi hexadecimal sayi sistemidir,bu simgeler 12 li sayi sisteminde X=10 ve Sigma=11 dir.
MAX EQU3; 3 rakami nin adi MAX olsun,-bit yönlendirmeli komutla kullanildiginda bu sabit 3.bit’e karsilik olur-.
END : Program komutlarinin sona erdigini Assembler’e gösterir,olmazsa derlemede hata mesaji verilir.
Binary sayilar B ile ifade edilirler B ‘11111111’ tarzinda yazilirlar.
Decimal sayilar D ile ifade edilirler D’255′ seklinde yazilirlar.
Pic 16F84’ün RAM belleginin iki bank’tan ibaret oldugunu söylemistik. Bunlar Bank 0 ve Bank 1’dir, degisik piclerde baska banklar da mevcuttur. Bir banktaki registerleri kullanmak için o bank’a geçmek gerekmektedir. Bank degistirmeislemleri STATUS registeri vasitasiyla yapilir.
Status register 8 bittir. Bu register’in 5. bitinin degistirilmesi ile 16F84 de bank degistirme islemi gerçeklestirilir.16F84’de Bank bitleri Status registerin 5. ve 6. Bitidir, 6. bit 0 kalmalidir.Yalniz 5. bit’in degistirilmesi bank degistirmek için yeterlidir. Tüm reset hallerinde 5. ve 6. bit 00 olur ve Pic bank 0’da bulunur.
"STATUS , RP0" "’H03′, RP0" ifadelerinde ki STATUS register adresi ve RP0 INC. Dosyasinda tanimlidir.INC dostasi kullanilmaz ise bunlar EQU komutu ile tanimlanmalidir. RP0 yerine, bit degeri olan 5 kullanildiginda bunu ayrica tanimlamak gerekmez.
Portlarin giris veya çikis olarak yönlendirilmesi için TRIS registeri kullanilir. PORTA TRISA ile PORTB TRISB registeri ile yönlendirilir.TRIS registeri 8 bittir. Her bir bit bir I/O kapisina karsiliktir. PORTB nin 8 I/O kapisi vardir,fakat PORTA da 5 I/O kapisi mevcuttur bu nedenle PORTA için TRIS registerinin ilk 5 bit’i kullanilir, diger bitler 0 olarak kalir.
MOVLW B’11010101′ ; write registere degerleri yaz
BSF TRISA, 0 ; trisa’nin ilk biti 1 olur ve porta ilk bit giris olur.
BCF TRISB, 1 ; trisb’nin 2 biti 0 olur ve portb nin ikinci biti çikis olur.
BSF STATUS,5 ;Bank 1’e gec
BCF STATUS,5 ;Bank 0 ‘a gel
BSF PORTA, 0 ;RA0 daki led ‘i yak
Buraya kadar gördüklerimizi bir program yazarak deneyelim,deneme devresinde kullanacasimiz pic in RA2 –1 nolu bacak- kapisini 10 K direnç ile + 5 V a baglayip,bir butonla topraklayalim.RB4 – 10 nolu bacak- 1K direnç ile led baglayalim.
SF STATUS,5 ;Bank 1’e geç
BCF STATUS,RP0 ;Bank 0 ‘a gel
INCF : ‘Increment File’ Bir file register ‘ e atanmis bir sayiyi bir arttirarak ,file veya write registere yazar.
DECF : ‘ DDers 10
CLRF STATUS komutu ile ilk 3 bit 0 olur TO ve PD degismez,Z 1 olur sonuç ‘ 000DD1DD’ olur,burada D =degismez anlamindadir.Durum degisikligi olmasin istendiginde ; BCF,BSF,SWAPF,MOVWF komutlari kullanilabilir,bu komutlarla STATUS register bitleri etkilenmez.
Bu programda 200 ‘ e kadar sayildiktan sonra port b de ki ledler yanar,fakat bu yine de çok kisa bir süre oldugu için göz bunu farkedemez,bu nedenle bu bir baska döngü ile kullanilabilir.Burada bu program kismi teorik bilgi için verilmistir.
RLF : Bir file register içindeki bitleri bir sola kaydirir,en soldaki bit ne olur o da gider STATUS,0 ‘a yazilir,yani CARRY FLAG ‘e gider.CARRY FLAG içindeki de en sag bite gider.
RRF : Bir file register içindeki bitlerin pozisyonunu her defasinda bir saga kaydirir.Bu kez de en sag bit,yani bit 0 yerinden atilir ve gider CARRY FLAG ‘e yazilir.CARRY FLAG içerigi ise en sol bite yazilir.
ecrement File’ Bir file registere atanmis bir sayiyi bir azaltarak,file veya write registere yazar.