๐Ÿ—๏ธ์†Œํ”„ํŠธ์›จ์–ด/๐Ÿ““Raspberry PI 4

[๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด4] GPIO ํ™œ์šฉํ•œ ๋ฐ๊ธฐ์— ๋”ฐ๋ฅธ LED ์ ๋“ฑ ํšŒ๋กœ ์„ค๊ณ„

Dev.Op 2021. 10. 27. 23:37
๋ฐ˜์‘ํ˜•

 


 

 

 

 

๋ชฉ์ฐจ

  • GPIO
  • RPI.GPIO ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 
  • ํŒŒ์ด์„  ๋ชจ๋“ˆํ™” ์ฝ”๋”ฉ(LED on/off)
  • ํšŒ๋กœ๋„ ๋ฐฐ์น˜
  • ์กฐ๋„์„ผ์„œ ์›๋ฆฌ
  • MCP3008(ADC) ์›๋ฆฌ
  • ์ถ”๊ฐ€ ๊ฐœ๋… : PWM ์ œ์–ด
  • ์ถ”๊ฐ€ ๊ฐœ๋… : SPI ํ†ต์‹ 

 

 

 


GPIO

 

GPIO๋Š” General Purpose Input / Output ์œผ๋กœ, ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ”์šฉ ์ž…์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. PCB, ICT๋ณด๋“œ ๋“ฑ ๋‹ค์–‘ํ•œ ์ „์ž๊ธฐํŒ์—์„œ ๋‚ด๋ถ€ ํšŒ๋กœ ์ด์™ธ ์™ธ๋ถ€์ ์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜๋กœ, ์ด๋ฅผ ์ด์šฉํ•ด์„œ LED, Servo Motor, ์ดˆ์ŒํŒŒ์„ผ์„œ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌผ๋ฆฌ์  ์™ธ๋ถ€ ์žฅ์น˜๋“ค์— ๋Œ€ํ•ด์„œ ๋ฐฐ์„ ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜์—ฌ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

RPi.GPIO ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํŒŒ์ด์„ ์—์„œ ํŒŒ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์˜ gpioํ•€์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๋ผ์ฆˆ๋น„์–ธ์— ๊ธฐ๋ณธ ์„ค์น˜ ๋˜์–ด ์žˆ๋‹ค.

 

 

 

์ฝ”๋“œ ์˜ˆ์‹œ

# 1.๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import RPi.GPIO as gpio

# 1.1 ์—๋Ÿฌ ์ œ๊ฑฐ
gpio.warnings(False)


# 2. gpio setup, ํ•€ ๋„˜๋ฒ„๋ถ€๋ฅด๋Š” ๋ฐฉ์‹ ์„ค์ •, Board์™€ BCM ๋ฐฉ์‹
# gpio.BOARD : 8๋ฒˆํ•€์€ GPIO.BCM ๋ชจ๋“œ์—์„œ 14๋ฒˆ ํ•€๊ณผ ๋™์ผ
# gpio.BCM : Broadcom chip-specific pin numbers๋กœ 
# Broadcom SOC ์นฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•€์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ 
gpio.setmode(gpio.BCM)



# 3.ํ•€ ๋ชจ๋“œ ์„ค์ •, input ๋˜๋Š” output
gpio.setup(12, gpio.IN)
gpio.setup(18, gpio.OUT)


# 4. ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ
try:
    while 1:
        button = gpio.input(12)
        ...
        gpio.output(18, gpio.HIGH)
        ...
# 5. ํ•„์ˆ˜)ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ์ „, ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉํ•˜๊ธฐ / ๋ฐ˜๋“œ์‹œ ํด๋ฆฐ์—…
finally:
    gpio.cleanup()

 

ํŒŒ์ด์„  ๋ชจ๋“ˆํ™” ์ฝ”๋”ฉ

file save๋ฅผ ledOnOff ๋ผ๊ณ  ์ €์žฅํ•˜์ž

 

๊ทธ๋ฆฌ๊ณ  ์ž‘๋™์— ๋”ฐ๋ฅธ led ์˜ ๋™์ž‘์œ ๋ฌด๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด์„ , ์ผ์ผํžˆ import ํ•ด์„œ RPi~ ํ•˜์ง€๋ง๊ณ ,

 

๋‹จ์ˆœํžˆ import ledOnOff as led ๋ผ๊ณ  ์ž…๋ ฅํ•ด์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋“ค์„ ์‹œํ–‰ํ•˜๋„๋กํ•˜์ž.

# 1.๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import RPi.GPIO as gpio
import time as t

# 2. gpio setup, ํ•€ ๋„˜๋ฒ„๋ถ€๋ฅด๋Š” ๋ฐฉ์‹ ์„ค์ •, Board์™€ BCM ๋ฐฉ์‹
# gpio.BOARD : 8๋ฒˆํ•€์€ GPIO.BCM ๋ชจ๋“œ์—์„œ 14๋ฒˆ ํ•€๊ณผ ๋™์ผ
# gpio.BCM : Broadcom chip-specific pin numbers๋กœ 
# Broadcom SOC ์นฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•€์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ 
gpio.setmode(gpio.BCM)


# 3.ํ•€ ๋ชจ๋“œ ์„ค์ •, input ๋˜๋Š” output
gpio.setup(18, gpio.OUT)


# 4. ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ
def ledOn():
	gpio.output(18, gpio.HIGH)
    
def ledOff():
	gpio.output(18,gpio.LOW)
 
def ledFlk():
	while 1:
		gpio.output(18,gpio.HIGH)
        t.sleep(1)
        gpio.output(18,gpio.LOW)

 

 

ํšŒ๋กœ๋„ ๋ฐฐ์น˜

๋Œ€๋žต์ ์ธ ๋Š๋‚Œ์„ ํŒŒ์•…ํ•˜๊ธฐ

 

 

 

์กฐ๋„์„ผ์„œ

์กฐ๋„์„ผ์„œ๋Š” ๋น›์˜ ๋ฐ๊ธฐ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ์ €ํ•ญ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €ํ•ญ์€ ์ „๋ฅ˜๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ํž˜์ธ๋ฐ์š”. ๋น›์˜ ๋ฐ๊ธฐ์— ๋”ฐ๋ผ ์กฐ๋„ ์„ผ์„œ๋Š” ์กฐ๋„ ์„ผ์„œ ๋‚ด์˜ ์ €ํ•ญ๊ฐ’์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค

์ฃผ์œ„๊ฐ€ ๋ฐ์œผ๋ฉด ์กฐ๋„ ์„ผ์„œ์˜ ์ €ํ•ญ๊ฐ’์ด ๊ฐ์†Œํ•˜๊ณ , ์ฃผ์œ„๊ฐ€ ์–ด๋‘์šฐ๋ฉด ์กฐ๋„ ์„ผ์„œ์˜ ์ €ํ•ญ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

์กฐ๋„ ์„ผ์„œ๋Š” ๋ฐ์œผ๋ฉด ์•ฝ 1k ์˜ด์˜ ์ €ํ•ญ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๊ณ  ์–ด๋‘์šฐ๋ฉด ์•ฝ 50k ์˜ด๊นŒ์ง€์˜ ์ €ํ•ญ๊ฐ’์„ ๋‚ด๋ณด๋‚ด์–ด ์ž…๋ ฅ๊ฐ’์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

 

์กฐ๋„์„ผ์„œ์˜ ๊ฒฝ์šฐ ๋ฏธ์„ธํ•œ ๋น›์˜ ๋ฐ๊ธฐ๋ฅผ ์ธก์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ analogRead() ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋‚ ๋กœ๊ทธ ์ž…๋ ฅํ•€์€ ANALOG IN ์— ๊ฝƒ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.(๋””์ง€ํ„ธ ์ž…๋ ฅํ•€์ชฝ์ด ์•„๋‹™๋‹ˆ๋‹ค)

 

 

 

MCP3008(ADC)

 

  • 2.7~5.5V ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํด ์ˆ˜๋ก ์ƒ˜ํ”Œ๋ง ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ch0~7 : ์•„๋‚ ๋กœ๊ธ€ ์‹ ํ˜ธ ๋„ฃ์–ด์ฃผ๋Š”๊ณณ์ด๋‹ค.
  • SPI : ํ†ต์‹ ๊ทœ๊ฒฉ - ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด (๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์—์„œ๋Š” 2๊ฐœ์˜ ํ•€์„ ์ œ๊ณต)

๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—๋Š” ์ž์ฒดADC ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ADC ์นฉ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

MCP3008๋Š” 8์ฑ„๋„์˜ A/D Converter ์ž…๋‹ˆ๋‹ค.

 

์„ผ์„œ์˜ ์•„๋‚ ๋กœ๊ทธ ์ถœ๋ ฅ๊ฐ’์„ ๋””์ง€ํ„ธ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ADC ์นฉ์ž…๋‹ˆ๋‹ค.

 

์‹คํ–‰ ํ•˜๊ธฐ ์ „ ์„ธํŒ… : https://m.blog.naver.com/icbanq/221693166697


 

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด - MCP3008๋ชจ๋“ˆ ์ œ์–ดํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ์•„์ด์”จ๋ฑ…ํ์˜ ๋ผ๋น„์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ MCP3008์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„ ๋ณผ๊ป€๋ฐ์š”! ์ž~! ๋ ˆ์ธ ๊ณ ~! ์ค€๋น„๋ฌผ h...

blog.naver.com

 

 

 

MCP3008 IC๋ฅผ ๊ตฌ๋™ํ•˜๋ ค๋ฉด ๋™์ž‘๋ฐฉ์‹๊ณผ SPI ํ†ต์‹ ์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„์•ผ ํ•ด์„œ,

MCP3008 ๋ฐ์ดํ„ฐ์‹œํŠธ๋ฅผ ๋ด…์‹œ๋‹ค.

 

MCP3008 IC๋Š” slave๋กœ ๋™์ž‘ํ•˜๊ณ , (CPOL, CPHA) = (0, 0), (1, 1)์˜ SPI ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ์š”. (0, 0)๋ชจ๋“œ์˜ ์‹ ํ˜ธ ํƒ€์ด๋ฐ์€ ๋‹ค์Œ์ฒ˜๋Ÿผ 8๋น„ํŠธ๋กœ ์„ธ๋ฒˆ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฐ”์ดํŠธ์—๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋กœ MOSI(DIN)์„ ํ†ตํ•ด 0x01์„ ๋ณด๋‚ด์„œ start๋ฅผ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ๋‘๋ฒˆ์งธ ๋ฐ”์ดํŠธ์˜ ์ƒ์œ„ 4๋น„ํŠธ๋ฅผ ๋ณด๋‚ด๋ฉด, ๋‚˜๋จธ์ง€ ๋น„ํŠธ๋“ค์€ ์ด IC์˜ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ƒ์œ„ 4๋น„ํŠธ๋ฅผ ํ†ตํ•ด ADC๊ฐ’์„ ์–ป๊ณ ์ž ํ•˜๋Š” ์ฑ„๋„์„ ์„ ํƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

MCP3008์ด D0 ์ž…๋ ฅ๊นŒ์ง€ ๋ฐ›์œผ๋ฉด, MCP3008์€ MISO(DOUT)ํ•€์„ ํ†ตํ•ด null ๋น„ํŠธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ADC๊ฐ’์„ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋กœ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. MISO๋กœ ์ „๋‹ฌ๋˜๋Š” ์‹ ํ˜ธ ์ค‘, ๋‘๋ฒˆ์งธ ๋ฐ”์ดํŠธ์˜ ํ•˜์œ„ 2๋น„ํŠธ๊ฐ€ 10๋น„ํŠธ ADC๊ฐ’ ์ค‘ ์ตœ์ƒ์œ„ ๋น„ํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋’ค ์„ธ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์˜ 8๋น„ํŠธ๋Š” ํ•˜์œ„ 8๋น„ํŠธ์˜ ADC ๊ฐ’์ž…๋‹ˆ๋‹ค.

 






์œ„ ํƒ€์ด๋ฐ๋„์—์„œ ๋ดค๋˜ Single/Diff, D2, D1, D0 ๋„ค ๋น„ํŠธ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ADC๋ฅผ ์ˆ˜ํ–‰ํ•  ์ฑ„๋„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์—์„œ ์‹คํ–‰์‹œํ‚จ Python ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. MCU๋ฟ ์•„๋‹ˆ๋ผ Python์—์„œ๋„ ๋น„ํŠธ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด์„œ ๋น„ํŠธ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

import spidev, time

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

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

while True:
    adc = analog_read(1)
    voltage = adc*3.3/1023
    print("ADC = %s(%d)  Voltage = %.3fV" % (hex(adc), adc, voltage))
    time.sleep(0.5)

 

PWM

PWM์ด๋ž€(Pulse Width Modulation, ํŽ„์Šค ํญ ๋ณ€์กฐ) ํšจ์œจ์ ์ธ ์Šค์œ„์นญ ์ œ์–ด์˜ ๊ธฐ๋ณธ์ด ๋˜๋Š”, ๋””์ง€ํ„ธ ์ถœ๋ ฅ์œผ๋กœ ์•„๋‚ ๋กœ๊ทธ ํšŒ๋กœ๋ฅผ ์ œ์–ด ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

โ€‹

์ดˆ๊ธฐ์—๋Š” ํ†ต์‹ ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ ๋œ ๊ธฐ์ˆ  ์ด์—ˆ์œผ๋‚˜, ์ „๋ฅ˜, ์ „์•• ์ œ์–ด์šฉ์œผ๋กœ ํƒ์›”ํ•œ ๋ฐฉ์‹์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—,

ํ˜„์žฌ๋Š” ํ†ต์‹ ๋ณด๋‹ค๋Š” DC์ชฝ ์ „๋ ฅ์ œ์–ด๋‚˜ ๋ชจํ„ฐ ์ œ์–ด ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹

๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ์ผ์ •ํ•œ ์ฃผ๊ธฐ ๋‚ด์—์„œ Duty๋น„๋ฅผ ๋ณ€ํ™” ์‹œ์ผœ์„œ ํ‰๊ท  ์ „์••์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

โ€‹

PWM์˜ ๊ตฌ์„ฑ

๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์„ฑ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

PWM ์‹ ํ˜ธ ๋ฐœ์ƒ๊ธฐ์˜ ๊ตฌ์„ฑ

์ฝคํผ๋ ˆ์ดํ„ฐ(์ „์••๋น„๊ตํšŒ๋กœ)์˜ +์ž…๋ ฅ์— ์‚ผ๊ฐํŒŒ๋ฅผ ์ž…๋ ฅํ•˜๊ณ , - ์ž…๋ ฅ์— ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ฝคํผ๋ ˆ์ดํ„ฐ์˜ ์ถœ๋ ฅ์—๋Š” ์ž…๋ ฅ ์‹ ํ˜ธ์˜ ๋ ˆ๋ฒจ ๋ณ€ํ™”์— ๋”ฐ๋ผ์„œ ํŽ„์Šค ํญ์ด ๋‹ค๋ฅธ ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โ€‹

์ž…๋ ฅ์— ๋”ฐ๋ฅธ PWM ์ถœ๋ ฅ ์‹ ํ˜ธ

PWM์€ ์ฃผ๊ธฐ๊ฐ€ ์ผ์ •ํ•˜๊ณ , ์ œ์–ด์ž…๋ ฅ ์‹ ํ˜ธ์— ๋”ฐ๋ผ์„œ ํŽ„์Šค ํญ์˜ ๋“€ํ‹ฐ๋น„๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ ํŠธ๋žœ์ง€์Šคํ„ฐ๊ฐ€ ONํ•˜๊ณ  ์žˆ๋Š” ๋™์•ˆ์—๋งŒ ๋ชจํ„ฐ์— ์ „๋ฅ˜๊ฐ€ ํ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โ€‹

๋“€ํ‹ฐ๋น„๊ฐ€ ํด ์ˆ˜๋ก ๋ชจํ„ฐ์— ์ „๋ฅ˜๊ฐ€ ํ๋ฅด๋Š” ์ „์ฒด ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ฒ ์ง€์š”.

โ€‹

DC ๋ชจํ„ฐ ๋“ฑ์˜ ์†๋„์ œ์–ด๋ฅผ ์ž…๋ ฅ ์‹ ํ˜ธ์˜ ๋ณ€ํ™” ๋งŒ์œผ๋กœ ๊ฐ„๋‹จํžˆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(๋ชจํ„ฐ๊ฐ€ ๋น ๋ฅธ ์ฃผํŒŒ์ˆ˜์˜ ๋ณ€ํ™”์— ๊ธฐ๊ณ„ ๋ฐ˜์‘์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

 

 

SPIํ†ต์‹  ๊ทธ๋ฆฌ๊ณ  ๊ทธ์™ธ ํ†ต์‹ 

SPI๋Š” Serial Peripheral Interface์˜ ์•ฝ์ž๋กœ ํ•ด์„์‹œ ์ง๋ ฌ ์ฃผ๋ณ€๊ธฐ๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค’. 

 

SPI๋Š” 1:N ํ†ต์‹ ์„ ์ง€์›ํ•˜๋Š” ๋™๊ธฐ์‹ ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.

 

SPI ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šฌ๋ ˆ์ด๋ธŒ ๊ธฐ๊ธฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 4๊ฐœ์˜ ์„ ์ด ํ•„์š”ํ•œ๋ฐ, MISO, MOSI, SCK, SS๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค. ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋ฉด,

 

 

- MOSI : Master Out, Slave In – ๋งˆ์Šคํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์‹ ํ˜ธ ์„ 

- MISO : Master In, Slave Out – ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์‹ ํ˜ธ ์„ 

- SCK : Clock ์‹ ํ˜ธ ์„ 

- SS : Slave Select – ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•  ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์‹ ํ˜ธ ์„ 

 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๋Š” ์„ ์ด ๋”ฐ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์†ก๊ณผ ์ˆ˜์‹ ์ด ๋™์‹œ์— ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์„œ ์†ก์ˆ˜์‹ ์ด ํ•˜๋‚˜์˜ ์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” I2C ํ†ต์‹ ์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์Šคํ„ฐ์—์„œ ์ถœ๋ ฅํ•˜๋Š” ์„ ๊ณผ ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ์ถœ๋ ฅํ•˜๋Š” ์„ ์ด ์ •ํ•ด์ ธ ์žˆ์–ด ์‹œ๋ฆฌ์–ผ ํ†ต์‹ ์ฒ˜๋Ÿผ Rx, Tx ์„ ์ด ๋งจ๋‚  ํ—ท๊ฐˆ๋ฆด ์ผ๋„ ์—†๋‹ค. ๋‚œ ๋งจ๋‚  ํ—ท๊ฐˆ๋ฆฌ๊ฑฐ๋“ 

 

 

 

์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์  ๋•Œ๋ฌธ์— SPI๋Š” ์ฃผ๋กœ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ด๋”๋„ท ํ†ต์‹ ์ด๋‚˜ SD ์‰ด๋“œ ๊ฐ™์€.

 

 

 

SPI ํ†ต์‹  ์—ญ์‹œ I2C ํ†ต์‹ ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, SPI๋Š” ๊ทธ ๋ฐฉ๋ฒ•์œผ๋กœ SS ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. SS๋Š” Slave Select๋ผ๋Š” ๋œป ๊ทธ๋Œ€๋กœ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์„ ํƒํ•˜๋Š” ์„ ์œผ๋กœ, ํ•˜๋‚˜์˜ ์Šฌ๋ ˆ์ด๋ธŒ์— ํ•˜๋‚˜์˜ SS ์„ ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

์š”๋ ‡๊ฒŒ. SCK์™€ MOSI, MISO ์‹ ํ˜ธ ์„ ์€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ ˆ์ด๋ธŒ ๊ธฐ๊ธฐ๊ฐ€ ๋งˆ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์Šฌ๋ ˆ์ด๋ธŒ ๊ฐœ์ˆ˜๋งŒํผ SS ์‹ ํ˜ธ ์„ ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์กด์žฌํ•  ๋•Œ์—๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค. ํ•€ ๊ฐœ์ˆ˜๊ฐ€ ์—ฌ์œ  ์žˆ์œผ๋ฉด ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ, ๋ณดํ†ต์€ ์—†๋‹ค.

 

๋™๊ธฐํ™” ํ†ต์‹  ๋ฐฉ์‹์ด๋ฏ€๋กœ ํ†ต์‹ ์—๋Š” ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ํด๋Ÿญ ์‹ ํ˜ธ๋Š” ๋งˆ์Šคํ„ฐ์—์„œ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค. ๋‹ค์Œ์€ ๋งˆ์Šคํ„ฐ์™€ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์‹ ํ˜ธ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

 

 

https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi 

 

๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์œ„ํ•ด ์ œ์ผ ๋จผ์ € SS ์‹ ํ˜ธ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์„ ํƒํ•œ ํ›„ ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํด๋Ÿญ ์‹ ํ˜ธ์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

 

 

์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ๋งˆ์น˜ ๋ฐ์ดํ„ฐ ์ „์†ก ํ›„ ์ˆ˜์‹  ๋ฐ›๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋˜์–ด ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ค‘์—๋„ MISO ์‹ ํ˜ธ ์„ ์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ „์†ก๊ณผ ์ˆ˜์‹ ์ด ๋™์‹œ์— ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด SPI์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ !

 

 

๊ทธ๋ฆผ์—์„œ๋Š” ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ HIGH๋กœ ๋ฐ”๋€” ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์œผ๋กœ ๋˜์–ด ์žˆ์ง€๋งŒ, SPI ํ†ต์‹ ์—์„œ๋Š” HIGH๋กœ ๋ฐ”๋€” ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ง€ LOW๋กœ ๋ฐ”๋€” ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ HIGH๋กœ ๋จผ์ € ์‹œ์ž‘ํ•˜๋Š”์ง€, LOW๋กœ ๋จผ์ € ์‹œ์ž‘ํ•˜๋Š”์ง€ ์—ญ์‹œ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค . ๋ฌผ๋ก  ์Šฌ๋ ˆ์ด๋ธŒ์™€ ๋ฐฉ์‹์ด ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

์˜ˆ, ๋ผ์ฆˆ๋ฒ ๋ฆฌํ”ผ์ด์™€ ๋น„์Šทํ•œ ์•„๋‘์ด๋…ธ์˜ ๊ฒฝ์šฐ)

์•„๋‘์ด๋…ธ ๋ฉ”๊ฐ€(Mega 2560/ADK)๋Š” SPI ํ†ต์‹ ์„ ์œ„ํ•œ ํ•€์œผ๋กœ 50~53๋ฒˆ ํ•€์ด ์ง€์ •๋˜์–ด ์žˆ๊ณ , ์šฐ๋…ธ(Uno)์˜ ๊ฒฝ์šฐ “ICSP”๋ผ๋Š” ํฌํŠธ๋กœ ๋”ฐ๋กœ ๋‚˜์™€์žˆ๋‹ค. ๋ฉ”๊ฐ€์— ์žˆ๋Š” “ICSP” ํฌํŠธ ์—ญ์‹œ 50~53๋ฒˆ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด SPI ํฌํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์šฐ๋…ธ(Uno)

๋ฉ”๊ฐ€(Mega 2560/ADK)

 

 

 

ICSP ํฌํŠธ์˜ ํ•€ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

 

์œ„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด๋“œ์— ํ‘œ์‹œํ•ด๋ณด๋ฉด,

 

 

 

์š”๋ ‡๊ฒŒ ๋œ๋‹ค. ํ•€ ํฌํŠธ์˜ ์™ผ์ชฝ ์ƒ๋‹จ์— ์ ์œผ๋กœ ํ‘œ์‹œ๋œ ํ•€์ด 1๋ฒˆ ํ•€์ด๋ผ๋Š” ๊ฒƒ์— ์œ ์˜ํ•˜์ž.

 

 

๋ฉ”๊ฐ€์—์„œ 53๋ฒˆ ํ•€์ด SS ํ•€์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค SS ํ•€์€ ์–ด๋Š ํ•€์„ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€ ์—†๋‹ค. 53๋ฒˆ์„ SS๋ผ๊ณ  ์ง€์ •ํ•ด๋‘” ๊ฑด ์ฐธ๊ณ ์šฉ์ด๋ž„๊นŒ. ์•„๋‘์ด๋…ธ์—์„œ ์ œ๊ณตํ•˜๋Š” SPI ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด 53๋ฒˆ(์šฐ๋…ธ์˜ ๊ฒฝ์šฐ์—๋Š” 10๋ฒˆ)์„ ์ฃผ๋กœ SS ํ•€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์•„๋ฌด ํ•€์ด๋‚˜ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€ ์—„์Šด.

 

 

์—ฌ๊ธฐ๊นŒ์ง€ ์ •๋ฆฌํ•ด๋ณด๋ฉด.

 

 

 

- SPI ํ†ต์‹ ์€ MOSI, MISO, SCK, SS ํ•€์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๋™๊ธฐ์‹ ์ง๋ ฌ ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.

- ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ์‹ ํ˜ธ ์„ ๊ณผ ์ž…๋ ฅ ์‹ ํ˜ธ ์„ ์ด ๋”ฐ๋กœ ์žˆ์–ด ๋™์‹œ์— ์†ก์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ SS ์‹ ํ˜ธ๋กœ ์„ ํƒํ•œ๋‹ค.

- ๊ทธ๋ž˜์„œ I2C ํ†ต์‹ ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ 

- SS ์‹ ํ˜ธ ์„ ์„ ์ด์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์Šฌ๋ ˆ์ด๋ธŒ ๊ฐœ์ˆ˜๋งŒํผ SS ์‹ ํ˜ธ ์„ ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ์—๋Š” ๋น„ํšจ์œจ์ ์ด๋‹ค

 

 

๋ฐ˜์‘ํ˜•