본문 바로가기

[ST_MICRO]/STM32F7

[STM32-64 Ardu] STM32F732 Arduino I2C 테스트 - TMP100 온도 센서 테스트

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

반응형