You are on page 1of 21

4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

BẠN ĐANG TÌM KIẾM ĐIỀU GÌ?

Vút bay... 

Thấy bài viết hữu ích? Hãy bình chọn nó ở hệ thống Rate Node dưới mỗi bài viết để động viên tác già!

— Cộng đồng Arduino Việt Nam (/)

(/)

 Arduino.vn (http://arduino.vn/) Nào cùng làm (http://arduino.vn/nao-cung-lam) AVR-Xuất xung với tần số và độ rộng theo ý muốn

Group Facebook
AVR-Xuất xung với tần số và độ rộng theo ý muốn (https://www.facebook.com/groups/Ardui
để trao đổi nhanh hơn với BQT và các tác
giả!
Nick Chung (/users/nick-chung) gửi vào Thứ bảy, 7 Tháng 1, 2017 - 08:30

69587 LƯỢT XEM (/TUTORIAL/1423-AVR-DIEU-KHIEN-DONG-CO-SERVO-SIEU-CHUAN-VOI-BIEN-DO-GOC-CUC-NHO)

Mô tả dự án: 

Tiếp tục chuỗi bài: Điều khiển pin bằng ngôn ngữ chính thống. 

Bài viết này sẽ giúp bạn tạo một xung PWM có tần số và độ rộng xung theo ý muốn. 

1 Bài 3: Sử dụng thanh ghi như một bộ định thời và


đếm sự kiện (timer/counter+interrupt) (https://www.facebook.com/groups/Ardui

Chủ đề này đã được bạn NTP_PRO viết rất kĩ, hãy tìm hiểu về nó nhé.
iNut Platform - Hệ sinh …
Link: http://arduino.vn/bai-viet/411-timer... (http://arduino.vn/bai-viet/411-timercounter-tren-avrarduino)

Nếu thấy chưa rõ phần nào hãy chủ động search goocle nha.

Tương lai sẽ có các bài viết với ví dụ minh họa về ngắt, các bạn hãy ủng hộ nhé ^^.

2 Bài 4: Chính là tiêu đề của bài viết này “Tạo xung


theo ý muốn”
1: Làm sao để tạo xung?
Yêu cầu: Tạo xung vuông với tần số khoảng 1khz, độ rộng xung là 10%.

Liên hệ Mr. Đạt ZN 037.3998.468 tư vấn


Dùng Dùng đồ án môn học
digitalWrite analogWrite
(http://arduino.vn/reference/digitalwrite) (http://arduino.vn/reference/analogwrite)
Liên hệ Mr. Thân 097.111.3732 để tư vấn
thiết kế PCB chất lượng cao 2-40 lớp 

Cộng đồng Arduino Việt …


Thích Trang 28K lượt thích

Cộng đồng Intel Galileo V…


Thích Trang 3,2K lượt thích

Mục
Mục lục
lục Cộng đồng Raspberry Pi …
Thích Trang 5,6K lượt thích

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 1/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  ĐĂNG NHẬP
  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

1 void setup() 
2 {
pinMode(13, OUTPUT);
1 void setup() 
3
2 {
4 }
analogWrite(5, 25); TẠO TÀI KHOẢN MỚI (/USER/REGISTE
3
5 void loop()
4 // 25/256=10% YÊU CẦU MẬT KHẨU MỚI (/USER/PASS
6 {
5 }
Connect
7 digitalWrite(13, HIGH);
6 void loop() Mã kiểm tra
8 delayMicroseconds(100);
7 { Vui lòng nhập vào mã kiểm tra ở ô bên cạ
9 digitalWrite(13, LOW);
8 }
delayMicroseconds(900); Tôi không phải là người
10
máy reCA
11 } Bảo mật - Đ

 
Đăng
Đăng nhập
nhập
 

Về bản chất hàm analogWrite

• Không cần khai báo pin. Cộng đồng Arduino Việt…


Việt…

• Tần số mặc định trên pin 5,6 là 976 Hz (uno r3), trên pin 3, 11 là 976 Hz (Leonardo).
• Tần số mặc định trên các pin còn lại là 490 hz.
• Nó truy cập trực tiếp lên các thanh ghi nên không ảnh hưởng đến tốc độ sử lý . (bạn sẽ biết điều đó ngay bây giờ).
Chạy mô phỏng trên
proteus (http://arduino.vn/bai-viet/291-cach-xuat-file-hex-tu-arduino-ide-va-mo-phong-arduino-tren-phan-
mem-proteus)

Chia sẻ tình yêu với


1 void setup()

2 {
(http://arduino.vn/bai-
3 pinMode(13, OUTPUT);
viet/diem-cong-
4 analogWrite(5, 25); dong/giai-thuong)
}
5
 Arduino
(http://arduino.vn/bai-
6  

7 void loop()
viet/diem-cong-
8 {
dong/giai-thuong) 
9 digitalWrite(13, HIGH); (http://arduino.vn/bai-
10 delayMicroseconds(100); viet/diem-cong-
11 digitalWrite(13, LOW); dong/giai-thuong)
12 delayMicroseconds(900);
BÌNH LUẬN GẦN ĐÂY
13 }

BÀI ĐỌC NHIỀU


 

mã số thuế (https://masocongty.vn)

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 2/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

(http://k1.arduino.vn/img/2017/01/06/0/3493_12315469-1483692797-0-test-1.png)

So sánh DigitalWrite/port AnalogWrite

Điều khiển chính xác, tần số


Có tính ổn định cao.
cao,
Ưu điểm Có thể tùy chỉnh tần số và độ
Hoạt động độc lập và song
rộng bằng delay.
song với các tiến trình.

Tần số thấp.
Ảnh hưởng tới tốc độ sử lý 1 Tần số cố định là 976 hz (490
Nhược điểm
luồng. hz).
Phụ thuộc delay.

2: Truy cập thanh ghi điều khiển để thay đổi tần số


2.1: Cách tạo ra xung PWM (http://arduino.vn/reference/xung-pwm) .

Cấp một xung nhịp P_clock vào bộ đếm Counter, Xung P_clock được lấy ra từ bộ chia tần số hệ thống F_clock. Mỗi
một xung P_clock sẽ làm bộ đếm Counter tăng thêm một giá trị, khi giá trị đạt max (tràn số) thì counter lại được đặt
về 0 (Fast PWM) hoặc lại đếm lùi về 0 (Phase correct), quá trình này sẽ được lặp đi lặp lại .

Tiếp đến, bộ so sánh sẽ kiểm tra giá trị của bộ đếm Counter với một giá trị đặt trước Value, giá trị lấy ra từ bộ so sánh
cũng chính là dạng xung PWM có tần số P_clock, độ rộng xung là tỷ số của Value với Counter.

(http://k3.arduino.vn/img/2017/01/06/0/3453_81215469-1483692791-0-so-do-tao-xung.png)

2.2: Truy cập cài đặt các thanh ghi


Trên AVR 168/328, Việc tạo xung được hỗ trợ bởi 3 timer là TIMER 0 (8 bit), TIMER 1 (16 bit), TIMER 2 (8 bit). Mỗi
Timer bao gồm 2 thanh ghi dữ liệu A-B, Bằng cách truy cập và thay đổi thông số của các thanh ghi, chúng ta sẽ cài đặt pin
ra, bộ chia tần, đặt ngắt Value, lựa chọn kiểu Counter (xung răng cưa/ tam giác), kiểu so sánh, đặt ngắt tràn cho
Counter…

AVR là mình gọi tắt của con Atmega - cái con vi điều khiển của con arduino đó các bạn

Trên AVR 328, Chúng ta có 6 pin hỗ trợ xuất xung.

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 3/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

(http://k3.arduino.vn/img/2017/01/06/0/3452_81215469-1483692774-0-atmega328---pwm.jpg)

Một vài thuật ngữ

Lấy ví dụ trên TIMER 1:

• TCCR_1_A(Timer/Counter_1 _Control Register_ A)


• TCCR_1_B(Timer/Counter_1 _Control Register _B)
• TCNT_1(Timer/Counter Register )
• ICR_1(Input Capture Register) 
• OCR_1_A/B(Output Compare Register)
2.3 Đầu ra phụ thuộc vào kiểu so sánh “inverted” hay "none-inverted":
Ví dụ chọn kiểu đếm răng cưa (FAST PWM), kiểu so sánh thường ”none-inverted”. Tín hiệu ra là HIGH khi Value
lớn hơn Counter, là LOW khi Value nhỏ hơn Counter. Khi chọn là “inverted”, tín hiệu đầu ra sẽ bị đảo lại so với
trường hợp trên.

(http://k1.arduino.vn/img/2017/01/06/0/3492_12315469-1483692781-0-avr-pwm-03.jpg)

Kiểu đếm Counter tam giác cũng như vậy.

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 4/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

(http://k2.arduino.vn/img/2017/01/06/0/3454_88215469-1483692786-0-avr-pwm-06.jpg)

Tần số xung phụ thuộc vào xung nhịp P_clock (sau bộ chia tần) và dạng đếm counter.

Như đã biết, mỗi  P_clock thì counter tăng lên 1, nếu bộ đếm có cỡ là 8 bit thì cần 256 xung để đếm từ BOTTOM lên
TOP (đếm răng cưa). Nếu chọn kiểu tam giác, khi Counter đạt TOP nó sẽ tiếp tục đếm lùi, khi đó nó cần 256*2 xung
P_clock để đi hết một chu kỳ đếm.

Khi đó công thức tổng quát để tính tần số PWM là :

F_pwm =P_clock  /  (Top_value+1).    Fast Pwm.

Hoặc

F_pwm=P_clock  / (2*( Top_value+1)) .   Phase Cerrect Pwm.

Với P_clock =F_clock  / Prescaller.

Ví dụ

Chọn kiểu Fast Pwm, tần số thạch anh F_clock=16mhz, sử dụng bộ đếm timer 0 (8 bit = 1 byte) tương đương
TOP_value=255+1. Giảm tầm số Counter xuống còn P_clock = 16mhz/64=250kHz. (Prescller=64).

Khi đó tần số của xung ra:

F_pwm=250khz/256=976.562 Hz.

Cũng như trên, nhưng chọn kiểu Phase Cerrect Pwm, tần số xung ra F_pwm=488.28 Hz.

3 1: TIMER 0 (8 BIT)
 3  2
   7 bit  6 bit   5 bit   4 bit   1 bit   0 bit 
bit  bit 

TCCR0A COM0A1 COM0A0  COM0B1 COM0B0 -  -  WGM01 WGM00 

Timer/Counter Control Register 0 A

 5  4
   7 bit  6 bit   3 bit   2 bit   1 bit   0 bit 
bit  bit 

TCCR0B FOC0A FOC0B - - WGM02  CS02  CS01 CS00 

Timer/Counter Control Register 0 B

Timer/ counter 0 hỗ trợ 2 đầu ra là OC0A  và OC0B tương ứng với (PD 5- pin ~5) (PD6 –pin  ~6).

Chọn kiểu so sánh (thường / đảo)


Cài cho PD5

COM0A1 COM0A0  DESCRIPTION

0 0   OC0A disabled

Mục
Mục lục
lục  WGM02 = 0: Normal Port Operation, OC0A Disconnected
0 1 
 WGM02 = 1: Toggle OC0A on Compare Match

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 5/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

1 khảo 0  Nào cùng


 None-inverted modebài
(HIGHTải
at bottom, LOWthi
on Match)
  Tham làm! Đăng về Cuộc Về chúng tôi Bài tập

1 1   Inverted mode (LOW at bottom, HIGH on Match)

Applies only to PWM modes

Cài cho PD6

COM0B1 COM0B0  DESCRIPTION

0 0   OC0B disabled

0 1   Reserved

1 0   None-inverted mode (HIGH at bottom, LOW on Match)

1 1   Inverted mode (LOW at bottom, HIGH on Match)

Applies only to PWM modes

Cài bộ chia tần số

 CS12  CS11   CS10   DESCRIPTION

0 0  0  Chọn để không kích hoạt TIMER này

0 0  1   No Prescaling =F_Clock

0 1  0   F_Clock / 8

0 1  1   F_Clock / 64

1 0  0   F_Clock / 256

1 0  1   F_Clock / 1024

 Không dùng F_clock, đặt một xung P_clock vào pin T1


1 1  0  (PD5), xung kích clock có chuyển mức trạng thái 5v-
>0v. (Sườn xuống -Falling)

 Không dùng F_clock, đặt một xung P_clock vào pin T1


1 1  1  (PD5), xung kích clock có chuyển mức trạng thái 0v-
>5v. (Sườn lên-Rasing)

CS bits

Chọn kiểu Counter (răng cưa/ tam giác)


 MODE WGM02 WGM01 WGM00  TOP  DESCRIPTION

0 0 0  0     Normal 

1 0 0  1   0xFF  PWM Phase Corrected

2 0 1  0   OCRA  CTC

3 0 1  1   0xFF  Fast PWM 

4 1 0 0  -  Reserved 

5 1  0 1   OCR0A   PWM Phase Corrected 

6 1  1  0   -   Reserved

7 1  1  1   OCR0A   Fast PWM 

Waveform Generator Mode bits

<pin 6> <PD6> <pin 5><PD5>

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 6/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

 
void setup(){
Tham khảo Nào cùng làm! Đăng bài Tải về
void setup(){
Cuộc thi Về chúng tôi Bài tập
  //B1:
  //B1:   TCCR0A=0;TCCR0B=0;
TCCR0A=0;TCCR0B=0;   // reset lại 2 thanh ghi
  // reset lại 2 thanh ghi   //B2:
  //B2:     DDRD |= (1 << PD5);
    DDRD |= (1 << PD6);     // pin 5 là output
    // pin 6 là output   //B3:
  //B3:  
      TCCR0A |= (1 << WGM01) | (1 << WGM00);
    TCCR0A |= (1 << WGM01) | (1 << WGM00);     // chọn Fast Mode     TCCR0A |= (1 << COM0B1);
    // chọn Fast Mode     // đầu ra kiểu thường (none-inverting)
    TCCR0A |= (1 << COM0A1);     TCCR0B |= (1 << CS02)|(1 << CS00);
    // đầu ra kiểu thường (none-inverting)     //prescaler = 1024, P_clock=16mhz/1024=15,625 khz
    TCCR0B |= (1 << CS01);     // Tần số xung F_pwm=15,625 khz/256=61,0351 hz
    //prescaler = 8, P_clock=16mhz/8=2mhz    
    // Tần số xung F_pwm=2 mhz/256=7812,5 hz     OCR0B = 25;
        // Value=25
    OCR0A = 128;     // Độ rộng xung= 25/256=10%
    // Value=128 }
    // Độ rộng xung= 128/256=50%  
} void loop(){
void loop(){  
  }
}

Kết quả: Kết quả:

F=7813 Hz. F=61 Hz

Độ rộng xung = 50%. Độ rộng xung: 10%

Chu kỳ xung: 0,129 ms. Chu kỳ xung: 16,20ms

(http://k2.arduino.vn/img/2017/01/06/0/3455_88215469- (http://k3.arduino.vn/img/2017/01/06/0/3454_81215469-
1483692802-0-test-2-pin6.png) 1483692808-0-test-3-pin5.png)

CODE Tương đương

<pin 6> <PD6> <pin 5><PD5>

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 7/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

1 void setup() 1 void setup()

2 { 2 {

3   3  

4 TCCR0B = 0; 4 TCCR0B = 0;

5 // reset lại thanh ghi 5 // reset lại thanh ghi

6 TCCR0B |= (1 << CS01); 6 TCCR0B |= (1 << CS02) | (1


<< CS00);
7 analogWrite(6, 128);
7 analogWrite(5, 25);
8 // pin 6 là output,
Value=128 8 // pin5, value=25

9 } 9 }

10 void loop() 10 void loop()

11 { 11 {

12 } 12 }

Cảnh báo : Việc thay đổi tần số xung nhịp trên TIMER 0  sẽ gây ảnh hưởng đến
các hàm delay(), delayMicroseconds(), millis(), micros(); , để an toàn hơn bạn hãy giữ
nguyên và dùng hàm analogWrite là đủ rồi

4 TIMER 1 (16 BIT)


Timer/Counter1 có 2 đầu ra là OC1A và OC1B tương ứng với pin ~9 và pin ~10 trên arduino.

 3  2
   7 bit  6 bit   5 bit   4 bit   1 bit   0 bit 
bit  bit 

TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 -  -  WGM11 WGM10 

Timer/Counter Control Register 1 A

 5
   7 bit  6 bit   4 bit   3 bit   2 bit   1 bit   0 bit 
bit 

TCCR1B ICNC1 ICES1 - WGM13 WGM12  CS12  CS11 CS10 

Timer/Counter Control Register 1 B

Kiểu so sánh
COM1A1, COM1A0,
   DESCRIPTION
COM1B1 COM1B0

0 0   Normal port operation, OC1A/OC1B disconnected.

0 1   Mode 9,11,14,15 only: Enable OCR1A only (OC1B disconnected)

1 0   None-inverted mode (HIGH at bottom, LOW on Match)

1 1   Inverted mode (LOW at bottom, HIGH on Match)

Applies only to PWM modes

Bộ chia tần
 CS12  CS11   CS10   DESCRIPTION

0 0  0  Chọn để không kích hoạt TIMER này

Mục 0 0  1   No Prescaling= F_Clock.


Mục lục
lục
0 1  0   F_Clock / 8

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 8/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

0 khảo1  1  làm! F_Clock / 64 bài


  Tham Nào cùng Đăng Tải về Cuộc thi Về chúng tôi Bài tập

1 0  0   F_Clock / 256

1 0  1   F_Clock / 1024

 Không dùng F_clock, đặt một xung P_clock vào pin T1


1 1  0  (PD5), xung kích clock có chuyển mức trạng thái 5v-
>0v. (Sườn xuống -Falling)

 Không dùng F_clock, đặt một xung P_clock vào pin T1


1 1  1  (PD5), xung kích clock có chuyển mức trạng thái 0v-
>5v. (Sườn lên-Rasing)

CS bits

Kiểu counter
 MODE WGM13 WGM12 WGM11 WGM10  DESCRIPTION  TOP

0 0 0  0  0   Normal   0xFFFF

1 0 0  0  1   PWM, Phase Corrected, 8bit  0x00FF

2 0 0  1  0   PWM, Phase Corrected, 9bit  0x01FF

3 0 0 1  1   PWM, Phase Corrected, 10bit  0x03FF

5 0  1  0  1   Fast PWM, 8bit  0x00FF 

6 0  1  1  0   Fast PWM, 9bit  0x01FF 

7 0  1  1 1   Fast PWM, 10bit  0x03FF 

 PWM, Phase and Frequency


8 1  0  0  0  ICR1 
Corrected 

 PWM, Phase and Frequency


9 1  0  0  1  OCR1A 
Corrected 

10 1  0  1  0   PWM, Phase Correct  ICR1 

11 1  0  1  1   PWM, Phase Correct   OCR1A

14 1  1  1  0   Fast PWM  ICR1 

15 1  1  1  1  Fast PWM OCR1A 

Waveform Generator Mode bits (Abbreviated)

Ưu điểm của timer 1 so với timer 0 là nó độ phân giải cao hơn, bộ đếm Counter 0 sẽ bị tràn sau 256 xung
P_clock, còn Counter 1 sẽ tràn sau 512 xung Clock (9 bit) hoặc 1024 xung (10 bit), hoặc 65536 xung (16 bit).  Điều
này giúp ta xuất xung PWM có rộng xung cực kỳ chính xác.

Ưu điểm nữa của Timer 1 là nó cho phép thay đổi giá trị TOP, ví dụ bạn có thể cài đặt ngưỡng tràn là 500 xung P_clock
( thay vì mặc định là 512 xung). Khi đó độ phân giải mặc định là 16 bit.

Còn lại cách dùng thì vẫn như cũ.

PB1 – pin 9 PB2-pin10

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 9/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam


void setup(){
 Tham khảo
   TCCR1A=0; TCCR1B=0;
Nào cùng làm! Đăngvoid
bàisetup(){
Tải về Cuộc thi Về chúng tôi Bài tập
   TCCR1A=0; TCCR1B=0;
   // RESET lại 2 thanh ghi    // RESET lại 2 thanh ghi
  DDRB |= (1 << PB1);   DDRB |= (1 << PB2);
  // Đầu ra PB1 là OUTPUT ( pin 9)   // Đầu ra PB2 là OUTPUT ( pin 10)
   
    TCCR1A |= (1 << WGM11);     TCCR1A |= (1 << WGM11);
    TCCR1B |= (1 << WGM12)|(1 << WGM13);     TCCR1B |= (1 << WGM12)|(1 << WGM13);
    // chọn Fast PWM, chế độ chọn TOP_value tự do  ICR1     // chọn Fast PWM chế độ chọn TOP_value tự do  ICR1
    TCCR1A |= (1 << COM1A1);     TCCR1A |= (1 << COM1B1);
    // So sánh thường( none-inverting)     // So sánh thường( none-inverting)
    ICR1 = 65535;     ICR1 = 30000;
    // xung răng cưa tràn sau 65535 P_clock     // xung răng cưa tràn sau 30000 P_clock
    OCR1A =16838;     OCR1B = 15000;
    // Value=16838 -> độ rộng 25 %     // Value=15000 -> độ rộng 50 %
    TCCR1B |= (1 << CS10)|(1 << CS11);     TCCR1B |= (1 << CS10);
    // F_clock/64=16mhz/64=250 khz     // F_clock/1=16mhz
    //F_pwm=250khz/65536=3.81469 hz     //F_pwm=16mhz/30001=533.315 hz
} }
void loop(){ void loop(){
} }

Kết quả: Kết quả:

F_pwm=3.814hz F_Pwm=533.315 hz

Độ rộng xung: 25 % Độ rộng: 50 %

Chu kỳ xung: 262,50 ms. Chu kỳ: 1.87 ms.

(http://k1.arduino.vn/img/2017/01/06/0/3494_12315469- (http://k2.arduino.vn/img/2017/01/06/0/3456_88215469-
1483692815-0-test-4-pin9.png) 1483692821-0-test-5-pin10.png)

Như vậy việc sử dụng TIMER 1 -16 BIT cũng rất dễ dàng.

5 TIMER 2 (8 BIT)
Timer/Counter 2 phụ trách 2 đầu ra OC2A và OC2B, tương ứng pin ~11 (PB3) và ~3 (PD3).

Timer 0 – 8 bit.

Timer 1 – 16  bit + khả năng thay đổi TOP value

Timer 2 thì lại có thể chia tần ở PRESCALER= 32 hoặc 128. Đó là ưu điểm của timer 2.

 3  2
   7 bit  6 bit   5 bit   4 bit   1 bit   0 bit 
bit  bit 

TCCR2A COM2A1 COM2A0  COM2B1 COM2B0 -  -  WGM21 WGM20 

Timer/Counter Control Register 2 A

 5  4
   7 bit  6 bit   3 bit   2 bit   1 bit   0 bit 
bit  bit 

TCCR2B FOC2A FOC2B - - WGM22  CS22  CS21 CS20 

Timer/Counter Control Register 2 B


Mục
Mục lục
lục
Chọn kiểu so sánh
CÀI CHO PB3 (pin ~11)
arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 10/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

 DESCRIPTION
 
COM2A1
Tham khảo COM2A0
Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

0 0   OC2A disabled

 WGM22 = 0: Normal Port Operation, OC2A Disconnected


0  1 
 WGM22 = 1: Toggle OC2A on Compare Match

1 0   None-inverted mode (HIGH at bottom, LOW on Match)

1 1   Inverted mode (LOW at bottom, HIGH on Match)

Applies only to PWM modes

CÀI CHO PD3 (pin ~3)

COM2B1 COM2B0  DESCRIPTION

0 0   OC2B disabled

0 1   Reserved

1 0   None-inverted mode (HIGH at bottom, LOW on Match)

1 1   Inverted mode (LOW at bottom, HIGH on Match)

Applies only to PWM modes

Bộ chia tần

 CS22  CS21   CS20   DESCRIPTION

0 0  0   Chọn để không kích hoạt TIMER này

0 0  1   No Prescaling  =F_Clock

0 1  0   F_Clock / 8

0 1  1   F_Clock / 32

1 0  0   F_Clock / 64

1 0  1   F_Clock / 128

1 1  0   F_Clock / 256

1 1  1   F_Clock / 1024

CS bits

Chọn kiểu Counter


Mục
Mục lục
lục
 MODE WGM22 WGM21 WGM20  TOP  DESCRIPTION

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 11/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  0 Tham khảo
0
Nào
0
cùng làm!
0
Đăng bài
 0xFF
Tải về Cuộc thi Về chúng tôi
 Normal 
Bài tập

1 0 0 1  0xFF  PWM Phase Corrected

2 0 1 0  OCRA  CTC

3 0 1 1  0xFF  Fast PWM 

4 1 0 0  -  Reserved 

5  1  0 1  OCR0A   PWM Phase Corrected 

6  1  1 0  -   Reserved

7  1  1 1  OCR0A   Fast PWM 

Waveform Generator Mode bits

KHI đó , giá trị TOP_value tất nhiên là bằng 255, vì thanh đếm chỉ có 8 bit.

PD3 (pin ~3) PB3 ( pin ~11)

void setup(){ void setup(){


  TCCR2A =0; TCCR2B=0;   TCCR2A =0; TCCR2B=0;
  //reset   //reset
    DDRD |= (1 << PD3);     DDRB |= (1 << PB3);
    // PD3 output, (pin ~3)     // PB3 output, (pin ~11)
    TCCR2A |= (1 << COM2B1);     TCCR2A |= (1 << COM2A1);
    // so sánh thường ( none-inverting)     // so sánh thường ( none-inverting)
    TCCR2A |= (1 << WGM21) | (1 << WGM20);     TCCR2A |= (1 << WGM21) | (1 << WGM20);
    //  PWM Mode (răng cưa)     //  PWM Mode (răng cưa)
    TCCR2B |= (1 << CS22)|(1 << CS20);     TCCR2B |= (1 << CS21)|(1 << CS20);
    //  prescaler= 128, P_clock=16mhz/128=125 khz     //  prescaler= 32, P_clock=16mhz/32=500 khz
    // F_pwm=125 khz/256=488.28 hz     // F_pwm=500 khz/256=1953.215 hz
   
    OCR2B = 25;     OCR2A = 128;
    // độ rộng xung =25/256=10%     // độ rộng xung =128/256=50%
} }
   
void loop(){ void loop(){
} }

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 12/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam


Kết quả: 
Tham khảo Nào cùng làm! ĐăngKết
bàiquả:Tải về Cuộc thi Về chúng tôi Bài tập

Tần số:  488 hz Độ rộng xung 50 %.

Độ rộng :10 %. Tần số 1953 hz

Chu kỳ: 2,03 ms Chu kỳ: 520 ms

(http://k1.arduino.vn/img/2017/01/06/0/3495_12315469- (http://k3.arduino.vn/img/2017/01/06/0/3455_81215469-
1483692833-0-test-7-pin3.png) 1483692827-0-test-6-pin11.png)

Các bạn hết sức chú ý: Phân biệt DDRB và DDRD khi khai báo chọn PINOUT cho các
chân PORT.
Mình chèn Code dạng text nhằm nhấn mạnh điều này!

6 Ứng dụng
1. Xuất xung 8mhz ra ngoài
Đơn giản là ta sẽ chia cho mẫu số nhỏ nhất là 1.

Kĩ thuật này chỉ áp dụng cho TIMER1 vì nó có thể thay đổi tràn TOP_value.

Có nghĩa chỉ có 2 pin ~9 và ~10 mới có khả năng này

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 13/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

1   Tham khảo
void setup()
Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

2 {

3 TCCR1A = 0;

4 TCCR1B = 0;

5 // RESET lại 2 thanh ghi

6 DDRB |= (1 << PB1);

7 // Đầu ra PB1 là OUTPUT ( pin 9)

8  

9 TCCR1A |= (1 << WGM11);

10 TCCR1B |= (1 << WGM12) | (1 << WGM13);

11 // chọn Fast PWM, chế độ chọn TOP_value tự do ICR1

12 TCCR1A |= (1 << COM1A1);

13 // So sánh thường( none-inverting)

14 ICR1 = 1;

15 // xung răng cưa tràn sau 1 P_clock

16 OCR1A = 0;

17 // xuất mọi lúc

18 TCCR1B |= (1 << CS10);

19 // F_clock=16mhz, P_clock=16/1=16mhz.

20 //F_pwm=16mhz/(ICR1+1)=8mhz

21 }

22  

23 void loop()

24 {

25 }

(http://k2.arduino.vn/img/2017/01/06/0/3453_88215469-1483692769-0-8mhz.png)

2. Xuất xung 16mhz ra ngoài


Theo công thức ngay ở đầu bài viết:

F_pwm = P_clock  /  (Top_value+1).   

Để F_pwm=16mhz, thì TOP_value=0, và P_clock=16mhz.

Điều này là không thể, bởi vì OCR1A (value) nhỏ nhất =0, khi đó nếu  ICR1 (TOP_value) cho bằng 0 thì nó sẽ không
đếm được sự kiện.

3. Điều khiển SERVO với góc siêu chính xác


Thư viện SERVO.h (http://arduino.vn/reference/library/servo/1/gioi-thieu/servo-thu-vien-dung-de-dieu-khien-servo)  mà chúng ta đang dùng
có số góc điều khiển SERVO là số nguyên.(0->180) độ.
Mục
Mục lục
lục
Vậy bạn có muốn điều khiển nó nhích 0.5 độ không ?  Hãy đón đọc bài tiếp theo nhé. 

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 14/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

4. HàmAnalogWrite!

Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập
Tới đây việc tự xây dựng một hàm AnalogWrite sẽ không còn khó nữa. Hiểu lầm lớn nhất của beginner khi sử dụng
AnalogWrite  là đã “đánh đồng” cả 3 bộ TIMER là như nhau, khiến ta không khai thác được nhiều ưu điểm của từng TIMER.

Dưới đây là mã nguồn cho hàm analogWrite:

http://http://garretlab.web.fc2.com/...
(http://http://garretlab.web.fc2.com/en/arduino/inside/arduino/wiring_analog.c/analogWrite.html)

7 Chế độ COUNTER tam giác (PHASE CERRECT PWM.)


Từ đầu đến giờ mình không sử dụng chế độ này, mà chỉ nói đến counter răng cưa. (FAST PWM)

Đó là vì hai chế độ này gần như tương đồng với nhau, PHASE CERRECT chỉ khác ở chỗ : Chu kì đếm tăng lên gấp 2 , tức là
tần số P_clock của PHASE CERRECT nhỏ hơn 2 lần so với FAST PWM. 

8 Sử dụng 2 đầu ra cùng lúc.


Các ví dụ trên là sử dụng độc lập các đầu ra của timer, tinh ý sẽ thấy, ta luôn phải reset lại 2 thanh ghi trước khi muốn đặt
lại bằng phép hợp (toán tử “ |”). Lý do reset vì nó đã được với các thông số  mặc định trước đó.  Tiếp nữa là tần số trên  hai
đầu ra là luôn bằng nhau ( chung một Counter, chung tần số P_clock).

TIMER 0:

1 void setup(){

2 ////////////////////////////////////////////////////

3 TCCR0A=0;TCCR0B=0;

4 // reset lại 2 thanh ghi

5 //B2:

6 DDRD |= (1 << PD6);

7 DDRD |= (1 << PD5);

8 // pin 6, 5 là output

9 //B3:

10  

11 TCCR0A |= (1 << WGM01) | (1 << WGM00);

12 // chọn Fast Mode

13 TCCR0B |= (1 << CS01);

14 //prescaler = 8, P_clock=16mhz/8=2mhz

15 // Tần số xung F_pwm=2 mhz/256=7812,5 hz

16  

17 ///////////////////////////////////////////////////////

18 TCCR0A |= (1 << COM0A1);

19 // đầu ra kiểu thường cho PD6 (none-inverting)

20 TCCR0A |= (1 << COM0B1);

21 // đầu ra kiểu thường cho PD5 (none-inverting)

22  

23 OCR0A = 128; //(chân PD6 ) Độ rộng xung= 128/256=50%

24 OCR0B = 64;// (chân PD5) Độ rộng xung 64/256=25%

25

26

27 }

28  

29  

30 void loop(){

31  

32 }

Mục
Mục lục
lục
 

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 15/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam
 
  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

(http://k2.arduino.vn/img/2017/01/07/0/3457_88215469-1483753311-0-test-8-pin-5-
6.png)
 

TIMER 1:

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 16/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

1   Tham khảo
void setup(){
Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

2 /////////////////////////////////////////////////

3 TCCR1A=0; TCCR1B=0;

4 // RESET lại 2 thanh ghi

5 DDRB |= (1 << PB1)|(1 << PB2);

6 // Đầu ra PB1 và PB2 là OUTPUT ( pin ~9, ~10)

7  

8 TCCR1A |= (1 << WGM11);

9 TCCR1B |= (1 << WGM12)|(1 << WGM13);

10 // chọn Fast PWM, chế độ chọn TOP_value tự do ICR1

11  

12 ICR1 = 10000;

13 // xung răng cưa tràn sau 10001 P_clock

14 TCCR1B |= (1 << CS10)|(1 << CS11);

15 // F_clock/64=16mhz/64=250 khz

16 //F_pwm=250khz/10001=25hz

17 ///////////////////////////////////////////////////

18

19 TCCR1A |= (1 << COM1A1);

20 // So sánh thường cho PB1 ( none-inverting)

21 TCCR1A |= (1 << COM1B1);

22 // So sánh thường cho PB2 ( none-inverting)

23 OCR1A =1000;//(PB1) Value=1000 -> độ rộng 10%

24 OCR1B = 5000; //(PB2) Value=5000 -> độ rộng 50 %

25  

26 }

27  

28 void loop(){

29  

30

31 }

32  

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 17/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

TIMER 2:

1 void setup(){

2  

3 ////////////////////////////////////////////////////////

4 TCCR2A =0; TCCR2B=0;

5 //reset

6 DDRD |= (1 << PD3);// PD3 output, (pin ~3)

7 DDRB |= (1 << PB3);// PB3 output, (pin ~11)

8  

9 TCCR2A |= (1 << WGM21) | (1 << WGM20);

10 // PWM Mode (răng cưa)

11 TCCR2B |= (1 << CS22)|(1 << CS20);

12 // prescaler= 128, P_clock=16mhz/128=125 khz

13 // F_pwm=125 khz/256=488.28 hz

14 //////////////////////////////////////////////////

15 TCCR2A |= (1 << COM2B1);// so sánh thường (PD3) (pin 3) ( none-inverting)

16 TCCR2A |= (1 << COM2A1);// so sánh thường (PB3) (pin 11) ( none-inverting)

17  

18 OCR2B = 25; // (PD3) (pin 3)độ rộng xung =25/256=10%

19 OCR2A = 128;//(PB3) (pin 11) độ rộng 50%

20  

21 }

22  

23 void loop(){

24 }

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 18/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam

  Tham khảo Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

9 Kết
Tất cả các code trên đều được mình kiểm tra & chạy thử, mô phỏng thành công. Yêu cầu bạn thông thạo 
các phép toán BIT (http://arduino.vn/reference/BitMath)  ( BIT MATH (http://arduino.vn/reference/BitMath) ).

Bài viết có thể chưa đủ với bạn, dưới đây là các trang web được mình sưu tầm về phần PWM+TIMER.

• http://garretlab.web.fc2.com/en/ardu...
(http://garretlab.web.fc2.com/en/arduino/inside/arduino/wiring_analog.c/analogWrite.html)

• http://robotika.yweb.sk/skola/AVR/vi...
(http://robotika.yweb.sk/skola/AVR/visionrobo%20com/PWM%20in%20AVR%20v1.0.pdf)

• http://arduino.stackexchange.com/que...
clock-output)
(http://arduino.stackexchange.com/questions/16698/arduino-constant-

• https://www.arduino.cc/en/Tutorial/S... (https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM)
• http://provideyourown.com/2011/analo... (http://provideyourown.com/2011/analogwrite-convert-pwm-to-voltage/)
• http://www.avrfreaks.net/forum/tut-c...
page=all)
(http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-pwm-incomplete?

• http://www.ermicro.com/blog/?p=1971... (http://www.ermicro.com/blog/?p=1971)
• http://www.avrfreaks.net/forum/duty-... (http://www.avrfreaks.net/forum/duty-cycle-adjustment-fast-pwm-mode)
• https://sites.google.com/site/qeewik...
atmega328)
(https://sites.google.com/site/qeewiki/books/avr-guide/pwm-on-the-

• http://www.effusiontech.com/pwm-in-a... (http://www.effusiontech.com/pwm-in-avr.html)
VIDEO HƯỚNG DẪN (http://www.youtube.com/watch?v=iSGJWvONgF0)  dùng Proteus để đo tần số.

Chúng ta lại vượt qua một chướng ngại vật nữa! ^^

Việc đào sâu về phần cứng sẽ giúp ta sử dụng arduino với một hiệu suất cao nhất, điều mà những cải tiến phần mềm sẽ
không thể với tới được.

Chúc bạn sớm có những ứng dụng từ bài viết này .

<Đừng quên đón đọc bài tiếp theo về điều khiển SERVO siêu chuẩn nhé..> 

Tác giả THÁI SƠN.

Từ khóa: 
Mục
Mục lục
lục(/tags/avr-code)
AVR CODE xung PWM (/tags/xung-pwm) phát xung PWM (/tags/phat-xung-pwm) Rate node
phát tần số 8mhz (/tags/phat-tan-so-8mhz)

Chuyên mục: 
arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 19/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam
Intermediate - Có kiến thức cơ bản (/chuong-trinh-mau/level-intermediate-co-kien-thuc-co-
ban)   Tham khảo
Nào cùng làm! (/nao-cung-lam)
Nào cùng làm! Đăng bài Tải về Cuộc thi Về chúng tôi Bài tập

29 thành viên đã đánh giá bài viết này hữu ích.

Port & Mapping


Các bài viết liên quan đến port cơ bản đến nâng cao, giúp bạn nâng cao hiệu suất của mạch Arduino và hơn thế nữa!

(/tutorial/1357- (/tutorial/1359- (/tutorial/1416- (/tutorial/1423- (/tutorial/1441-


dieu-khien-pin- bai-2-kiem- avr-xuat-xung- avr-dieu-khien- avr-oscilloscope-
bang-ngon-ngu- chung-toc-do-khi- voi-tan-so-va-do- dong-co-servo- tu-lam-may-hien-
chinh-thong) dieu-khien-cac- rong-theo-y- sieu-chuan-voi- song-dien-tu-
pin-bang-ngon- muon) bien-do-goc-cuc- tren-nen-arduino-
ngu-avr-so-voi- nho) voi-gia-chua-den-
cac-lenh-tren) 300)
Thích 130 người thích nội dung này. Hãy là người đầu tiên trong số bạn bè của bạn.

CÁC DỰ ÁN ĐƯỢC TRUYỀN CẢM HỨNG

Select any filter and click on Apply to see results

BẠN CÓ MỘT DỰ ÁN HAY GIỐNG THẾ NÀY? CHIA SẺ NHÉ! (/NODE/ADD/RESULTS?EDIT%5BFIELD_POST_REFERENCE%5D%5BUND%5D%5B0%5D%5BNID%5D=%20AVR-XU%E1%BA%A5T%20XUNG%20V%E1

CÁC BÀI VIẾT CÙNG TÁC GIẢ

AVR - Điều khiển động cơ SERVO siêu chuẩn với biên độ góc cực nhỏ!
(/tutorial/1423-avr-dieu-khien-dong-co-servo-sieu-chuan-voi-bien-do-
goc-cuc-nho)
Nick Chung (/users/nick-chung) gửi vào Thứ hai, 9 Tháng 1, 2017 - 08:30

BÌNH LUẬN (/TUTORIAL/1423-AVR-DIEU-KHIEN-DONG-CO-SERVO-SIEU-CHUAN-VOI-BIEN-DO-GOC-CUC-NHO#DISQUS_THREAD)

51210 LƯỢT XEM (/TUTORIAL/1423-AVR-DIEU-KHIEN-DONG-CO-SERVO-SIEU-CHUAN-VOI-BIEN-DO-GOC-CUC-NHO)

Tận dụng ưu thế của TIMER1 trên arduino, việc ứng dụng nó để xuất ra xung điều khiển servo với
độ chính xác cao là rất khả thi. Nó cho phép servo quay với góc cực nhỏ, nhỏ đến cỡ nào ? BẠn
hãy đọc bài này sẽ rõ. 

Rate node

Thích 87 người thích nội dung này. Hãy là người đầu tiên trong số bạn bè của bạn.
24 thành viên đã đánh giá bài viết này hữu ích.

Từ khóa: 
servo siêu chuẩn (/tags/servo-sieu-chuan)

ST7565 | Chuyển động trong lập trình Game và đồ họa | Phần 2


(/tutorial/1321-st7565-chuyen-dong-trong-lap-trinh-game-va-do-hoa-
phan-2)
Nick Chung (/users/nick-chung) gửi vào Thứ sáu, 11 Tháng 11, 2016 - 19:00

BÌNH LUẬN (/TUTORIAL/1321-ST7565-CHUYEN-DONG-TRONG-LAP-TRINH-GAME-VA-DO-HOA-PHAN-2#DISQUS_THREAD)


Mục
Mục lục
lục
13866 LƯỢT XEM (/TUTORIAL/1423-AVR-DIEU-KHIEN-DONG-CO-SERVO-SIEU-CHUAN-VOI-BIEN-DO-GOC-CUC-NHO)

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 20/21
4/10/2021 AVR-Xuất xung với tần số và độ rộng theo ý muốn | Cộng đồng Arduino Việt Nam
Trong bài viết trước, chúng ta đã cùng tìm hiểu một vài nguyên tắc của hiệu ứng chuyển động
  Tham trong
khảo đồ họa.
NàoBàicùng làm!
viết này Đăng
sẽ nối tiếp nội bài Tải dở
dung còn
Tất nhiên là trên arduino cùng lcd st7565 rồi.
về dang
Cuộc
củathi Về chúng
bài trước, tôiđi tiếp
hãy cùng Bàinào.
tập

Rate node

10 thành viên đã đánh giá bài viết này hữu ích.


Thích 33 người thích nội dung này. Hãy là người đầu tiên trong số bạn bè của bạn.

Từ khóa: 
game (/tags/game) st7565 game (/tags/st7565-game) gaming lcd (/tags/gaming-lcd) làm game trên arduino (/tags/lam-game-tren-arduino)

hướng dẫn làm game (/tags/huong-dan-lam-game)

Cửa cuốn thông minh (https://mysmarthome.com.vn/sanpham/?product_id=269)

THÀNH VIÊN TRỰC TUYẾN THÀNH VIÊN MỚI VỀ CHÚNG TÔI LIÊN KẾT

Hiện đang có 5 người trực tuyến.


• tiendung123 (/users/tiendung123) Arduino.vn (http://arduino.vn) được xây
dựng trên nền tảng Drupal 7, phiên bản
Một sản phẩm hợp tác với
Machtudong.vn (http://machtudong.vn)

• Hoàng Long Bin (/users/hoang-


• luyen van dai (/users/luyen-van-dai) hiện tại 2.3 tên mã Chia sẻ tình yêu với
Arduino (http://arduino.vn/changelog).
long-bin)
• Kiều Tùng (/users/kieu-tung)
• tiendung123 (/users/tiendung123)
Đây là trang thông tin phi lợi nhuận ra
• binhbh (/users/binhbh) đời hướng tới cộng đồng trẻ, những chủ

• Kiều Tùng (/users/kieu-tung) • Lê Anh Nhật (/users/le-anh-nhat)


nhân tương lai của đất nước. Tìm hiểu
thêm (http://arduino.vn/ve-chung-toi)

• nguyenanhquan
(/users/nguyenanhquan) • Trịnh Thanh Sơn (/users/trinh-
thanh-son)

• luyen van dai (/users/luyen-van-dai) • Victoravp (/users/victoravp)


• duong pham son (/users/duong-
pham-son)

(http://www.dmca.com/Protection/Status.aspx?ID=78aa6fcb-6c63-4023-b42d-872e89882865)     

(http://creativecommons.org/licenses/by-sa/4.0/)

Nội dung trên trang Arduino.vn (http://arduino.vn/) được phân phối theo giấy phép Creative Commons Attribution-ShareAlike 4.0
International License (http://creativecommons.org/licenses/by-sa/4.0/).

Vui lòng ghi rõ nguồn và link về bài gốc nếu bạn tham khảo nội dung từ website (http://masocongty.vn) này.

Mục
Mục lục
lục

arduino.vn/tutorial/1416-avr-xuat-xung-voi-tan-so-va-do-rong-theo-y-muon 21/21

You might also like