디지털 데이터와 아날로그 데이터
AD converter
- 아날로그 데이터 -> 디지털 데이터
- 센서 신호 읽을때 사용
- 해상도와 범위 지정 : 이에 따라 디지털 신호 1당 전압의 차이가 다름
ATmega328에서의 ADC
- ADC 채널 : 6개의 입력이 MUX에
- 해상도 : 10비트 - 0~1023 사이의 값
-> 5V 기준 4.89mV의 차이
- 기준 전압 : 1023에 해당하는 전압
- AREF : 외부 아날로그 기준 전압 -> 아날로그의 기준 결정
- AVCC : 아날로그 VCC
- 1.1V : 내부 1.1V의 기준
analogRead()
int analogRead(uint_t pin)
- A/D 컨버터를 통해서 read
- pin : 핀번호
- 반환값 : 0~1023 사이의 정수값
analogReference()
void analogReference(uint8_t type)
- 기준 전압의 설정
- type :
- DEFAULT : AVCC 5V 기준
- INTERNAL : 내부 1.1V 기준 -> 들어오는 전압이 1.1V 이상이면 고장날 수도 있다
- EXTERNAL : AREF에 인가된 0~5V 사이의 기준 전압
-> ADC의 전압에 맞게 적절히 전압분배/증폭채널을 이용한다.
D/A converter
- 디지털 신호 -> 아날로그 신호
- 아두이노 안에는 내장되어 있지 않음
- 표시장치 또는 구동기 등 제어
- true analog 신호 만들기 위해 사용
ATmega328에서의 DAC
- 없음
-> 직접적인 아날로그 신호 출력 불가능
- PWM과 콘덴서를 이용해서 아날로그 신호 생성 가능 : 100% 정확하지는 않다
- 외부 DAC 칩을 이용해서 아날로그 신호 만들 수 있음
analogWrite()
: 아두이노에는 D/A 컨버터가 없기 때문에 PWM을 이용한다
-> duty를 이용해서 0~5V 사이의 가상 신호를 만들어냄
void analogWrite(uint8_t pin, int value)
- pin : 핀번호
- value : 듀티 사이클 -> 0~255 사이의 값
- 반환값 : x
- PWM 신호를 이용한 단위 analog 신호
-> LED의 밝기조절, 모터 속도 조절에 사용
- 0~255 사이의 값 출력 : 0%~100% 사이의 듀티 사이클에 해당됨
-> 0%는 0V, 100%는 5V지만 50%가 2.5V라고 확신할 수는 없음
- digital pin 3,5,6,9,10,11만 PWM 출력 가능
PWM으로 LED 밝기 조절
: LED의 밝기는 비선형이므로 밝기와 출력이 정확히 선형적 관계를 가지지 x
-> 중간 밝기가 linear하게 바뀌지는 않음
-> 선형적으로 사용하려면 fitting이 필요
analogRead()로 LED 밝기 조절
int value = analogRead(A3)
-> 이때 들어오는 값은 0~1023
듀티 사이클(0~255)와의 mapping을 위해 y=ax+b꼴의 1차 함수 필요