Mua linh kiện điện tử tại Điện tử Nhật Tùng
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](https://huynhnhattung.com/wp-content/uploads/2019/08/Lập-trình-Pic.png)
Table of Contents
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:
Video Giao tiếp máy tính, UART RS232 + PWM + Lcd1602 + LM35
Blog Giao tiếp máy tính, UART RS232 + PWM + Lcd1602 + LM35
Đề bài giao tiếp máy tính:
![giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-de-bai](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-de-bai.png)
Bài giải giao tiếp máy tính:
Phần cứng chương trình giao tiếp máy tính:
- Đầu tiên yêu cầu đưa ra có nhiệt độ LM35 vì vậy bắt buộc phải gắn vào chân ANxx tức chân đọc tín hiệu Analog chuyển sang Digital.
- Giao tiếp với máy tính thông qua giao tiếp UART và sử dụng chuẩn RS232 được xem là phương pháp giao tiếp đơn giản và có độ ổn định rất cao. Việc sử dụng UART bắt buộc phải sử dụng hai chân TX, RX của Vi điều khiển tức là chân RC6, RC7
- Màn hình LCD1602 hiển thị các thông tin, và việc sử dụng giao tiếp 4bit cũng góp phần vào việc tối ưu phần cứng. Khi lắp phần cứng phải có thêm nguồn và biến trở phân áp để hệ thống được hoàn thiện hơn.
Màn hình LCD1602 được xem là cách hiển thị đơn giản và có nhiều ký tự có thể thiết lập.
- Đề yêu cầu sử dụng điều chế độ rộng xung PWM với duty cố định. Khi tạo xung CCP PWM nếu sử dụng hổ trợ từ phần mềm CCS hoặc từ nhà sản xuất thì chỉ có thể tạo được thông qua 2 chân CCP1 và CCP2. Ngoài ra người lập trình vẫn có khả năng tạo xung từ bất kể chân I/O nào có thể sử dụng delay, timer0, timer1,… Hệ thống có điều khiển thuận, nghịch nên phải sử dụng 2 chân CCP1 và CCP2 để điều khiển. Ngoài ra không nhất thiết phải sử dụng hai chân CCP1 và CCP2 mà chỉ cần chọn một trong hai và kết nối vào chân ENA trên module L298 và hai cổng in1 và in2 sẽ kết nối vào hai chân I/O của Vi điều khiể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 |
Pic16F887 | Pic16F887 |
LCD1602 | LCD1602 |
Điện trở | Điện trở |
Nút nhấn | Nút nhấn |
Thạch anh | Thạch anh |
Led đơn | Led đơn |
Module L298 | Module M298 |
Nhiệt độ LM35 | Nhiệt độ LM35 |
Cổng Com | Cổng Com |
Phần mềm giao tiếp máy tính:
Khai báo thư viện tiền sử lý của giao tiếp máy tính:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887
- Hiện dùng thạch anh nội và thạch anh nội khai báo 8M bằng lệnh #Fuses intrc_io và #delay(clock=8M).
- Khai báo giao tiếp UART chuẩn rs232 “#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 4800, không kiểm tra tính chắn lẻ, đồng thời dữ liệu truyền đi 8bit trong đó có 1bit STOP. Khi sử dụng UART bắt buộc phải dùng chân RC6/TX, RC7/RX
- Đị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.
- Thư viện lcd.c là thư viện được phần mềm hổ trợ vì vậy chỉ cần định nghĩa đúng chân theo phần cứng thì sẽ hoạt động được.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
![giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-khai-bao](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-khai-bao.png)
Chương trình con máy tính:
Chương trình con nhận dữ liệu từ máy tính gửi xuống
- Kiểm tra nếu KBHIT()=1 tức có dữ liệu gửi xuống, khi đó tiến hành nhận dữ liệu nếu giá trị nhận được là ký tự “F” thì cho cd=100 tức khởi tạo duty là cực đại bằng 750, cách tính xem phần chương trình chính
- Ngược lại thì nhấn giá trị trả về từ “[0,9]” theo ký tự của bảng mã ASCII đại diện cho 10% – 90%, từ ký tự trong bảng mã ASCII chuyển thành thập phân thì -0x30 sau đó nhân với 10 để thành giá trị phần trăm của duty. Tra bảng để hiểu rõ hơn về cách tính.
![giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-chuong-trinh-con-nhan-dl](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-chuong-trinh-con-nhan-dl.png)
Chương trình con hiển thị ra màn hình LCD1602
- Theo yêu cầu đề bài việc định vị trí hiển thị theo hình của yêu cầu. Khi khởi tạo là lcd_gotoxy(1,1); hoặc lcd_gotoxy(8,2); là cần xuất dữ liệu ra LCD1602 vị trí hàng 2 cột 8. Tương tự cho các vị trí khác chỉ cần xem định vị theo yêu cầu.
- Khi các phép chia t/100, t/10%10, t%10 đây là phương pháp tách số, lý do mỗi ô của LCD1602 chỉ hiển thị một ký tự duy nhất tại một thời điểm nhất định. Ví dụ 123 là một số nhưng có 3 giá trị. Sau khi tách số xong đem +0x30 chuyển giá trị thập phân sang bảng mã ASCII. Mã lệnh 0xdf là dấu độ trong bảng mã ASCII, mọi thông tin các bạn tra bảng sẽ hiểu rõ hơn.
- Tương tự cho hiển thị phần trăm duty
![giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-chuong-trinh-con-hien-thi](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-may-tinh-uart-chuan-rs232-lcd1602-nhiet-do-lm35-lap-trinh-pic-chuong-trinh-con-hien-thi.png)
Chương trình con kiểm tra
- Theo yêu cầu đề đưa ra khi nhiệt độ bằng 50 thì hiển thị màn hình LCD1602 là chữ STOP đồng thời tắt động cơ tức CCP_OFF ở hai chân CCP1 và CCP2, ngược lại nếu nhiệt độ lớn hơn 50 thì hiển thị màn hình LCD1602 là chữ FW đồng thời mở động cơ quay thuận tức CCP_OFF chân CCP2, bật CCP1 và khởi tạo tốc độ động cơ thông qua duty tương ứng , khi nhiệt độ nhỏ hơn 50 thì hiển thị màn hình LCD1602 là chữ REV đồng thời mở động cơ quay nghịch tức CCP_OFF chân CCP1, bật CCP2 và khởi tạo tốc độ động cơ thông qua duty tương ứng.
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 máy tính
- 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 D dùng kết nối với màn hình LCD1602 để đưa tín hiệu Vi điều khiển ra ngoài nên khởi tạo là 0x00. Port C có chân RC7/RX nhận tín hiệu từ máy tính gửi xuống nên đóng vai trò nhận tín hiệu vì vậy phải khởi tạo mức 1. Chân RC1/CCP2, RC2/CCP1 xuất cho động cơ đơn tức đưa tín hiệu từ Vi điều khiển ra ngoài nên khởi tạo là 0x80. Port E hoàn toàn nhận tín hiệu từ ngoài vào vi điều khiển vì vậy khởi tạo là 0xff.
- Sử dụng ADC khởi tạo bộ chia 32 để số lần đọc ADC trên 1s được xem nhỏ nhất. Yêu cầu sử dụng tín hiệu sử dụng chân AN5 để đọc nhiệt độ LM35.
- Khi sử dụng điều chế độ rộng xung do vi điều khiển hổ trợ thì sử dụng Timer2. Cách tính: Tần số yêu cầu T=1.5ms. PR2 = 1.5ms/((1/8M)*4*16)-1 = 187. Sử dụng bộ chia 16. Không thể sử dụng bộ chia 1 hay 4 vì giá trị tính ra sẽ lớn hơn 255 vượt ngưỡng tràn của timer2. Duty = 1.5ms/((1/8M)*16) = 750. Tức giá trị cực đại của duty=750. Theo đề yêu cầu giá trị phần trăm duty chạy từ 10% – 100%.
Ban đầu cho động cơ dừng hoạt động khi khởi động.
- Tiến hành đọc chương trình ADC, đọc nhiệt độ LM35 khi kết quả trả về đem chia 2.046 là độ lệch độ phân giải của vi điều khiển với độ phân giải của LM35 10mV.
- Nhận dữ liệu, kiểm tra, hiển thị ra màn hình LCD1602 là chương trình con được tạo ra nhằm giúp kiểm soát chương trình được tốt hơn.
- Khi nhiệt độ thay đổi thì tiến hành gửi giá trị lên màn hình máy tính một lần thông qua giao tiếp máy tính UART chuẩn RS232.
Chúc các bạn có một kỳ thi thành công…!!!