◆ 라즈베리파이는 ADC 단자가 없어서 아날로그 센서값을 자체적으로 읽어오지 못한다.
◆ 아날로그 입력은 MCP3008과 같은 IC를 이용하여 아날로그 값을 디지털 값으로 바꾼 후 (Convert)에 읽어 온다.
◆ 라즈베리파이에서 읽어오는 방법은 주로 SPI 통신를 사용한다.
◀ MCP3008 A/D 컨버터 ▶
MCP3008은 마이크로칩 테크놀로지의 8채널 (아날로그 입력), 10비트 A/D 컨버터 칩이다
MCP3008은 2.7V ~ 5.5V의 전압 범위 내에서 작동한다
MCP3008의 아날로그 입력은 프로그래밍으로 설정이 가능하다.
(single-ended or pseudo-differential pairs)
MCP3008의 아날로그 입력 신호에 대한 샘플링은 VDD 5V에서 최대 200ks/s, VDD 2.7V에서 최대 75ks/s이다.
MCP3008은 SPI 프로토콜을 지원하여 외부 장비, 예를 들어 라즈베리 파이와의 SPI 통신이 가능하다.
- SPI 통신 속도는 최대 200kb/s까지 가능한 걸로 MCP3008 데이터 시트에 기술되어 있다.
◆ MCP3008 데이터 시트에 기술되어 있는 핀 별 기능
CH0 : Analog Input
Ch1 : Analog Input
Ch2 : Analog Input
Ch3 : Analog Input
Ch4 : Analog Input
Ch5 : Analog Input
Ch6 : Analog Input
Ch7 : Analog Input
DGND : Digital Ground
CS/SHDN : Chip Slelect/Shutdown Input
DIN : Serial Data In
DOUT : Serial Data Out
CLK : Serial Clock
AGND : Analog Ground
VREF : Reference Voltage Input
VDD : 2.7V ~ 5.5V Power Supply
● 라즈베리파이와 MCP3008 연결
Raspberry Pi MCP 3008
SCLK CLK
MOSI DIN
MISO DOut
CE 0 CS/SHDN
3.3V VDD, VREF
GND DGND , AGND
▷ SPI 통신으로 데이터 전송, MCP3008 IC는 slave로 동작
▷ 신호 타이밍 : 8비트로 세번 나누어져 있음
▷ 첫 바이트 : 라즈베리파이로 MOSI(DIN)을 통해 0x01을 보내서 start를 알림
▷ 두 번째 바이트 : 상위 4비트를 통해 ADC값을 얻고자 하는 채널을 선택
▷ 세번째 바이트 : MISO(DOUT)핀을 통해 null 비트로 시작하는 ADC값 전송
--->>> 예제 : Potentiometer_MPC3008.py <<<---------------------------
import time
import spidev
spi=spidev.SpiDev()
spi.open(0, 0) /0번채널 오픈
spi.max_speed_hz=1000000
def ReadVol(vol):
adc=spi.xfer2([1,(8+vol)<<4,0])
data=((adc[1]&3)<<8)+adc[2]
return data
mcp3008=0
while True :
a_1 = ReadVol(mcp3008)
print('readvol : ' , a_1 , 'Voltage:' , 3.3*a_1/1024 )
time.sleep(0.5)
------------------------------------------------------------------------------
★ 결과값을 이용하여 그래프를 그려 볼 수도 있겠다.