atmega 328 의 경우 8bit 2 개 16bit 1개의 카운터를 가진다. 이 카운터에 대해 공부해보자
카운터 클럭 다이아그램
카운터/타이머의 인터럽트
간단하게 카운터/ 타이머는 클럭의 숫자를 세는 일은 한다. 아두이노는 이러한 카운터/타이머를 이용해서 pwm 을 생성하기도 하고 , 우리는 이를 이용해서 다양한 기능을 구현 할 수 도 있다.
위의 다이아 그램을 보면 clk(Tn) 클럭이 들어가는 것을 알 수 있다. 이렇게 들어온 클럭을 TCNTn 에서 카운트 한다 .( 8bit 인경우 0 ~ 255 를 왔다리 갔다리 한다. )
아두이노는 2가지 종류의 인터럽트를 사용해서 카운터/타이머를 사용하는데
첫번째는 Timer/Counter overflow인터럽트 이다.
: TCNTn 에 계속 클럭수를 카운트 하다보면 결국 레지스터가 가득차는데(255) 이때 timeroverflow 인터럽트가 발생하고 우리는 이를 이용해서 여러가지 기능을 구현할 수 있다.
2번재는 Timer/Counter compare match 인터럽트 이다.
타이머 1개당 OCRnA,OCRnB 2개의 레지스터가 존재하는데 아두이노는 이 레지스터의 값과 TCNTn 의 값을 비교해서 인터럽트를 발생 시키는데 이를 Timer/Counter compare match 인터럽트라고 한다.
카운터/타이머의 레지스터
timer 0 의 레지스터를 보도록하자 (다른 카운터 레지스터 사용법은 비슷하기 때문에 datasheet 참고바람)
COMOA(0,1) : 카운터 모드에 따른 출력 파형을 결정한다.
WGM0(2~0) : 카운터 모드를 결정 (모드에 대한 자세한 설명은 뒤에서 하겠다.)
CS0(2~0) : 분주비 설정
FOC0A,B : non PWM 모드에서 동작하며 , 1로 설정하는 즉시 강제로 OCn 단자에 출력비교 매치가 된것 과 같은 출력을 내보낸다. 특수한 상황이 아니면 0 이라고 생각하면 된다.
클럭 카운트 된 값을 기록하는 레지스터이다.
8bit 임으로 1~ 255의 값을 가진다.
Timer/Counter compare match 인터럽트를 위해서 사용되는 레지스터로
위의 TCNTO 의 값이 OCR0x 레지스터의 값과 같으면 인터럽트가 발생한다 .
TOIE0 : Timer/Counter overflow 인터럽트가 발생 가능하도록 한다.
OCIE0x : x Timer/Counter compare match 인터럽트가 발생 가능하도록 한다.
OCF0x : Timer/Counter compare match 인터럽트가 발생하면 1로 set , 인터럽트가 처리되기 시작하면 다시 0 으로 돌아간다.
TOV0: Timer/Counter overflow 가 발생하면 1 로 set ,인터럽트가 처리되기 시작하면 다시 0 으로 돌아간다.
'공부,일 > atmega328P' 카테고리의 다른 글
atmega 328p PWM & timer counter (4) 실습 (Normal mode) (0) | 2021.07.27 |
---|---|
atmega 328p PWM & timer counter (3) mode (0) | 2021.07.27 |
atmega 328p PWM & timer counter (1) 분주비 , 타이머 vs 카운터 (0) | 2021.07.27 |
ISR() 분석 - 전처리문 분석 (0) | 2021.07.20 |
i/o register 0x0(0x20)메모리 주소의 의미 (기본기) (0) | 2021.07.20 |
댓글