dsPIC33E - ADC 테스트
dsPIC 은 10/12bit SAR ADC로 변환 속도는 최대 1.1Msps 이다. dsPIC33E에서는 약간의 변화가 있었는데 레지스터 맵이 조금 변경되어 기존코드의 수정이 필요 하다.
dsPIC33E ADC블록도
가장 큰 변화는 ADC1BUF가 FIFO형태로 변경된것 같다.
dsPIC33E ADC초기화 코드
//------------------------------------------------------------------------------
// Function Routine
//ADC Initialize
void AdcInit(void)
{
//ADCON1 레지스터 설정
AD1CON1bits.SAMP = 0; //ADC 샘플/홀드 홀딩
AD1CON1bits.ASAM = 1; //ADC 변환 즉시 샘플링 시작 설정
AD1CON1bits.SIMSAM=0; //순서대로 멀티플 채널 샘플 설정
AD1CON1bits.SSRC = 7; //샘플 클럭 설정: 내부 카운터 샘플링 끝나고 변환시작
AD1CON1bits.FORM = 0; //데이터 출력 형식: Integer
//(DOUT = 0000 dddd dddd dddd)
AD1CON1bits.AD12B =1; //AD변환 비트 값 설정: 12-bit, 1-channel ADC operation
AD1CON1bits.ADDMABM=0; //DMA 버퍼를 Scatter/Gather 모드로 쓰기 설정
//AD1CON2 레지스터
AD1CON2bits.CSCNA=0; //CH0+ 입력에 대한 스캔 입력 설정: Scan inputs
AD1CON2bits.VCFG = 0; //AD변환 기준 전압 설정: Vreg+ = Vdd, Vreg- = Vss
//AD1CON3 레지스터
AD1CON3bits.ADCS = 0x08;//0x3F; //ADC 변환 클럭 설정 : 최대치 설정
//Tad=Tcy*(ADCS+1)=(1/40M)*64 = 1.6us (625KHz)
//10비트 ADC 변환 시간 Tc = 12*Tad = 19.2us (52KHz)
AD1CON3bits.SAMC=1; //Auto Sample Time = 31*Tad
AD1CON3bits.ADRC=0; //ADC Clock을 시스템 클럭 사용 설정
//AD1CON4 Register 레지스터
AD1CON4bits.DMABL=0; //아날로그 입력당 DMA 버퍼 영역 설정: 1 워드 설정
//AD1CHS 레지스터 : ADC1 입력 채널 1,2,3 선택
AD1CHS123=0; //여기에서는 CH1,CH2,CH3을 사용 안함, 디폴트 값 0
//AD1CHS0 레지스터 :
AD1CHS0=0; //디폴트 값
//AD1CSSL 레지스터 : AN0 ~ AN15 아날로그 입력 핀 설정
AD1CSSL = 0;
//AD1PCFGL 레지스터
AD1CSSL = 0x0000;
AD1CSSLbits.CSS0=1;
AD1CSSLbits.CSS1=1;
//ADC1 인터럽트 설정
IFS0bits.AD1IF = 0; //ADC1 인터럽트 플래그 클리어
IEC0bits.AD1IE = 0; //ADC1 인터럽트 시작 설정
//ADC1 컨버터 동작 개시 설정
AD1CON1bits.ADON = 1; //ADC1 컨버터 동작
}
dsPIC33E ADC Test 동영상
가변저항에 의해 변화되는 전압값을 그래프로 표시
반응형