일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- FND
- Linked List
- BASYS3
- vivado
- java
- KEYPAD
- DHT11
- pwm
- stop watch
- LED
- Pspice
- gpio
- dataflow modeling
- ring counter
- Recursion
- behavioral modeling
- Algorithm
- i2c 통신
- Edge Detector
- structural modeling
- soc 설계
- test bench
- hc-sr04
- verilog
- uart 통신
- prescaling
- ATMEGA128A
- D Flip Flop
- half adder
- atmega 128a
- Today
- Total
거북이처럼 천천히
Timer / Counter - 기초 (2) 본문
서론
Timer / Counter - 기초 (1) 에서는 Timer와 Counter에 대한 기본과 PWM, Duty ratio 등에 대해서 살펴보았으며, 이번 글에서는 ATmeaga 128에 대한 Timer / Counter에 대해서 글을 쓰도록 하겠다.
ATmega 128는 2개의 8Bit Timer/Counter와 2개의 16Bit Timer/Counter를 갖고 있다. 이에 대한 특징과 클럭신호를 나누어 카운터의 동작 속도를 늦추는 역활을 수행하는 Prescaler(분주비)에 대해서 자세히 살펴보도록 보자.
본론
ATmega 128은 4개의 Timer/Counter를 갖고 있기 때문에 이를 Timer/Counter 0 ~ 3 까지 인덱스를 붙을 수 있다.
1) 8Bit Timer/Counter
Timer/Counter 0, 2 :
8Bit Timer/Counter 이며, counter는 0 ~ 255까지 256를 카운트할 수 있다.
10bit Prescaler가 내장되어 있다.
Overflow, Compare match interrupt source를 제공한다.
Q) Prescaler(분주비)는 무엇인가?
ATmega 128은 16MHz에서 동작하기 때문에 ATmeaga 128의 주파수와 주기는 다음과 같다.
- ATmega 128의 주파수 (frequency)는 16MHz이다.
즉, 1초에 16,000,000번 진동함을 의미한다. - ATmega 128의 클럭 주기 (cycle)은 1/16MHz = 62.5ns이다.
만약, 분주비를 설정하지 않고, 8bit counter을 이용한다면 8bit counter는 0 ~ 255까지 총 256번밖에 카운트를 못하기 때문에 8bit counter을 통해 측정할 수 있는 62.5ns * 256 = 16μs 밖에 측정할 수 없다. 이는 많은 어플리케이션에서 충분하지 않을 수 있다.
따라서 Prescaler(분주비)를 통해 주기를 갖는 클럭 신호에서 여러 주기를 묶어서 하나의 주기로 생각하여 Counter의 카운트 속도를 늦출 수 있으며, 이를 통해 8bit timer/counter를 통해 16μs보다 더 긴 시간을 측정할 수 있다.
예를 들어 16MHz 주파수를 갖는 클럭 신호를 64분주 시킬 경우, 1초에 16,000,000번 진동하던 신호가 64개의 주기를 하나로 묶음으로서 1초에 16,000,000/64 = 250000번 진동하게 되며, 이를 주파수로 표현하면 250kHz로 진동하게 된다.
따라서 16MHz 주파수를 갖는 클럭 신호를 64분주 시키게 되면 250kHz 주파수를 갖는 클럭 신호로 변환이 되며, 8bit timer / counter를 통해 측정할 수 있는 시간은 위와 같이 1.024ms를 측정할 수 있다.
Q) Timer/Counter 0과 Timer/Counter 2의 차이점은 무엇인가?
A) Timer/Counter 0과 Timer/Counter 2의 차이점은 설정 가능한 분주비에 차이가 있다.
Timer/Counter 0의 경우는 분주비의 값으로 1, 8, 32, 64, 128, 256, 1024 이 설정 가능하다.
Timer/Counter 2의 경우는 분주비의 값으로 1, 8, 64, 256, 1024 이 설정 가능하다.
2) 16Bit Timer/Counter
Timer/Counter 1, 3:
Interrupt 기능이 있다.
Overflow Interrupt : Counter의 값이 Max을 넘었어 Overflow가 되는 경우 발생
Output compare Interrupt : Counter의 값이 Output Compare Register의 값과 같게 되는 순간 발생
Input capture Interrput : 외부로부터 트리거 신호에 의해서 카운터의 초기값을 입력 갭쳐
16Bit Timer/Counter는 65,536를 카운트 할 수 있다.
PWM (Pulse Width Modulation) 출력 가능하다.
결론
ATmega 128에 내장된 8Bit Timer/Counter와 16Bit Timer/Counter와 Prescaler에 대해서 살펴보았다. 특히 Prescaler는 클럭 신호을 분주비로 나누어 새로운 클럭 신호로 생성하기 때문에 (= 클럭신호에서 여러 주기를 하나로 묶어 하나의 주기로 생각하기 때문에) Timer/Counter의 컨트롤에 중요한 역활을 수행하기 때문에 확실히 이해하고 넘어가자.
'Embedded Programming (AVR) > Atmega 128A (실습)' 카테고리의 다른 글
8bit Timer / counter - Normal Mode (1) | 2024.06.03 |
---|---|
8bit Timer / counter - CTC Mode (1) | 2024.06.02 |
Timer / Counter - 기초 (1) (0) | 2024.06.01 |
FND (Flexible Numeric Display) - 기초 (2) (0) | 2024.05.31 |
FND (Flexible Numeric Display) - 기초 (1) (0) | 2024.05.30 |