29.2) 적외선 데이터 포맷

적외선을 통해 데이터를 전달하기 위해서는 데이터를 펄스열로 바꾸어야 한다. 데이터를 펄스열로 바꾸는 방법에는 여러 가지가 있는데, 흔히 NEC 프로토콜을 사용한다.

NEC 프로토콜

NEC 프로토콜은 펄스 거리 인코딩(pulse idstancce encoding) 방식을 사용한다.

위와 같이 펄스 거리로 0과 1을 표현한다.

1은 0의 3배의 LOW 값을 전송한다.

데이터 시작 표시 신호

데이터의 시작 표시하는 신호는 두 가지로 일반 데이터, 반복 데이터로 나뉘어져 있다.

9ms의 HIGH 값을 동일하나, LOW 값이 각각 4.5ms, 2.25ms로 다르다.

NEC 프로토콜을 사용한 리모컨의 데이터 신호

리드 코드 → 커스텀 코드 → 반전 커스텀 코드 → 데이터 코드 → 반전 데이터 코드

커스텀 코드는 특정 회사임을 알려준다.

0과 1의 길이는 다르지만, 반전된 신호를 보내줌으로써 전체 신호의 길이는 일정하다.

반복된 신호의 경우 리드 코드의 반복 데이터가 110ms으로 전송된다.

29.3) 적외선 데이터 디코딩

NEC 프로토콜의 경우, 시간 간격을 통하여 데이터를 구분할 수 있다. 따라서 시간 간격(clock, TCNT reg)을 이용하여 디코딩할 수 있다.

다음의 코드는 16 MHz를 1024 분주비로 사용한 것이다. 따라서 15625 Hz로 작동하고 1 clock 당 64us의 시간이 걸린다. 데이터에 따라 TCNT 값이 달라지도록 코딩했고, TCNT 값이 저장된 변수 time에 따라 데이터를 판단하도록 했다.

0과 1을 나누는 조건으로 (26 초과, 나머지)를 사용했다. 논리 0과 1이 각각 18 클록, 35 클록이므로 중간값을 기준으로 작으면 0으로, 크면 1로 처리했다.

 

'MCU > ATmega128a' 카테고리의 다른 글

13. 8 bit 타이머  (0) 2022.06.02
14. 16 bit 타이머/카운터  (0) 2022.06.02

+ Recent posts