Bất kỳ lý do không sử dụng Timer0 trên AVR?


10

Chỉ là một câu hỏi cơ bản ... Đối với arduino / avr / ATMega328 tôi tìm thấy rất nhiều ví dụ sử dụng Timer1 (thậm chí có cả thư viện cho nó) nhưng hiếm khi sử dụng Timer0 (hoặc Timer2).

Bây giờ, tôi biết rằng việc sử dụng bất kỳ bộ định thời nào này để điều khiển phương thức ISR sẽ vô hiệu hóa việc sử dụng PWM trên các chân liên quan của nó, nhưng có lý do cụ thể nào mà mọi người dường như tránh xa Timer0 không? Có phải nó được sử dụng cho một cái gì đó khác trong nội bộ mà người ta không nên lộn xộn?

Ứng dụng hiện tại của tôi vẫn ổn khi sử dụng Timer1, tôi chỉ tò mò liệu tôi có thiếu điều gì về những bộ hẹn giờ thường bị bỏ quên này không.

Câu trả lời:


16

Nếu câu hỏi là về một vi điều khiển AVR trần, thì không, không có ràng buộc nào trong việc sử dụng bất kỳ bộ định thời nào .

  • Đối với Arduino, Timer0 tốt nhất là tránh, như là millis(), delay()và tất cả chấm công nội bộ trong các thư viện Arduino sử dụng timer này. Thay đổi hằng số thời gian sẽ ảnh hưởng đến các hoạt động này.
  • Timer1 , như trạng thái câu hỏi, là lựa chọn đầu tiên phổ biến cho mọi tác vụ hẹn giờ / bộ đếm, thông qua các thư viện như thư viện TimerOne , cũng như thao tác trực tiếp. Đó là bộ định thời 16 bit, do đó có độ phân giải tốt hơn bộ định thời 8 bit.
  • Timer2 được sử dụng bởi thư viện giai điệu (), nhưng vì nó không được sử dụng phổ biến, nên cũng có thư viện msTimer2 mà nhiều người thấy rất hữu ích, giống như TimerOne. Thao tác trực tiếp của Timer2 cũng tốt.
  • Bộ hẹn giờ bổ sung trên Mega, Timer3 , Timer4Timer5 , mỗi bộ hẹn giờ 16 bit, cũng có sẵn để sử dụng, nếu bạn sử dụng bảng Arduino Mega .

9

Ngoài việc vô hiệu hóa các PWM liên quan, các lý do khác tôi có thể nghĩ đến là:

  • TIMER0 là bộ định thời 8 bit trong khi TIMER1 là bộ hẹn giờ 16 bit.

  • Trong thế giới Arduino, TIMER0 được sử dụng cho các chức năng hẹn giờ như delay () và millis (). Rất nhiều mã khác tôi từng thấy sử dụng nó theo cùng một cách vì độ phân giải 8 bit thường rất dồi dào.

  • TIMER2 cũng là 8 bit, tôi không thể nghĩ ra lý do để đặc biệt tránh điều đó nếu chỉ cần 8 bit. Nó được sử dụng bởi chức năng giai điệu Arduino ().

Vì vậy, tôi đoán rằng rời khỏi TIMER1 là một lựa chọn khá chung chung và là lựa chọn duy nhất trên các AVR nhỏ hơn khi cần có bộ định thời 16 bit. Các thiết bị AVR Mega cũng chứa TIMER3 - TIMER5 là tất cả 16 bit.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.