28 Şubat 2014 Cuma

C ile programlama uygulamaları-14

Tuş Takımı Uygulaması-1



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Tuş takımında bir tuşa basıldığında tuşun değeri B portuna bağlı ledlerde görünmesi sağlanacak.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.



#use fast_io(b) //Port yönlendirme komutları B portu için geçerli



#use fast_io(d) //Port yönlendirme komutları C portu için geçerli



#byte portb=0×06 // B portu “tus” ismine eşitleniyor.



#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor



#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor



#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor



#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor



#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor



#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor



#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor



#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor



char tus=0; // karakter tipinde değişken tanımlanıyor



//*********** Keypad Tarama Fonksiyonu *********



char keypad_oku() // Fonksiyon ismi





output_d(0×00); // D portu çıkışı sıfırlanıyor



output_high(sat1); // 1. satır lojik-1 yapılıyor



if (input(sut1)) // 1. sütun okunuyor



delay_ms(20); tus=1;



if (input(sut2)) // 2. sütun okunuyor



delay_ms(20); tus=2;



if (input(sut3)) // 3. sütun okunuyor



delay_ms(20); tus=3;



if (input(sut4)) // 4. sütun okunuyor



delay_ms(20); tus=0xA;



output_low(sat1); // 1. satır lojik-0 yapılıyor



output_high(sat2); // 2. satır lojik-1 yapılıyor



if (input(sut1)) // 1. sütun okunuyor



delay_ms(20); tus=4;



if (input(sut2)) // 2. sütun okunuyor



delay_ms(20); tus=5;



if (input(sut3)) // 3. sütun okunuyor



delay_ms(20); tus=6;



if (input(sut4)) // 4. sütun okunuyor



delay_ms(20); tus=0xB;



output_low(sat2); // 2. satır lojik-0 yapılıyor



output_high(sat3); // 3. satır lojik-1 yapılıyor



if (input(sut1)) // 1. sütun okunuyor



delay_ms(20); tus=7;



if (input(sut2)) // 2. sütun okunuyor



delay_ms(20); tus=8;



if (input(sut3)) // 3. sütun okunuyor



delay_ms(20); tus=9;



if (input(sut4)) // 4. sütun okunuyor



delay_ms(20); tus=0x0C;



output_low(sat3); // 3. satır lojik-0 yapılıyor



output_high(sat4); // 3. satır lojik-1 yapılıyor



if (input(sut1)) // 1. sütun okunuyor



delay_ms(20); tus=0xE;



if (input(sut2)) // 2. sütun okunuyor



delay_ms(20); tus=0;



if (input(sut3)) // 3. sütun okunuyor



delay_ms(20); tus=0xF;



if (input(sut4)) // 4. sütun okunuyor



delay_ms(20); tus=0xD;



output_low(sat4); // 3. satır lojik-0 yapılıyor



return tus; // Fonksiyon “tus” değeri ile geri döner





/********* ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED); setup_timer_1(T1_DISABLED);



setup_timer_2(T2_DISABLED,0,1); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);



set_tris_b(0×00); // B portu komple çıkış



set_tris_d(0x0F); // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş



output_b(0×00); // İlk anda B portu çıkışı sıfırlanıyor



while(1) // Sonsuz döngü





portb=keypad_oku(); // Basılan tuş değerini B portuna aktar







İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.





C ile programlama uygulamaları-14

25 Şubat 2014 Salı

C ile programlama uygulamaları-13

PWM Modu Uygulaması_2



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



PWM sinyalinin butonlarla arttırılıp azaltılması sağlanacak.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.



#use fast_io(a) //Port yönlendirme komutları A portu için geçerli



#use fast_io(c) //Port yönlendirme komutları C portu için geçerli



int i=65; // Tamsayı tipinde değişken tanımlanıyor



/******** ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED); setup_timer_1(T1_DISABLED);



setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);



set_tris_a(0×03); // RA0 ve RA1 pinleri giriş



set_tris_c(0×00); // C portu komple çıkış



setup_ccp1(CCP_PWM); // CCP1 birimi PWM çıkışı için ayarlandı



setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor



set_pwm1_duty(50); // PWM1 çıkışı görev saykılı belirleniyor



while(1) // Sonsuz döngü





if (input(pin_a0)) // Eğer RA1 girişine bağlı butona basılırsa





delay_ms(20); // Buton arkı önleme gecikmesi



while(input(pin_a0)); // Basılı butondan el çekile kadar bekle



i+=5; // i=i+5 anlamındadır.



if (i>250) // i değeri 250′dan büyükse i değeri 250 olsun



i=250;



setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor





if (input(pin_a1)) // Eğer RA0 girişine bağlı butona basılırsa





delay_ms(20); // Buton arkı önleme gecikmesi



while(input(pin_a1)); // Basılı butondan el çekile kadar bekle



i-=5; // i=i-5 anlamındadır.



if (i<65) // i değeri 65′den küçük ise i değeri 65 olsun



i=65;



setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor





İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.





C ile programlama uygulamaları-13

24 Şubat 2014 Pazartesi

Sabit gerilim ve sabit akımlı led devresi

Çok basit, basit olduğu kadar kullanışlı bir elektronik devre paylaşıyoruz bugün. Bu devrede güç kaynağının gerilim değerini 2V dan 24V’a kadar istediğiniz kadar artırabilirsiniz. Led üstünde her zaman ayarladığınız gerilim olacaktır. Dolayısıyla led üzerinden her zaman sabit akım akacaktır. Kullanabileceğiniz ledin gerilim değerleri de bu sınırlar içinde olabilir. Bu elektronik devre ile 5W güce kadar led sürebilirsiniz. Sıradan ledler için (20 mA akımlılar) T2 transistörü olarak BC547 seçilebilir. Daha yüksek güçlü ledler için BD135, BD137 veya BD139 tavsiye ediyoruz. 


 


Sabit gerilim ve sabit akımlı led devresi devre şeması:


 


sabit akımlı led devresi


 


 


 



Sabit gerilim ve sabit akımlı led devresi  


 



 


 


R direncinin değeri led akımının 0,5 ile bölünmesiyle bulunuyor.


R (Ω) = I (mA)/0.5


R direncinin güç değeri ise;


P (W) = I2 (A) x R (Ω)


 


Örneğin 20 mA standart bir led için 39 ohm luk direnç kullanılmalı.


Belki lazım olur diye aşağıya dijital devreler için led sürücü devrelerine birkaç örnek ekledim:


LED-Driver-With-Digital-Control


 




Sabit gerilim ve sabit akımlı led devresi

23 Şubat 2014 Pazar

Dijital Elektronik

 dijital elektronik


   Dijital elektronik ya da sayısal elektronik, mantık kavramları üzerine inşa edilmiş tümleşik devrelerden oluşur. Serüveni diyotun icadı ile başlamıştır. Diyot bilindiği gibi tek yönlü akım geçiren elektronik devre elemanıdır.  Diyot ile birlikte transistörler, gate entegreler ve bu entegrelerle kurulmuş daha karmaşık gate entegreleri ve en sonunda  işlemci icad olmuş. 


images (1)


   İşlemci olarak adlandırdığımız, transistörlerden oluşan, mantıksal kavramlar üzerine inşa edilmiş bu tümleşik devreler en temelde matematiksel hesaplamalar yapmak için kullanılmıştır. Bilgisayarların temel amacı budur fakat gelişen teknoloji bu sub-elektroniği çok farklı kontrol ve görsel uygulamalarında da kullandı. Böylece karşımıza insanların hayatlarını ve yaşam şekillerini değiştiren çok farklı bir dünya çıkıverdi. 


  Herkes lise-1 de matematik dersinde dayatılan “Ve”, “Veya”, “Ancak ve Ancak”, “İse” gibi kavramların ne demek olduğunu biliyordur. İşte bu kavramların elektroniğe uyarlanması ile bilgisayar icad oldu. 


TruthTables


   Yukarıda dijital elektronikte kullanılan mantıksal operatörler ve bu operatörlerin tümleşik devrelerini sembolize eden şemalar gösterilmiş. 


    Dijital elektronikte, mantıkta olduğu gibi iki çeşit bilgi vardır. “1″ bilgisi ve “0″ bilgisi. Genel olarak “1″ bilgisi, voltajın 0 volttan farklı pozitif olduğu “0″ bilgisi ise  voltajın 0V olduğu anlamına gelir.  Bu bilgiler yan yana gelerek bir çok sinyal bilgilerini oluşturur. Aynı zamanda bu sinyaller, içine kodlanmış yazı bilgisi, renk bilgisi, ışık bilgisi gibi bir çok bilgiyi içerebilir. Bilgiler birbiri üzerine mantıksal operatörler vasıtası ile kodlanır veya bu kodları çözümlenir.  Mesela herhangi bir mantıksal devrenin çıkışından ardı ardına  ”0-0-0-1-1-1″ bilgisini aldığımda bu bilgi 10 tabanında “6″ sayısını ifade ediyor olabilir. Çünkü “000111″ aynı zamanda binary(ikilik) tabanda bir sayıdır. Bu “6″ sayısı ise herhangi bir ışık miktarının kat sayısını bildiriyor olabilir.  Bilgisayarlar, bu bilgileri kodlayarak veya bu kodlanmış bilgileri çözümleyerek işlem yaparlar. 


ve operatörü


  Yukarıda diyot kullanılarak oluşturulmuş bir Ve(AND) operatörü gösterilmiş.  Dikkat ederseniz voltaj kaynağının “+”ucu mantıksal-1, “-”ucu mantıksal-0 ucunu gösteriyor. Yani “0″ volt mantıksal-0 bilgisi, 5 Volt ise mantıksal-1 bilgisidir.  Devre analiz edildiğinde yukarıdaki tabloyu çıkartılabilirsiniz.  Ve bu entegre aynı şekilde transistör kullanılarak da yapılabilir.


   Bilgisayarlar, bu mantıksal operatörleri yani mantıksal devreleri kullanılarak 4 işlemi gerçekleştir. Bu işlem tüm bilgisayarlarda binary(ikilik) tabanda gerçekleştirilir. Mesela alttaki devre ikilik tabanda tek basamak toplama işlemi yapabilen bir devredir;


550px-Full-adder


 S ucundaki çıkış  toplam Cout ucundaki çıkış ise toplamanın sonucundaki eldelik bilgisidir. Atıyorum 0 ve 1 sayısını ikilik tabanda topladığımızda S ucunda bilgi “1″ olur iken  Cout ucundaki bilgi “0″ olur. 


  Bu devrede iki tane Exculusive-Or  operatör entegresi, iki tane AND  operatör entegresi ve bir tane OR operatör entegresi kullanılmıştır.  Excullusive-Or operatörü AND, NOT ve OR operatör entegreleri ile oluşturulur ve aşağıdaki gibidir. Ve buradan yola çıkarak “çıkarma” “çarpma” ve “bölme” işlemi yapan entegreler luşturulmuştur., 


04298


  Bu tek basamak toplama entegreleri birbirlerine bağlanarak çok basamak toplayabilen entegreler oluşturulur. Ve bunlar onluk tabana çevrilir. Bir tümleşik devre onluk tabanda ne kadar basamak sayıyı toplayabiliyorsa o basamak sayısı kadar bite sahiptir. Mesela kullandığımız bilgisayarlar 64 bittir. Yani bilgisayarımız 64 basamağa kadar işlem yapabilir fakat 65. basamakta over flow yani sayıda taşma olur ve 65 inci basamağı bilemez.  


  NASA veya ciddi hesaplama yapılan kurumlarda çok fazla bite sahip bilgisayarlar vardır. Bu bilgisayarlar normal bilgisayarlar gibi oyun oynatma veya video izletme konusunda çok kötülerdir ama matematiksel hesaplamalarda çok ince hesapları yapabilmemize olanak sağlarlar. 


images


  Bilgisayar işlemcileri, bu şekilde olan milyarlarca mantıksal operatör entegreleri barındırır. Ve bu mantıksal entegreler, input larından alınan bilgileri işler, output larına yönlendirir.  Böylelikle karşımıza mantıksal işlem yapabilen bir suni beyin çıkmış olur. Bu suni beyini kodlayarak, istediğimiz işlemleri yaptırabiliriz ki buna da yapay zeka denir. 




Dijital Elektronik

22 Şubat 2014 Cumartesi

C ile programlama uygulamaları-12

PWM Modu Uygulaması-1



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



PWM sinyallerinin frekansı sabit kalarak görev çevrimi sürelerinin değiştirilmesi işlemi incelenecek.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.



#use fast_io(a) //Port yönlendirme komutları A portu için geçerli



#use fast_io(c) //Port yönlendirme komutları C portu için geçerli



int i=5; // Tamsayı tipinde değişken tanımlanıyor



/********* ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED); setup_timer_1(T1_DISABLED);



setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);



set_tris_a(0×03);



set_tris_c(0×00);



setup_ccp1(CCP_PWM);



setup_ccp2(CCP_PWM);



setup_timer_2(T2_DIV_BY_16,170,1);



set_pwm1_duty(i);



set_pwm2_duty(i);



while(1)





if (input(pin_a0))





delay_ms(20);



while(input(pin_a0));



i+=3; //



if (i>=170)



i=170;



set_pwm1_duty(i);



set_pwm2_duty(i);





if (input(pin_a1))





delay_ms(20);



while(input(pin_a1));



i-=3;



if (i<5)



i=5;



set_pwm1_duty(i);



set_pwm2_duty(i);










İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-12

21 Şubat 2014 Cuma

220 V led devresi

Ledler en çok kullanılan aydınlatma malzemesidir. Elektronik devrelerde yaygın olarak kullanılırlar.  Elektronikçiler bilirler; Ledlerin çalışma gerilimi genellikle  0,7 V – 5V aralığındadır. Alternatif akımla çalışmazlar. Anot ucuna + , katot ucuna ise – dc gerilim uygulamalısınız. 


Evlerimizde kullandığımız şebeke gerilimi 220 V AC dir. Bu gerilim ile ledi çalıştırmak mümkün değil. Bazı elektronikhobi’ciler seri direnç kullanabileceğimizi söyleyecektir. Fakat bu kadar yüksek gerilimde seri direnç kullanmanın farklı sakıncaları olacaktır. Örneğin güç kaybı çok fazla olur. Verimli bir devre olmaz.  Direncin uzun süre dayanması da zordur.


Bu 220 V led devresinde, akım sınırlayıcı olarak seri kondansatör kullanılıyor. Kondansatörün avantajı ısınmaması. Bu elektronik devrede zener diyot ledi yüksek gerilimden korumak için kullanılıyor. Alternatif akımın pozitif saykılında D1 gerilimi sınırlar ve R1 direnci üzerinde 2.7 volt düşer. Alternatif akımın negatif saykılında  D1 normal bir diyot gibi davranır ve yüksek gerilimi engeller. Eğer bu elektronik devrede zener diyot yerine normal diyot kullanırsak, yüksek aımdan dolayı led patlayacaktır.


 


220 V ile çalışan led devresinin elektronik devre şeması: 


(Denenmiştir!!!)


220V led devresi 220V led devresi


 


Kondansatörün değeri led için gereken akıma göre ayarlanmalı. 100 nF lık bir kondansatörle, yaklaşık 4 mA lik ; 470 nF lık bir kondansatör ile ise 20 mA akım oluyor. Genellikle ledlerin çalışması çin 20 mA  akım gereklidir.


Not: Arkadaşlar bu devre 220 V ile çalıştığından, acemi elektronikçiler için tehlikeli. Gerekli güvenlik önlemlerini almadan yapılmaması gerekiyor. Herhangi bir kaza durumunda sorumluluk almayacağımızı belirtiriz. 




220 V led devresi

20 Şubat 2014 Perşembe

C ile programlama uygulamaları-11

Timer1 Uygulaması-1



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Timer1 kesmesinin kullanılmasını öğrenmek.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000)



#use fast_io(b)



int i=0;



//****************** Timer0 Kesmesi *****************************



#int_timer1



void timer1_kesme ()





set_timer1(63036);



i++;



if (i==50)



output_high(pin_b0);



if (i==100)





output_low(pin_b0);



i=0;







/********* ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED); // PSP birimi devre dışı



setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı



setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok



setup_adc(ADC_OFF); // ADC birimi devre dışı



setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı



setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı



set_tris_b(0×00);



output_b(0×00);



setup_timer_1(T1_INTERNAL



İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-11

18 Şubat 2014 Salı

C ile programlama uygulamaları-10

Timer0 Uygulaması-2



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Timer0 kesmesinin kullanılmasını öğrenmek.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000)



#use fast_io(a)



#use fast_io(b)



int sayi=0;



//****************** Timer0 Kesmesi *****************************



#int_timer0



void timer0_kesme ()





set_timer0(254);



sayi++;



output_b(sayi);



if (sayi==15)



sayi=0;





/********* ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED);



setup_timer_1(T1_DISABLED);



setup_timer_2(T2_DISABLED,0,1);



setup_adc_ports(NO_ANALOGS);



setup_adc(ADC_OFF);



setup_CCP1(CCP_OFF);



setup_CCP2(CCP_OFF);



set_tris_a(0×10);



set_tris_b(0×00);



output_b(0×00);



setup_timer_0(RTCC_EXT_H_TO_L



İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-10

15 Şubat 2014 Cumartesi

C ile programlama uygulamaları-9

Timer0 Uygulaması-1



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Timer0 kesmesinin kullanılmasını öğrenmek.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000)



#use fast_io(b)



int i=0;



//****************** Timer0 Kesmesi *****************************



#int_timer0



void timer0_kesme ()





set_timer0(60);



i++;



if (i==10)



output_high(pin_b0);



if (i==20)





output_low(pin_b0);



i=0;







/********* ANA PROGRAM FONKSİYONU********/



void main ( )



RTCC_DIV_256);



set_timer0(60);



enable_interrupts(INT_timer0);



enable_interrupts(GLOBAL);



while(1);





İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-9

13 Şubat 2014 Perşembe

C ile programlama uygulamaları-8

Dış Kesme Uygulaması



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Dış kesme uygulamasının nasıl yapıldığının öğrenilmesi


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000)



#use fast_io(b)



int i;



//****** Dış Kesme Fonksiyonu *****************



#int_ext



void ext_kesmesi ()





     output_high(pin_b1);



    delay_ms(1000);



     output_low(pin_b1);



     delay_ms(3000);



for (i=0;i<10;i++)



    



     output_high(pin_b1);



     delay_ms(500);



     output_low(pin_b1);



     delay_ms(500);



    





/********* ANA PROGRAM FONKSİYONU********/



void main ( )





setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED);



setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1);



setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);



setup_CCP1(CCP_OFF);



setup_CCP2(CCP_OFF);



set_tris_b(0×01);



output_b(0×00);



ext_int_edge(H_TO_L);



enable_interrupts(INT_EXT);



enable_interrupts(GLOBAL);



while(1);





İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.




 




C ile programlama uygulamaları-8

Metaller ve Yarı İletkenler (Mazleme Bilgisi)

semiconductor


  Mikro elektronikte kullanılan malzemelerin tamamını yarı iletkenler oluşturuyor. Peki yarı iletkenleri bu kadar kullanışlı yapan malzeme özelliği nedir? 


  Öncelikle yarı iletkenlerin kullanılmasının temel sebebi iletkenliklerinin istenildiğinde arttırıp istenildiğinde azaltma şansımızın olmasıdır.   Bu tabi ki atomik yapılarından kaynaklanıyor.  


indir


  Doğadaki elementlerden her birinin elektron ve proton sayıları farklıdır. Fakat doğada nötr olarak bulunurlar.  Nötr olmalarının sebebi elektron ve proton sayılarının eşit olmasıdır.  Yani çekirdek tarafından oluşturulan çekim kuvvetinin elektronlar tarafından nötrlenmesi olayı atomu nötr atom yapar.  Fakat kendi doğalarında ne kadar nötr olsalar da çekirdekleri tarafından oluşturulan çekim kuvveti, farklı element ya da farklı atomlara göre daha fazla ya da daha az olabilir.   Bu sebeple atomlar yan yana geldiklerinde nötr olsalar bile arta kalan az bir çekim kuvveti sebebi ile komşu atomun elektronunu etkileyip kendisine yakınlaştırır. Böylelikle atomlar bağ yapmış olurlar.  Bu bağa kovalent bağ deniyor.  Bu durum elektrolitte olduğu gibi bir akım oluşturmaya da sebebiyet verebilir ki zaten bu günkü pil teknolojisi bu mantık üzerine çalışmaktadır. 


atom


   Yarı iletken silikon atomları da yan yana geldiklerinde kovalent bağ yaparak bir kristal yapı oluştururlar.  Bu kristal yapılar. Malzemenin iletkenliği, kullanışlılığı ve nereler için daha uygun olduğu hakkında yorum yapabilmemizi sağlar.  Çeşitli kristal şekilleri oluşur. 


kristal


  Yarı iletkenler ile metalleri ayıran en önemli fark valans ve iletken bant yapılarıdır. 


mikro elektronik


 


 


 


  Bir yarı iletken atıyorum silikon atomunda elektronların bulunduğu son yörüngeye valans bant ve bu yörüngenin bir üstündeki geçici yörüngesine de iletken bant denir.  Normal şartlar altında silikon yarı iletkeninin özdeş atomlarının oluşturduğu kristal yapı da elektronlar valans bandında atomlara bağlıdırlar. 2. ve 3. şekillerde gördüğünüz gibi valans bandındaki bu elektronlar dışarıdan herhangi bir enerji alarak iletim bandına atlarlar. Bu enerji herhangi bir dış elektrik alan, manyetik alan ve ya ısı enerjisi olabilir.  İletim bandına geçen elektronlar serbest elektronlardır ve kristal yapılar arasında serbest bir şekilde dolaşırlar böylece yarı iletken meteryal iletken olmuş olur.  Böylelikle yarı iletkenlerin sıcaklığı arttıkça iletkenlikleri de artmış olur. 


 


  Şekil bir deki şema metallerin yörünge yapısını gösterir. metallerde ya da iletkenlerde valans band ve iletken band birleşiktir. Bu yüzden valans banddaki elektronlar zaten serbest elektronlardır ve kristal yapı içinde serbest olarak dolaşabilirler. Fakat metallerin sıcaklıkları arttıkça iletkenlikleri azalır.  Bunun sebebi, titreşimdir. Sıcaklık arttığında valans ve iletken band birbiri ile bitiş olduğundan ve elektronlar çok fazla titreştiklerinden birbirlerine çarparak enerji kaybederler böylece iletkenlik azalmış olur. 


  Yarı iletkenlerin çoğunda has özgün iletkenliğin değeri çok düşüktür ve elektronik devre elemanlarının yapılarında kullanmak için elverişli değillerdir.  Pratikte kristalin özgün iletkenliği, katkı atomları ilave edilerek değiştirilir.


 Mesela Fosfor, Arsenik ve ya Antimon gibi 5 valans elektronu bulunan elementler katkı atomu olarak kullanıldığında, silikon ve antimon elementi şu şekilde bir kovalent bağ gerekleştirir;


diode2


  Bu kovalent bağ da fazladan 1 elektron moleküle çok zayıf bir şekilde bağlıdır.  Bu yüzden kolaylıkla iletim bandına geçip serbest hale geçebilir.  Böyle bir molekül n tipi yarı iletkeni oluşturur. 


  Katkı atomu olarak Bor, Aliminyum, ve ya Galyum gibi 3 tane valans elektronu bulunan elementler kullanılırsa; silikon ve bor atomu şöyle ir kovalent bağ oluşturur;


diode3


 


 Böyle bir kovalent bağ da fazladan 1 elektron boşluğu oluşmuştur. Ve elektronların hepsi moleküle iyi bir şekilde bağlıdır.  Böyle bir moleküldeki elektronları iletim bandına geçirmek tabi ki de daha zor olur.  Bu yarı iletken tipine de p type yarı iletken ismi verilir. 


  Bu iki çeşit yarı iletkenin band yapıları şu şekilde değişir;


6520efadc9fafd08d3043572e61e9765


 


 Bu iki tip yarı iletken kullanılarak diyotlar, transistorler, opamplar, logic entegreler oluşturulmuştur.  




Metaller ve Yarı İletkenler (Mazleme Bilgisi)

10 Şubat 2014 Pazartesi

C ile programlama uygulamaları-7

LM35 Sıcaklık Sensörü Uygulaması



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Sıcaklık durumunun ölçülüp Lcd ekranda gösterilmesi.


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#device ADC=10



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000)



#use fast_io(a)



#define use_portb_lcd TRUE



#include



unsigned long int bilgi;



float voltaj,sicaklik;



//********** ANA PROGRAM FONKSİYONU*******



void main ( )





setup_psp(PSP_DISABLED);



setup_timer_1(T1_DISABLED);



setup_timer_2(T2_DISABLED,0,1);



setup_CCP1(CCP_OFF);



setup_CCP2(CCP_OFF);



set_tris_a(0×01);



setup_adc(adc_clock_div_32);



setup_adc_ports(AN0);



lcd_init();



set_adc_channel(0);



delay_us(20);



printf(lcd_putc,”fSicaklik=”);



while(1)





bilgi=read_adc();



voltaj=(0.0048828125*bilgi)*1000;



sicaklik=(voltaj/10)+2;



lcd_gotoxy(10,1);



printf(lcd_putc,”%5.1f’C”,sicaklik);



delay_ms(100);







İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-7

9 Şubat 2014 Pazar

C ile programlama uygulamaları-6

Matris LED Display Uygulaması



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



Matris Led Displayde istenilen karakterlerin gösterilmesi


DENEYİN BAĞLANTI ŞEMASI




    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay(clock=4000000)



#use fast_io(b)



#use fast_io(c)



//******** Matrise Gönderilecek Karakter Bilgileri *******



    int A[]=0×03,0×75,0×76,0×75,0X03;



int B[]=0×00,0X36,0X36,0×36,0X49;



    int C[]=0×41,0x3E,0x3E,0x3E,0x5D;



    int D[]=0×00,0x3E,0x3E,0x3E,0×41;



int E[]=0×00,0xB6,0xB6,0xB6,0xBE;



int arti[]=0×77,0×77,0×41,0×77,0×77;



    int cift_ok[]=0x6B,0x5D,0×00,0x5D,0x6B;



//******* Sütun Seçme Fonksiyonu ************



int sutunsec (int s)





     switch (s)



    



     case 0: return(0×10);break;



     case 1: return(0×08);break;



     case 2: return(0×04);break;



     case 3: return(0×02);break;



     case 4: return(0×01);break;



    





//******* Matrise Veri Gönderme Fonksiyonu *******



void matris_karakter_gonder(char harf[], int tekrar)





     int i,j;



    for (i=1;i<tekrar;i++)



    



     for(j=0;j<5;j++)



    



     output_c(sutunsec(j));



     output_b(harf[j]);



     delay_ms(10);



    



    





/********* ANA PROGRAM FONKSİYONU********/



void main ()





     setup_psp(PSP_DISABLED);



     setup_timer_1(T1_DISABLED);



     setup_timer_2(T2_DISABLED,0,1);



     setup_adc_ports(NO_ANALOGS);



     setup_adc(ADC_OFF);



     setup_CCP1(CCP_OFF);



     setup_CCP2(CCP_OFF);



set_tris_b(0×00);



     set_tris_c(0×00);



     while(1)



    



     matris_karakter_gonder(A,25);



     matris_karakter_gonder(B,25);



     matris_karakter_gonder(C,25);



     matris_karakter_gonder(D,25);



     matris_karakter_gonder(E,25);



     matris_karakter_gonder(arti,25);



     matris_karakter_gonder(cift_ok,25);







İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.



2. Karakterlerin kaymasını nasıl sağlarız.




 




C ile programlama uygulamaları-6

8 Şubat 2014 Cumartesi

C ile programlama uygulamaları-5

Port Okuma ve Porta Bilgi Gönderme



AMAÇ:



Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.


YAPILACAK İŞ:



A portu RA0,RA1,RA2 ve RA3 pinlerine bağlı butonların durumu okunarak, okunan bu bilginin B portuna bağlı LED’lerde gösterilmesi


DENEYİN BAĞLANTI ŞEMASI



    PROGRAM KODU:



#include <16f877a.h>



#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay(clock=4000000)



#use fast_io(a)



#use fast_io(b)



#byte portb=6



int giris;



/********* ANA PROGRAM FONKSİYONU********/



void main ()





setup_psp(PSP_DISABLED);



setup_timer_1(T1_DISABLED);



setup_timer_2(T2_DISABLED,0,1);



setup_adc_ports(NO_ANALOGS);



setup_adc(ADC_OFF);



setup_CCP1(CCP_OFF);



setup_CCP2(CCP_OFF);



set_tris_a(0xFF);



set_tris_b(0×00);



output_b(0×00);



basla:



giris=input_a();



giris=giris&0b00111111;



portb=giris;



goto basla;





İŞLEM BASAMAKLARI



1.Devreyi bord üzerine kurunuz.



2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.



3.Devrenin çalışmasını inceleyiniz.



DEĞERLENDİRME ÇALIŞMALARI



1.Kodların yanına açıklamalarını yazınız.





C ile programlama uygulamaları-5

Rüzgar beslemeli POV hava istasyonu

POV , bazı yerlerde propeller olarak da geçer. Döndüğü zaman bir yazı veya görüntü meydana getiren sistemlere denir. Genelde POV sistemleri bisiklet, otomobil tekerlekleri üzerinde kullanılabildiği gibi, elimizle veya bir motorla çevirme ile de yapılabilir. 


Geçtiğimiz yıl bisiklet için havada yazı projesi yayınlamıştık. Merak edenler bu konuya da bakabilir. Rüzgar beslemeli POV hava istasyonu sisteminde ise en etkileyici kısım verimlilik. Bu sistemle rüzgarın hızı, havadaki nem ve hava sıcaklığı ölçülebiliyor. Aşağıdaki videoyu izleyiniz.


 


 


 


Havada yazı devrelerinde, dönüş hızı çok önemlidir. Yazının okunaklı olması dönüş hızının uygun devirlerde olmasına bağlıdır. Rüzgar beslemeli sistemlerde ise dönüş hızı rüzgarın hızına bağlı olduğundan, havada oluşan yazının okunaklı olması programlayıcının kabiliyetine bağlıdır. 


Bu devrede dönüş hızını okumak için Hall Etkili sensör kullanmışlar.  Hall etkili sensör hakkında ayrıntılı bilgi için şu yazımızı okuyabilirsiniz:


Hall etkili sensörler


Rüzgar beslemeli POV elektronik devre şemaları ve resimleri:






 


Copy of windpov-pcb Copy of windpov-rainy


 


Bu uygulamayı yapmak isteyenler için kaynak




Rüzgar beslemeli POV hava istasyonu