TCCR1A = 0x00;
TCCR1B = 0x0A; // CTC top=OCR1A, Clk/8
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x03; // 1000-1=999 -> 0x3E7
OCR1AL = 0xE7; // 1kHz Timer
OCR1BH = 0x00;
OCR1BL = 0x00;
TIMSK1 = (1<<OCIE1A);
MCU는 ATMEGA128A 최대 클럭 스피드느 8MHz 입니다.
이렇게 되어있는데요 OCR1 버젼이니까 위의 공식이 대입되잖아요
저공식대로 대입을하면 8MHZ /(2*8*(1+999) 를 해서 200ms 의 주기가 나옵니다 .
그런데 실제로는 300ms 의 주기가 나옵니다;; 왜 그런 것일까요?
그런데 공식에서 2로 나누는데요 저기서 2의 값은 고정인가요??
eogh CTC Mode이야기 하시는 것 같은데..
Data sheet 123 ~ 124 Clear Timer on Compare Match (CTC) Mode를 확인 하면 될것 같아요..
8,000,000 / (2*8*(1+999)) = 500Hz
주기 T=1/f -> 1/500 = 0.002s -> 2ms 아닌가요?
이렇게 확인하는 방법도 있어요.
1. OCR1A PIN을 출력으로 설정
2. OCR1A1:0을 01로 설정
3. OCR1A PIN 오실로스코프로 찍어서 확인[출처] AVR 타이머 OCR 공식에 대하여 (당근이의 AVR 갖구 놀기) |작성자 eogh
'JA(EOGH) Q&A Carroty' 카테고리의 다른 글
공통 이미터,베이스,콜렉터 회로에관한 간단한질문 (0) | 2018.08.17 |
---|---|
메모리 부족 문제 메모리 늘리는법 질문 (0) | 2018.08.17 |
배열 크기 오류 질문 (0) | 2018.08.17 |
sprintf 함수에 대한 질문입니다. (0) | 2018.08.17 |
문자열을 배열에 넣는 방법 (0) | 2018.08.17 |