Apple Hile Dünyası Mikroc ile pic programlamayı öğreniyoruz DERS-4 « Electronic TR Webmaster Blogu -->

Mikroc ile pic programlamayı öğreniyoruz DERS-4

Etiketler :

MikroC Dersleri 4

mikroc-dersleri-4
Merhaba elektronik Severler…
Bir önceki dersimizde Döngüler konu başlığı altonda for while do while döngülerini ve ilgili programları inceledik.
Bugün Dersimizde bugüne kadar gördüklerimizi uygulamalarda kullanmaya çalışacağız ve dizilere değinip kısa bir örnek program yazıp dersimizi bitireceğiz.
C ile pic progralmalaya hakim olmak istiyorsak bu dersimizden sonrası bizim için çok önemli. Tabiki ilk derslerde temel oluşturmak açısından önemli yer etmektedir.
Dersimize başlamadan önce işimize yarayabilecek kısa ip uçları vereyim.
• Pic programına dahil ettiğimiz değişken değerleri veya sayılar dış dünyada ikilik sayı sisteminde olan karşılıkları ile aktarılır.Yani örneğin PORTB=5; şeklinde yazdığımız bir programın gerçek dünyadaki görüntüsü (portb 8 bittir) 00000101 şeklindedir.
Bir programa değişken değerlerini onluk olarak (1,2,3,7,5 gibi), ikilik olarak (PORTB=01010011,1111111,01010111gibi) yada hexadecimal olarak (onaltılık sayı sistemi)(PORTB=0x0A,0×14,0×15,0xff,0×00) gibi yazılmalıdır.
• Pic seçimi yaparken pic donanımsal özellikleri pin sayıları, pwm, adc, comp modülleri var mı işimize gerekiyor mu yazacak olduğumuz programın kaplayacağı boyut ne kadar olacak pic hafızası bu alana yetecek mi, pic ne kadarlık hızı destekliyor gibi özelliklerine dikkat edilerek seçilmelidir.
• Projelerimizde çoğunlukta kullanacağımız 16F628A dahili osilatöre sahiptir.1 tane donanımsal pwm modülüne sahiptir.3tane 10bitlik Analog dijital çevirici (adc) modüle sahip bir işlemcidir. 20Mhz hıza kadar çalışmaktadır.
 Pic devrelerinde besleme gerilimini 5V a sabitlemek için 7805 pozitif gerilim düzenleyici entegreleri kullanılmaktadır.
 Projelerde 16F628A için MikroC proje ayarlarını resimdeki gibi yapın.Bu ekran Project sekmesi içinde edit Project penceresidir.
microc-dersleri-configuration-bits
Eveeett Gelelim dersimize. Bu dersimizde 7segment display kullanarak 0-9 arası sayac oluşturalım Ve ikinci uygulama olarak Bir butona her bastığımızda gösterilen değeri bir artıran programı yazalım. Programımızı yazmadan 7 segment displayda karakter oluşturmak için bu displayleri inceleyelim.
microc-7segment
Bu degerler harflere göre verilmelidir. Aşagıdaki tabloda harflere göre kodlar mevduttur
microc-bdc-inputs-segment-outputs
Displayler iki çeşittir ortak katotlu yada ortak anotlu displayler piyasada yaygındır. Biz programlarımızda ortak katotlu kullandığımızı varsayacağız. Bu displayleri çıkış uçlarından sırası ile pic portlarına bağlarsak pic portlarınada hangi sayıyı oluşturmak istiyorsak ona uygun kodu göndermemiz gerekmektedir.
7 Segment display animasyonu (kaynak : http://talkingelectronics.com)
7-Segment-Display-0-9-Animation
Ayrıca kendi hazırladığım exel 7 segment kod dönüştürücüsüde ekte mevcuttur.
İlk programımız 0-9 arası 1saniye ara ile sayan sayıcı programı
unsigned char sayac=0;/*değişkenlerin ilk değeri burada verilebilir*/
void main() {
/*PORT AYARLAMALARI YAPILACAK GİRİŞ ÇIKIŞ AYARLARI Ve varsa Analog ve Karşılaştırıcı MOdüller Ayarlanır*/
TRISB=0x00;
PORTB=0;

TRISA=0;
PORTA=0;
CMCON =0x07;/*Comparator(karşılaştırıcı) kapatıldı Pinler dijitale ayarlandı*/

for(;;){ /*Program sonsuz döngü içinde çalışacak for(;;) sonsuz döngü */
if (sayac==0)PORTB=63;
if (sayac==1)PORTB=6;
if (sayac==2)PORTB=91;
if (sayac==3)PORTB=79;
if (sayac==4)PORTB=102;
if (sayac==5)PORTB=109;
if (sayac==6)PORTB=125;

if (sayac==7)PORTB=7;
if (sayac==8)PORTB=127;
if (sayac==9)PORTB=111; /*buraya kadar sayıları Display görüntü karşılıkları portbye gönderiliyor*/
/*sayma işlemi 1saniye ara ile yapılıyor*/
sayac=sayac+1;/*sayac değişkeni bir artırılıp tekrar sayac değişkenine yazılır.*/
if(sayac==10)sayac=0;/*sayac değeri kontrol ediliyor ve 9a kadar saymasını istediğimiz için sayac10 olur olmaz sıfırlıyoruz*/
delay_ms(1000);
}
}
Siz de bu uygulamayı kendiniz değişik şekillerde yapın. (if yerine else if kullanmayı yada switch case yapılarını kullanmaya çalışın)
Şimdi buton kontrolünde sayıcı programını yazalım
unsigned char sayac=0;/*değişkenlerin ilk değeri burada verilebilir*/
void main() {
/*PORT AYARLAMALARI YAPILACAK GİRİŞ ÇIKIŞ AYARLARI Ve varsa Analog ve Karşılaştırıcı MOdüller Ayarlanır*/
TRISB=0x00;
PORTB=0;
TRISA=0x01;
PORTA=0;
CMCON =0x07;/*Comparator(karşılaştırıcı) kapatıldı Pinler dijitale ayarlandı*/
for(;;){ /*Program sonsuz döngü içinde çalışacak for(;;) sonsuz döngü */
if (sayac==0)PORTB=63;
if (sayac==1)PORTB=6;
if (sayac==2)PORTB=91;
if (sayac==3)PORTB=79;
if (sayac==4)PORTB=102;
if (sayac==5)PORTB=109;
if (sayac==6)PORTB=125;
if (sayac==7)PORTB=7;
if (sayac==8)PORTB=127;
if (sayac==9)PORTB=111;
if(PORTA.B0==1){ /*eğer butona basılmışsa artırma işlemi yapılır ve bir süre beklenir butondan elimizi çekmemişsek değer artmaya devam eder*/
sayac=sayac+1;/*sayac değişkeni bir artırılıp tekrar sayac değişkenine yazılır.*/
if(sayac==10)sayac=0;/*sayac değeri kontrol ediliyor ve 9a kadar saymasını istediğimiz için sayac10 olur olmaz sıfırlıyoruz*/
delay_ms(200);
}}}


Buraya kadar geçen haftaların tekrarını da yapmış olduk.
Şimdi gelelim dizilere.
Diziler iyi bir programcı olmayı düşünüyorsak bilmemiz gereken en önemli kullanımlardan biridir.Hemen hemen tüm programlardadiziler oldukça yoğun kullanılmaktadır.
Örneğin bir fabrikada on ayrı yerin sıcaklığını ekrana belirli süre aralıklarıyla yazdırmamızı sağlayan bir program gerekli olsun. Bu fonksiyonun kabaca yapılışı
Yazdır_1.sıcaklık;
Bekle
Yazdır_2.sıcaklık;
Bekle
Yazdır_3.sıcaklık;
:
:
Yazdır_10.sıcaklık,
Şeklinde 10 satır yazmamız gerekir tüm programlarımızı bu şekilde yazarsak bize sayfalar yetmeyecektir buda iyi bir programcıda olması istenmeyen bir özelliktir. İyi programcı bir işi kabaca ve uzun uzadıya yapmak yerine fonksiyonları kullanarak en kısa satırda yapmalıdır.
Bunu dizilerle yapabilmemiz için öncelikler programımıza dizi tanımlaması yapmamız gereklidir.
Bu tanımlamayı önceki derslerimizde değindiğimiz gibi değişken tanımlamadaki kurallara uygun yapmamız gerekir.
Şimdi sıcaklık dizisini tanmlayalım
Dizimiz kaç değeri tutacak bunu belirlemeliyiz Üstteki tanımlamalar için 10 değer tutacak
Sicaklik[10]={0,1,2,3,4,5,6,7,8,9}/*buraya 0n değer yazılabilir*/
1.ortamın sıcaklığı=Sicaklik[0];
Bekle
2.ortamın sıcaklığı=Sicaklik[1];
Bekle
3.ortamın sıcaklığı=Sicaklik[2];
:
10.ortamın sıcaklığı=Sicaklik[9];
Burada da mı on satır yazdık sanki !?.
Hayır buradaki yaptığımız 10satır işin mantığını kavramak için Bakın 10 satırı (bu 100, 500de olabilir) nasıl kolaylıkla yazacağız.
İnt sayac;
For(sayac=0;sayac<10;sayac++){
(Sayac+1).ortamınsıcaklıgı=sicaklik[sayac]
Bekle;
}
Burada yazdığımız programı incelersek
İlk değeri 0 olan sayac
Sayac+1 =1;olur
1.ortamınsıcaklığı=sicaklık[0]; sıcaklık dizisinin 0. Değeri 1 ortamla eşleştirildi
Bir süre bekledik for döngüsü içinde sayac 1 oldu
Sayac+1=2;olur
2.ortamınsıcaklığı=sicaklık[1];
:
:
:seklinde döngü 10 defa gerçekleşir ve on ayrı ortamın sıcaklığı 4 satırda yazılmış olur.
Şimdi konuyu pekiştirmek adına Üstteki sayaç örneğini dizi ile yapalım
unsigned char sayac=0;/*değişkenlerin ilk değeri burada verilebilir*/
unsigned int display[10]={63,6,91,79,102,109,125,7,127,111}; /*display göstergeleri burada tanımlandı*/
void main() {
/*PORT AYARLAMALARI YAPILACAK GİRİŞ ÇIKIŞ AYARLARI Ve varsa Analog ve Karşılaştırıcı MOdüller Ayarlanır*/
TRISB=0x00;
PORTB=0;
TRISA=0x01; /*PORTA.B0  girişe yönlendirildi*/
PORTA=0;
CMCON =0x07;/*Comparator(karşılaştırıcı) kapatıldı Pinler dijitale ayarlandı*/
for(;;){ /*Program sonsuz döngü içinde çalışacak for(;;) sonsuz döngü */
PORTB=display[sayac];/*sayaci display içine yazdık ve sayaç kaç ise örneğin5  display dizsinin 5.elemanı olan 6nın göstergesi portbye gönderilir*/
if(PORTA.B0==1){ /*eğer butona basılmışsa artırma işlemi yapılır ve bir süre beklenir butondan elimizi çekmemişsek değer artmaya devam eder*/
sayac=sayac+1;/*sayac değişkeni bir artırılıp tekrar sayac değişkenine yazılır.*/
if(sayac==10)sayac=0;/*sayac değeri kontrol ediliyor ve 9a kadar saymasını istediğimiz için sayac10 olur olmaz sıfırlıyoruz*/
delay_ms(200);
}}}

Ve programımızın dizi ile yapılmış hali işlemi nekadar kısalttı :) Bu dersimizde bukadar arkaadşlar.dizi programının dosyaları ekte mevcuttur.
İyi çalışmalar diliyorum
Kolay gelsin.
aytacdurgen@gmail.com

0 yorum: