1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 3 out of 5)
Loading ... Loading ...
Tem
14th

Mikrodenetleyiciler ve CCS C ile Pic Programlama Örnekleri 1

Yazar: Erdinç Keloğlu

Mikrodenetleyici Nedir?

Bir bilgisayar içinde bulunması gereken Hafıza , Giriş/Çıkış ünitesi gibi elemanların CPU ile birlikte tek bir entegre (chip) içerisinde üretilmiş haline Mikrodenetleyici denir. Böylece hem yer tasarrufu yapılıp maliyet düşürülürken hem de tasarım kolaylaştırılmış ve programlama işlemi basitleştirilmiş olur.
Günümüzde mikrodenetleyiciler otomobillerden kameralara , cep telefonlarından oyuncaklara kadar sayılamayacak alanlarda kullanılır. Mikrodenetleyiciler birçok firma tarafından üretilmektedir. Microchip , Intel , Motorola , SGS Thomson, Hitachi gibi …
Her üreticinin en az birkaç mikrodenetleyicisi vardır. Mesela ; Microchip 12C508 , 16C84 , 16F84 ve 16F877 gibi farklı mikrodenetleyicilere sahiptir ve hemen, hemen aynı komutlarla programlanırlar. Mikrodenetleyici adlarında bulunan harfler aynı aile içinde farklı özelliklere sahip (hafıza yapısı ve miktarı, hız gibi) elemanları ifade eder. Bir uygulama yapmadan önce hangi firmanın , hangi numaralı mikrodenetleyicisinin kullanılacağı tespit edilmelidir. Bunun için KATALOG (Data sheet) adı verilen kaynaklardan ya da internetteki ilgili sitelerden faydalanılır.


Bir Mikrodenetleyici İçinde Bulunabilen Bazı Özellikler Şunlardır :

1 ) Programlanabilir Dijital Giriş / Çıkış ( I / O )
2 ) Programlanabilir Analog Giriş
3 ) Seri Giriş / Çıkış ( I / O )
4 ) Darbe( Pals ) – PWM (Darbe genişlik modulasyonu) işareti çıkışı
5 ) Harici hafıza bağlanabilme
6 ) Dahili hafıza seçenekleri ( ROM , PROM, EPROM , EEPROM, Flash gibi )
7) Kesme, Zamanlayıcı ve Sayıcı gibi özellikler.

PIC Mikrodenetleyicilerin Diğer Bazı Avantajları :

1 ) Destek Yazılımları internetten ücretsiz sağlanır.
2 ) Çok yaygın ve ucuzdur. Hem profesyonel hem de amatör kullanıma uygundur.
3) İnternette ve kitap/dergilerde çok sayıda örnek programlar vardır.
4) Çok az ve basit birkaç elemanlarla ( direnç , kondansatör ) donanımları kurulabilir.
5 ) Komut sayısı az ve basittir.
6 )Daha üst seviye diller için (PIC C, PicBasic gibi) Derleyiciler’e (compiler) sahiptir.

Pic Mikrodenetleyiclerinin Özellikleri

Güvenirlik: PIC komutları bellekte çok az yer kaplarlar. Dolayısıyla bu komutlar 12 veya 14 bitlik bir program bellek sözcüğüne sığarlar. Harward mimarisi teknolojisi kullanılmayan mikrokontrolörler de yazılım programının veri kısmına atlama yaparak bu verilerin komut gibi çalıtırılmasını salamaktadır. Bu da büyük hatalara yol açmaktadır. PIC’ ler de bu durum engellenmiştir.

Hız : PIC oldukça hızlı bir mikrokontrolör’ dür. Her bir komut döngüsü 1µsn’ dir. 5 milyon komutluk bir programın 20Mhz’ lik bir kristalle iletilmesi yalnız 1sn sürer. Bu süre 386SX33 hızının yaklaık 2 katıdır. Ayrıca RISC mimarisi ilemcisi olmasının hıza etkisi oldukça büyüktür.

Komut seti : PIC’ in 16C5X ailesinde bir yazılım yapmak için 33 komuta ihtiyaç 16CXX araçları için bu sayı 35’ tir.18FXXX serisinde ise komut sayısı 75 dir. PIC tarafından kullanılan komutların hepsi yazmaç (register) temellidir. Komutlar 16C5X ailesinde 12 bit, 16CXX ailesinde 14 bit 18FXXX ailesinde ise 16 bit uzunluğundadır. PIC’ te CALL, GOTO ve bit test eden BTFSS ve INCFSZ gibi komutlar dışında diğer komutlar 1 saykıl çeker. Belirtilen komutlar ise 2 saykıl çeker.

Statik işlem : PIC tamamıyla statik bir işlemcidir. Yani saat durdurulduğunda da tüm yazmaç içeriği korunur. Pratikte bunu tam olarak gerçekletirebilmek mümkün değildir. PIC mikrosu programı iletilmediği zaman uyuma (sleep) moduna geçirilerek micronun çok düşük akım çekmesi sağlanır.

 

 

Sürme özelliği (Sürücü kapasitesi): PIC yüksek bir çıktı kapasitesine sahiptir. Tek bacaktan 40mA akım çekebilmekte ve entegre toplamı olarak 150mA akım akıtma kapasitesine sahiptir. Entegrenin 4mHz osilatör frekansında çektiği akım çalışırken 2mA, stand-by durumunda ise 2µA kadardır.

Seçenekler : PIC ailesinde her türlü ihtiyaçların karılanacaı çeitli hız, sıcaklık, kılıf, I/O hatları, zamanlama (Timer) fonksiyonları, seri iletiim portları, A/D ve bellek kapasite seçenekleri bulunur.

Çok yönlülük : PIC çok yönlü bir mikrodur ve ürünün içinde, yer darlığı durumunda birkaç mantık kapısının yerini değitirmek için düşük maliyetli bir çözüm bulunur.

Güvenlik : PIC endüstride en üstünler arasında yer alan bir kod koruma özelliğine sahiptir. Koruma bitinin programlanmasından itibaren, program belleğinin içeriği, program kodunun yeniden yapılandırılmasına olanak verecek ekilde okunmaz.

Geliştirme: PIC program geliştirme amacıyla programlanabilip tekrar silinebilme özelliğine sahiptir. (EPROM, EEPROM) Aynı zamanda seri üretim amacıyla bir kere programlanabilir (OTP) özelliğine sahiptir.

Liste dosyası : Assembler tarafından yaratılan ve kaynak dosyadaki tüm komutları hexadecimal sistemdeki değerleri ve tasarımcının yazımı olduğu yorumlarıyla birlikte içeren bir dosyadır. Bir programı bug’lar dan arındırırken kullanılacak en yararlı dosya budur. Çünkü bu dosyayı izleyerek yazılımlarda neler olup bittiğini anlaşılması kaynak dosyasından daha fazladır. Dosya uzantısı .LST dir.

Projede Kullanılan Mikrodenetleyiciler

Projemde 16F877 ve 18F452 olmak üzere iki farklı mikrodenetleyici kullandım.Ağırlıklı olarak 18F452 kullandığım için bu denetleyicinin özelliklerini şöyle sıralayabiliriz;

• Yüksek hızlı RISC ilemciye sahiptir;
• 75 adet komut mevcuttur;
• Tüm komutlar 1 saykıl çeker
• 40 Mhz’ye kadar işlemci hızına sahiptir
• 32Kbyte flash hafıza
• 256 byte eeprom bellek
• Power-on Reset (POR), Power-up Timer (PWRT)
• Watchdog Timer (WDT);
• 10 bit analog/dijital çevirici
• Programlanabilen kod koruma;
• Enerji tasarrufu için uyku (SLEEP) modu;
• Tamamen statik dizayn;
• Devre üzerinde seri programlama
• 5 V’luk kaynak ile çalışma
• Düşük güç harcama

< 2 mA typical @ 5V, 4 MHz
20 mA typical @ 3V, 32 kHz
< 1 mA typical standby

pic18f4522.JPG

18F452 nin pin bağlantıları verilmiştir.Bu bağlantıları kısaca açıklarsak;
Denetleyici toplam 5 porttan meydana gelmektedir.Bunlar A,B,C,D ve E portlarıdır.Bütüm portlar dijital giriş/çıkış olarak kullanılabilir.
A portu 6 giriş/çıkışa sahiptir ve dijital giriş çıkış olarak kullanılabilir.
B portu 8 giriş/çıkışa sahiptir.Bu portun 0,1,2,3,4 nolu pinleri harici kesme girişi olarak kullanılabilir.
C portu 8 giriş/çıkışa sahiptir.Pwm, capture/compare, spi ve bilgisayar ile seri iletişim kurma gibi işlevleri vardır.
D portu 8 giriş/çıkışa sahiptir.Paralel slave port ile mikroişlemci portu olarak kullanılabilir.
E portu 3 giriş/çıkışa sahiptir.Analog/dijital çevirici olarak kullanılabilir.
Şekilde 18F452 nin bellek miktarları ve önemli özellikleri görülebilir.18F452 nin mikrodenetleyici sistemlerinde ortaya çıkabilecek çoğu ihtiyacı karşılayabileceği bu tablodadan da anlaşılmakta. 18F452 hakkında daha detaylı bilgi için www.microchip.com adresi ziyaret edilerek katalog bilgileri elde edinilebilir

Uygulamalar

Yürüyen Işık, Analog/Dijital Çevirici ve Pwm Uygulaması
yuruyenproteus.JPG
Şekilde devresi görülen uygulama mikrodenetleyiciyi programlama ve çevre birimlerinin kullanılmasını öğrenilmesi açısında çok yararlı oldu.Devrede “Yürüyen Işık” butonuna basıldığında ledler soldan sağa ardından sağdan sola kaymaya başlar, “ADC” butonuna basıldığında RV1 potu aracılığıyla RA0 pininden alınan analog bilgi mikrodenetleyici tarafından ledler üzerinden dijital bilgiye dönüştürülür.”PWM” butonuna basıldığında ise doluluk/boşluğu RV1 potu ile ayarlanabilen frekansı sabit kare dağla elde edilir ve bu dalga devredeki osiloskop aracılığı ile gözlemlenebilir.

NOT:C dilinde // karakterlerinden sonra yazılan ifadeler derleyici tarafından işlenmez.Bu karakterlerden sonra kullanılan tanımlamalar genelde açıklayıcı ifade olarak program kodunda yer alır.

#include "18F452.h"
#device ADC=8
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)        //4 Mhz osilatör hızı
#byte porta = 5         //porta tanımlaması
#byte portb = 6        //portb tanımlaması

void isik(void);      //////////////////////////////////
void adc(void);       // Kullanılacak fonksiyonlar tanımlandı  //
void pwm(void);       /// ///////////////////////////////

void main() {
while(true){
output_low(pin_c2);  // pwm i açıp kapattıktan sonra çıkış değerinin
// +5 de kalması engelleniyor.

if (bit_test(porta,1) == 0) isik();           //porta 1.buton yürüyen ışığa geç
delay_ms(100);

if (bit_test(porta,2) == 0) adc();             // porta 2.buton adc'e geç
delay_ms(100);

if (bit_test(porta,3) == 0) pwm();
delay_ms(100);                  // porta 3.buton pwm'e geç..

output_b(0xff);         //////////////////////////////////////////////////
delay_ms(100);         //bir butona basılana kadar bu efekt devam eder..//
output_b(0x00);        ///////////////////////////////////////////////////
delay_ms(100);
}}

/////////////////////////////* Yürüyen Işık Fonksiyonu**/////////////////// void isik (void) { while(true){ output_b(0b00000001); sol: if (bit_test(PORTB,7)) goto sag; delay_ms(200); PORTB<<=1; goto sol; sag: if (bit_test(PORTB,0)) goto sol; delay_ms(200); PORTB>>=1; goto sag; }} ///////////////////* Analog Dijital Çevirici *//////////////////// void adc (void){ int i; long deger,max,min; setup_adc_ports(RA0_ANALOG); // sadece RA0 pini analog olarak tanımlandı //diğer pinler digital giriş/çıkış setup_adc(adc_clock_internal); set_adc_channel(0); // RA0 giriş olarak belirleniyor while(true){ delay_ms(1); deger=read_adc(); //analog deger RA0 girşinden okunuyor output_b(deger); //B protunda analog değer dijital olarak gösterilir } ////////////////////// PWM FONKSİYONU //////////////// void pwm (void) { long deger; setup_ccp1(ccp_pwm); //Yakalama modu PWM olarak ayarlandı. setup_timer_2(t2_div_by_16, 255,1); //PWM ferakansı ayarlandı setup_adc_ports(RA0_ANALOG); setup_adc(adc_clock_internal); set_adc_channel(0); while(true){ deger=read_adc(); set_pwm1_duty(deger); }} ////////////////// PROGRAM SONU //////////////

Benzer Yazılar


Bir Yorum “Mikrodenetleyiciler ve CCS C ile Pic Programlama Örnekleri 1”

  1. dursununal Ara 17, 2009

    amatörce pic yazma denemeleri yapıyorum projenizi beğendim kodun adc kısmını yaptığım bir denemede kullanacağım sadece 2 eksiğim var
    1:girişteki trimpottan istediğim voltaja set edeceğim 1 butonla eproma yazmam lazım
    butona basınca çıkıştaki ortadaki ledi (Yeşil)
    yakacak 25mlv azalınca bir ledi (sarı) tam tersi 25mlv artınca mavi ledi yakacak girişte voltaj yoksa kırmızı ledi yakacak
    2:bunu 452 de eğil 16876 da yapmam lazım
    yardımınız olurmu selamlar

Yorum yapın