AVR - Chapter 12 황 지 연
A/D 컨버터란? 연속적인 신호인 아날로그 신호를 부호화된 디지털 신호로 변환하는 일. 아날로그 디지털 변환을 수행하는 기계 장치를 아날로그 디지털 변환기(AD Convertor)라고 함. 이 장치는 온도, 압력, 음성, 영상 신호, 전압 등의 실생활에서 연속적으로 측정되는 신호를 컴퓨터에 입력하여 디지털화시키는 장치
A/D 컨버터 중 앙 처 리 장 치 아 날 로 그 장 치 A/D 변환기 D/A 변환기
A/D 컨버터의 특징 8채널 10비트 분해능 축차비교형(변환시간 수십us의 종속형 A/D Converor) 내부 아날로그 멀티플렉서 탑재 샘플/홀드회로 탑재로 인하여 A/D 동작동안 전압 고정화 단극성 아날로그 입력 / 차동입력 선택 차동입력에서 10배~200배의 증폭 A/D 가능 포트F는 아날로그 비교기 기능으로도 사용 가능 변환시간 (13us~260us - 50kHz~200kHz
분해능 분해능 마이컴에서 분해능이란 보통 AD 컨버터에서 주로 사용되는 용어. 외부에서 아날로그 신호가 들어 오게 되면 sin파가 입력되게 됨. 그런데 예를들어 이 아날로그 신호가 어떻게 변화가 되는지를 1초에 한번씩 체크하는 것과 0.1초마다 체크하는 것, 그리고 0.01 초마다 체크 하는 것은 다름. 얼마나 세밀하게 체크를 하는가가 얼마나 "분해"를 하는 것인가와 의미가 같음. 좀더 세밀하게 체크할 수 있다면 보다 정확한 데이터를 구할 수가 있음. 이것이 분해할 수 있는 능력이라고 함.
A/D 컨버터의 구성 범용 PORTF의 특수 기능 입력 전압의 범위 Vref의 범위 ADC0 ~ ADC7 : 8채널 10비트 A/D 컨버터의 아날로그 입력단자 ADC 정확도 성능 향상을 위한 독립 전원 구성 AVCC : Analog Supply Voltage(VCC의 전압의 ±0.3V 유지해야함) AGND : Analog Ground (반드시 GND와 연결) AREF : Analog Reference Voltage 입력 전압의 범위 일반 모드 입력전압의 범위(0V ~ Vref) 차동입력 모드 입력전압의 범위(-Vref ~ Vref) Vref의 범위 전원전압 VCC를 초과할 수 없다.(VREF=VGND~VCC, 내부기준전압 2.56V
AD Convertor 의 블록도
A/D 컨버터의 동작 단일변환모드(Single conversion mode) 프리런닝코드(Free running mode) ADC 동작을 한번만 수행하게 된다. 프리런닝코드(Free running mode) ADC 동작을 반복적으로 수행하게 된다 ① A/D 컨버터 초기화 설정 ADC 활성화 (ADEN=1) ADC 클럭설정 (ADPS 2~0) ADC 기준전압설정 (REF 1~0) ADC 입력채널설정 (MUX 4~0) ADC 동작모드설정 (ADFR) ADC 변환 완료 인터럽트 활성화 (ADIE)
A/D 컨버터의 동작 ② A/D 컨버터 스타트 ③ A/D 변환 ADC 시작신호 (ADSC) ADC 변환 결과 [단극성 입력] [차등입력]
A/D 컨버터의 동작 ④ A/D 변환 완료 ⑤ A/D 변환 완료 인터럽트 요청 ⑥ ADC 상태플래그 셋 ADC 변환이 완료되면 변환값을 ADCH/L 에 저장하게 된다. ⑤ A/D 변환 완료 인터럽트 요청 ADC Conversion Complete Interrupt 요청 ⑥ ADC 상태플래그 셋 AIDF = 1 ⑦ ADC 다음 동작 결정 단일/연속동작인지 구분하여 다음 동작 수행을 결정한다. (ADFR)
A/D 변환 오차 양자화 오차 (Quantization error) 오프셋 오차 (Offset error) 아날로그 값을 디지털 값으로 변환하면서 생기는 변환의 한계 대처방안 : 분해능이 높은 ADC사용으로 극복 오프셋 오차 (Offset error) 변환 결과가 이상적인 디지털 값에서 일정한 양만큼 벗어난 상태 대처방안 : 변환된 디지털 값에 일정치 값을 더하거나 빼서 교정한다. 이득 오차 (Gain error) 변환 결과가 이상적인 디지털 값에서 일정한 비율만큼 벗어난 상태 대처방안 : 변환된 디지털 값에 일정치 값을 곱하거나 나누어서 교정한다.
A/D 변환 오차 비선형 오차 (Integral non-linearity error) 변환 결과가 교정될 수 없는 상태 대처방안 없음 차동 비선형 오차 (Differential non-linearity error)
A/D Convertor 잡음 제거 방법 A/D Convertor의 경우에는 노이즈에 매우 민감하기 때문에 ATmega128 내에서도 AVCC, AREF, AGND와 같은 ADC 전원 구성도 따로 하였으며 사용자 또한 몇 가지 사항을 주의하여 사용해야 한다. AVCC = 독립적인 아날로그 회로 전원 단자 AREF = 기준 전원 입력 단자 AGND = 아날로그 회로 접지 단자
A/D Convertor 잡음 제거 방법 ① 아날로그 입력선은 최소한으로 짧게 하고 잡음의 영향이 없도록 회로를 구성한다. ② 아날로그 전원단자 AVCC에 VCC를 인가할 때는 LC필터를 거쳐 안정하 시킨다. ③ 아날로그 회로의 모든 접지는 AGND에 접지하여 한 포인트에서만 GND와 접속한다. ④ ADC 동작중에는 병령 I/O 포트의 논리상태를 스위칭하지 않는다. ⑤ 잡음에 민간한 아날로그 소자의 ADC의 경우에는 Adc Noise Reduction mode를 사용한다. ⑥ 잡음이 심하여 결과 값의 변동이 심하면 디지털 필터를 사용하거나 평균치를 구하여 사용한다.
A/D Convertor 잡음 제거 방법
A/D 컨버터 관련 레지스터 ADMUX(ADC Multiplexer Selection Register Bit 7, 6 – REFS1, REFS0 (Reference Selection Bit) REFS1 REFS0 기준 접압 외부의 AREF 단자로 입력된 전압을 사용한다. 1 외부의 AVCC 단자로 입력된 전압을 사용한다. - 내부의 2.56V를 사용한다
A/D 컨버터 관련 레지스터 Bit 5 – ADLAR (ADC Left Adjust Result) ADLAR = 1 : 변환결과값을 ADCH/L에 저장할 때 좌측으로 끝을 맞추어 저장된다 Bit 4,3,2,1,0 – MUXn (Analog Channel and Gain Selection Bit
A/D 컨버터 관련 레지스터
A/D 컨버터 관련 레지스터 ADCSRA(ADC Control and Status Register Bit 7 – ADEN (ADC Enable) ADEN = 1 : ADC 활성화 Bit 6 – ADSC (ADC Start Conversion) ADSC = 1 : ADC의 변환이 시작된다. ( 단일 변환모드일떄 단 한번만 작동 / 프리런닝모드일떄 변환동작반복)
A/D 컨버터 관련 레지스터 Bit 5 – ADFR (ADC Free Running Select) Bit 4 – ADIF (ADC Interrupt Flag) ADC변환완료 인터럽트가 요청되고 그 상태를 이 비트에 표시한다. Bit 3 – ADIE (ADC Interrupt Enable) ADIE = 1 : ADC Interrupt 활성화
A/D 컨버터 관련 레지스터 Bit 2,1,0 – ADPS 2~0 (ADC Prescaler Select Bit)
A/D 컨버터 관련 레지스터 ADCH/L (ADC Data Register) ADC의 변환결과를 저장한다 ADLAR = 0
A/D 컨버터 관련 레지스터 ADLAR = 1
ADC 실습
ADC 실습
ADC 실습
ADC 실습
ADC 실습
ADC 실습 가변 저항
ADC 실습 가변 저항 void main(){ volatile unsigned int ch0,ah0,al0; init_devices(); ktm128_init(); while(1){ ADCSRA &= 0x7f; ADMUX = 0x40; ADCSRA |= 0xC0; al0 = ADCL; ah0 = ADCH; ch0 += al0+ah0*256; printf("data : %d\r\n", ch0); delay(500); ch0 = 0; } }
ADC 실습 적외선 센서
ADC 실습 적외선 센서 void main(){ volatile unsigned int ch0,ah0,al0; init_devices(); ktm128_init(); while(1){ ADCSRA &= 0x7f; ADMUX = 0x41; ADCSRA |= 0xC0; al0 = ADCL; ah0 = ADCH; ch0 += al0+ah0*256; printf("data : %d\r\n", ch0); delay(500); ch0 = 0; } }
ADC 실습 온도 센서
ADC 실습 온도 센서 void main(){ volatile unsigned int ch0,ah0,al0; init_devices(); ktm128_init(); while(1){ ADCSRA &= 0x7f; ADMUX = 0x42; ADCSRA |= 0xC0; al0 = ADCL; ah0 = ADCH; ch0 += al0+ah0*256; printf("data : %d\r\n", ch0); delay(500); ch0 = 0; } }
ADC 실습 조도 센서
ADC 실습 조도 센서 void main(){ volatile unsigned int ch0,ah0,al0; init_devices(); ktm128_init(); while(1){ ADCSRA &= 0x7f; ADMUX = 0x43; ADCSRA |= 0xC0; al0 = ADCL; ah0 = ADCH; ch0 += al0+ah0*256; printf("data : %d\r\n", ch0); delay(500); ch0 = 0; } }
문제 각 센서(4개) 값을 터미널을 이용하여 출력 할 수 있도록 만드시오. 센서 값 중 조도 센서 값을 FND를 통하여 출력 할 수 있도록 만드시오.
문제 도트 매트릭스에 가변저항에 따라 점등의 높이가 틀려지도록 만드시오. 가변저항이 낮으면 도트매트릭스의 점등이 올라간다. 새로 생긴 데이터는 왼쪽에 둔다. 최소값 : 0 최대값 : 1023 각 칸의 간격은 timer를 이용하여 1초에 한번씩 갱신한다.