CCS C İLE PİC PROGRAMLAMA DERS -1-
MİKRODENETLEYİCİ NEDİR??? Mikrodenetleyici programlanabilme, bir programı içerisinde depolayıp daha sonra çalıştırabilme özelliklerine sahip tek bir chip'ten oluşan bilgisayardır. Bu özelliği mikrodenetleyicileri mikroişlemcilerden ayıran özelliğidir.
MİKRODENETLEYİCİ NEDİR??? Mikrodenetleyicilerde bir CPU ( Central Process Unit ) , RAM ( Random Access Memory), ROM ( Read Only Memory ) , input - output ( giriş - çıkış I/O ) uçları , seri ve parelel portlar , sayıcılar ( counter ) ve bazı mikrodenetleyicilerde de Analog 'dan Digital 'e ( A/D ) ya da Digital 'den Analog 'a ( D/A ) çeviriciler (konvertör ) bulunur. Mikroişlemciler kullanılarak oluşturulan sistemlerde ise ( örneğin kullandığımız bilgisayarlar ) bu özelliklerin her biri için ayrı mikroişlemci kullanılır.
MİKRODENETLEYİCİ NEDİR??? Mikrodenetleyicileri mikroişlemcilerden ayıran diğer bir özellikleri gerçek zamanlı uygulamalarda çalışmalarıdır. Gerçek zamanlı uygulamalarda (işlemcinin dışındaki elektronik ortamdan) gelen işaretler çok hızlı değişim gösterebilir. Bu nedenle bunları işleyip gereken çıkışları aynı hızlılıkta dış dünyaya uygulamak gerekebilir. Mikrodenetleyiciler böyle bir performansı, çok küçük boyutlarda ve çok daha az güç tüketerek gerçekleştirebilirler. Sonuç olarak mikroişlemciler ve mikrodenetleyiciler temelde aynı alt yapı çalışma mantığına sahip olmakla birlikte kullanım yeri ve amacına göre iki ayrı grup ürün olarak değerlendirilebilir.
MİKRODENETLEYİCİLERE GENEL BİR BAKIŞ Günümüzde mikrodenetleyiciler; Banka ATM’leri,Eylemsiz rehber sistemleri, uçuş kontrol donanım/yazılımı ve uçak ve füzelerdeki diğer tümleşik sistemlerden oluşan havacılık elektroniği parçaları, Cep telefonları, Yönlendirici (router), timeserver ve güvenlik duvarı (firewall) gibi bilgisayar ağ ekipmanları, bilgisayar yazıcıları, fotokopi makineleri, disket sürücüler (floppy disket sürücüler ve sabit disk sürücüler), termostat, klima, sprinkler ve güvenlik izleme sistemleri gibi ev otomasyonu ürünleri, hesap makineleri, mikro dalga fırınlar, çamaşır makinesi, televizyon setleri ve DVD oynatıcı/kaydedici gibi ev elektroniği ürünleri,tıbbi ekipmanlar, çok işlevli kol saatleri, internet radyo alıcıları, TV set top box ve dijital uydu alıcılar gibi çokluortam uygulamaları, çok işlevli yazıcılar ,PDA’lar gibi küçük avuç içi bilgisayarlar, PDA ve Java ,destekli gelişmiş cep telefonları, endüstriyel otomasyon ve izleme için PLC'ler, video oyun konsolları ve avuç içi oyun konsolları, taşınabilir bilgisayarlar, telefon santralleri, otomobillerde, haberleşme cihazları, kontrol sistemleri vb. alanlarda kullanılmaktadırlar.
CCS C İLE PIC PROGRAMLAMA PIC(PERIPHERAL INTERFACE CONTROLLER)
Memory clear(reset) Vdd=Vcc=V+ GND=Vss=V- Vdd=Vcc=V+ GND=Vss=V- Kristal bacakları
Besleme Uçları ve Bağlantıları Vss=Negatif Besleme(V-) Vdd=Pozitif Besleme(V+) Besleme gerilimleri değişik durumlara göre 2V ile 5.5V arasında olabilir. Genelde laboratuvar çalışmalarında 5V idealdir.
Osilatör(Kristal) Konfigürasyonları PIC hafızasındaki komutları işlemek için bir sinyale ihtiyaç duyar. Bu sinyale clock sinyali yani saat sinyali denir. PIC bu clock sinyalini osilatör uçlarına bağlanan osilatör devresinden alır. PIC mikrodenetleyicisi, girişine bağlanan osilatör frekansını (fosc) 4’e bölerek komut işlemek için kullanır. Bu şekilde bir komutun işlenmesi için gereken zaman (clock cycle, TCY=Tkomut) ortaya çıkar. fkomut= fosc/4, Tkomut=1/fkomut Örneğin PIC denetleyici girişine 20 Mhz’lik bir osilatör bağlanmışsa PIC denetleyici bunu 4’e böler ve sonuçta 5 Mhz’lik bir uygulama frekansı ile çalışır. Bu da; fkomut= fosc/4=20Mhz/4=5Mhz Tkomut=1/fkomut=1/5Mhz=1/5.106hz=0.0000002sn=0.2 usn ‘de bir komut işleneceği anlamına gelir.
HS-Yüksek Hızlı Kristal/Resonatör Osilatör PIC denetleyicilere bağlanabilen osilatör tipleri şunlardır. LP-Düşük Güçlü Kristal Osilatör XT-Kristal/Resonatör Osilatör HS-Yüksek Hızlı Kristal/Resonatör Osilatör RC –Direnç/Kondansatör Osilatör
Kristal Osilatörler Temel Bağlantı Şekli ISIS Simülasyonunda Kullanacağımız
CCS C DERLEYİCİSİ
CCS C de proje oluşturma
CCS C ÖN İŞLEMCİ KOMUTLARI… #define :Bu komut ile sabit tanımlaması yapılır. Örnek: #define pi 3.14 #include:Bu komut ile kullanılacak mikrodenetleyicinin tanımlama dosyası derleyiciye tanıtılır. Örnek: #include<16f876.h>
#FUSES: Bu komut ile kullanılan mikrodenetleyici ile ilgili konfigurasyon bitlerinin durumu belirtilir. Örnek: #fuses HS, NOWDT… #USE DELAY: Program yazarken «delay» gecikme komutunun kullanılabilmesi için bu ön işlemci komutunun kullanılması gerekir. Bu komutun kullanımı; #use delay(clock=4000000) şeklindedir. Bu komutla derleyiciye 4 Mhz’lik(40000000hz) bir osilatör frekansında çalıştığımız bildirilmektedir. Clock ifadesi eşitliğine kullanılan osilatör frekansı hz(hertz) olarak yazılmalıdır.
#use standart_io(): PIC mikrodenetleyicilerinde hangi portun hangi pinlerinin giriş ve/veya çıkış olarak kullanılacağının programda bildirilmesi gereklidir. CCS C derleyicisinde bu iş için komut mevcuttur. Fakat derleyicide bu iş için başka komut kullanılmamışsa #use standart _io() komutu standart olarak kullanılmış sayılır. Örnek: # use standart_io(a)
CCS C PROGRAMI GENEL GÖVDESİ //Program hakkında tanıtıcı bilgiler /********************************************* Program ismi: CCS ile PIC programlama ders -1- Programın amacı: PIC16F876 ile programlama Kullanılan mikrodenetleyici:PIC16F876 Yazan: Hacettepe Robot Topluluğu *********************************************/ #include<16f876.h> #fuses HS,NOWDT,… #use delay (clock=2000000) int8 x; char bilgi; void main() { Komut veya komutlar; }
15 DAKİDA ARA ZAMANI
Port Giriş/ Çıkış İşlemleri Port giriş/çıkış komutları portların giriş veya çıkış olarak kullanılıp kullanılmayacağı, port ve/veya port pinlerinin çıkış durumlarını, port girişlerindeki bilgilerin okunması gibi işlemlerin gerçekleştirilmesini sağlayan komutlardır.
SET_TRIS_X() KOMUTU Bu komut port pinlerinin hangisinin giriş pini, hangisinin çıkış pini olacağını belirtir. Komuttaki «X» yerine işlem yapılacak portun ismi (A,B,C,…), parantez içine ise heksadesimal olarak 8 bitlik değer girilir. Pin değeri «0» girilmişse o pinin çıkış pini olarak kullanılacağı, «1» girilmişse o pinin giriş pini olarak kullanılacağı anlamındadır. Kullanımı; set_tris_x(değer); set_tris_b(0b00001111); set_tris_b(0x0F); şeklindedir. Yukarıda verilen iki örnek komutta aynı anlamdadır. Sadece birinde değer binary(ikilik taban), diğerinde heksadesimal(onaltılık taban) sayı olarak girilmiştir. Bu komut bize B portunun B0,B1,B2,B3 pinlerinin giriş olarak kullanılacağını, B4,B5,B6,B7 pinlerinin ise çıkış olarak kullanılacağını belirtir.
OUTPUT_LOW() KOMUTU Bu komut ile istenen portun istenen biti lojik-0(0 V) yapılır. Yani istenen ucun çıkışı 0(sıfır) yapılır. Komutta parantez içine işlem yapılacak pin ismi girilir. output_low(pin ismi); output_low(pin_A2); komutu ile A portunun A2 numaralı ucu lojik-0 yapılmış olur.
OUTPUT_HIGH() KOMUTU Bu komut ile istenen portun istenen biti lojik-1 (5V) yapılır. Yani istenen ucun çıkışı 1(bir) yapılır. Komutta parantez içine işlem yapılacak pin ismi girilir. output_high(pin ismi); output_high(pin_B3); komutu ile B portunun B3 numaralı ucu lojik-1 yapılmış olur.
OUTPUT_X KOMUTU Bu komut ile bir portun tüm bitlerine tek komutla çıkış değerleri yüklenir. output_port ismi (değer); output_B(0x0F); komutu ile B portunun B0,B1,B2,B3 bitlerinin çıkışları lojik-1, B4,B5,B6,B7 bitlerinin çıkışı ise lojik-0 yapılıyor(0x0F=00001111). Parantez içine yazılan değer 8 bitlik bir sayı olmak zorundadır.
INPUT() KOMUTU Bu komut ile PIC mikrodenetleyicisinin istenen pininin durumunu okumaya yarar. Yani istenen giriş pininin lojik olarak değerini okur. Bu fonksiyon istenen pin çıkış olarak yönlendirilmiş olsa bile pini giriş olarak yönlendirir ve değeri öyle okur. Değişken ismi=input(pin ismi); bilgi=input(pin_A2); komutu ile A2 pini girişinden dijital bilgi(0-FALSE veya 1- TRUE) okunmakta ve «bilgi» değişkenine aktarılmaktadır.
INPUT_X() KOMUTU Bu komut ile istenen giriş portu değeri tümüyle okunur. Değişken=input_port ismi(); data=input_c(); komutu ile C portunun komple durumu «data» adlı değişkene aktarılmış olunur. Komutta kullanılacak değişken 8 bitlik olmalıdır.
Veee ilk projemiz
KENDİ DEVREMİZİ TASARLIYORUZ… PROTEUS ISIS ÇİZİMİ
BİZİ DİNLEDİĞİNİZ İÇİN TEŞEKKÜR EDERİZ BU SLAYTIN HAZIRLANMASINDA SERDAR ÇİÇEK’İN CCS C İLE PIC PROGRAMLAMA KİTABI KAYNAK OLARAK KULLANILMIŞTIR.