CCS C ile ADC Uygulaması

pr_01_37_max

 

Analog değerler zamana göre sürekli (kesintisiz) olduğundan, bütün zaman dilimlerine karşılık gelen bir analog gerilim değeri vardır. Her analog değer için bir dijital değer oluşturmak imkânsız denilecek kadar karmaşık ve maliyetli olacaktır. Bu nedenle analog değer üzerinden belirlenmiş zaman aralıklarında örnekler alınır. Her örnek için seviyesine göre kodlanmış dijital bir değer üretilir. ADC devrelerin çalışmasını “örnekle, karşılaştır, dijital olarak kodla” şeklinde özetleyebiliriz.

Aşağıdaki örekte 0-5V arası ölçüm yapan voltmetre tasarlanmıştır

/******************************************************
 PIC16F877 ile Dahili ADC Uygulaması
PIC PROG/DEKA : Port B jumper'ı LCD konumunda olmalı
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

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

// Denetleyici konfigürasyon ayarları
#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> // 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);
 }
}

adc uygulamaları

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.