본문 바로가기

ARM/강의

A/D 컨버터(ADC)

컨버터의 개요

A/D 컨버터(ADC)(B.292p)

AT91SAM7S256은 8채널 10비트와 8비트 분해능의 축차비교형 A/D 컨버터를 가지고있다.

8채널 아날로그 입력신호 중에 AD0~3은 병렬 I/O포트와 겸용, AD4~7은 전용 핀을 가짐.

축차비교형이란?

☞ 축차비교형 ADC는 SAR(successive Approximation Register)을 사용하여 최상위 비트로부터순서대로 하위 비트 쪽으로 수정하여 가는 방법으로 DAC의 출력을 훨씬 빨리 아날로그 입력 전압에 근사시킨다. 비교적 변환시간이 빠르고 회로도 간단하여 현재 저가형이면서 분해능이 비교적 높은 범용 A/D Converter에 가장 널리 사용되고 있다. 변환 중에 아날로그 입력전압이 일정하게 유지되어야 하므로 샘플/홀드가 반드시 필요하다.

< 축차 비교형 ADC >.

A/D 컨버터는 정상모드에서 항상 클럭이 공급되어 켜져있으며 슬립모드에서는 클럭이 차단된다.

10비트 분해능 ☞ 5MHz이하 사용

8비트 분해능 ☞ 8MHz이하 사용

조광센서 테스트!
#define ADC_CH7 7                        // ADC Channel 7 

void
 ADC_Init(unsigned int uiCH)
{  // A/D컨버터 설정 함수!
  ADC_CR = 0x000000001;    // Reset
  ADC_CHER = 1<<uiCH;      // 해당 채널 동작허용
  ADC_MR = 5<<8;        // 4Mhz
  return;
}
A/D컨버터 설정 함수이다. 채널은 7번 채널을 사용하였고 채널 셋팅 ADC_Init(ADC_CH7); 이렇게 부르면 된다. 
while(1)
  {
    ADC_CR = 0x00000002;      // ADC Start
    while(!(ADC_SR&(1<<7)));    // A/D 변환될때까지 대기
    usData = ADC_CDR7&0x000003FF;  // 안전을 위해서 0으로 데이터 초기화
    for(iCnt=04>iCnt; ++iCnt)
    {  // 상수를 문자로 변환!
      cBuf[3-iCnt]=((usData/square(10, iCnt))%10)+'0';
    }  
    DBGU_Init();          // DBGU Setting
    DBGU_Str(cBuf);
    DELAY(1500000);      // Macro 설정되어있음 
  }

ADC_CR = 0x00000002; 컨버팅 시작을 하고 
while(!(ADC_SR&(1<<7))); 상태레지스터에서 7번 채널이 변할때까지 무한루프로 대기를 한다. A/D 변환이 완료되면 무한루프를 빠져나와 값을 저장하고 시리얼 통신으로 값을 전송해주고있다. 위에 그림을 보면 조광센서에 의해서 값이 변하는 것을 확인 할수 있다.


'ARM > 강의' 카테고리의 다른 글

LCD + 센서 제어 프로그래밍  (0) 2011.02.25
AT91SAM7S256의 내부 구조  (0) 2011.02.16
시리얼 통신으로 문자열 출력 함수 만들기!!  (0) 2011.02.14
LED 제어 테스트  (0) 2011.02.09
링커 스크립트 분석  (0) 2011.02.08