XC8 İle ADC ve LCD Uygulaması

Başlatan serhat1990, 27 Ekim 2015, 03:02:00

serhat1990

Merhaba arkadaşlar, PIC18F46K20 ile yapılmış bir adc uygulaması paylaşmak istedim. Ayrıca XC8 için LCD kütüphanesi de mevcut. Umarım işinize yarar.

Uygulamayı ait tüm dökümanları aşağıdaki linkten indirebilirsiniz.

http://www.serhatevcim.com/2015/10/26/xc8-derleyicisi-ile-pic18f46k20-serisi-programlama-adc-uygulamasi/

İyi çalışmalar dilerim.



/*

       EXS04
     18F46K20
   ADC UYGULAMASI

 Alınan 10 Bitlik ADC değerine göre ledlerde analog sinyal için seviye gösterimi yapar... 

*/


#include <xc.h>      // Header dosyaları eklenir ...
#include "lcd.h"     // LCD kütüphanesi yüklenir.

#define _XTAL_FREQ 64000000      // Kristal frekansı 64MHz ,


/*_________________________   Konfigrasyon Bitleri _____________________________*/



#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF                           // CONFIG1H
#pragma config PWRT = ON, BOREN = OFF, BORV = 30                              // CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768                                    // CONFIG2H
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC , HFOFST = ON  // CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF                              // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF                        // CONFIG5L
#pragma config CPB = OFF, CPD = OFF                                       // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF                     // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                              // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF                  // CONFIG7L
#pragma config EBTRB = OFF                                                // CONFIG7H


// ____________ Led Tanımlamaları ____________ //

            
#define LED4 LATA2   // Ledler tanımlanır ...
#define LED3 LATA3   // Ledler tanımlanır ...
#define LED2 LATA4   // Ledler tanımlanır ...
#define LED1 LATA5   // Ledler tanımlanır ...


unsigned int adc_bilgi=0;
	
// ADC bilgisi burada tutulur ...


void bekle(unsigned int zaman)              // İstenilen sürede gecikme yapan fonskiyondur ... Girilen değer x 100uS 

{

   
unsigned int sure;            // 16 bitlik değişken oluşturduk ...

   
for(sure=0;sure<zaman;sure++)   // Girilen değer döndürülür ... 
   
{
      
__delay_us(100);      // 100uS bekle ...
   
}

}      


void main()
{
 
   
OSCCON=0x70;               //  Osilatör ayarları yapılıyor.
   
OSCTUNE=0x40;            // Osilatör ayarları yapılıyor.
   
ANSELH=0x00;             // B portu dijital input buffer aktif.
   
ANSEL=0x03;                // A0 - A1 analog diğerleri dijital . 
   
TRISA=0x03;             // A portu giriş / çıkış ayarları yapıldı .
   
TRISB=0x00;                // B portu çıkış yapıldı.   
   
TRISC=0x94;                // C portu giriş / çıkış ayarları yapıldı .
   
TRISE=0x08;                // E portu giriş / çıkış ayarları yapıldı . ( MCLR Giriş )
   
lcd_init(FOURBIT_MODE);   // LCD başlangıç ayarlarını yükleriz . LCD 4 bit üzerinden sürülecek .
   
ADCON1=0x00;
	
	
	
	
 
// -Vref = gnd , +Vref = VCC olarak ayarlandı ...
   
ADCON2=0xFE;
	
	
	
	
 
// Sağa dayalı adc sonucu alacaz , bkz : ADCON2 register ... --> 88 Dİ
   
ADCON0=0x01;
	
	
	
	
 
// AN0 seçildi ... ADC aktif ...
   
lcd_goto(S1_1);lcd_puts(" ADC UYGULAMASI ");      // LCD 1.satıra  ADC UYGULAMASI  YAZ 1.Satır 1.Sütundan başlayarak


   
while(1)      

   {
	
	
ADCON0=ADCON0|0x02;
	
// Go/done = 1 
	
	

	
	
while(
GO/DONE);
	
	
// Çevrim bitene kadar bekleyelim...
	
  
	
adc_bilgi=ADRESL;
	
// Düşük değerlikli 8 bit alınır.
	
	
adc_bilgi+=((unsigned int)ADRESH *256);
	
// 10 bitlik adc bilgisi oluşturulur ...
	
	
lcd_clear();
	
	
// LCD temizle ...
	
	
lcd_goto(S1_1);lcd_puts(" ADC UYGULAMASI ");      // LCD 1.satıra  ADC UYGULAMASI  YAZ 1.Satır 1.Sütundan başlayarak
	
	
lcd_goto(S2_7);
	
	
	
	
	
	
	
	
	
  
// 2.satır 7 sütuna gidelim lcd'de.
	
	
lcd_data(adc_bilgi/1000+48);
	
	
	
	
	
  
// adc bilgisi yazdırılır.
	
	

	
	
lcd_data((adc_bilgi%1000)/100+48);
	
	
	
	
  
// adc bilgisi yazdırılır.
	
	
lcd_data((adc_bilgi%100)/10+48);
	
	
	
	
  
// adc bilgisi yazdırılır.
	
	
lcd_data(adc_bilgi%10+48);  
	
	
	
	
	
  
// adc bilgisi yazdırılır.
	
	
bekle(2000);
	
	
// 200mS bekleyelim.


	
	
if(
adc_bilgi==0){LED4=0;LED3=0;LED2=0;LED1=0;}
	
	
	
// adc seviyesine göre ledleri yakalım .
	
	
if((
adc_bilgi>0) && (adc_bilgi<255)){LED4=1;LED3=0;LED2=0;LED1=0;}
	
	
	
// adc seviyesine göre ledleri yakalım .
	
	
if((
adc_bilgi>=255) && (adc_bilgi<512)){LED4=1;LED3=1;LED2=0;LED1=0;}
	
// adc seviyesine göre ledleri yakalım .
	
	
if((
adc_bilgi>=512) && (adc_bilgi<768)){LED4=1;LED3=1;LED2=1;LED1=0;}
	
// adc seviyesine göre ledleri yakalım .
	
	
if(
adc_bilgi>=768){LED4=1;LED3=1;LED2=1;LED1=1;}
	
// adc seviyesine göre ledleri yakalım .
	


	
	
	

   }

}


Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.