센서 > IR 리모콘

TODAY47 TOTAL6,610,332
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 센서 | 적외선리모콘 | IR 리모콘

페이지 정보

작성자 키트 작성일2017-08-29 16:57 조회2,598회 댓글0건

본문

 

IR 리모콘 2093095301_ar2wEjqt_spc.gif낙서장 2093095301_ar2wEjqt_spc.gif

2007/06/12 12:01

 

복사 src http://blog.naver.com/june926i/38644433

첨부파일 (1)

IR리모콘 프로토콜

먼저 송신 하는 적외선 LED는 38Khz 주파수에(반송파) 데이터를 추가해 만든다.

 


2093095301_dutYmIW9_irsend-june926i.jpg3Ftype3Dw3

 

//----------------------------------------------------------------------------//

위의 리모콘 IR송신 데이터는 수신부(리시버IC) 에서 데이터로 전환 된다.

이런 방식의 데이터는 많은 자연 노이즈에 노출되 있기 때문에 이를 방지할수 있는 데이터 전송방식으로 데이터를 보내고 받는다.

   2093095301_rF9mdaiR_head-june926i.jpg3Ftype3Dw3

이런식으로 데이터를 보내고 받는다.

head(Leader code)의 low 부분과 high구간의 시간은 각각의 프로토콜 종류별로 다르다.

예를 들어 low =9ms / high=4.8ms 또는 8/3.5 식으로 제조사 별로 특징이 있는것 같다.

 

bit도 모두 다른데:

bit 1은 low 약 560us/high약 1.25 ms,

bit 0은 low 약 560us/high약 560us 를 많이 사용 하는 것같다.

 

IR의 내부에 이런 정보들이 오간다.

 

데이터 크기 및 종류: (NEC 포맷예)

데이터 종류는 헤더 ,제조사코드,기기 코드가 있다.

헤더 코드 : 1개의 주기 값

제조사 코드 :  16주기 값

기기 코드 :  16주기값(8주기 +  역상 8주기) 으로 만들어 진다.

 

주) IR 데이터는 연속해서 계속 보낼수 없고 일정시간 정지했다 보내야 한다.(알지~)

 

예)

2093095301_oc10eqnJ_frame-june926i.jpg3Ftype3Dw3
 
2008.9:
주) 위 파형은 IR 송신부의 파형이다 . 만약 이를 수신부인 IR receiver 에서 측정 한다면 위의 신호는 반대로 출력 할것이다.
 
2008.11: 
NEC Format 을 많이 사용 한다. 구조는 Leader + Custom(16) +data(8) + (invert)data(8) + stop(1) bit 로 구성 된다. 데이터 검색하면 많이 찾을 수 있다.

 

http://blog.naver.com/PostView.nhn?blogId=june926i&logNo=38644433

 

 

 

 

#include
#include
//
#define ir_ready  0
#define ir_lead   1
#define ir_data   2
//
unsigned char ir_rx_data[4], ir_state=ir_ready, ir_timer_cnt=0, ir_bit_cnt=0;
//
unsigned char ir_rx_temp=0;
//
ISR(TIMER0_COMP_vect){ ir_timer_cnt++; } // 100us 주기
//
ISR(INT0_vect){
    cli();
    switch(ir_state){
        case ir_ready: ir_state=ir_lead; break;
        case ir_lead :
            if((ir_timer_cnt>=85)&&(ir_timer_cnt<95))
            ir_state=ir_data;
            ir_bit_cnt=ir_rx_temp=0;
            break;
        case ir_data :
            if     ((ir_timer_cnt>= 9)&&(ir_timer_cnt<13)){}
            else if((ir_timer_cnt>=19)&&(ir_timer_cnt<25)){ ir_rx_temp=ir_rx_temp|0x80; }
            else                                          { ir_state=ir_lead; break; }

            if((++ir_bit_cnt%8)==0){
                ir_rx_data[(ir_bit_cnt/8)-1]=ir_rx_temp; ir_rx_temp=0;
                if(ir_bit_cnt>=32){
                    if     (ir_rx_data[2]==0x12)PORTB=0x06; // F
                    else if(ir_rx_data[2]==0x10)PORTB=0x09; // B
                    else if(ir_rx_data[2]==0x0B)PORTB=0x04; // L
                    else if(ir_rx_data[2]==0x07)PORTB=0x02; // R
                    else if(ir_rx_data[2]==0x1A)PORTB=0x00; // STOP
                    ir_state=ir_ready; ir_bit_cnt=0;
                }
            }
            ir_rx_temp>>=1;
            break;
    }
    ir_timer_cnt=0;
    TCNT0=0;
    sei();
}
//
int main(void){
    DDRB=0xFF;  PORTB=0xFF;
    EICRA=0xAA; EICRB=0xAA; EIMSK=1; EIFR=0xFF; //falling edge int0
    TCCR0=0x0A; OCR0=199;   TIMSK=2  sei();     //16000000/ 8/(1+199)=10000Hz=100us
    while(1){}
}

 

검증된 코드는 아니지만 참고하세요 

댓글 0

조회수 2,598

등록된 댓글이 없습니다.

센서HOME > 센서 > 적외선리모콘 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기