본문 바로가기
공부,일/atmega328P

atmega 328p PWM & timer counter (3) mode

by fromnothing1 2021. 7. 27.

각가의 모드에 대한 개념을 알려주는 포스팅이다. 

어떠한 레지스터가 set 되고  clear 되는지 등은 데이타시트를 참고하기 바란다. 

각 모드별 인터럽트 발생 주파수 또한 데이타 시트를 보고 알아서 하기 바란다.

 

4가지 모드가 존재 

 

1. Normal

2. CTC

3. Fast PWM 

4. PWM, phase correct 

 

1. Normal

카운터가 항상 상향 카운터로만 존재하고, 카운터가 도주애에 클리어 되는 일이 없다. 

때문에 overflow 인터럽트만 존재 할 수 있으며 , 초기의  TCNTn 값을 0 이 아닌 다른 값으로 초기화 할 수있다. 

 

즉 overflow 인터럽트가 발생했을때 인터럽트에서 TCNTn 값을 조절 하여서 인터럽트 발생 시간을 조절 할 수 있다. 

다음 포스팅에서 가장 간단한 Normal mode 를 다뤄 보면서  어떻게 인터럽트를 다루는지 알아보자 

 

2. Clear Timer on Compare Match (CTC) Mode

그림과 같이 TCNTn 값이 증가하다가 OCRx  값이 되면 0 으로 초기화 되면서 compare 인터럽트가 발생한다.

즉 TCNTn 안의 값은 0~OCRx  사이의 값을 반복하게 되는것이다. 

 

주의할 점은 Normal mode 와 CTC mode 는 이중 버퍼링 기능이 없어서  만약 카운트중 OCRx 의 값이  TCNTn  의 값보다 낮게 set 된다면 compare 인터럽트는 발생하지 않고 TCNTn 값은 255 까지 증가하 overflow 인터럽트가 발생하면서 0 으로 다시 set 될것이다. 

 

3. Fast PWM 

이름 그대로 높은 주파수의  pwm  출력 파형을 발생하는 데 유용하다. 

 

그림을 보면 알수 있다 싶이 이 모드에서는 TCNTn 값이 0~255 까지 무조건 증가한다. 이때 OCRx  값과 TCNTn 값이 같으면 compare 인터럽트가 발생하고 OCnx 출력 값이 0이 된다. 

 

인터럽트가 발생하고 출력값이 0으로 set 되었지만 TCNTn안의 카운트 값은 변하지 않고 그대로 증가해서 255->0 으로 변할때 overflow 인터럽트가 발생하며 OCnx 출력 값이 다시 1 이 된다. 

 

4. PWM, phase correct 

이모드에서 TCNTn 값은 그림과 같이 상승후 하강을 반복 한다. 

상승중 OCRx  값과 동일하게 된다면, OCnx 출력을 1로 set 하고 하강중 OCRx  값과 동일하다면 OCnx  출력을 0으로 set 한다. 

 

특이하게도 TCNTn 값이 0 즉 BOTTOM 일때 TOVn 인터럽트 플레그가 set 되면서 overflow 인터럽트가 발생한다. (하지만 아무일도 안함) 

 

- 내 생각 이지만  이를 통해서 overflow 인터럽트는 TCNTn 레지스터값이 0 으로 set 되면 발생하는 인터럽트인 것을 알 수 있다 .

 

 

 

댓글