로직 애널라이저를 시험해보십시오 5 : Wire.setClock()
Wire.setClock() 확인
지정된 값에 따라 I2C 클럭 (SCL)이 나오는지 로직 애널라이저로 확인하십시오.
사용한 것
ESP32 탑재 M5Stack 및 광 센서(TLS2561 탑재). 로직 애널라이저는 이전 기사 참조. Arduino IDE 사용.
소스 코드
#include <Wire.h>
#include <Digital_Light_TSL2561.h>
void writeRegisterValue(int deviceAddress, int address, uint8_t val) {
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
uint8_t readRegisterValue(int deviceAddress, int address) {
uint8_t value;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while (!Wire.available());
value = Wire.read();
return value;
}
void setup() {
Wire.begin();
Wire.setClock(20000);
Serial.begin(9600);
TSL2561.init();
}
void loop() {
writeRegisterValue(TSL2561_Address, TSL2561_Control, 0x03); // POWER UP
delay(20);
Serial.printf("Channel 0 Low value = 0x%x\n", readRegisterValue(TSL2561_Address, TSL2561_Channal0L));
writeRegisterValue(TSL2561_Address, TSL2561_Control, 0x00); // POWER Down
delay(2000);
}
setup() 안에 있다
Wire.setClock(20000);
로 시계를 지정합니다. 상기는 20kHZ의 지정.
또한, TLS2561의 핸들링에 대해서는 이전 기사 참조. 참조 소스 코드는 여기 . 여기서, 채널 0의 로우 값을 주기적으로 취득한다.
실험
100kHz 지정시의 데이터(디폴트인 것 같다, Wire.setClock() 미사용시)
D0이 클럭 (SCL) (이후 동일). 약 10μs마다 SCL이 반복되는 것을 볼 수 있다.
50kHz 지정시의 데이터(Wire.setClock(50000))
약 20μs마다 SCL이 반복되는 것이 보인다.
20kHz 지정시의 데이터(Wire.setClock(20000))
약 50μs마다 SCL이 반복되는 것을 볼 수 있다.
끝에
당연하지만 지정된 값대로 시계가 나와 있습니다.
Reference
이 문제에 관하여(로직 애널라이저를 시험해보십시오 5 : Wire.setClock()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/infinite1oop/items/cff046cc8af1c84e69d0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <Wire.h>
#include <Digital_Light_TSL2561.h>
void writeRegisterValue(int deviceAddress, int address, uint8_t val) {
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
uint8_t readRegisterValue(int deviceAddress, int address) {
uint8_t value;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while (!Wire.available());
value = Wire.read();
return value;
}
void setup() {
Wire.begin();
Wire.setClock(20000);
Serial.begin(9600);
TSL2561.init();
}
void loop() {
writeRegisterValue(TSL2561_Address, TSL2561_Control, 0x03); // POWER UP
delay(20);
Serial.printf("Channel 0 Low value = 0x%x\n", readRegisterValue(TSL2561_Address, TSL2561_Channal0L));
writeRegisterValue(TSL2561_Address, TSL2561_Control, 0x00); // POWER Down
delay(2000);
}
Wire.setClock(20000);
Reference
이 문제에 관하여(로직 애널라이저를 시험해보십시오 5 : Wire.setClock()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/infinite1oop/items/cff046cc8af1c84e69d0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)