İyi çalışmalar arkadaşlar,
MPLAB ile uygulama geliştirmeye yeni başladım. ADC modülüne bakıyorum fakat bir kod bloğunda neler olduğunu anlamadığım bir kısım var. Onu sizlerle paylaşıp ADC mantığını anlamak istiyorum. Kodun yazıldığı proje 16F877A ile yapılmış.
#include <xc.h>
#define _XTAL_FREQ 8000000
void ADC_Init()
{
ADCON0 = 0x81; //Turn ON ADC and Clock Selection
ADCON1 = 0x00; //All pins as Analog Input and setting Reference Voltages
}
unsigned int ADC_Read(unsigned char channel)
{
if(channel > 7) //Channel range is 0 ~ 7
return 0;
ADCON0 &= 0xC5; //Clearing channel selection bits
ADCON0 |= channel<<3; //Setting channel selection bits
__delay_ms(2); //Acquisition time to charge hold capacitor
GO_nDONE = 1; //Initializes A/D conversion
while(GO_nDONE); //Waiting for conversion to complete
return ((ADRESH<<8)+ADRESL); //Return result
}
void main()
{
unsigned int a;
TRISA = 0xFF; //Analog pins as Input
TRISB = 0x00; //Port B as Output
TRISC = 0x00; //Port C as Output
ADC_Init(); //Initialize ADC
do
{
a = ADC_Read(0); //Read Analog Channel 0
PORTB = a; //Write Lower bits to PORTB
PORTC = a>>8; //Write Higher 2 bits to PORTC
__delay_ms(100); //Delay
}while(1); //Infinite Loop
}
Arkadaşlar kodun tamamı burada. Ben bazı kısımları anlamadım şimdi size onları göstereceğim.
void ADC_Init()
{
ADCON0 = 0x81; //Turn ON ADC and Clock Selection
ADCON1 = 0x00; //All pins as Analog Input and setting Reference Voltages
}
Bu kod bloğunda yaptığı şeyi anladım sayılır. Size de söyleyeyim beni doğrulayın. Burada ilgili PIC in datasheet'inden bakarak sahip olduğu ADC modüllerini adreslendirdik.
ADCON0 &= 0xC5; //Clearing channel selection bits
ADCON0 |= channel<<3; //Setting channel selection bits
Bu kısımda ise ne yapıldığını tam anlamadım. Bit işlemlerinden sonra elde edilen adres yine aynı oldu. Ne farketti onu anlamadım.
return ((ADRESH<<8)+ADRESL); //Return result
Okunan analog değer ADRESH ve ADRESL'e kaydediliyor diye biliyorum. Fakat burada tam olarak nasıl bir iş dönüyor tam bilmiyorum. Genel olarak ufak bir açıklama ile kod parçacığında ne oluyor beni aydınlatırsanız çok sevinirim.