1.1. Ngắt trên arduino.
Trình ngắt trên arduino là (interrupt service routine- ISR), có chức năng là
tạo một một sự kiện cho mạch arduino. Hầu hết mạch arduino có 2 ngắt ngoài: ngắt 0 (chân số 2) ngắt 1 (chân số 3). Cụ thể nhƣ sau:
Board int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1 7
Due (see below)
Đặc biệt đối với mạch Arduino Due thì tất cả chân đều có thể là chân ngắt hết.tacó thể gán chân ngắt bằng hàm attachInterrupt().
1.2. Cấu trúc của hàm ngắt
attachInterrupt(interrupt, ISR, mode)
attachInterrupt(thứ tự ngắt, tên chương trình con thực hiện ngắt, chế độ ngắt)
trong đó:
thứ tự ngắt: có kiểu (int), ta điền số 0 đối với ngắt 0, số 1 đối với ngắt 1. tên chƣơng trình con thực hiện ngắt: khai báo một chƣơng trình con, để khi sự kiện ngắt xảy ra thì sẽ thực hiện chƣơng trình con đó.
104
LOW: ngăt mức thấp, thực hiện chƣơng trình ngắt khi chân ngắt ở mực thấp
(0v)
CHANGE: Ngắt khi có thay đổi, thực hiện chƣơng trình ngắt khi có thay đổi
trên chân ngắt, từ thấp lên cao, từ cao xuống thấp (cạnh lên, cạnh xuống)
RISING to: Ngắt cạnh lên, thực hiện chƣơng trình ngắt khi chân ngắt từ mức thấp lên mức cao.
FALLING: Ngắt cạnh xuống, thực hiện chƣơng trình ngắt khi chân ngắt từ
mức cao lên mức thấp.
Chú ý:
Hàm ngắt không có thông số trả về.
Khi sử dụng ngắt thì một số hàm nhƣ delay() có thể sẽ bị sai vài mili giây, vì trong quá trình thực hiện lệnh delay thì xảy ra ngắt. cũng có ảnh hƣởng tƣơng tự đối với các hàm truyền nhận UART.
1.3. Ứng dụng của ngắt.
- Ngắt thƣờng đƣợc sử dụng để giúp vi điều khiển thực hiện chƣơng trình chính xác và thông minh hơn, có thể giúptagiải một số khó khăn về thời gian.
- Một số chức năng thƣờng dùng ngắt nhƣ: Đếm encoder, quản lý các ngõ vào hiệu quả hơn. Dễ dàng nhận thấy đƣợc rằng để đọc xung của encoder, mà không mất xung nào thì chƣơng trình của ta không thể làm gì khác vì phải kiểm tra liên tục. Nhƣng đối với ngắt thì khác, giúp ta chủ động hơn trong việc bắt sự khi khi có cạnh lên hoặc cạnh xuống ở chân ngắt.
2. Phần cứng
105
3. Lập trình và giải thích
int led = 13;
volatile int trangthai = LOW; // khai báo biến kiểu volatile, tránh sai số trong quá trình thực hiện ngắt.
void setup() // đoạn chƣơng trình cài đặt {
pinMode(led, OUTPUT); // khai báo led là ngõ ra
digitalWrite(2, HIGH); // Treo chân ngắt 0, chân số 2 lên mức cao. attachInterrupt(0, daoled, CHANGE); // khai báo ngắt 0, chƣơng trình con daoled, chế độ có sự
// thay đổi là sinh ngắt }
void loop() // đoạn chƣơng trình chính, vòng lặp vô tận. {
digitalWrite(led, trangthai); // gán tráng thái cho chân led. }
void daoled() // chƣơng trình con ngắt, khi có ngắt xảy ra sẽ thực hiện chƣơng trình này.
{
trangthai = !trangthai; // đảo trang thái. }
Câu hỏi ôn tập
Câu 1: Thế nào là ngắt ngoài?
Câu 1: Trình bày cấu trúc của hàm ngắt?
Câu 2: Thiết kế phần cứng và lập trình điều khiển bộ ngắt theo yêu cầu sau: Đếm sản phẩm hiển thị lên LCD?
106
BÀI 11: TIMER-COUNTER .
* Giới thiệu: Timer chính là bộ đếm thời gian trong vi điều khiển Arduino. Nó sẽ bắt đầu đếm khi chƣơng trình bắt đầu chạy và chỉ dừng lại khi ta dừng chạy chƣơng trình. Ta có thể tìm hiểu hơn về timer qua từ khóa đó trên mục tìm kiếm. Vậy ứng dụng của nó là gì? Đa số nó đƣợc ứng dụng để chạy các hàm, lệnh song song nhau.
*Mục tiêu: Sau khi học xong bài học này, ngƣời học có khảnăng:
- Trình bày đƣợc chức năng,nguyên lý hoạt động của các thanh ghi timer – counter trong Arduino
- Vẽ đƣợc sơ đồ nguyên lý mạch Led 7 đoạn sử sụng ngắt timer
- Mô phỏng đƣợc chƣơng trình mạch Led 7 đoạn sử sụng ngắt timer bằng phần mềm mô phỏng
- Kết nối đƣợc phần cứng mạch Led 7 đoạn sử sụng ngắt timer đúng yêu cầu kỹ thuật.
-Viết, nạp và chạy đƣợc chƣơng trình Led 7 đoạn sử sụng ngắt timer
Arduino *Nội dung: