Makinalara canlılara özgü bir özellik katan şey, onların haberleşmesi ve bir dillerinin olmasıdır.  Makinalar, elektrik sinyallerinin dijital sistemler için uyarlanması sonucu  haberleşirler.  Çevresel faktörlerden elde edilen düzensiz elektriksel sinyaller(analog bilgi)  belli bir düzende ya da belli bir kurala göre aktarılmalıdır ki makinalar anlaşabilsinler . Tıpkı insan dilindeki gramer kuralları gibidir. İnsan düzensiz bir ses çıkardığında diğer insanlar için hiç bir anlam ifade etmez. Çünkü çıkardığı sesin bir kuralı ve belli bir literatürü yoktur.  Makinalarda böyledir işte. 

 Digital-technology

    Peki çevresel faktörleri nasıl dijitale çevirebiliriz? Bunu yapmak için çok farklı yollar izlenilebilir. Fakat , bunlar için bu faktörleri ilk önce elektrik sinyaline çevirmemiz gerekir. Elde ettiğimiz bu sinyallere analog bilgi denir. Bu bilgi, belli işlemlerden geçirilerek dijitale çevrilir.  Bildiğiniz gibi dijital sistemler sadece 5V ve 0V değerlerinden anlarlar.  Onlar için 5V logic-1, 0V logic-0 bilgisidir.

    Elde ettiğiniz çevresel faktörlerin analog bilgisi çok fazla parametreye ya da çok çeşitli boyutlarda bilgiye sahip olabilir.  Böyle bir  sinyali dijitale çevirmek için kullanılacak en iyi yollardan birisi, bu bilgiyi bir timer-trigger entegre yardımı ile belli bir kareye frekans içeren kare dalgaya dönüştürmek olacaktır. 

anolouge-digital

    Bu kare dalganın pik noktası logic-1 yani 5 volttur.  Böylelikle farklı voltaj değerlerinde yani farklı bir elektriksel sinyalde farklı bir frekans çıkışına sahip olacağız.   Her bir frekans, farklı bir bilgiyi temsil edecektir.  İşte böylelikle analog bilgimizi dijitale çevirmiş olduk.  Şimdi geriye kalan tek şey bu bilgiyi işleyebilmektir. 

 

 

 

 

2pt5Hz_input_square_wave

 

 

 

 

 

Piyasada analog bilgiyi dijitale çevirmek için kullanılan LM231, 331 ya da bir çok voltage-frequency entegresi vardır.  Mesela LM231 in datasheetinden  şöyle bir devre ile ışık bilgisini dijitale çevirmemiz mümkün; 

  

light intensity-frequency converter

 

 

 

 

 

 

 

 

 

Ya da sıcaklık yoğunluğunu dijitale 

çevirmek için örnek bir devre yine entegrenin datasheetinden; 

 

temperature-frequency converter

 

 

 

 

 

 

 

 

 

 

 

 

   Şimdi elde ettiğimiz bu dijital bilgiyi ilemeye geldi sırada.   Mesela sıcaklığa göre alınan bir dijital çıkışda kare dalganın her bir frekans değeri farklı bir sıcaklık değerini temsil eder.  Ama biz bu frekans değerlerini kullandığımız sisteme nasıl anlatabiliriz? 

   Bunun da çeşitli yolları var tabi ki. 🙂 Ben sadece bir yolunu gösterip uygulamasını dilim döndüğünce anlatmaya çalışacağım.   Genelde böyle bir dijital çıkışın yorumlanması için  eğer pic ya da bir denetleyici kullanıyorsanız dış kesmeler kullanılır.  Mesela 16f877 de  B portunu dış kesme için kullanabilirsiniz. Dış kesme de belirtilen pine bir sinyal geldiğinde programda belirtilen bir fonksiyon icra edilir. 

Mesela şöyle bir devre kurduk;

   

Uygulama Şeması

 

 

 

 

 

 

 

 

 

 

Program şu şekilde;  Şimdi bu devrede gördüğünüz gibi bir frekasn üretici b0 pinine bağlanmış. bu frekans kaynağı bizim dijital inputumuz olsun.   B3 pinine bağlı led dalganın her 5 volt olduğunda durum değiştiriyor. B2 pinine bağlı led ise yarım saniye de bir durum değiştiriyor.  b1 pinine bağlı led ise frekans kaynağının ürettiği sinyal 50 hz olduğunda yanıyor. Eğer frekans kaynağı 50 hz den başka bir frekans üretiyorsa bu led yanmıyor. 

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

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#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

int i=0; // Tamsayı tipinde değişken tanımlanıyor
int j=0; // Tamsayı tipinde değişken tanımlanıyor
int f; // Tamsayı tipinde değişken tanımlanıyor
//****** Dış Kesme Fonksiyonu *****************
#int_ext // Dış (External) RB0/INT kesmesi, b1 pinine gelen her bi sinyalde bu fonksiyona girer
void ext_kesmesi () // Dış kesme fonksiyonu
{
output_toggle(pin_b3);

i++;

}

#int_timer1 // Timer1 kesmesi 0.5 sn de bir
void timer1_kesme () // Kesme fonksiyonu ismi
{
set_timer1(3036); // TMR1 değeri belirleniyor

output_toggle(pin_b2);

j++;

if(j==2) // 1 sn olduğunda fonksiyona gir
{
j=0;

f=i; // frekasn değeri hesaplanır

if(f==50)
{
output_high(pin_b1);

}

else
{
output_low(pin_b1);

}

i=0;
}

}

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

void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_spi(SPI_SS_DISABLED); // SPI 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(0x01); // RB0 pini giriş,diğer uçlar çıkış olarak yönlendiriliyor
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor

setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Timer1 ayarları yapılıyor
set_timer1(3036); // TMR1 değeri belirleniyor

enable_interrupts(INT_timer1); // int_timer0 kesmesini aktif yapar

ext_int_edge(H_TO_L); // INT_EXT kesmesinin düşen kenarda aktif olacağını belirtir

enable_interrupts(INT_EXT); // INT_EXT kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

while(1); // Sonsuz döngü

}

  İşte böylece dijital bilgiyi almış olduk.  Genellikle analog bilgiler bu şekilde dijital sistemlere uyumlu hale getirilir.  Tabi bunun dışında çok çeşitli yollarda vardır 🙂   Şimdilik o yollardan bir tanesini öğrenmiş olduk.

  Dökümanları uradan indirebilirsiniz; external interrupt

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz