안녕하세요. 취업한 공대누나입니다.
오늘은 TC에 대한 공부를 해보려고 합니다.
인터넷을 찾아보니 대부분 Atmega128의 TC에 대한 내용이 잘 정리되어있었습니다.
저는 제가 사용하는 MCU를 바탕으로 한 번 정리해보려고 합니다.
1. TC란? 기본개념!
Timer Counter의 약자로 타이머 카운터를 사용하는 이유는 펄스를 계수하기 위해서입니다.
임베디드 시스템에서 시간을 재야 할 일은 생각보다 굉장히 많은데요.
특히 대학생 때는 1초 세기 이런 것들을 타이머 카운터를 이용해서 했던 기억이 납니다.
우선 가장 기본적인 개념은 클럭을 센다고 생각해주시면 됩니다.
예를 들어서 1MHz의 클럭이라고 해봅시다.
1초를 세기 위해서는 몇 번을 카운트하면 될까요?
Count값이 100000이면 됩니다.
그러면 Count 값이 10000이 될 경우 우리는 1초가 되었구나 라는 것을 알 수 있습니다.
Count값이 10000이 되었을 경우 인터럽트를 발생시켜 우리가 원하는 동작을 수행하게도 할 수 있습니다.
2. MCU Datasheet로 주요 내용 들여다보기
SAM4S16C Datasheet |
제가 사용하는 MCU의 Datasheet입니다.
위의 MCU는 16비트 카운터를 가지고 있습니다. 그리고 카운터가 2의 16제곱 -1에 도달 했을 경우 다시 0으로 된다고 되어있습니다. 이 때 오버플로우가 발생하여 TC_SR의 COVFS 비트가 set(1)이 됩니다.
SAM4S16C Datasheet |
클럭 또한 우리가 원하는 것으로 선택할 수 있습니다. 외부클럭을 사용할 수도, 내부 클럭을 사용할 수도 있습니다.
분주비 또한 자유롭게 선택할 수 있는 것을 볼 수 있습니다.
TC_CMR의 TCCLKS비트를 통해서 설정할 수 있습니다.
SAM4S16C Datasheet |
위의 그림과 같이 Value 값으로 Clock selection을 할 수 있습니다.
아래 작게 보시면 rising edge를 셀 것인지 falling edge를 셀 것인지도 선택할 수 있는 것이 나와있습니다.
SAM4S16C Datasheet |
WAVESEL의 값에 따라 여러 가지 파형이 있지만 대표적으로 두개를 보도록 하겠습니다.
WAVSEL이 00일 때는 0부터 무조건 FFFF까지 세는 것입니다. 그리고 그림을 보시면 아시다시피 그다음에는 0이 됩니다.
WAVESEL이 10일 때 TC_CV값은 0부터 RC까지 증가됩니다. 이 때 카운터 값이 RC에 다다르면 자동으로 0으로 됩니다.
그리고 다시 자동으로 RC까지 세는 구조를 반복하고 있습니다.
TIOB와 TIOA를 파형을 찍어보면 아래와 같이 나타나는 것 같습니다.
MCU 마다 당연히 사용하는 방법은 조금씩 다른데요. 큰 개념 자체는 동일하고 비슷비슷한 내용입니다.
대표적인 내용들을 포스팅에 담아보았습니다.
다음에는 펌웨어의 내용도 자세히 다뤄보도록 하겠습니다.
'전자 공학 > 기타' 카테고리의 다른 글
펠티어 소자란(열전 소자)? (1) | 2021.01.20 |
---|---|
RoHS란? (0) | 2021.01.18 |
CCL(Critical Component List)이란? (0) | 2021.01.12 |
펌웨어란(Firmware)? (2) | 2021.01.09 |
ADC - 펌웨어 (0) | 2021.01.08 |