닷넷 계열의 최신 컴파일러에서는 기존의 scanf 같은 함수가 지정된 메모리 영역을 오버하여 입력받는 위험에 대한 대용 함수로...scanf_s 라는 함수를 사용하라고 경고하는 것
입니다...

scanf 대신에...scanf_s  함수를 사용하세요...

- MSDN -

int scanf_s(
   const char *format [,
      argument]...
);

int main( void )
{
   int      i, result;
   float    fp;
   char     c, s[81];
   wchar_t  wc, ws[81];

   scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1, &wc, 1, s, 80, ws, 80 );


   return 0;
}

Posted by 응이

VS6.0

툴스 -> 옵션 -> 디렉토리 탭 -> 인클루드,라이브러리 경로 설정

프로젝트-> 세팅 -> 링크탭 -> Lib-> 라이브러리 파일명 추가


VS 2005


도구 ->옵션 ->프로젝트및솔루션 ->디렉토리 -> 일클루드,라이브러리 경로 설정

속성 -> 구성속성 -> 링커 -> 명령줄 -> 추카옵션 에서 라이브러리 파일명 추가


코드에 직접 추가

#pragma comment(lib,"라이브러리 파일명.lib")

Posted by 응이

ARM 모델 AT91SAM7S256 를 이용 열센서를 동작 시켜 보자.

먼저 ADC에 대해서 알아보자. ADC란 아날로그 신호를 디지털 신호로 바꿔 신호곡선을 데이터로 변환 하는 일을

처리해 주는 것으로 아래 그림을 보면서 대충 이해하자.

사용자 삽입 이미지

컨버팅(디지털 신호화)을 거쳐 나온 수치 데이터를 이용해서 각종 센서수치로 환산한 후 픽요한 작업들을 하면된다.

아래 함수에 사용된 ADC는 ADC레지스터의 시작 주소를 디파인 한것이다.

 

void InitADC(void)
{

//먼저 ADC의 모든 레지스터 값을 초기화 시킨다.
  ADC->ADC_CR = AT91C_ADC_SWRST;  

 //ADC_MR 레지스터를 통해 샘플링 주기 및 기동시간등을 설정한다. 

  ADC->ADC_MR = 0x02020400;  

//ADC에 사용할 채널을 설정한다. 여기선 4번 채널을 이용

 ADC->ADC_CHER = AT91C_ADC_CH4;  

}


volatile unsigned int GetADCValue(void)
{
  ADC->ADC_CR = AT91C_ADC_START;// ADC 는 ADC_CR레지스터의 START비트가 1로 셋되는 순간부터 변환을

                                //시작한다.컨버딩 할때마다 스타트를 매번 1로 해주어야 한다.

//ADC_SR레지스터의 EOCx 비트를 확인하여 1로 되었다면 변환이 완료 된것이므로   ADC->ADC_CDRx 비트의

//디지탈화된 수치데이터를 읽어 들인다.

while(!(ADC->ADC_SR & AT91C_ADC_EOC4));

return (ADC->ADC_CDR4);
}


int main()
{  
  volatile unsigned int Value;
  unsigned char Str[5];
  volatile unsigned int Cnt=0;
  InitADC(); // ADC 초기설정 함수를 호출
   while(1)
  {
    Value = GetADCValue(); //컨버팅후의 데이터를 반환 받는다.      
  } 
  return 0;
}


ADC를 사용하기 위한 순서를 간략하게 설명하면 다음과 같다.

 - ADC_CR 레지스터를 사용해 설정을 초기화 시킨다.

 - ADC_MR 레지스터를 통해 주기등을 설정한다.

 - ADC_CHER 레지스터를 통해 사용할 채널을 활성화 시킨다.

 - ADC_CR 레지스터의 START비트를 1로 설정해 컨버팅을 시작한다.

 - ADC_SR레지스터의 해당 채널의 비트를 확인해 컨버팅이 완료 되었는지를 확인한다.

 - ADC_CDRx 레지스터를 읽어 디지털화된 수치 데이터를 읽어 들인다.


ADC_MR 레지스터 의 값을 계산하는 공식은 다음과 같다.

SHTIM : Sample & Hold Time

샘플/홀드 시간 = (SHTIM +1)/ADC 클럭 주파수

STARTUP : Start Up Time

기동 시간 = (STARTUP +1)*8/ADC 클럭 주파수

PRESCAL : Prescaler Rate Selection

ADC 클럭 주파수 = MCK/((PRESCAL+1)*2)


 - 10비트 분해능을 사용할 때는 A/D 클럭으로 5MHz 이하를 사용해야 하며, 8비트 분해능을 사용할 때는  A/D 클럭으로 8MHz 이하를 사용해야 한다.

 - 샘플/홀드 시간은 최소 600ns이상이 필요하다.

윗 코드에서는 PRESACL=4로 지정하여 A/D 컨버터에 공급되는 클럭 주파수는 48MHz/((4+1)*2) = 4.8MHz로 설정 하였으며

분해능은 10비트로 설정하였다. 또한SHTIM=2로 설정하여 A/D변환기의 샘플/홀드시간=(2+1)/4.8MHz = 625ns가 되도록 하였고,

STARTUP = 2로 설정하여 기동시간=(2+1)*8/4.8MHz = 5us가 되도록 하였다.

Posted by 응이

Dream come true.
응이

달력

태그목록