2019. 8. 3. 18:37ㆍ개발 관련 학습정리/AVR(atmega128) Register 분석
이번에 알아볼 것은,
분주 설정하기 , 타이머 모드, OC 단자 출력을 하는 방법이다.
분주 설정하기
CS00.. 02는 TCCR0 레지스터 안에 포함되어있는 비트들로, 이를 통하여 분주를 설정할 수 있다.
분주로 주기를 만들려면 몇 개의 과정이 필요하다.
※ 8 분주로 가정하고 과정을 설명하겠습니다.
1. 기본 16 Mhz이므로 8 분주로 쪼개면 2 Mhz가 된다.
2. 2 Mhz는 0.5us마다 진동하는 것을 표현하는 단위이다.
이렇게 되면, 0.5us마다 TCNT의 값이 증가하게 되는 것이다.
3. TCNT는 255가 넘으면 인터럽트를 발생시키기 때문에 0.5*256 = 128 -> 128us마다 인터럽트 발생
이런 식으로, 8... 1024분 주의 주기를 알 수 있다.
Timer Mode
WGMn도 마찬가지로 TCCR에 있는 비트로 모드를 설정하는 데 사용된다.
총 4개의 모드가 있으며, 4개 모두에 대해 알아보도록 하자.
1. Normal mode
추가적인 게 없는 기본 모드로, 할 수 있는 거로는 TCNT의 초기값을 설정하여 주기를 바꿀 수 있다는 점이다.
2. CTC mode
위의 파형을 보면 OCR값에 따라 크기가 달라지는 것을 알 수 있다.
OCR을 이용해 출력 비교 인터럽트를 발생시키고 0으로 세트 한다.
그러므로 OCR을 설정할 경우, 오버플로 인터럽트를 이용할 수 없게 된다.
3. Fast PWM mode
위의 그림을 보면 CTC모드와 달라진 점이 있다.
OCR과 비교하여 출력 비교 인터럽트를 발생시키고, 0으로 세트되지 않는다는 점이다.
그러므로, OCR기점에서 출력비교 인터럽트를 발생시키고 오버플로 인터럽트까지 발생해야 0으로 떨어진다.
이 모드를 사용하여 좀 더 자유자재로 파형을 만들어 낼 수 있다.
4. Phase Correct PWM mode
그림을 보자마자 다른 점이 확 눈에 띄는데,
바로 오버플로 인터럽트 이후 0으로 세트 되는 것이 아니라 다시 255부터 0까지 카운트한다는 점이다.
Fast PWM과 같이 OCR도 같이 사용 가능하며 신기한 점은 상승할 때와 감소할 때
출력 비교가 총 2번 이루어진다는 점이다.
이렇게 4가지 모드를 알아보았다.
마지막으로 알아볼 것은 OC단자 출력이다.
OC 단자 출력
TCCR의 COMn비트를 이용하여 조절하며,
PWM 모드가 아닐 경우 3가지, PWM모드 일때 3가지 총 6가지 경우가 있다.
1. PWM이 아닐경우
00일 때 : OC단자를 차단하여 평소와 같은 핀으로 사용한다.
01 : 출력 비교에 의해 OC출력을 토글 시킨다.
10 : 출력 비교에 의해 OC출력을 클리어.
11 : 출력비교에 의해 OC출력을 세트.
2. PWM일 경우
00일 때 : OC단자를 차단하여 평소와 같은 핀으로 사용한다.
01 : 보류
10 : 출력 비교에 의해 OC출력을 클리어하고,
Fast PWM - TOP신호를 받아 1로 세트
Phase Correct PWM - 상승 출력 비교 때 클리어, 감소 출력 비교 때 1로 세트.
11: 출력 비교에 의해 OC출력을 세트 하고,
Fast PWM - TOP신호를 받아 클리어
Phase Correct PWM - 상승출력 비교때 1로 세트, 감소출력비교때 클리어.
예제 코드를 통해 알아보자.
void setup() {
//Past PWM모드 기준의 코드
DDRB=0x0F;
TCCR0 = 0x2C; //past PWM, 64clk -> 4us당 1카운트
TCNT0=56; //56~255 200count -> 800us 주기마다 ovf 인터럽트
OCR0=155; // 56~155 100count -> 시작후 400us때 출력비교 인터럽트
TIMSK0=0x03; //Past PWM이므로 ovf, 출력비교 둘다 enable
}
SIGNAL(TIMER0_OVF_vect)
{
//ovf인터럽트때 발생하는 함수
}
SIGNAL(TIMER0_COMPA_vect)
{
//출력비교 인터럽트때 발생하는 함수
}
TCNT가 56에서 시작해서 155에서 출력비교 인터럽트를 발생시키고,
255에서 오버플로 인터럽트를 발생시키고 0으로 세트 한다.
'개발 관련 학습정리 > AVR(atmega128) Register 분석' 카테고리의 다른 글
[Atmega128] 6. 아날로그 변환기 ADC (Analog to Digital Converter) (0) | 2019.08.05 |
---|---|
[Atmega128] 5. 아날로그 비교기 (Analog Comparator) (0) | 2019.08.03 |
[Atmega128] 3. 타이머 인터럽트 Timer/Counter Register (0) | 2019.08.03 |
[Atmega128] 2. 외부 인터럽트 External Interrupts Register (0) | 2019.08.02 |
[Atmega128] 1. 입출력 레지스터 I/O Register (0) | 2019.08.02 |