[HỌC AVR] Bài 4: ĐO TẦN SỐ TÍN HIỆU VỚI AVR

0
147

[HỌC AVR] Bài 4: ĐO TẦN SỐ TÍN HIỆU VỚI AVR

Chú ý : Source code bài viết dưới đây được biên dịch bằng phần mềm CodeVisionAVR để biên dịch code không lỗi xin vui lòng Download bảnCodeVisionAVR Tại Đây

XIN CHÀO CÁC BẠN!
Trong bài viết này, tôi xin hướng dẫn với các bạn cách đo tần số của tín hiệu sử dụng module INPUT CAPTURE được tích hợp trong bộ TIMER1 của vi điều khiển Atmega8.
I.INPUT CAPTURE. 
Chế độ Input Capture liên quan đến thanh ghi ICR1 (Input Capture Register 1) trong TIMER1.Input Capture xảy ra khi có 1 sự kiện trên chân ICP1 (chân 14 của Atmega8), khi đó:
ØGiá trị của thanh ghi TCNT1 sẽ được chép vào thanh ghi ICR1.
ØCờ ICF1 được bật (lên 1).
ØNgắt INPUT CAPTURE sẽ xảy ra khi được kích hoạt.

Sự kiện trên chân ICP1 được xác định bằng bit ICES1 trong tranh ghi TCCRB:
ØICES1 = 1: cạnh lên của tín hiệu sẽ kích hoạt Input Capture.
ØICES1 = 0: cạnh xuống của tín hiệu sẽ kích hoạt Input Capture.
II.ĐO TẦN SỐ TÍN HIỆU SỬ DỤNG INPUT CAPTURE.
1.CÁCH ĐO.
Với Input Capture, chúng ta có thể đo tần số của tín hiệu như sau:
Chúng ta kích hoạt ngắt Input Capture. Như vậy mỗi khi Input Capture xảy ra, chúng ta chỉ cần vào trình phục vụ ngắt của Input Capture và đọc giá trị thanh ghi ICR1 qua đó có thể tính được khoảng thời gian giữa 2 lần Input Capture à Tần số tín hiệu.

2.THIẾT LẬP INPUT CAPTURE TRONG CodeVisionAVR.
Trong trình biên dịch CodeVisionAVR đã hỗ trợ cho chúng ta thiết lập Input Capture một cách dễ dàng:
Tạo Project mới àchọn CodeWizardAVRàchọn Timers àchọn Timer1 

Trong bảng này, các bạn có thể chọn kiểu tín hiệu vào ICP1 ở Input Capt, kích hoạt ngắt tràn TIMER1 và Input Capture ở Interrupt on
3.CODE MẪU.

Các bạn có thể xem Code mẫu và mô phỏng Tại đây:

 

 

Trao đổi học tập

Comments