반응형
아두이노로 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입니다.
이 글의 예제를 기반으로 다양한 센서 데이터를 정밀하게 측정할 수 있습니다.
반응형
'아두이노' 카테고리의 다른 글
| 아두이노 시프트 레지스터 74HC595 제어 가이드 – LED 출력 확장과 멀티 연결 완벽 설명 (0) | 2025.04.19 |
|---|---|
| 아두이노 + MAX31855로 K-Type 써모커플 온도 측정하기 – SPI 방식 온도 센서 예제 (0) | 2025.04.19 |
| 아두이노 RFID 카드 인식 시스템 만들기 – RC522 모듈로 출입 인증 구현하기 (3) | 2025.04.19 |
| 아두이노 전자식 가변저항 제어 가이드 – MCP41010 SPI 통신으로 디지털 저항 조절하기 (0) | 2025.04.19 |
| 아두이노 통합 프로젝트 완성 – 버튼으로 LCD 메뉴 전환 + 센서 제어 시스템 만들기 (0) | 2025.04.19 |