아두이노

아두이노로 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아날로그 GNDGND
4 - VREF기준 전압5V
5 - DGND디지털 GNDGND
6 - CLKSPI Clock13
7 - DOUTMISO12
8 - DINMOSI11
9 - CS/SHDNChip Select10
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입니다.
이 글의 예제를 기반으로 다양한 센서 데이터를 정밀하게 측정할 수 있습니다.

반응형