ATmega128 타이머/카운터 1,3
타이머/카운터1,3 타이머/카운터1과 3은 16비트 업/다운 카운터로 동작 10비트 프리스케일러 내장 입력캡쳐 유닛 내장 비교 매치에서 타이머 클리어(오트 리로드) 가변 PWM 주기파형 출력 6개의 출력비교 유닛 내장 타이머 또는 카운터로 동작하며 다양한 모드 내장 6개의 PWM 출력 T1, T3에 의한 카운터 동작 캡쳐 기능 10개의 독립적인 인터럽트 소스 TOV1, OCF1A, OCF1B, OCF1C, ICE1 TOV3, OCF3A, OCF3B, OCF3C ICF3
타이머/카운터1,3 블록도(n=1,3) 클럭은 프리스케일러를 거친 내부클럭 또는 Tn(n=1,3) 핀을 통해 입력된 클럭 사용 출력파형은 단자 OCnA,OCnB OCnC를 통해 출력되며, ICPn은 타이머/카운터1,3의 TCNTn값을 ICRn에 저장할 때 사용되는 트리거 입력단자
타이머/카운터1, 3 관련 레지스터 타이머/카운터 레지스터 : TCNT1, TCNT3 -16비트 출력비교 레지스터(16비트) - OCR1A, OCR1B, OCR1C - OCR3A, OCR3B, OCR3C 타이머/카운터 제어 레지스터(8비트) - TCCR1A, TCCR1B, TCCR1C - TCCR13, TCCR3B, TCCR3C 입력캡쳐 레지스터 ICR1, ICR3 – 16비트 타이머/카운터 인터럽트 플래그 레지스터 : TIFR, ETIFR – 8비트 타이머/카운터 인터럽트 마스크 레지스터 : TIMSK, ETIMSK – 8비트 특수기능 I/O 레지스터 : SFIOR – 8비트
타이머/카운터1,3레지스터(TCNT1,3) TCNT1과 TCNT3은 타이머/카운터1과 3의 16비트 레지스터 값 저장 I/O영역에 각기 다른 어드레스를 가지고 있는 8비트 레지스터 TCNT1H와 TCNT1L, TCNT3H와 TCNT3L 2개로 각각 구성
TCNT1,3사용시 주의사항 TCNT1이나 TCNT3에 값을 쓰거나 읽는 프로그램을 작성할 때는 다음과 같은 주의 사항 필요 어셈블리어로 프로그램을 작성할 때는 8비트 단위로 2회에 걸쳐 읽 기 동작에서는 하위 바이트부터 먼저 읽고, 쓸때는 상위 바이트부터 쓰기 동작 실행 C로 프로그램을 작성 할 때는 16비트 레지스터명 TCNT1(또는 TCNT3)을 이용하여 한 스텝으로 프로그램 작성 위와 같은 규칙은 OCRnA, OCRnB, OCRnC, ICRn에 대해서도 동일하게 적용
타이머/카운터1,3 출력비교 레지스터(OCR1x,OCR3x) 출력 비교 레지스터 OCRnA, OCRnB, OCRnC(n=1, 3)는 TCNTn과의 값이 일치할 때 OCnA, OCnB, OCnC 핀을 통해 파형을 출력시키기 위해 비교값을 저장하기 위한 16비트 레지스터 TCNTn과 마찬가지로 I/O 영역에 각기 다른 어드레스를 가지고 있는 8비트 레지스터 OCRnAH와 OCRnAL, OCRnBH와 OCRnBL, OCRnCH와 OCRnCL로 각각 구성 레지스터들에 값을 쓰거나 읽는 프로그램을 작성할 때는 TCNTn의 경우와 같이 주의 필요
OCR1x(x=A, B, C) <OCR1x : Timer/Counter3 Output Compare Register>
OCR3x(x=A, B, C) <OCR1x : Timer/Counter3 Output Compare Register>
타이머/카운터1,3 입력캡쳐레지스터(ICR1,ICR3) 입력 캡쳐 핀 ICPn(n=1,3)에 이벤트가 발생할 때마다(또는 선택적으로 아날로그 비교기의 출력에 따라) TCNTn값으로갱신되는 16비트 레지스터 타이머/카운터 1과 3의 동작모드에 따라 TOP값을 정의하는데도 이용 8비트 레지스터 ICRnH와 ICRnL로 각각 구성 이 레지스터들에 값을 쓰거나 읽는 프로그램을 작성할 때는 TCNTn의 경우와 같이 주의 필요
<ICR1, 3 : Timer/Counter1, 3 Input Capture Register>
타이머/카운터1,3 제어 레지스터A (TCCR1A,TCCR3A) Bit 1,0 – WGMn1, WGMn0 : 파형 발생 모드 (Waveform Generation Mode) - TCCRnB 레지스터의 WGMn3, WGMn2비트와 함께 타이머/카운터1과 3의 동작모드 설정
Phase and Frequency Correct PWM 모드 WGM n3 n2 n1 n0 동작모드 TOP값 OCRnx의 업데이트 시점 TOVn 플래그 셋 시점 일반 모드 0xFFFF 설정 즉시 1 Phase Correct PWM(8비트) 0x00FF TOP 0x0000 2 Phase Correct PWM(9비트) 0x01FF 3 Phase Correct PWM(10비트) 0x03FF 4 CTC OCRnA 5 Fast PWM(8비트) 6 Fast PWM(9비트) 7 Fast PWM(10비트) 8 Phase and Frequency Correct PWM ICRn 0x00 9 10 Phase Correct PWM 11 12 13 reserved ― 14 Fast PWM 15
Bit7..2 – COMnx1, COMnx0 : Ocnx핀의 출력 모드 선택 비트(n=1,3 x=A,B,C) - 타이머/카운터 1과 3에서 비교 매치 동작에 따른 출력 핀의 동작 결정 - 출력 핀의 동작은 출력 비교 x핀 Ocnx에 영향을 주며, 이 핀에 대응되는 비트는 출력으로 설정 COMnx1 COMnx0 Ocnx핀의 출력 동작 일반 I/O 포트로 사용(Ocnx핀 차단) 1 비교 매치에서 OCnx 출력 토글(toggle) OCnx 출력 클리어 OCnx 출력 셋 Normal, CTC 동작모드에서 OCnx핀의 출력 동작(n=1,3 x=A,B,C
COMnx1 COMnx0 OCnx핀의 출력값 COMnx1 COMnx0 OCnx핀의 출력값 일반 I/O 포트로 사용(OCnx핀 차단) 1 모드 15인 경우에만 비교 매치에서 OCnA출력을 토글(toggle)하며, OCnB핀은 차단된다. 그밖에 모드에서는 일반 I/O포트로 사용(OCnA/OCnB 출력 차단) 비교매치에서 OCnx 출력 클리어, TOP에서 OCnx 출력 셋 비교매치에서 OCnx 출력 셋, TOP에서 OCnx 출력 클리어 Fast PWM 동작모드에서 OCnx핀의 출력동작 COMnx1 COMnx0 OCnx핀의 출력값 일반 I/O 포트로 사용(OCnx핀 차단) 1 모드9,11인 경우에만 비교 매치에서 OCnA출력을 토글(toggle)하며, OCnB핀은 차단된다. 그 밖의 모드에서는 일반 I/O포트로 사용(OCnx 출력 차단) 업 카운트 중의 비교매치에서 OCnX 출력 클리어 다운 카운트 중의 비교매치에서 OCnx 출력 셋 업 카운트 중의 비교매치에서 OCnx 출력 셋 다운 카운트 중의 비교매치에서 OCnx 출력 클리어 Phase( and Frequency) Correct PWM 동작모드에서 OCnx핀의 출력동작
타이머/카운터1,3 제어 레지스터B (TCCR1B,TCCR3B) Bit 7 – ICNCn : 입력 캡쳐 n 노이즈 제거기(Input Capture Noise Canceler) - 이 비트가 1이면, 입력 캡쳐 노이즈 제거기가 동작하여 Icn(n=1, 3)핀으로 입력되는 신호 필터링 처리 - 이 필터에는 출력이 변화하는데 있어 같은 입력 신호값이 4클럭 동안 지속 되는 것이 요구되며, 이에 따라 입력 캡쳐는 4클럭 만큼 지연되어 동작
Bit 6 – ICESn : 입력캡쳐 에지 선택(Input Capture Edge Select) - 이 비트가 0이면, 입력캡쳐 핀 Icn에 입력되는 신호의 하강 에지에 서 타이머/카운터n의 값이 입력캡쳐 레지스터 ICRn에 전달 - 이 비트가 1이면, Icn에 입력되는 신호의 상승에지에서 타이머/카 운터n의 값이 입력캡쳐 레지스터 ICRn에 전달 - ICESn의 설정에 따라 캡쳐 신호가 입력되면 타이머/카운터n의 값 이 ICRn에 저장되며, 입력캡쳐 인터럽트 플래그 ICFn이 1이 되어 인터럽트 발생 - 레지스터 ICRn이 타이머/카운터1의 최대값(TOP)을 저장하는 레지 스터로 사용하는 동작모드에서는 Icn핀은 차단되고 입력캡쳐 기능 은 사용할 수 없음
Bit 4, Bit 3 – WGMn3, WGMn2 : 파형 발생 모드 TCCRnA 레지스터의 WGMn1, WGMn0비트와 함께 타이머/카운터n의 동작모드 설정 Bit 2, 1, 0 – CSn2, CSn0 : 클럭 선택(Clock Select) - 타이머/카운터n의 클럭 소스를 선택
타이머/카운터n 클럭 소스(n=1,3) CSn2 CSn1 CSn0 클럭 소스 타이머/카운터n 정지 1 𝑐𝑙𝑘 𝐼/𝑂 / 1 타이머/카운터n 정지 1 𝑐𝑙𝑘 𝐼/𝑂 / 1 𝑐𝑙𝑘 𝐼/𝑂 / 8 𝑐𝑙𝑘 𝐼/𝑂 / 64 𝑐𝑙𝑘 𝐼/𝑂 / 256 𝑐𝑙𝑘 𝐼/𝑂 / 1024 Tn핀에 입력되는 외부 클럭(하강 에지에서 동작) Tn핀에 입력되는 외부 클럭(상승 에지에서 동작) ※𝑐𝑙𝑘 𝐼/𝑂 는 시스템 주파스와 같음
타이머/카운터 1과 3의 프리스케일러
타이머/카운터1,3 제어 레지스터C (TCCR1C,TCCR3C) Bit 7..5 – FOCnx(Force Output Compare)(n=1,3 x=A, B, C) - PWM 모드가 아닌 경우에만 유효하며, 이 비트가 1이면 비교 출력단자 Ocnx를 통해 COMnx1 : COMnx0비트에 의해 설정된 값이 즉시 출력
타이머/카운터 인터럽트 마스크 레지스터(TIMSK) Bit 5 – TICIE1 : 타이머/카운터1 입력캡쳐(Capture) 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터1 입력캡쳐 인터럽트 인에이블 - IC1 핀에서 캡쳐 트리거(trigger) 이벤트가 발생하면 인터럽트 실행 Bit 4 – OCIE1A : 타이머/카운터1 출력 비교 A 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터1의 비교 A매치 인터럽트 인에이블 - 타이머/카운터1의 비교A 매치가 발생하면 인터럽트 실행 Bit 3 – OCIE1B : 타이머/카운터1 출력 비교 B 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터1의 비교 B매치 인터럽트 인에이블 - 타이머/카운터1의 비교B 매치가 발생하면 인터럽트 벡터 실행 Bit2 – TOIE1 : 타이머/카운터1 오버플로우 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터1의 오버플로우 인터럽트 인에이블 - 타이머/카운터 오버플로우가 발생하면 인터럽트 실행
확장 타이머/카운터 인터럽트 마스크 레지스터(ETIMSK) Bit 5 – TICIE3 : 타이머/카운터3 입력캡쳐(Capture) 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터3 입력캡쳐 인터럽트 인에이블 - IC3 핀에서 캡쳐 트리거(trigger) 이벤트가 발생하면 인터럽트 실행 Bit 4 – OCIE3A : 타이머/카운터3 출력 비교 A 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터3의 비교 A매치 인터럽트 인에이블 - 타이머/카운터3의 비교A 매치가 발생하면 인터럽트 실행 Bit 3 – OCIE3B : 타이머/카운터3 출력 비교 B 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터3의 비교 B매치 인터럽트 인에이블 - 타이머/카운터3의 비교B 매치가 발생하면 인터럽트 실행
Bit 2 – TOIE3 : 타이머/카운터3 오버플로우 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터3의 오버플로우 인터럽트 인에이블 - 타이머/카운터3의 오버플로우가 발생하면 인터럽트 실행 Bit 1 – OCIE3C : 타이머/카운터3 출력 비교 C 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터3의 비교 C매치인터럽트 인에이블 - 타이머/카운터3의 비교C 매치가 발생하면 인터럽트 실행 Bit 0 – OCIE1C : 타이머/카운터1 출력 비교 C 매치 인터럽트 인에이블 비트 - 이 비트와 SREG의 I비트가 1이면 타이머/카운터1의 비교 C매치 인터럽트 인에이블 - 타이머/카운터1의 비교C 매치가 발생하면 인터럽트 실행
타이머/카운터 인터럽트 플래그 레지스터(TIFR) Bit 5 – ICF1 : 타이머/카운터1 입력캡쳐 플래그 비트 - IC1핀에 캡쳐 이벤트가 발생했을 때 셋 되며, 입력캡쳐 인터럽트 발생 - ICR1 레지스터가 TOP 값으로 사용되는 동작모드에서는 TCNT1의 값이 TOP이 될 때 셋 - SREG의 I, TIMSK의 TICIE1과 ICF1 비트가 셋 되면 타이머/카운터 1 캡쳐 인터럽트 실행 - 이 비트는 대응되는 인터럽트 처리 루틴이 실행되면 자동적으로 클리어 Bit 4 – OCF1A : 출력 비교 플래그 비트 1A - TCNT1과 출력 비교 레지스터 1A인 OCR1A가 일치했을 경우 셋 - SREG의 I, TIMSK의 OCIE1A과 OCF1A 비트가 셋 되면 타이머/카운터1 비교 A매치 인터럽트 실행 - OCF1A는 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적으로 자동 클리어 되거나 플래그에 1을 쓸 경우 클리어
타이머/카운터 인터럽트 플래그 레지스터(TIFR) Bit 3 – OCF1B : 출력 비교 플래그 비트 1B - TCNT1과 출력 비교 레지스터 1B인 OCR1B가 일치했을 경우 셋 - SREG의 I, TIMSK의 OCIE1B와 OCF1B 비트가 셋 되면 타이머/카운터1 비교 B 매치 인터럽트 실행 - OCF1B는 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적으로 자동 클리어 되거나 플래그에 1을 쓸 경우 클리어 Bit 2 – TOV1 : 타이머/카운터1 오버플로우 플래그 비트 - 타이머/카운터1에서 오버플로우가 발생했을 경우 셋 - SREG의 I, TIMSK의 TOIE1과 TOV1 비트가 셋되면 타이머/카운터1 오버플로우 인터럽트 실행 - TOV1은 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적으로 자동 클리어 되거나, TOV1에 1을 쓰면 클리어 - Phase Correct PWM모드에서 이 비트는 타이머/카운터1의 카운터 값이 0x0000에서 카운터 방향이 바뀔 때 셋
확장 타이머/카운터 인터럽트 플래그 레지스터(ETIFR) Bit 5 – ICF3 : 타이머/카운터3 입력 캡쳐 플래그 비트 - IC3핀에 캡쳐 이벤트가 발생했을 때 셋 되며, 입력 캡쳐 인터럽트 발생 - ICR3 레지스터가 TOP값으로 사용되는 동작모드에서는 TCNT3의 값이 TOP값이 될 때 셋 - SREG의 I, ETIMSK의 TICIE3와 ICF3 비트가 셋 되면 타이머/카운터3 캡쳐 인터럽트 실행 - 이 비트는 대응되는 인터럽트 처리 루틴이 실행되면 자동적으로 클리어 Bit 4 – OCF3A : 출력 비교 플래그 비트 3A - TCNT3과 출력 비교 레지스터 3A인 OCR3A가 일치했을 경우 셋 - SREG의 I비트, ETIMSK의 OCIE비트와 OCF3A가 셋 되면 타이머/카운터3 비교 A 매치 인터럽트 실행 - 이 비트는 대응되는 인터럽트가 실행되면 하드웨어적으로 자동 클리어 되거나 플래그에 1을 쓰면 클리어
확장 타이머/카운터 인터럽트 플래그 레지스터(ETIFR) Bit 3 – OCF3B : 출력 비교 플래그 비트 3B - TCNT3과 출력 비교 레지스터 3B인 OCR3B가 일치했을 경우 셋 - SREG의 I비트, ETIMSK의 OCIE3B비트와 OCF3B가 셋 되면 타이머/ 카운터3 비교 B매치 인터럽트 실행 - 이 비트는 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적 으로 자동 클리어 되거나 플래그에 1을 쓸 경우 클리어 Bit 2 – TOV3 : 타이머/카운터3 오버플로우 플래그 비트 - 타이머/카운터3에서 오버플로우가 발생했을 경우 셋 - SREG의 , ETIMSK의 TOIE3과 TOV3비트가 셋 되면 타이머/카운터3 오버플로우 인터럽트 실행 - TOV3은 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적으로 자동 클리어 되거나, TOV3에 1을 쓰면 클리어 - Phase Correct PWM모드에서 이 비트는 타이머/카운터3의 카운터 값이 0x0000에서 카운터 방향이 바뀔 때 셋
확장 타이머/카운터 인터럽트 플래그 레지스터(ETIFR) Bit 1 – OCF3C : 출력 비교 플래그 3C 비트 - TCNT3과 출력 비교 레지스터 3C인 OCR3C가 일치했을 경우 셋 - SREG의 I, ETIMSK의 OCIE3C와 OCF3C 비트가 셋 되었을 때 타이머/ 카운터3 비교 C 매치 인터럽트 실행 - OCF3C는 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적 으로 자동 클리어 되거나 플래그에 1을 쓸 경우 클리어 Bit 0 – OCF1C : 출력 비교 플래그 1C 비트 - TCNT1과 출력 비교 레지스터 1C인 OCR1C가 일치했을 경우 셋 - SREG의 I, ETIMSK의 OCIE1C와 OCF1C 비트가 셋 되었을 때 타이머/ 카운터1 비교 C 매치 인터럽트 실행 - OCF1C는 대응되는 인터럽트 처리 루틴을 실행할 경우에 하드웨어적
특수 기능 I/O레지스터(SFIOR) Bit 7 – TSM(Timer/Counter Synchronization Mode) : 타이머/카운터 동기 모드 - 모든 타이머/카운터를 동기화시키는 기능 - 1로 설정하면 PSR0 및 PSR321 비트값이 그대로 유지 - PSR0과 PSR321이 모두 1인 경우 대응하는 프리스케일러를 계속해서 리셋 상태를 유지하게 해주어 모든 타이머/카운터를 정지시켜 주는 역할을 함 - 타이머/카운터가 정지된 상태에서 타이머/카운터에 같은 값을 설정 - 이 비트를 0으로 하면 PSR0과 PSR321비트는 하드웨어적으로 클리어 되어 타이머/카운터는 동시에 카운팅을 시작하게 되어 동기를 맞출 수 있음 Bit 0 – PSR321 : 타이머/카운터 1, 2, 3의 프리스케일러 리셋 - 1로 설정하면 타이머/카운터 1~3이 공통으로 사용하고 있는 프리스케일러 를 리셋시키며, TSM비트가 0이면 이 비트는 자동적으로 클리어
타이머/카운터n(n=1,3)동작 일반 모드(Normal Mode) 업 카운터로서만 동작 타이머/카운터값이 16비트 최대값 0xFFFF (TOP=0xFFFF)가 되면, 0x0000부터 다시 시작 타이머/카운터n의 오버플로우 인터럽트 플래그 TOVn는 TCNTn값이 0xFFFF에서 0x0000으로 될 때 1이 되어 인터럽트 발생 상한값 고정(0xFFFF), 하한값 TCNTn초기값 초기값으로 주기 조정
TCNTn의 초기값은 0일 필요는 없으며, 필요로 하는 시정수(인터럽트주기)를 갖도록 오버플로우 인터럽트가 발생할 때마다 같은 초기값으로 설정하면 일정한 시간 간격으로 처리 가능 인터럽트 주기(중요) TIMn_OVF (1/16)us * 분주비 * (65536 – 초기값) 예를 들면, 시스템 클럭이 16MHz인 ATmega128 시스템에서 TCCRnA = 0x00 TCCRnB = 0x02(8분주), TCNTn=55536을 설정하면 (1/16)us * 8분주 * (65536 – 55536) = 5000us = 5ms 오버플로우 인터럽트가 발생할 때마다 TCNTn에 55536을 넣어주면, 5ms마다 계속해서 오버플로우 인터럽트 발생
(2) CTC (Clear Time on Compare Match Mode) 타이머/카운트n에서 CTC모드는 모드 4와 모드 12가 있음 TCNTn값은 OCRnA(모드4) 또는 ICRn(모드12)값과 일치하면 다음 클럭에서 0x0000 으로 클리어 TCNTn의 값은 0~OCRnA(또는 ICRn)의 범위 하한값은 0 고정, 상한값은 OCRnA(또는 ICRn) 상한값으로 주기 조정
𝑓 𝑂𝐶𝑛𝐴 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 2•𝑁•(1+𝑇𝑂𝑃) 모드4 : OCRnA를 TOP값으로 사용, TCNTn이 OCRnA와 일치할 때마다 OCFnA가 셋되어 출력비교 매치 인터럽트 발생 모드12 : ICRn을 TOP값으로 사용, TCNTn이 ICRn과 일치할 때마다 ICFn이 셋되어 입력 캡쳐 인터럽트가 발생 출력비교매치 인터럽트 주기 = (1/16)us * 분주비 * (1+OCRnA) : 모드 4 입력 캡쳐 인터럽트 주기 = (1/16)us * 분주비 * (1+ICRn) : 모드 12 CTC모드에서 파형 출력모드를 토글 모드로 하면, TCNTn이 TOP과 같을 떄마다 OCnA핀을 통해 토글된 값이 계속해서 출력되며 이때 파형의 주파수는 𝑓 𝑂𝐶𝑛𝐴 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 2•𝑁•(1+𝑇𝑂𝑃) (N : 분주비 1, 8, 64, 256, 1024, 𝑓 𝑐𝑙𝑘(𝐼/𝑂) : 시스템 클럭의 주파수) (모드4에서 TOP = OCRnA, 모드 12에서 TOP = ICRn)
𝑓 𝑂𝐶 𝑛𝑥 𝑃𝑊𝑀 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 𝑁•(1+𝑇𝑂𝑃) (3) 고속 PWM 모드(Fast Pulse Width Modulation Mode) 높은 주파수의 PWM 파형을 발생하는데 유용 모드 5, 6, 7, 14, 15의 동작모드 TCNTn값은 0에서 TOP값까지 증가하다 다시 0부터 카운트하는 동작 반복 TOP값은 0x00FF(8비트), 0x01FF(9비트), 0x03FF(10비트), ICRn, OCRnA로 지정 비반전 비교 출력모드(COMnx1:0=2)에서 TCNTn값은 계속하여 OCRnx와 비교되어 일치하면 Ocnx핀을 통해 0이 출력되고, TCNTn값이 0이 되면 1이 출력되며 Ocnx핀을 통해 출력되는 파형의 주파수는 𝑓 𝑂𝐶 𝑛𝑥 𝑃𝑊𝑀 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 𝑁•(1+𝑇𝑂𝑃) (N : 분주비 1, 8, 64, 256, 1024, 𝑓 𝑐𝑙𝑘(𝐼/𝑂) : 시스템 클럭의 주파수) OCRnx에 설정된 값에 따라 High(또는 Low)부분의 펄스폭이 가변되어 PWM 파형을 출력
타이머/카운터n의 Fast PWM모드 (n=1,3 X=A,B,C) OCRnx값이 클때 OCRnx값이 작을때
𝑓 𝑂𝐶 𝑛𝑥 𝑃𝑊𝑀 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 2•𝑁•𝑇𝑂𝑃 (4) PC(Phase Correct) PWM Mode 높은 분해능의 PWM 파형을 발생하는데 유용 모드 1,2,3,10,11의 동작모드 TCNTn값이 0에서 TOP까지 증가하다 0으로 감소하는 카운트 동작 반복 TOP값은 0x00FF(8비트), 0x01FF(9비트), 0x03FF(10비트), ICRn, OCRnA로 지정 비반전 비교 출력모드에서 업카운트 중에 TCNTn과 출력 비교 레지스터 OCRnx의 값이 일치하면 Ocnx핀을 통해 0이 출력되고, 다운 카운트 중에 일치하면 1이 출력 OCRnx 설정값에 따라 Hign(또는 Low) 부분의 펄스폭이 가변되어 PWM 파형 출력 Ocnx핀을 통해 출력되는 파형 주파수는 𝑓 𝑂𝐶 𝑛𝑥 𝑃𝑊𝑀 = 𝑓 𝑐𝑙𝑘(𝐼/𝑂) 2•𝑁•𝑇𝑂𝑃 (N : 분주비 1, 8, 64, 256, 1024, 𝑓 𝑐𝑙𝑘(𝐼/𝑂) : 시스템 클럭의 주파수) PC PWM모드에서의 주파수는 고속 PWM모드에 비해 반으로 줄어듬
타이머/카운터n의 Phase Correct PWM모드 (n=1,3 x=A,B,C) OCRnx값이 클 때 OCRnx값이 작을 때
Phase and Frequency Correct PWM (5) PFC(Phase and Frequency Correct) PWM Mode 높은 분해능의 PWM 파형을 발생하는데 유용 PC PWM모드와 동작은 같지만 출력 비교 레지스터 OCRnx의 값이 변하는 시점이 다르다. 타이머/카운터1과 3의 동작모드(n=1,3 x=A,B,C) 모드 WGM n3 n2 n1 n0 동작모드 TOP값 OCRnx의 업데이트 시점 TOVn 플래그셋 시점 1 Phase Correct PWM(8비트) 0x00FF TOP 0x0000 2 Phase Correct PWM(9비트) 0x01FF 3 Phase Correct PWM(10비트) 0x03FF 10 Phase Correct PWM ICRn 11 OCRnA 8 Phase and Frequency Correct PWM 0x00 9
타이머/카운터n의 Phase and Frequency Correct PWM 모드 (n=1,3 x=A,B,C) OCRnx 값이 Update OCRnx Update OCRnx 값이 클 때 OCRnx Update OCRnx Update OCRnx 값이 클 때
입력 캡쳐 유닛 (Input Capture Unit) 타이머/카운터n의 값을 캡쳐하여 레지스터 ICRn(n=1,3)에 저장하는 기능 입력캡쳐 유닛의 주 트리거 신호는 Icn핀으로 입력되는 신호 아날로그 비교기 제어 및 상태 레지스터 ACSR의 ACIC(Analog Compare Input Capture)비트를 셋 하면 아날로그 비교기의 출력을 트리거 신호로 사용 가능 입력 캡쳐 기능에 관하여 타이머/카운터n 제어 레지스터 TCCRnB의 ICNCn비트와 ICESn비트가 각각 노이즈 제거 기능과 캡쳐 타이밍의 설정을 사용(타이머/카운터 레지스터에서 TCCRnB 참조) 입력캡쳐 유닛에 캡쳐 신호가 입력되면 타이머/카운터n의 TCNTn값이 ICRn에 복사되고 동시에 입력캡쳐 플래그 ICFn이 셋되어 입력캡쳐 인터럽트 요청
입력 캡쳐 유닛 블록도(n=1,3)
출력 비교 유닛 (Output Compare Unit) 레지스터 TCNTn과 출력비교 레지스터 OCRnx(x : A, B, C)는 16비트 비교기에 의해 계속 비교 TCNTn과 OCRnx값이 일치하면 OCFnx 플래그 비트가 다음 클럭에서 셋 되어 인터럽트 요청 OCFnx는 인터럽트처리가 실행되면 자동적으로 클리어 되지만, 소프트웨어적으로 0을 써주어도 클리어 TCNTn과 OCRnx의 값이 일치하면 WGMn3..0비트에 의해 설정된 파형 출력모드에 따라 Ocnx핀을 통해 파형 출력
출력 비교 유닛 블록도 (n=1,3 x=A,B,C)
출력비교변조기 (Output Compare Modulator) OCM은 반송 주파수(Carrier frequency)에 변조된 파형을 발생하는 기능 이 변조기는 16비트 타이머/카운터1의 출력비교 유닛C와 8비트 타이머/카운터2의 출력 비교 유닛의 출력 이용 변조기가 인에이블 되어 있으면 두개의 출력비교 채녈은 아래 그림과 같이 변조 출력비교 유닛 1C와 출력비교 유닛 2는 PB7 포트핀과 겸용으로 사용 출력비교 OC1C 또는 OC2 중에 하나가 인에이블 되어 있으면 이 핀을 통해 출력비교값이 출력 OC1C과 OC2가 동시에 인에이블 되어 있으면, 변조기는 자동으로 인에이블 되어 PORTB7의 값에 따라 OC1C와 OC2의 값이 합성되어 출력 OC1C 또는 OC2를 인에이블 시키는 경우에는 PORTB7을 출력으로 설정
출력비교변조기 구조
출력비교 변조기 출력 파형 구조