STM32F732 보드에서 Arduino I2C 테스트를 진행 해보자.
가장 간단하게 테스트 할 수 있는 SSM 확장 보드를 이용해서 I2C 온도 센서 모듈 TMP100 을 이용하여 온도 값을 읽어오는 예제를 테스트 해 보자.
우선 가장 간단히 I2C로 온도 센서 값을 읽어 올 수 있는 코드를 작성해서 테스트 해보자
#include <Wire.h>
#define TMP100_ADDR 0x4c
float read_temp(unsigned char address)
{
byte temp_reg = 0;
byte a, b;
float temp=.0;
Wire.beginTransmission(address); // Start transmission
Wire.write((byte)temp_reg); // 온도 레지스터
Wire.endTransmission(); // Stop transmission
Wire.requestFrom(address, 2); // I2C 데이터 요청
a = Wire.read(); // first received byte stored here
b = Wire.read(); // second received byte stored here
temp=a<<8|b;
return(temp/256.0);
}
void setup()
{
Serial.begin(115200);
while (!Serial);
Wire.begin();
Serial.println("STM32F7 I2C Test - Temp100 Sensor");
}
void loop()
{
float result = 0;
result = read_temp(TMP100_ADDR);
Serial.println(result);
delay(2000);
}
TMP100 온도센서의 값이 출력되는것을 확인 할 수 있다.
이번에는 I2C로 데이터를 쓰는 테스트를 위해 TMP100 온도센서의 레지스터 값을 설정하는 코드를 추가 해보자
TMP100은 디폴트로 9비트로 설정이 되어 있는데 12비트로 설정해서 오도 값을 읽어 보자
STM32F7 I2C TMP100 테스트 예제코드
#include <Wire.h>
#define TMP100_ADDR 0x4c
void init_tmp100(unsigned char Addr)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select configuration register
Wire.write(0x01);
// Set continuous conversion, comparator mode, 12-bit resolution
Wire.write(0x60);
// Stop I2C Transmission
Wire.endTransmission();
}
float read_temp(unsigned char address)
{
byte temp_reg = 0;
byte data[2];
float temp=.0;
Wire.beginTransmission(address); // Start transmission
Wire.write((byte)temp_reg); // 온도 레지스터
Wire.endTransmission(); // Stop transmission
Wire.requestFrom(address, 2); // I2C 데이터 요청
data[0] = Wire.read();
data[1] = Wire.read();
temp= (((data[0] * 256) + (data[1] & 0xF0)) / 16) * 0.0625;
return(temp);
}
void setup()
{
Serial.begin(115200);
while (!Serial);
Wire.begin();
Serial.println("STM32F7 I2C Test - Temp100 Sensor");
init_tmp100(TCN75_ADDR);
init_tmp100(TMP100_ADDR);
}
void loop()
{
float result = 0;
result = read_temp(TMP100_ADDR);
Serial.println(result);
delay(2000);
}
테스트 결과 12비트로 온도 값을 출력 하는 것을 확인 할 수 있다.
29.44
29.44
29.12
29.12
29.12
반응형