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
#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(0×00); // C portu komple çıkış
set_tris_e(0x0F); // E portu komple giriş
output_c(0×00); // 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.
C ile programlama uygulamaları-15
Hiç yorum yok:
Yorum Gönder