로직 애널라이저를 시험해보십시오 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이 반복되는 것을 볼 수 있다.

끝에



당연하지만 지정된 값대로 시계가 나와 있습니다.

좋은 웹페이지 즐겨찾기