본문 바로가기

[Microchip]/PIC24F

[PIC24F16KA EVM] ADC 테스트 - TSL251 Light to Voltage Converter

[PIC24F16KA EVM] ADC 테스트 - TSL251 Light to Voltage Converter

 

 

PIC24F16KA는 500ksps 10bit ADC를 내장하고 있다.

하드웨어적으로 약간의 차이는 있지만 코드는 dsPIC33 ADC 테스트와 거의 호환이 된다.

 

 

 

 

PIC24F ADC 테스트 동영상

PIC24의 ADC는 10bit이고 광센서 TSL251 Light to Voltage Converter를 이용해서 ADC값을 출력해 보았다.

LX1971 센서와 비교해서 광센서의 성능차이도 확이해 볼 수 있다.

 

 

 

 

PIC24F ADC 초기화코드

void AdcInit(void)
{
 //ADCON1 레지스터 설정
 AD1CON1bits.SAMP = 0;  //ADC 샘플/홀드 홀딩
 AD1CON1bits.ASAM = 1;  //ADC 변환 즉시 샘플링 시작 설정
// AD1CON1bits.SIMSAM=0;  //순서대로 멀티플 채널 샘플 설정
 AD1CON1bits.SSRC = 7;  //샘플 클럭 설정: 내부 카운터 샘플링 끝나고 변환시작
 AD1CON1bits.FORM = 0;  //데이터 출력 형식: Integer

 //AD1CON2 레지스터
 AD1CON2bits.CSCNA=0;  //CH0+ 입력에 대한 스캔 입력 설정: Scan inputs
 AD1CON2bits.VCFG = 0;  //AD변환 기준 전압 설정: Vreg+ = Vdd, Vreg- = Vss

 //AD1CON3 레지스터
 AD1CON3bits.ADCS = 0x3F; //ADC 변환 클럭 설정 : 최대치 설정
        //Tad=Tcy*(ADCS+1)=(1/40M)*64 = 1.6us (625KHz)
        //10비트 ADC 변환 시간 Tc = 12*Tad = 19.2us (52KHz)
 AD1CON3bits.SAMC=31;   //Auto Sample Time = 31*Tad
 AD1CON3bits.ADRC=0;   //ADC Clock을 시스템 클럭 사용 설정

 //AD1CHS0 레지스터 :
// AD1CHS0=0;     //디폴트 값

 //AD1CSSL 레지스터 : AN0 ~ AN15 아날로그 입력 핀 설정
 AD1CSSL = 0;
  Sbi(AD1CSSL, BIT0);  //AN0 ~ AN1 AD 입력 핀 설정


 //ADC1 인터럽트 설정  
 IFS0bits.AD1IF = 0;   //ADC1 인터럽트 플래그 클리어
 IEC0bits.AD1IE = 0;   //ADC1 인터럽트 시작 설정

 //ADC1 컨버터 동작 개시 설정
 AD1CON1bits.ADON = 1;  //ADC1 컨버터 동작
}

 

 

#define adc_WaitForCoversion()    while(!AD1CON1bits.DONE)
#define adc_GetData()       (ADC1BUF0)
#define adc_SetChannel(Ch)     //AD1CSSL = ~(Ch);AD1PCFGL = (Ch); 
#define adc_Run()       AD1CON1bits.SAMP = 0;

 

 

//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 adc_SetChannel(Channel);
 adc_Run();

 adc_WaitForCoversion();

 return adc_GetData();
}

 

 

 

 

반응형