반응형

타이머/카운터는 시간측정 또는 이벤트를 카운트 하는 기능입니다.
타이머는 내부 시스템 클럭(크리스탈)을 카운트해서 일정 시간을 측정하고, 카운터는 외부 이벤트를 카운트 할 수 있습니다.
타이머/카운터 08 비트 타이머/카운터로써 10 비트 프리스케일러 기능이 있습니다.

타이머/카운터 0 에 관계된 레지스터는

TCCR0(Timer/Counter Control Register) - $33 ($53)
TCNT0(Timer/CouNTer register) - #32 ($52)
TIMSK(Timer/Counter Interrupt Mask Register) - $39 ($59)
OCR0(Output Compare Register) - $31 ($51)

TCCR0 레지스터는 아래 그림과 같습니다. 하위 세 비트는 클럭 선택 비트들입니다. 이번 강좌에서는 클럭 선택 비트의 기능을 설명합니다.




아래 테이블은 클럭 선택(CS02:0) 비트를 설명한 것입니다.
세 비트가 000 일 경우는 클럭 소스를 선택하지 않은 상태로 타이머/카운터가 정지됩니다.
001 - 101 의 경우는 프리스케일러를 설정하는 값을 나타냅니다.
110, 111 의 경우는 T0 핀으로 입력되는 신호를 클럭 소스로 선택하는 값을 나타냅니다. 이경우는 카운터로 설정된 것으로 110 의 경우는 T0 (PB0)핀으로 입력되는 신호가 하강(falling edge) 할 때 카운트하고, 111 의 경우는 신호가 상승(rising edge) 할 때 카운트합니다.



프리스케일러란 시스템 클럭을 분주해서 타이머/카운터 클럭 소스로 입력되는 것을 말합니다.
아래 그림 1 은 프리스케일링 기능이 없이 시스템 클럭이 타이머/카운터 클럭 소스로 사용되는 경우이고,
그림 2 는 시스템 클럭을 8 분주해서 타이머/카운터 클럭 소스로 사용하는 경우입니다.
타이머/카운터는 4 가지 프리스케일러를 사용할 수 있습니다.



TCNT0 레지스터
는 아래 그림과 같이 8 비트 레지스터입니다.
타이머/카운터가 동작하면 TCNT0 레지스터가 업 카운터로 동작하고 FF 에서 00 으로 될 때(오버플로우) 인터럽트 요청을 합니다.




TIFR 레지스터타이머/카운터에 관한 인터럽트가 발생하면 인터럽트 요청을 하는 플래그들이 있는 레지스터 입니다.
TOV0 비트타이머/카운터 0 오버플로우 플래그입니다.
OCF0 비트출력 비교 플래그입니다.
위 두 비트는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하면 0 으로 클리어 되고, 플래그에 1 을 쓰면 0 으로 클리어 됩니다.




TIMSK 레지스터
타이머/카운터 인터럽트를 가능/마스크 하는 레지스터입니다.
TOIE0 비트타이머/카운터 0 오버플로우 인터럽트를 가능(1)/마스크(0) 하는 비트입니다.
OCIE0 비트타이머/카운터 0 출력 비교 매치 인터럽트를 가능(1)/마스크(0) 하는 비트입니다.
상태 레지스터(SREG) 의 I-비트가 1 로 셋되어 있고, 위의 인에이블 비트가 1 로 셋되어 있어야 인터럽트가 발생할 수 있습니다.




OCR0 레지스터
는 아래 그림과 같이 8 비트 레지스터입니다.
이 레지스터는 계속해서 카운터 레지스터(TCNT0) 와 비교를 해서 일치(Match)하면 출력 비교 매치 인터럽트를 발생시키거나, OC0(PB0) 핀에 파형을 발생시킵니다.


반응형

+ Recent posts