Ngắt ngoài INT, Đếm sản phẩm + Nút nhấn + Led đơn + LCD1602, Lập trình Pic

Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic
Ngắt ngoài INT để đếm sản phẩm tạo độ chính xáctần số đếm xung cao, ngắt ngoài đếm thông qua sự thay đổi trạng thái mức tích cực của xung ngõ vào, việc này không được sử dụng rộng rãi trong đếm sản phẩm, tính ứng dụng nhiều trong đếm xung encoder để tính giá trị tốc độ, sử dụng làm chân cảnh báo khi có sự cố sảy ra được dùng nhiều trong các hệ thống công nghiệp. Theo yêu cầu ngắt ngoài đóng vai trò như nút nhấn khẩn cấp. 

Mua linh kiện điện tử tại Điện tử Nhật Tùng

Liên hệ làm mạch  Phone: 0967.551.477 Zalo: 0967.551.477 Email: dientunhattung@gmail.com Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM Chi tiết: Nhận làm mạch và đồ án Điện tử  
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>>  Kích vào hình để được biết thêm chi tiết khóa học lập trình vi điều khiển online

Tải File bài giải

Pass giải nén: Huynhnhattung.com
===>>>   Nếu bạn chưa có phần mềm giải nén:

Hướng dẫn Tải và Cài đặt phần mềm giải nén Winrar

Video Ngắt ngoài INT, Đếm sản phẩm + Nút nhấn + Led đơn + LCD1602

Blog Ngắt ngoài INT, Đếm sản phẩm + Nút nhấn + Led đơn + LCD1602

Đề bài ngắt ngoài INT:

Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic-de-bai

Bài giải ngắt ngoài INT:

Phần cứng chương trình ngắt ngoài INT:

  • Đầu tiên sử dụng đếm sản phầm thông qua Counter0 vì vậy bắt buộc gắn vào chân RA4/T0CKI để đếm sản phẩm. Khi làm mạch thực tế nên sử dụng cảm biến hồng ngoại hoặc quang và một vài cảm biến liên quan khác.
  • Nút nhấn STOP dùng để dừng hệ thống nhấp nháy theo thời gian cố định sáng 3s, tắt 3s. Đây được xem là nút nhấn khẩn cấp khi hệ thống gặp sự cố.
  • Hiển thị LCD1602 dùng giao tiếp 8bit để dễ giao tiếp, dễ lập trình, nhưng nếu sử dụng thiết kế làm phần cứng thì đây được xem là điều khó khăn khi thiết kế và không tối ưu được phần cứng sẽ làm mạch không có tính gọn gàng. 
  • Led đơn khi sử dụng cho vi điều khiển phải gắn thêm trở 330 để bảo vệ led đơn. Cách tính xem lại lý thuyết mạch điện.
  • Các linh kiện chính cần sử dụng tham khảo tại.
Thông số kỹ thuật Mua Linh kiện
Pic16F887Pic16F887
LCD1602LCD1602
Biến trở Biến trở 
Điện trởĐiện trở
Nút nhấnNút nhấn
Thạch anhThạch anh
Hồng ngoạiHồng ngoại
Led đơnLed đơn
 

Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic

Phần mềm ngắt ngoài INT:

Khai báo thư viện tiền sử lý của ngắt ngoài INT:

  • Vi điều khiển hiện tại mình đan dùng là Pic16F887
  • Hiện dùng thạch anh ngoài và thạch anh ngoài khai báo 8M bằng lệnh #Fuses  HS  và  #delay(clock=8M).  
  • Thư viện LCD1602 sử dụng 8bit, thư viện tải về bên cuối bài viết. Đây là thư viện của thầy Nguyễn Đình Phú cung cấp trong cuốn giáo trình.
  • Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
  • Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp. 
  • Trong yêu cầu có chức năng của chạy dừng cho cho led vì vậy nên sử dụng biết int1 tức 1bit. Đây được xem là phương pháp điều khiển đơn giản nhất và có tính ứng dụng khá cao trong các trường hợp có đối lập chung.
  • Hàm khai báo #int_extngắt ngoài INT, chương trình con void ngat_ngoai(); sảy ra khi có sự thay đổi xung ngõ vào. Khi sảy ra gán tt=0 tức tắt led.
Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic-khai-bao

Chương trình con ngắt ngoài INT:

Chương trình chạy nháy led đơn
  • Đầu tiên kiểm tra nút nhấn ON có được nhấn, nếu nhấn thì cho phép nhấp nháy tương ứng tt=1, đồng thời sét thời gian đếm về 0. 
  • Khi tt=1 cho phép biến chạy tăng 1 đơn vị sau 100ms. Nếu chạy nhỏ hơn 30 tức là 3s đầu tiên sẽ bật led đơn sáng tại chân Pin_e0, nếu chạy nhớ hơn 59 đồng nghĩa với việc thời gian tắt led đơn từ 30 đến 59 là được 2.9s, còn 100ms còn lại thực hiện cho điều kiện còn lại. Khi tt=0 sẽ tắt led đơn và luôn cho giá trị chay=0. Vì vậy việc gán giá trị chay=0 khôn thật sự cần thiết.

Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic-chuong-trinh-con

Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng ngắt ngoài INT

  • Bắt đầu chương trình chính phải khởi tạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port B dùng cho nút nhấn để đưa vào Vi điều khiển vì thế khởi tạo giá trị là 0xff. Port D, Port C sử dụng cho LCD1602 giao tiếp 8bit vì vây khởi tạo là 0x00. Port E hoàn toàn xuất tín hiệu cho led đơn nên khởi tạo 0x00.
  • Khởi tạo LCD1602 như khởi tạo giao tiếp 8bit, khởi tạo ẩn con trở, khởi tạo dịch con trỏ,….
  • Việc đếm xung dùng timer0 và xung được lấy từ bên ngoài nên khai báo là T0_EXT_L_TO_H tức khi thay đổi trạng thái từ mức thấy lên mức cao sẽ đếm một xung, vì một xung nên việc chọn bộ chia cũng là bộ chia 1. Ở đây việc khai báo bộ chia 1 thật sự không cần thiết vì mặc định đã là chia 1.
  • Khởi tạo chương trình ngắt gồm Global là khởi tạo ngắt toàn cục, nói đơn giản hơn là cho phép các chương trình ngắt sảy ra, INT_EXT là cho phép chương trình ngắt ngoài hoạt động, đặt biệt là lệnh báo trạng thái thay đổi của xung để ngắt ext_int_edge(L_TO_H); trong lệnh khai báo bị ngược so với thực tế khi sử dụng nút nhấn, nhưng không ảnh hưởng nhiều đến chương trình khi nhấn nút.
  • Các giá trị ban đầu gán bằng 0 đây là điều bắt buộc vì nếu không gán hệ thống sẽ tự Ramdom trong các biến theo giá trị khai báo.

  • Chạy nháy led đơn chỉ cần gọi ra khi đã được trang bị chương trình con ở trên, việc trang bị chương trình con giúp hệ thống có tính tối ưu cao hơn và kiểm soát chương trình được tốt hơn.
  • Nếu có thay đổi trạng thái thì hàm get_timer0(); sẽ tăng lên một giá trị sau đó gán lại cho biến sp. Nếu sp lớn hơn 24 tức là sản phẩm thứ 25 thì quay về 1, lưu ý việc này bắt buộc quay về 1 chứ không phải về 0, sau đó tăng số lượng box lên một đơn vị, và set_timer0(1); lúc này sẽ làm cho hàm get_timer0(); sẽ về 1.
  • Hiển thị sử dụng thư viện LCD1602 8bit sẽ tốn rất nhiều thời gian vì trong hàm có sử dụng khá nhiều delay nên sẽ tạo trễ cho hàm nhấp nháy led đơn khá lớn, từ đó chỉ hiển thị khi có sự thay đổi của giá trị, từ đó sẽ giảm sai số nhấp nháy thời gian 3s rất nhiều.

Ngat-ngoai-int-dem-san-pham-hien-thi-lcd1602-nut-nhan-nhap-nhay-3s-lap-trinh-pic-chuong-trinh-chinh

Chúc các bạn có một kỳ thi thành công…!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *