Apple Hile Dünyası Electronic TR Webmaster Blogu -->

www.iphonehileleri.com

Devamı » 13 Nisan 2015 Pazartesi Unknown 0 yorum

Mikroc ile pic programlamayı öğreniyoruz DERS-5

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
Devamı » 24 Ekim 2013 Perşembe Unknown 0 yorum

50A motor sürücünü yapmaya hazır mısın?


IRFZ-44 'ün yapısını ve kullanımını sizler için anlatıp paylaşmış bulunmaktayız. Çekimde biraz aksaklıklar yaşadık kusurumuza bakmayın. Özkan ATAŞ hocamıza teşekkür ederiz. IRFZ-44' ün genel olarak yapısını buradan' da inceleyebilirsiniz. Kullanacağınız akım ve volt aralıklarını dökümanı inceledikten ayarlamanızı tavsiye ederiz.
Bilgi paylaştıkça gelişir...
Devamı » Unknown 0 yorum

Kendi elektriğini üret-1 (MIKNATIS İLE)

Arkadaşlar Türk dostumuzun yapmış olduğu, mıknatısların birbirlerini itmeleri ile oluşan hareket enerjisini elektrik enerjisine çevirme mekanizmasını bizlerle paylaştığı için teşekkür ederiz.

Devamı » 23 Ekim 2013 Çarşamba Unknown 0 yorum

Mikroc ile pic programlamayı öğreniyoruz DERS-4

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
Devamı » Unknown 0 yorum

Mikroc ile pic programlamayı öğreniyoruz DERS-3

MikroC Dersleri 3

mikroc-dersleri-3
Merhaba elektronik Severler…
Bir önceki dersimizde Proteusun İSİS simulatörü ve C dilinde bize gerek olan Veri Değişkenleri , İşleçler (operatörler) konularını işleyip Program kontrol deyimlerine değindik ilgili programları inceledik.
Bugün Dersimizde DÖNGÜLER konusuna değineceğiz.
Ama önce birkaç önemli not eklemek gerektiğini düşünüyorum. Program geliştirmenin yanı sıra birazda donanım bilgisi gerekiyor.
• PICler 5V sabit gerilimli besleme kaynağı ile beslenmeli.
• PIC Pinlerine doğru(buton) uygulanacak akım SİNK akımı 25mA dir.
• PIC pinlerinden şaseye(toprak)akan akım SOURCE akımı20mA dir.
• Bu akım seviyelerini (Led bağlantısı için) 100 150 Ohm arası dirençle sağlanır.
• Butonların Lojik ir gerilimi sağlama dirençleri( PULL UP) 4.7KOhm ile 10KOhm dirençlerden seçilmelidir.
• Pıc Donanımında Anagol Dijital(ADC) varmı ? karşılaştırıcı Varmı bunları bilmemiz gerek. Bu yapılar varsa ve kullanılmayacaksa programda bu donunımlar kapatılmalıdır.(kapatılmazsa programı olumsuz etkileyebilir.

3.DÖNGÜ YAPILARI

• For
• While
• Do While
Tanım : Döngüler bir programın yada program parçasının keç defa çalışacağını sonsuza kadar mı çalışacağını belirleyeceğimiz yapılardır. Döngüler hemen hemen bütün programların bel kemiğini oluşturur.
3.1 FOR Döngüsü
Kullanım yapısı : For (DöngüBaşlangıçdeğeri; DöngüBitişDeğeri; ArtışVeyaAzalışMiktarı{Buraya Maddeler halinde Yapılacak işlemler yazılır;}
Yukarıdaki yapının çalışması için {} parantezlere ve ; Noktalı virgüllere dikkat edilmelidir.
Programalarımızda For döngüsünü sıklıkla kullanacağımız için iyi öğrenilmesi gerekmektedir ve en esnek kullanımı olan döngüdür.
Şimdi For döngüsünü detaylı inceleyelim
Öncelikle döngüde kullanılacak değişkenin tanımlamasını unutmayalım programın başında i gibi bir değişken tanımlayalım
10 Ledle yürüyen ışık program parçasını yazalım ve bilmediğimiz bit kaydırma işlemini de görelim
Unsigned int  i;
for(i=1;i<1024;i=i*2)
{
PORTB=i;          İ değişkeninin değerini PORTBde göster (ilk (bitini)
PORTA=i>>2;   İ değişkeni 2bit sağa kaydırılarak son 2biti PORTA da gösterilir.
Delay_ms(500);  500 milisaniye bekle.
}
Programımızı incelersek i sayısı 1 den başladıtıldı i sayısı 2 ile çarpılıp tekrar i içine yazıldı Ve for içine girildi i değeri 1 dir ve PortBde 1 görüldü tekrar For döngüsüne gidildi 1*2 =2 olan i 1024 den küçük olduğu için 2*2=4 i içine yazılır ve 2 değeri PORTB de gösterilir 500ms beklenir bu işlem 1024' den küçük olana kadar devam edilir ve döngü sonlanır.
PORTA=i>>2; Burada kullanılan bit kaydırma işlemi İ değerinin bit sayısı 8bit i geçince yani 256,512, sayıları 9bit ve 10bit olduğundan PORTB ye sığamayacağından son iki bit i PORTA da gösterilir.
Yukarıda ele aldığımız Programın sonsuza kadar çalışmasını istiyorsak program parçasını
For(;;)
Bu yapı sonsuz döngüdür.
yukarıdaki programı buraya yazmalıyız }
Yapısı içine yerleştirmeliyiz.
3.2. WHİLE Döngüsü
While (şart ifadesi)
{
Burada şart sağlandığı sürece komutlar çalıştırılır;
}
While ile forla yapılan döngüler yapılabilir ancak kullanımı for kadar esnek değildir.
i=1

While (i < 1024)
{

PORTB=i;
PORTA=i>>2;
Delay_ms(500)
i=i*2;
}
For ile yapılan yazılımın While döngsü ile yazımı üstteki gibidir.
While ile sonsuz döngü
While(1)
{
Buraya program parçasını yerleştiriniz;
}
Şeklinde yapılır.
3.3. do while Döngüsü While döngüsü ile aynı şekilde kullanıma sahiptir ancak bir farkı vardır o da şart sağlansa da sağlanmasada döngü 1 kez (program ilk çalıştığında) çalışır
i = 100;
do {
PORTB=i;
i++; bu kullanım i değişkenini 1 artırır yani i=i+1; ile aynıdır
} while ( i > 200 );
Başlangıçta i 100 dür do ( yap ) PORTB=i; i gösterilir i 1 artırılır Döngü şartı sağlanıyorsa döngü devam eder programda i 200' den küçük olduğu için tekrarlanmaz.
Evet kıymetli elektronik sever öğrencilerim Bu günlük dersimiz buraya kadardı. Yukarıdaki döngüleri kendiniz basit programlar üzerinde deneyin. Gelecek dersimizde bu örneklere yar vereceğiz. Takıldığınız yerde iletişimi geçin.
İyi ÇALIŞMALAR.
Devamı » Unknown 0 yorum

Mikroc ile pic programlamayı öğreniyoruz DERS-2

                                       mikroc-dersleri-2

Merhaba elektronik Severler…
1. dersimizi siz değerli katılımcılarla geçen hafta işledik. Mademki ders edasıyla ders işliyoruz hoca bir önceki dersten bahsetmeden geçmez.Peki ne gördük geçen hafta ? Arkadaşlar bir önceki dersimizde C dilini kullanmanın kolaylıklarından pratikliğinden bahis ettik mikroC derleyicisinde Proje dosyası oluşturmayı öğrendik kısa bir programla örnke proje dosyasını gerçekleştirdik.
Bugün dersimiz kısaca Proteusun İSİS simulatörü ve C dilinde bize gerek olan Veri Değişkenleri , İşleçler (operatörler) konularını işleyip Program kontrol deyimlerine giriş yapacağız.

2.1 Proteus ISIS eki

Bu konu başlığında programlarımızın çalışıp çalışmadığını gözleyebilmek için yeterli düzeyde İSİS öğreneceğiz.
proteus-isis
Programlar altından kurulumunu yapmış olduğunuz Proteus İSİS çalıştırılır ve karşınıza boş çalışma sayfası çıkar. Şimdi adımları takip edelim.
NOT: Proteus programını edinmek için BURAYA tıklayınız.
proteus-isis-2
Resimdeki pencereden malzemelerimiz çizim sayfasına alınır .
proteus-isis-3
Şimdi sıra çizdiğimiz devrede PIC içine yazdığımız programdan oluşan HEX kodunu yüklemek.
PIC Sembolü çift tıklanır ve resimde görülen adımlar gerçekleştirilir.
proteus-isis-4
Evet var mı anlamayan içinizde ???

2.2 Veri Değişkenleri

Programlamada bir sayı bir bilgi direk olarak kullanılamazlar ve işlemler veri değişkenleri ile yapılır.
MikroC nin desteklenen veri çeşitleri;
Bit 0-1
Sbit 0-1
Unsigned char 0-255 arası sayılar(işaretsiz)
Signed char -128 – 127
Unsigned short int 0 – 255
Signed short int -128 – 127 (PİC hafızasında char tipi ile aynı yeri kaplar)
Signed int -32768 .. 32767 sayıları arası
Unsigned int 0 – 65535
Signed long -2147483648 – 2147483647
Unsigned long 0 .. 4294967295 arası
Kullanılacak değişken tiplerimiz bu kadar. Eğer programımızda kullanacağımız sayaçlar işlem sonuçları olacaksa değişkenlerimizi bu aralıklara uygun tanımlamamız gerekir.

2.3 Program Kontrol Deyimleri

Programlar kontrol altında tutulması istenen işlemlerdir. Fakat bu kontrol gelişi güzel yapılmaz. Bunun için kontrol deyimlerini iyi bilmek gerekir.
1-if    2-Else if   3-Else   4-For  5-While    6-Do   7-goto  8- break   9 – Switch Case
Bu komutlar sayesinde döngü yapabilir, butonla kontrol sağlanabilir veya bir değişkene bağlı değişik işlemler yapılabilir.
Şimdi burada verilen komutların kullanımını derslere yayıp ayrıntılı işleyeceğiz.
İlk olarak İf nedir nasıl kullanılır ona değinelim.
İf  (eğer) şartı.
İf(şart); ya da şartlar şeklinde kullanılır.
Şimdi unsigned char veri tipinde sifre değiskenimiz olsun ve sifre verisinin Örneğin 243 olduğunda işlem yapan bir program parçası yazalım. Öncelikler program başlangıcında
Unsigned char sifre;
Tanımlamasını yapalım. Bu pıc ram hafıza alanından bir kutu kiraladık ve içine şifre değerini saklayacağız.
Ve programın şartı oluşturalım
İf(sifre==243) lambayı yak;   eğer şarta bağlı tek işlem varsa {} gerek yoktur.
İf(sifre==243) {
Lambayı yak;
Fan çalıştır;} 
şeklinde alt alta sıralanabilir.
Evet değerli öğrencilerim Şimdi İf deyimini bir kenara bırakalım da veri değişkenlerini kullanacağımız bir program yazalım. İf deyiminide kullanabilirmiyiz bir bakalım. Şimdi bir sayac değişkeni tanımlayalım ve bu sayacı 10a kadar saydırıp PORTB de gösterelim. :D
Ha bu arada ben bu tür uygulamalarda 16F628A kullanmayı tercih ediyorum sebebine gelince bikere 16F84A dan daha ucuz ikincisi 2Kword program belleği var ve gerektiğinde dahili osilatörünü kullanabiliyoruz ve toplamda 15pin çıkış veya 16 pin giriş olabiliyor.olarak kullanılabiliyor. 16F84A da ise dahili osilatör ve reset olmadığı için 13 çıkış kullanılıyor ve 1Kword program hafızası var.Neyse ya gevezeliğim tuttu yine bir sürü şey araya girdi.
Gelelim Programımıza
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ü */

PORTB=sayac;

delay_ms(1000); /*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==11)sayac=0; /*sayac değeri kontrol ediliyor ve 10a kadar saymasını istediğimiz için sayac11 olur olmaz sıfırlıyoruz*/

}

}
Bu programda değişken kullanımını ve if deyimini kullanmayı örnekledik. Devreyi kurup çalıştırması artıksiz çalışkan öğrencilere kalıyor.
Not: Devre 0 dan 10a kadar Binary olarak sayacaktır 10dan sonra 0dan tekrar başlayacaktır.
Bu haftalıkta dersimiz bukadar Haftaya ödevlerinizi yapmış olarak görüşmek üzere..Kolay gelsin İyi çalışmlar.
Devrenin uygulamasının Proteus görüntüsü Resimdeki gibidir.
proteus-isis-devre-4
Ben devrelerde gözlemlerimi renklere göre yapmayı daha kolay buluyorum. Ama yeni öğrenenler devreyi led bağlantıları dahil kurmalı diye düşünüyorum.
Devamı » Unknown 0 yorum