Có millis () xung đột với các chân PWM được liên kết với bộ định thời 0 không?


9

Tôi đã đọc rằng millis()chức năng sử dụng cùng một bộ đếm thời gian như một vài chân PWM.

Nếu bạn đang sử dụng các chân PWM đó, millis()vẫn sẽ trả về giá trị đúng không?

Câu trả lời:


6

Chúng không xung đột khi millis()đọc nghiêm ngặt giá trị ngay lập tức trong TCNT0khi PWM thông qua bộ định thời 0 sử dụng khả năng của phần cứng để so sánh giá trị TCNT0với các giá trị trong OCR0xmà không ảnh hưởng đến giá trị của bất kỳ giá trị nào trong số chúng.


millis()chỉ sử dụng số đếm tràn Timer 0. micros()đọc giá trị ngay lập tức trong TCNT0.
Nick Gammon

5

Chỉ cần thêm vào câu trả lời của @ Ignacio đã trả lời trực tiếp câu hỏi của bạn. "Xung đột" mà bạn nói đến có liên quan đến bộ tổng hợp Timer0.

Đối với hầu hết các phần, bạn có thể sử dụng các chân đó (chân 5 và 6 ngẫu nhiên trên UNO) mà không gặp sự cố và đọc giá trị chính xác của millis()(cũng như nhận được độ trễ dự kiến ​​từ delay)

Trường hợp bạn gặp vấn đề là nếu bạn muốn thay đổi bộ đếm gộp (thường là để sửa đổi tần số của tín hiệu PWM). Nếu bạn thay đổi điều này, thì bạn sẽ ảnh hưởng trực tiếp đến việc tính toán và báo cáo millis()và độ dài của delay(x).


Bạn có thể đọc bộ đếm trước bộ đếm thời gian của mình theo các bit dưới cùng của Serial.println (TCCR0A, BIN); Nếu chúng là '11' thì bộ đếm gộp của bạn là clk / 64. Sau đó, bạn có thể tính hệ số để sửa đổi millis () và delay ().
Dave X

Đó là một điểm rất tốt và tôi luôn luôn chỉ đạo sửa đổi nó, nhưng không có lý do gì nếu bạn thực sự muốn / cần. Điểm khác là nếu bạn đã sửa đổi, bạn đã biết bộ millis ()delay ()
đếm gộp
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.