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

Mikroc ile pic programlamayı öğreniyoruz DERS-5

Etiketler :

MikroC Dersleri 5

mikroc-dersleri-5
Merhaba elektronik Severler…
Bir önceki dersimizde Döngüler Kontrol deyimleri ve değişkenleri ugulamalarda kullandık programcılığımızı biraz daha geliştirdik.Ayrıca dizileri gördük ve bunun da uygulamasını inceledik.
Bugün Dersimizde Dizileri biraz daha kullanacağız MikroC de buton yapısını kullanıp Tek portla çoklu Kontrol (TARAMA YÖNTEMİ) üzerinde durup dersimizi sonlandıracağız. Ama bende alışkanlık yapan kısa hatırlatmalar vermeden geçemeyeceğim.
“C ile pic progralmalaya hakim olmak istiyorsak bu dersler 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.
  • Pıc Devresi tasarlanırken Kullanılmayacak olan pinler çıkış olarak ayarlanmalı ve Baskı devrede bu pinler (-) hattına bağlanmalıdır. Bu durumda pic için muhtemel kararsız çalışmalar önlenmiş olur.
  • Pic PORTLARININ sadece üç pinini kullanarak PORTLARI istediğiniz bit(basamak)kadar artırılabilirsiniz. Buna SPİ (serial Prepheral İnterface) seri haberleşme denir. Tarama yöntemlerinde sıklıkla kullanılır.
  • Bir Projenin baskı devre uygulamasını yapıp çalışmadan önce (Pic devreye Takılmadan Önce) Devre üzerindeki besleme noktalarını ölçünüz. Eğer pic beslemesi 5 volt olduğunu gözlemlerseniz pic montajını yapınız.Olası besleme hatalarından dolayı PİC yanmayacaktır.
Arkadaşlar bu dersimizde de 7segment display kullanarak geçen haftaki gibi sayac oluşturalım fakat bu sefer işi bu sefer zorlaştıralım 99a kadar sayacımızı saydıralım. Sayac değerlerini displayda göstermek için karakter değerlerini yine diziler ile tanımlayalım ve görüntüleme işini yapalım.

Şimdi sizlere birkaç soru?

0 99 sayacı yapacağımıza göre kaç adet 7segment display kullanacağız? Ve displayleri çalıştırmak için kaç adet pine ihtiyacımız olacak? Kullanacak olduğumuz pic in kaç adet çıkışı var? Cevaplar mı Hadi bakalım biraz düşünün :D
2 adet 7 segment display kullanacağız. Displayların 7+7 =14+2pin Besleme pini olacak Pic çıkışı 14. Biz birde buton kullanıyoruz kaldı 13pin. Tüh biz 16f628a kullanamayacakmıyız şimdi bu işte.
Bir pin boşta kalıyor?
Hayır Tabiki de kullanacağız. Hem istersek 999999….. sayan program bile yaparız.
E peki bunu nasıl yapacağız ?
Cevappp Tabiki tarama yöntemi ile. Tarama yöntemini kısaca açıklayacak olursak Direk olarak bu yönteme göz yanıltma diyebiliriz.
İnsan gözü saniyede 15 defadan fazla tekrarlanan olguları sabit görürler. Örnek verecek olursak hızlı giden bir otomobilin yanından geçerken cantlarını duruyor ki görüntüsüne çok yakın bir şekilde duruyor gibi görürüz.
Evlerimizde aydınlatmaları hep sabit yanıyor gibi görürüz oysa saniyede 100 defa yanıp sönmektedir.Veya dükkan vitrinlerinde kullanılan kayan yazılar biz orada yazıları net bir şekilde görmekteyiz oysa yazı karakterlerindeki bütün ledler aynı anda hiç bir zaman yanmazlar hepsi göz aldatması olan saniyede çok defa tekrardan ibarettir.
Şimdi gelelim bizim sayacımıza. Biz iki displaylerin aynı bacaklarını birleştirip picin aynı pinine bağlayalım.(iki displayin1.uçları birleşip pice 2.uçları birleşip pic3…)
Şimdi toplamda 7pin+2pin beslememiz oldu yani pic in toplamda 9 pinini kullnıyoruz.hatta 4 pinimiz de boşta kaldı neler yapılmazki bu 4 pinle :D
Peki sayac görüntüsünü nasıl oluşturacağız. Şimdi programda bir sayac tanımlayacağız 0 99 a kadar sayacak. Ve biz bu sayacı birler ve onlar basamağı olarak iki basamağa böleceğiz.
Artık iki hanenin bilgisi ayrı ayrı programımıza aktardık. PORTBye önce birler basamağını göndeririz ardından birleri gösterecek displayın eksisini bağladığımız transistor ün Pic çıkışını aktif yaparız ve birler görüntülenir. Bir süre sonra (5-10mili saniye);transistör çıkışı pasif yapılır ve PORTBye onlar basamağı bilgisi gönderilir ve onların bağlı olduğu transistör aktif yapılır birler hanisindeki süre kadar bekleme yapılır ve bu olay sürekli olarak gösterilir.
1 saniyenin 1000ms olduğu bilindiğine göre ortalamadaniyede 80 90 defa sıralı bir şekilde birler onlar görüntüsü gösterilir. Ve böylece az sayıda pinle çok basamaklı display çalıştırılır. Siz sayacı yapın tarama yöntemini kullanarak dot matris led ekranda bile görüntüleme yapacaksınız.
Şimdi bukadar bahsini yaptığımız olayın programını da yazalım bakalım. Ama değerli öğrencilerim benden 99a kadar saydırma yeter size ödev haftaya 999 a kadarını siz kendiniz yapacaksınız.

7Segment display ile 99 sayaç programı

unsigned char sayac=0,birler,onlar;/*değişkenlerin ilk değeri burada verilebilirve basamak değerleri burda tanımlanıyor*/

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ü */

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.*/

delay_ms(100);}

PORTA=0x02;/*Birler basamağının transistörü PORTA.B1e bağlı bu çıkış aktif yapılıyor*/

delay_ms(5);

PORTB=display[onlar];/*sayaci display içine yazdık ve sayaç kaç ise örneğin5  display dizsinin 5.elemanı olan 6nın göstergesi portbye gönderilir*/

PORTA=0x04; /*onlar basamağının transistörü PORTA.B2yebağlı bu çıkış aktif yapılıyorPORTB.B1 pasif yapılıyor*/

delay_ms(5);

PORTB=display[birler];

birler=sayac%10;    /*sayaç ona kadar saydırılıyor ve basamak değeri olan birlerini içine yazılıyor.*/

onlar=(sayac/10)%10;/*sayacın her on saymasında değer bir artırılıyor buda onlar basamağına yazılıyor.ve bu değerde 10u sayıyor yani 9dan sonra sıfıra dönüyorbunu%10 ile yaparızÖrn%8 sekiz sayar ve sıfıra döner.*/


}}/*son*/

Bu programın isis uygulamasında displayler yanıp sönüyor görülebilir fakat uygulaması yapılırsa yanıp sönme gözlenmeyecektir.
Programın başında söylediğim ödev konusunu unuttuğumu sanmayın sakın 999sayacı size ödev. Yapıp bana ulaştırın siteye hemen ekleyelim.
Öğrenciler ödev yapmazsa öğretmen anlattığından zevk almaz? :D
Şimdi mikroCye özel bir kütüphane olan Button yapısını anlatayım. Bu üstteki kullandığımız buton kontrolü ile aslında aynı ama biraz daha esnek kullanımı var yukarıdaki program da butona basılı tuttuğumuzda sayaç sürekli artmakta aslında bu istediğimiz bir durum değil. Butona her basmamızda değer bir artmalı işte bunun en kolay çözümü BUTTON kullanmak..
Mesela biz bildiğimiz yoldan bir ledi butondan elimizi çekince yakmak istesek bunu nasıl yaparız yada butona elimizi bastığımızda led yansa.
Öncelikle butonun durumuna göre değer alacak değişkenlere ihtiyacımız olacaktı ve bu değişkenleri birkaç if altında fonksiyon edecektik. Buda programı karştıracak ve uzatacak.
Şimdi bu butonu inceleyelim bakalım
unsigned short eski_durum
do {
if (Button(&PORTB, 0, 1, 1)) eski_durum = 1;
if (eski_durum && Button(&PORTB, 0, 1, 0)) {
PORTD = PORTD+1;
Eski_durum = 0;
}
} while(1);
Buradaki program parçası tamamen (Button(&PORTB, 0, 1, 1) gibi fonksiyonla kontrol edilmektedir.
Burada (Button(&butonun bulunduğu port(PORTA (b c d e vs),portun kaçıncı pin olduğu,bu virgülden sonrasını 1de tutun,bu virgülden sonrası ise fonksiyonun pin 1 i mi 0 ı mı algılayacak bunun belirlendiği yerdir.)
(Button(&PORTB, 0 , 1 , 1)
Burada PORTBnin 0.bit 1ms aralıklarla if çalışacak, ve pin0 1 iken işlem yapılacak demektir.
Bu istekti yazılı program parçası ise butona basılınca eski durum 1 yapılır ve butona basılı tutuldukça 1de bekler
Hemen alttaki fonksiyon ise butonun bırakılmasını bekler ve bırakılır bırakılmaz PORTDnin değerini bir artırır İf dışına çıkılır.
Bu dersimizde bukadar arkaadşlar.sayac programının dosyaları ekte mevcuttur. Tavsiye olarak görürseniz ödev uygulamasını BUTTON ile yapmaya çalışın.
İyi çalışmalar diliyorum Kolay gelsin.
Haftaya dersimiz 2satır 16 Karakterli LCD ekran uygulamaları olacak.   aytacdurgen@gmail.com

0 yorum: