counter 5

[마이크로프로세서] 타이머/카운터 정리

타이머/카운터 내용 정리 개요 타이머/카운터와 관련해서 정리할 내용이 많기 때문에, 이전에 하듯이 글 하단에 요약본을 만드는 것이 아닌 하나의 포스팅을 쓰기로 결정했다. 전반적인 내용과 레지스터 동작을 정리하도록 하겠다. 본문 기본 개념 타이머/카운터는 MCU 내부에서의 입력된 클럭을 계수하는 기능을 하고 있다. 즉, 클럭의 주파수를 이용해 타이머로 활용하며, 만약 8비트 카운터의 경우 카운터의 상태가 11111111에서 00000000으로 변화할 때 발생한다. 이때 시스템 내부의 클럭 주기론 만들기 어려운 것이 있는데, 이를 해결하기 위해 프리스케일러(Prescaler)를 사용한다. 즉, 고속의 클럭을 사용할 때 나타나는 한계를 해결하기 위해 클럭을 분주하여 더 느린 클럭을 생성하는 것이다. 예를 들어..

[마이크로프로세서] 타이머/카운터 및 예제 (1)

본문 레지스터 이제 레지스터들을 이용하여 타이머/카운터를 제어하는 시간을 가져보도록 하자. 실습을 하기 전, 관련 레지스터들에 대해 알아보자. 참고로 8비트 타이머/카운터를 제어할 예정이므로 타이머/카운터0를 기준으로 설명하도록 하겠다. TCCR0 레지스터 TCCRn 레지스터는 동작 모드, 프리스케일러의 분주비를 설정하는 레지스터다. 일반적으로 동작 모드는 WGM01과 WGM00의 값으로 결정된다. 즉, 2개의 비트를 사용하므로 총 4가지 모드가 있다는 것을 알 수 있다. 여기서 설정한 모드에 따라 비교 일치 출력 모드의 값의 의미, 즉 OCn 핀의 동작이 바뀐다. 예를 들어 타이머/카운터0에서 일반 모드 혹은 CTC 모드에서 (COM01, COM00) = (1,1)이면 비교 일치 시 OC0 출력을 1로..

[마이크로프로세서] 타이머/카운터 (3)

PWM(Pulse Width Modulation) 모드 (1) - Fast PWM PWM(펄스폭 변조) 모드는 펄스의 폭을 변경하여, 출력 전압을 조절하는 변경 방식이다. 즉, 신호의 듀티 사이클(Duty Cycle)(한 주기 내에 신호가 높은 상태로 있는 시간의 비율)을 변경하여 다양항 출력을 생성하는 방식이다. 쉽게 생각해서 디지털 신호를 아날로그 신호와 유사한 효과를 내게 한다는 것이다. 예를 들어, 5V와 0V로 구분된 디지털 출력을 ON/OFF 시간을 조절하면 0~5V까지의 아날로그 출력을 내는 것과 유사한 동작을 한다. 이를 CTC 모드로 제어하려면, 매번 OCRn 값을 바꿔야 한다는 번거로움이 있다는 점도 확인해 두자. Fast PWM 모드는 비대칭형 톱니파를 이용하여 타이머/카운터가 BOT..

[마이크로프로세서] 타이머/카운터 (2)

본문 기본 개념 이번 시간에는 타이머/카운터의 모드에 대해 알아보는 시간을 가져보자. 위의 그림은 타이머/카운터의 블록 다이어그램을 간소하게 표현한 것이다. 해당 회로도를 보고, 간략하게 ATmega 128이 어떻게 타이머/카운터를 제어하는지 이해하면 좋을 것 같다. 외부 클럭을 입력으로 받는 타이머/카운터 0과 내부 클럭을 입력으로 받는 타이머/카운터 2는 몇 가지 차이점이 있다. 타이머/카운터 0에는 T/C Oscillator라는 자체 발진 회로가 있어, 외부 클럭이 불안정하거나 사용할 수 없을 경우에도 독립적으로 타이밍을 생성할 수 있다. 이는 타이머/카운터 0이 외부 클럭 소스에 완전히 의존하지 않도록 해준다. 또한, 외부 클럭에 프리스케일러가 달려 있어 타이밍을 조절할 수 있는 유연성을 제공한다..

[마이크로프로세서] 타이머/카운터 (1)

타이머/카운터 개요 타이머/카운터(Timer/Counter)는 시간 관련 작업을 처리하고, 일정 시간 간격을 측정하거나, 특정 이벤트의 발생 횟수를 세는 데 사용된다. 이때 클럭의 주파수를 알면 클럭 주기를 알 수 있으므로, 타이머로 활용할 수 있다. 예를 들어, 3bit 타이머/카운터의 경우, 카운터의 상태가 111에서 000으로 변화할 때 오버플로우 인터럽트 플래그가 발생한다. 이때, MCU 내부 클럭을 사용하는 것을 타이머 모드, 외부 클럭 또는 외부 이벤트를 사용하는 것을 카운터 모드라고 한다. 이러한 타이머/카운터는 특정 작업 간의 시간 지연을 생성하고, 정확한 타이밍을 제공한다. 이전에 FND 혹은 LED를 제어할 때 주었던 delay는, 그 함수가 실행되는 시점에 모든 작업이 멈춘다. 이로 ..