우리가 사용하고 있는 온도센서는 One-Wire 통신 방식으로 작동되고 있다. One-Wire 통신의 최대 장점은 두 개의 선으로 양방향 통신과 전원을 공급할 수 있다는 것이다.
네트워크 장비에 전원을 연결하지 않고, UTP 케이블을 이용하여 데이터 및 전력을 함께 전송하는 기술을 말한다.
PSE(Power Soucring Equipment) - UTP케이블 이용하여 PD에게 전원 공급
PD(Power Devices) - 전원을 공급 받는 장치(IP Camera, CCTV, IP Phone 등)
**UTP : 주거, 빌딩 등 각종 건물에 흔히 사용되는 통신케이블
1) 물리적인 통신 방식만을 규정한 프로토콜(SPI...)
2) 물리적 + 소프트웨어적인 규칙까지 정한 프로토콜(One-Wire...)
3) 소프트웨어적인 규칙만 정의한 프로토콜(http, TCP...)
4) 서로 상하관계가 있는 프로토콜(http->tcp->ethernet->광통신 프로토콜...)
One-Wire는 클럭을 받고 보내는 핀이 따로있지 않다. 그래서 전압과 시간을 이용하여 신호를 구분해낸다.
1) "5V = 1, 4V = 2, 3V = 3..."이런 방식의 신호는 노이즈에 굉장히 취약하다.
2) "5V = 1, 0V = 0일때 그 전압을 n초 유지하라" 이런 방식을 굉장히 많이 사용한다.
위 그림은 DS18B20가 초반에 어떻게 작동하는지 보여주는 정보이다.
1) 처음에는 마스터(MCU)가 HIGH에서 LOW로 떨어트리고 480us만큼 유지하라고 한다.
2) 그리고 15~60us만큼 LOW에서 HIGH로 올린다.
3) 그리고 HIGH에서 LOW로 떨어지는데 60~240us만큼 유지한다(데이터 정보를 수집).
4) 반복
위 그림은 DS18B20이 작동하기 위해 필요한 조건들을 소스로 정리한 것이다.
MASTER가 통신 시작을 알리고 DS18B20으로부터 presence pulse(정보)를 수신후
"슬레이브는 ROM code(주소)를 갖는다"라는 명령어를 보낼 수 있다.
** i2c에서는 adress라고 하지만 one-wire에서는 ROM code라고 한다.(이름만 다를뿐 원리는 비슷하다.)
ROM Command : 장치를 선택하기 위한 명령어(One-Wire를 사용하는 장치들의 약속)
- Search ROM : One-Wire bus에 연결된 모든 slave 장치들의 ROM Code(Adress)를 읽는다. (전체 주소를 알아내는 과정)
- Read ROM : Bus에 장치가 하나만 있을 때 사용(전체 다 훑어 볼 필요없이 바로 선택)
- Match ROM : Bus에 연결된 slave 장치들이 있지만 그 중에서도 내가 선택한 slave를 작동시킨다. 나머지 slave는 기다리게 한다. (1:1 매칭하는 과정)
- Skip ROM : 모든 slave장치에게 동시에 명령을 보낼 때 사용한다.
Function Command : 장치에게 특정 동작을 수행하기 위한 명령어
(제조사 마다 성격도 다르고 센서마다 하는 역할이 다르므로 정해진게 없다.)
- Convert t : 신호선으로 전원을 공급받는 경우 converttmp 명령을 보낸 뒤 신호선을 HIGH로 올려 온도가 변하는 동안에도 전원을 공급해줌
- Write Scratchpad3바이트 데이터를 scratchpad에 쓴다. (Output Mode)
- Read Scratchpad
Scratchpad의 값을 읽어온다. (Input Mode)- Copy Scratchpad
Scratchpad의 값을 EEPROM으로 저장한다. (Scratchpad는 전원이 꺼지면 내부에 있는 정보들이 싹 날라가지만, EEPROM은 사라지지 않는다.) + 신호선으로 전원 공급시 명령어를 보낸 뒤 10us동안 HIGH 유지해야 한다.
특정 정보가 모여있는 공간 (자세한건 인터넷을 봐도 모르겠네)
특정 기준값을 넘지 않는다면 알람이 울리지 않지만 기준값을 넘으면 알람이 울린다.
<참고 자료>
1) https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/1100.html