온도센서를 다뤄보자(2)

김지성·2022년 8월 3일
1

Embedded

목록 보기
15/21

내가 사용하고 있는 온도센서는 데이터선 한 개로 송수신을 할 수 있도록 만든 One-Wire 통신이다. 보통은 Tx, Rx가 따로 있지만 한 개의 선으로만 데이터를 송수신하는건 독특한 방식이라고 한다.

온도센서 소스 사용

이번 수업은 어딘가 굴러다니는 ds18b20(온도센서) 소스를 이용하여 내 것으로 만들어보는 실습을 할 예정이다.

<참고 소스>
https://github.com/nimaltd/ds18b20


error(1)

onewire.c파일에는 [ #include "onewire.h" ]가 적혀있는데 #include를 넣는다고 해서 다 적용되는게 아니다.

core > properties > path and symbols > Add > Workplace > /파일이름/Core/Lib/Inc
(Inc안에는 각 종 헤더파일이 존재한다.)

위 과정을 걸쳐야 소스파일에서도 다른 헤더파일을 불러다 사용할 수 있다.


error(2)

나도 모르는 헤더파일이 있다면 과감하게 주석처리를 한다음 컴파일 시켜본다.


error(3)

'GPIO_TypeDef'가 정의되지 않았다고 한다. main.h를 보면 #include "stm32f1xx_hal.h"가 존재하는데 해당 GPIO_TypeDeF도 stm32fxx라고 include되어 있다. 이럴땐 #include "main.h"를 해보자.


error(4)

#if (_DS18B20_USE_FREERTOS==1)

FREERTOS가 1이 됐다면 if문을 실행하고, FREERTOS가 0이라면 else문을 실행하라는 뜻이다. 나는 FREERTOS를 사용하지 않으므로 1에서 0으로 바꿀 것이다.


error(5)

DS18B20을 사용하기 위해서 GPIO핀과 TIMER를 설정해줘야 하는 느낌이 온다.

여기서 PA3는 DS18B20이 데이터를 송수신 할 수 있도록 설정된 핀이다.
TIMER와 CLOCK 관련된 내용은 따로 포스팅을 할 예정이다.


DS18B20 센서를 사용하기 위해 main()에 선언한다

FREERTOS를 사용한다면 Ds18b20_Init(osPriority Priority)을 가져오겠지만 우리는 사용하지 않으므로 Ds18b20_Init을 가져온다. 그리고 #include "ds18b20.h"를 추가해준다.


Ds18b20_ManualConvert(void)


위 함수를 while()문에다가 선언을 해주면 꾸준히 온도값을 가져오는걸 확인할 수 있다.


Ds18b20 센서가 가져오는 온도값을 FND에 출력하고 싶다면?

기존에 타이머로 사용했던 digit4_temper()함수를 이용하면 된다. 디버거를 한 다음 Live Expressions를 보니 센서의 이름이 "ds18b20[0]"로 되어있었고 Type은 "Ds18b20Sensor_t"였다.
Address[8]는 dsb1820이 제대로 통신되는지 알 수 있었고, Temperature는 온도값을 받아들이는 함수인거 같다.

profile
1139일 남음

1개의 댓글

comment-user-thumbnail
2022년 12월 9일

Hello, thank you for your tutorial. but i have some problem. i have put ds18b20_init in main, and Ds18b20_ManualConvert in while(l). but why in keil debugger it says that my struct is "struct". please help me

답글 달기