아두이노 우노의 경우 AVCC 는 VCC 와 direct 하게 연결되어 있다. -> 따로 설정 안해도 됨
cf) 물론 lc filter 가 없기 때문에 잡음에 취약 할 수 있지만 , 필요하면 비싼 chip 사던가
ADC0 pin 을 input pin 으로 사용 ( A0 핀)
분주비는 128,
AREF pin 을 Vref 로 사용하고
ADC conversion complete interrupt 발생할때 마다
The ADC Data Register 를 출력 하겠다.
AREF = 5V 입력
저항을 직렬로 3개 연결해서 5v 전압을 1/3 부분에 꽃 았다가 2/3 부분에 꼿았다가 해보았다.
코드
#include<stdio.h>
uint16_t digitalNum;
uint8_t *p8 = (uint8_t*)&digitalNum;
void setup()
{
ADMUX = 0b00000000; //ADC0, ATEF, 우측 정렬
ADCSRA = 0b10111111;
ADCSRB = 0b00000000; //free running mode
DIDR0 = DIDR0|0x01; // ADC0D digital input buffer disable
Serial.begin(9600);
ADCSRA = ADCSRA|(1<<6); //ADC conversion start
sei();
}
void loop()
{
}
ISR(__vector_21)
{
*p8 = ADCL;
*(p8+1) = ADCH;
Serial.print("ADC : ");
Serial.println(digitalNum);
}
1023/3 = 341 로 실험 값과 일치한다.
1023/3 * 2 = 682 로 이 또한 실험 값과 일치한다.
cf) data sheet 에는 최대 15k SPS 까지 샘플링 할수 있다고 적혀있는데
이는 200kH / 13 으로 클럭 주파수를 13 으로 나뉜 값이다. (1번 conversion 하는데 13 클럭 소모)
'공부,일 > atmega328P' 카테고리의 다른 글
좋은 블로그 atmega 관련 (0) | 2021.07.29 |
---|---|
atmel studio 설치 및 hex 파일 업로드 (아두이노 우노) (0) | 2021.07.29 |
atmega328P ADC (1) 개념 및 레지스터 (0) | 2021.07.28 |
atmega 328p PWM & timer counter (5) 실습 Fast PWM (0) | 2021.07.27 |
atmega 328p PWM & timer counter (4) 실습 (Normal mode) (0) | 2021.07.27 |
댓글