ADC Uygulaması-1

AMAÇ:

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

YAPILACAK İŞ:

ADC uygulamasının nasıl yapıldığını öğrenmek.

DENEYİN BAĞLANTI ŞEMASI

    PROGRAM KODU:

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

#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.

#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(c) //Port yönlendirme komutları C portu için geçerli

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

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include // lcd.c dosyası tanıtılıyor

#INT_AD // ADC çevrimi bitti kesmesi

void ADC_Kesmesi ( )

{

output_high(pin_c5); // RC5 çıkışı 1

delay_ms(200);

output_low(pin_c5); // RC5 çıkışı 0

}

unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor

float voltaj; // ondalıklı tipte voltaj isminde değişken tanıtılıyor

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

void main ( )

{

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

setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı

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

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

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

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

set_tris_e(0x0F); // E portu komple giriş

output_c(0x00); // C portu çıkışını sıfırla

setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32

setup_adc_ports(ALL_ANALOG); // Tüm AN girişleri analog

enable_interrupts(INT_AD); // AD çevrimi bitti kesmesi tanıtılıyor

enable_interrupts(GLOBAL); // Tüm kesmeler aktif

lcd_init(); // LCD hazır hale getiriliyor

printf(lcd_putc,”\f ADC UYGULAMASI “); // LCD’ye yazı yazdırılıyor

delay_ms(1500);

while(1) // sonsuz döngü

{

set_adc_channel(5); // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak

delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir

bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

voltaj=0.0048828125*bilgi; // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor

printf(lcd_putc,”\fAN5 Kanali”);

delay_ms(1500);

printf(lcd_putc,”\fDijital=%lu”,bilgi); // AN5 ucundaki sinyalin dijital karşılığı LCD’ye aktarılıyor

printf(lcd_putc,”\nVoltaj=%fV”,voltaj); // AN5 ucundaki sinyalin gerilim değeri LCD’ye aktarılıyor

delay_ms(2500);

set_adc_channel(6); // RE1/AN6 ucundaki sinyal A/D işlemine tabi tutulacak

delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir

bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

voltaj=0.0048828125*bilgi; // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor

printf(lcd_putc,”\fAN6 Kanali”);

delay_ms(1500);

printf(lcd_putc,”\fDijital=%lu”,bilgi); // AN6 ucundaki sinyalin dijital karşılığı LCD’ye aktarılıyor

printf(lcd_putc,”\nVoltaj=%fV”,voltaj); // AN6 ucundaki sinyalin gerilim değeri LCD’ye aktarılıyor

delay_ms(2500);

set_adc_channel(7); // RE2/AN7 ucundaki sinyal A/D işlemine tabi tutulacak

delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir

bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

voltaj=0.0048828125*bilgi; // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor

printf(lcd_putc,”\fAN7 Kanali”);

delay_ms(1500);

printf(lcd_putc,”\fDijital=%lu”,bilgi); // AN7 ucundaki sinyalin dijital karşılığı LCD’ye aktarılıyor

printf(lcd_putc,”\nVoltaj=%fV”,voltaj); // AN7 ucundaki sinyalin gerilim değeri LCD’ye aktarılıyor

delay_ms(2500);

}

}

İŞLEM BASAMAKLARI

1.Devreyi bord üzerine kurunuz.

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

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

 

CEVAP VER

Please enter your comment!
Please enter your name here