4. THIẾT KẾ MẠCH GIAO TIẾP VI ĐIỀU KHIỂN P89V51RD2 VÀ ECU ĐỘNG
4.1. Cơ sở giao tiếp
Như phần trên đã trình bày, trong một số động cơ EFI có báo mã lỗi theo phương pháp nháy đèn báo, nếu vi điều khiển đọc được tín hiệu điều khiển đèn báo của ECU, ta hoàn toàn có thể xác định được mã lỗi báo về dựa vào cách thức báo lỗi. Lúc này, tín hiệu điều khiển ra (output) của ECU (điều khiển đèn báo) sẽ trở thành tín hiệu vào (input) đối với vi điều khiển. Thông thường, mức điện áp để đèn báo sang là mức 12V, vì vậy muốn đọc tín hiệu này phải qua một mạch chuyển mức logic 5V để tương thích với chuẩn TTL của VĐK.
Thông thường, các tín hiệu báo bằng số lần nhấp nháy đèn và khoảng thời gian giữa các lần nháy tuân theo 1 chuẩn cố định. Tuỳ theo kiểu báo 1 Digit hoặc 2 Digit mà sẽ có khoảng thời gian trống giữa các digit là xác định. Dựa vào cơ sở này ta có thể đọc lại các digit và tăng các biến đếm lên để có thể lưu digit đọc được vào trong RAM, sau đó dựa vào kết quả để viết chương trình xuất ký tự ra màn hình LCD. Ví dụ sau đây mô tả một đoạn chương trình con đơn giản đọc 1 digit và xuất ra LCD:
;---
CHECK_ENGINE BIT P1.3 ; tín hiệu check_engin đọc vào chân P1.3
START_KIEMTRA:
INC DIGIT ; Tăng biến đếm lên CALL DELAY1,2s ; DELAY 1,2 S
KIEM_TRA_DEN: JB CHECK_ENGINE, THOAT_KIEMTRA INC DIGIT CALL DELAY1S JMP KIEM_TRA_DEN THOAT_KIEMTRA: CALL HIEN_THI_LCD Giải thích:
Giả sử các tín hiệu đèn báo cách nhau 0,5s .
Trước tiên ta kiểm tra bắt đầu quá trình báo đèn check_engine :
- Nếu đèn Check Engine không báo , tức là không có sự chuyển mức từ 1 về 0 thì tiếp tục kiểm tra.
- Nếu đèn Check Engine báo, tức là bắt đầu kiểm tra. Delay 1 khoảng thời gian 1,2s để kiểm tra.
- Nếu đèn Check Engine không báo ( đang còn ở mức 1) thì thoát khỏi chương trình kiểm tra.
- Nếu đèn Check Engine báo ( mức 0 ) thì tăng biến đếm sau đó delay 1 khoảng thời gian 1s và tiếp tuc trở lại kiểm tra cho đến khi đèn check engine không báo nữa thì thoát ra ngoài vòng kiểm tra và hiển thị kết quả ra LCD.