부산IT학원/스마트컨트롤러

20140430 (ADC, 컴파일 -D 옵션, extern, static)

EHOzlO 2014. 4. 30. 15:28

53일차










----------------------

ATMega128 ADC

----------------------



--- ADC

Anolog to Digital Convert

아날로그 신호를 디지털 신호로 변환.


- 가청 주파수

사람은 보통 16Hz ~ 20,000Hz 사이를 들을 수 있다.

전화기가 300Hz ~ 3300Hz 음질을 낸다고 한다.


더 좋은 음질을 내려면 장비 값이 비싸진다.



- 아날로그 신호를 디지털 신호로 바꿔지는 과정







- DAC 디지털을 아날로그로 바꾸는 것.








- 이제 ATMega128의 ADC를 살펴보러

먼저 ATMega128문서의 첫 페이지에서 얻을 수 있는 ADC 정보.









- PIN 구성에서 볼 수 있는 정보.










- ADC 블럭 조직도








- Prescaler와 변환.







- 타이밍도






- ADC 관련 Reg.


ADMUX

ADCSRA

ADCH, ADCL



- ADMUX Reg


- 7, 6번 비트

- REFS1, REFS0

기준 전압 선택.

우리는 0, 0 설정


- 5번 비트

- ADLAR

샘플링 비트 (10bit)를

저장하는 정렬(왼쪽, 오른쪽)

왜 왼쪽 정렬 하는지는 아직 모름.

일단은 오른쪽 정렬


- 4번 비트

MUX4

변환 모드에 대한

변환 PIN 선택




오늘은 여기까지.....










- C



--- 컴파일 과정 중에 매크로상수 바꾸는 법


(MS vs)

cl -D매크로상수=상수 소스파일



#include <stdio.h>

//#define HIT_NUM 5


int main()
{
#if HIT_NUM == 5
      puts("매크로 상수 HIT_NUM은 현재 5입니다.");
#else
      puts("매크로 상수 HIT_NUM은 현재 5가 아닙니다.");
#endif

      return 0;
}

ex) cl -DHIT_NUM=10 main.c


출력 화면





ex) cl -DHIT_NUM=5 main.c

출력 화면



이렇게 된다.






--- extern

분할 컴파일 중 외부에 있는 변수, 함수 사용시

앞에 extern을 넣으면 사용할 수 있다.

보통은 생략 가능.

변수 앞에는 쓸 것을 추천한다.


ex) 소스


- test.c

int iNum;

void test()
{
  ++iNum;
}


- main.c

#include <stdio.h>

void test();

extern int iNum;

int main()
{
  printf("%d \n", iNum);

  test();

  printf("%d \n", iNum);

  return 0;
}

cl main.c test.c

출력 화면


잘 나온다.


이번엔 static


- test.c

static int iNum;

void test()
{
  ++iNum;
}


- main.c

#include <stdio.h>

void test();

extern int iNum;

int main()
{
  printf("%d \n", iNum);

  test();

  printf("%d \n", iNum);

  return 0;
}

cl main.c test.c 하면 오류가 난다.