- ATmega128 Timer의 개요와 구성
- Atmega128 Timer/Counter의 개요
- Atmega128 Timer/Counter의 중요 기능
- Atmega128 Timer/Counter 구성
- Atmega128 Timer/Counter 의 중요 응용 분야
- 8-Bit Timer/Counter0 Block Diagram
- 8_Bit Timer/Counter2 Block Diagram
- 16-Bit Timer/Counter1,3 Block Diagram
- Timer/Counter0 Counter Unit Block Diagram
- Timer/Counter2 Counter Unit Block Diagram
- Timer/Counter1,3 Counter Unit Block Diagram
- Output Compare Unit, Block Diagram
- Timer/Counter Compare Match Output Unit
- ATMega128 Timer/Counter operation mode
- Prescaler for Timer/Counter0
- Timer/Counter0와 Timer/Counter2의 Register
- Timer/Counter0,2 Control Register
- TCNT0 - Timer/Counter Register
- OCR0 - Output Compare Register
- ASSR - Asynchronous Status Register
- TIMSK - Timer/Counter Interrupt Mask Register
- TIFR - Timer/Counter Interrupt Flag Register
- SFIOR - Special Function IO Register
- Timer/Counter1과 Timer/Counter3의 Register
- 16-bit Registers의 Read/Write 동작
- Timer/Counter1,3 Control Register
- Timer/Counter1 Register
- Output Compare Register
- Input Capture Register
- Interrupt Mask Register
- Interrupt Flag Register
- Time Delay(or Time period) 구현 하기
- Software time delay
- Compare Match Interrupt를 이용하여 일정한 주기를 발생 시키는 프로그램 예
- Overflow Interrupt를 이용하여 일정한 주기를 발생 시키는 프로그램 예
- 일정 주기를 발생 시키는 Timer와 Software Delay 함수를 이용한 Time delay
- Real time clock(Timer를 이용)를 이용한 Time delay
- Timer/Counter 응용 프로그램 예
- External interrupt와 Timer를 이용한 Time delay
- Timer를 이용한 Event Couting 프로그램 예
- PWM를 이용한 전력제어 프로그램 예
- Input Capture Mode를 이용한 Pulse Width 측정 프로그램 예
- Digital Clock 프로그램 예
- ATmega128 timer - ASM 관련 페이지 보기
- Atmega128 Timer/Counter의 개요
- 4개의 범용 타이머/카운트로 구성되어있다.
- Timer/Counter0(8비트)
- Timer/Counter1(16비트)
- Timer/Counter2(8비트)
- Timer/Counter3(16비트)
- Timer
- Clock(내부 또는 외부)를 이용 하여 일정한 시간 주기 또는 일정 시간 후에 Event(Interrupt)를 발생 시킨다.
- Counter
- 외부 핀(T1, T2, T3)을 통해서 들어오는 Event를 Count(Edge Detector) 한다.
- Atmega128 Timer/Counter의 중요 기능
- Timer 기능
- 일정 주기의 Clock 신호를 Counting
- 일정한 시간 주기를 갖는 펄스의 발생
- Timer interrupt를 이용한 주기적인 프로그램(Task) 실행
- 펄스 폭 제어
- Counter 기능
- Event Counter : 외부 핀을 통해서 들어오는 Event를 Count(Edge Detector) 한다.
- Input Capture (Timer1, Timer3) 기능
- 시간 측정(펄스 폭 측정) : 일정한 주기 마다 Timer/Counter Register의 값을 Capture 하여 시간(펄스 폭) 등을 측정 한다.
- 펄스폭 측정 예: Timer/Counter에 일정 주기 신호를 가하고, Input Capture Pin에 피 측정 신호를 가 한다.
- Atmega128 Timer/Counter 구성
- Timer/Counter Register
- Timer 0,2는 8 Bit Timer/Counter Register를 갖고 있다.
- Timer 1,3는 16 Timer/Counter Bit Register를 갖고 있다.
- Timer/Counter Register는 일정한 주기의 Clock를 Counting 하여 Timer Rg 값이 시간에 비례한 값을 갖도록 하는 Timer로서의 기능과
- External Event(Pin의로 부터 Event 신호가 입력됨)를 Counting 하는 Counter 기능(Timer 1,2,3)을 갖고 있다.
- Output Compare Register
- CPU로 부터 새로운 값(상수)를 Load 할 수 있다.
- Output Compare Register의 값은 Timer/Counter Register와 비교기 회로를 이용 하여 비교되고, 그 결과는
- Output Compare Match Interrupt를 발생 시키고, Timer/Counter Register(Clear Timer on Compare Match (Auto Reload))의 Clear, 일정한 주기의 Pulse 발생, PWM(Pulse Width Modulation) 등에 이용 된다.
- Input/Output Pin
- Input Pin
- External Event Input Pin(Tn): 외부 Event 신호를 입력 받는 Pin 이다. 이 Pin은 Timer/Counter 1,2,3에 있다.
- Input Capture Pin(ICPx): Input Capture Register에 Timer/Counter Rg의 값을 Capture 하는 Trigger 신호 입력 Pin으로 사용 된다. 이 Pin은 Timer/Counter 1,3에 있다.
- 내부 발진 회로에 필요한 외부 소자(크리스탈, C)를 연결 하는 Pin(TOSC1, TOSC2): Timer 0 는 내부에 발진 회로와 외부 소자를 접속하는 TOSC1 및 TOSC2 단자를 가지고 있어서 Real Time Clock(RTC)의 기능을 갖도록 할 수 있다.
- Output Pin
- OCn Pin: Output Compare Match에 의하여 Generation된 신호를 외부로 출력 하는 Pin 이다.
- Control Register
- Timer/Counter의 기능을 Programable 하게 설정하는데 필요한 Rg로 Timer/Counter는 각각 아래와 같은 Control Rg를 갖고 있다.
- Timer/Counter0: TCCR0
- Timer/Counter2: TCCR2
- Timer/Counter1: TCCR1A, TCCR1B, TCCR1C
- Timer/Counter3: TCCR3A, TCCR3B, TCCR3C
- Atmega128 Timer/Counter 의 중요 응용 분야
- Timer와 Counter로서 이용 됨.
- Frequency Generator 이용 됨.
- Pulse width Modulator(PWM): DC Motor, 전력제어 등에 이용 됨.
- Interrupt Source: Overflow, Output Compare Match Interrupt를 이용 하여 다양한 제어와 신호 발생을 할 수 있다.
- External Event Counter로 이용 할 수 있다.(Timer1,2,3)
- Input Capture(Timer1,3) 기능은 다양한 측정(Pulse 폭 측정, 주기 측정 등)에 이용 된다.
- Timer/Counter0 : 외부 32.768kHz(2**15 = 32,768) 크리스탈을 접속하는 TOSC1 및 TOSC2 단자를 가지고 있어서 RTC의 기능을 갖도록 할 수 있다.
- 8-Bit Timer/Counter0 Block Diagram
- 1개의 Output Compare Units를 갖고 있다.
- Timer/Counter0는 외부 32.768kHz(2**15 = 32,768) 크리스탈을 접속하는 TOSC1 및 TOSC2 단자를 가지고 있어서 RTC의 기능을 갖도록 할 수 있다.
- 8_Bit Timer/Counter2 Block Diagram
- 1개의 Output Compare Units를 갖고 있다.
- Timer/Counter2는 External Event Input Pin(Tn)을 갖고 있다.
- 16-Bit Timer/Counter1,3 Block Diagram
- 3개의 독립적인 Output Compare Units를 갖고 있다.
- 1개의 Input Capture Unit를 갖고 있다.
- External Event Input Pin(Tx)을 갖고 있다.
- Timer/Counter0 Counter Unit Block Diagram
- Timer/Counter0는 내부 Clock(clk) 신호를 Downscale 한 신호를 Prescaler로 부터 받을 수 있다. 또한
- Timer/Counter0의 Counter(TCNT0)는 내부 Clock(clk)과 외부 32.768kHz(2**15 = 32,768) 회로를 접속하는 TOSC1 및 TOSC2 단자에 연결된 외부 회로(크리스탈과 C)와 T/C Oscillator 회로에 의한 발진 펄스(크리스탈의 고유 진동 수로 발진 함)를 입력으로 선택 할 수 있다.
- 외부 크리스탈과 발진회로에 의하여 발진된 펄스는 주파수가 매우 안정적 이기 때문에 Real Time Clock(RTC)를 구현 하는데 이용 된다.
- 32.768kHz 크리스탈을 사용 하는 경우 이 주파수를 Prescaler에서 1/32,768(2**15)로 Downscale 하여 1 Sec 신호를 얻을 수 있다.
- Timer/Counter2 Counter Unit Block Diagram
- Timer/Counter2는 내부 Clock(clk) 신호를 Downscale 한 신호를 Prescaler로 부터 받을 수 있다. 또한
- External Event Input Pin(Tn)으로 부터 외부 Event 신호를 받을 수 있다.
- Timer/Counter1,3 Counter Unit Block Diagram
- Timer/Counter1,3는 내부 Clock(clk) 신호를 Downscale 한 신호를 Prescaler로 부터 받을 수 있다. 또한
- External Event Input Pin(Tn)으로 부터 외부 Event 신호를 받을 수 있다.
- Timer/Counter1,3의 Counter(TCNTn)는 16 bit 이다.
- Output Compare Unit, Block Diagram
- Timer/Counter Rg(TCNTn)와 Output Compare Rg(OCRn)의 값이 비교기(Comparator)에 의하여 비교되어 두 Rg의 값이 같을 때 OCFn(Int.Req) 신호가 발생 한다.
- Waveform Generator는 OCFn 신호와 설정된 동작 모드(WGMn, COMn 등의 설정에 따라)에 따라 다양한 모드의 출력 신호를 Generation 하여 외부로 신호를 출력 하기 위한 Pin(OCxy)에 출력 한다.
- Timer/Counter Compare Match Output Unit
- Waveform Generator에서 발생된 OCxy 신호는 COMn0 또는 COMn1 이 1 이고 해당 Port 가 Output Port로 설정(DDR Rg의 Q가 1인 경우)된 경우 OCn Pin에 출력 된다.
- OCFn 신호가 OCn Pin에 출력 되지 않는 경우에도 OCFn 신호를 Interrupt Request 신호로 이용 할 수 있다.
Timer/Counter의 I/O Pin은 I/O Port와 Pin을 공통으로 사용 하기 때문에 설정에 따라 동일한 Pin을 Timer/Counter 또는 I/O Port 가 사용 하게 된다.
각 Timer/Counter는 각각 별도의 Control Rg을 갖고 있다. 자세한 기능은 정확한 코딩을 위하여 Atmega128A_doc8151.pdf에서 해당 Timer의 Control Rg 부분 자료를 확인 하기 바람.
- Normal Mode
- 항상 Up Counter로 동작 한다.
- 0x00~0xff(16Bits Timer/Counter는 0xffff) 구간을 반복 Counting 한다.
- TCNT의 값을 임의의 값으로 다시 설정 할 수 있다.
- MAX = 0xff 일 때 Overflow Interrupt 이 발생 한다.
- TCNT와 OCR Rg가 Match 되면 Out Compare Match Interrupt 이 발생 한다.
- 일정한 시간 지연 후에 Interrupt 발생이 필요 한 경우 이 Interrupt 가 유용 하다. Timer1,3에서는 하나의 Timer로 3개의 서로 다른 Interrupt 주기를 발생 시킬 수 있다.
- 그러나 주기적인 Pulse 발생에 이 모드를 사용 하는 것은 Interrupt가 발생 할 때 마다 Interrupt 처리 Routine이 실행 되어야 하기 때문에 CPU 사용 측면에서 비 효율적 이다.
- CTC Mode(Clear Timer on Compare Match Mode)
- 일정한 주기 또는 주파수 발생 하고자 할 때 사용 한다.
- 항상 Up Counter로 동작 한다.
- 0x00~OCR0 구간을 반복 Counting 한다.
- OCR0값과 TCNT0값이 같으면 카운트 도중 Clear 된다.
- TCNT0 = OCR0 일 때 Output Compare Match Interrupt가 발생 한다.
- 오버프로우(OVF) 인터럽트(MAX = OCR0 일때)도 발생 하지만, COMP 인터럽트와 동일하게 발생 되기 때문에 COMP 인터럽트를 사용 하는 것이 좋다.
- 이 모드는 Software 실행 없이 일정한 주기의 Pulse를 연속적으로 발생 할 수 있다.
- CTC Mode, Timing Diagram
- FAST PWM Mode
- 높은 주파수의 PWM 파형발생이 필요할 때 사용 한다.
- 상향카운터 (Single-Slope Operation)로 동작 한다.
- 0x00~0xFF(16Bits Timer/Counter는 동작 모드에 따라 다름) 구간을 반복 Counting 한다.
- TCNT0과 OCR0의 Compare Match되면 OC0에 LOW(COMn 1:0 = 2 인 경우)가 출력 된다.
- 0xFF → 0x00 : Overflow 발생 시 OC0에 HIGH(COMn 1:0 = 2 인 경우)가 출력 된다.
- Fast PWM Mode, Timing Diagram
- Phase Correct PWM Mode
- 높은 분해능의 PWM출력 파형을 발생하는데 사용
- 상향카운터 0x00 → 0xFF(16Bits Timer/Counter는 동작 모드에 따라 다름), 하향카운터 0xFF(16Bits Timer/Counter는 동작 모드에 따라 다름) → 0x00
- 0x00 ~ 0xFF(16Bits Timer/Counter는 동작 모드에 따라 다름) ~ 0x00 구간을 반복 하여 Counting 한다.
- Compare Output Mode가 COM1:0=2로 설정된 경우 상향 Counting 도중 Compare Match 가 발생 하면 OC0 Pion에 0가 출력 된다.
- Compare Output Mode가 COM1:0=2로 설정된 경우 하향 Counting 도중 Compare Match 가 발생 하면 OC0 Pion에 1이 출력 된다.
- Phase Correct PWM Mode, Timing Diagram
Timer/Counter 1, 2, 3 Operation Mode도 Timer/Counter 0의 Mode와 유사하나 정확한 코딩을 위하여 Atmega128A_doc8151.pdf에서 해당 Timer의 자료를 확인 하기 바람.
TCNT의 값의 설정에 따라 Overflow Interrupt 발생 시간을 조절 할 수 있다.
- Prescaler for Timer/Counter0
- Timer/Counter0의 Clock source는 System clock(clkI/O)에 기본으로 연결 되어 있다.
- ASSR Rg의 AS0 bit 1로 Set 하면 Clock source는 TOSC1 Pin 신호에 연결 되어 Timer/Counter0를 Real Time Counter(RTC)로 사용 할 수 있게 한다.
- AS0이 Set 되면, Pin TOSC1과 TOSC2는 Port C로 사용 할 수 없다.
- 32.768 kHz Crystal과 적당한 C를 Pin TOSC1과 TOSC2에 연결 하여 Real Time Counter(RTC)로 사용 할 수 있다.
- CS00 - CS02의 설정에 따라 clkT0S Clock를 clkT0S/8, clkT0S/32, clkT0S/64, clkT0S/128, clkT0S/256, clkT0S/1024 비율로 prescale한 신호를 Timer/Counter0의 Clock source로 사용 할 수 있다.
- CS00 - CS02를 0,0,0로 설정 하면 Clock 신호가 0(stop)가 되어 Timer/Counter 동작을 정지 할 수 있다. Timer/Counter를 시용 하지 않는 경우 전력 소비를 줄이기 위하여 CS00 - CS02를 0,0,0로 설정 하여야 한다.
- SFIOR Rg의 PSR0 bit를 1로 Set하면 Prescaler가 Reset 된다. 이 기능은 Timer의 Clock source를 정확히 제어 하기 위하여 사용 된다.
Timer/Counter1, Timer/Counter2, Timer/Counter3의 Prescaler도 유사한 방법으로 제어 된다. 정확한 코딩을 위하여 Atmega128A_doc8151.pdf의 16장과 해당 Timer/Counter의 Control Rg 자료를 확인 하는 것이 좋다.
- Timer/Counter0,2 Control Register
- TCCR0 - Timer/Counter0 Control Register
- TCCR2 - Timer/Counter2 Control Register
- 동작모드설정/분주비 설정
- Bit 7 : FOC0(Force Output Compare)
- Non-PWM mode 에서만 동작
- 이 Bit에 1을 Write 하면 TCNT0 과 OCR0 Rg 의 Compare Match 가 발생 한 것과 같은 신호를 OC0 단자에 즉시(강제로) 출력 한다.
- 새로운 Compare Match 가 발생 하면 OC0단자는 Update 된다.
- Bit 3,6 : WGM01,WGM00(Waveform Generation Mode)
- Compare Match Output Mode(Bit 5,4 : COM01, COM00). Timer2는 Timer 번호만 다르다.
- non-PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Fast PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Phase Correct PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Bit 2,1,0 : CS02~CS00(Clock Select)
- TCNT0 - Timer/Counter Register
- Timer/Counter Register는 Count(Clock 또는 Event를 Counting) 값을 저장하는 8비트 Register 이다.
- Timer/Counter Register는 직접 Read/Write 가 가능 하다.
- Timer/Counter Register 가 동작 하는 중에 Counter 값을 변경 하는 것은 TCNT0 와 OCR0 Register의 Compare match를 missing 할 위험이 있다.
- OCR0 - Output Compare Register
- Timer/Counter 0의 8비트 Counter TCNT0과 비교하여 OC0 단자에 출력신호를 발생하기 위한 8비트 값을 저장하는 Register 이다.
- ASSR - Asynchronous Status Register
- Bit 3 – AS0: Asynchronous Timer/Counter0
- AS0 = 0 : 내부클럭 (clkI/O) 동기모드
- AS0 = 1 : 외부클럭 (TOSC1) 비 동기모드
- Bit 2 – TCN0UB: Timer/Counter0 Update Busy
- Bit 1 – OCR0UB: Output Compare Register0 Update Busy
- Bit 0 – TCR0UB: Timer/Counter Control Register0 Update Busy
- TIMSK - Timer/Counter Interrupt Mask Register
- Timer/Counter0 Interrupt Mask Bit
- Bit 1 – OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable
- OCIE0를 Set시키면 Output Compare Match Interrupt가 활성화 된다.
- Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt Enable
- TOIE0를 Set시키면 Overflow Interrupt가 활성화된다.
- Timer/Counter2 Interrupt Mask Bit
- Bit 7 – OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable
- OCIE2를 Set시키면 Output Compare Match Interrupt가 활성화 된다.
- Bit 6 – TOIE2: Timer/Counter2 Overflow Interrupt Enable
- TOIE2를 Set시키면 Overflow Interrupt가 활성화된다.
- 인터럽트를 사용하려면 SREG의 I Bit 가 1인 상태여야 한다.
- TIFR - Timer/Counter Interrupt Flag Register
- Timer/Counter0 Interrupt Flag Bit
- Bit 1 – OCF0: Output Compare Flag 0
- TCNT0값과 OCR0값을 비교하여 이것이 같으면 이 비트가 1로 Set되면서, Output Compare Interrupt가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
- Bit 0 – TOV0: Timer/Counter0 Overflow Flag
- 타이머/카운트에서 Overflow가 발생되면 이 비트가 1로 Set되면서 Output Compare Interrupt가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
- Timer/Counter2 Interrupt Flag Bit
- Bit 7 – OCF2: Output Compare Flag 0
- TCNT2값과 OCR2값을 비교하여 이것이 같으면 이 비트가 1로 Set되면서, Output Compare Interrupt가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
- Bit 6 – TOV2: Timer/Counter2 Overflow Flag
- 타이머/카운트에서 Overflow가 발생되면 이 비트가 1로 Set되면서 Output Compare Interrupt가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
- 위 Bits의 위치에 1를 Write 하면 해당 Flag 가 Clear 된다.
- SFIOR - Special Function IO Register
- Bit 7 – TSM: Timer/Counter Synchronization Mode
- 이 Bit 에 1 이 Writing 되면 Timer/Counter는 Synchronization 설정 Mode 가 된다.
- 이 Mode가 설정 되면 PSR0, PSR321(Prescaler Reset ) 상태가 유지 된다. 이 상태에서 대응하는 Timer/Counter는 멈추어서 안전하게 새로운 설정을 할 수 있게 된다.
- 이 Bit에 0가 Write 되면 PSR0, PSR321가 Hardware에 의하여 Clear 되고 Timer/Counter는 Counting을 시작 하게 된다.
- Bit 1 – PSR0: Prescaler Reset Timer/Counter0
- 이 Bit 에 1이 Writing 되면 Timer/Counter Prescaler 가 Reset 된다.
- 그리고 이 Bit는 Hardware에 의하여 Clear 된다. (TSM Bit가 Set 된 경우에는 Clear 되지 않는다.)
Timer/Counter(0,1,2,3모두 4개)의 Control Rg는 자료의 양이 많기 때문에 이곳에서는 요약된 자료만을 제공 한다. 정확한 코딩을 위하여 Atmega128A_doc8151.pdf에서 해당 Timer의 자료를 확인 하는 것이 좋다.
Timer/Counter2의 Control Rg는 대부분 Timer/Counter0의 Control Register와 기능이 동일 하다.
Control Bit의 기능이 동일 하고 Timer/Counter 번호만 다른 경우Timer/Counter2의 설명은 생략 한다. 이 경우 Timer/Counter2의 Control Bit 이름은 Timer/Counter1의 Control Bit 이름에서 Timer 번호만 2로 변경 하면 돤다. 예: Timer0의 WGM01은 Timer2에서는 WGM21 이 된다.
Waveform Generation Mode Bit Description(Timer2는 Timer 번호만 다르다.)
Timer/Counter0의 Clock Select Bit Description
Timer/Counter2의 Clock Select Bit Description
Timer/Counter2는 외부 Clock source(T2 Pin)를 갖기 때문에 Timer/Counter0와 다르게 외부 Clock source의 Mode를 선택 할 수 있다.
Timer/Counter2의 Timer/Counter Register는 Rg의 이름이 TCNT2 이다.
Timer/Counter2의 Output Compare Register는 Rg의 이름이 OCR2 이다.
- 16-bit Registers의 Read/Write 동작
- TCNTn, OCRnA/B/C, ICRn register는 16-bit registers 이다. 이 프로세서는 8-bit data bus를 사용 하기 때문에 16-bit registers는 2번 Read/Write 동작을 실행 하여야 한다.
- 16-bit registers는 High와 Low 두 Byte로 구성 되어 있고 High Byte를 읽기 위하여 Temporary Register를 이용 한다. Temporary Register는 모든 16 Bit Rg가 공통으로 사용 하기 때문에 주의를 요 한다.
- 16 Bit Rg의 Read Operation: Low Byte를 먼저 읽고(Low Byte를 읽을 때 High Byte가 Temporary Rg에 복사 됨) High Byte를 읽는다.
- 16 Bit Rg의 Write Operation: High Byte를 먼저 Write 하고(High Byte는 Temporary Rg에 임시로 저장되고, Low Byte를 Write 할 때 16 bit Rg에 복사 된다.) Low Byte를 Write 한다.
- c 프로그램에서는 16Bit 정수를 사용 하여 16 Bit Rg에 Read/Write 한다.
- Timer/Counter1,3 Control Register
- TCCR1A - Timer/Counter1 Control Register
- TCCR3A - Timer/Counter3 Control Register
- Compare Output Mode 설정
- Bit 7:6 – COMnA1:0: Compare Output Mode for Channel A
- Bit 5:4 – COMnB1:0: Compare Output Mode for Channel B
- Bit 3:2 – COMnC1:0: Compare Output Mode for Channel C
- non-PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Fast PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Phase Correct PWM Mode에서 Compare Output Mode 설정에 따른 출력
- Bit 1:0 – WGMn1:0: Waveform Generation Mode
- TCCR1B - Timer/Counter1 Control Register
- TCCR3B - Timer/Counter3 Control Register
- Bit 7 – ICNCn: Input Capture Noise Canceler
- 이 Bit가 1로 Set되면 Input Capture Noise Canceler가 동작 하게 된다.
- Noise Canceler가 동작 하게 되면 Input Capture Pin (ICPn)의 입력이 Filtering 된다.
- Filtering 동작에 4개의 Oscillator cycle이 필요 하기 때문에 Input Capture는 4개의 Oscillator cycle 만큼 지연 된다.
- Bit 6 – ICESn: Input Capture Edge Select
- 이 Bit는 Input Capture Pin에 입력 되는 Capture event(Trigger)의 Edge를 선택 한다.
- 이 Bit가 Zero인 경우 Falling edge에서 Capture 동작(Triggering)이 실행 된다.
- 이 Bit가 One인 경우 Rising edge에서 Capture 동작(Triggering)이 실행 된다.
- Capture 동작(Triggering)이 실행되면 Counter Rg의 값이 Input Capture Register (ICRn)에 복사 된고, Capture Flag (ICFn)가 Set 된다.
- 만약 Input Capture Interrupt이 Enable 된 상태에서 Capture Flag (ICFn)가 Set 되면 Interrupt 가 발생 하게 된다.
- Bit 5 – Reserved Bit
- Bit 4:3 – WGMn3:2: Waveform Generation Mode
- Bit 2:0 – CSn2:0: Clock Select
- TCCR1C - Timer/Counter1 Control Register
- TCCR3C - Timer/Counter3 Control Register
- Bit 7 – FOCnA: Force Output Compare for Channel A
- Bit 6 – FOCnB: Force Output Compare for Channel B
- Bit 5 – FOCnC: Force Output Compare for Channel C
- FOCnA/FOCnB/FOCnC는 Non-PWM mode 에서만 동작 한다.
- 이 Bit에 1을 Write 하면 Compare Match 가 발생 한 것과 같은 신호를 COMnx1:0 bits의 설정에 따라 OCnA/OCnB/OCnC 단자에 즉시(강제로) 출력 한다.
- 이 Bit의 제어에 의하여 발생된 신호는 Interrupt를 발생 시키지 않는다.
- Clear Timer on Compare Match (CTC) mode에서 이 신호는 Tiner를 Clear 하지 않는다.
- Bit 4:0 – Reserved Bits
- Timer/Counter1 Register
- TCNT1H and TCNT1L - Timer/Counter1
- TCNT3H and TCNT3LTimer/Counter3
- Timer/Counter Register는 Count(Clock 또는 Event를 Counting) 값을 저장하는 16비트(TCNTnH and TCNTnL, combined TCNTn) Register로 Read/Write 가 가능 하다.
- 16-bit Rg의 Read/Write 동작 시 High Byte Rg는 Temporary Register를 이용 한다. Temporary Register는 모든 16-bit Rg 가 공동으로 이용 하기 때문에 주의를 요 한다.
- Timer/Counter Register 가 동작 하는 중에 Counter 값을 변경 하는 것은 TCNTn 와 OCRnx Register의 Compare match를 missing 할 위험이 있다.
- Output Compare Register
- OCR1AH and OCR1AL - Output Compare Register 1 A
- OCR1BH and OCR1BL - Output Compare Register 1 B
- OCR1CH and OCR1CL - Output Compare Register 1 C
- OCR3AH and OCR3AL - Output Compare Register 3 A
- OCR3BH and OCR3BL - Output Compare Register 3 B
- OCR3CH and OCR3CL - Output Compare Register 3 C
- Input Capture Register
- ICR1H and ICR1L - Input Capture Register 1
- ICR3H and ICR3L - Input Capture Register 3
- Input Capture는 ICPn pin에 Event가 발생 하는 순간의 Counter(TCNTn) 값을 저장 한다. 이 값을 이용 하여 Enent 신호의 발생 시간을 측정 할 수 있기 때문에 펄스 폭 측정 등 여러가지 시간에 관련된 측정에 이용 된다.
- Input Capture Rg의 값은 Waveform Generation Mode 중 일부의 Counter TOP value로 사용 된다.
- Interrupt Mask Register
- TIMSK - Timer/Counter Interrupt Mask Register
- Bit 5 – TICIE1: Timer/Counter1, Input Capture Interrupt Enabl
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter1의 Input Capture interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 TIFR Rg의 ICF1 flag가 Set 되면 Timer/Counter1의 Input Capture interrupt Service Routine 이 실행 된다.
- Bit 4 – OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter1의 Output Compare A Match Interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 TIFR Rg의 OCF1A flag가 Set 되면 Timer/Counter1의 Output Compare A Match Interrupt Service Routine 이 실행 된다.
- Bit 3 – OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable
- Bit 2 – TOIE1: Timer/Counter1, Overflow Interrupt Enable
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter1의 Overflow Interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 TIFR Rg의 TOV1 flag가 Set 되면 Timer/Counter1의 Overflow Interrupt Service Routine 이 실행 된다.
- ETIMSK - Extended Timer/Counter Interrupt Mask Register
- Bit 7:6 – Reserved Bits
- Bit 5 – TICIE3: Timer/Counter3, Input Capture Interrupt Enable
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter3의 Input Capture interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 ETIFR Rg의 ICF3 flag가 Set 되면 Timer/Counter3의 Input Capture interrupt Service Routine 이 실행 된다.
- Bit 4 – OCIE3A: Timer/Counter3, Output Compare A Match Interrupt Enable
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter3의 Output Compare A Match Interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 ETIFR Rg의 OCF3A flag가 Set 되면 Timer/Counter3의 Output Compare A Match Interrupt Service Routine 이 실행 된다.
- Bit 3 – OCIE3B: Timer/Counter3, Output Compare B Match Interrupt Enable
- Bit 2 – TOIE3: Timer/Counter3, Overflow Interrupt Enable
- 이 Bit가 Set 되고 Status Register의 I-flag 가 Set 되면 Timer/Counter3의 Overflow Interrupt 가 Enable 된다.
- 이 Interrupt 가 Enable된 상태에서 ETIFR Rg의 TOV3 flag가 Set 되면 Overflow Interrupt Service Routine 이 실행 된다.
- Bit 1 – OCIE3C: Timer/Counter3, Output Compare C Match Interrupt Enable
- Bit 0 – OCIE1C: Timer/Counter1, Output Compare C Match Interrupt Enable
- Interrupt Flag Register
- TIFR - Timer/Counter Interrupt Flag Register
- Bit 5 – ICF1: Timer/Counter1, Input Capture Flag
- 이 Flag는 ICP1 pin에 Event 가 발생 하였을 때 Set 된다.
- Input Capture Register(ICR1) 가 WGMn3:0 에서 Top value로 시용 되는 경우 Counter 값이 Top에 도달 하면 Set 된다.
- 이 Flag는 Input Capture Interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Bit 4 – OCF1A: Timer/Counter1, Output Compare A Match Flag
- 이 Flag는 Counter(TCNT1) 값이 Output Compare Register A(OCR1A) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match A interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC1A) strobe에 의하여는 Set 되지 않는다.
- Bit 3 – OCF1B: Timer/Counter1, Output Compare B Match Flag
- 이 Flag는 Counter(TCNT1) 값이 Output Compare Register B(OCR1B) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match B interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC1B) strobe에 의하여는 Set 되지 않는다.
- Bit 2 – TOV1: Timer/Counter1, Overflow Flag
- 이 Flag는 Normal mode와 CTC mode(WGMn3:0 bits에 의하여 설정 됨)에서 timer overflow가 발생 할 때 Set 된다.
- 이 Flag는 Timer/Counter1 Overflow interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- ETIFR - Extended Timer/Counter Interrupt Flag Register
- Bit 7:6 – Reserved Bits
- Bit 5 – ICF3: Timer/Counter3, Input Capture Flag
- 이 Flag는 ICP3 pin에 Event 가 발생 하였을 때 Set 된다.
- Input Capture Register(ICR3)가 WGMn3:0 에서 Top value로 시용 되는 경우 Counter 값이 Top에 도달 하면 Set 된다.
- 이 Flag는 Input Capture Interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Bit 4 – OCF3A: Timer/Counter3, Output Compare A Match Flag
- 이 Flag는 Counter(TCNT3) 값이 Output Compare Register A(OCR3A) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match 3 A interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC3A) strobe에 의하여는 Set 되지 않는다.
- Bit 3 – OCF3B: Timer/Counter3, Output Compare B Match Flag
- 이 Flag는 Counter(TCNT3) 값이 Output Compare Register B(OCR3B) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match 3 V interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC3B) strobe에 의하여는 Set 되지 않는다.
- Bit 2 – TOV3: Timer/Counter3, Overflow Flag
- 이 Flag는 Normal mode와 CTC mode(WGMn3:0 bits에 의하여 설정 됨)에서 timer overflow가 발생 할 때 Set 된다.
- 이 Flag는 Timer/Counter3 Overflow interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Bit 1 – OCF3C: Timer/Counter3, Output Compare C Match Flag
- 이 Flag는 Counter(TCNT3) 값이 Output Compare Register C(OCR3C) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match 3 C interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC3C) strobe에 의하여는 Set 되지 않는다.
- Bit 0 – OCF1C: Timer/Counter1, Output Compare C Match Flag
- 이 Flag는 Counter(TCNT1) 값이 Output Compare Register C(OCR1C) 값과 Matche 되었을 때 Set 된다.
- 이 Flag는 Output Compare Match C interrupt vector가 실행 되거나, 이 Bit에 1을 Write 하면 Clear 된다.
- Forced output compare (FOC1C) strobe에 의하여는 Set 되지 않는다.
Timer/Counter(0,1,2,3모두 4개)의 Control Rg는 자료의 양이 많기 때문에 이곳에서는 요약된 자료만을 제공 한다. 정확한 코딩을 위하여 Atmega128A_doc8151.pdf에서 해당 Timer의 자료를 확인 하는 것이 좋다.
Timer/Counter3의 Control Rg는 대부분 Timer/Counter3의 Control Register와 기능이 동일 하다.
Control Bit의 기능이 동일 하고 Timer/Counter 번호만 다른 경우Timer/Counter3의 설명은 생략 한다. 이 경우 Timer/Counter3의 Control Bit 이름은 Timer/Counter1의 Control Bit 이름에서 Timer 번호만 3로 변경 하면 돤다. 예: Timer1의 WGM11은 Timer3에서는 WGM31 이 된다.
COMnA1:0, COMnB1:0, COMnC1:0는 Output compare pins(OCnA, OCnB, OCnC)의 동작(출력 모드)을 제어 하는 Bit이다.
Normal port operation(0:0) 인 경우 OCnA/OCnB/OCnC은 Disconnected 되어 해당 Pin은 일반 I/O Port로 사용(I/O Port에서 Alternate Functions를 참고 할 것)할 수 있다.
아래 Table(3개)은 동작 모드(WGMn3:0 에 의하여 설정됨)에 따른 Compare Output Mode에 대한 설명 이다.
Waveform Generation Mode Bit Description(Timer3는 Timer 번호(n)만 다르다.)
WGMn1:0과 WGMn3:2(TCCRnB Register에 있음)에 의하여 아래 Table과 같이 동작 모드(Waveform Generation Mode)가 결정 된다.
이 Bit(WGMn3:2)와 WGMn1:0(TCCRnA Register에 있음)에 의하여 동작 모드(Waveform Generation Mode)가 결정(TCCRnA Register 참고 바람) 된다.
이 3 Bits는 아래 Table과 같이 Clock source를 결정 한다.
만약 external pin mode 가 선택 되고, Tn pin이 Output으로 설정 되면 Tn pin에 입력 되는 Pulse가 Counter의 Clock이 된다. 이 경우 이 Counter를 Event Counter로 사용 할 수 있다.
Counter TCNT(TCNTn)과 비교하여 OCnx 단자에 출력신호를 발생하기 위한 16비트 값을 저장하는 Register 이다.
Output Compare A Match Interrupt Enable Bit(TIMSK Rg의 Bit4) 참고 바람.
Output Compare A Match Interrupt Enable Bit(ETIMSK Rg의 Bit4) 참고 바람.
Output Compare A Match Interrupt Enable Bit(ETIMSK Rg의 Bit4) 참고 바람.
Output Compare A Match Interrupt Enable Bit(TIMSK Rg의 Bit4) 참고 바람.
- Software time delay
- 장점
- 이해 하기 쉽다. Timer, Interrupt등의 이해를 필요로 하지 않는다.
- Delay function 실행 중에도 다른 Interrupt routine의 실행이 가능 하다.
- 단점
- Delay time이 부정확 하다.
- Delay function 실행 중 다른 Task의 실행이 불가 하다.
- Delay function 실행 중 다른 Interrupt routine이 실행되는 경우 Delay time이 변동 된다.
- Software time delay를 사용 하는 프로그램 예:
- Compare Match Interrupt를 이용하여 일정한 주기를 발생 시키는 프로그램 예
- 장점
- 정확한 Delay time를 구현한다.
- Timer Interrupt를 사용하기 때문에 Time delay 동작 중에도 다른 프로그램의 지속적인 실행이 가능 하다.
- Compare Match Interrupt를 시용하기 때문에 Timer/Counter(TCNTx)를 사용하는 다른 동일한 TCNTx를 사용하는 Interrupt 발생 모듈(OCRxA-C)의 이용이 가능 하다.
- 단점
- Embedded processor에 대한 이해(Interrupt 와 Timer에 대한 이해)가 필요 한다.
- 실험을 위한 준비
- PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
- 실험 방법
- GCC_c_asm_timer1_CTC_int_led.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_timer1_CTC_int_led.hex 파일이 생성된다.
- GCC_c_asm_timer1_CTC_int_led.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 LED가 1SEC 간격으로 점멸한다.
- UART0 통신선이 연결되고 모니터 프로그램이 실행 중인 경우 모니터에 "Timer 1 Overflow Interrupt(Clock Gen.)" 메세지가 출력된다. 이 실험은 UART0 통신선을 연결하지 않아도 문제가 발생하지 않는다. 그러나 프로그램 개발 단계에 Debugging을 위하여 UART0 통신선을 연결하고 실험하는 것이 좋다.
- Overflow Interrupt를 이용하여 일정한 주기를 발생 시키는 프로그램 예
- 장점
- 정확한 Delay time를 구현한다.
- Timer Interrupt를 사용하기 때문에 Time delay 동작 중에도 다른 프로그램의 지속적인 실행이 가능 하다.
- 단점
- Embedded processor에 대한 이해(Interrupt, Timer에 대한 이해)가 필요 한다.
- Overflow Interrupt를 시용하기 때문에 Timer/Counter(TCNTx)를 함께 사용하는 다른 Interrupt 발생 모듈(OCRxA-C)의 이용이 불가능 하다.
- 실험을 위한 준비
- PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
- 실험 방법
- GCC_c_asm_timer1_OVF_int_led.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_timer1_OVF_int_led.hex 파일이 생성된다.
- GCC_c_asm_timer1_OVF_int_led.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 LED가 1SEC 간격으로 점멸한다.
- UART0 통신선이 연결되고 모니터 프로그램이 실행 중인 경우 모니터에 "Timer 1 Overflow Interrupt(Clock Gen.)" 메세지가 출력된다. 이 실험은 UART0 통신선을 연결하지 않아도 문제가 발생하지 않는다. 그러나 프로그램 개발 단계에 Debugging을 위하여 UART0 통신선을 연결하고 실험하는 것이 좋다.
- 일정 주기를 발생 시키는 Timer와 Software Delay 함수를 이용한 Time delay
- 장점
- 비교적 정확한 Delay time, 넓은 범위의 Delay time을 구현 할 수 있다.
- Delay time 함수 실행 중 External interrupt이 실행 되어도 비교적 정확한 Delay time을 구현 할 수 있다.
- 단점
- Embedded processor에 대한 이해(Interrupt, Timer에 대한 이해)가 필요 한다.
- Time delay에 사용 하는 Timer를 다른 목적으로 사용 하기 어렵다.
- 실험을 위한 준비
- PD0 와 PD1에 Push Button Switch를 연결한다.
- PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
- 실험 방법
- GCC_c_asm_timer2_delay_ovf_int.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_timer2_delay_ovf_int.hex 파일이 생성된다.
- GCC_c_asm_timer2_delay_ovf_int.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- UART0 통신선이 연결되고 모니터 프로그램이 실행 중인 경우 모니터에 "LED Flashing" 메세지가 출력된다. 이 실험은 UART0 통신선을 연결하지 않아도 문제가 발생하지 않는다. 그러나 프로그램 개발 단계에 Debugging을 위하여 UART0 통신선을 연결하고 실험하는 것이 좋다.
- 프로그램을 실행 하면 1mSec Delay 함수를 사용하여 LED 가 2Sec 주기로 점멸 한다.
- PD0 SW를 누르고 있으면 100uSec Delay 함수를 사용하여 LED 가 1Sec 주기로 점멸 한다.
- PD1 SW를 누르고 있으면 10uSec Delay 함수를 사용하여 LED 가 0.1Sec 주기로 점멸 한다.
- Real time clock(Timer를 이용)를 이용한 Time delay
- 장점
- 하나의 Timer(Timer0)를 사용하여 넓은 범위의 Time delay(mSec와 uSec Time delay)와 Real time clock를 구현 할 수 있다.
- Delay time 함수 실행 중 External interrupt이 실행 되어도 정확한 Delay time을 구현 할 수 있다.
- 단점
- 넓은 범위의 Time delay(mSec와 uSec Time delay)와 Real time clock이 필요 없는 경우 프로그램이 크고 초보자는 이 함수를 이해(변경) 하기 어렵다.
Embedded system은 실시간으로 장치를 제어하기 위한 목적으로 자주 사용하기 때문에 시간에 관련한 함수(일정한 주기(Time period)를 필요로 하는 경우 또는 일정한 시간 지연(Time dealy) 후에 장치를 제어 하는 경우 등)를 자주 필요로 한다.
LED array와 Push button switch를 사용하는 실험을 위한 회로 구성 예
프로그램의 다른 부분에 영향을 미치지 않고 오직 시간 지연 만을 갖는 명령을 실행 하도록 하여 Time delay 기능을 구현 한다.
위와 같은 이유 때문에 처음 Embedded system을 배우는 사람이 쉽고 간단하게 Delay function를 구현 하는데 적합 하다.
Timer1의 Compare Match Interrupt를 이용하여 일정한 주기의 Interrupt를 발생시키는 프로그램(Timer 초기화와 Interrupt Service Routine) 예 이다.
Timer1의 Overflow Interrupt를 이용하여 일정한 주기의 Interrupt를 발생시키는 프로그램(Timer 초기화와 Interrupt Service Routine) 예 이다.
Delay time 설정(넓은 범위의 Delay time 설정 등)을 가능 하게 하기 위하여 Software로 Counter 값과 Timer 설정(기본 Delay time 설정)을 하고 정확한 Time delay를 위하여 기본 Delay time은 Timer에 의하여 결정 되도록 한다.
Arduino(wiring.c)에서 timer0를 이용 하여 Time delay 와 clock를 구현 하는 프로그램이다. 이 예는 wiring.c를 ATmega2560과 ATmega128에 적합 하도록 단순화 하고 초보자도 이해 하기 쉽도록 프로그램 설명을 추가 하였다.
주: 이 자료는 c 언어를 이용한 Real time clock 예 이다. 그러나 Timer를 이용하는 중요한 예이기 때문에 이곳에 참고자료로 첨부하였다.
참고자료: Arduino의 wiring.c를 응용(timer0 사용) 하여 mSec clock를 구현 하고 이를 이용 하여 LED의 회전 방향을 제어(SW 이용) 하는 C++ 프로그램 예
- External interrupt와 Timer를 이용한 Time delay
- 장점
- Timer에 의하여 정확한 Delay time이 구현 된다.
- Time delay가 Hardware(Timer)에 의하여 구현되기 때문에 Time delay 동작이 실현 되는 동안 다른 Routine의 실행이 용이 하다.
- 단점
- Embedded processor에 대한 이해(External interrupt, Timer에 대한 이해)가 필요 한다.
- Time delay에 사용 하는 Timer를 다른 목적으로 사용 하기 어렵다.
- External interrupt와 Timer를 이용한 Time delay 프로그램 예:
- External Interrupt와 Timer Interrupt를 이용한 Debouncing 예
- Timer를 이용한 Event Couting 프로그램 예
- Event Counting 프로그램 설명
- Timer1의 TCNT1 Register를 Event Counting 목적으로 사용 한다.
- Timer1의 Input Capture Register는 Event Counting(TCNT1)을 Capture 하기 위한 Rg로 사용 한다.
- Timer3A의 Output Compare(OC3A)를 측정 주기(1Sec) 발생 목적으로 사용 한다.
- Timer0의 Output Compare(OC0)를 실험에 필요한 피 측정 Event 발생 장치로 사용 한다.
- Timer2 는 LCD 출력, Keypad Debouncing을 위한 Time Delay 를 위하여 사용 하였다.
- 실험을 위한 준비
- Event 신호 연결 : Event 신호 출력단자(OC0(PB4)) --> Timer1 Counter 신호 입력(T1(PD6))에 연결 한다.
- Input Capture 신호 연결 : 측정 주기 신호(OC3A(PE3)) --> Timer1A의 Input Capture 입력 단자(ICP1(PD4))에 연결 한다.
- AVR에 Keypad를 연결한다.
- AVR에 LCD display module의 신호를 연결한다.
- 실험 방법
- GCC_c_asm_event_counter.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_event_counter.hex 파일이 생성된다.
- GCC_c_asm_event_counter.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- UART0 통신선이 연결되고 모니터 프로그램이 실행 중인 경우 모니터에 "Event counter testing" 메세지가 출력된다. 이 실험은 UART0 통신선을 연결하지 않아도 문제가 발생하지 않는다.
- * Key: Event Speed Up: Event 발생 주기를 빠르게 한다.
- # Key: Event Speed Dpwn: Event 발생 주기를 느리게 한다.
- * , # Key를 입력하면 모니터에 새로 설정된 eventSpeed 와 eventTime 이 출력되고 LCD에는 측정된 Event No 가 출력된다.
- PWM를 이용한 전력제어 프로그램 예
- PWM를 이용한 전력제어 프로그램 설명
- PWM(Timer1)를 이용하여 LED 의 밝기(실효 전력)를 제어 한다.
- Timer3 Overflow Interrupt는 PWM의 Duty를 Update 하는 주기(100mSec) 신호를 발생(SW를 계속 누르고 있는 경우 밝기가 점점 밝아 지거나 어두어 지도록 제어) 시킨다.
- PD0 SW를 누르고 있으면 LED가 점점 밝아 진다. LCD 상단에 PWM Duty가 표시 됨.
- PD1 SW를 누르고 있으면 LED가 점점 어두워 진다.
- 실험을 위한 준비
- PD0 와 PD1에 Push Button Switch를 연결한다.
- PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
- 실험 방법
- GCC_c_asm_led_PWM_bright_contorl.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_led_PWM_bright_contorl.hex 파일이 생성된다.
- GCC_c_asm_led_PWM_bright_contorl.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- PD0 SW를 누르고 있으면 LED가 점점 밝아 진다. LCD 상단에 PWM Duty가 표시 됨.
- PD1 SW를 누르고 있으면 LED가 점점 어두워 진다.
- Input Capture Mode를 이용한 Pulse Width 측정 프로그램 예
- Pulse Width 측정 프로그램 설명
- Timer1의 Input Capture Register는 펄스 폭을 측정 하기 위한 Rg로 사용 한다.
- Timer1A의 Output Compare Register(OCR1A)는 피 측정 펄스를 발생 시키기 위하여 사용 한다.
- 실험을 위한 준비
- 측정 신호 연결 : 펄스폭 측정을 위한 신호(OC1A(PB5)) --> Timer1A의 Input Capture 입력 단자(ICP1(PD4))에 연결 한다.
- AVR에 Keypad를 연결한다.
- AVR에 LCD display module의 신호를 연결한다.
- 실험 방법
- GCC_c_asm_input_capture_pulse_width_meas.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_input_capture_pulse_width_meas.hex 파일이 생성된다.
- GCC_c_asm_input_capture_pulse_width_meas.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- * Key: Keypad의 * Key를 누르면 Pulse 폭이 넓어 진다.
- # Key: Keypad의 # Key를 누르면 Pulse 폭이 좁아 진다.
- Digital Clock 프로그램 예
- Digital Clock 프로그램 설명
- Timer1 Over flow Interrupt를 이용 하여 1 Sec 주기를 발생 시킨다.
- 프로그램을 실행 하면 시간이 0시 0분 0초로 최기화 된다.
- 시간 설정 Key(#)를 이용 하여 시간을 설정 한다.
- 실험을 위한 준비
- AVR에 Keypad를 연결한다.
- AVR에 LCD display module의 신호를 연결한다.
- 실험 방법
- GCC_c_asm_digital_clock_timer1.zip 파일을 Download하여 압축을 해제한다.
- Build → Build Solution 를 실행 하면 프로그램이 Build 되어 GCC_c_asm_digital_clock_timer1.hex 파일이 생성된다.
- GCC_c_asm_digital_clock_timer1.hex 파일을 Target Board에 Upload 하고 프로그램을 실행한다.
- 실험:
- 프로그램을 실행 하면 시간이 0시 0분 0초로 최기화 된다.
- 시간 설정 Key(#)를 이용 하여 시간을 설정 한다.
- ATmega128 timer - ASM 관련 페이지 보기
External interrupt 가 발생 하면 Time delay timer가 Start 되고 설정된 Time delay 후에 Timer interrupt 가 발생 되도록 한다.
외부 Interrupt 0번과 Timer1의 Output Compare Interrupt를 이용 Key가 눌려질 때 발생 하는 Bouncing 문제를 해결(Debouncing) 방법 등을 이해 하기 위한 예 이다.
Timer1의 TCNT1 Register를 이용 하여 Event를 Counting 하는 예 이다.
주: 이 예에서는 External Interrupt Service Routine에서 다시 Timer2 Interrupt를 사용한다. Interrupt Service Routine을 Nesting 하여 사용하는 것은 가능한 피하는 것이 좋다.
참고자료: Keypad Interfacing
Keypad에서 입력된 제어 문자(* , #)를 이용하여 Event 발생 주기를 변경 한다.
PWM(Timer1)를 이용하여 LED 의 밝기(실효 전력) 제어)를 제어하는 예 이다.
Timer1A의 Input Capture Register를 이용 하여 펄스 폭을 측정 하는 예 이다.
참고자료: Keypad Interfacing
Keypad에서 입력된 제어 문자를 이용하여 피 측정 신호의 Pulse 폭을 변경 한다. 측정 결과는 LCD에 PWM Duty로 표시 됨.
참고자료: Keypad Interfacing