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

아트메가128의 8 bit 타이머/카운터 블록의 다이어그램은 다음과 같다

13.2 오버플로 인터럽트

TCNTn(n=0, 2) REG (Timer/Counter Regitser)

8 bit 레지스터로 2^8 -1 까지 셀 수 있다. 255가 넘어가면 0으로 오버플로우 한다. *비교 일치 인터럽트의 경우, 자동으로 초기화되지 않아 ‘TCNTn =0’ 처럼 따로 초기화를 해야 한다.

비활성화 상태가 디폴트이며 TCCRn Reg의 CS0 bit를 조작하여 활성화할 수 있다.

  • TCCR reg (Timer/Counter Control Register)
    • 7번 bit 의 경우, Force Output Compare 으로 세트될 경우 , 비교 일치가 발생한 것과 동일한 효과가 파형 출력핀 OC에 출력된다

TIMSK reg (Timer/Counter Interrupt Mask Register)

0, 1, 6, 7 bit 를 조작하여 각각 0번, 2번 타이머/카운터의 Interrupt를 Enable, disable 할 수 있다.

OCIEn = Timer/Counter Output Compare Match Interrupt Enable TOIEn = Timer/Counter Overflow Interrupt Enable

TIFR(Timer/Counter Interrupt Flag Register)

그림 13-6.

OCFn = Ouput Compare Flag TOVn = Timer/Counter Overflow Flag

오버플로우, 비교 일치의 조건을 만족할 경우 해당하는 bit 가 세트되고, TIMSK의 해당 비트도 세트된 경우 인터럽트를 발생시킨다.

인터럽트 벡터 이름

main 함수 위에 ISR(”인터럽트 벡터 이름”) { 실행 내용} 식으로 사용한다.

13.3 비교 일치 인터럽트

OCRn reg (Output Compare Register)

*비교 인터럽트를 사용하기 위해서는 먼저 OCR reg 에 비교값을 설정해야 한다.

그림 13-7

비교 일치가 발생하는 경우 지정된 핀 외에도 지정된 핀을 통해 신호를 출력하는 것이 가능하다.

13.4 파형 출력

Timer/Counter 1번의 비교 일치 C와 Timer/Counter 2번의 비교 일치의 경우 동일하게 Port B 7 을 사용하는 것을 유의

TCCR0 register

bit 7의 FOC0의 경우, 쓰기 전용 비트로써 1이 세트될 경우 비교 출력이 일어난 것과 동일한 효과를 가져온다.

WGM (Waveform Generator mode) Bit

 

WGM Bit는 어떤 파형을 생성할지 결정한다

COM (Compare Match Output)

비교 일치 출력 모드를 설정한다.

WGM에 따라 달라지지만 정상 모드와 CTC 모드의 경우는 동일하다.

13.5 ASSR reg (Asynchronous Status Register)

외부 클릭에 의하여 비동기 모드로 동작하는 경우에 관련된 기능을 수행한다

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

29. 적외선 통신  (0) 2022.06.07
14. 16 bit 타이머/카운터  (0) 2022.06.02

타이머를 이용하여 1초마다 인터럽트 하는 코드

#include <avr/io.h>
#include <avr/interrupt.h>

int state = 0;

ISR(TIMER1_OVF_vect){
	TCNT1H = 0xC2;
	TCNT1L = 0x4C;
	state = !state;
}
int main(void)
{
   DDRB = 0x01;
   PORTB = 0x00;
   
   TCCR1B |= (1 << CS12) | (1 << CS10);		// 1024 분주 
   TIMSK |= (1 << TOIE1);
   
   TCNT1H = 0xC2;
   TCNT1L = 0x4C;
   
   sei();
   
    while (1)    {
    if(state) PORTB = 0x01;
	else PORTB = 0x00;
	}
	return 0;
	
}

14.1) 16비트 타이머/카운터

16 비트 타이머/카운터 구조

그림 14-1

14.2) 오버플로 인터럽트

TCNTn (n= 1,3) register

TCCR1B register

분주비 설정(TCNT reg 활성화), 입력 캡처, 파형생성 비트 등이 있다.

WGM의 경우, TCCR1A의 WGM10, WGM11까지 합쳐 4 bit 로 컨트롤한다.

CS1n (n=0, 1, 2) Bit

제목의 CS0n 은 CS1n의 오타이다

TIMSK register

2번 비트는 오버플로

3, 4 bit = A, B 비교 출력

5 bit = 입력 캡처

비교 일치 Interrupt PIN

ETIMSK register

1번 T/C 비교 출력 C 인터럽트

TIFR register

오버플로 인터럽트의 조건을 만족하면 TIFR reg의 해당 bit가 세트된다. 해당 비트가 세트된 상태에서 TIMSK의 해당 bit도 세트 되어있다면 인터럽트가 발생된다.

ETIFR register

1번 타이머/카운터 관련 인터럽트

ISR(”벡터 이름”) { 인터럽트 내용 } 으로 사용함

14.3) 비교 일치 인터럽트

OCR1x (x= A, B ,C) register

 

14.4) 파형 출력

비교 일치 인터럽트 시 파형 출력 핀

표 14-4.

TCCR1A register

TCCR1B register

WGM1n (n= 0, 1, 2, 3) 은 TCCR1A & B에 나눠져 있으며 4 bit 로 출력 파형을 결정

WGMn (n= 0, 1, 2, 3) Bit

COM1An (n= 0, 1) Bit

PWM 모드 이외의 경우에는 다음과 같이 일치 출력 모드를 결정한다

TCCR1C register

FOC1x Bit 는 일회성으로 필요할 때마다 1을 세트해야 한다. 쓰기 전용이지만 읽기를 했을 경우 0을 반환한다.

14.5) 입력 캡처

ICRn (n = 1, 3) register

14.6) 요약

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

29. 적외선 통신  (0) 2022.06.07
13. 8 bit 타이머  (0) 2022.06.02

+ Recent posts