11. ADC (Analog to Digital Converter)
Transkript
11. ADC (Analog to Digital Converter)
mikroC Dili ile Mikrodenetleyici Programlama Ders Notları / Dr. Serkan DİŞLİTAŞ 11. ADC (Analog to Digital Converter) ADC (Analog Dijtal Çevirici) modülü, dahili ADC’ye sahip birçok AVR mikrodenetleyici kullanılabilmektedir. Aşağıdaki şekilde ADC kullanımı için örnek bir bağlantı şeması görülmektedir. ile Şekil. ADC kullanımı için örnek bir bağlantı şeması ADR_Read kütüphane fonksiyonu, Single-Ended modda kolay bir kullanım sağlamaktadır. MCU’ya bağlı olarak 10 ya da 12 bit çözünürlükte unsigned veri tipinde değer geri döndürmektedir. Analog giriş kanal sayısı da yine MCU’ya bağlı olarak değişebilmektedir. Atmega16 için A portunda A0-A7 olmak üzere toplam 8 adet analog giriş mevcuttur. AREF gerilim değeri ADC çözünürlük ile ilişkilidir. AREF=5V ve ADC 10 bit çözünürlükte ise; tasarlanan sistemde ölçüm hassasiyeti 5/2 10=0.00488V olur. Kütüphane Adı ADC_Read Prototip Açıklama unsigned ADC_Read (char channel); MCU’ya bağlı olarak; Kanal sayısı değişkenlik gösterebilmektedir (A0, A1, … A7) 10-bit ya da 12-bit çözünürlükte unsigned veri. unsigned veri; … … veri = ADC_Read (1); // A1 kanalından analog değer okuma Örnek Kullanım -69- mikroC Dili ile Mikrodenetleyici Programlama Ders Notları / Dr. Serkan DİŞLİTAŞ Örnek Uygulama 1 -70- mikroC Dili ile Mikrodenetleyici Programlama Ders Notları / Dr. Serkan DİŞLİTAŞ Laboratuvar Uygulaması : Mikrodenetleyici Analog Girişlerinin Kullanılması Mikrodenetleyici Tabanlı Olarak LM35 Sensörü ile Sıcaklık Ölçümü uygulaması. Devre Şeması -71- mikroC Dili ile Mikrodenetleyici Programlama Ders Notları / Dr. Serkan DİŞLİTAŞ Mikrodenetleyici Kaynak Kodlar /* ser_LM35.c : LM35 Sıcaklık Sensörü Uygulaması Çalışma Gerilimi : 4-30V Ölçüm aralığı : -55 C ile 150 C arası Çıkış Gerilimi : Doğrusal olarak her 1 C için 10mV çıkış gerilimi üretir Ölçüm Doğruluğu : Yaklaşık 0.5 C */ // LCD module connections sbit LCD_RS at PORTD2_bit; sbit LCD_EN at PORTD3_bit; sbit LCD_D4 at PORTD4_bit; sbit LCD_D5 at PORTD5_bit; sbit LCD_D6 at PORTD6_bit; sbit LCD_D7 at PORTD7_bit; sbit LCD_RS_Direction at DDD2_bit; sbit LCD_EN_Direction at DDD3_bit; sbit LCD_D4_Direction at DDD4_bit; sbit LCD_D5_Direction at DDD5_bit; sbit LCD_D6_Direction at DDD6_bit; sbit LCD_D7_Direction at DDD7_bit; // End LCD module connections // Değişken Tanımları ------------------------float T; // Sıcaklıka char *str_T = " "; // Sıcaklık String // LCD Hazırlık ------------------------------void LCD_Hazirla() { Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear LCD display Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off } // Sicakık Oku (LM35 - PortA - PA0) -----------------------------------float Sicaklik_Oku() { // T = (PA0 * 5/1023)/0.010 // 0.010 = 10mV LM35 her 1C için 10mV üretir return (ADC_Read(0) * 5.0 / 10.23); // Doğrudan sıcaklık değeri elde edilir } // --------------------------------------------------------------------// -------------------------------------------// ANA GÖVDE ---------------------------------void main() { // LCD Hazırla LCD_Hazirla(); for (;;) // Sonsuz Çevrim { // Sıcaklık Oku T = Sicaklik_Oku(); // Tip Dönüştür float -> str FloatToStr(T, str_T); //LCD Yaz Lcd_Out(1,1, "LM35 Uygulama "); Lcd_Out(2,1, "T: "); Lcd_Out(2,6, str_T); Delay_ms(50); } } -72-