본문 바로가기
공부,일/atmega328P

atmega328P ADC (2) 프로젝트 실습

by fromnothing1 2021. 7. 28.

아두이노 우노의 경우 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);

}

2/3
1/3

1023/3 = 341 로 실험 값과 일치한다. 

1023/3 * 2 = 682 로 이 또한 실험 값과 일치한다.

 

 

cf) data sheet 에는 최대 15k SPS 까지 샘플링 할수 있다고 적혀있는데 

이는 200kH / 13 으로 클럭 주파수를 13 으로 나뉜 값이다. (1번 conversion 하는데 13 클럭 소모) 

 

 

댓글