(Mode CTC) Trong Vi Điều Khiển AVR Atmega16 / 32 - CodeVisionAVR

Giới thiệu

Nói chung, chế độ so sánh được sử dụng để tạo ra các sự kiện định kỳ hoặc để tạo ra các dạng sóng.

Trong chế độ so sánh, có một thanh ghi so sánh, nơi chúng ta có thể đặt giá trị để so sánh với giá trị thanh ghi Bộ định thời / bộ đếm. Khi giá trị so sánh khớp với giá trị thanh ghi bộ đếm thời gian / bộ đếm, một kết quả so sánh sẽ xảy ra. Sự kiện đối sánh so sánh này có thể được sử dụng để tạo dạng sóng.

Trong ATmega 16/32, Timer đếm lên cho đến khi giá trị của thanh ghi TCNT0 (Timer/counter register) bằng với nội dung của OCR0 (Compare register). Ngay sau khi TCNT0 bằng OCR0, một hoạt động so sánh xảy ra, sau đó timer sẽ bị xóa và cờ OCF0 sẽ được thiết lập.

Cờ OCF0 nằm trong thanh ghi TIFR.

Wave generation

Sử dụng Normal mode & CTC mode:

TCCR0: Thanh ghi điều khiển Timer / counter

Bit 7 - FOC0: Force compare match

Sau khi thiết lập bit này, bộ đếm thời gian buộc phải khớp, tức là thiết lập cờ so sánh đầu ra.

Bit 6, 3 - WGM00, WGM01- Bit chọn chế độ Timer0

WGM00 WGM01
Timer0 mode selection bit
0 0 Normal
0 1
CTC (Clear timer on Compare Match)
1 0
PWM, Phase correct
1 1 Fast PWM

Vì vậy, chúng ta có thể tạo ra một sóng vuông với các dạng sóng PWM trên chân OC0 (chân so sánh đầu ra) bằng cách sử dụng các chế độ khác nhau.

Bit 5, 4- COM01:00 (compare output mode)

COM01: 00 điều khiển hành vi của chân OC0, tuy nhiên, bit DDR của chân OC0 tương ứng phải được đặt để làm cho chân OC0 làm đầu ra.

Waveform Generation trên chân OC0 (PB3)

Dưới đây là bảng xác định hành vi của chân OC0 cho chế độ Normal và CTC (tức là WGM00: WGM01 = 00 & 01)

COM01 COM00 Description
0 0
The normal port operation, OC0 disconnected.
0 1
Toggle OC0 on compare match
1 0
Clear OC0 on compare match
1 1
Set OC0 on compare match

Bit 2:0 - CS02:CS00: Clock Source Select

Các bit này được sử dụng để chọn nguồn xung nhịp. Khi CS02: CS00 = 000, thì bộ định thời sẽ dừng. Khi nó nhận giá trị trong khoảng từ 001 đến 101, nó sẽ nhận được nguồn xung nhịp và bắt đầu làm bộ timer.

CS02

CS01

CS00

Description

0

0

0

No clock source (Timer / Counter stopped)

0

0

1

clk (no pre-scaling)

0

1

0

clk / 8

0

1

1

clk / 64

1

0

0

clk / 256

1

0

1

clk / 1024

1

1

0

External clock source on T0 pin. Clock on falling edge

1

1

1

External clock source on T0 pin. Clock on rising edge.

Tạo sóng vuông

1. Sóng vuông sử dụng mode Normal:

Để tạo sóng vuông ở mode Normal, chúng ta có thể đặt bit COM làm chế độ bật tắt (COM01: 00 = 01), do đó chân OC0 sẽ được bật tắt trên mỗi lần so sánh và sóng vuông sẽ được tạo ra.

void main ( )

{

    DDRB = DDRB|(1<<3); 

    TCCR0 = 0x11;   /* normal mode, clk- no pre-scaling */

    OCR0 = 100; /* compare value */

    while (1);

}

Tạo dạng sóng bằng mode Normal

Ở chế độ bình thường, khi một trận đấu xảy ra, chân OC0 sẽ chuyển đổi và bộ đếm thời gian tiếp tục đếm lên cho đến khi nó đạt đến giá trị cao nhất.

Tần số của sóng vuông:

  • Giả sử dạng sóng Fosc = 8MHz, T = 0,125 μs.
  • Khoảng thời gian của sóng vuông: 2 x 256 x 0,125 μs = 64 μs
  • Tần số của sóng = 1/64 μs = 15,625 kHz.

2. Square wave Using CTC mode:

Đây là một chế độ tốt hơn so với chế độ Normal để tạo ra sóng vuông vì tần số của sóng có thể được điều chỉnh dễ dàng bằng cách sử dụng thanh ghi OCR0. Xem hình dưới

Tạo dạng sóng bằng chế độ CTC

Như bạn có thể thấy, khi một trận so sánh xảy ra, giá trị bộ đếm thời gian sẽ trở thành 0.

void main ( )

{

    DDRB = DDRB|(1<<3); /* PB3 (OC0) as output */   

    TCCR0 = 0x19;       /* CTC mode, toggle on compare match,

                            clk- no pre-scaling */ 

    OCR0 = 200;         /* compare value */

    while (1);

}

Tần số của sóng vuông:

  • Giả sử dạng sóng Fosc = 8MHz, T = 0,125 μs.
  • Khoảng thời gian của sóng vuông: 2 x (OCR0 + 1) x 0,125 μs  = 2 x 201 x 0,125 μs = 50,25 μs
  • Tần số của sóng vuông = 1 / 50,25 μs = 19,9 KHz.

Chúng ta có thể thay đổi giá trị của OCR0 trong thời gian chạy, để tạo ra các xung khác nhau

void main ( )
{
    DDRB |= (1<<3);     /*PB3 (OC0) as output */    
    while (1)
    {
        OCR0 = 69; 
        /* CTC, set on match, no prescaler */             
        TCCR0 = 0x39; <=> TCCR0 = (1<<WGM01)|(1<<COM01)|(1<<COM00)|(1<<CS00);   
        while ((TIFR&(1<<OCF0)) == 0);  /* monitor OCF0 flag */
        TIFR = (1<<OCF0);/* Clear OCF0 by writing 1 */
        OCR0 = 99;
        /* CTC, clear on match, no prescaler */       
        TCCR0 = 0x29; <=> TCCR0 = (1<<WGM01)|(1<<COM01)|(0<<COM00)|(1<<CS00);    
        while ((TIFR&(1<<OCF0)) == 0); 
        TIFR = (1<<OCF0);/* Clear OCF0 by writing 1 */
    }
}

Ngõ ra:

Demo

Nhận xét

  1. Free Spins No Deposit - How to Claim Free Spins from Casinos
    When the casino has a 통장 협박 대처법 good selection of 더킹 카지노 사이트 free spins, you can then m 2 슬롯 cash out your winnings 바카라게임사이트 using the bonus. Bonus codes. You can claim 바카라 사이트 추천 free spins and

    Trả lờiXóa
Mới hơn Cũ hơn