Dijital Inputlar ve Onları İşlemek(Uygulama)
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.
Makinaların birbiri ile anlaşabilmeleri için belli protokoller ve belli veri transfer kuralları geliştirilmiştir. Her bilgi için farklı kurallara sahip iletişim protokolleri vardır. Ya da bunlar her makina için farklı olabilirler. Makinalara yapay zeka özelliği katan işlemciler ve gömülü sistemler dijital sistemlerdir. Dijital bir sistemi ancak dijital giriş ve çıkışlar ile kontrol edebilirsiniz.
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.
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.
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;
Ya da sıcaklık yoğunluğunu dijitale çevirmek için örnek bir devre yine entegrenin datasheetinden;
Ş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;
Ş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.
Program şu şekilde;
c | copy code |?
01
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
02
03
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
04
05
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
06
07
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
08
09
int i=0; // Tamsayı tipinde değişken tanımlanıyor
10
int j=0; // Tamsayı tipinde değişken tanımlanıyor
11
int f; // Tamsayı tipinde değişken tanımlanıyor
12
//****** Dış Kesme Fonksiyonu *****************
13
#int_ext // Dış (External) RB0/INT kesmesi, b1 pinine gelen her bi sinyalde bu fonksiyona girer
14
void ext_kesmesi () // Dış kesme fonksiyonu
15
{
16
output_toggle(pin_b3);
17
18
i++;
19
20
}
21
22
#int_timer1 // Timer1 kesmesi 0.5 sn de bir
23
void timer1_kesme () // Kesme fonksiyonu ismi
24
{
25
set_timer1(3036); // TMR1 değeri belirleniyor
26
27
output_toggle(pin_b2);
28
29
j++;
30
31
if(j==2) // 1 sn olduğunda fonksiyona gir
32
{
33
j=0;
34
35
f=i; // frekasn değeri hesaplanır
36
37
38
if(f==50)
39
{
40
output_high(pin_b1);
41
42
}
43
44
else
45
{
46
output_low(pin_b1);
47
48
}
49
50
i=0;
51
}
52
53
54
}
55
56
57
/********* ANA PROGRAM FONKSİYONU********/
58
59
void main ( )
60
{
61
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
62
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
63
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
64
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
65
setup_adc(ADC_OFF); // ADC birimi devre dışı
66
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
67
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
68
69
70
set_tris_b(0x01); // RB0 pini giriş,diğer uçlar çıkış olarak yönlendiriliyor
71
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor
72
73
setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Timer1 ayarları yapılıyor
74
set_timer1(3036); // TMR1 değeri belirleniyor
75
76
77
enable_interrupts(INT_timer1); // int_timer0 kesmesini aktif yapar
78
79
ext_int_edge(H_TO_L); // INT_EXT kesmesinin düşen kenarda aktif olacağını belirtir
80
81
82
enable_interrupts(INT_EXT); // INT_EXT kesmesini aktif yapar
83
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
84
85
while(1); // Sonsuz döngü
86
87
88
}
İş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
Elektronik Hobi Dijital Inputlar ve Onları İşlemek(Uygulama)













