질문게시판 > 답변4 : atmega2560에 관하여 질문드립니다.(타이머 모드)

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

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


BASIC4MCU | 질문게시판 | 답변4 : atmega2560에 관하여 질문드립니다.(타이머 모드)

페이지 정보

작성자 master 작성일2018-02-07 23:47 조회735회 댓글1건

본문

	

 

interrupt[EXT_INT2]void ext_int2_isr(void){ //ELEV Channel
  if(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8EICRA=0b11100000; }
  elsecnt_falling=TCNT1L|(long)TCNT1H<<8cnt_elev=(40000-cnt_rising+cnt_falling)%40000EICRA=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=0b10100010TCCR1B=0b00011001ICR1H=39999>>8ICR1L=39999&0xFF;
  TCCR3A=0b10100010TCCR3B=0b00011001ICR3H=39999>>8ICR3L=39999&0xFF;
타이머는 PWM 출력을 하기 위한 설정인가요?

 

타이머1은 측정을 위한 용도 같은데 

(PWM 모드가 아닌) 일반 모드로 설정하고

조종기의 첫 신호에서 clear 시켜주면 될 것 같습니다.

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 735

희안님의 댓글

희안 작성일

감사합니다. 답변자분 덕분에 많은 공부가 되었습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기