Nền tảng phát triển arduino ban đầu được phát triển vào năm 2005 như một thiết bị có thể lập trình dễ sử dụng cho các dự án thiết kế nghệ thuật. Mục đích của nó là giúp những người không phải là kỹ sư sử dụng các thiết bị điện tử và vi điều khiển cơ bản mà không cần nhiều kiến ​​thức lập trình. Nhưng sau đó, nhờ các tính năng dễ sử dụng, nó đã nhanh chóng được những người mới bắt đầu và những người yêu thích điện tử trên khắp thế giới chấp nhận, và ngày nay nó thậm chí còn là lựa chọn đầu tiên để tạo mẫu và phát triển poc.

Mặc dù có thể bắt đầu với arduino, nhưng điều quan trọng là phải từ từ chuyển sang các bộ vi điều khiển cốt lõi như avr, arm, pic, stm, v.v. và lập trình nó bằng ứng dụng gốc của họ. Điều này là do ngôn ngữ lập trình arduino rất dễ hiểu vì hầu hết công việc được thực hiện với các hàm dựng sẵn như digitalwrite(), analogwrite(), delay(), v.v. Và ngôn ngữ máy cấp thấp ẩn đằng sau chúng. Các chương trình arduino khác với các mã c nhúng khác, chúng tôi thao tác các bit đăng ký và đặt chúng cao hoặc thấp theo logic của chương trình.

Hẹn giờ Arduino không chậm trễ:

Vì vậy, để hiểu điều gì đang diễn ra bên trong các chức năng dựng sẵn, chúng ta cần hiểu sâu các thuật ngữ này. Ví dụ: khi chức năng delay() được sử dụng, nó thực sự đặt bit thanh ghi bộ định thời và bộ đếm của bộ vi điều khiển atmega.

Trong hướng dẫn hẹn giờ arduino này, chúng ta sẽ tránh sử dụng hàm delay() này và thực sự xử lý các thanh ghi. Điều tốt là bạn có thể sử dụng cùng một arduino ide cho việc này. Chúng tôi sẽ đặt các bit thanh ghi hẹn giờ và sử dụng ngắt tràn hẹn giờ cho đèn led mỗi khi xảy ra ngắt. Giá trị bộ nạp trước cho bit hẹn giờ cũng có thể được điều chỉnh bằng cách sử dụng nút ấn để kiểm soát khoảng thời gian xảy ra ngắt.

Bộ đếm thời gian trong thiết bị điện tử nhúng là gì?

Một bộ đếm thời gian là một ngắt. Nó hoạt động như một chiếc đồng hồ đơn giản đo khoảng thời gian giữa các sự kiện. Mỗi bộ vi điều khiển đều có một đồng hồ (bộ tạo dao động), giả sử 16mhz trong arduino uno. Điều này chịu trách nhiệm về tốc độ. Tần số xung nhịp càng cao thì tốc độ xử lý càng cao. Bộ đếm thời gian sử dụng bộ đếm đếm ở một tốc độ nhất định dựa trên tần số xung nhịp. Trong một uno arduino, một lần đếm mất 1/16000000 giây hoặc 62nano giây. Điều này có nghĩa là arduino di chuyển từ lệnh này sang lệnh khác cứ sau 62 nano giây.

Hẹn giờ trong arduino uno:

Có ba bộ hẹn giờ trong arduino uno cho các chức năng khác nhau.

Bộ hẹn giờ 0:

Đó là một bộ định thời 8 bit được sử dụng cho các chức năng định thời như delay() và millis().

Hẹn giờ 1:

Bộ đếm thời gian 16-bit, được sử dụng trong thư viện servo.

Hẹn giờ 2:

Đó là bộ đếm thời gian 8 bit được sử dụng trong hàm tone().

thanh ghi hẹn giờ arduino

Để thay đổi cấu hình hẹn giờ, hãy sử dụng các thanh ghi hẹn giờ.

1. Thanh ghi điều khiển bộ định thời/bộ đếm (tccrna/b):

Thanh ghi này chứa các bit điều khiển chính của bộ đếm thời gian, được sử dụng để điều khiển bộ chia trước của bộ đếm thời gian. Nó cũng cho phép điều khiển chế độ của bộ đếm thời gian bằng cách sử dụng bit wgm.

Định dạng khung:

Bộ chia tỷ lệ trước:

Các bit cs12, cs11, cs10 trong tccr1b đặt giá trị tỷ lệ trước. Bộ chia trước được sử dụng để đặt tốc độ đồng hồ của bộ đếm thời gian. Arduino uno có các bộ đếm trước là 1, 8, 64, 256, 1024.

2. Thanh ghi bộ định thời/bộ đếm (tcntn)

Thanh ghi này được sử dụng để kiểm soát giá trị bộ đếm và đặt giá trị bộ nạp trước.

Công thức giá trị trình tải trước cho thời gian mong muốn tính bằng giây:

tcntn = 65535 – (16x1010xtime giây / giá trị bộ đếm trước)

Giá trị trình tải trước cho bộ hẹn giờ 1 với thời gian tính toán là 2 giây:

tcnt1 = 65535 – (16x1010x2 / 1024) = 34285

ngắt hẹn giờ arduino

Ngắt tràn bộ hẹn giờ:

Ngắt tràn bộ hẹn giờ xảy ra bất cứ khi nào bộ hẹn giờ đạt đến giá trị tối đa (ví dụ: (16 bit – 65535)). Do đó, thói quen dịch vụ ngắt isr được gọi khi bit ngắt tràn bộ hẹn giờ được kích hoạt trong toiex có trong thanh ghi mặt nạ ngắt bộ hẹn giờ timskx được gọi.

định dạng isr:

Thanh ghi so sánh đầu ra (ocrna/b):

Ở đây, khi xảy ra ngắt khớp so sánh đầu ra, dịch vụ ngắt isr (timerx_compy_vect) được gọi và cờ ocfxy sẽ được đặt trong thanh ghi tifrx. Isr này được kích hoạt bằng cách đặt bit kích hoạt trong ociexy có trong thanh ghi timskx. Trong đó timskx là thanh ghi mặt nạ ngắt hẹn giờ.

Chụp đầu vào hẹn giờ:

Tiếp theo khi ngắt chụp đầu vào bộ hẹn giờ xảy ra, dịch vụ ngắt isr (timerx_capt_vect) được gọi và cờ icfx sẽ được đặt trong tifrx (thanh ghi cờ ngắt bộ hẹn giờ). Isr này được kích hoạt bằng cách đặt bit kích hoạt trong iciex có trong thanh ghi timskx.

Các thành phần bắt buộc

  • arduino uno
  • Nút (2)
  • đèn led (màu bất kỳ)
  • Điện trở 10k (2), 2,2k (1)
  • Màn hình LCD 16×2
  • Sơ đồ mạch

    Mạch kết nối giữa arduino uno và màn hình LCD 16×2:

    Màn hình LCD 16×2

    arduino đoàn kết

    So sánh

    Nối đất

    vdd

    +5 vôn

    v0

    Đến chốt chính giữa của chiết áp, được sử dụng để điều khiển độ tương phản của màn hình LCD

    Bạn

    8

    Viết

    Nối đất

    e

    9

    d4

    10

    d5

    11

    d6

    12

    d7

    13

    A

    +5 vôn

    k

    Nối đất

    Hai nút có điện trở kéo xuống 10k được kết nối với chân 2 & 4 và một đèn led được kết nối với chân 7 của arduino thông qua điện trở 2,2k.

    Cài đặt được hiển thị trong hình bên dưới.

    Circuit Hardware for Arduino Timer

    chương trình hẹn giờ arduino uno

    Trong hướng dẫn này, chúng tôi sẽ sử dụng Ngắt tràn bộ đếm thời gian và sử dụng nó để nhấp nháy đèn led trong một khoảng thời gian bằng cách điều chỉnh giá trị bộ tải trước (tcnt1) bằng một nút. Mã đầy đủ cho bộ hẹn giờ arduino được cung cấp ở cuối. Ở đây chúng tôi giải thích từng dòng mã:

    Vì màn hình LCD 16×2 được sử dụng trong dự án để hiển thị giá trị bộ tải trước, nên thư viện tinh thể lỏng được sử dụng.

    Chân anode led được kết nối với chân 7 của arduino được định nghĩa là chân led.

    Tiếp theo, sử dụng các chân lcd (rs, e, d4, d5, d6, d7) kết nối với arduino uno để khai báo một đối tượng truy cập lớp tinh thể lỏng.

    Sau đó, đặt giá trị của trình tải trước thành 3035 trong 4 giây. Kiểm tra công thức trên để tính toán giá trị tải trước.

    Tiếp theo trong void setup(), trước tiên hãy đặt màn hình LCD ở chế độ 16×2 và hiển thị thông báo chào mừng trong vài giây.

    Tiếp theo, đặt chân led làm chân đầu ra và nút là chân đầu vào

    Bước tiếp theo là tắt tất cả các ngắt:

    Tiếp theo, khởi tạo timer1.

    Đặt giá trị hẹn giờ của trình tải trước (ban đầu là 3035).

    Sau đó, đặt giá trị bộ đếm gộp trước 1024 trong thanh ghi tccr1b.

    Bật tính năng ngắt tràn bộ hẹn giờ trong thanh ghi mặt nạ ngắt bộ hẹn giờ để sử dụng isr.

    Cuối cùng thì tất cả các ngắt đều được kích hoạt.

    Bây giờ hãy viết isr cho ngắt tràn bộ hẹn giờ chịu trách nhiệm bật và tắt đèn led bằng cách sử dụng ghi kỹ thuật số. Trạng thái thay đổi bất cứ khi nào xảy ra ngắt tràn bộ đếm thời gian.

    Trong vòng lặp void(), giá trị của trình tải trước được tăng hoặc giảm bằng cách sử dụng đầu vào nút và giá trị được hiển thị trên màn hình LCD 16×2.

    Vì vậy, đây là cách bộ hẹn giờ được sử dụng để tạo độ trễ trong các chương trình arduino. Hãy xem video bên dưới, trong đó chúng tôi minh họa việc thay đổi độ trễ bằng cách sử dụng các nút để tăng và giảm giá trị của trình tải trước.

Kiểm tra tiếng Anh trực tuyến

Bạn đã biết trình độ tiếng Anh hiện tại của mình chưa?
Bắt đầu làm bài kiểm tra

Nhận tư vấn lộ trình từ ACET

Hãy để lại thông tin, tư vấn viên của ACET sẽ liên lạc với bạn trong thời gian sớm nhất.