AT 8051 마이크로프로세서 DS1620 디지탈 온도센서
마이크로프로세서 8051 또는 ATmega128의 시리얼(serial) 통신으로 데이터를 주고 받을수 있는
디지탈온도 센서 DS1620에 대해서 알아봅니다.
DS1620은 디지털 온도계(Thermometer, thermostat) 로 사용 할수 있으며, 3개의 선(CLK,DQ,RST)을
이용하여 9비트로 내부의 데이터를 읽기, 내부로 쓰기를 할수 있으며, 별도의 콘트롤(CPU) 없이도
독립적으로 사용되거나 CPU에 인터페이스하여 사용할수 있습니다. CPU에 사용할때에도 사용전에
미리 온도를 설정하여야 하며 온도 측정 범위는 -55℃~+125℃의 범위를 0.5℃ 단위로 사용합니다.
핀(pin) 기능 요약
DQ : 3선 입,출력
CLK/CONV : 3선 클럭 입력과 스탠드 어론 컨버터 입력
RST : 3선 리셋 입력
Vdd , GND : 전원 (+,-) 3v~5v
T_high : 설저 온도 TH와 같거나 높으면 "1"
T_low : 설정 온도 TL과 같거나 낮으며 "1"
T_com : TH를 초과하거나 TL보다 낮으면 "1"
FUNCTIONAL BLOCK DIAGRAM
DS1620 내부블록도는 위와 같으며 높은 온도 상수 발진기에서 결정된 게이트 주기로 낮은 온도
상수의 발진기의 클록 수를 카운트해서 오도를 측정합니다.
->카운터는 -55℃에 대응하는 기본 값으로 미리 설정되며
->게이트의 주기가 끝나기 전에 카운트가 0이되면 -55℃값으로 설정되어 있는 온도 레지스터는 온도
-55℃보다 크다는 것을 가리키기 위해 증가합니다.
->또 동시에 카운터는 슬로프 어큐물레이터 회로로 결정된 값으로 설정되며 이회로는 모든 온도에
대해서 발진기의 포물선 동작에 대한 보상이 필요합니다.
-> 카운터는 0에 도달할 때까지 클록을 카운트하고 게이트 주기가 끝날때깢 반복합니다.
->슬로프 어큐뮬레이터는 모든 온도 범위에 걸쳐 분해능이 좋게 하기위해 발진기의 비선형 동작을
보상하며 모든 온도에서 각각 증가분 온도분을 카운트에 필요한 카운트 수를 변경하며, 원하는
분해능을 얻기 위해 주어진 온도에서 디그리/카운트 값과 카운터의 값을 알고 있어야 합니다.
->필요한 카운터 값은 ds1620의 분해능이 0.5℃ 분해능이므로 이것으로 계산할수 있습니다.
온 도 |
디지털 출력(2진수) |
디지털 출력(16진수) |
+125℃ |
0 11111010 |
0x00FA |
+25℃ |
0 00110010 |
0x0032 |
+0.5℃ |
0 00000001 |
0x0001 |
0℃ |
0 00000000 |
0x0000 |
-0.5℃ |
1 11111111 |
0x01FF |
-25℃ |
1 11001110 |
0x01CE |
-55℃ |
1 10010010 |
0x0192 |
->데이터는 3선 통신을 이용ㅎ여 최하위 비트가 처음 전송되기 때문에 온도 데이터는 9비트
워드(9번째 비트(최상의비트) 후에 RST는 "L"로 한다) 혹은 8비트로 2번 전송
-> 또는 아래처럼 최상위 7개의 비트는 무시하거나 0이 됩니다.
x |
x |
x |
x |
x |
x |
x |
1 |
|
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
->높은 분해능을 얻기 위해 읽은 값에서 0.5℃ 비트 LBS를 잘라냅니다.
온도=temp_read+(count_oer_c-count_remain)/count_per_c
컨피그레이션/스테터스 레지스터
DONE |
THF |
TLF |
NVB |
1 |
0 |
CPU |
1SHOT |
DONE : 1=변환완료, 0=변환진행중
THF : 온도 TH보다 크거나 같으면 "1" 0을 써 넣거나 리셋할때 까지 "1"의 상태를 유지한다.
TLF : 온도가 TH보다 같거나 작으면"1" 0을 써 넣거나 리셋할때 까지 "1"의 상태를 유지한다.
NVB : 1=E2메모리로 써 넣기 진행중, 0=비휘발성 메모리로 쓰기가능
CPU : 0=CLK/CONV 핀 RST가 "L"일때 변환 시작으로 사용,1=CPU와 3선 통신하다.
1SHOT : 1= 변환 시작 명령 T를 수신하면 온도 변환을 시작한다
0= 계속해서 온도 변환을 시작한다. 이비트는 E2 메모리에 저장된다 초기값=0
3선을 이용한 통신
온도 변환 명령 |
온도 읽기 |
온도레지스터에서 마지막으로 변환된 값을 읽기 |
0xAA |
읽은 데이터 |
|
카운터 읽기 |
카운터에서 남아있는 카운터 값을 읽기 |
0xA0 |
읽은 데이터 |
|
스로프 읽기 |
슬로프 어큐뮬레이터의 값을 읽기 |
0xA9 |
읽은 데이터 |
|
변환 시작 |
온도 변환을 시작 |
0xEE |
아이들 |
1 |
변환 정지 |
온도 변한을 정지 |
0x22 |
아이들 |
1 |
서모스테트 명령 |
TH 쓰기 |
상위 온도 리미트 값을 TH 레지스터에 쓰기 |
0x01 |
써넣을 데이터 |
2 |
TL 쓰기 |
상위 온도 리미트 값을 TL레지스터에 쓰기 |
0x02 |
써넣을 데이터 |
2 |
TH 읽기 |
상위 온도 리미트 값을 TH 레지스터에서 읽기 |
0xA1 |
읽은 데이터 |
2 |
TL 읽기 |
하위 온도 리미트 값을 TL레지스터에서 읽기 |
0xA2 |
읽은 데이터 |
2 |
컨피그 쓰기 |
컨피그 레지스터로 컨피그 데이터 쓰기 |
0x0C |
써넣을 데이터 |
2 |
컨피그 읽기 |
컨피그 레지스터에서 컨피그 데이터 읽기 |
0xAC |
읽은 데이터 |
2 |
주의) 1
연속적인 변환 모드에서 변환 스톱 T명령은 계속적인 변환을 정지시키므로, 다시 시작하기 위하여 변환 시작 T 명령을
발생하여야 한다. 원쑈트 모드에서 변환 시작 T 명령은 희망하는 온도를 읽기 위하여 매번 발생되어야 합니다.
주의2)
실내 온도에서 E2를 쓰는데 10ms가 필요하며, 쓰기 명령을 발새한후 10ms동안 더 이상 아무것도 쓸수 없습니다.