본문 바로가기
임베디드/RaspberryPi

p280 MCP3008 ADC 장치

by sj0020 2020. 10. 23.

 

 

 

라즈베리파이는 아두이노와는 다르게 아날로그 센서값을 자체적으로 읽어오지 못함.

따라서 MCP3008과 같은 제품을 이용하여, 아날로그 값을 디지털 값으로 바꾼 후 (Convert) 라즈베리파이에 넣어주어야함

 

SPI 통신방식 적용

 

아래 코드는 값이 0으로 나옴 ..

# readadc.py
import spidev, time

spi = spidev.SpiDev()
spi.open(0,0)

def analog_read(channel):
    r = spi.xfer2([1, (8 + channel) << 4, 0])
    adc_out = ((r[1] & 3) << 8) + r[2]
    return adc_out

while True:
    reading = analog_read(0)
    voltage = reading * 3.3 / 1024
    print("읽은 값은 %d\t전압은 %f V" % (reading, voltage))
    time.sleep(1)

 

 

 

# readadc.py
import spidev, time


def analog_read(channel):
    r = spi.xfer2([1, (8 + channel) << 4, 0])
    adc_out = ((r[1] & 3) << 8) + r[2]
    return adc_out


if __name__ == "__main__":
    spi = spidev.SpiDev()
    spi.open(0, 0)
    spi.max_speed_hz = 1000000

    try:
        while True:
            reading = analog_read(0)
            voltage = reading * 3.3 / 1024
            print("읽은 값은 %s(%d) 전압은 %.3fV" % (hex(reading), reading, voltage))
            time.sleep(1)
    except KeyboardInterrupt:
        print("spi close")
        spi.close()

MCP3008.pdf
0.73MB

 

 

 

https://pinocc.tistory.com/175

 

[Python] if __name__ == "__main__": 의미

참고 : http://stackoverflow.com/questions/419163/what-does-if-name-main-do         http://bytebaker.com/2008/07/30/python-namespaces/ 파이썬 프로그래밍을 보다보면 아래와 같은 문장을 만나곤 한..

pinocc.tistory.com

https://dojang.io/mod/page/view.php?id=2448

 

파이썬 코딩 도장: 45.2 모듈과 시작점 알아보기

인터넷에 있는 파이썬 코드를 보다 보면 if __name__ == '__main__':으로 시작하는 부분을 자주 만나게 됩니다. if __name__ == '__main__':     코드 도대체 이 코드는 왜 사용하는 것일까요? 이 코드는 현재

dojang.io



'임베디드 > RaspberryPi' 카테고리의 다른 글

16x2lcd raspberrypi  (0) 2020.10.29
라즈베리파이4, 3 핀맵 , 데이터시트  (0) 2020.10.23
p267 6-5 콜백방식  (0) 2020.10.22
p265 6-4 폴링방식  (0) 2020.10.22
p268 6-6 풀업 풀다운 인터럽트  (0) 2020.10.22