KingFrm

KingFrm

Bilgi paylaşım adresi
 
AnasayfaAnasayfa  TakvimTakvim  GaleriGaleri  SSSSSS  AramaArama  Üye ListesiÜye Listesi  Kullanıcı GruplarıKullanıcı Grupları  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

Paylaş | 
 

 MikroC Dersleri 5 - 14/03/2011

Aşağa gitmek 
YazarMesaj
___YöRüKBeYi___
Yönetici
Yönetici
avatar

Mesaj Sayısı : 185
Reputation : 16
Kayıt tarihi : 14/03/11
Yaş : 35
Nerden : ESKİŞEHİR

MesajKonu: MikroC Dersleri 5 - 14/03/2011   Ptsi Mart 14, 2011 7:51 pm


















[Resimleri görebilmek için üye olun veya giriş yapın.]
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 [Linkleri görebilmek için üye olun veya giriş yapın.] 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 [Resimleri görebilmek için üye olun veya giriş yapın.]
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 [Resimleri görebilmek için üye olun veya giriş yapın.]
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);[Linkleri görebilmek için üye olun veya giriş yapın.] çı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(;Wink{ /*Program sonsuz döngü içinde çalışacak for(;Wink 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 [Linkleri görebilmek için üye olun veya giriş yapın.] 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? [Resimleri görebilmek için üye olun veya giriş yapın.]
Ş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.

Not:Derslerde gecikmeler oluyor Öğretmenlik için KPSS hazırlanıyorum dershane görev vs. İdare edin hocanızı… [Resimleri görebilmek için üye olun veya giriş yapın.] Bu dersimize ait isis ve kod dosyaları: [Linkleri görebilmek için üye olun veya giriş yapın.]
Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör
 
MikroC Dersleri 5 - 14/03/2011
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
KingFrm :: Elektronik Sistemler-
Buraya geçin: