SPI센서 사용하기
SPI 통신에서 슬리브센서의 주소를 알아야 하고 사용할 슬레이브와 연결된 SS 핀을 LOW로하면된다. 나머지 슬리브와 연결된SS핀은 HIGH상태로 있게하기 때문에 쉽게 현재통화중인 슬리브를 파악할수있다. SPI기기는 한번에 1바이트씩 데이터를 보낸다.
바이트에는 0부터 7까지 8개의 비트가 있다 SPI기기제조사에따라 데이터를 왼쪽에서 오른쪽으로 즉 MSB부터 읽게하는 회사가 있는 반면 오른쪽에서 왼쪽으로 즉 LSB부터 읽게하는 회사가 있다
MSB 는 Most Signficant Bit의 약자이고 LSB는 Least Signficant Bit의 약자이다.
우노의 경우 pin 13 = SCK, pin 12=MISO, pin11=MOSI, pin10 = SS.이다
SPI라이브러리는 아두이노 IDE에 기본으로장착되여있다. 스케치 앞부분에 #include<SPI.h> 를 선언해서 사용하면된다.
아두이노에서 SPI사용준비
1)#include<SPI.h> SPI라이브러리를 사용한다고 알려준다.
2)pinMode(SS,OUTPUT); 슬리브를 선택하는 핀을 OUTPUT로 만든다.
3)SPI.begin(); SPI통신을 시작을 준비하라는 명령
4)SPI.setBitOrder(MSBFIRST);왼쪽에서부터 데이터가 시작된다는 명령
(기기에따라 SPI.setBitOrder(LSBFIRST)를 사용하기도 한다.
SPI에서 아두이노로 데이터 보내기
1)digitalWrite( SS, LOW); 통신할 슬레이브 핀을 LOW로 만든다.
2)SPI.transfer(값);보낼값 은 0~ 255사이의 숫자이다.8비트는 2^8이므로
3)digitalWrite(SS, HIGH); 슬레이브 선택핀을 HIGH로하면 통신이 종료되였다는 것을 통보한다.
예)아두이노에서 SPI 사용 가변저항에 데이터 보내기
준비물 아두이노 우노 브레드보드 MCP41X2 가변저항 1개
스케치
//Microchip ㅡ쳬4162 digital Rheostat
#include <SPI.h>
int SS= 10; // pin 10 for SPI slave select
void setup()
{
pinMode(SS, OUTPUT);
SPI.begin(); //wake up the SPI bus
SPI.setBitOrder(MSBFIRST); // MCP4162 sent data MSB first
}
void loop()
{
for(int a=0; a<256 ; a++)
{
setValue(a);
delay(200);
}
for ( int a=255; s>=0 ;--a)
{
setValue(a);
delay(200);
}
}
void setValue( int value)
{
digitalWrite(SS,LOW);
SPI.transfer(0); // send command byte
SPI.transfer(value); // send value(0~255)
digitalWrite(SS,HIGH);
}
하드웨어 연결
MCP4162 아두이노 참조
VDD: 핀8
SCK 핀2 핀 13
SDO 핀7 핀 12
SDI 핀3 핀 11 MOSI(slave data in)
¬CS 핀1 핀10 SS(Chip select)
Vss 핀4 GND
CS언더바 표시는 LOW상태일때 칩이작동한다는 뜻이다.
'아두이노' 카테고리의 다른 글
스텝모터 (0) | 2017.10.14 |
---|---|
조이스틱으로 스텝모터 운전 (0) | 2017.10.08 |
로봇암 소스코드 (0) | 2017.07.27 |
PID제어기에의한 헬리콥터모터 제어 (0) | 2017.06.11 |
PID제어기에의한 모터 제어 (0) | 2017.06.11 |