- Các loại ngắt
- Ngắt trong Arduino
- Sử dụng ngắt trong Arduino
- Thành phần bắt buộc
- Sơ đồ mạch
- Lập trình ngắt Arduino
- Trình diễn ngắt Arduino
Hãy xem xét một chiếc ô tô đang di chuyển nhanh, nếu nó bất ngờ bị một chiếc ô tô khác đi ngược chiều đâm vào, điều đầu tiên xảy ra là cảm biến gia tốc có trong ô tô sẽ cảm nhận được sự giảm tốc đột ngột và kích hoạt ngắt bên ngoài đối với bộ vi điều khiển có trong xe ô tô. Sau đó, dựa vào ngắt đó mà vi điều khiển tạo ra tín hiệu điện để triển khai các túi khí ngay lập tức. Bộ vi điều khiển hiện diện trong ô tô giám sát nhiều thứ đồng thời như cảm biến tốc độ của xe, kiểm tra các cảm biến khác, kiểm soát nhiệt độ điều hòa, vv Vậy điều gì làm cho túi khí mở đột ngột trong vài giây? Câu trả lời là ngắt, một tín hiệu ngắt được sử dụng ở đây có mức ưu tiên cao nhất.
Một ví dụ đơn giản khác về Ngắt là điện thoại di động màn hình cảm ứng có mức độ ưu tiên cao nhất đối với cảm giác “Chạm”. Hầu hết mọi thiết bị điện tử đều có một số loại ngắt để 'làm gián đoạn' quy trình thông thường và thực hiện một số việc ưu tiên cao hơn trong một sự kiện cụ thể. Quá trình thông thường được tiếp tục sau khi cung cấp ngắt.
Vì vậy, về mặt kỹ thuật, Ngắt là một cơ chế mà I / O hoặc lệnh có thể tạm dừng quá trình thực thi bình thường của bộ xử lý và tự được phục vụ giống như nó có mức độ ưu tiên cao hơn. Ví dụ, một bộ xử lý đang thực hiện một quá trình bình thường có thể bị ngắt bởi một số cảm biến để thực thi một quá trình cụ thể có trong ISR (Quy trình dịch vụ ngắt). Sau khi thực thi, bộ xử lý ISR có thể tiếp tục lại quá trình thực thi bình thường.
Các loại ngắt
Có hai loại ngắt:
Ngắt phần cứng: Nó xảy ra khi một sự kiện bên ngoài xảy ra như một chân ngắt bên ngoài thay đổi trạng thái của nó từ LOW sang CAO hoặc CAO thành LOW.
Ngắt phần mềm: Nó xảy ra theo hướng dẫn từ phần mềm. Ví dụ ngắt Timer là ngắt phần mềm.
Ngắt trong Arduino
Bây giờ chúng ta sẽ xem cách sử dụng ngắt trong Arduino Board. Nó có hai loại ngắt:
- Ngắt ngoài
- Ngắt thay đổi mã pin
Ngắt bên ngoài:
Những ngắt này được giải thích bằng phần cứng và rất nhanh. Những ngắt này có thể được thiết lập để kích hoạt trong trường hợp mức RISING hoặc FALLING hoặc THẤP.
Bảng Arduino |
Chân ngắt bên ngoài: |
UNO, NANO |
2,3 |
Siêu cấp |
2,3,18,19,20,21 |
Ngắt thay đổi mã pin:
Arduinos có thể kích hoạt nhiều chân ngắt hơn bằng cách sử dụng ngắt thay đổi chân. Trong bảng Arduino dựa trên ATmega168 / 328, bất kỳ chân nào hoặc tất cả 20 chân tín hiệu đều có thể được sử dụng làm chân ngắt. Chúng cũng có thể được kích hoạt bằng cách sử dụng các cạnh RISING hoặc FALLING.
Sử dụng ngắt trong Arduino
Để sử dụng ngắt trong Arduino, bạn cần hiểu các khái niệm sau.
Quy trình dịch vụ ngắt (ISR)
Quy trình Dịch vụ Ngắt hoặc một trình xử lý Ngắt là một sự kiện có một tập hợp các lệnh nhỏ trong đó. Khi một ngắt bên ngoài xảy ra, đầu tiên bộ xử lý thực thi những đoạn mã này có trong ISR và trở lại trạng thái mà nó đã rời khỏi quá trình thực thi bình thường.
ISR có cú pháp sau trong Arduino:
mountInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): Trong Arduino Uno, NANO, các chân dùng để ngắt là 2,3 & trong mega 2,3,18,19,20,21. Chỉ định chân đầu vào được sử dụng cho ngắt ngoài tại đây.
ISR: Là một hàm được gọi khi thực hiện ngắt bên ngoài.
Chế độ: Loại chuyển đổi để kích hoạt, ví dụ như giảm, tăng, v.v.
- RISING: Để kích hoạt ngắt khi chân chuyển từ THẤP đến CAO.
- FALLING: Để kích hoạt ngắt khi chân chuyển từ CAO xuống THẤP.
- THAY ĐỔI: Để kích hoạt ngắt khi chân chuyển từ THẤP sang CAO hoặc CAO sang THẤP (tức là khi trạng thái chân thay đổi).
Một số điều kiện khi sử dụng ngắt
- Chức năng định kỳ dịch vụ ngắt (ISR) phải càng ngắn càng tốt.
- Hàm Delay () không hoạt động bên trong ISR và nên tránh.
Trong hướng dẫn về ngắt Arduino này, một số được tăng lên từ 0 và hai nút nhấn được sử dụng để kích hoạt ngắt, mỗi nút được kết nối với D2 & D3. Đèn LED được sử dụng để chỉ báo Ngắt. Nếu một nút nhấn được nhấn, đèn LED sẽ BẬT và màn hình hiển thị ngắt 2 và tắt, và khi nhấn một nút nhấn khác, đèn LED sẽ TẮT và màn hình hiển thị ngắt 1 và tắt.
Thành phần bắt buộc
- Bảng Arduino (Trong hướng dẫn này, Arduino NANO được sử dụng)
- Nút ấn - 2
- LED - 1
- Điện trở (10K) - 2
- LCD (16x2) - 1
- Bảng bánh mì
- Kết nối dây
Sơ đồ mạch
Kết nối mạch giữa Arduino Nano và màn hình LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Đến mã PIN của trung tâm chiết áp Để kiểm soát độ tương phản của màn hình LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Hai nút nhấn được kết nối với Arduino Nano tại chân D2 & D3. Chúng được sử dụng để sử dụng hai ngắt bên ngoài, một để BẬT LED và một để TẮT LED. Mỗi nút nhấn có một điện trở kéo xuống 10k được nối với đất. Vì vậy, khi nhấn nút nhấn, nó là logic CAO (1) và khi không nhấn, nó là logic THẤP (0). Một điện trở kéo xuống là bắt buộc nếu không sẽ có các giá trị nổi ở chân đầu vào D2 & D3.
Một đèn LED cũng được sử dụng để chỉ ra rằng một Interrupt đã được kích hoạt hay một nút đã được nhấn.
Lập trình ngắt Arduino
Trong hướng dẫn này, một số được tăng từ 0 hiển thị liên tục trong màn hình LCD (16x2) được kết nối với Arduino Nano, bất cứ khi nào nhấn nút nhấn bên trái (chân ngắt D3), đèn LED sẽ BẬT và màn hình hiển thị Interrupt2 và khi nhấn nút nhấn bên phải (chân ngắt D2) được nhấn, đèn LED TẮT và màn hình hiển thị Ngắt 1.
Mã hoàn chỉnh với video hoạt động được đưa ra ở cuối hướng dẫn này.
1. Đầu tiên , tệp tiêu đề cho màn hình LCD được bao gồm và sau đó các chân LCD được sử dụng để kết nối với Arduino Nano được xác định.
#include
2. Bên trong hàm void setup (), trước tiên hãy hiển thị một số thông báo giới thiệu trên màn hình LCD. Tìm hiểu thêm về giao diện LCD với Arduino tại đây.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("ĐOẠN MẠCH"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); chậm trễ (3000); lcd.clear ();
3. Sau đó trong cùng một hàm void setup (), các chân đầu vào và đầu ra phải được chỉ định. Chân D13 được kết nối với Cực dương của LED, vì vậy chân này phải được xác định là đầu ra.
pinMode (13, OUTPUT);
4. Bây giờ phần quan trọng chính trong lập trình là hàm đính kèm (), nó cũng được bao gồm bên trong void setup ().
AttachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); mountInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Ở đây nó được chỉ định rằng chân 2 là để ngắt bên ngoài và chức năng buttonPressed1 được gọi khi có RISING (THẤP đến CAO) tại chân D2. Và chân 3 cũng dành cho ngắt ngoài và chức năng buttonPressed2 được gọi khi có RISING ở chân D3.
5. Bên trong vòng lặp void (), một số (i) được tăng từ 0 và được in trên màn hình LCD (16x2).
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ tôi; chậm trễ (1000);
Trong cùng vòng lặp void (), digitalWrite () được sử dụng trên chân D13 nơi kết nối cực dương của đèn LED. Tùy thuộc vào giá trị trong đầu ra có thể thay đổi, đèn LED sẽ bật hoặc tắt
digitalWrite (13, đầu ra);
6. Phần quan trọng nhất là tạo một hàm xử lý ngắt theo tên được sử dụng trong hàm đính kèm () .
Vì hai chân ngắt được sử dụng 2 và 3 nên cần có hai ISR. Ở đây trong lập trình này ISR sau được sử dụng
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Ngắt 1"); }
Chức năng này thực hiện khi nhấn nút nhấn trên chân D2 (RISING EDGE). Chức năng này thay đổi trạng thái của đầu ra thành LOW làm cho đèn LED TẮT và in “ngắt 1” trên màn hình LCD.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Chức năng này thực hiện khi nhấn nút nhấn trên chân D3. Chức năng này thay đổi trạng thái của đầu ra thành CAO khiến đèn LED BẬT và in “ngắt 2” trên màn hình LCD.
Trình diễn ngắt Arduino
1. Khi nhấn NÚT PUSH ở bên trái, đèn LED BẬT và màn hình LCD hiển thị Ngắt 2.
2. Khi nhấn NÚT PUSH ở phía bên phải, đèn LED TẮT và màn hình LCD hiển thị Ngắt1
Đây là cách một Ngắt có thể hữu ích để kích hoạt bất kỳ tác vụ quan trọng nào giữa quá trình thực thi bình thường.