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ếtTable 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 Đọc nhiều Kênh adc, lm35 + uart giao tiếp 2Pic + Led 7 đoạn
Blog Đọc nhiều Kênh adc, lm35 + uart giao tiếp 2Pic + Led 7 đoạn
Đề bài đọc nhiều kênh ADC:
Bài giải đọc nhiều kênh ADC:
Phần cứng chương trình đọc nhiều kênh ADC:
- Xét trường hợp bên phát yêu cầu sử dụng 2 nút nhấn để điều khiển cho phép và dừng ở xung ngõ ra của Led đơn bên thu.
- Việc sử dụng hai Vi điều khiển giao tiếp với nhau thông qua UART giúp tối ưu được chương trình và phần cứng. Khi giao tiếp UART thì kết nối sẽ chân RC6/TX của VĐK thứ nhất kết nối với chân RC7/RX VĐK thứ hai, ngược lại chân RC7/RX VĐK thứ nhất kết nối với chân RC6/TX của VĐK thứ hai. Chân RX có chức năng nhận dữ liệu, chân TX có chức năng truyền dữ liệu.
- Sử dụng hai cảm biến nhiệt độ ở bên phát vì vậy phải tuân thủ cách đọc nhiều cổng ADC trong một chương trình. Bên hiển thị phải thêm một chân cho led 7 đoạn hiển thị số vì vậy phải gán chấn chân RC0 để hiển thị được vị trí G trong mã led 7 đoạn.
- Hiển thị thời gian được quy định ra một Led 7 đoạn anot chung được nối vào Port D. Cách tính trở 330 xem trong giáo trình thầy Nguyễn Đình Phú
- 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 Nhiệt độ LM35 Nhiệt độ LM35
Phần mềm nhiều kênh ADC:
Xét Vi điều khiển 1 tức bên phát nhiều kênh ADC
Khai báo thư viện tiền sử lý của nhiều kênh ADC:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887.
- Theo yêu cầu hệ thống có đọc giá trị ADC vì vậy phải khai báo ADC bằng lệnh #device adc=10 tức sử dụng bộ ADC 10bit. Ngoài ra có thể chọn ADC 8bit và 16bit.
- Hiện dùng thạch anh ngoài và thạch anh ngoài khai báo 12M bằng lệnh #Fuses hs và #delay(clock=12M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 2400, 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.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
Chương trình chính đọc nhiều kênh ADC:
- 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 A dùng cho nhiệt độ LM35 để đưa vào Vi điều khiển vì thế khởi tạo giá trị là 0xff. 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 nên khởi tạo là 0x80.
- 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 chân AN3 và AN4 đọc nhiệt độ 2 cảm biến LM35.
- Đầu tiên khởi tạo kênh 3 cần đọc, tiến hành đọc nhiệt độ về, vì không yêu cầu đọc trung bình nên chỉ cần đọc trực tiếp giá trị, sau khi đọc xong chia 2.046 đây là độ lệch độ phân giải của Vi điều khiển với độ phân giải của nhiệt độ LM35, các bạn có thể tham khảo cách tính tại giáo trình của thầy Nguyễn Đình Phú. Sau khi xử lý xong gửi giá trị sang vi điều khiển B bằng lệnh PUTC(nd1); giá trị nhiệt độ gửi đi là số nguyên.
- Tương tự cho kênh 4 sau khi đọc xong tiến hành cộng giá trị thêm 100 đơn vị, theo yêu cầu đề đưa ra nhiệt độ chỉ đọc từ 0 – 99; vì vậy giá trị 0 – 99 đã gửi cho kênh 3 thì kênh thứ 4 bắt đầu từ 100 – 199; Lưu ý PUTC(); chỉ gửi tối đa 8bit tức 255 giá trị.
- Mỗi lần gửi cách nhau 1000ms tức 1s theo yêu cầu đề bài đưa ra.
Xét Vi điều khiển 2 tức bên thu đọc nhiều kênh ADC
Khai báo thư viện tiền sử lý của đọc nhiều kênh ADC:
- 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 12M bằng lệnh #Fuses hs và #delay(clock=12M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 2400, 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.
- Mã 7 đoạn là đoạn mã Anot: Cấu trúc lệnh cho bạn nào cần copy : ” unsigned int8 ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8.0x80,0x90,0xff} “.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
Chương trình chính đọc nhiều kênh ADC:
- 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 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 nên khởi tạo là 0x80. Port D, Port B, Port A gắn vào led 7 đoạn vì vậy xuất giá trị ra nên khởi tạo là 0x00.
- Các biến ban đầu gán bằng 0, nếu không gán giá trị ban đầu thì các biến sẽ Random một giá trị nằm trong giới hạn cho phép của biến đó.
- Nếu có dữ liệu gửi đến thì kbhit()=1, tiến hành nhận dữ liệu bằng biến data, lưu ý biến nhận phải khai báo là int8 vì giá trị gửi qua là số nguyên 8bit.
- Kiểm tra nếu data nhỏ hơn 100 tức giá trị gửi qua là của nhiệt độ Kênh 3. Kích chân RC0 xuống thấp để hiển thị vị trí G trong led 7 đoạn, sau đó hiển thị số kênh và giá trị nhiệt độ ra led 7 đoạn. Ngược lại nếu data lớn hơn hoặc bằng 100 thì lấy giá trị trừ đi 100 để trả về giá trị thực của nhiệt độ, sau đó hiển thị số kênh 4 và giá trị nhiệt độ ra led 7 đoạn.
Chúc các bạn có một kỳ thi thành công…!!!