본문 바로가기
센서/실제 구동

[I2C 예제1] 온도 센서 - LM75A (CJMCU-75)

by [Akashic Records] 개발의선지자 2024. 7. 7.

 

LM75A CHIP은 내부적으로 Sigma-delta ADC와 I2C 인터페이스 내장, 9bit 온도 읽을 수 있다.

 

 

 

 

데이터 시트를 보면 핀 별 기능을 볼수 있다.

O.S : 과다한 온도상태에서 SHUT DOWN

A2, A1, A0 : I2C 장치 주소 하위 3bits 결정

 

CJMCU-75의 경우 A2,A1,A0이 그라운드 연결-> 0
장치 주소 : 0x1001000 << 1 -> 0x90

레지스터 주소 : 온도 레지스터 : 0x00  , 1 바이트


사용 툴 : STM32CUBEIDE

- I2C3 컨트롤러 사용

- STANDARD MODE

 

1초마다 LM75A CHIP으로부터 온도를 읽어 출력하는 코드입니다.

int main(void)
{
  /* USER CODE BEGIN 1 */
uint8_t buffer[3] = {0, };
uint16_t temp = 0;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C3_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_I2C_Mem_Read(&hi2c3, LM75_ADDRESS, 0x00, 1, buffer, 2, HAL_MAX_DELAY);
	  temp = (buffer[0] << 8);
	  temp |= buffer[1];
	  printf("%d\n", temp);
	  HAL_Delay(1000);
      
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

'센서 > 실제 구동' 카테고리의 다른 글

버튼 실습  (0) 2024.07.21