Sau một thời gian tìm hiểu và được sự hướng dẫn tận tình của thầy Nguyễn Viết Ngư, chúng em đã hoàn thành đồ án “Thiết kế và chế tạo mạch đo nhiệt độ”. Chúng em đã cho chạy thử và kết quả thu được thỏa mãn nhu cầu đặt ra.
Với đề tài này chúng em đã ứng dụng một phần nhỏ của vi điều khiển PIC. Trong thực tế có rất nhiều ứng dụng thành công sử dụng vi điều khiển PIC.
Trong thời gian thực hiện đồ án này chúng em đã thu được những kết quả như sau:
- Học hỏi được nhiều hơn và có thêm nhiều kiến thức.
- Có khả năng phân tích, thiết kế và thi công một sản phẩm hoàn chỉnh.
Tuy nhiên với thời gian cho phép cũng như kiến thức còn hạn chế đồ án vẫn còn những thiếu sót.
Một lần nữa chúng em xin chân thành cảm ơn thầy Nguyễn Viết Ngư và các thầy, cô giáo đã nhiệt tình hướng dẫn, truyền đạt kiến thức trong suốt quá trình học tập và thực hiện đồ án này.
52 trang |
Chia sẻ: tienthan23 | Lượt xem: 7392 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế, chế tạo mạch đo nhiệt độ hiển thị trên LCD 16x2, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐỒ ÁN MÔN HỌC
Đề tài:
THIẾT KẾ, CHẾ TẠO
MẠCH ĐO NHIỆT ĐỘ
HIỂN THỊ TRÊN LCD 16X2
Giáo viên hướng dẫn: Nguyễn Viết Ngư
Sinh viên thực hiện: Phạm Văn Thực
Thân Thị Thương
Lớp: 112134.1
Tháng 10, năm 2015
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Ngày tháng 10 năm 2015
Giáo viên hướng dẫn
MỤC LỤC:
Table of Contents
MỞ ĐẦU
Lý do chọn đề tài
Ngày nay khoa học công nghệ hiện đại đã có những bước tiến nhanh và xa đi theo nó là những thành tựu ứng dụng trong các lĩnh vực đời sống, công nghiệp. Kỹ thuật điều khiển trong tiến trình hoàn thiện lý thuyết cũng đã tạo cho mình nhiều phát triển có ý nghĩa. Bây giờ khi nhắc tới điều khiển con người dường như hình dung tới độ chính xác, tốc độ xử lý và thuật toán thông minh đồng nghĩa là lượng chất xám cao hơn. Hiện nay trên thị trường có rất nhiều loại vi điều khiển như 8051, Motorola 68HC, AVR, ARM,.... Ngoài họ 8051 được hướng dẫn một cách căn bản ở môi trường đại học, chúng em đã chọn vi điều khiển PIC để mở rộng vốn kiến thức và phát triển các ứng dụng trên công cụ này vì các nguyên nhân sau:
Họ vi điều khiển nàycó thể tìm mua dễ dàng tại thị trường Việt Nam.
Có đầy đủ tính năng của một vi điều khiển khi hoạt động độc lập.
Là sự bổ sung rất tốt về kiến thức cũng như ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051. Giá thành không đắt.
Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp chương trình từ dơn giản tới phức tạp...
Các tính năng đa dạng của vi điều khiển PIC và các tính năng này không ngừng được phát triển.
Số lượng người sử dụng họ vi điều khiển PIC trên thế giới cũng như Việt Nam khá nhiều.Đã tạo thuận lợi trong quá trình tìm hiểu và phát triển các ứng dụng như: số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển, dễ dàng trao đổi, học tập, dễ dàng tìm được hỗ trợ khi gặp khó khăn.
Vì vậy, sau một thời gian học tập và tìm hiểu tài liệu với sự giảng dạy của các thầy cô giáo. Cùng với sự dẫn dắt nhiệt tình của giáo viên hướng dẫn thầy Nguyễn Viết Ngư. Chúng em đã chọn đề tài:
“thiết kế chế tạo mạch đo nhiệt độ hiển thị trên LCD 16x2” làm đồ án tích hợp 1 của mình.
Đối tượng nghiên cứu
Với đề tài này chúng em tập trung vào:
Tìm hiểu về vi điều khiển PIC 16F877A.
Nghiên cứu và chế tạo thiết bị đo nhiệt độ phòng.
Mục đích nghiên cứu
Khi nghiên cứu đồ án này chúng em đã:
Hiểu được cách thức và chế độ hoạt động của VĐK PIC 16F877A.
Hiểu được cách thức hoạt động của cảm biến nhiệt độ LM 35.
Thiết kế, chế tạo được mạch đo nhiệt độ phòng dùng PIC 16F877A.
Phương pháp nghiên cứu
Do đây là một đồ án sản phẩm, nên chúng em đã áp dụng phương pháp nghiên cứu lý thuyết, nghiên cứu thực nghiệm trực tiếp trên sản phẩm thật, chạy thử và hoàn thiện chương trình.
Ý nghĩa nghiên cứu
Như đã nói ở trên thì nếu thực hiện thành công đề tài này sẽ mang lại ý nghĩa to lớn về cả thực tiễn và lý luận.
Ý nghĩa lý luận:
Toàn bộ chương trình và bản thuyết minh của đề tài sẽ trở thành tài liệu nghiên cứu, tham khảo nhanh, dễ hiểu, thiết thực cho các bạn sinh viên, những người thích tìm hiểu về đề tài này của chúng em.
Ý nghĩa thực tiễn:
Với sự thành công của đề tài sẽ góp phần giúp cho các bạn sinh viên mới nói chung và các bạn sinh viên khoa Điện - Điện Tử nói riêng thấy rõ được ý nghĩa thực tế và thêm yêu thích chuyên ngành mình đã chọn.
Do kiến thức và trình độ năng lực hạn hẹp nên việc thực hiện đề tài này không thể tránh được thiếu sót, kính mong nhận được sự thông cảm và góp ý của thầy giáo, cô giáo và các bạn để đồ án này hoàn chỉnh hơn.
Chúng em xin trân thành cảm ơn!
Sinh viên thực hiện: Phạm Văn Thực
Thân Thị Thương
CHƯƠNG I: CÁC PHƯƠNG PHÁP ĐO NHIỆT ĐỘ
1.1 Khái niệm về nhiệt độ:
1.1.1 Khái niệm:
Nhiệt độ là đại lý đặc trưng cho cường độ chuyển động của các nguyên tử, phân tử của một hệ vật chất. Tuỳ theo từng trạng thái của vật chất ( rắn, lỏng, khí) mà chuyển động này có khác nhau. ở trạng thái láng, các phân tử dao động quanh vi trí cân bằng nhưng vi trí cân bằng của nó luôn dịch chuyển làm cho chất lỏng không có hình dạng nhất định. Còn ở trạng thái rắn, các phần tử, nguyên tử chỉ dao động xung quanh vị trí cân bằng. Các dạng vận động này của các phân tử, nguyên tử được gọi chung là chuyển động nhiệt. Khi tương tác với bên ngoài có trao đổi năng lượng nhưng không sinh công, thì quá trình trao đổi năng lượng nói trên gọi là sự truyền nhiệt. Quá trình truyền nhiệt trên tuân theo 2 nguyên lý:
Bảo toàn năng lượng.
Nhiệt chỉ có thể tự truyền từ nơi có nhiệt độ cao đến nơi có nhiệt độ thất. Ở trạng thái rắn, sự truyền nhiệt xảy ra chủ yếu bằng dẫn nhiệt và bức xạ nhiệt.
Đối với các chất lỏng và khí ngoài dẫn nhiệt và bức xạ nhiệt còn có truyền nhiệt bằng đối lưu. Đó là hiện tượng vận chuyển năng lượng nhiệt bằng cách vận chuyển các phần của khối vật chất giữa các vùng khác nhau của hệ do chênh lệch về tỉ trọng.
1.1.2 Sơ lược về phương pháp đo nhiệt độ:
Nhiệt độ là đại lượng chỉ có thể đo gián tiếp trên cơ sở tính chất của vật phụ thuộc nhiệt độ. Hiện nay chóng ta có nhiều nguyên lí cảm biến khác nhau để chế tạo cảm biến nhiệt độ như: nhiệt điện trở, cặp nhiệt ngẫu, phương pháp quang dùa trên phân bố phổ bức xạ nhiệt, phương pháp dùa trên sự dãn nở của vật rắn, lỏng, khí hoặc dùa trên tốc độ âm Có 2 phương pháp đo chính:
Ở dải nhiệt độ thấp và trung bình phương pháp đo là phương pháp tiếp xúc, nghĩa là các chuyển đổi được đặt trực tiếp ngay trong môi trường đo. Thiết bị đo như: nhiệt điện trở, cặp nhiệt, bán dẫn.
Ở dải nhiệt độ cao phương pháp đo là phương pháp không tiếp xúc ( dông cụ dặt ngoài môi trường đo). Các thiết bị đo nh: cảm biến quang, hoả quang kế ( hoả quang kế phát xạ, hoả quang kế cường độ sáng, hoả quang kế màu sắc)
1.2 Đo nhiệt độ bằng phương pháp tiếp xúc
1.2.1 Đo nhiệt độ bằng nhiệt điện trở:
Nguyên lý hoạt động:
Điện trở của một số kim loại thay đổi theo nhiệt độ và dùa vào sự thay đổi điện trở đó người ta đo được nhiệt độ cần đo.
Nhiệt điện trở dùng trong dụng cụ đo nhiệt độ làm việc với dòng phụ tải nhỏ để nhiệt năng sinh ra do dòng nhiệt điện trở nhỏ hơn so với nhiệt năng nhận được từ môi trường thí nghiệm.
Yêu cầu cơ bản đối với vật liệu dùng làm chuyển đổi của nhiệt điện trở là có hệ số nhiệt độ lớn và ổn định, điện trở suất khá lớn
Trong công nghiệp nhiệt điện trở được chia thành nhiệt điện trở kim loại và nhiệt điện trở bán dẫn.
1.2.2 Đo nhiệt độ bằng cặp nhiệt ngẫu:
Nguyên lý làm việc:
Bộ cảm biến cặp nhiệt ngẫu là 1 mạch từ có 2 hay nhiều thanh dẫn điện gồm 2 dây dẫn A và B. Sebeck đã chứng minh rằng nếu mối hàn có nhiệt độ t và t0 khác nhau thì trong mạch khép kín có một dòng điện chạy qua. Chiều của dòng điện này phụ thuộc vào nhiệt độ tương ứng của mối hàn nghĩa là t > t0 thì dòng điện chạy theo hướng ngược lại. Nếu để hở một đầu thì sẽ xuất hiện một sức điện động nhiệt. Khi mối hàn có cùng nhiệt độ ( ví dụ bằng t0 ) thì sức điện động tổng bằng:
EAB = eAB(t0) + eAB(t0) = 0
Từ đó rót ra: eAB = eAB(t0)
Khi t0 và t khác nhau thì sức điện động tổng bằng:
EAB = eAB(t) – e+AB(t0)
Phương trình trên là phương trình cơ bản của cặp nhiệt ngẫu ( sức điện động phụ thuộc vào hệ số nhiệt độ của mạch vòng t và t0)
Nh vậy bằng cách đo sức điện động ta có thể tìm được nhiệt độ của đối tượng.
Phương pháp này được sử dụng nhiều trong công nghiệp khi cần đo những nơi có nhiệt độ cao.
1.2.3 IC cảm biến nhiệt độ
Có rất nhiều hãng chế tạo linh kiện điện tử đã sản xuất ra các loại IC bán dẫn dùng để đo dải nhiệt độ từ -55¸150 0C. Trong các mạch tổ hợp IC, cảm biến nhiệt thường là điện áp của líp chuyển tiếp p-n trong một loại tranzitor loại bipola.
1.3 Đo nhiệt độ bằng phương pháp không tiếp xúc
Nguyên lý hoạt động:
Dưạ trên định luật bức xạ của vật đen tuyệt đối, tức là vật hấp thụ năng lượng theo mọi hướng với khả năng lón nhất. Bức xạ nhiệt của mọi vật đặc trưng bởi mật độ phổ El nghĩa là số năng lượng bức xạ trong một đơn vị độ dài của sóng.
Quan hệ giữa mật độ bức xạ của vật đen tuyệt đối với nhiệt độ và độ dài sóng được biểu diễn bởi công thức:
E0l = C1.l-5(ec2/lT-1)-1
Trong đó: C1: Hằng số và C1= 37,03.10-7 (Jm2/s)
C2: Hằng số vá C2= 1,432.10-2 (m.độ)
l: Độ dài sóng
T: Nhiết độ tuyệt đối
CHƯƠNG II: CƠ SỞ LÝ THUYẾT
2.1Tìm hiểu về cảm biến nhiệt độ LM35.
LM35 là một cảm biến nhiệt độ analog, thuộc họ IC cảm biến nhiệt độ sản xuất theo công nghệ bán dẫn dựa trên các chất bán dẫn dễ bị tác động bởi sự thay đổi của nhiệt độ, đầu ra của cảm biến là điện áp (V) tỉ lệ với nhiệt độ mà nó được đặt trong môi trường cần đo.
Họ LM35 có rất nhiều loại và nhiều kiểu đóng vỏ khác nhau:
Hình 1.1: Cảm biến nhiệt độ LM35.
Đặc điểm nổi bật:
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35.
Điện áp đầu vào từ 4V đến 30V.
Độ phân giải điện áp đầu ra là 10mV/0C.
Độ chính xác cao, tính năng cảm biến nhiệt độ rất nhạy.
Ở nhiệt độ 25(0C) nó có sai số không quá 1%. Với dải đo từ -50 đến 150(0C), tín hiệu ngõ ra tuyến tính liên tục với những thay đổi của tín hiệu ngõ vào.
Thông số kỹ thuật:
Tiêu tán công suất thấp.
Dòng làm việc từ 400µA đến 5mA.
Dòng ngược 15mA.
Dòng thuận 10mA.
Độ chính xác cao: khi làm việc ở nhiệt độ 250C là 0,50C.
Trở kháng đầu ra thấp 0,1 cho 1mA tải.
Đặc tính điện:
Dải nhiệt độ đo được của LM35 là từ -550C đến 1500C với các mức điện áp ra khác nhau. Vậy ứng với tầm hoạt động từ 0(0C) đến 100(0C)ta có sự biến thiên điện áp ngõ ra là:
Ở -550C thì điện áp ngõ ra Vout = -550mV
Ở 00C thì điện áp ngõ ra Vout = 0V
Ở 250C thì điện áp ngõ ra Vout = 250mV
Ở 1500C thì điện áp ngõ ra Vout = 1500mV
2.2Vi điều khiển PIC 16F877A.
2.2.1PIC là gì?
PIC là viết tắt của “Programmable Intelligent Computer”, có thể tạm dịch là “máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên của họ. Hãng Micrchip tiếp tục phát triển sản phẩm này và cho đến nay hãng đã tạo ra gần 100 loại sản phẩm khác nhau.
2.2.2Các dòng PIC và cách lựa chọn vi điều khiển PIC.
Các kí hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit
PIC16xxxx: độ dài lệnh 14 bit
PIC18xxxx: độ dài lệnh 16 bit
C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là kí hiệu cũ
Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash). Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.
Cách lựa chọn một vi điều khiển PIC phù hợp:
Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng. Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiển chỉ có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44, chân. Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được nhiều lần hơn.
Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi điều khiển,các chuẩn giao tiếp bên trong. Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép. Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể được tìm thấy trong cuốn sách “Select PIC guide” do nhà sản xuất Microchip cung cấp.
Do thời gian làm đồ án có hạn nên chúng em chỉ tập trung tìm hiểu các tính năng của PIC 16F877A có liên quan đến đề tài.
2.2.3Các dòng PIC và cách lựa chọn vi điều khiển PIC.
PIC 16F877A là dòng PIC khá phổ biến, khá đầy đủ tính năng phục vụ cho hầu hết tất cả các ứng dụng thực tế. Đây là dòng PIC khá dễ cho người mới làm quen với PIC có thể học tập và tạo nền tảng về họ vi điều khiển PIC của mình.
PIC 16F877A thuộc họ vi điều khiển 16Fxxx có các đặc tính ngoại vi sau:
Ngôn ngữ lập trình đơn giản với 35 lệnh có độ dài 14 bit.
Tất cả các câu lệnh thực hiện trong một chu kì lệnh ngoại trừ một số câu lệnh rẽ nhánh thực hiện trong hai chu kì lệnh. Chu kì lệnh bằng 4 lần chu kì dao động của thạch anh.
Bộ nhớ chương trình Flash 8Kx14 words, với khả năng ghi xóa khoảng 100 ngàn lần.
Bộ nhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256x8 byte. Số PORT I/O là 5 với 33pin I/O.
Khả năng ngắt (lên tới 14 nguồn cả ngắt trong và ngắt ngoài).
Ngăn nhớ Stack được chia làm 8 mức.
Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
Dải điện thế hoạt động rộng: 2.0V đến 5.5V.
Nguồn sử dụng 25mA.
Công suất tiêu thụ thấp:<0.6mA với 5V, 4MHz ; 20µA với nguồn 3V, 32 KHz.
Có 3 timer:
Timer 0: bộ đếm 8 bit với bộ chia tần số 8 bit.
Timer 1: bộ đếm 16 bit với bộ chia tần số,có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep.
Timer 2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.
Hai bộ Capture/so sánh/điều chế độ rông xung.
Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.
Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên ngoài.
Các đặc tính Analog:
8 kênh chuyển đổi ADC 10 bit.
Hai bộ so sánh.
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
Bộ nhớ flash với khả năng ghi xóa được 100.000 lần.
Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.
Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.
Khả năng tự nạp chương trình với sự điều khiển của phần mềm.
Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân.
Watchdog Timer với bộ dao động trong.
Chức năng bảo mật mã chương trình.
Chế độ Sleep.
Có thể hoạt động với nhiều dạng Oscillator khác nhau.
Hình 1.2: Hình ảnh thực tế và sơ đồ chân của PIC 16F877A.
Hình 1.3: Sơ đồ khối bộ vi điều khiển PIC 16F877A.
PIC 16F877A có tất cả 40 chân,được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2 chân thạch anh và 1 chân dùng để RESET vi điều khiển.
Chức năng các chân:
+ Chân OSC1/CLK1(13): ngõ vào kết nối với dao động thạch anh hoặc ngõ vào nhận xung clock từ bên ngoài.
+ Chân OSC2/CLK2(14): ngõ ra dao động thạch anh hoặc ngõ ra cấp xung clock.
+ Chân (1) có 2 chức năng.
: ngõ vào reset tích cực ở mức thấp.
Vpp: ngõ vào nhận điện áp lập trình khi lập trình cho PIC.
+ Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có 2 chức năng
RA0,1,2: xuất/ nhập số.
AN 0,1,2: ngõ vào tương tự của kênh thứ 0,1,2.
+ Chân RA2/AN2/VREF-/CVREF+(4): xuất nhập số/ ngõ vào tương tự của kênh thứ 2/ ngõ vào điện áp chuẩn thấp của bộ AD/ ngõ vào điện áp chẩn cao của bộ AD.
+ Chân RA3/AN3/VREF+(5): xuất nhập số/ ngõ vào tương tự kênh 3/ ngõ vào điện áp chuẩn (cao) của bộ AD.
+ Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ ngõ vào xung clock bên ngoài cho Timer 0/ ngõ ra bộ so sánh 1.
+ Chân RA5/AN4// C2OUT(7): xuất nhập số/ ngõ vào tương tự kênh 4/ ngõ vào chọn lựa SPI phụ/ ngõ ra bộ so sánh 2.
+ Chân RB0/INT (33): xuất nhập số/ ngõ vào tín hiệu ngắt ngoài.
+ Chân RB1(34), RB2(35): xuất nhập số.
+ Chân RB3/PGM(36): xuất nhập số/ cho phép lập trình điện áp thấp ICSP.
+ Chân RB4(37), RB5(38): xuất nhập số.
+ Chân RB6/PGC(39): xuất nhấp số/ mạch gỡ rối và xung clock lập trình ICSP.
+ Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối và dữ liệu lập trình ICSP.
+ Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào bộ giao động Timer1/ ngõ vào xung clock bên ngoài Timer 1.
+ Chân RC1/T1OSI/CCP2(16): xuất nhập số/ ngõ vào bộ dao động Timer 1/ ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2.
+ Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1 ,ngõ ra compare1, ngõ ra PWM1.
+ Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra của chế độ I2C.
+ Chân RC4/SDI/SDA(23): xuất nhập số/ dữ liệu vào SPI/ xuất nhập dữ liệu I2C.
+ Chân RC5/SDO(24): xuất nhập số/ dữ liệu ra SPI.
+ Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xung đồng bộ USART.
+ Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART.
+ Chân RD0-7/PSP0-7(19-30): xuất nhập số/ dữ liệu port song song.
2.2.4Tổ chức bộ nhớ.
Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ dữ liệu (Data memory) và bộ nhớ chương trình (Program memory).
Bộ nhớ dữ liệu:
Bộ nhớ dữ liệu của PIC là bộ nhớ EFPROM được chia ra làm nhiều bank. Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special Funcition Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR(General Purpose Register) nằm ở vùng địa chỉ trong bank.các thanh ghi SFR thường xuyên được sử dụng sẽ được đặt ở tất cả các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu PIC 16F877A như sau:
Hình 1.4: Bộ nhớ dữ liệu của PIC.
Bộ nhớ chương trình:
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang ( từ page 0 đến page 3). Như vậy bộ nhớ chương trình có thể chứa được 8*1024=8192 lệnh (vì mỗi lệnh sau khi mã hóa sẽ có dung lượng 1 word=14 bit)
Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit. Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h(reset vector). Khi có ngắt xảy ra bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h(interrupt vector).
Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình.
Hình 1.5: Bộ nhớ chương trình PIC 16F877A.
Thanh ghi chức năng đặc biệt sfr
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển các khối chức năng được tích hợp trong vi điều khiển. Có thể phân thanh ghi SFR làm 2 loại: thanh ghi SFR liên quan đến chức năng bên trong(CPU) và thanh ghi SFR dùng để thiết lập và điều khiển các khối bên ngoài (ví dụ ADC). Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức năng bên trong. Các thanh ghi dùng để thiết lập và điều khiển các khối chức năng sẽ được nhắc đến khi ta đề cập đến các khối chức năng đó.
Thanh ghi STATUS (03h, 83h, 103h, 183h): thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu.
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các thông số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer 0.
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh): thanh ghi cho phép đọc và ghi, chứa các bit diều khiển và các cờ hiệu khi Timer 0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrupt-on-change tại các chân của PORTB.
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi.
Thanh ghi PIR1 (0Ch) : chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2.
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của vi điều khiển.
Thanh ghi mục đích chung gpr
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSG(File Select Register). Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình.
2.2.5Stack.
Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi. Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong stack. Khi một trong các lệnh RETURN, RETLW khi RETFIE được thực thi, giá trị PC sẽ tự động lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng quy trình định trước.
Bộ nhớ Stack trong vi điều khiển PIC họ 16F887xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng. Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè giá trị 6 vào Stack lần thứ 2.
Cần chú ý là không có cờ hiệu nào chi biết trạng thái stack, do đó ta không biết được khi nào stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển bởi CPU.
2.2.6Các cổng xuất, nhập của PIC 16F877A.
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương tác với thế giới bên ngoài. Sự tương tác rất đa dạng và thông qua trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng.
Một cổng xuất nhập của vi điều khiển gồn nhiều chân (I/O pin), tùy theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi bên cạnh chức năng là công xuất nhập thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nếu trên đối với thế giới bên ngoài. Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR liên quan đến các chân xuất nhập đó.
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD, và PORTE. Cấu trúc và chức năng của cổng xuất nhập sẽ được đề cập ở phần sau.
Port A
PORTA (RPA) bao gồm 6 I/O pin. Đây là chân “hai chiều” (bidirectional pin),nghĩa là có thể xuất và nhập được.
Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS.
Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog, ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port).
Các thanh ghi SFR liên quan đến PORTA bao gồm:
PORTA(địa chỉ 05h) : chứa giá trị các pin trong PORTA
TRISA (địa chỉ 85h) : điều khiển xuất nhập
CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh
CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp
ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
Port B
PORTB (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình.
Các thanh ghi SFR liên quan đến PORTB bao gồm:
PORTB(địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB
TRISB(địa chỉ 86h, 186h) : điều khiển xuất nhập
OPTION_REG(địa chỉ 81h,181h): điều khiển ngắt ngoại vi và bộ Timer0.
Port C
PORTC (RPC) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART:
Các thanh ghi điều khiển liên quan đến PORTC :
PORTC(địa chỉ 07h) : chứa giá trị các pin trong PORTC
TRISC (địa chỉ 87h) : điều khiển xuất nhập
Port D
PORTD (RPD) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISD. PORTD còn là cổng xuất dữ liệu của chuẩ giao tiếp PSP (parallel slave Port).
Các thanh ghi gồm :
PORTD : chứa giá trị các pin trong PORTD.
TRISD : điều khiển xuất nhập.
Port E
PORTE (RPE)gồm 3 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISE.Các chân của PORTE có ngõ vào analog. Bên cạnh đó PORTE còn là các chân điều khiển củag chuẩn giao tiếp PSP..
Các thanh ghi liên quan đến PORTE bao gồm :
PORTE : chứa giá trị các chân trong PORTE .
TRISE: điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp.
PSP. ADCON1 : thanh ghi điều khiển khối ADC.
2.2.7Các Timer.
Timer 0
Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A. Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit. Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạch tích cực của xung clock. Ngắt Timer0 sẽ xuất hiện khi Timer 0 bị tràn.
Bít TMR0IE (INTCON) là bít điều khiển của Timer0. TMR0IE=1 cho phép ngắt Timer0 tác động. TMR0IE=0 không cho phép ngắt Timer0 tác động.
Sơ đồ khối của Timer0 như sau :
Hình 1.6: Sơ đồ khối của Timer0.
Muốn Timer 0 hoạt động ở chế độ Timer ta clear bit TOSC, khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kỳ xung đồng hồ(tần số vào Timer0 bằng ¼ tần số oscillator). Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện. Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động.
Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC. Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1. Bit TOSE cho phép lựa chọn cạnh tác động vào bộ đếm. Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1.
Thi thanh ghi TMR0 bị tràn, bit TMR0IF sẽ được set. Đây chính là cờ ngắt của Timer0. Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm. Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ sleep.
Bộ chia tần số (prescaler) được chia sẻ giữa Timer0 và WDT(watchdog timer). Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer0 thì WDT sẽ không có được hỗ trợ của prescaler và ngược lại.
Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler nhưng không làm thay đổi đối tượng tác động của prescaler. Khi đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT.
Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:
TMR0(địa chỉ 01h, 101h): chứa giá trị đếm của Timer0.
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động(GIE và PEIE).
OPTION_REG (địa chỉ 81h, 181h):điều khiển prescaler.
Timer 1
Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong 2 thanh ghi (TMR1H:TMR1L). Cờ ngắt của Timer1 là bit TMR1IF. Bit điều khiển của Timer1 sẽ là TMR1IE.
Tương tự như Timer0, Timer1 cũng có 2 chế độ hoạt động: chế độ định thời và chế độ đếm.
Hình 1.7: Sơ đồ khối của Timer1.
Ngoài Timer1 còn có chức năng reset input bên trong được điều khiển bởi 1 trong 2 khối CCP (Capture/Compare/PWM).
Các thanh ghi có liên quan đến Timer1 bao gồm:
INTCON ( địa chỉ 0Bh, 8Bh, 10Bh, 18Bh):cho phép ngắt hoạt động (GIE và PEIE).
PIR1(địa chỉ 0Ch): chứa cờ ngắt timer1.
PIE1(địa chỉ 8Ch): cho phép ngắt Timer1.
TMR1L(địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1.
TMR1H(địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1.
T1CON(địa chỉ 10h): xác lập các thông số cho Timer1.
Timer 2
Timer2 là bộ định thời 8 bit và được hỗ trợ bởi 2 bộ chia tần số prescaler và postscaler. Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Bit cho phép ngắt Timer2 tác động là TMR2ON. Cờ ngắt của Timer2 là bit TMR2IF. Xung ngõ vào được đưa qua bộ chia tần số prescaler 4 bit( với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16)
Hình 1.8: Sơ đồ khối của Time 2.
Thanh ghi Timer2 còn được hỗ trợ bởi thanh ghi PR2. Giá trị đếm trong thanh ghi TMR2 sẽ tăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h. Khi reset thanh ghi PR2 được nhận giá trị mặc định FFh.
Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP.
Các thanh ghi liên quan đến Timer2 bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và PEIE).
PIR1(địa chỉ 0Ch): có chứa cờ ngắt Timer2.
PIE1(địa chỉ 8Ch): chứa bit điều khiển Timer2.
TMR2(địa chỉ 11h): chứa giá trị đếm của Timer2.
T2CON(địa chỉ 12h): xác lập các thông số cho Timer2.
PR2(địa chỉ 92h): thanh ghi hỗ trợ cho Timer2.
Ta có một vài nhận xét về Timer0, Timer1, Timer2 như sau:
Timer0 và Timer2 là bộ đếm 8 bit (giá trị tối đa là FFh), trong khi Timer1 là bộ đếm 16 bit(giá trị tối đa là FFFFh).
Timer0, Timer1 và Timer2 đều có 2 chế độ hoạt động là timer và counter. Xung clock có tần số bằng ¼ tần số của oscillator.
Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau(tần số dao động, cạnh tác động) trong khi các tham số của xung tác động lên Timer1 là cố định. Timer2 được hỗ trợ bởi 2 bộ chia tần số độc lập, tuy nhiên cạnh tác động vẫn được cố định là cạnh lên.
Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP.
2.2.8Chuyển đổi ADC.
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số.PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3.
Kết quả chuyển đổi từ tín hiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng ngư các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL, bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set.
Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE, PEIE).
PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF).
PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE).
ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD.
ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thong số cho bộ chuyển đổi AD.
PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog ở PORTA.
PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog ở PORTE.
Đo nhiệt độ môi trường tại một điểm thông qua sensor nhiệt LM35. LM35 là sensor đo nhiệt, đo được nhiệt độ trong khoảng từ -500C đến 1500C, đầu ra là 10mV/0C. Đầu ra này được đưa vào chân Analog của bộ ADC.
Ở đây ta dùng ADC của PIC là ADC 10 bit => max =1024. Ta giả thiết Vcc=5V => mỗi giá trị ADC tương ứng là: 5/1024=4,883*10-3V. Vậy 10C PIC sẽ thay đổi là:
10mV/4,883mV= 2,048.
2.2.9Bộ so sánh.
Bộ so sánh bao gồm 2 bộ so sánh tín hiệu analog và được đặt ở port A Ngõ vào so sánh là các chân RA3:RA0, ngõ ra là hai chân RA4 và RA5. Thanh ghi điều khiển bộso sánh là CMCON. Các bit CM2:CM0 trong thanh ghi CMCON đóng vai trò chọn lựa các chế độ hoạt động cho bộ Comparator .
Hình 1.9: Nguyên lí hoạt động của một bộ so sánh đơn giản.
Cơ chế hoạt động của bộ Comparator như sau:
Tín hiệu analog ở chân VIN+ sẽ được so sánh với điện áp chuẩn ở chân VIN- và tínhiệu ở ngõ ra bộ so sánh sẽ thay đổi tương ứng như hình vẽ. Khi điện áp ở chân VIN+ lớn hơn điện áp ở chân VIN+ ngõ ra sẽ ở mức 1 và ngược lại.
Dựa vào hình vẽ ta thấy đáp ứng tại ngõ ra không phải tức thời so với thay đổi tại ngõ vào mà cần có một khoảng thời gian nhất định để ngõ ra thay đổi trọng thái (tối đa là 10us). Cần chú ý đến khoảng thời gian đáp ứng này khi sử dụng bộ so sánh.
Cực tính của các bộ so sánh có thể thay dổi dựa vào các giá trị đặt vào các bit C2INVvà C1INV (CMCON).
Các thanh ghi liên quan đến bộ so sánh bao gồm:
CMCON (địa chỉ 9Ch) và CVRCON (địa chỉ 9Dh): xác lập các thông số cho bộ so sánh.
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): chứa các bit cho phép các ngắt(GIE và PEIE).
PIR2 (địa chỉ 0Dh): chứa cờ ngắt của bộ so sánh (CMIF).
PIE2 (địa chỉ 8Dh): chứa bit cho phép bộ so sánh (CNIE).
PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): các thanh ghi điều khiển PORTA.
2.2.10 Bộ tạo điện áp so sánh.
Bộ so sánh này chỉ hoạt động khi bộ Comparator được chỉ định hoạt động ở chế độ “110”. Khi đó các pin RA0/AN0 và RA1/AN1 (khi CIS = 0) hoặc pin RA3/AN3 và RA2/AN2 (khiCIS = 1)sẽ là ngõ vào analog của điện áp cần so sánh đưa vào ngõ VIN- của 2 bộ so sánh C1 và C2. Trong khi đó điện áp đưa vào ngõ VIN+ sẽ được lấy từ một bộ tạo điện áp so sánh.
Hình 1.10: Sơ đồ khối bộ tạo điện áp so sánh.
Bộ tạo điện áp so sánh này bao gồm 1 thang điện trở 16 mức đóng vai trò là cầu phân áp chia nhỏ điện áp VĐ thành nhiều mức khác nhau(16 mức). Mỗi mức có giá trị điện áp khác nhau tùy thuộc vào bit điều khiển CVRR (CVRCON).
Nếu CVRR ở mức logic 1, điện trở 8R sẽ không có tác dụng như 1 thành phần của cầu phân áp(BJT dẫn mạnh và dòng điện đi qua điện trở 8R), khi đó 1 mức điện áp có giá trị VDD/24. Ngược lại khi CVRR ở mức logic 0,dòng điện sẽ qua điện trở 8R và 1 mức điện áp có giá tri VDD/32.
Các mức điện áp này được đưa qua bộ MUX cho phép ta chọn được điện áp đưa ra pin RA2/AN2/VREF-/CVREF để đưa vào ngõ VIN+ của bộ so sánh bằng cách đưa các giá trị thíchhợp vào các bit CVR3:CVR0.
Bộ tạo điện áp so sánh này có thể xem như một bộ chuyển đổi D/A đơn giản. Giá trị điện áp cần so sánh ở ngõ vào analog sẽ được so sánh với các mức điện áp do bộ tạo điện áp tạo ra cho tới khi 2 điện áp này đạt được giá trị xấp xỉ bằng nhau. Khi đó kết quả chuyển đổi xem như được chứa trong các bit CVR3:CVR0.
Các thanh ghi liên quan đến bộ tạo điện áp so sánh này bao gồm:
CVRCON (địa chỉ 9Dh): thanh ghi trực tiếp điều khiển bộ sosánhđiện áp.
CMCON (địa chỉ 9Ch): thanh ghi điều khiển bộ Comparator.
2.2.11CCP.
CCP ( Capture/Compare/PWM ) bao gồm các thao tác trên các xung đếmcung cấp bởi các bộ đếm Timer 1 và Timer 2.
PIC16F877A được tích hợp sẵn hai khối CCP : CCP1 và CCP2.MỗiCCP có một thanh ghi 16 bit (CCPR1H:CCPR1L và CCPR2H:CCPR2L), pin điều khiển dùng cho khối CCPx là RC2/CCP1 và RC1/T1OSI/CCP. Các chức năng của CCP bao gồm:
Capture.
So sánh (Compare).
Điều chế độ rộng xung PWM (Pulse Width Modulation).
Cả CCP1 và CCP2 về nguyên tắc hoạt động đều giống nhau và chức năng của từng khối là khá độc lập. Tuy nhiên trong một số trường hợp ngoại lệ CCP1 và CCP2 có khả năng phối hợp với nhau để tạo ra các hiện tượng đặc biệt (Special event trigger) hoặc tác động lên Timer1 và Timer2.
2.2.12Ngôn ngữ lập trình cho PIC.
Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có MPLAB (được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập trình cấp cao hơn bao gồm C, Basic, Pascal,... Ngoài ra còn có một số ngôn ngữ lập trình được phát triển dành riêng cho PIC như PICBasic, MikroBasic,....
Ở đồ án này chúng em sử dụng ngôn ngữ lập trình C trong CCS. CCS là trình biên dịch dùng ngôn ngữ C lập trình cho vi điều khiển cho phép phối hợp ASEMBLY cùng với C điều này làm cho chương trình trở nên uyển chuyển hơn.
Đầu tiên là các chỉ thị tiền xử lý: #....... có nhiệm vụ báo cho CCS cần sử dụng những gì cho chương trình C như dùng VXL gì, có dùng giao tiếp PC không, ADC không, DELAY không,....
Các khai báo biến.
Các hàm con.
Các hàm phục vụ ngắt theo sau bởi 1 chỉ thị tiền xử lý cho biết dùng ngắt nào.
Chương trình chính.
Khai báo biến, hằng, mảng:
Các loại biến sau được hỗ trợ:
Int1 số 1 bit = true hay false (0 hay 1)
Int8 số nguyên 1 byte (8 bit)
Int16 số nguyên 16 bit
Int32 số nguyên 32 bit
Char ký tự 8 bit
Float số thực 32 bit
Phạm vi biến:
Int8: 0, 255
Int16: 0, 2^15-1
Int32: 0, 2^32-1
Một mảng hằng có kích thước tối đa tùy thuộc vào loại vi điều khiển.
Khai báo 1 biến mảng kích thước tùy thuộc vào khai báo con trỏ trong #device và loại vi điều khiển.
Các cấu trúc lệnh.
If (expr) stmt;[else stmt;]
While(expr) stmt; xét điều kiện trước rồi thực thi biểu thức sau.
Do stmt while (expr);
For (expr1;expr2;expr3)stmt;
Switch(expr) {
Case cexpr: stmt;
...........}
Return[expr];
Break; ngắt ngang thoát khỏi vòng lặp.
Continue; quay trở lại vòng lặp.
Chỉ thị tiền xử lý:
#include
Filename: tên file cho thiết bị *.h, *.c. Nếu chỉ định file ở đường dẫn khác thì thêm đường dẫn vào.
#bit id =x.y
Id: tên biến
X: biến C (8, 16, 32 bit)
Y: vị trí bit trong x
#byte id =x
X: địa chỉ
Id: tên biến C
#device
#org
#use
Hàm DELAY
Cấu trúc: delay_us(timer)
Nếu timer là biến thì =0-255
Nếu timer là hằng thì= 0-65535
Hàm không trả về trị.
Hàm này cho phép trễ khoảng thời gian
Xử lý ADC
Setup_ADC(mode)// dùng để định cách thức hoạt động cho ADC.
Setup_ADC_port(value)// xác định chân lấy tín hiệu analog và điện thế chuẩn sử dụng.
Setup_ADC_channel(channel)// chọn chân để đọc vào giá trị analog bằng lệnh Read_ADC.
Read_ADC(mode) //dùng đọc các giá trị ADC từ thanh ghi chứa kết quả biến đổi ADC.
3.3Màn hình LCD.
3.3.1Hình dáng và cấu tạo.
Có rất nhiều loại LCD được sử dụng trong nhiều ứng dụng của vi điều khiển. LCD có rất nhiều ưu điểm so với các dạng hiển thị khác: nó có khả năng hiển thi kí tự đa dạng, trực quan (chữ, số, kí tự đồ họa) dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn ít tài nguyên hệ thống và giá thành rẻ...
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau.
Hình 1.11: Hình dáng của loại LCD thông dụng.
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ tự và đặt tên như hình:
Hình 1.12: Sơ đồ chân của LCD.
3.3.2Chức năng các chân.
Chân
Ký hiệu
Mô tả
1
Vss
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển.
2
VDD
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V của mạch điều khiển.
3
VEE
Điều chỉnh độ tương phản của LCD.
4
RS
Chân chọn thanh ghi (Register select). Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read).
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
5
R/W
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc.
6
E
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.
7 - 14
DB0 - DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7.
15
-
Nguồn dương cho đèn nền
16
-
GND cho đèn nền
CHƯƠNG III: THIẾT KẾ VÀ CHẾ TẠO
KHỐI
NGUỒN
3.1. SƠ ĐỒ KHỐI
KHỐI HIỂN THỊ
KHỐI CẢM BIẾN
KHỐI
XỬ
LÝ
KHỐI CẤP NHIỆT
KHỐI CÀI
ĐẶT
Hình 2.1: Sơ đồ khối.
Phân tích chức năng các khối.
Khối nguồn: Có chức năng cung cấp nguồn nuôi cho toàn bộ mạch điện.
Nguồi nuôi thường duy trì ổn định ở mức +5V. Do yêu cầu cao của hệ thống các nguồn nuôi thường được chế tạomột cách đặc biệt nhằm đem lại hiệu quả, và tính ổn định cao.
Thông thường có 2 kiểu nguồn chính: Dùng pin hoặc ắc quy cho điện áp tương đối ổn định, mặc dù trên thị trường không có loại pin hoặc ắc quy chuẩn 5V cho nên nếu dùng nó thì phải qua một bộ biến đổi điện áp để đưa điện áp về dạng chuẩn hơn nữa trong quá trình sử dụng, năng lượng trong pin, ắc quy hết đi hệ thống sẽ bị gián đoạn.
Hình 2.2: Sơ đồ đưa điện áp 6V từ pin về điện áp chuẩn.
Trên thực tế để có nguồn điện đáng tin cậy người ta hay dùng phương pháp ổn áp điện áp một chiều từ cuộn sơ cấp của biến áp sau khi đã chỉnh lưu bằng cách sử dụng một số IC ổn áp như 7805 hoặc một số loại khác.
Mạch chỉnh lưu và ổn áp: Để tạo ra điện áp một chiều sử dụng cho mạch luôn chạy ổn định thì trên thực tế cần phải có bộ chuyển đổi từ nguồn xoay chiều sang nguồn một chiều. Bộ chuyển đổi đó cơ bản bao gồm:
Biến áp nguồn: Hạ thế từ 220V xuống các điện áp thấp hơn .
Mạch chỉnh lưu: Chuyển đổi nguồn AC thành DC.
Mạch lọc: Lọc gợn xoay chiều sau chỉnh lưu cho nguồn DC phẳng hơn.
Mạch ổn áp: Giữ một điện áp ra cố định cung cấp cho tải tiêu thụ.
Hình 2.3: Sơ đồ mắc mạch chuyển đổi nguồn AC thành DC.
Sơ đồ và nguyên lý hoạt động mạch ổn áp một chiều 5V:
Hình 2.4: Mạch ổn áp 5V DC.
Nguyên lý hoạt động:
Nguồn 6V AC từ cuộn thứ cấp của biến áp được chỉnh lưu thành DC tại điểm A thông qua mạch chỉnh lưu 2 nửa chu kì gồm 4 diode D1, D2, D3, D4. Sau chỉnh lưu, điện áp một chiều vẫn còn gợn sóng nên được đưa qua mạch lọc gồm tụ C1 để giảm thiều gợn sóng rồi tiếp tục vào mạch ổn áp 7805. Ổn áp 7805 có đầu vào VIN(chân 1) > 5V nên nó thực hiện ổn áp thành đầu ra mức 5V tại VOUT(chân 3) để cung cấp cho tải.
LCD 16X2 : tại điện áp nguồn 5V thì dòng tiêu thụ max của LCD là 265mA.
Khối cảm biến: Khối cảm biến có chức năng đo nhiệt độ của môi trường và đưa tín hiệu thu được đến khối vi xử lí.
Khối vi xử lý: Khối này có chức năng chuyển đổi ADC.
Đo nhiệt độ môi trường tại một điểm thông qua sensor nhiệt LM35. LM35 là sensor đo nhiệt, đo được nhiệt độ trong khoảng từ -500C đến 1500C, đầu ra là 10mV/0C. Đầu ra này được đưa vào chân Analog của bộ ADC.
Khối hiển thị: Có chức năng hiển thị giá trị nhiệt độ lên LCD.
Sơ đồ nguyên lý.
PIC16F877A
+5V
_XGR_16X2_R2
+5V
+5V
+5V
780
5V
+5V
+5V
MOC3010M
MOC3010M
GND
GND
GND
GND
GND
GND
GN
D
GND
B138-V
B138-V
GND
GND
10k
10k
220
220
IC1
VDD
VSS
MCLR/HV
1
RA0/AN0
2
RA1/AN1
3
RA2/AN2
4
RA3/AN3
5
RA4/0CKI
6
RA5/AN4
7
RE0/RD/AN5
8
RE1/WR/AN6
9
RE2/CS/AN7
10
OSC1/CLKIN
13
OSC2/CLKO_
14
RC0/1OSO
15
RC1/1OSI
16
RC2/CCP1
17
RC3/SCK
18
RD0/PSP0
19
RD1/PSP1
20
RD2/PSP2
21
RD3/PSP3
22
SDI/RC4
23
SDO/RC5
24
X/RC6
25
RX/RC7
26
PSP4/RD4
27
PSP5/RD5
28
PSP6/RD6
29
PSP7/RD7
30
12
1
1
IN/RB0
33
RB1
34
RB2
35
PGM/RB3
36
RB4
37
RB5
38
PGC/RB6
39
PGD/RB7
40
32
31
S1
3
1
2
4
DIS1
GND
1
VCC
2
CONR
3
RS
4
R/W
5
E
6
D0
7
D1
8
D2
9
D3
10
D4
1
1
D5
12
D6
13
D7
14
NC
15
NC
16
Q6
C1
C2
JP1
1
2
3
4
5
R1
1
3
2
C3
C4
C5
IC2
GND
VI
1
2
VO
3
LED1
C6
B1
AC1
AC2
-
+
X1-1
X1-2
OK1
1
2
4
6
OK2
1
2
4
6
1
2
F1
X2-1
X2-2
R2
R3
R4
X3-1
X3-2
X4-1
X4-2
R5
R6
R7
RC1
RC1
RC2
RC2
LCDHDISPLAYH16x2
Phân tích nguyên lý hoạt động của cả mạch điện.
Nút nhấn S1 là nút RESET: 1 đầu nối GND, đầu còn lại nối với trở treo tạo mức lên Vcc và nối vào chân MCLR/Vpp của vi xử lý. Khi chưa tác động chân MCLR/Vpp ở mức cao,bộ vi xử lý hoạt động bình thường. Khi được tác động thì chân MCLR/Vpp được đưa xuống mức thấp,bộ xử lý ngay lập tức được reset nhảy về thực hiện câu lệnh ở ngăn nhớ đầu tiên của bộ nhớ.
LM35: Chân 1 là GND, chân 2 là Vout, chân 3 là Vcc. Dữ liệu chân 2 sẽ được đưa vào bộ đọc và chuyển đổi ADC được tích hợp trong bộ xử lý thông qua kênh AN2.
Tạo dao động: gồm thạch anh 20MHz và 2 tụ đất 33pF.
Hiển thị LCD, gồm 1 LCD 16x2. LCD được truyền dữ liệu 4 bít từ vi điều khiển qua các chân D4, D5, D6, D7. Còn lại D0, D1, D2, D3 không sử dụng ta bỏ trống. Ta cấp nguồn cho led màn hình LCD thông qua chân 15 và 16 của LCD.
Ở mạch này ta chỉ xử dụng chức năng ghi dữ liệu lên LCD nên chân RW ta nối GND.
Biến trở tinh chỉnh R3 có tác dụng điều chỉnh độ tương phản cho LCD.
Khối mạch nạp: Gồm có chân 1 chân Reset, chân 2 là chân Vcc, chân 3 là chân nối GND, chân 4 là chân PGD, chân 5 là chân PGC ( chân PGD và PGC dùng để truyền dữ liệu từ máy tính thông qua mạch nạp vào IC.
Thiết kế sơ đồ board mạch.
Sơ đồ mạch in:
Sơ đồ bố trí linh kiện:
Xây dựng phần mềm.
Chúng em sẽ sử dụng chương trình CCS (ngôn ngữ C trong PIC của Microchip) để lập trình cho vi điều khiển, ưu điểm của nó là khá nhỏ gọn so với khi ta viết bằng MASM nhờ được hỗ trợ khá nhiều hàm, ngoài ra ta còn có thể chèn một đoạn chương trình viết bằng ASM giữa 2 chỉ thị tiền xử lý là #ASM và #ENDASM.
Chương trình.
Lưu đồ thuật toán
Lưu đồ thuật toán toàn mạch:
END
HIỂN THỊ LÊN LCD
SƠ ĐỒ CÀI ĐẶT NHIỆT ĐỘ
3.5. Ứng dụng thực tiễn của mạch
Đây là một trong những mạch cơ bản sử dụng PIC với tính năng cảm ứng đem lại nhiều tiện ích khi sử dụng. Trước hết, việc cảm ứng và hiển thị sự thay đổi và nhiệt độ môi trường là hết sức cần thiết trong cả đời sống và sản xuất, giúp chủ động trong các thao tác liên quan đến nhiệt độ môi trường như yếu tố nhiệt độ trong sinh hoạt (ấp trứng, ươm mầm, báo động) hay các thao tác nghiệp vụ đòi hỏi nhiệt độ ổn định trong công nghiệp. Đây cũng là một mạch điện tử thân thiện với người sử dụng, nhờ vào khả năng hiển thị đa dạng của màn hình LCD, ngoài việc hiển thị nhiệt độ mạch còn giúp hiển thị những cảnh báo hữu ích cho con người. Cảm biến nhiệt LM35 cũng là một trong những thiết bị cảm ứng độ nhạy cao, giá thành thấp giúp cảm ứng tốt nhiệt độ môi trường. Do còn hạn chế trong kiến thức về phần cứng và thực hiện thao tác làm mạch, nhóm em vẫn chưa thực hiện được ý tưởng của mình trong việc mở rộng ứng dụng của mạch này trong việc điều khiển động cơ hay các thiết bị báo cháy, thiết bị điều hòa nhiệt độ (quạt, máy lạnh) mà chỉ dừng lại ở mức độ hiển thị. Nhưng nhóm em cũng có tham khảo đến những hướng để mở rộng mạch như:
Nâng cao độ chính xác hiển thị bằng cách dùng ADC có độ phân giải cao
hơn (có thể dùng ADC ngoài).
Thêm bàn phím giao tiếp để có thể thay đổi trực tiếp khoảng nhiệt độ theo
dõi.
Sử dụng EEPROM để lưu giá trị nhiệt độ mà người dùng thiết lập, các lần
thay đổi khác.
Ghép nối máy tính để truyền giá trị nhiệt độ đến máy tính.
Ghép nối LCD và một mạch đếm thời gian thực (DS1307) để ứng với mỗi
thời điểm chương trình sẽ tự động chọn khoảng thiết lập nhiệt độ thích hợp theo
từng mùa, theo từng thời điểm định trước
Sử dụng PIC trong các mạch thiết kế tự động kết hợp với các mạch tăng
giảm nhiệt độ để đảm bảo nhiệt độ luôn bám theo một giá trị cho trước, hệ ổn
định nhiệt (giá trị thay đổi là rất nhỏ).
CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Sau một thời gian tìm hiểu và được sự hướng dẫn tận tình của thầy Nguyễn Viết Ngư, chúng em đã hoàn thành đồ án “Thiết kế và chế tạo mạch đo nhiệt độ”. Chúng em đã cho chạy thử và kết quả thu được thỏa mãn nhu cầu đặt ra.
Với đề tài này chúng em đã ứng dụng một phần nhỏ của vi điều khiển PIC. Trong thực tế có rất nhiều ứng dụng thành công sử dụng vi điều khiển PIC.
Trong thời gian thực hiện đồ án này chúng em đã thu được những kết quả như sau:
Học hỏi được nhiều hơn và có thêm nhiều kiến thức.
Có khả năng phân tích, thiết kế và thi công một sản phẩm hoàn chỉnh.
Tuy nhiên với thời gian cho phép cũng như kiến thức còn hạn chế đồ án vẫn còn những thiếu sót.
Một lần nữa chúng em xin chân thành cảm ơn thầy Nguyễn Viết Ngư và các thầy, cô giáo đã nhiệt tình hướng dẫn, truyền đạt kiến thức trong suốt quá trình học tập và thực hiện đồ án này.
Nhóm sinh viên thực hiện
Phạm Văn Thực
Thân Thị Thương
TÀI LIỆU THAM KHẢO
1.Giáo trình đo lường cảm biến.
2.Giáo trình kỹ thuật tương tự.
3.Giáo trình điện tử căn bản. tác giả Nguyễn Thành Long- Nguyễn Vũ Thắng
4.Website:
www.diendandientu.com
www.dientuvietnam.net
www.alldatasheet.com
www.dientumaytinh.com
Các file đính kèm theo tài liệu này:
- do_an_4_4002.docx