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/ (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 .
}
}