Timer0 (8bit)짜리로 1mesc 만들기를 숙제로 받았다
그러고 보니 회사에서 처음 받는 숙제인듯?
아래의 코드를 참고하고, 도표를 참고하자면,
CPU가 16Mhz 일 경우,
프리스케일러를 설정함에 따라, timer 1번 발생시 시간은 TICK/msec를 참조하면 된다.
아무튼, cpu 클럭과 프리스케일러에 따라서 딱 떨어지는 시간이 있을수도 있고 없을수도 있는데
목표로 한 값이 1msec 이므로 곱해서 정수로 떨어지는 125 / 250 / 500 / 2000 회가 있지만
타이머가 8bit이므로 255를 초과할수 없고, 그로 인해 적당한 값은 1/128 프리스케일러를 설정하는 것이다.
그리고 타이머가 125번 오면 overflow 가 발생해야 하므로
TCNT0 = 255 - 125; 로 설정을 해주면 125 번의 tick 이후에 FF가 되어 타이머 인터럽트가 발생하게 된다.
그러고 보니 회사에서 처음 받는 숙제인듯?
아래의 코드를 참고하고, 도표를 참고하자면,
TCCR0 = 0x05; // Prescaler 1/128 TCNT0 = 0x82; // 125 clock tick = 1msec TIMSK = 0x01; // 오버플로우 인터럽트 허용 sei(); // 인터럽트 허용
CPU가 16Mhz 일 경우,
프리스케일러를 설정함에 따라, timer 1번 발생시 시간은 TICK/msec를 참조하면 된다.
아무튼, cpu 클럭과 프리스케일러에 따라서 딱 떨어지는 시간이 있을수도 있고 없을수도 있는데
목표로 한 값이 1msec 이므로 곱해서 정수로 떨어지는 125 / 250 / 500 / 2000 회가 있지만
타이머가 8bit이므로 255를 초과할수 없고, 그로 인해 적당한 값은 1/128 프리스케일러를 설정하는 것이다.
그리고 타이머가 125번 오면 overflow 가 발생해야 하므로
TCNT0 = 255 - 125; 로 설정을 해주면 125 번의 tick 이후에 FF가 되어 타이머 인터럽트가 발생하게 된다.
2010/01/07 - [embeded/ATmega/ATtiny (AVR)] - atmega128 Timer 사용하기
'embeded > AVR (ATmega,ATtiny)' 카테고리의 다른 글
AVR Studio 5 (4) | 2011.11.12 |
---|---|
nop (2) | 2011.10.31 |
AVR Studio 에서 ELF 생성시 에러발생 (0) | 2011.07.27 |
IAR compiler 컴파일시 이미지 크기 보기 (3) | 2011.07.25 |
PINA_Bit0 누구냐 넌! (IAR) (0) | 2011.03.31 |