Hướng dẫn này là về Timer và Counter trong AVR Atmega32A Microcontroller. Timer là một chủ đề khá phức tạp trong vi điều khiển. Thay vì lặp lại nội dung từ biểu dữ liệu và thảo luận về mô tả đăng ký, chúng tôi sẽ tập trung vào các chi tiết cơ bản. Cuối cùng, chúng ta sẽ xem xét ví dụ thế giới thực cùng với sơ đồ mạch và đoạn mã. Tất cả các vi điều khiển hoạt động ở tần số đồng hồ được xác định trước, tất cả đều có điều khoản để thiết lập bộ đếm thời gian cho các ứng dụng khác nhau. Bộ hẹn giờ có thể cho biết thời gian và số lượng. Thời gian và tính toán này cho phép thực hiện những điều thú vị như đếm, giám sát sự kiện bên ngoài, tạo tần số, điều khiển độ sáng của đèn LED bằng PWM, điều khiển góc servo, nhận dữ liệu cảm biến truyền trong PWM và nhiều hơn nữa… ..
Tất cả các vi điều khiển đều có đồng hồ trong chúng như một thiết bị ngoại vi tích hợp và cũng có thể thêm một tinh thể bên ngoài hoặc bộ cộng hưởng để tạo ra số lượng chính xác hơn. Vi điều khiển cần một đồng hồ để lái xe quá trình đó đang xảy ra bởi chương trình của chúng tôi. Chương trình hoặc lệnh được thực thi bởi vi điều khiển theo nhịp với đồng hồ. Điều quan trọng là phải hiểu rằng chức năng đếm thời gian và bộ đếm Trong vi điều khiển chỉ cần đếm đồng bộ với đồng hồ vi điều khiển. Tại các bộ hẹn giờ tay khác có thể chạy không đồng bộ với lõi AVR. Nó có nghĩa là bộ đếm thời gian hoàn toàn độc lập với CPU. Ở đây trong trường hợp này, chúng tôi sẽ sử dụng vi điều khiển AVR Atmega32A có hai bộ đếm thời gian 8 bit và 16 bit. Điều này có nghĩa là chúng tôi có tổng cộng 3 bộ tính giờ trong chip của chúng tôi. Hai bộ đếm thời gian 8-bit đếm lên đến 255 và một bộ đếm thời gian 16-bit đếm lên đến 65535.
Timer 0 | Bộ đếm 8 bit | Đếm đến 255 |
Bộ hẹn giờ 1 | Bộ đếm 16 bit | Đếm đến 65535 |
Bộ hẹn giờ 2 | Bộ đếm 8 bit | Đếm đến 255 |
Bộ hẹn giờ thường được sử dụng ở một trong các chế độ sau:
- Chế độ thông thường
- Chế độ CTC
- Chế độ PWM nhanh
- Chế độ PWM đúng pha
Khi chúng ta di chuyển xa hơn với loạt bài hướng dẫn, chúng ta sẽ sử dụng hầu hết các chế độ hẹn giờ nhưng đối với bài viết này, chúng ta sẽ giới hạn một khái niệm về prescaler và CTC mode.
Prescaler, tại sao chúng ta cần?
Prescaling là quá trình tạo đồng hồ hẹn giờ bằng đồng hồ F_CPU . Nó cũng có thể được sử dụng để truy cập để bỏ qua số lượng nhất định của đồng hồ vi điều khiển ticks. Vi điều khiển AVR cho phép prescaling hoặc bỏ qua số 8 , 64 , 256 , 1024 . Ví dụ: nếu 64 được đặt làm giá trị trước khi đếm, thì bộ đếm sẽ đếm mỗi lần đồng hồ đếm 64 lần có nghĩa là trong một giây, khi đồng hồ vi điều khiển đánh dấu một triệu lần (mặc định) bộ đếm sẽ chỉ đếm tối đa 15.625 ( 1000000/64 =) 15.625). Bạn có thể thấy số lượt truy cập lên đến 15.625 sau đó bạn có thể nhấp nháy LED mỗi giây.
Chế độ CTC: (Xóa bộ hẹn giờ khi so sánh trận đấu)
Đây là phương thức hoạt động trong AVR, mà chúng ta sẽ sử dụng thường xuyên. Bộ hẹn giờ ở chế độ so sánh hoặc để nói chế độ CTC, thay vì đếm cho đến khi xảy ra tràn. Bộ đếm thời gian so sánh số đếm của nó với giá trị được lưu trước đó trong thanh ghi. Khi đếm các đối sánh có giá trị thì bộ hẹn giờ có thể đặt cờ hoặc kích hoạt một ngắt giống như xảy ra trong trường hợp tràn.
Ví dụ Hướng dẫn: Trong ví dụ này, chúng ta sẽ sử dụng timer-1 . Đây là bộ đếm thời gian 16 bit và để đơn giản và ngắn gọn, chúng tôi đang sử dụng không có bộ đếm trước. Trong trường hợp này, chúng tôi đã sử dụng bộ đếm thời gian kiểm soát bộ đếm TCCR1B và đặtbit CS10 lên cao (1). Tham khảo trang số trang 115.
Chúng tôi đã kết nối LED và kháng Greed (360Ω) với Pin Number 1 là PB0 Pin của một vi điều khiển.
Mã nguồn: Bộ định thời trong AVR Vi điều khiển Atmega32A
Giải thích ngắn gọn:
Ở đây người ta có thể thấy hai vòng bên trong không bao giờ kết thúc trong khi vòng lặp. Vòng lặp bên ngoài bên trong khi vòng lặp được sử dụng để đếm TCNT1 đăng ký tối đa 10000 số. Khi chúng tôi đang sử dụng đồng hồ nội bộ 1 MHz và nó đánh dấu 1000000 lần trong mỗi chu kỳ đồng hồ. Câu lệnh if bên trong có hai biến “repeatCount” và sử dụng nó để scale 100 lần, vì vậy bây giờ đèn LED nháy mắt với mắt thường.
Tôi khuyên bạn nên thử ví dụ này bằng cách riêng của bạn và chơi một chút xung quanh với mã bằng cách sửa đổi một số tham số để có được bên trong chi tiết về cách bộ đếm thời gian hoạt động với đồng hồ bên trong.
Không có nhận xét nào:
Đăng nhận xét