20140430 (ADC, 컴파일 -D 옵션, extern, static)
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 하면 오류가 난다.