MCP3008 를 활용한 아날로그 값 읽기 - Whitmem
MCP3008 를 활용한 아날로그 값 읽기
Circuit, Harware Development
2024-05-07 21:48 게시 06894b371e74171c0af8

0
0
100
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
MCP3008 사용 및 SPI 통신
MCP3008은 ADC 역할을 수행하는 칩으로 Analog를 Digital 값으로 Convert 해줍니다. Atmega328p 와 같은 칩 또는 컴퓨팅 개발 보드, 싱글 보드에는 디지털 입력을 받거나 출력을 수행할 수 있는 핀들이 내장되어 있습니다. 이 핀들은 디지털 I/O 전용으로 아날로그 값을 읽을 수는 없습니다. 아날로그 값은 보통 전압으로 표현되는 값들로 특정 전압 내에서 세기 값과 관련되어 있습니다.
디지털 핀은 단순히 1/0 값만 읽어오거나 쓸 수 있으므로 아날로그 값을 읽어오려면 변환 칩을 사용해야 합니다. 변환 칩은 특정 세기의 아날로그 값을 읽어들여 디지털 프로토콜 값에 맞춰 값을 반환 해 줍니다.
단 해당 ADC 칩에서 지원하는 통신 프로토콜에 맞춰서 개발을 진행해야 합니다.
연결도
칩 연결도
저는 상기와 같은 구조로 MCP3008 을 연결하였으며, 자세한 것은 데이터 시트를 참고하시기 바랍니다. 정방향 기준 오른쪽 위에서부터 3.3v, 3.3v, GND, SCLK 클럭, Master Input Slave Output, Master Output Slave Input, CS, GND 순으로 연결합니다. 이 칩은 SPI 통신을 사용하기 때문에 사용하는 보드에서 지원하는 SPI 핀에 연결하거나 소프트웨어 SPI 구현을 사용합니다.
신호 및 I/O 요청
데이터 시트에 따르면, 3개의 바이트를 전송하고 응답으로 3개의 바이트를 받습니다. 송신시에는 채널 값을 같이 담아서 보내면 응답에 해당 채널에 대한 수치 값이 반환 됩니다. 특히 이 칩은 10비트 값을 반환하기 때문에, 2^10 = 1024 단위로 구분된 값을 출력합니다.
특히 3개의 바이트를 보낼 때, 첫 바이트는 0x01, 두번 째 바이트는 (0b1000 + 채널) << 4, don't care term 의 형식에 맞춰서 보내야 합니다.
따라서 spidev에서 보내면 다음과 같습니다.
received = spi.xfer([0x01, (0b1000 + 채널) << 4, 0x00])
수신되는 값은 10비트이므로, 10개의 비트를 끝에서부터 가져와야 합니다. 따라서 3바이트 중 2번째 바이트, 3번째 바이트 를 합쳐 10비트를 완성합니다.
value = ((received[1] 0b0011) << 8) + received[2]
이 값은 0~1023 값을 의미합니다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.