Bizim için Analog Nedir?
Analog büyüklük, herhangi iki noktası arasına sınırsız sayıda değer alabilen büyüklüktür. Örneğin 25 derece sıcaklık ile 27 derece sıcaklık arasını sonsuz parçalara bölebiliriz. Örnek olarak 25.067 derece veya 26.99 derece gibi. Kullandığımız Isı, Ses, Işık, Zaman gibi büyüklüklerin hepsi analog büyüklüklerdir. Bizim bu büyüklükleri mikroişlemciler ile algılayabilmemiz için bu büyüklüklerin dijital büyüklüklere dönüştürülmesi gerekir.Bu dönüştürmeyi yapan modüllere ise ADC modülleri denir. Analog-Dijital Converter, modülü çoğu mikrodenetleyicide dahili olarak bulunmaktadır. ADC birimi bulunmayan mikrodenetleyiciler için ise harici olarak seri veya paralel çıkış üretebilen ADC entegreleri kullanılır.
ADC, birimlerinin en önemli özellikleri bit sayılarıdır. 10 bitlik ADC modülüne sahip bir mikrodenetleyici 0 ile 1023 arasında, 8 bitlik bir mikrodenetleyici ise 0 ile 255 arasında değerler alabilmektedir. ADC biriminin bit sayısı arttıkça çözünürlüğü de artmaktadır.
Şöyle diyelim ki elimizde çıkış voltajı 0-5V arasında değişen bir uzaklık sensörümüz var ve 10 bitlik bir mikrodenetleyicimiz. O halde 5V/1023=0.0048875855327468 gibi bir değer elde ederiz. Bu değer bizim ADC modülümüzün hassasiyetidir. ADC birimimiz her bir 4.8mV değerindeki voltaj değişimlerini hissedebilmektedir. Eğer ADC birimimizden okuduğumuz değer 50 ise ADC biriminin girişinde bulunan voltaj değeri 50*0.0048875855327468=~0.2443792766373400V’dur.
MikroC, Anolog-Dijital Çeviricinin okunmasını ADC kütüphanesi ile çok basit hale getirmiş. “ADC_read(analog kanal)” komutu ile istediğimiz analog kanaldan ADC'yi gerçekleştirebiliyoruz. Ama öncesinde giriş, çıkış ve referans ayarlarını yapmak gerekiyor. Bunun için de PIC mikrodenetleyicilerin, kataloglarındaki A/D Modül kısmını incelemeniz yeterli. Çünkü her mikrodenetleyicide benzer fakat bazı değişikler var.
ADC Modülüne Örnek Proje
Şimdi öğrendiğimiz bu bilgileri kullanarak örnek bir kod yazalım. Kodumuzda 0V 0'a karşılık gelirken 5V 1023'e karşılık gelecek şekilde çalışacak. Mikro denetleyici olarak ise P18F2550 kullanacağız. Örneğimizde potansiyometreden gelen değeri 10-bitlik olarak 10 adet LED'e aktaran bir devre kuralım ve kodumuzu yazalım.
unsigned int adc_deger; // değişken tanımlandı
void main(){
ADCON0=0b00000001; // A/D modülü aktif edildi
ADCON1=0b00001110; // Anolog pinler giriş olarak ayarlandı
CMCON =7; // Karşılaştırıcılar pasif edildi
TRISA=1; // A portu giriş ayarlandı
TRISB=0; // B portu çıkış ayarlandı
TRISC=0; // C portu çıkış ayarlandı
PORTA=0; // A portu temizlendi
PORTB=0; // B portu temizlendi
PORTC=0; // C portu temizlendi
while(1) // Sonsuz döngüye girildi
{
adc_deger= ADC_Read(0); // okunan analog deger değişkene kaydedildi
PORTB=adc_deger; // LSB 8-bit B portuna kaydedildi
PORTC=adc_deger>>8; // MSB 2-bit C portuna kadedildi
}
}
Hiç yorum yok:
Yorum Gönder