inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

ESP32 IoT 개발 기초 - 하드웨어부터 FreeRTOS까지

LM75A에 대한 온도 값 음수 적용 부분 질문 드립니다.

해결된 질문

68

fain9301

작성한 질문수 9

0

image.png


부호 비트에 대해서 1일 경우 영하를 나타내는 것이고 2진수의 보수를 취해서 값을 가져온다고 설명하셨는데

현재 코드르 보면, 단순히 AND 연산을 통해서 부호 bit에 대한 값만 제외하고 값을 구하는 형태가 아닌가요??

c iot FreeRTOS esp32

답변 1

0

문용준

확인 감사합니다. 질문 주신 내용이 맞습니다.
현재 강의 코드에서는 부호 비트만 제거하는 단순화된 방식으로 처리되고 있어, 설명드린 내용과 완전히 일치하지 않는 부분이 있습니다.

정확히 확인하지 못한 채 설명드려 혼란을 드린 점 죄송합니다. 좋은 지적 감사합니다.
LM75A의 음수 온도 데이터는 단순히 부호 비트만 제외하는 방식이 아니라, 전체 값을 기준으로 2의 보수 처리해야 하기 때문에 아래와 같이 수정하면 영하 데이터도 올바르게 처리할 수 있습니다.

int isNeg = 0;

if (raw[0] & 0x80)
{
    isNeg = 1;
}

int16_t data = (raw[0] << 8 | raw[1]) >> 5;
float temperature;

if (isNeg)
{
    data |= 0xF800; //음수의 경우 상위 비트를 1로 채워 sign extension 진행
    data = ~data + 1; //2의 보수 처리 : 비트를 반전(~)하고 1을 더해서 절대값으로 변환
    temperature = data * -0.125; // 최종 온도값은 음수이므로 -0.125를 곱해서 적용
}
else
{
    temperature = data * 0.125; // 최종 온도값이 양수이므로 0.125를 곱해서 적용
}

printf("Temperature : %f\n", temperature);

강의 내용도 해당 부분을 수정해서 다 업로드 하겠습니다.

0

fain9301

네 감사합니다.

1

문용준

강의도 맞게 수정 완료했습니다.

Export template 안됨

1

8

2

scanf("%d\n") 의미

0

15

1

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

33

2

26년 1회 실기 해설 강의

0

48

2

주소 연산자(&) 간접 지정자(*) 반대 개념

0

30

1

53번 4-1 자료 오류 있는 것 같습니다.

0

67

2

7번문제

0

56

2

C언어 변형문제 9번문제 Pdf 수정요청

0

44

2

메서드 오버드라드

0

44

2

실수

0

43

1

공부 우선순위 우선강의 알려주세요

0

82

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

44

2

25년 2회 기출 5:40 질문입니다.

0

37

2

C언어 출제변형 6번 문제

0

48

2

c언어 출제변형 강의 질문

0

28

2

28:40

0

32

2

C :  언어 배열과  문자열 수업자료

0

26

2

파이썬 리스트, 딕셔너리 질문

0

39

2

모의고사 관련 질문 건

1

66

3

25년 3회 1번 문제

0

37

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

52

3

강의 영상 음성 겹치는 문제가 있습니다.

0

52

1

VS Code에서 ESP-ide extension 설치 후 명령 팔레트 안뜸

0

156

3

[수강 전 준비 사항 관련]

0

84

1