이번에는 타이머/카운터의 PWM중에서 Fast PWM 모드에 대한 설명을 하도록 하겠다. 위의 그림이 Fast PWM의 동작 원리를 설명하는 것이다. TCNT의 값은 BOTTOM에서 TOP까지 일정하게 증가된다. TCNT값이 증가되는 도중에 OCR값과 같아지면 OC가 0이 된다. TCNT의 값이 계속 증가하다가 TOP값이 되면 OC는 1이 되는 것이다. 결국 BOTTOM에서 TOP까지의 시간이 한 클럭이 되는 것이다. 다음에 설명할 Phase Correct PWM 모드는 Fast PWM 모드에 비해서 클럭 주기가 2배가 된다. Fast PWM 모드에는 어떤식으로 동작되는지 역시 실험을 통해서 알아보도록 하겠다.enum pwm_out_mode { OC_DISCONNECT, OC_TOGGLE, OC_NON_..
이번 글에서는 타이머/카운터의 PWM 모드 중에서 CTC(Clear Timer on Compare Match)모드에 대해서 설명하도록 하겠다. 위의 그림이 CTC 모드의 동작을 설명한 것이다. 카운터로 클럭이 들어올때마다 TCNT값이 1씩 증가한다. TCNT값이 OCR_A와 값이 같아지게 되면 TCNT값이 BOTTOM값으로 초기화된다. 즉 0이 된다는 뜻이다. 그리고 다시 OCR_A와 값이 같아질때까지 1씩 증가되는 동작을 반복한다. TCNT값이 OCR_A값과 같아 질때마다 OC핀의 출력이 토글된다. 그러므로 OCR_A 값을 조절하면 OC핀의 주기를 변경할 수 있게 된다. 위의 그림에서 세번째 구간의 주기가 다른 구간에 비해서 짧아진것을 볼 수 있다. 이때 OCR_A값을 보면 다른 구간에 비해서 작은 값..
타이머/카운터에 있는 TCNT값을 읽거나, Output Compare Register를 설정하여 TIFR의 플래그를 polling 하여 LED를 제어하는 방법을 설명하였다. 끝부분에는 타이머 인터럽트를 사용하는 방법에 대해서도 설명하였다. 앞에서 설명한 글에서는 LED를 점멸하기 위해서 직접 CPU가 포트핀을 제어하였다. 그러나 AVR의 타이머/카운터 블럭에는 CPU의 개입없이 자체로 포트핀을 제어하는 기능이 들어있다. 이 기능을 이용하면 PWM(Pulse Width Modulation)으로도 활용할 수 있게 된다. 이어지는 몇개의 글을 통하여 AVR의 타이머/카운터 블럭에서 제공하는 PWM 모드에 대하여 설명하도록 하겠다. 위의 그림이 타이머/카운터에서 PWM 기능을 사용할 수 있는 원리에 대한 블럭도..