아두이노
아두이노로 MCP3202 SPI ADC 제어하기 – 12비트 아날로그 입력 읽기 예제
게임교수
2025. 4. 19. 17:29
반응형
아두이노로 MCP3202 SPI ADC 제어하기 – 12비트 아날로그 입력 읽기 예제
MCP3202는 Microchip에서 만든 2채널, 12비트 분해능의 SPI 기반 ADC(Analog-to-Digital Converter)입니다.
아두이노 UNO의 기본 아날로그 입력보다 더 높은 해상도가 필요한 경우, 외부 ADC로 사용하기 좋습니다.
📦 준비물
- 아두이노 UNO
- MCP3202
- 10kΩ 가변저항 (테스트용 아날로그 입력)
- 점퍼 와이어, 브레드보드
⚙️ 핀 연결
MCP3202 핀 | 기능 | 아두이노 핀 |
---|---|---|
1 - CH0 | 아날로그 입력 0 | 가변저항 중간핀 |
2 - CH1 | 아날로그 입력 1 | 미사용 |
3 - AGND | 아날로그 GND | GND |
4 - VREF | 기준 전압 | 5V |
5 - DGND | 디지털 GND | GND |
6 - CLK | SPI Clock | 13 |
7 - DOUT | MISO | 12 |
8 - DIN | MOSI | 11 |
9 - CS/SHDN | Chip Select | 10 |
10 - VDD | 전원 | 5V |
💻 아두이노 코드 예제 (채널 0만 사용)
#include <SPI.h>
const int CS_PIN = 10;
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
}
int readMCP3202(int channel) {
byte command = 0b00000110 | ((channel & 0x01) << 1); // Single-ended mode
digitalWrite(CS_PIN, LOW);
SPI.transfer(command); // Start + Single-Ended + D2
byte highByte = SPI.transfer(0x00); // Receive high byte
byte lowByte = SPI.transfer(0x00); // Receive low byte
digitalWrite(CS_PIN, HIGH);
int result = ((highByte & 0x0F) << 8) | lowByte; // 12비트 데이터 조합
return result;
}
void loop() {
int adcValue = readMCP3202(0);
float voltage = adcValue * (5.0 / 4095.0);
Serial.print("ADC: ");
Serial.print(adcValue);
Serial.print(" | Voltage: ");
Serial.print(voltage);
Serial.println(" V");
delay(500);
}
✅ 마무리
MCP3202는 간단하면서도 고해상도의 아날로그 입력 측정을 가능하게 해주는 유용한 SPI 기반 외부 ADC입니다.
이 글의 예제를 기반으로 다양한 센서 데이터를 정밀하게 측정할 수 있습니다.
반응형