로직 애널라이저를 시험해보는 그 3(SPI)
SPI를 로직 애널라이저로 확인
여기의 속편에서 이번에는 SPI를 시도한다.
![](https://s1.md5.ltd/image/cf3db53f2298daa4586118ab4a18edc7.png)
PulseView
이번에는 Windows판을 사용한다. 여기 등에서 Download. 설정에 대해서는, 그 1 , 그 2 와 같다.
SPI 설정
프로토콜을 선택한다(아래의 “Add protocol decode”클릭).
![](https://s1.md5.ltd/image/23acd6752d90225f46aab9029ca4edc0.png)
그러면 다음 대화 상자가 표시됩니다.
![](https://s1.md5.ltd/image/5ad96d2fef416d6dbea45b7884c62741.png)
"SPI"를 입력하여 검색하고 SPI를 클릭합니다.
![](https://s1.md5.ltd/image/2aa4c99900ae08dbca1004edff676fdd.png)
Clock을 D7, CS를 D0, MOSI를 D3, MISO를 D4에 할당한다(사용하지 않는 핀은 “Disable”로 설정). 이번 이용하는 SPI 디바이스(A/D 컨버터)의 모드는 "Mode 0,0"이므로, "Clock polarity"및 "Clock phase"는 모두 '0'이 된다.
대상 기기
이전 시도한 A/D 컨버터 MCP3008이 SPI 디바이스, A/D 컨버터 앞에 온도 센서가 있다. 온도 센서는 A/D 컨버터의 Channel 0에 접속.
A/D 컨버터 MCP3008
데이터시트 에서 다음 부분이 중요.
![](https://s1.md5.ltd/image/a035ac225898433f0195876b81cb93bb.png)
소스 코드
여기 에 있던 코드를 약간 수정한 정도(감사합니다!).
#include <SPI.h>
#define SPI_CS 10
float Vref = 5.0 ;
SPISettings settings(1000000,MSBFIRST,SPI_MODE0);
void setup() {
Serial.begin(9600);
pinMode(SPI_CS, OUTPUT);
SPI.begin();
}
void loop(){
// SPI setting and write&read
SPI.beginTransaction(settings);
digitalWrite(SPI_CS, LOW);
SPI.transfer(0b00000001); // Start bit 1
byte highByte = SPI.transfer(0b10000000); // SingleEnd Channel 0
byte lowByte = SPI.transfer(0x00); // dummy
digitalWrite(SPI_CS, HIGH);
SPI.endTransaction();
unsigned int dataCh0 = ((highByte & 0x03) << 8) + lowByte;
// Conversion of read data according to MCP9700 spec
float volts = dataCh0 * Vref / 1024;
float temperature = (volts - 0.5) / 0.01; // : 500 mv at 0 degree and 10 mv / degree
Serial.println("dataCh0: " + String(dataCh0,HEX) + " Voltage: " + String(volts,3));
Serial.println("Temperature: " + String(temperature,2) + " degrees");
Serial.println();
delay(3000);
}
위에서 설명한 데이터 시트가 구현되었습니다.
- SPI 설정은 1MHz, MSB First, 모드 0(Mode 0,0)
- CS Low
- "Start bit"write
- "SingleEnd/Channel 0"write & 1바이트 read
- Dummy write & 1바이트 읽기
- CS를 High
배선의 모습
![](https://s1.md5.ltd/image/7a297aade84fa833d9eab48a79b496fe.jpeg)
여기 과 같다. 보이지 않지만 Vcc와 GND는 Arduino 측에 연결되어 있습니다.
(로지아나용으로 복수의 와이어 있음.)
결과
로직 애널라이저 디코딩 결과 및 시리얼 콘솔 디스플레이는 다음과 같습니다.
![](https://s1.md5.ltd/image/890c64b60c667f534c07e549decdde89.png)
디지털 변환 된 값 "9b"가 모두 보입니다. 성공.
마지막으로
실은 계속이 있습니다.
Reference
이 문제에 관하여(로직 애널라이저를 시험해보는 그 3(SPI)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/infinite1oop/items/01d2dbbc9ed24c2458df
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <SPI.h>
#define SPI_CS 10
float Vref = 5.0 ;
SPISettings settings(1000000,MSBFIRST,SPI_MODE0);
void setup() {
Serial.begin(9600);
pinMode(SPI_CS, OUTPUT);
SPI.begin();
}
void loop(){
// SPI setting and write&read
SPI.beginTransaction(settings);
digitalWrite(SPI_CS, LOW);
SPI.transfer(0b00000001); // Start bit 1
byte highByte = SPI.transfer(0b10000000); // SingleEnd Channel 0
byte lowByte = SPI.transfer(0x00); // dummy
digitalWrite(SPI_CS, HIGH);
SPI.endTransaction();
unsigned int dataCh0 = ((highByte & 0x03) << 8) + lowByte;
// Conversion of read data according to MCP9700 spec
float volts = dataCh0 * Vref / 1024;
float temperature = (volts - 0.5) / 0.01; // : 500 mv at 0 degree and 10 mv / degree
Serial.println("dataCh0: " + String(dataCh0,HEX) + " Voltage: " + String(volts,3));
Serial.println("Temperature: " + String(temperature,2) + " degrees");
Serial.println();
delay(3000);
}
Reference
이 문제에 관하여(로직 애널라이저를 시험해보는 그 3(SPI)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/infinite1oop/items/01d2dbbc9ed24c2458df텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)