Điều này tạo nhiều 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 thành công, dễ dàng trao đổi, học tập
Trang 1ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Trang 2thuật điện tử viễn thông đã tạo ra hàng loạt những thiết bị với các đặc điểm nổi bật như
sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần thiết góp phần cho
hoạt động của con người đạt hiệu quả
Điện tử viễn thông đang trở thành một ngành khoa học đa nhiệm vụ và được ứng dụng nhiều trên mọi lĩnh vực của đời sống và trong đó có việc ứng dụng các công nghệ mới để nâng cao năng suất, chất lượng dịch vụ, giảm thiểu sức lao động của con người
đang ngày càng trở nên phổ biến Vì vậy em đã chọn đề tài “Thiết kế, chế tạo mô
hình hệ thống bơm nước tự động” dựa trên cơ sở vi điều khiển PIC16F877A và cảm
biến siêu âm SRF05 để thực hiện đồ án này
Em xin gửi lời cảm ơn đến Th.S Đặng Thái Sơn cũng như các thầy cô, các bạn
trong Khoa Điện tử Viễn thông đã giúp đỡ, động viên, tạo mọi điều kiện để em hoàn thành đề tài này
Tuy nhiên, trong quá trình thực hiện đề tài của mình, em chắc chắn sẽ không tránh khỏi những thiếu sót, kính mong các thầy, cô thông cảm và góp ý thêm cho em
Em xin chân thành cảm ơn!
Nghệ An, tháng 05 năm 2015 Sinh viên thực hiện
Nguyễn Tuấn Anh
Trang 3Trên cơ sở đó nghiên cứu chế tạo mô hình hệ thống bơm nước tự động sử dụng PIC16F877A và cảm biến siêu âm SRF05
Nội dung đồ án gồm 3 chương:
Chương 1 Tổng quan về đề tài
Nêu lên lý do chọn đề tài, mục đích của đề tài, đối tượng nghiên cứ và ý nghĩ của đề tài thực hiện
Chương 2 Giới thiệu về vi điều khiển PIC và cảm biến siêu âm
Chương này nêu tổng quát về vi điều khiển PIC và cảm biến siêu âm Cùng đó là các thông số, đặc điểm kỹ thuật của vi điều khiển PIC16F877A và cảm biến siêu âm SRF05 được dùng để thiết kế mô hình
Chương 3 Thiết kế và thi công hệ thống
Đưa ra các tiêu chí thiết kế mô hình, tính toán thiết kế mô hình cho phù hợp với các chỉ tiêu đã đề ra Trình bày nguyên lý hoạt động của mô hình
Do nhiều mặt còn hạn chế, em mong nhận được ý kiến đóng góp của các thầy cô và các bạn để đồ án được hoàn thiện hơn
ABSTRACT
This project presents PIC16F877A microcontroller architecture and SRF05 ultrasonic sensor Based on that study models manufactured automatic pumping system using PIC16F877A and SRF05 ultrasonic sensor
Content scheme includes 3 chapters:
Chapter 1 Thread overview
To outline the resons to choose a subject, the purpose of the research, subjects and thought on the topic implementation
Chapter 2 Introduction to PIC microcontrollers and ultrasonic sensors
Trang 4Giving the model design criteria, calculate the design model to suit the targets already set Presenting operating principles of the model
Because many items are limited, I would like to receive feedback from teachers
and friends to get more complete projects
Trang 5MỤC LỤC
Trang
MỞ ĐẦU 1
TÓM TẮT ĐỒ ÁN 1
DANH MỤC CÁC BẢNG BIỂU 8
DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ 9
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 10
Chương 1 TỔNG QUAN VỀ ĐỀ TÀI 11
1.1 Lý do chọn đề tài 11
1.2 Mục đích của đề tài 11
1.3 Đối tượng và phạm vi nghiên cứu 11
1.4 Ý nghĩa của đề tài 12
Chương 2 GIỚI THIỆU VỀ VI ĐIỀU KHIÊN PIC VÀ CẢM BIẾN SIÊU ÂM 13
2.1 Giới thiệu chung về vi điều khiển PIC 13
2.1.1 Định nghĩa 13
2.1.2 Kiến trúc PIC 14
2.1.3 RISC và CISC 14
2.1.4 Pipelining 15
2.1.5 Các dòng PIC và cách lựa chọn vi điều khiển PIC 15
2.1.6 Ngôn ngữ lập trình cho PIC 16
2.1.7 Mạch nạp PIC 16
2.2 Vi điều khiển PIC16F877A 17
2.2.1 Cấu trúc tổng quát PIC16F877A 19
2.2.2 Bộ Nhớ PIC 16F877A 19
2.2.3 Các cổng xuất nhập của PIC16F877A 22
2.2.4 Các bộ định thời 24
2.2.5 Ngắt của PIC16F877A 27
2.2.6 Các thanh ghi chức năng đặc biệt SFR 28
2.2.7 Thanh ghi mục đích chung GPR 30
Trang 62.2.8 Ngăn nhớ stack 31
2.3 Giới thiệu chung về cảm biến siêu âm 31
2.3.1 Cảm biến siêu âm và nguyên tắc TOF (Time Of Flight) 32
2.3.2 Tầm quét của cảm biến siêu âm 33
2.3.3 Thông số một số loại cảm biến siêu âm SRF 33
2.3.4 Các sai số nhiễu phổ biến với cảm biến siêu âm 34
2.4 Cảm biến siêu âm SRF05 và đặc điểm kỹ thuật 36
2.4.1 Các chế độ của SRF05 36
2.4.2 Một số đặc điểm khác của cảm biến siêu âm SRF05 40
Chương 3 THIẾT KẾ VÀ THI CÔNG HỆ THỐNG 43
3.1 Yêu cầu hệ thống đặt ra 43
3.2 Sơ đồ hệ thống 43
3.2.1 Sơ đồ khối 43
3.2.2 Sơ đồ nguyên lí 44
3.2.3 Các khối trong hệ thống 45
3.2.4 Sơ đồ thuật toán 47
3.3 Đo mực nước với cảm biến siêu âm SRF05 47
3.3.1 Cách điều khiển SRF05 hoạt động 47
3.3.2 Relay 48
3.3.3 Máy bơm nước 50
3.3.4 Bể nước bơm 52
KẾT LUẬN 54
PHỤ LỤC 55
TÀI LIỆU THAM KHẢO 60
Trang 7DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
PIC Programable Intelligent
Computer
Máy tính khả trình thông minh
CPU Central Processing Unit Bộ xử lý trung tâm RISC Reduced Instruction Set
Computer
Máy tính với tập lệnh đơn giản hóa
CISC Complex Instruction Set
Computer
Máy tính với tập lệnh phức tạp
SFR Special Function Register Thanh ghi có chức năng đặc biệt GPR General Purpose Register Thanh ghi mục đích chung ADC
PWM ICSP
Analog digital convert Pulse wide modulation In-circuit serial programming
Chuyển đổi tương tự - số Điều chế độ rộng xung Tính năng nạp chương trình điện áp thấp
Trang 8DANH MỤC CÁC BẢNG BIỂU
Bảng 2.1 Bảng chọn bank thanh ghi 20 Bảng 2.2 Thông số kỹ thuật của 1 số loại cảm biến siêu âm 33
Trang 9DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ
Hình 2.1 Sơ đồ chân vi điều khiển PIC16F877A 17
Hình 2.2 Sơ đồ khối PIC16F877A 18
Hình 2.3 Sơ đồ bộ nhớ chương trình 20
Hình 2.4 Sơ đồ bộ nhớ dữ liệu 21
Hình 2.5 Sơ đồ khối của time0 24
Hình 2.6 Sơ đồ khối của time1 25
Hình 2.7 Sơ đồ khối của time2 26
Hình 2.8 Sơ đồ các ngắt trong PIC16F877A 27
Hình 2.9 Một số loại cảm biến siêu âm 31
Hình 2.10 Nguyên tắc quét của sóng siêu âm 32
Hình 2.11 Tầm quét của cảm biến siêu âm 33
Hình 2.12 Hiện tượng forecasting 35
Hình 2.13 Hiện tượng crosstalk 35
Hình 2.14 Chế độ hoạt động 1 37
Hình 2.15 Chế độ hoạt động 2 37
Hình 2.16 Các ngõ và chân ra vào của cảm biến 38
Hình 2.17 Đồ thị chùm tia cảm biến được sử dụng trên SRF 05 39
Hình 2.18 Nguyên tắc cơ bản sonar 40
Hình 2.19 Phản xạ sóng âm hồi tiếp phụ thuộc vào đối tượng 40
Hình 2.20 Vùng phát hiện của SRF05 41
Hình 2.21 Vùng hoạt động chung của 2 cảm biến 42
Hình 3.1 Hệ thống bơm nước tự động 43
Hình 3.2 Sơ đồ khối mạch điều khiển 44
Hình 3.3 Sơ đồ nguyên lý 44
Hình 3.4 Khối nguồn 45
Hình 3.5 Cảm biến siêu âm SRF05 45
Hình 3.6 Khối vi điều khiển 46
Trang 10Hình 3.7 LCD 16x02 46
Hình 3.8 Sơ đồ thuật toán 47
Hình 3.9 Relay 48
Hình 3.10 Sơ đồ nguyên lý mạch đóng cắt 49
Hình 3.11 Máy bơm nước thông dụng 51
Hình 3.12 Máy bơm nước mô hình 52
Hình 3.13 Bể chứa nước 53
Trang 11Chương 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 Lý do chọn đề tài
Ngày nay hệ thống dự trữ, cấp nước cho các hộ gia đình đa phần là sử dụng téc nước inox đặt trên mái nhà bê tông hoặc các giá sắt cao để tạo áp lực đẩy nước xuống
hệ thống ống dẫn bên dưới, nước được đưa đến các đầu vòi dùng để tắm rửa, giặt quần
áo, đun nấu, tưới tiêu trong gia đình… Tuy nhiên, để đưa nước đưa lên bể hoặc téc nước trên mái nhà phải sử dụng hệ thống bơm nước tự động kiểm soát mực nước trong téc Máy bơm tự động tắt bơm khi nước trong téc đầy và tự động mở bơm khi nước trong téc cạn nhờ công tắc điện phao nước, được đa số các hộ gia đình hiện nay sử dụng
Hầu như các hộ gia đình đều sử dụng công tắc điện phao nước nhưng có nhược điểm là hơi nước bốc lên từ bể chứa làm cho các thiết bị lò xo, thanh đồng tiếp xúc chóng bị han gỉ không tiếp điện được, nhanh hỏng, có thể gây chập điện
Dựa vào những lý do trên em đã lựa chọn đề tài “Thiết kế, chế tạo mô hình hệ
thống bơm nước tự động” dựa trên cơ sở vi điều khiến PIC16F877A và cảm biến siêu
âm SRF05 đo khoảng cách để hạn chế những nhược điểm do công tắc điện phao nước mang tới
1.2 Mục đích của đề tài
Xây dựng máy bơm nước tự động cung cấp đầy đủ nguồn nước dự trữ phục vụ cho sinh hoạt cho các khách sạn, nhà hàng, văn phòng, hộ gia đình Sử dụng cảm biến siêu âm đo khoảng cách mức trên và mức dưới của mặt nước để đóng ngắt tự động máy bơm Tránh hiện tượng đóng ngắt liên tục của máy bơm khi sử dụng phao điện đóng ngắt tự động làm máy bơm chập chờn dễ gây xung điện dẫn đến cháy Bên cạnh
đó cũng giúp người dân tiết kiệm chi phí khi sử dụng nước sinh hoạt
1.3 Đối tượng và phạm vi nghiên cứu
Chúng ta luôn bắt gặp hệ thống cung cấp nước sinh hoạt trong các khách sạn, nhà hàng, văn phòng, hộ gia đình,… nơi cần thiết lượng nước sinh hoạt với nhu cầu (lưu lượng) luôn thay đổi thường xuyên
Trang 12Dựa trên những lý do đó và mục đích lựa chọn đề tài, cùng với kiến thức còn hạn
chế của bản thân nên trong đồ án này em đã thiết kế hệ thống bơm nước tự động với quy mô nhỏ sử dụng trong các khách sạn, nhà hàng, văn phòng, hộ gia đình…
1.4 Ý nghĩa của đề tài
Khi đưa vào ứng dụng thực tế sẽ giải quyết được một số vấn đề :
Giải quyết nhu cầu sử dụng nước và nguồn nước dự trữ dùng trong sinh hoạt
Tiết kiệm điện năng khi sử dụng máy bơm tự động
Giải quyết được những hạn chế cho máy bơm khi sử dụng công tắc điện phao nước đem tới
Trang 13Chương 2 GIỚI THIỆU VỀ VI ĐIỀU KHIÊN PIC VÀ CẢM BIẾN SIÊU ÂM
2.1 Giới thiệu chung về vi điều khiển PIC 2.1.1 Định nghĩa
PIC là viết tắt của “Programable 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ọ: PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển CPU1600 Vi điều khiển này sau đó được nghiên cứu phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC ngày nay
Trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR, ARM Tuy nhiên, hiện nay PIC đang được sử dụng rộng rãi ở Việt Nam vì những nguyên nhân sau:
Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam
Giá thành không quá đắt
Có đầy đủ các 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ư về ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051
Hiện nay tại Việt Nam cũng như trên thế giới, PIC được sử dụng khá rộng rãi Điều này tạo nhiều 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 thành công, dễ dàng trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp khó khăn…
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ừ đơn giản đến phức tạp…
Các tính năng đa dạng của vi điều khiển PIC không ngừng được phát triển
Trang 142.1.2 Kiến trúc PIC
Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Harvard Điểm khác biệt giữa kiến trúc Harvard và kiến trúc Von-Neumann là cấu trúc bộ nhớ dữ liệu và bộ nhớ chương trình
Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương trình và bộ nhớ dữ liệu Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của CPU phải rất cao, vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình Như vậy có thể nói kiến trúc Von-Neumann không thích hợp với cấu trúc của một vi điều khiển
Đối với kiến trúc Harvard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai bộ nhớ riêng biệt Do đó trong cùng một thời điểm CPU có thể tương tác với cả hai
bộ nhớ, như vậy tốc độ xử lí của vi điều khiển được cải thiện đáng kể
Một điểm cần chú ý nữa là tập lệnh trong kiến trúc Harvard có thể được tối ưu tùy theo yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu Ví
dụ, đối với vi điều khiển dòng 16Fxxx, độ dài lệnh luôn là 14 bit (trong khi dữ liệu được tổ chức thành từng byte), còn đối với kiến trúc Von-Neumann, độ dài lệnh luôn là bội số của 1 byte (do dữ liệu được tổ chức thành từng byte)
2.1.3 RISC và CISC
Kiến trúc Havard là khái niệm mới hơn so với kiến trúc Von-Neuman Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của một vi điều khiển qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu, bus chương trình và bộ nhớ dữ liệu, giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi Đồng thời cấu trúc lệnh không còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh tùy theo khả năng
và tốc độ của từng vi điều khiển và để tiếp tục cải tiến tốc độ thực thi tập lệnh, tập lệnh của họ vi điều khiển PIC được thiết kế sao cho chiều dài mã lệnh luôn cố định (ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luon là 14 bit) và cho phép thực thi lệnh trong một chu kỳ của xung clock (ngoại trừ một số trường hợp đặc biệt như lệnh nhảy, lệnh kêu gọi chương trình con… cần hai chu kì xung đồng hồ) Điều này có nghĩa tập lệnh
Trang 15của vi điều khiển thuộc cấu trúc Havard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng bit nhất định
Vi điều khiển được tổ chức theo kiến trúc Harvard còn được gọi là vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là vi điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp vì
mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit (1 byte)
2.1.5 Cá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)
Trang 16Ngoà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 PIC:
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
2.1.6 Ngô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), ngôn ngữ lập trình 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,…
2.1.7 Mạch nạp PIC
Đây cũng là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC Có thể
sử dụng các mạch nạp được cung cấp bởi nhà sản xuất Microchip như: PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II Có thể dung các sản phẩm này
để nạp cho vi điều khiển thông qua chương trình MPLAB Dòng sản phẩm chính thống này có ưu thế là nạp được tất cả các vi điều khiển PIC, tuy nhiên giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình mua sản phẩm
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có thể nhiều mạch nạp được thiết kế dành cho vi điều khiển PIC Có thể sơ lược một số mạch nạp cho PIC như sau:
JDM programmer: mạch nạp này dùng chương trình nạp Icprog cho phép nạp các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điệp áp thấp ISCP (In
Trang 17Circuit Serial Programming) Hầu hết các mạch nạp đề hỗ trợ tính năng nạp chương trình này
WARP-13A và MCP-USB: hai mạch này giống với mạch nạp PICSTART PLUS do nhà sản xuất Microchip cung cấp, tườn thích với trình biên dịch MPLAB, nghĩa là ta có thể trực tiếp dung chương trình MPLAB để nạp cho vi điều khiển PIC
mà không cần sử dụng một chương trình khác, chẳng hạn như ICprog
P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng Ông còn thiết kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp ICprog
Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dụng dành cho PIC như P16RPO40
Các mạch nạp trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể tự lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi công, kiểm tra
và chương trình nạp đều có thể dễ dàng tìm được và download miễn phí thông qua mạng Internet Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi điều khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với một chương trình nạp thích hợp
2.2 Vi điều khiển PIC16F877A
a Hình dạng và sơ đồ chân
Hình 2.1 Sơ đồ chân vi điều khiển PIC16F877A
Trang 18b Các khối trong PIC 16F877A
Khối ALU
Khối bộ nhớ chương trình
Khối bộ nhớ dữ liệu
Khối bộ nhớ file thanh ghi Ram
Khối thanh ghi
Khối ngoại vi timer
Khối giao tiếp
Khối chuyển đổi ADC
Khối các Port xuất nhập
c Các khối PIC16F877A
Hình2.2 Sơ đồ khối PIC16F877A
Trang 192.2.1 Cấu trúc tổng quát PIC16F877A
8 K Flash ROM
368 bytes RAM
256 bytes EEPROM
5 Port I/O (A, B, C, D, E), ngõ vào/ra với tín hiệu điều khiển độc lập
2 bộ định thời 8 bit Timer 0 và Timer 2
1 bộ định thời 16 bit Timer 1, có thể hoạt động trong cả chế độ tiết kiệm năng lượng (Sleep Mode) với nguồn xung clock ngoài
2 bộ CCP, Capture/Compare/PWM - tạm gọi là: Bắt giữ / So sánh / Điều biến xung
1 cổng song song (Parallel Port) 8 bit với các tín hiệu điều khiển.Chế độ tiết kiệm năng lượng (Sleep Mode)
Nạp chương trình bằng cổng nối tiếp ICSP (In-Circuit Serial Programing)
Nguồn dao động lập trình được tạo bằng công nghệ CMOS
1 bộ biến đổi tương tự – số (ADC) 10 bit, 8 ngõ vào
2 bộ so sánh tương tự (Comparator)
1 bộ định thời giám sát (WDT – Watchdog Timer)
35 tập lệnh có độ dài 14 bit
Tần số hoạt động tối đa là 20 MHz
1 cổng nối tiếp (Serial Port)
có địa chỉ thấp của mỗi bank và thanh ghi mục đích chung GPR(General Purpose
Trang 20Register) nằm ở vùng địa chỉ còn lại trong bank Các thanh ghi SFR thường xuyên được sử dụng ví dụ như thanh ghi STATUS 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à giảm bớt lệnh của chương trình Sơ
đồ bộ nhớ dữ liệu như sau:
Hai bit RP1 và RP0 là hai bit chọn Bank:
Bảng 2.1 Bảng chọn bank thanh ghi
PC<12:0>
CALL, RETURN, RETFIE, RETLW
13
Stack level 1 Stack level 2
Stack level 8 Reset vecter
Interrupt vecter
Page 0 Page 1 Page 2 Page 3
0000H
0004H 07FFH 0800H 0FFFH 1000H 17FFH 1800H 1FFFH
On-chip Program memory
PC<12:0>
CALL, RETURN, RETFIE, RETLW
13
Stack level 1 Stack level 2
Stack level 8 Reset vecter
Interrupt vecter
Page 0 Page 1
0000H
0004H 07FFH 0800H 0FFFH 1000H
1FFFH
On-chip Program memory
Hình 2.3 Sơ đồ bộ nhớ chương trình
Trang 21File Address
File address
File address
File address
80 byte
A0H
EFH
General purpose Register
80 byte
120H
16FH
General purpose Register
80 byte
1A0H
1EFH accesses
70h-7Fh
F0H FFH
accesses 70h-7Fh
170H 17FH
accesses 70h-7Fh
1F0H 1FFH
General purpose Register
16 byte
General purpose Register
16 byte
General purpose Register
96 Byte
20H
7FH
□ Unimplemented data memory locations, read as '0'
* Not a physical register.
Note 1: These registers are not implemented on the PIC16F877A 2: These registers are reserved; maintain these registers dear.
Hình 2.4 Sơ đồ bộ nhớ dữ liệu
Trang 222.2.3 Các cổng xuất nhập của PIC16F877A
Cổng xuất nhập chính là phương tiện để chúng giao tiếp với các thiết bị bên ngoài Vi điều khiển PIC16F877A có 5 cổng xuất nhập đó là: PORTA, PORTB, PORTC, PORTD, PORTE
a PORTA
PORTA gồm có 6 chân I/O, đây là port hai chiều, nghĩa là có thể xuất nhập được Chức I/O được điều khiển bởi thanh ghi TRISA có địa chỉ 85h Nếu TRISA=1 thì là chân nhập ngược lại TRISA=0 thì là chân xuất Thao tác này hoàn toàn tương tự đối với các port khác, ngoài ra portA còn là ngõ ra ADC, bộ so sánh, ngõ vào analog ngõ vào xung timer0 và ngõ vào của bộ giao tiếp MSSP (Mater Synchronous Serial Port)
Các thanh ghi SFR liên quan đến portA 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 ở địac chỉ 9Ch, thanh ghi điều khiển bộ so sánh
CVRCON ở địac chỉ 9Dh, thanh ghi điều khiển bộ so sánh điện áp
ADCON ở địac chỉ 9Fh, thanh ghi điều khiển bộ ADC
b PORTB
PORTB gồm có 8 chân I/O, thanh ghi điều khiển là TRISB, khi PORTB=1 thì là port nhập và PORTB=0 thì là port xuất Ngoài ra một số chân của PORTB còn được sử dụng nạp chương trình cho vi điều khiển với các chế độ khác nhau PORTB còn liên quan đến ngắt ngoại vi và Timer0 Mỗi chân của PORTB có điện trở kéo lên Bit 7 của thanh ghi OPTION_REG = 0 thì có thể mở tất cả các điện trở kéo lên Khi PortB được thiết lập là ngõ ra thì sẽ tự động tắt chức năng điện trở kéo lên
Các thanh ghi SFR liên quan đến portB gồm:
PORTB ở các địa chỉ 06h và 106h, chứa giá trị các pin trong portB
TRISB ở các địa chỉ 86h và 186h, điều khiển xuất nhập
OPTION_REG ở các địa chỉ 81h và 181h, điều khiển ngắt ngoại vi và bộ Timer0
Trang 23c PORTC
PORTC là 2 chiều 8 bít, thanh ghi điều khiển xuất nhập là TRISC Các chân của PortC còn chứa các chân chức năng của bộ so sánh, bộ Time0, bộ PWM và chuẩn giao tiếp nối tiếp I2c, SPI, SSP, USART
Các thanh ghi SFR liên quan đến PortC gồm:
PORTC ở các địa chỉ 07h , chứa giá trị các pin trong PortC
TRISC ở các địa chỉ 87h, điều khiển xuất nhập
d PORTD
PORTD là 8 bít I/O, với ngõ vào có mạch schmitt trigger Thanh ghi điều khiển tương ứng là TRISD, PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp dữ liệu
PSP(Paraller Slave Port)
Các thanh ghi SFR liên quan đến PortD gồm:
PORTD ở các địa chỉ 08h , chứa giá trị các pin trong PortC
TRISD ở các địa chỉ 88h, điều khiển xuất nhập
e PORTE
PORTE có 3 chân có cấu hình độc lập để thiết lập ngõ vào hay ra Có mạch điện schmitt trigger ở ngõ vào Port E trở thành ngõ vào vi điều khiển I/O khi bit thứ 4 PSPMODE của TRISE=1 Và cũng chắc chắn rằng TRISE <0:2>=11 và ADCON1 được cấu hình như những ngõ xuất nhập số Hai bit RP1, RP0 nằm trong thanh ghi STATUS dùng để chọn bank Các chân của PortE là ngõ vào analog và các chân điều khiển chuẩn giao tiếp SPS
Các thanh ghi SFR liên quan đến PortE gồm:
PORTE ở các địa chỉ 09h , chứa giá trị các pin trong PortC
TRISD ở các địa chỉ 89h, điều khiển xuất nhập và xác lập các thông số chuẩn PSP
ADCON1 ở địa chỉ 9Fh, thanh ghi điều khiển bộ ADC
Trang 242.2.4 Các bộ định thời
a Timer0
Hình 2.5 Sơ đồ khối của time0
Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A là
bộ đếm 8 bít được kết nối với bộ chia tần 8 bít Cấu trúc của timer0 cho phép ta lựa chọn xung clock tác động và cạnh của xung clock Ngắt time0 sẽ xuất hiện khi timer0
bị tràn
Muốn time0 hoạt động ở chế độ timer ta xóa bít TOSC(OPTION_ REC<5>) Khi
đó giá trị của TMR0 sẽ tăng theo từng chu kỳ của xung đồng hồ(Tần số vào time0 bằng
¼ tần số Oscillator) Khi giá trị TMR0 từ FFh trở về 00h, ngắt time0 sẽ xuất hiện Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định 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(OPTION_ REC<5>) Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOSC1 Bít TOSE(OPTION_ REC<4>) cho phép cạnh tác động vào bộ đếm Nếu TOSE=0 cạnh tác động sẽ là cạnh lên, còn nếu TOSE=1 cạnh tác động sẽ là cạnh xuống Khi thanh ghi TMR0 bị tràn, bít TMR0IF (INTCON<2>) sẽ được sét, đây chính là cờ ngắt của
Trang 25time0, cờ ngắt này phải được xóa trước khi chương trình thực hiện quá trình đếm Ngắt time0 không thể đánh thức vi điều khiển từ chế độ sleep
Các lệnh tác động lên thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler, khi đối tượng tác động là time0, tác động lên giá trị TMR0 sẽ xóa prescaler nhưng không làm thay đổi giá trị 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
Thanh ghi điều khiển liên quan đến timer0 gồm:
TMR0 ở địa chỉ 01h và 101h chứa giá trị đếm của timer0
INTCON ở địa chỉ 0Bh, 8bh, 10Bh, 18Bh cho phép ngắt hoạt động
OPTION_REC ở địa chỉ 81h 181h, điều khiển prescaler
b Timer1
Là bộ định thời 16 bít, giá trị của time1 sẽ được lưu trong hai thanh ghi TMR1H
và TMR1L Cờ ngắt của time1là TMR1IF(PIR1<0>), bít điều khiển của time1 sẽ là TMR1IE(PIE<0>) Tương tự như time0, time1 cũng có hai chế độ hoạt động: Chế độ định thời với xung kích là xung clock của oscillator và chế độ counter với xung kích là xung phản ánh các sựu kiện cần đếm lấy từ bên ngoài thông qua chân RC0/T1OSO/T1CKI(cạnh tác động là cạnh lên) việc lựa chọn xung tác động được điều khiển bởi bít TMR1CS(T1CON<1>)
Sơ đồ khối của time1
Hình 2.6 Sơ đồ khối của time1
Trang 26 Thanh ghi điều khiển liên quan đến timer1 gồm:
INTCON ở địa chỉ 0Bh, 8Bh, 10Bh, 18Bh cho phép ngắt hoạt động
PIR1 ở địa chỉ 0Ch chứa cờ ngắt Time1(TMR1IF)
PIE1 ở địa chỉ 8Ch cho phép ngắt Time0(TMR1IE)
TMR1L ở địa chỉ 0Eh chứa giá trị 8 bít thấp của bộ đếm time1
TMR1H ở địa chỉ 0Fh chứa giá trị 8 bít cao của bộ đếm time1
T1CON ở địa chỉ 10h xác lập các thông số cho time1
c Timer2
Là bộ định thời 8 bít và được hỗ trợ bởi hai bộ chia tần số prescaler và postscaler, thanh ghi chứa giá trị đếm của time2 là TMR2, bít cho phép ngắt time2 tác động là TMR2ON(T2CON<2>) Cờ ngắt của time2 là TMR2IF(PIR1<1>) xung ngõ vào được đưa qua bộ chia tần prescaler 4 bít(với các tỉ số tần số là 1:1, 1:4 hoặc 1:16 và được điều khiển bởi các bít T2CKPS1: T2CKPS0(T2CON<1:0>))
Sơ đồ khối của time2
Hình 2.7 Sơ đồ khối của time2
Ngoài ra ngõ ra của Time2 còn được kết nối với khối SSP, do đó time2 chỉ còn đóng vai trò tạo ra xung clock cho khối giao tiếp SSP
Thanh ghi điều khiển liên quan đến timer2 gồm:
INTCON ở địa chỉ 0Bh, 8Bh, 10Bh, 18Bh cho phép ngắt hoạt động
PIR1 ở địa chỉ 0Ch chứa cờ ngắt time2(TMR2IF)
Trang 27 PIE1 ở địa chỉ 8Ch cho phép ngắt time2(TMR2IE)
TMR2 ở địa chỉ 11h chứa giá trị đếm của time2
T2CON ở địa chỉ 12h xác lập các thông số cho time2
PR2 ở địa chỉ 92h thanh ghi hỗ trợ cho time2
Time0 và time2 là bộ đếm 8 bít(giá tri đếm tối đa là FFh), trong khi time1 là bộ đếm 16 bít(giá trị đếm tối đa FFFFh) Cả time0, time1, time2 đều có 2 chế độ hoạt động là time và counter, xung clock có tần số bằng ¼ tần số oscillator, xung tác động lên time1 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau(tần số tác động, cạnh tác động) trong khi các thông số xung tác động lên của time1 là cố định Time2 được hỗ trợ bởi hai bộ chia tần số là prescaler và postcaler độc lập, tuy nhiên cạnh tác động vẫn là cạnh lên cố định Time1 có quan hệ với khối CCP, time2 được kết nối với khối SSP
2.2.5 Ngắt của PIC16F877A
Hình 2.8 Sơ đồ các ngắt trong PIC16F877A
Trang 28PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON, bên cạnh đó mỗi ngắt còn có một bít điều khiển và một cờ ngắt riêng Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của của bit GIE và các bít điều khiển khác Bít điều khiển RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bít cho phép các ngắt ngoại vi PEIE Bít điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2 Cờ ngắt của các thanh ghi nằm trong PIR1 và PIR2
Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE, khi chương trình ngắt được thực thi bít GIE tự động được xóa, địa chỉ tiếp theo của chương trình chính được cất vào bộ nhớ stack và
bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bít GIE cũng được set
để cho phép các ngắt hoạt động trở lại Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và được xóa bằng chương trình trước khi cho phép ngắt hoạt động trở lại
để ta có thể phát hiện thời điểm tiếp theo mà ngắt xảy ra
Cần chú ý trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào bộ nhớ stack, trong khi một số thanh ghi quan trọng sẽ không được cất và
có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt Điều này nên được
xử lý bằng chương trình để tránh hiện tượng trên xảy ra
2.2.6 Các 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 bên trong vi điều khiển Có thể phân thanh ghi SFR thành hai loại: thanh ghi SFR liên quan đến chức năng bên trong CPU và thanh ghi SFR để điều khiển các khối chức năng bên ngoài(ADC,PWM…)
Thanh ghi status(03h, 83h, 103h, 183h) Thanh ghi chứa kết quả phép toán của khối ALU trạng thái reset và các bít chọn bank cần truy xuất trong bộ nhớ dữ liệu
Trang 29
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-0 R/W-0 R/W-0 IRP RP1 RP0 TO PD Z DC C
Thanh ghi OPTION_REC(81h, 181h) Thanh ghi này cho phép đọc ghi, cho phép điều khiển các chức năng full-up của các chân trong portB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm time0
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x GIE PEIE TMR0IE INTE RBIE TMR0IF INTIF RBIF
Thanh ghi PIR1(0Ch) Chứa cờ ngắt 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 bít điều khiển chứa trong thanh ghi PIE1
R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-x PSPIF ADIF CRIF TXIF SSPIF CCP1IF TMR1IF TMR2IF
Thanh ghi PIE2(8Dh) Chứa các bít điều khiển các ngắt của khối chức năng CCP2, SSP bus, ngắt của bộ
so sánh và ngắt của EEPROM
Trang 30U-0 R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0
- CMIE - EEIE BCLIE - - CCP2IE
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 bít điều khiển chứa trong thanh ghi PIE2
U-0 R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0
- CMIF - EEIE BCLIF - - CCP2IF
2.2.7 Thanh ghi mục đích chung GPR
Các thanh ghi này có thể được truy xuất trực tiếp họ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ứ 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