반응형
1. MCP3202 기본 정보
- 채널 수: 2채널 (CH0, CH1)
- 분해능: 12비트 (0~4095)
- 인터페이스: SPI (Serial Peripheral Interface)
- 전원 공급: 2.7V~5.5V (일반적으로 5V 사용)
- 입력 전압 범위: Vref에 따라 달라짐 (보통 Vref = 5V면 0~5V 측정 가능)
📦 2. 준비물
- 아두이노 UNO 또는 Nano
- MCP3202 칩
- 브레드보드 및 점퍼선
- 측정할 아날로그 전압 (예: 가변저항, 센서 등)
⚡ 3. 회로 연결
MCP3202 핀기능아두이노 연결
1 - CH0 | 입력채널 0 | 측정 전압 입력 (예: 센서 출력) |
2 - CH1 | 입력채널 1 | (사용 안 하면 GND 연결) |
3 - VREF | 기준전압 | 5V |
4 - AGND | 아날로그 GND | GND |
5 - CLK | SPI Clock | D13 |
6 - DOUT | SPI MISO | D12 |
7 - DIN | SPI MOSI | D11 |
8 - CS/SHDN | SPI Chip Select | D10 |
9 - DGND | 디지털 GND | GND |
10 - VDD | 전원 | 5V |
주의: MCP3202는 5V 논리 신호에 안전하므로 아두이노와 직접 연결해도 됩니다.
🧠 4. 아두이노 코드
#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) {
// 채널: 0 또는 1
if (channel < 0 || channel > 1) return -1;
// MCP3202 SPI 통신 프로토콜
byte command = 0b11000 | (channel << 2); // Start bit(1), SGL(1), ODD(1 or 0), MSBF(0)
digitalWrite(CS_PIN, LOW);
SPI.transfer(command); // 첫 번째 바이트 전송
byte highByte = SPI.transfer(0x00); // 두 번째 바이트 (상위 비트)
byte lowByte = SPI.transfer(0x00); // 세 번째 바이트 (하위 비트)
digitalWrite(CS_PIN, HIGH);
// 상위 4비트는 highByte의 하위 4비트, 나머지 8비트는 lowByte
int result = ((highByte & 0x0F) << 8) | lowByte;
return result;
}
void loop() {
int value = readMCP3202(0); // CH0 읽기
float voltage = value * (5.0 / 4096.0); // Vref = 5V 기준
Serial.print("ADC 값: ");
Serial.print(value);
Serial.print(" / 전압: ");
Serial.print(voltage, 3);
Serial.println(" V");
delay(1000);
}
const int CS_PIN = 10;
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
}
int readMCP3202(int channel) {
// 채널: 0 또는 1
if (channel < 0 || channel > 1) return -1;
// MCP3202 SPI 통신 프로토콜
byte command = 0b11000 | (channel << 2); // Start bit(1), SGL(1), ODD(1 or 0), MSBF(0)
digitalWrite(CS_PIN, LOW);
SPI.transfer(command); // 첫 번째 바이트 전송
byte highByte = SPI.transfer(0x00); // 두 번째 바이트 (상위 비트)
byte lowByte = SPI.transfer(0x00); // 세 번째 바이트 (하위 비트)
digitalWrite(CS_PIN, HIGH);
// 상위 4비트는 highByte의 하위 4비트, 나머지 8비트는 lowByte
int result = ((highByte & 0x0F) << 8) | lowByte;
return result;
}
void loop() {
int value = readMCP3202(0); // CH0 읽기
float voltage = value * (5.0 / 4096.0); // Vref = 5V 기준
Serial.print("ADC 값: ");
Serial.print(value);
Serial.print(" / 전압: ");
Serial.print(voltage, 3);
Serial.println(" V");
delay(1000);
}
🔄 5. 동작 원리
- SPI.transfer() 함수로 MCP3202에 명령 전송
- 3바이트를 주고받아 12비트 ADC 결과 수신
- 12비트 → 전압 계산: V = (ADC값 / 4096) * Vref
📈 6. 예시 출력 (시리얼 모니터)
yaml
복사편집
ADC 값: 2048 / 전압: 2.500 V ADC 값: 1023 / 전압: 1.249 V
💡 팁
- Vref에 3.3V를 넣으면 더 좁은 범위에서 높은 정밀도로 측정 가능
- 여러 센서를 동시에 쓰고 싶으면 CH0/CH1를 바꿔가며 측정하면 됨
- 아두이노가 SPI 디바이스를 여러 개 쓸 경우, CS 핀은 개별로 따로 써야 함
반응형
'개발이야기' 카테고리의 다른 글
FTP 서버를 로컬 드라이브처럼! RaiDrive 사용법 총정리 (0) | 2025.04.24 |
---|---|
전기요금을 줄이는 똑똑한 방법, 가정용 에너지 절감 스마트 콘센트 만들기 - 아두이노 프로젝트 가이드 (0) | 2025.04.07 |
AI로 돈 버는 현실적인 부업 방법 (2025년 최신) (2) | 2025.04.04 |
ChatGPT로 돈 버는 현실적인 7가지 방법 (4) | 2025.04.04 |
인버터 회로란 - Power Chip (0) | 2025.03.31 |