Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

avreu2

asdf
by

현우 강

on 12 May 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of avreu2

Operation Mode
(동작모드)
Example
(실험예제)
[ LED순차 점멸 ]
Overflow 인터럽트가 발생할 때마다
LED를 1Bit씩 Shift하면서 ON시켜라.








조건 : T/C 인터럽트 주기는 최대가 되도록
TCNT0 = 0 , Prescaler = 1024
Contents
Timer/Counter란?
Timer/Counter
용어정리 및 동작원리
Register
(레지스터)
Operation Timing &
Output Compare Unit
(동작 타이밍과 출력비교)
Feedback
.
ATmega128 Presentation
8bit Timer/Counter
Group 5
2009148002 강현우
2009148042 황선영
2011148005 김지선
2011148015 배유림

Timer/Counter란?
· 타이머와 카운터를 통칭해서 부르는 말
· 타이머 : Prescaler라는 분주기를 사용하여
내부클럭(Clk cpu)을 공

받아 사용하는 기능
· 카운터 :
외부에서 공급되는 클럭
을 받아 동작하는 기능
-> 내부클럭은 MGU에 내장되어있다
-> 시간을 나타내는 기능
-> 오실레이터에서 16MHz의 클럭을 받음
-> 외부에서 공급되는 클럭의 갯수를 셈
Timer/Counter의 분류
· 구조에 따라 8Bit , 16Bit 로 나뉨
·
8Bit
: Timer/Counter 0 , Timer/Counter 2

16Bit
: Timer/Counter 1 , Timer/Counter 3
· ATmega128에는
4가지
Timer/Counter가 존재
① Timer/Counter 0 ( Timer/Counter 2와 기능이 유사하다 )
② Timer/Counter 1 ( Timer/Counter 3와 기능이 유사하다 )
③ Timer/Counter 2
④ Timer/Counter 3
-> 16Bit구조는 8Bit구조 보다 높은 분해능을 가지고 있음

(16Bit구조가 더 정밀)
용어 정리
1.
BOTTOM
: 카운터가 가질 수 있는
최소값. ( 0x00 )

2.
MAX
  : 카운터가 가질 수 있는
최대값. ( 0xff )

3.
TOP
 : 각 동작모드에 따라 카운터가 가질 수 있는
실제 최대값
->
CTC 모드에는 최대값 = OCR값
4.
Clear
: TCNT를 초기화

5.
Count
: TCNT를 1씩 증가시키거나 감소하는 것

6.
Direction
: Count의 증가, 감소를 설정

7.
Clk t
: Timer/Count의 클럭

8.
Prescaler
: 타이머에 공급되는 입력속도를 조절하는 분주기
* TCNT : Timer/Counter의 카운터값
8 Bit Timer/Counter 특징
· PWM 및 비동기 동작모드를 갖는
8Bit구조의 Up,Down 카운터

·
10Bit Prescaler
를 가지고 있어,
내부클럭 소스를 공급
받아 동작

·
Overflow와 출력비교 인터럽트 기능
을 갖고 있으며,
주파수를 생성
할 수
있다




· 출력비교와 재장전 기능을 가지고 있다.
Timer/Counter 0
* Overflow : 카운터값이 최대값 0xff에서 0x00으로 떨어지는 것
Timer/Counter 2 동작원리
8bit Timer/Counter 블록도
8Bit Timer/Counter 동작모드
4가지의 동작모드
1. 일반모드 (Normal Mode)
*Clk s : 시스템클럭값 , 분주비 : Prescaler값
Normal Mode Operation
· 가장 간단한 동작모드로서, 항상 Up카운터로만 동작
· Timer/Counter값이 0x00부터 0xff까지 증가하고 , 최대값 0xff이 되면 0x00부
터 다시시작한다.
· 초기값이 0일 필요는 없으며, Overflow가 발생하기까지의 시간은

(1/Clk s) * 분주비 * (256-초기값) = Overflow time 이다.
· 일반모드에서의 출력비교 유닛은 어떤 주어진 시간에 인터럽트를 발생시키기 위
해 사용될 수도 있다.
· 그러나 파형발생을 위해 출력비교를 사용하는 것은 좋지않다.
8Bit Timer/Counter 동작모드
2. CTC모드 ( Clear Time on Compare Match Mode )
· TCNT값은 0x00부터 1씩 증가하는 동작을 한다.
· TCNT값이 증가하여 OCR 값과 일치하면 다음 클럭에서 TCNT값은 0으로 Clear된다.
-> 이때, 출력비교 인터럽트는 Clear 될 때, OCF Flag가 1이 되면서 발생한다
즉, TCNT값의 범위는 0x00 ~ OCR범위를 가지며, OCR값은 TOP을 나타낸다.
· 카운터 동작중에 OCR값을 TCNT값보다 작은 값으로 잡으면, TCNT값은 0xff까지
증가하였다가 0으로 Clear되고나서 정상적인 CTC 동작을 한다.
· CTC모드에서는 OC핀을 통해 파형을 발생시킬 수 있다.
-> 이때, Toggle Mode를 이용하면 구형파를 출력
· 출력파형의 주기 :
시스템클럭
2 * 분주비 * (1+OCR값)
CTC Mode Operation
8Bit Timer/Counter 동작모드
3. Fast PWM Mode (Fast Pulse Width Modulation Mode)
-> PWM : Pulse의 폭이 가변되는 파형
· 높은 주파수의 PWM 파형을 발생하는데 유용한 모드
· TCNT값은 0x00부터 0xff까지 증가하고 , 최대값 0xff이 되면 0x00부터 다시 시작한다.
· TCNT값이 증가하여 OCR값과 일치하면 OC핀을 이용하여 파형 출력
· 그러나 CTC Mode와는 달리 OCR값과 일치하고 나서
TCNT값은 Clear되지 않고
TOP (0xff) 까지 증가하고 Overflow 된다.
· OCR값과 비교되어 일치하면 OC핀에서 0이 출력되며, TCNT값이 0이 되면 1이 출력된다.
· 출력파형의 주기 :
시스템클럭
분주비 * 256
Fast PWM Mode Operation
8Bit Timer/Counter 동작모드
4. PC PWM Mode (Phase Correct Mode)
· 높은 분해능의 PWM 파형을 발생하는데 유용한 모드
· TCNT값은 0x00부터 0xff까지 증가하였다가, 0xff부터 0x00까지 감소하는 동작을 한다.
· TCNT값이 증가하여 OCR값과 일치하면 OC핀을 이용하여 파형 출력
· OCR값과 비교되어 일치하면 OC핀에서 0이 출력되며, TCNT값이 0이 되면 1이 출력된다.
· 출력파형의 주기 :
시스템클럭
분주비 * 510
· Overflow 인터럽트는 TCNT값이 0xff에서 0x00될 때 마다 발생하며,
출력비교 인터럽트는 TCNT값과 OCR값이 일치하면 발생.
· OC핀을 통해 파형을 출력할 때는 DDR B의 7비트째를 출력이 되도록 설정
· OC핀을 통해 파형을 출력할 때는 DDR B의 7비트째를 출력이 되도록 설정
· OC핀을 통해 파형을 출력할 때는 DDR B의 7비트째를 출력이 되도록 설정
PC PWM Mode Operation
0x00~0xff 까지 Up Count
0xff에서 0x00으로 떨어지는 Overflow
TCNT 값
8Bit Timer/Counter Resister
1. Timer/Counter 값을 저장하는 레지스터 :
TCNT n
2. 출력비교 레지스터 :
OCR n
3. Timer/Counter 제어 레지스터 :
TCCR n
4. Timer Interrupt Flag 레지스터 :
TIFR
5. Timer Interrupt Mask 레지스터 :
TIMSK
6. 특수기능 I/O 레지스터 :
SFIOR
8Bit Timer/Counter Resister
1. TCCR n ( Timer/Counter n 제어 Resister )
FOC n
:
PWM모드가 아닌 경우에만 유효
비트가 1일 때, OC n 핀을 통해 COM21:COM20 비트에 의해 설정된 값이 즉시 출력

인터럽트를 발생시키지 않고, CTC Mode에서 Timer를 클리어 시키지 않는다.
WGM

n
:
동작모드
를 설정
Normal Mode
PC PWM Mode
Fast PWM Mode
CTC Mode
8Bit Timer/Counter Resister
1. TCCR n ( Timer/Counter n 제어 Resister )
COM n
: Timer/Counter의 출력단자
OC핀의 동작을 제어
.
동작모드에 따라 출력기능이 다르다
Normal & CTC Mode
일반 I/O 포트 동작 ( OC n 차단 )
비교매치에서 OC n 출력값 토글 (반전)
비교 매치에서 OC n Clear
비교 매치에서 OC n Set
-> Timer/Counter 동작 정지
8Bit Timer/Counter Resister
PC PWM Mode
일반 I/O 포트 동작 ( OC n 차단 )

Up Count 중, 비교 매치에서 OC n
Clear
Down Count 중, 비교 매치에서는
Set
-> Timer/Counter 동작 정지
-> 이미 예약된 기능
Up Count 중, 비교 매치에서 OC n
Set
Down Count 중, 비교 매치에서는
Clear
Fast PWM Mode
일반 I/O 포트 동작 ( OC n 차단 )

-> 이미 예약된 기능
비교매치에서 OC n
Clear
,
TOP
에서
Set
비교매치에서 OC n
Set
,
TOP
에서
Clear
8Bit Timer/Counter Resister
1. TCCR n ( Timer/Counter n 제어 Resister )
CS n
: Timer/Counter의
분주비 (Prescaler 값)
을 결정.
-> 클럭을 선택
클럭 입력 차단 (T/C 기능 정지)
Clk / 1
Clk / 8
T/C 0

: Clk / 32
T/C 2
: 64
T/C 0
: Clk / 64
T/C 2
: 256
T/C 0
: Clk / 256
T/C 2
: 외부클럭(하강엣지)
T/C 0
: Clk / 128
T/C 2
: 1024
T/C 0
: Clk / 1024
T/C 2
: 외부클럭(상승엣지)
8Bit Timer/Counter Resister
2. TCNT n ( Timer/Counter n Resister )
· Access (R/W) 가 가능한
Up, Down Counter 동작
을 한다.
8비트 카운트값을 저장
.
3. OCR n ( Output Compare Resister )
·
TCNT와 계속적으로 비교
되는 8비트 레지스터
·
TCNT값과 일치
되면 OC n 핀을 통해
설정값을 출력
하거나
출력비교 인터럽트를 발생
-> 사용자 설정값
[ 출력비교 ]
7. 비동기 상태 레지스터 :
ASSR
-> Timer/Counter 0에 존재
8Bit Timer/Counter Resister
4. TIMSK ( Timer/Counter Interrupt Mask Register )
· 동작 상태에 따라 여러가지 인터럽트를 발생시킬 수 있는데, 이 인터럽트를 가능,
불가능하게 설정하는 레지스터
-> 즉, Enable 을 결정
· 종 류 :
OCIE n
,
TOIE n
1. OCIE n ( Timer/Counter Output Interrupt Enable Bit )
·
이 비트와 SREG(상태레지스터)가 Set
되었을 때, Timer/Counter의
출력비교 인터럽트를 Enable
·
TIFR ( Timer/Counter Interrupt Flag Resister )의 OCF0 비트가 Set
되면 대응
인터럽트 서비스 루틴이 실행
2 TOIE n ( Timer/Counter Overflow Interrupt Enable Bit )
·
이 비트와 SREG(상태레지스터)가 Set
되었을 때, Timer/Counter의
오버플로우 인터럽트를 Enable
·
TIFR ( Timer/Counter Interrupt Flag Resister )의 TOV0 비트가 Set
되면 대응

인터럽트 서비스 루틴이 실행
T/C 2
T/C 0
8Bit Timer/Counter Resister
5. TIFR ( Timer/Counter Interrupt Flag Resister )
· Timer/Counter의 인터럽트 발생 시, Flag를 On하는 레지스터
-> 출력비교 인터럽트와 오버플로우 인터럽트
· 종 류 :
OCF n
,
TOV n
1. OCF n ( Timer/Counter Output Compare Interrupt Flag Bit )
·
TCNT n 과 OCR n이 일치
할 경우
Set
· 이 비트는 대응하는 인터럽트 처리루틴이 실행될 경우,
자동 Clear
2. TOV n ( Timer/Counter Overflow Interrupt Flag Bit )
·
Overflow ( 0xff -> 0x00 )
될 경우
Set
· 대응하는 인터럽터 처리루틴이 실행될 경우,
자동 Clear
T/C 2
T/C 0
8Bit Timer/Counter Resister
6. SFIOR ( Special Function I / O Resister )
· 특수기능 I/O 레지스터
->
모든 Timer/Counter를 동기화
,
Prescaler값을 리셋
TSM
: Timer/Counter의
동기화 기능
· 1 일때,
PSR0 및 PSR321의 값이 유지
· 0 일때,
PSR0 및 PSR321의 값이 Clear
->
PSR0, PSR321이 1일때
, 대응 Prescaler를 계속해서
Reset상태로 유지
즉, Timer/Counter의 정지
Hardware적 Clear되어, Timer/Counter의 동기화
PSR0
:
Prescaler Reset 기능
· 1 일때,
Prescaler가 Reset 됨과 동시에 자동적으로 Clear
Timer/Counter가 비동기모드
일 때, 이 비트를 1로 취하면
Prescaler가 Reset될 때 까지 1을 유지
-> 자동 Clear X
8Bit Timer/Counter Resister
7. ASSR ( Asynchronous Status Resister )
· 비동기 상태 레지스터
->
T/C 0에 존재
하는 레지스터
외부 클럭에 의해 비동기모드로 동작
할 때, 관련 기능
AS0 ( 비동기 Timer/Counter0 )
: 1일때,
내부클럭
을 선택
-> 동기모드
0일때,
TOSC1 단자에 입력되는 외부클럭
을 선택
-> 비동기모드
TCN0UB ( Timer/Counter0 Update Busy )
:
비동기모드 동작시
, TCNT 0에
새로운 값이 쓰여지면 Set
TCNT 0의
쓰기(Write)가 완료되면 자동 Clear
OCR0UB ( Output Compare Register Update Busy )
:
비동기모드 동작시
, OCR 0에
새로운 값이 쓰여지면 Set
OCR 0의
쓰기(Write)가 완료되면 자동 Clear
TCR0UB ( T/C Control Register Update Busy )
:
비동기모드 동작시
, TCCR 0에
새로운 값이 쓰여지면 Set
TCCR 0의
쓰기(Write)가 완료되면 자동 Clear
* 동기모드와 비동기모드 사이에서
Switching 하는 경우

TNCT0 , TCCR0, OCR0 에 영향을 줄 수 있다.
-> 적합한 안전절차에 의해 모드를 바꿔야 한다. ( 교과서 153 Page )
Busy Bit
8Bit Timer/Counter Operation Timing
· 동작 타이밍에 따라
출력파형
이 다르다.
· 고려되는 요인 :
분주비(Prescaler)
-> 분주비에 따라
받아 들여지는 클럭이 작아짐
동작모드
clk t =
N (분주비)
clk I/O
-> 동작모드에 따라
TOP

TCNT의 동작 형태
가 다름
[ PC PWM ]
Overflow 발생 X
[ 나머지 ]
Overflow 발생
Overflow
8Bit Timer/Counter Operation Timing
<Prescaler = 1 >
Clk 값 그대로 들어감
Overflow 발생
->
동작모드 영향
->
분주비 영향
<Prescaler = 8 >
Clk 값 1/8 되었음
->
분주비 영향
Overflow 발생
->
동작모드 영향
8Bit Timer/Counter Output Compare Unit
비교매치 인터럽트 요청
출력파형의 최대값, 최소값 결정
강제 제어 신호
비교매치
동작모드 선택
클럭 선택
파형 출력
Feedback
1. Timer/Counter :
내부클럭
을 이용하는
타이머 기능

외부클럭
을 이용하는
카운터 기능
을 합쳐서 이르는 말
2. 8Bit Timer/Counter :
·
8비트 구조
의 Timer/Counter
· 종류에는 T/C 0 , T/C 2
3. 동작모드
->
T/C 0 는 동기화유닛이 존재
· Normal Mode :
항상
Up Count
동작
,
Overflow ( 0xff -> 0x00 )
발생
· CTC Mode :
TCNT n 은
Up Count
동작 ,
Overflow
를 반복
OCR n 과 비교되어 일치할 때,
파형 출력
을 하고 TCNT n는
Clear
· Fast PWM Mode :
TCNT n 은
Up Count
동작 ,
Overflow
를 반복
OCR n 과 비교되어 일치할 때,
파형 출력
을 하고

TCNT n은
계속
Count 동작
· PC PWM Mode :
TCNT n 은
Up Count
,
Down Count
를 반복
OCR n 과 비교되어 일치할 때,
파형 출력
을 하고

TCNT n은
계속
Up, Down Count 동작
-> TCNT 범위 : 0x00 ~ OCR n
Feedback
4. 8Bit Timer/Counter Resister
· TCCR n (T/C 제어 레지스터) :
,
동작모드
,
클럭선택
출력기능
· TCNT n (T/C 레지스터) :
8Bit의 카운터 값
을 저장
· OCR n (출력비교 레지스터) :
TCNT와 지속적으로 비교
되는 8Bit 레지스터
-> 사용자 설정값
· TIMSK (T/C 인터럽트 마스크 레지스터) :
출력비교 , Overflow 인터럽트

Enable
· TIFR (T/C 인터럽트 플래그 레지스터) :
출력비교 , Overflow 인터럽트
Flag
· SFIOR (특수기능 I/O 레지스터) :
T/C 의 동기화 기능
, Prescaler Reset 기능
· ASSR (비동기 상태 레지스터) :
T/C 0에 존재
, 외부 클럭에 의한 비동기모드 동작 기능
Feedback
5. 8Bit Timer/Counter 동작 타이밍
· 동작 타이밍에 따라
출력되는 파형
이 다름
· 고려되는 요인 :
분주비
,
동작모드
6. 출력비교 유닛
OCR n , TCNT n 의 일치
출력비교 인터럽트 발생
TCCR에 의한 설정
파형발생기
파 형
발 생
< Timer/Counter 0 >
< Timer/Counter 2 >
비동기 외부클럭
내부클럭 (CPU 내부)
Overflow 인터럽트
Clear
Count
Direction
출력비교 값
카운트 값
카운트값의 상향 or 하향
출력비교 인터럽트
파형출력
Timer/Counter 2와의 차이
동기화유닛이 존재
동기화 상태 플래그
비동기 모드 선택 AS0
동기 / 비동기 선택
From Prescaler
클럭선택
Overflow 인터럽트
카운트 값
출력비교 값
파형출력
카운트값 상향 or 하향
출력비교 인터럽트
클럭 입력 단자
Count
Clear
Direction
TCNT
OCR
2주기
3주기
OCR
TCNT
OCF Interrupt Flag
OC
COM21:0 = 2 (비반전)
COM21:0 = 2 (반전)
1주기
2주기
3주기
4주기
5주기
OCR
OCF Interrupt Flag
TCNT
OC
비반전
반전
1주기
2주기
3주기
Timer/Counter PIN
T/C 출력비교 단자
외부클럭 입력단자
( T/C 1, 2, 3)
T/C 1, 3 입력캡쳐
수정발진자 연결단자
( RTC기능 사용)
->
출력비교 인터럽트 : TCNT(카운트값)과 OCR(출력비교값)가 일치할 때, 발생하는 인터럽트
->
Overflow 인터럽트 : TCNT(카운트값)이 Top(최대값)에서 Bottom(최소값)으로 떨어질 때, 발생하는 인터럽트
Timer/Count 0 을 이용한 LED제어 (일반모드)
#include <mega128.h>

unsigned char led = 0xfe;

void main(void)
{
DDRC = 0xff;
PORTC = led;

TIMSK = 0x01;
TCCR0 = 0x07;
TCNT0 = 0x00;
SREG = 0x80

while(1);
}

interrupt [TIM0_OVF] void timer_int0(void)
{
led <<= 1;
led |= 0x01;
if(led == 0xff) led = 0xfe;
PORTC = led;
}
1.
mega128 헤더파일
을 사용
2.
부호가 없는 문자형 상수 LED
를 선언
초기값

0xfe
( 1 1 1 1 1 1 1 0 )
3.
main 함수
의 시작


C포트를 출력으로 설정
C포트에
초기값 led 출력 (0xfe)
[ 포트 초기화 ]
4. TIMSK = 0x01
[ TOIE0 = 1 은 개별인터럽트를 enable ]
TCCR0 = 0x07
[ WGM01:00 = 0 : 0 은 Nomal Mode ]
[ COM01:00 = 0 : 0 은 OC0 차단 ]
[ CS02:00 = 1:1:1 은 분주비 = 1024 ]
TCNT0 = 0x00 :
T/C0 레지스터값의 초기값
SREG0 = 0x80 :
전역 인터럽트 허용
인터럽트 발생주기
1/16 us *
분주비
* 256

이므로,
1/16 us *
1024
* 256
= 16,384 us
인터럽트 서비스 루틴
[ LED 순차 점멸 ]
Timer/Counter 0 을 이용한 LED제어 (CTC 모드)
T/C 0의 CTC모드를 이용하여 출력비교
인터럽트가 발생될 때마다 LED를 1bit씩
Shift하면서 On시키는 프로그램을 작성
[ 순차 점멸기 ]
#include <mega126.h>

unsigned char led = 0xfe;

void maim(void)
{
DDRC = 0xff;
PORTC = led;

TIMSK = 0x02;
TCCR0 = 0x0f;
OCR0 = 255;
TCNT0 = 0x00;
SREG = 0x80;

while(1);
}

interrupt [TIM0_COMP] void timer_comp0(void)
{
led <<= 1;
led |= 0x01;
if(led == 0xff) led = 0xfe;
PORTC = led;
}
1. mega128 헤더파일 사용
2.
부호없는 캐릭터형 변수 led를 선언

초기값

0xfe

( 1 1 1 1 1 1 1 0 )
3. main함수 시작

C포트를 출력으로 사용, 초기값 led (0xfe)
[ 포트 초기화 ]
4. TIMSK = 0x02
[ OCIE0 = 1은 출력비교 인터럽트 Enable ]
TCCR0 = 0x0f
[ WGM00:01 = 0 : 1은 CTC모드 ]
[ COM01:00 = 0 : 0 은 OC0 차단 ]
[ CS02:00 = 1:1:1 은 Prescaler = 1024 ]
OCR0 = 255 :
TCNT0 = 0x00 :
SREG = 0x80 :
출력비교 레지스터 값 설정
T/C 0 레지스터 초기값 설정
전역 인터럽트 인에이블 비트 Set
인터럽트 서비스 루틴
[ LED 순차 점멸 ]
인터럽트 발생주기
1/16us *
분주비
* 256 이므로.
1/16us *
1024
* 256
= 16,384us
참 고 문 헌
발표를 마치며...
처음에는 어떻게 할지 막막한 상황에서 조원들이 다같이 모여 서로 상의하고 여기저기 찾아보면서 배우고 서로 알려주고 하다보니 하나하나 발표준비가 되어갔습니다.


혼자 걸은 두걸음보다 함께 걸은 한걸음이 더 소중한 일인것을 이번 발표 준비로 배웠습니다.
Thankyou
Thank you
[1] 신동욱/오창헌 " 알기쉽게 배우는 AVR ATmega128" <Ohm사> [본교재]
[2] 윤덕용 " AVR ATmega128 정복 " <Ohm사>
[4] http://www.cyworld.com/bgy0147/6299442
< 개요 및 세부내용 >
[3] ATmega128 Datasheet <ATMEL 제공>
< 레지스터 ,및 동작모드, 실험예제 >
[5] blog.naver.com/movingboy/42608271 < 미완성 프로젝트 소굴 >
[6] blog.naver.com/jbivanlee/40121521925 < IVAN의 마이컴하우스 >
[7] purestarman.tistory.com/78
< 이미지, 미디어 출처 > : Google 이미지
http://blog.naver.com/rio_song <전자이야기>
1주기
OC
(toggle)
Full transcript