BASIC4MCU | 질문게시판 | 답변4 : atmega2560에 관하여 질문드립니다.(타이머 모드)
페이지 정보
작성자 master 작성일2018-02-07 23:47 조회5,660회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=193
본문
interrupt[EXT_INT2]void ext_int2_isr(void){ //ELEV Channelif(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8; EICRA=0b11100000; }else{ cnt_falling=TCNT1L|(long)TCNT1H<<8; cnt_elev=(40000-cnt_rising+cnt_falling)%40000; EICRA=0b11110000; }}TCNT1은 16비트 레지스터니변수나 형변환을 long 타입으로 할 필요는 없겠죠unsigned int 타입으로 하면 됩니다.//printf("ELEV:%6ld / AILE:%6ld / THRO:%6ld / RUDD:%6ld\n",cnt_elev,cnt_aile,cnt_thro,cnt_rudd);%6ld 대신 %5u를 사용하면 되겠습니다.int 연산과 long 연산은 시간 차이가 큽니다.cnt_elev=(40000-cnt_rising+cnt_falling)%40000;% 연산은 / 연산과 마찬가지로 정수 연산중에서 시간이 가장 많이 걸리는 연산입니다.현재 사용하는 펄스의 최소폭은 600us 정도인데연산 시간이 600us 이상이 된다면 짧은 펄스의 신호를 받지 못하게 되는 것과 같습니다.//TCCR1A=0b10100010; TCCR1B=0b00011001; ICR1H=39999>>8; ICR1L=39999&0xFF;TCCR3A=0b10100010; TCCR3B=0b00011001; ICR3H=39999>>8; ICR3L=39999&0xFF;타이머는 PWM 출력을 하기 위한 설정인가요?
타이머1은 측정을 위한 용도 같은데
(PWM 모드가 아닌) 일반 모드로 설정하고
조종기의 첫 신호에서 clear 시켜주면 될 것 같습니다.
댓글 1
조회수 5,660희안님의 댓글
희안 작성일감사합니다. 답변자분 덕분에 많은 공부가 되었습니다.