[PIC12F673 EVM] ADC테스트
PIC12F 에는 10비트 ADC가 4채널 포함되어 있다.
아래는 PIC12F683의 ADC블록도 이다.
사용법은 간단하다. ADCON0레지스터에 초기화 해주고 ADRES레지스터 값을 읽으면 된다.
PIC12F683 ADC 제어 코드
VR이 연결된 채널3의 ADC값을 LCD에 출력해서 확인하는 테스트를 해 보았다.
먼저 PIC12F683보드의 전원을 연결하고 VR을 연결한다.
LCD에 표기하기 위해 [LCD Module] 을 이용한다. 브레드보드에서 쉽게 확장하기 위해 만들었던 PCB를 이용하면 쉽게 연결가능하다.
PIC12F683 ADC테스트 예제 소스코드
테스트 동영상
PIC12F 에는 10비트 ADC가 4채널 포함되어 있다.
아래는 PIC12F683의 ADC블록도 이다.
사용법은 간단하다. ADCON0레지스터에 초기화 해주고 ADRES레지스터 값을 읽으면 된다.
PIC12F683 ADC 제어 코드
void ADC_Init(void)
{
Cbi(ANSEL, BIT3);
Sbi(TRISIO, BIT4);
ADCON0 = 0x8D;
}
unsigned int ADC_Read(unsigned char Ch)
{
if(Ch == 0)Cbi(ADCON0, BIT2|BIT3);
else if(Ch == 1){Sbi(ADCON0, BIT3);Sbi(ADCON0, BIT2);}
else if(Ch == 2){Sbi(ADCON0, BIT3);Cbi(ADCON0, BIT2);}
else if(Ch == 3)Sbi(ADCON0, BIT2|BIT3);
GODONE = 1;while(GODONE);
return (ADRESH<<8)|ADRESL;
}
{
Cbi(ANSEL, BIT3);
Sbi(TRISIO, BIT4);
ADCON0 = 0x8D;
}
unsigned int ADC_Read(unsigned char Ch)
{
if(Ch == 0)Cbi(ADCON0, BIT2|BIT3);
else if(Ch == 1){Sbi(ADCON0, BIT3);Sbi(ADCON0, BIT2);}
else if(Ch == 2){Sbi(ADCON0, BIT3);Cbi(ADCON0, BIT2);}
else if(Ch == 3)Sbi(ADCON0, BIT2|BIT3);
GODONE = 1;while(GODONE);
return (ADRESH<<8)|ADRESL;
}
VR이 연결된 채널3의 ADC값을 LCD에 출력해서 확인하는 테스트를 해 보았다.
먼저 PIC12F683보드의 전원을 연결하고 VR을 연결한다.
LCD에 표기하기 위해 [LCD Module] 을 이용한다. 브레드보드에서 쉽게 확장하기 위해 만들었던 PCB를 이용하면 쉽게 연결가능하다.
PIC12F683 ADC테스트 예제 소스코드
void main(void)
{
unsigned int cnt = 0;
//시스템 초기화
SystemInit();
//LED초기화
Led1Init();
//ADC초기화
ADC_Init();
//LCD초기화
InitShfitRegister();
LcdInit();
// 0123456789abcdef
LcdDspStr(0, 0, "1:PIC12F683 EVM ");
LcdDspStr(0, 1, "ADC:");
while(1)
{
SendIntStr(5, 1, ADC_Read(3));
Delay(50);
}
}
{
unsigned int cnt = 0;
//시스템 초기화
SystemInit();
//LED초기화
Led1Init();
//ADC초기화
ADC_Init();
//LCD초기화
InitShfitRegister();
LcdInit();
// 0123456789abcdef
LcdDspStr(0, 0, "1:PIC12F683 EVM ");
LcdDspStr(0, 1, "ADC:");
while(1)
{
SendIntStr(5, 1, ADC_Read(3));
Delay(50);
}
}
테스트 동영상
반응형