번역 DS18B20 출력 ...

H

hawk1943

Guest
안녕하세요,

당신으로 어떤 데이터를 수도 온도 및 출력 DS18B20 데이터를 알고에서 내가 사용하는 16F636를 처리 하이퍼 터미널 ...

하지만 방법은 내가 데이터를 오전 변환 데이터입니다 부정확 분명히 잘못입니까로서 전 ...

데이터를 좀 사람이 번역하는 데 도움이 우리가 ...

오직 나만이 값을 두 개의 별도의 것인지에 코드 같은 경우에 지점을 십진수 가능한 추가 ...

기본적으로이 받고있는 무슨이다 난 ...

ScratchPad 데이터 = E4 10 C FF로 7 층 0 0 5 50
ScratchPad 데이터 = 지하 1 층 10 FF로 7 층 5 0 0 1 6B
ScratchPad 데이터 대답 = 10 4 FF로 7 층 0 0 1 6C

되었다 기록된 데이터는 시간 온도가 C에서 있었어요 23.3도있어

이것은 수동으로 얼마나 데이터를 번역 난

550 = 1360 엑스 0.0625 = 85 - 당신은 항상 권력에 가치를이 ...
16C = 364 엑스 0.0625 = 22.75
16B = 363 엑스 0.0625 = 22.6875

해상도는 22.6875도 할 수있다 16분의 363 = 16 비트 나 그렇게 따라서

7 층은 바이트입니다 구성 데이터 ...그래서 12 비트 실행에있어 ...

하지만 어떻게 것입 C의 코드에서이 작업을 내가 어떻게?

나는 그것을주의해야하고 응용 프로그램 DS18B20의 일부 코드를 찍은에서 162하지만 사용하지 하느니 차라리 충돌 내가 이길 것으로 메모를 응용 프로그램 ...

내가 가지고 밖으로 시도 코드 사실과 가치를 발견 올바른 온도가 생산되지 ...

하지만 기본적으로이 그것을 얼마나 할 그들은 당신을 어떻게 보여줄 ...

코드 :(temp_msb <= 0x80으로)하는 경우

(

temp_lsb은 = (temp_lsb / 2); / / 전체 학위를 얻을 이동

)temp_msb = 0x80으로 temp_msb &; / / 마스크를 제외한 모든 신호 비트(temp_msb> = 0x80으로)하는 경우

(

temp_lsb = (~의 temp_lsb) 1; / / 보완 조로

)(temp_msb> = 0x80으로)하는 경우

(

temp_lsb은 = (temp_lsb / 2); / / 전체 학위를 얻을 이동

)(temp_msb> = 0x80으로)하는 경우

(

temp_lsb은 = ((-1) ※ temp_lsb); / / 비트 서명을 추가

)printf (이 "\ n \ r이 TempC = % d 개의 섭씨도 \ n \ 연구", (int) temp_lsb); / / 인쇄 온도.
C

 
나는 미완성 프로젝트에있어 이것을 사용하여, 작동하는 듯 보이지만 너무 좋아 그렇지 못해 확인 나는 아직 내가 프로그램을 전부 가지고 디버깅 없습니다.

코드 :TSHex은 = (워드) 온도 [1] <<12; / / 한 단어로 결합

TSHex 는 = (워드)는 온도 [2] <<8;

TSHex 는 = (워드)는 온도가 [3] <<4;

TSHex = (워드) 온도 [4];로그인 = ' ';

((TSHex & 0xF800) == 0xF800)면 / /면 MSBs, 변경 기호를 설정하고 2 초을 칭찬

(

로그인 = '-';

TSHex = ~ TSHex 1;

)sprintf (전체, "%의 03d", (TSHex & 0x7F0)>> 4);

sprintf (붉은 "%의 04d", (TSHex & 0x0F) * 625);

fnprintf (AddTx, "% C를 % s을 % s을 %", 서명, 전체, 분수);

(2) 잠깐 만요;

 
안녕 매,
이것을 사용해보십시오, 나는 당신을 생각하는 데 도움이됩니다 그것은 :
코드 :

/ / 설정 TEMP_RESOLUTION 사용 DS18x20의 해당 해상도로 센서 :

/ / 18S20 : 9 (기본 설정, 9,10,11, 또는 12 수)

/ / 18B20 : 12const 서명되지 않은 짧은 TEMP_RESOLUTION = 9;) (Display_Temperature을 (서명 int의 temp2write 무효

const 서명되지 않은 짧은 RES_SHIFT = TEMP_RESOLUTION - 8;

메기 temp_whole;

서명되지 않은 int의 temp_fraction;면 / / 체크 온도가 부정적이다

temp2write (해당되는 경우 & 0x8000) (

텍스트가 [0] = '-';

temp2write는 = ~는 를 1 temp2write;

)/ / temp_whole 추출

temp_whole = temp2write>> RES_SHIFT;/ / 문자로 변환 temp_whole

(temp_whole/100)하는 경우

텍스트 0] = temp_whole/100 48 [;

다른 사람

텍스트는 '0] = '0을 [;텍스트 [1] = (temp_whole/10) % 10 48; / / 추출 수십는 자리

텍스트는 10 48; / / 추출 자들 자리 2] = temp_whole %를 [/ / temp_fraction를 추출하고 서명되지 않은 int로 그것을 변환

temp_fraction = temp2write <<(4 RES_SHIFT);

temp_fraction & = 0x000F;

temp_fraction *= 625;/ / 문자로 변환 temp_fraction

텍스트 4] = temp_fraction/1000 48 [; / / 압축을 풉니다 수천명의 자리

텍스트 5] = (temp_fraction/100) % 10 48; / / 추출 수백 자리 [

텍스트는 [6] = (temp_fraction/10) % 10 48; / / 추출 수십는 자리

텍스트는 7] = temp_fraction의 10 % 48; / / 추출 것들 자리 [LCD에 / / 인쇄 온도

Lcd_Out (2, 5, 텍스트);

)

 
그것은 매우 쉽습니다 : LSB를 받아 귀하의 MSB가 있으며, 가치를 형성 16 비트 및 비트 - 16 지정 그것을 위해) C 서명 서명 짧은 형식 (대부분.그 구현 부여와 기호 이미 당신에게 독서를 기본 온도.

코드 :짧은 임시직 = (temp_msb 로그인 <<8) | temp_lsb;

 

Welcome to EDABoard.com

Sponsor

Back
Top