Đọc nhiều Kênh adc, lm35 + uart giao tiếp 2Pic + Led 7 đoạn, Lập trình Pic

Đọc nhiều kênh ADC được dùng nhiều trong các hệ thống, việc tích hợp nhiều kênh ADC sẽ làm giao tiếp có nhiều sự lựa chọn đồng thời trong thiết kế. Các tín hiệu ADC hầu hết xung quanh cuộc sống hàng ngày của chúng ta như làm đọc nhiệt độ, đọc điện áp, đọc các cảm biến có tích hợp cổng Analog. Sử dụng vi điều khiển tích hợp ADC sẽ tối ưu được phần cứng đồng thời sẽ tạo độ ổn định hơn.

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 Đọ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:

Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic

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épdừ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
    Pic16F887Pic16F887
    LCD1602LCD1602
    Điện trởĐiện trở
    Nút nhấnNút nhấn
    Thạch anhThạch anh
    Led đơnLed đơn
    Nhiệt độ LM35Nhiệt độ LM35
    Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic-phan-cung

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 8bit16bit.
  • 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.
Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic-khai-bao-phat

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.
Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic-chuong-trinh-chinh-phat

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.
Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic-khai-bao-thu

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.
Doc-nhieu-kenh-adc-hien-thi-led-7doan-uart-doc-adc-lm35-lap-trinh-pic-chuong-trinh-chinh-thu

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

Leave a Reply