15 Haziran 2018 Cuma

PIC adc uygulaması-1

12voltl'a çalışır ve 7805 regüle entegresiyle gerilim 5volt'a düşürülerek pıc16F877 entegresini ve lcd'yi besler.16f877 ile yapılmış adc uygulamasıdır. PIC'in ADC uçları olan E0,E1,E2 pinleri (AN5,AN6,AN7) kullanılmıştır. C5 pini ise kesme ucu olarak kullanılmıştır. Kesme bir programın çalışması sırasında başka bir işlemi de yapmasına denir burayı isterseniz program da ve devre bağlantısında silip iptal edebilirsiniz.


MALΖEME LİSTESİ:
1-7805
2-4MHz kristal
3-2adet 22pf
4-100nf
5-4k7
6-330ohm
7-2x16 LCD
8-16F877
9-3adet 100ohm
10-4adet 10K pot
11-LED

DEVRE ŞEMASI:












CCSC KODU:
#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);
   }

}

Hiç yorum yok:

Yorum Gönder