Tự học AVR - phần 4
AVR - Cách dùng Timer trong vi điều khiển AVR
Sử dụng bộ định thời là nhu cầu của nhiều lập trình viên. Thông thường mỗi
loại vi điều khiển đều có bộ định thời. Hôm nay VAGAM xin giới thiệu tới
các bạn bài viết về cách dùng Timer trong vi điều khiển AVR.
Đặc tính
- Bao gồm các bộ timer 8bit 16 bit, thường có từ 3 – 4 bộ Timer
- Có các kênh PWM (từ 4 đến 8 kênh tuỳ loại )
- Bao gồm nhiều chế độ ngắt và PWM …
- Có thể là một kênh đếm riêng biệt
- Tự động xoá Timer trong chế độ so sánh(tự động nạp lại)
- Có chế độ PWM
- Tạo ra tần số
- Đếm các dự kiện ngắt ngoài
- Tạo ra các ngắt tràn và ngắt so sánh
....
Các chế độ hoạt động của timer
Chế Độ Thông Thường:
Đây là chế độ hoạt động đơn giản nhất của Timer .Bộ đếm sẽ liên tục đếm
tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được khởi
động lại tại giá trị Bottom.Trong các hoạt động thông thường thì cờ tràn sẽ
được thiết lập khi giá trị trong Timer đạt giá trị không và không bị xoá
đi.Tuy nhiên nếu mà ngắt tràn được chấp nhận thì cờ ngắt sẽ tự động bị xoá
khi ngắt được thực hiện.Giá trị trong Timer có thể được viết vào bất cứ lúc
nào
Ch
ế Độ So Sánh (CTC):
Đấy là chế độ mà giá trị trong Timer luôn được so sánh với giá trị trong
thanh ghi ORC .Khi giá trị trong Timer bằng giá trị trong thanh ghi ORC thì
giá trị trong Timer sẽ bị xoá đi.Giá trị trong ORC đóng vai trò là giá trị
TOP cho bộ đếm.Chế độ này cũng cho phép tạo ra tần số so sánh ở đầu
đếm sẽ tăng cho đến khi đạt giá trị MAX ,khi đó nó sẽ đổi chiều đếm.Biểu
đồ thời gian đây mô tả hoạt động của toàn bộ quá trình:
Từ biểu đồ thời gian ta nhận thấy việc thay đổi tần số trong hoạt động của
phase correct PWM có thể thay thế bằng hai giá trị là MAX và BOTTOM.
Nó linh hoạt hơn so với chế độ Fast PWM.
Tần số có thể tính theo công thức như sau:
f=fc/N*510
Trong đó N tạo ra bởi bộ chia nó có các giá trị là:1,8,64,256 hoặc 1024
Các thanh ghi trong bộ Timer/ Counter:
Thanh ghi điều khiển - TCCRx:
Bít 3,6 –WG00-WG01: Đây là các bít chọn chế độ trong Timer.Các giá trị
được mô tả trong bảng sau.
Bảng chọn chế độ Timer:
Bít 5-4 : COM00-COM01: Quy định giá trị đầu ra trong các phép so sánh
Bít 2: 0 – CS2:0 :Đây là các bít quy định xung cấp cho hoạt động của
Timer.Bảng dưới đây mô tả toàn bộ các giá trị
Chọn chế độ cho xung Clock
Thanh ghi cờ ngắt-TIFR:
Bít 1-OCFx : Khi hai giá trị bằng nhau bít này được set lên bằng 1
Bít 1-TVOx : Khi bộ đếm vượt quá giá trị Top thì bít này được set bằng 1
Thanh ghi mặt nạ ngắt-TIMSK:
Bít 1 – OCIEx: khi bít này được set lên bằng 1 thì cho phép ngắt so sánh
Bít 0 –TOIEX : Khi bít này được set lên bằng 1 thì cho phép ngắt tràn
đoạn chương trình trên dùng timer1. Timer này là bộ đếm 16bit nên giá trị
đếm được tối đa là FFFF. Trong phần khởi tạo Timer ta khởi tạo xung clock
cho bộ đếm là 125Khz = 125000 có nghĩa là bộ đếm sẽ đếm được 125000
giá trị trong 1 giây. Ta làm phép tính như sau:
125000 số ----1 giây
? số----- 0,02 giây (20ms)
ta tính được trong 20ms bộ timer sẽ đếm được là: 125000x0.02= 2500 số.