Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì
các thanh ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi
điều khiển có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết
thanh ghi điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh
ghi nào của ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều
khiển viết các bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng
để thiết lập 8 bits điều khiển trong thanh ghi ETH. Lệnh này không được sử
dụng với thanh ghi MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8
bits trong thanh ghi điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều
khiển phát ra lệnh SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là
lệnh 1 byte, không tác động lên các thanh ghi khác.
69 trang |
Chia sẻ: lylyngoc | Lượt xem: 2879 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Đề tài Điều khiển thiết bị điện qua Internet và GSM_EvaVer, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
:
Mỗi trạm đều phải tự nghe đường dẫn (carrier sense), nếu đường dẫn rỗi
(không có tín hiệu ) thì mới được phát.
Do việc lan truyền tín hiệu cần một thời gian nào đó, nên vẫn có khả năng
hai trạm cùng phát tín hiệu lên đường dẫn. Chính vì vậy, trong khi phát thì
18
mỗi trạm vẫn phải nghe đường dẫn để so sánh tín hiệu phát đi với tín hiệu
nhận được xem có xảy ra xung đột hay không (collision detection).
Trong trường hợp xảy ra xung đột, mỗi trạm đều phải hủy bỏ bức điện của
mình, chờ một thời gian ngẫu nhiên và thử gửi lại.
2.2 Họ giao thức TCP/IP
TCP/IP là viết tắt của Transmission Control Protocol / Internet Protocol
(Giao thức Điều Khiển Truyền Thông /Giao thức Internet). Các tầng trong mô
hình này là:
Tầng Ứng Dụng (Application Layer).
Tầng Giao Vận (Transport Layer).
Tầng Liên Mạng (Internet Layer).
Tầng Giao Tiếp Mạng (Network Interface Layer).
Hình 2.2: Cấu trúc họ giao thức TCP/IP.
19
2.2.1 Tầng ứng dụng (Application Layer)
Gồm nhiều giao thức cung cấp cho các ứng dụng người dùng. Được sử
dụng để định dạng và trao đổi thông tin người dùng và hệ thống. Một số giao
thức thông dụng trong tầng này là: HTTP,FTP,SMTP,…Trong phạm vi đồ
án,chúng ta sử dụng giao thức HTTP mà cụ thể là xây dựng một Webserver
nhúng vào hệ thống.
HTTP là giao thức truyền tải siêu văn bản (HyperText Transfer Protocol).
HTTP xác định cách các thông điệp được định dạng và truyền tải ra sao và hoạt
động của Webserver và các trình duyệt Web. Trong mô hình của HTTP,
Webserver đồng thời cũng là TCPServer, mở sẵn port mặc định dành cho dịch
vụ HTTP là TCP80 (ở chế độ listen), sẵn sàng đợi yêu cầu kết nối từ các client.
Các client sẽ khởi tạo kết nối TCP thông qua port này, sau khi Webserver chấp
nhận kết nối, client sẽ gửi một bản tin HTTP (HTTP message) gọi là HTTP
request tới server trên kết nối TCP vừa thiết lập. Server sẽ trả lời lại bằng một
bản tin HTTP khác là HTTP response. Bản tin này sẽ chứa nội dung trang Web
yêu cầu (được viết bằng ngôn ngữ HTML). Như vậy giao thức HTTP sẽ dựa cơ
bản trên các bản tin HTTP, gồm 2 loại là HTTP request và HTTP response.
Giả sử ta truy nhập vào địa chỉ IP của webserver là 192.168.1.10 qua trình duyệt:
Lúc đó, máy tính của chúng ta sẽ gửi đi một bản tin request của giao thức
HTTP là HTTP Get thông qua giao thức TCP (với cổng TCP được qui
định cho giao thức HTTP là 80) đến địa chỉ webserver trên.
Webserver, ở đây chính là vi điều khiển của chúng ta nhận được bản tin
này (khi đã đi qua hết các lớp giao thức ethernet, IP, TCP rồi mới đến
HTTP). Tại đây vi điều khiển sẽ đọc và phân tích bản tin HTTP request
này để biết máy tính đang yêu cầu tải nội dung trang web nào.
Sau đó vi điều khiển sẽ lấy nội dung trang web này (được soạn thảo theo
ngôn ngữ HTML) chứa trên trên ROM, nó cũng có thể thêm vào trang
20
web đó một số thông tin (ví dụ đọc giá trị từ các sensor cảm biến nhiệt độ
và đưa vào trong trang web), và gửi toàn bộ nội dung trang web thông qua
giao thức TCP trở lại cho máy tính. Nếu nội dung trang web lớn nó có thể
được gửi đi trên rất nhiều gói tin, vì mỗi gói tin chỉ chứa tối đa 1460 byte
dữ liệu.
Máy tính nhận nội dung trang web và trình duyệt sẽ hiển thị lên cho chúng
ta thấy.
Để điều khiển thiết bị kết tới hệ thống từ xa qua web, trên trang web ta có
thể thiết kế một nút nhấn chẳng hạn. Khi ta nhấn nút này trên trình duyệt,
máy tính sẽ gửi đi một bản tin HTTP nữa là HTTP Get. Vi điều khiển sẽ
nhận bản tin HTTP post này, phân tích dữ liệu chứa trong đó để có đáp
ứng tương ứng (bật tắt bóng đèn) sau đó nó sẽ gửi trả lại lần nữa nội dung
trang web đã cập nhật những thay đổi vừa rồi.Trình duyệt sẽ cập nhật nội
dung này lên và ta sẽ thấy được tác động của thao tác điều khiển đó.
2.2.2 Tầng giao vận (Transport Layer)
Nhiệm vụ của tầng là thiết lập phiên truyền thông giữa các máy tính và
quy định cách truyền dữ liệu. Hai giao thức chính trong tầng này gồm UDP
(User Datagram Protocol) và TCP (Transmission Control Protocol). Do UDP
cung cấp các kênh truyền thông phi kết nối nên nó không đảm bảo truyền dữ liệu
một cách tin cậy nên trong phạm vi đồ án chúng ta sử dụng thức TCP. Ngược lại
với UDP, TCP cung cấp các kênh truyền thông hướng kết nối và đảm bảo truyền
dữ liệu 1 cách tin cậy. TCP thường truyền các gói tin có kích thước lớn và yêu
cầu phía nhận xác nhận về các gói tin đã nhận.
Cấu trúc gói TCP:
21
Hình 2.3: Cấu trúc gói TCP.
Chú thích:
- Số port đích và số port nguồn: để phân biệt các tiến trình ứng dụng đang xảy
ra trong máy tính
- Các số sequence và Acknowledgement: số sequence để phân biệt các segment
khác nhau trong một dòng dữ liệu, các số Acknowledgement dùng trong cơ
chế xác nhận
- Vùng Data offset: chiều dài của Header tính theo đơn vị 32 bit
- Một số cờ (flags):
.URG (Urgent): thiết lập 1 khi có dữ liệu quan trọng cần truyền ngay.
.ACK: cho biết có số xác nhận nằm trong vùng Acknowledgement
.PSH (Push): được thiết lập trong trường hợp dữ liệu nên được giao tức
thời
.RST (Reset): chỉ thị một lỗi sai và hủy bỏ phiên làm việc
22
.SYN (Synchronize): trong các bản tin khởi tạo khi thiết lập một kết nối
truyền dữ liệu
. FIN (Finish): dùng đóng 1 phiên làm việc
- Vùng Window: chỉ ra số lượng không gian bộ đệm khả dụng để nhận dữ liệu
- Vùng Checksum: vùng kiểm tra sai cho cả segment
- Vùng Urgent Pointer: chỉ ra chiều dài của dữ liệu urgent
- Vùng Options: xác định kích thước cực đại của 1 segment
Cụ thể hơn, vai trò của TCP trong chồng giao thức TCP gồm 3 chức năng
chính: điều khiển luồng, kiểm soát lỗi và báo nhận.
- Điều khiển luồng: điều phối tốc độ và kích thước luồng dữ liệu để đảm bảo
phía nhận đủ khả năng nhận và xử lý luồng dữ liệu.
- Kiểm soát lỗi: đảm bảo các gói tin đến đúng và đủ.
- Báo nhận: khi nhận được dữ liệu và không có lỗi, phía nhận phải báo lại với
phía gửi biết.
Để thực hiện được các chức năng đó, một quá trình truyền dữ liệu qua giao
thức TCP (mà ta gọi là phiên truyền thông – session) gồm có 3 giai đoạn: Thiết
lập kết nối, truyền dữ liệu và giải phóng kết nối.
Để có thể giám sát chặt chẽ trạng thái và mọi sự kiện xảy ra trong một kết
nối TCP, trạng thái của một kết nối TCP được chuyển đổi tuân theo một lưu đồ
trạng thái như sau:
23
Hình 2.4: Lưu đồ trạng thái kết nối TCP.
Giải thích:
TCP là giao thức hướng kết nối, dạng client – server. Tức là trong một
phiên truyền thông thì sẽ có một phía đóng vai trò client, phía còn lại, lúc nào
cũng ở trạng thái chờ đợi các client thiết lập kết nối tới chính là server.
Ví dụ khi ta truy cập web, thì máy tính của ta là client, máy chủ chứa trang web
chính là server – vi điều khiển, lúc nào cũng ở trạng thái đợi các máy tính client
kết nối đến (và phải có khả năng thiết lập đồng thời nhiều kết nối, vì có thể có
nhiều client kết nối tới cùng lúc).
24
Trong lưu đồ trên, áp dụng cho cả client và server. Cả client và server đều
bắt đầu bằng trạng thái “Close”. Client sẽ thiết lập kết nối theo con đường Active
Open (nó chủ động thiết lập kết nối). Server sẽ thiết lập kết nối theo con đường
Passive Open (thụ động, vì nó đợi client bắt đầu mà)
Quá trình chuyển trạng thái:
- Cả hai bắt đầu bằng trạng thái close, không có kết nối nào tồn tại.
- Khi Server mở một port TCP để đợi client thiết lập kết nối, nó chuyển
sang trạng thái “Listen”.
- Khi client gửi đi bản tin SYN, nó chuyển sang trạng thái “SYN sent”.
- Lúc này khi server nhận được bản tin SYN từ client và gửi đáp lại 1 bản
tin SYN, nó chuyển sang trạng thái “SYN Received”.
- Lúc này client gửi lại bản tin xác nhận ACK (bước 3 trong ví dụ), nó
chuyển sang trạng thái thiết lập kết nối “Established”.
- Server nhận được bản tin ACK trên của client, nó cũng chuyển sang trạng
thái “Established”.
- Sau đó hai bên tiến hành truyền dữ liệu, trạng thái cả hai đều là
“Established”. Một trong hai phía truyền xong dữ liệu, đến đây thì vai trò
hai bên là như nhau, ta giả sử client truyền xong dữ liệu trước, nó sẽ gửi
bản tin FIN, và chuyển sang trạng thái “FIN wait 1”.
- Phía server nhận được bản tin này, gửi xác nhận ACK, và chuyển sang
trạng thái “Close wait”.
- Khi client nhận được xác nhận từ server (nhận được bản tin ACK trên) thì
nó chuyển sang trạng thái “FIN wait 2”.
25
- Đến lúc này server vẫn có thể tiếp tục gửi dữ liệu và client vẫn tiếp tục
nhận (vì chỉ có client báo là gửi xong dữ liệu).
- Đến khi nào server cũng gửi hết dữ liệu, nó sẽ gửi đi bản tin FIN, cho biết
nó cũng đã gửi xong dữ liệu và chuyển sang trạng thái “LAST ACK”.
Khi client nhận được bản tin FIN trên từ server, nó gửi xác nhận (ACK) và
chuyển sang trạng thái “Time wait”, sau đó chờ 1 khoảng thời gian
Timeout và đóng kết nối, quay lại trạng thái “Close”.
- Khi server nhận được nó cũng chuyển từ “Last ACK” sang “Close”
(không cần đợi Timeout)
2.2.3 Tầng Internet (Internet Layer)
Nằm bên trên tầng truy nhập mạng. Tầng này có chức năng gán địa chỉ,
đóng gói và định tuyến (Route) dữ liệu. 4 giao thức quan trọng nhất trong tầng
này gồm:
- IP (Internet Protocol): Có chức năng gán địa chỉ cho dữ liệu trước khi
truyền và định tuyến chúng tới đích.
- ARP (Address Resolution Protocol): Có chức năng biên dịch địa chỉ IP
của máy đích thành địa chỉ MAC.
- ICMP (Internet Control Message Protocol): Có chức năng thông báo lỗi
trong trường hợp truyền dữ liệu bị hỏng.
- IGMP (Internet Group Management Protocol): Có chức năng điều khiển
truyền đa hướng (Multicast) .
Cấu trúc của gói IP:
26
Hình 2.5: Cấu trúc gói tin IP.
Ý nghĩa:
- Version (có chiều dài 4 bit): cho biết phiên bản của giao thức, đối với
trường hợp của chúng ta, giao thức là IP version 4, trường này sẽ luôn có
giá trị là 4 (0100).
- Header Length (4 bit): cho biết chiều dài của header IP, tính theo đơn vị 4
byte (32 bit).
- TOS (8 bit): Type of Service.
- Total Length (16 bit): 16 bit tổng chiều dài của gói IP gồm cả phần header.
- Identification (16 bit): dùng nhận diện các phân đoạn của gói IP.
- Flags:
. Bit đầu tiênkhông sử dụng.
. Bit 2: DF (Don’t Fragment) = 1 có nghĩa là không phân đoạn gói này.
. Bit 3: MF (More Fragment) = 0 => đây là phân đoạn cuối cùng.
- Fragmented offset (13 bit): độ dời (đơn vị 8 byte) tính từ điểm bắt đầu của.
Header tới điểm bắt đầu của phân đoạn
27
- TTL (Time to Live) (8 bit): thời gian tồn tại trên mạng hoặc số chặng trên
mạng mà gói đi qua trước khi bị hủy bỏ.
- Protocol (8 bit): nhận diện Protocol trên lớp IP.
- Header checksum (16 bit): sửa sai cho phần Header.
- Các vùng địa chỉ nguồn, địa chỉ đích: địa chỉ IP 32 bit.
- Option: các tùy chọn dùng cho việc kiểm tra: Loose source routing, Strict
source routing, Record route và Timestamp.
- Padding: Gồm các số zero được thêm vào sao cho chiều dài của vùng
Header là bội số của 32 bit.
Cách thức mà dữ liệu được gửi qua giao thức IP được tiến hành như sau:
- Khi nhận được một segment dữ liệu (từ giao thức lớp trên là TCP) cần gửi
đến đích nào đó, địa chỉ đích này phải được xác định bằng địa chỉ IP (tức
là địa chỉ mạng hay địa chỉ luận lý). Lớp giao thức IP sẽ gắn thêm vào đầu
segment dữ liệu một header IP để tạo thành gói IP hoàn chỉnh. Trong
header IP này có chứa 2 thông tin quan trọng, đó là địa chỉ host gửi
(source IP address) và địa chỉ host nhận (destination IP address). Địa chỉ
source đương nhiên là địa chỉ của bản thân nó, còn địa chỉ đích phải được
cung cấp cho lớp IP khi muốn gửi dữ liệu qua giao thức này.
- Gói tin IP này sau đó được chuyển đến lớp giao thức ethernet để thêm
phần header ethernet vào và gửi đi.
Nhưng giao thức ethernet lại gửi các khung dữ liệu đi dựa vào một loại địa
chỉ khác là địa chỉ MAC (hay còn gọi là địa chỉ vật lý). Tại sao lại cần đến 2 địa
chỉ như vậy? Lý do là địa chỉ vật lý chỉ có giá trị trong phạm vi mạng LAN, nó
sẽ không thể giúp xác định vị trí host ở bên ngoài phạm vi mạng LAN. Khi gửi
dữ liệu ra ngoài mạng LAN, các router sẽ chuyển dữ liệu đi dựa và địa chỉ IP.
Như vậy trong phần địa chỉ MAC nguồn và địa chỉ MAC đích trong
header của khung ethernet, ta sẽ điền các địa chỉ nào? Đối với địa chỉ MAC
28
nguồn, đương nhiên ta sẽ điền địa chỉ MAC của chính ENC28J60 đã được xác
lập. Nhưng còn địa chỉ MAC đích, sẽ có 2 trường hợp xảy ra:
- Nếu host đích nằm trong cùng 1 mạng LAN với chúng ta, ta sẽ điền địa
chỉ MAC đích là địa chỉ tương ứng của host đích. Frame dữ liệu sẽ được
gửi thẳng đến đích.
- Nếu host đích nằm bên ngoài mạng LAN, rõ ràng ta không thể gửi dữ liệu
trực tiếp đến host đích mà phải thông qua gateway, khi đó địa chỉ MAC
đích phải là địa chỉ gateway.
Vẫn còn một vấn đề nữa mà ta phải giải quyết. Đó là trong cả hai trường
hợp trên, dù là cần gửi cho gateway hay thẳng đến host đích, thì đến đây, ta mới
chỉ biết địa chỉ IP của host đích (hay của gateway) mà không biết địa chỉ MAC
tương ứng. Vậy nảy sinh một vấn đề là làm sao biết được địa chỉ MAC của một
host khi biết địa chỉ IP?
Đến đây, chính là phát sinh vai trò của giao thức phân giải địa chỉ (APR –
Address Resolution Protocol). Vai trò của giao thức này là tìm ra địa chỉ MAC
khi biết địa chỉ IP của 1 host.
Cấu trúc gói ARP:
Hình 2.6: Cấu trúc gói tin ARP.
29
Ý nghĩa:
Hardware type (2 bytes): cho biết loại địa chỉ phần cứng, đối với địa chỉ
MAC của giao thức ethernet thì giá trị này được qui định là "0x0001".
Protocol type (2 bytes): cho biết loại địa chỉ giao thức lớp trên, đối với địa
chỉ IP, giá trị này được qui định là “0x0800”.
HLEN (1 byte): cho biết chiều dài của địa chỉ vật lý (địa chỉ MAC).
PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP).
Operation (2 bytes): cho biết hoạt động đang thực hiện trong gói tin này
(request hay reply).
Sender H/W (hardware address, 6 bytes): địa chỉ vật lý của phía gửi.
Sender IP (4 bytes): địa chỉ IP của phía gửi.
Target H/W (6 bytes): địa chỉ vật lý của phía nhận, nếu chưa biết thì sẽ là
chứa toàn 0.
Target IP (4 bytes): địa chỉ IP của phía nhận.
Cách thức mà dữ liệu được gửi qua giao thức ARP được tiến hành như sau:
- Khi giao thức IP đưa xuống yêu cầu tìm chỉ MAC của host có IP là a.b.c.d
thì nó phải trả lời ngay địa chỉ MAC của địa chỉ trên dạng
XX:XX:XX:XX:XX:XX.
- Cách thức ARP lấy thông tin giải quyết vấn đề trên là: giao thức ARP duy
trì một bảng gọi là ARP cache gồm hai cột, một cột ghi địa chỉ IP, một cột
ghi địa chỉ MAC tương ứng với địa chỉ IP đó. Mỗi khi được hỏi bởi giao
thức IP, nó sẽ tra bảng này để tìm câu trả lời. Khi được hỏi về một địa chỉ
IP a.b.c.d nào đó mà không có sẵn trong bảng ARP cache, nó sẽ lập tức
tìm trong mạng LAN phần tử có địa chỉ IP là a.b.c.d bằng cách gửi yêu
cầu tới các phần tử trong mạng LAN. Các phần tử này đều nhận được yêu
cầu và phần tử nào có IP a.b.c.d sẽ trả lời lại địa chỉ MAC của nó là
XX:XX:XX:XX:XX:XX. Vậy giao thức ARP sẽ lập tức thêm cặp địa chỉ
30
IP a.b.c.d và địa chỉ MAC XX:XX:XX:XX:XX:XX vào trong bảng ARP
cache và trả lời lại cho giao thức IP.
2.2.4 Tầng giao tiếp mạng
Tầng giao tiếp mạng liên quan tới việc trao đổi dữ liệu giữa hai trạm thiết
bị trong cùng một mạng. Giao thức được sử dụng trong phạm vi đồ án là giao
thức Ethernet. Phần cứng được sử dụng chip giao tiếp Ethernet ENC28J60 giao
tiếp qua chuẩn SPI ( Serial Pheripheral Interface ).
Trong chồng giao thức TCP/IP, giao thức Ethernet đóng vai trò lớp truy
nhập và truyền dẫn. Việc gửi và nhận dữ liệu ở lớp Ethernet được thực hiện dựa
vào địa chỉ vật lý hay còn gọi là địa chỉ MAC. Trong mỗi khung Ethernet đều
chứa 2 địa chỉ MAC: một địa chỉ của host gửi và một địa chỉ của host nhận. Khi
lớp Ethernet nhận được một khung dữ liệu, trước hết nó sẽ kiểm tra địa chỉ host
nhận xem có phải là địa chỉ của nó không (tức là gửi cho nó), nếu đúng nó sẽ
nhận khung này và chuyển đến lớp IP. Ngoài ra còn có 1 trường hợp nữa lớp
Ethernet sẽ nhận khung là nếu địa chỉ host nhận là địa chỉ broadcast (tức là gửi
cho tất cả mọi máy trong mạng LAN), trong trường hợp này frame sẽ được nhận
và xử lý.
Ngoài việc kiểm tra địa chỉ, trong khng Ethernet còn có 1 trường chứa mã
kiểm tra lỗi giúp phát hiện những lỗi xảy ra trong quá trình truyền, các khung bị
xác định là có lỗi sẽ bị bỏ qua.
Trong mạch của chúng ta, việc kiểm tra lỗi và kiểm tra địa được thực hiện
tự động bởi IC ENC28J60, do đó ta không cần lập trình cho các chức năng này.
Mỗi khi nhận được một khung trên đường truyền, ENC28J60 sẽ kiểm tra lỗi xem
có sai sót không, tiếp đó nó sẽ đối chiếu địa chỉ host nhận với địa chỉ đã được
cấu hình cho nó (trong các thanh ghi địa chỉ MAC: MAADR0-5).
31
2.3 Microchip TCP/IP Stack
2.3.1 Cấu trúc của Microchip TCP/IP Stack
TCP/IP Stack là bộ thư viện và một số công cụ phần mềm của Microchip
để hỗ trợ viết phần mềm cho hệ thống nhúng sử dụng vi điều khiển của hãng.
Thư viện đã xây dựng hầu hết các hàm giao tiếp giữa các lớp cũng như hỗ trợ
xây dựng một Webserver nhúng.
TCP/IP cũng có các Module sử dụng cho lớp ứng dụng như: HTTP cho
Web, SMTP cho gửi và nhận Email, SNMP cho giao thức trạng thái và điều
khiển. Telnet cho điều khiển từ xa, TFTP.
Hình 2.7: Cấu trúc của Stack.
Hình 2.8: So sánh cấu trúc TCP/IP tham khảo và cấu trúc Stack của Microchip.
32
Ngoài những module chính giống như cấu trúc TCP/IP tham khảo thì
Microchip đưa thêm vào Stack 2 module mới đó là StackTask và ARPTask.
StackTask quản lý sự vận hành và tất cả các module của Stack. Trong khi đó,
ARPTask quản lý các dịch vụ của lớp ARP ( Address Resolution Protocol).
2.3.2 Hoạt động của TCP/IP Stack
Hoạt động của TCP/IP Stack là các nhiệm vụ sẽ được chia thành các tác
vụ ( ở đây là TCP, UDP, Ping,…). Tất cả hoạt động của TCP/IP sẽ được một
đồng hồ chung quản lí theo Time Split. Tức là có một Timer hệ thống (Timer1),
cứ mỗi khoảng thời gian ngắn sẽ ngắt (gọi là một TICK), khi bị ngắt, hệ thống sẽ
treo lại, ngữ cảnh của tất cả các tác vụ được bộ lập lịch lôi ra, xem xét tác vụ nào
được chạy theo kiểu chia sẻ thời gian (vì không có mức ưu tiên cho tác vụ). Sau
đó cho phép tác vụ đó chiếm quyền thực thi của CPU. Đến TICK tiếp theo, hệ
thống lại treo lại, và lại lôi ngữ cảnh ra, cứ tiếp tục như vậy mãi.
Với cơ chế hoạt động này, vi điều khiển được coi như một lúc có thể vừa
thực hiện TCP, vừa thực hiện UDP, Ping,…vừa có thể là Server và Client cùng
một lúc.
Vì vậy, PIC nếu được thiết lập ở chế độ TCP Server/Client sẽ hoạt động
đồng thời cả hai hoạt động này. Server lắng nghe kết nối từ Client nào đó trên
mạng. Còn Client thì gửi lệnh mở cổng kết nối tới một Server nào đó cũng ở trên
mạng, mà ta có thể xác lập được.
Vì vậy, hoạt động của các tác vụ là độc lập với nhau, không chịu ảnh
hưởng lẫn nhau.
Việc cấu hình cho Stack được thực hiện trong file TCPIPConfig.h của
Project.
33
CHƯƠNG 3: TỔNG QUAN VỀ TIN NHẮN SMS VÀ
MODULE SIM900
3.1 Tổng quan về tin nhắn SMS
SMS là từ viết tắt của Short Message Service. Đó là một công nghệ cho
phép gửi và nhận các tín nhắn giữa các điện thoại với nhau. Dữ liệu có thể được
lưu giữ bởi một tin nhắn SMS là rất giới hạn. Một tin nhắn SMS có thể chứa tối
đa là 140 byte (1120 bit) dữ liệu. Vì vậy, một tin nhắn SMS chỉ có thể chứa :
+ 160 kí tự nếu như mã hóa kí tự 7 bit được sử dụng.
+ 70 kí tự nếu như mã hóa kí tự 16 bit Unicode UCS2 được sử dụng.
Tin nhắn SMS dạng text hỗ trợ nhiều ngôn ngữ khác nhau. Nó có thể hoạt
động tốt với nhiều ngôn ngữ mà có hỗ trợ mã Unicode, bao gồm cả Arabic,
Trung Quốc, Nhật bản và Hàn Quốc.
3.2 Giới thiệu Module SIM900
3.2.1 Tổng quan về Module SIM900
Hình 3.1: Module Sim900
34
Sim900 là một module GSM/GPRS cực kỳ nhỏ gọn, được thiết kế cho thị
trường toàn cầu. Sim900 hoạt động được ở 4 băng tần GSM 850MHz, EGSM
900MHz, DCS 1800MHz và PCS 1900MHz như là một loại thiết bị đầu cuối với
một Chip xử lý đơn nhân đầy sức mạnh, tăng cường các tính năng quan trọng
dựa trên nền vi xử lý ARM926EJ-S, mang lại nhiều lợi ích từ kích thước nhỏ
gọn (24x24 mm), đáp ứng những yêu cầu về không gian trong các ứng dụng
M2M.
3.2.2 Khảo sát sơ đồ chân và chức năng từng chân
Hình 3.2 Sơ đồ chân của Module Sim900
35
CHƯƠNG 4: THIẾT KẾ VÀ THI CÔNG
4.1 Phân tích yêu cầu điều khiển
Trong một gia đình thông thường ngày nay, TV, hệ thống nghe nhìn, máy
tính, đèn chiếu sáng, rèm cửa và điện thoại di động, ngày càng trở nên dễ sử
dụng và đa năng hơn, nhưng mỗi thiết bị hoạt động độc lập với các bộ điều khiển
dùng riêng. Điều này có nghĩa là có rất nhiều bộ điều khiển, nút chỉnh làm cho
cuộc sống thêm phức tạp.
Với ý nghĩa một ngôi nhà “thông minh”, các thiết bị nói trên sẽ được tích
hợp trong một hệ thống đồng nhất, cung cấp các chức năng của từng loại thiết bị
nhưng được điều khiển tập trung từ bộ điều khiển trung tâm. Như vây, các thiết
bị “thông minh” rời rạc trước đây giờ đây là các thành phần cấu thành nên một
hệ thống “thông minh”.
Phân tích các thiết bị điện cần điều khiển trong một gia đình thông thường,
ta nhận thấy các thiết bị điện trong gia đình chủ yếu là các biến logic, chỉ có 2
trạng thái tắt hoặc mở ví dụ như quạt, điều hòa, tivi, bóng đèn… Song bên cạnh
đó cũng có một số biến có dạng số nguyên, số thực như nhiệt độ phòng, mức
nước trong bể, độ mở của rèm cửa… Với những biến kiểu logic, ta chỉ cần xác
định trạng thái của thiết bị và yêu cầu điều khiển để bật hoặc mở thiết bị khi có
yêu cầu. Còn với những biển kiểu số nguyên, số thực như nhiệt độ, mức nước
trong bể… thì ta cần có cảm biến đo để xác định được giá trị của biến ở thời
điểm hiện tại. Ví dụ, muốn hệ thống tự động bật điều hòa khi nhiệt độ phòng
cao thì ta cần ta cần có một cảm biến nhiệt độ để xác định nhiệt độ phòng tại thời
điểm hiện tại. Nếu nhiệt độ phòng cao hơn một giá trị ta định trước thì hệ thống
sẽ tự động điều khiển để bật điều hòa lên, và khi nhiệt độ hạ thấp giá trị ta định
trước thì hệ thống sẽ điều khiển để tắt điều hòa đi.
36
Yêu cầu điều khiển được đặt ra đối với hệ thống là người dùng có thể sử
dụng máy tính có nối mạng, hoặc điện thoại, máy tính bảng có tính năng nhắn tin
SMS để đưa ra yêu cầu điều khiển từ xa. Bộ điều khiển nhận lệnh, xử lý rồi sau
đó đưa ra tín hiệu điều khiển thích hợp, sau khi điều khiển xong thì thông báo
ngược lại cho người sử dụng biết đã thực hiện thành công cũng như thông báo
trạng thái của thiết bị hiện thời.
Nhà thông minh là một đề tài mở với rất nhiều các ứng dụng, các tiện ích
có thể áp dụng nhằm phục vụ nhu cầu ngày càng nâng cao của con người. Chính
vì vậy mà giới hạn trong đồ án tốt nghiệp chúng em không thể giải quyết được
hết các bài toán trên thực tế. Trước mắt, chúng em sẽ thi công một bộ điều khiển
có khả năng giao tiếp truyền thông qua mạng Ethernet và tin nhắn SMS, từ đó
người sử dụng có thể đưa ra yêu cầu điều khiển để đóng hoặc mở một số thiết bị
điện từ xa, ngoài ra bộ điều khiển còn có khả năng nhận tín hiệu từ cảm biến
nhiệt độ và thông báo cho người sử dụng biết thông tin về nhiệt độ trong phòng.
Về hướng đi trong tương lai, chúng em sẽ mở rộng và phát triển thêm
nhiều module, nâng cao khả năng giao tiếp của thiết bị hơn nữa, tăng tính tương
tác với người sử dụng cũng như tăng độ an toàn cho ngôi nhà thông minh.
37
4.2 Thiết kế phần cứng mạch chính
38
4.4 Thiết kế Webserver
39
TÀI LIỆU THAM KHẢO
[1] Hoàng Minh Sơn –Mạng Truyền Thông Công Nghiệp – NXB Khoa Học Và
Kỹ Thuật – 2006.
[2] Muhammad Ali Mazidi, Rolin D.McKinlay, Danny Causey – PIC
Microcontroller and Embedded Systems – Courier Kendallville, Inc – 2008
[3] Jeremy Bentham – TCP/IP Lean – CMP Book – 2002
[4] Một Số Trang Web Tham Khảo:
www.picvietnam.com
www.dientuvietnam.com
www.eprojects.ljcv.net
www.google.com.vn
40
PHỤ LỤC 1: VI ĐIỀU KHIỂN PIC18F8722
1. GIỚI THIỆU TỔNG QUAN VỀ PIC18F8722
1.1. Giới thiệu về PIC18F8722
Khối xử lí trung tâm mà đóng vai trò chính là PIC 18F8722 sẽ làm nhiệm
vụ chính là tiếp nhận và xử lí các dữ liệu đến và đi một cách tự động. Đề tài sử
dụng PIC 18F8722 vì những ưu điểm vượt trội của nó so với các vi điều khiển
khác.Về mặt tính năng và công năng thì có thề xem PIC vượt trội hơn rất nhiều
so với các dòng VĐK khác với nhiều module được tích hợp sẵn như ADC 10
BIT, FLASH 128Kb, PWM 10 BIT, EEPROM 1024 BYTE, 2
COMPARATER…
Vi điều khiển này hoàn toàn đáp ứng được các yêu cầu về bộ nhớ
RAM,khả năng xử lý. Nó còn đáp ứng tốt về mặt cơ học và vật lý như độ bền,
khả năng tin cậy, khả năng tiết kiệm điện. Tích hợp sẵn bộ ADC để chuyển tín
hiệu từ các cảm biến đưa vào vi điều khiển.Vi điều khiển này có đầy đủ các
chuẩn truyền thông như UART hay SPI để thực hiện nhiệm vụ truyền thông và
giao tiếp giữa VĐK và SIM900,hay IC ENC28J60
Ngoài ra, PIC có ngôn ngữ hổ trợ cho việc lập trình ngoài ngôn ngữ
Asembly còn có ngôn ngữ C thì có thề sử dụng nhiều công cụ lập trình như CCS,
MPLAB, MirkoBasic.. Chính vì vậy chúng ta sẽ có nhiều thuận lợi trong việc dễ
dàng tìm kiếm các thông tin lập trình cho các dòng PIC.
Dòng PIC 18F8722 được chọn sử dụng trong đề tài là dòng phổ thông với
các tính năng cơ bản và dễ cho việc sử dụng với:
Tập lệnh để lập trình chỉ có 35 lệnh rất dễ nhớ và dễ học, có độ dài 16bit.
Mỗi lệnh đều được thực thi trong 1 chu kỳ xung clock. Tốc độ hoạt động tối đa
cho phép là 40MHz.
Thông số và tính năng cơ bản của vi điều khiển PIC18F8722
128k Flash Rom.
41
3936 Bytes Ram.
1024 Bytes EEPROM
9 Port điều khiển vào ra với tín hiệu điều khiển độc lập
2 bộ định thời 8 bit và 3 bộ định thời 16 bit
2 bộ module CCP và 3 bộ module ECCP.
1 bộ ADC với 16 kênh ADC 10 bit.
2 bộ so sánh tương tự hoạt động độc lập.
Bộ giám sát định thời Watchdog timer.
Cổng giao tiếp song song 8 bit với các tín hiệu điều khiển.
Chuẩn giao tiếp nối tiếp MSSP (SPI/I2C)
Chuẩn giao tiếp nối tiếp USART (AUSART/EUSART)
Hỗ trợ giao tiếp I2C.
Chế độ sleep tiết kiệm năng lượng.
Có thể hoạt động với nhiều dạng Oscillator khác nhau.
Tần số hoạt động tối đa là 40Mhz.
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 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.
1.2. Sơ đồ khối của PIC18F8722
42
Hình 1.1: Sơ đồ khối vi điều khiển PIC18F8722
43
2. KHẢO SÁT CHỨC NĂNG VÀ HOẠT ĐỘNG CỦA
PIC 18F8722
2.1. Sơ đồ chân của vi điều khiển PIC18F8722
Hình 1.2: Sơ đồ chân của vi điều khiển PIC18F8722
2.2. Tổ chức bộ nhớ
Cấu trúc bộ nhớ của vi điều khiển PIC18F8722 bao gồm bộ nhớ chương
trình (Program memory) và bộ nhớ dữ liệu (Data Memory).
2.2.1. Bộ nhớ chương trình.
44
Bộ nhớ chương trình của Vi điều khiển PIC 18F8722 là bộ nhớ flash, dung
lượng bộ nhớ 128K word (1 word = 16bit).
Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ
0000h (Reset vertor). Khi có ngắt mức yêu tiên cao xảy ra, bộ đếm chương trình
sẽ chỉ đến địa chỉ 0008h. Khi có ngắt mức yêu thấp xảy ra, bộ đếm chương trình
sẽ chỉ đến địa chỉ 0018h Bộ nhớ chương trình bao gồm bộ nhớ Stack và được địa
chỉ hóa bởi bộ đếm chương trình.
Hình 1.3 Bộ nhớ chương trình PIC 18F8722
2.2.2. Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank.
Đối với PIC 18F8722 bộ nhớ dữ liệu được chia ra làm 16 bank.
45
Hình 1.4: Sơ đồ tổ chức bộ nhớ dữ liệu PIC 18F8722
2.3. Các cổng vào ra của vi điều khiển
46
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 này rất đa dạng và thông qua quá
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 bao gồm 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 nên 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 điều khiển được thông qua các thanh ghi SFR liên quan đến
chân xuất nhập đó.
Vi điều khiển PIC18F8722 có 9 cổng xuất nhập, bao gồm PORTA,
PORTB, PORTC, PORTD, PORTE, PORTF, PORTG, PORTH, PORTJ
Trong khuôn khổ đồ án sẽ khảo sát PORTA vì đặc điểm và phương pháp
điều khiển các PORT khác không có nhiều sự khác biệt. Bên cạnh đó mỗi PORT
còn có thêm các chức năng riêng biệt như ngắt, ADC, bộ so sánh….
PORTA
PORTA (RPA) bao gồm 8 I/O pin. Đây là các chân 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ỉ 92h).
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 (đối với PORTA là
TRISA, đối với PORTB là TRISB…..). Các thanh ghi SFR chính liên quan đến
PORTA bao gồm:
PORTA : giá trị logic của các chân trong PORTA.
47
TRISA : điều khiển hướng xuất nhập cho PORTA
LATA : thanh ghi điều khiển dữ liệu PORTA.
2.4. Hoạt động định thời Timer
Vi điều khiển PIC18F8722 có đến 5 Timer là Timer0, Timer1, Timer2, Timer3
và Timer4. Trong đó có 2 Timer 8 bit và 3 Timer 16 bit.
Bộ định thời Timer1
Bộ định thời Timer1 là một bộ định thời/bộ đếm 16 bit gồm hai thanh ghi
TMR1H ( byte cao ) và TMR1L ( byte thấp ) mà có thể đọc hoặc ghi . Cặp thanh
ghi này tăng số đếm từ 0000h đến FFFFh và một tràn sẽ xuất hiện khi có sự
chuyển số đếm từ FFFFh xuống 0000h . Ngắt, nếu được phép có thể phát ra khi
có số đếm tràn và được đặt ở bit cờ ngắt TMR1IF. Ngắt có thể được phép hoặc
cấm bằng cách đặt hoặc xóa bit cho phép ngắt TMR1IE.
Bộ định thời Timer1 có thể được cấu hình để hoạt động một trong hai chế
độ sau:
Định thời một khoảng thời gian ( Timer )
Đếm sự kiện ( Counter )
Việc lựa chọn một trong hai chế độ được xác định bằng cách đặt hoặc xóa
bit chọn clock TMR1CS. Trong chế độ định một khoảng thời gian, bộ định thời
tăng số đếm lên sau mỗi chu kỳ lệnh. Trong chế độ đếm sự kiện, bộ định thời
tăng sau mỗi cạnh lên của clock ngoài đặt vào. Bộ định thời 1 có thể được phép
hoặc cấm bằng cách đặt hoặc xóa bit điều khiển TMR1ON.
Hình 1.5: Thanh ghi điều khiển Timer1
48
Hình 1.6: Sơ đồ khối Timer1
Hình 1.7: Sơ đồ khối Timer1 (16-BIT READ/WRITE MODE)
Hình 1.8: Các thanh ghi liên quan đến bộ định thời Timer1
2.5. Ngắt
49
PIC18F8722 có nhiều nguồn tạo ra hoạt động ngắt và được điều khiển bởi
rất nhiều thanh ghi: RCON; INTCON; INTCON2; INTCON3; PIR1, PIR2;
PIE1, PIE2; IPR1, IPR2. Bên cạnh đó mỗi ngắt còn có một bit điều khiển và 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 bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc
vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT0 và TMR0
nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt
ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Các
cờ ngắt ngoại vi được chứa trong hai thanh ghi chức năng đặc biệt : thanh ghi
PIR1 và PIR2.Các bit cho phép ngắt tương ứng được chứa trong hai thanh ghi
PIE 1 và PIE 2.
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,
bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất
vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0008h. 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 bit GIE cũng sẽ đượ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à phải được xóa bằng
chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát
hiện được thời điểm tiếp theo mà ngắt xảy ra.
Khi một ngắt được đáp ứng, bit GIE được xóa và cấm tất cả các ngắt
khác.Cờ ngắt phải được xóa bởi phần mềm trước khi cho phép lại ngắt.Thông
thường, trước khi thực hiện các chương trình phục vụ ngắt, nội dung các thanh
ghi w và status nên được lưu lại để bảo đảm an toàn và được phục hồi trước khi
trở lại chương trình chính.
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi
trạng thái các Pin của PortB (PORTB interrupt-on-change), việc xác định ngắt
nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.
50
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 trong 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.
Hình 1.9: Sơ đồ logic của tất cả các ngắt trong vi điều khiển PIC18F8722
2.6. Truyền thông nối tiếp
EUSART (Enhanced Universal Synchronous Asynchronous Receiver
Transmitter) là một bộ truyền thông nối tiếp. Ở đây sẽ khảo sát bộ truyền thông
nối tiếp trong chế độ không đồng bộ
Ở chế độ truyền này EUSART hoạt động theo chuẩn NRZ (None-Return-
to-Zero), nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start, 5,6,7,8 hoặc 9 bit dữ
liệu và 1 bit Stop. Bit LSB (Least Significant Bit) sẽ được truyền đi trước. Các
khối truyền và nhận data độc lập với nhau sẽ dùng chung tần số tương ứng với
51
tốc độ baud cho quá trình dịch dữ liệu (tốc độ baud gấp 16 hay 64 lần tốc độ dịch
dữ liệu tùy theo giá trị của bit BRGH), và để đảm bảo tính hiệu quả của dữ liệu
thì hai khối truyền và nhận phải dùng chung một định dạng dữ liệu.
Bộ EUSART bất đồng bộ bao gồm các thành phần quan trọng sau:
Bộ phát tốc độ baud ( BRG )
Mạch lấy mẫu
Bộ phát bất đồng bộ.
Bộ thu bất đồng bộ.
Bộ phát bất đồng bộ EUSART.
Phần chính của bộ phát là thanh ghi dịch nối tiếp phát (TSR). Nó nhận dữ
liệu từ thanh ghi đệm phát TXREG. Thanh ghi TXREG được nạp dữ liệu bởi
phần mềm.Thanh ghi TXR sẽ không được nạp dữ liệu cho đến khi stop bit đã
được phát đi trong lần nạp trước đó. ngay khi stop bit được phát.TSR được nạp
giá trị mới từ thanh ghi TXREG. Mỗi khi TXREG phát dữ liệu đến TSR.TXREG
rỗng và cờ TXIF được bật.Ngắt này có thể được cho phép hoặc không cho phép
bằng cách đặt hoặc xóa bit TXIE ( PIE). Cờ TXIF sẽ được đặt bất chấp
trạng thái của bit TXIE và không thể được xóa bởi phần mềm. Nó chỉ có thể
được xóa khi dữ liệu mới được nạp vào thanh ghi TXREG. Trong khi bit TXIF
chỉ ra trạng thái của thanh ghi TXREG thì bit TRMT lại chỉ ra trạng thái của
thanh ghi TSR.Bit này chỉ có thể đọc, được đặt khi thanh ghi TSR rỗng.
Việc phát dữ liệu được phép bằng cách cho phép bit TXEN. Việc phát dữ
liệu thực sư không xảy ra cho đến khi thanh ghi TXREG được nạp dữ liệu và bộ
BRG tạo ra một clock dịch.Việc phát dữ liệu cũng có thể được bắt đầu bằng nạp
thanh ghi TXREG và cho phép bit TXEN.
Để có thể phát 9 bit dữ liệu , bit TX9 được đặt và 9 bit dữ liệu được ghi
đến bit TX9D.Bit thứ 9 phải được ghi trước khi ghi 8 bit dữ liệu đến TXREG.
Để thiết lập chế độ phát bất đồng bộ , các bước sau được thực hiện :
52
1. Thiết lập tốc độ Baud cho thanh ghi SPBRGH:SPBRG , nếu tốc độ
baud được yêu cầu cao , đặt bit BRGH.
2. Set chân điều khiển RX/DT và TX/CK bằng “1”.
3. Cho phép port nối tiếp bất đồng bộ bằng cách xóa bit SYNC và bit
SPEN.
4. Nếu cần phát 9 bit dữ liệu , đặt bit TX9.
5. Set bit điều khiển CKTXP nếu dữ liệu phát bị đảo ngược.
6. Cho phép phát dữ liệu bằng cách đặt bit điều khiển TXEN, có thể ngắt
bit TXIF
7. Nếu ngắt được yêu cầu , cho phép bit TXIE. Trường hợp có sử dụng
ngắt , phải bảo đảm rằng bit GIE và bit PEIE trong thanh ghi INTCON
được đặt.
8. Nếu cần phát 9 bit dữ liệu , bit thứ 9 sẽ phụ thuộc vào bit dữ liệu
TX9D
9. Nhận 8 bit dữ liệu từ thanh ghi TXREG. Có thể bắt đầu truyền dữ liệu.
Hình 1.10: Sơ đồ khối bộ truyền dữ liệu EUSART bất đồng bộ
53
Hình 1.11: Các thanh ghi liên quan đến quá trình truyền bất đồng bộ
Bộ thu bất đồng bộ EUSART
Sơ đồ khối của bộ thu được chỉ ra ở hình vẽ Dữ liệu nhận trên chân
RC7/RX/DT và dồn vào khối khôi phục dữ liệu. Khối khôi phục dữ liệu thật ra
là dịch dữ liệu tốc độ cao, hoạt động nhanh gấp 16 lần tốc độ Baud. Một khi chế
độ bất đồng bộ được chọn thì việc tiếp nhận được phép bằng cách đặt Bit CREN
(RCSTA).
Trung tâm của bộ nhận là thanh ghi dịch nhận RSR. Sau khi lấy mẫu Bit
Stop dữ liệu nhận trong RSR được truyền đến thanh ghi RCREG. Nếu việc
truyền hoàn tất thì Bit Cờ RCIF lên 1. Ngắt thật sự cho phép hoặc không cho
phép bằng cách đặt hoặc xóa Bit RCIE. Cờ RCIF chỉ là 1 Bit chỉ đọc và được xó
bởi phần cứng. Nó được xóa khi thanh ghi RCREG được đọc và hoàn toàn
không có dữ liệu. RCREG là 1 thanh ghi bộ đệm đôi (Bởi vì nó cho 2 Byte dữ
liệu có thể truyền và nhận đồng thời đến RCREG FIFO và Byte thứ 3 bắt đầu
được dịch chuyển đến thanh ghi RSR). Khi phát hiện ra Bit Stop của Byte thừ 3
này, Nếu thanh ghi RCREG vẫn còn đầy thì Bit bào lỗi trànOERR(RCSTA),
sẽ lên 1. Những dữ liệu trong RSR sẽ mất đi. Và thanh ghi RCREG có thể được
đọc 2 lần để lấy lại 2 Byte trong FIFO. Bit báo tràn OERR phải được xóa trong
phần mềm.
Để thiết lập chế độ thu bất đồng bộ, các bước sau được yêu cầu :
54
1. Khởi tạo thanh ghi SPBRGH:SPBRG, BRGH và BRG16 bit cho việc chọn
sai số tốc độ Baud.
2. Set chân điều khiển RX/DT và TX/CK bằng “1”.
3. Cho phép nhận qua Port nối tiếp bất đồng bộ bằng cách xóa Bit SYNC và
cho Bit SPEN lên 1.
4. Nếu ngắt xảy ra thì set Bit RCIE và Nếu sử dụng ngắt thì set bit GIE và
PEIE của thanh ghi INTCON.
5. Nếu nhận 9-Bit dữ liệu thì set Bit RX9 .
6. Set bit CKTXP nếu dữ liệu nhận bị đảo ngược.
7. Cho phép nhận dữ liệu bằng cách set Bit CREN.
8. Sau khi dữ liệu được nhận , Bit Cờ ngắt RCIF sẽ được set và cờ ngắt được
kích hoạt (nếu bit RCIE được set).
9. Đọc nội dung thanh ghi RCSTA để nhận bit dữ liệu thứ 9 và xác định các
lỗi xảy trong quá trình thu dữ liệu.
10. Nhận 8 bit dữ liệu thu được bằng cách đọc nội dung thanh ghi RCREG.
11. Nếu xuất hiện lỗi trong quá trình nhận thì xóa lỗi bằng cách xóa BitCREN
55
Hình 1.12: Sơ đồ khối bộ nhận dữ liệu EUSART không đồng bộ
Hình 1.13: Các thanh ghi liên quan đến quá trình nhận dữ liệu không đồng bộ
2.7. Truyền thông SPI
SPI (Serial Peripheral Interface) là một dạng giao thức truyền nối tiếp
được dùng để giao tiếp giữa VĐK với các thiết bị ngoại vi (EEPROM,
SDcard…)
2.7.1. Chế độ SPI trong vi điều khiển PIC
56
Giao tiếp SPI được hiện thực qua 4 chân của vi điều khiển:
SDI( Serial Data In ): Tín hiệu nối tiếp được đưa vào vi điều khiển
SDO( Serial Data Out): Tín hiệu nối tiếp từ vi điều khiển đi ra
CLK(Clock): xung clock tạo ra bới master
SS(Slave Select): tích cực mức thấp, dùng để chọn slave để truyền dữ liệu.
Hình 1.14: Sơ đồ khối bộ SPI
2.7.2. Các thanh ghi điều khiển SPI
Chế độ SPI được điều khiển bằng 4 thanh ghi sau:
MSSP Control Register 1 (SSPCON1)
57
MSSP Status Register (SSPSTAT)
Serial Receive/Transmit Buffer Register(SSPBUF)
MSSP Shift Register(SSPSR) – thanh ghi này không được truy xuất
bởi người dùng
Hai thanh ghi SSPCON1 và SSPSTAT là hai thanh ghi điều khiển, còn
thanh ghi SSPSR là thanh ghi dùng để dịch dữ liệu ra/vào vi điều khiển,
SSPBUF là thanh ghi dùng để đọc dữ liệu từ ngoài vào hoặc ghi dữ liệu để
truyền ra ngoài. Ở chế độ nhận, 2 thanh SSPBUF và SSPSR là 1 bộ buffer đôi,
khi dữ liệu từ ngoài truyền vào được lưu đầy đủ trong SSPSR(8 bits) thì dữ liệu
này được truyền tới thanh ghi SSPBUF để người dùng lấy ra. Còn ở chế độ
truyền thì khi dữ liệu được ghi vào thanh ghi SSPBUF thì cùng lúc dữ liệu đó
cũng được ghi vào thanh ghi SSPSR để dịch ra ngoài.
Thanh ghi SSPSTAT
Hình 1.15: Thanh ghi SSPSTAT
Bit 7:
SMP Sample bit
SPI Master mode
1 = dữ liệu vào sẽ được lấy ở cuối chu kỳ xung clock
0 = dữ liệu vào sẽ được lấy ở giữa chu kỳ cung clock
SPI Slave mode
SMP phải được gán bằng 0
Bit 6:
CKE SPI Clock Select bit
Bit 0:
58
BF BuFffer Full Status bit (dành cho quá trình nhận)
1 = quá trình nhận hoàn thành, SSPBUF đầy
0 = quá trình nhận đang thực hiện, SSPBUF trống
Thanh ghi SSPCON1
Hình 1.16: Thanh ghi SSPCON1
Bit 7:
WCOL Write Collision Detect bit(chỉ dùng ở chế độ truyền tín hiệu)
1 = thanh ghi SSPBUF được ghi đè dữ liệu trong khi dữ liệu cũ truyền chưa hết
0 = không có đụng độ
Bit 6:
SSPOV Receive Overflow Indicator bit(dùng ở chế độ nhân tín hiệu)
1 = có dữ liệu mới nhận về ghi đè lên thanh ghi SSPBUF trong khi dữ liệu trước
đó chưa được đọc.
0 = dữ liệu không bị ghi đè
Bit 5:
SSPEN Synchronous Serial Port Enable bit
1 = bật chế độ SPI và các chân SDI, SDO, SCK, SS được cấu hình tương ứng.
0 = tắt chế độ SPI
Bit 4:
CKP Clock Polarity Select bit
1 = thiết lập trạng thái rảnh khi xung clock ở mức cao
0 = thiết lập trạng thái rảnh khi xung clock ở mức thấp
Bit 3-0:
59
SSPM3:SSPM0 Synchronous Serial Port Mode Select bit
0101 = chế độ slave, clock = chân SCK, tắt chức năng của chân SS
0100 = chế độ slave, clock = chân SCK, bật chức năng của chân SS
0011 = chế độ master, clock = tần số của timer 2 /2
0010 = chế độ master, clock = Fosc / 64
0001 = chế độ master, clock = Fosc / 16
0000 = chế độ master, clock = Fosc / 4
PHỤ LỤC 2: GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
MPLAB C18
1. GIỚI THIỆU
MPLAB C18 là một trình biên dịch C theo chuẩn ANSI dùng cho dòng
PIC18 của Microchip. MPLAB C18 và các công cụ đi kèm cũng có thể được gọi
bên trong MPLAB IDE.
Trình biên dịch MPLAB C18 sử dụng ngôn ngữ C chuẩn làm cho sự phát
triển của các ứng dụng hệ thống nhúng dễ dàng hơn.
2. CÁC ĐẶC TRƯNG CỦA TRÌNH DỊCH MPLAB C18:
Tương thích với chuẩn ANSI-89.
Tích hợp MPLAB IDE để có thể dễ dàng quản lý project .
Tương thích với các module đối tượng được tạo bởi trình biên dịch
hợp ngữ MPASM, cho phép kết hợp việc lập trình C và lập trình hợp
ngữ trong cùng một project.
Đọc/ ghi vào bộ nhớ ngoài.
60
Có các thư viện mở rộng hỗ trợ cho PMW, SPI, I2C, UART, USART
và thư viện toán học.
3. QUÁ TRÌNH TẠO RA FILE .HEX
Đầu tiên, MPLAB C18 sẽ biên dịch file2.c và file3.c để tạo ra các file2.o
và file3.o. MPASM biên dịch file1.asm thành file1.o. Sau đó, file4.o kết hợp
với file3.o để tạo thành 1 thư viện gọi là lib1.lib. Cuối cùng, các file object
còn lại liên kết cùng với file lib1.lib bởi trình liên kết MPLINK. MPLINK
cũng có một linker script ở đầu vào là file script.lkr. MPLINK liên kết tất cả
các file này để tạo ra các file đầu ra: output.cof, output.map, và output.hex.
Hình 2.1: Quá trình tạo file .HEX
61
PHỤ LỤC 3 : GIAO TIẾP GIỮA PIC VÀ
ETHERNET
1. CÁC PHƯƠNG PHÁP GIAO TIẾP
Thông thường để kết nối thiết bị điều khiển với mạng Ethernet có hai cách,
một là sử dụng các vi điều khiển tích hợp sẵn phần giao tiếp với Ethernet, phổ
biến là các dòng PIC18F66J60, PIC18F66J65, PIC18F67J60, PIC18F67J60,
PIC18F86J60,…. của Microchip. Sử dụng phương thức này có ưu điểm viết mã
code đơn giản, kích thước bo mạch nhỏ gọn. Ngoài ra còn có cách khác là sử
dụng chip giao tiếp Ethernet ENC28J60, với cách sử dụng này bo mạch sẽ có
kích thước lớn hơn, thường tách thành hai module độc lập được kết nối qua card
hỗ trợ giao tiếp chuẩn SPI ( Serial Pheripheral Interface ).
Trong module ghép nối Ethernet, ta chọn cách sử dụng chip ENC28J60.
Các này có ưu điểm là sử dụng được cho bất kỳ vi điều khiển nào hỗ trợ SPI.
2. CÁCH THỨC HOẠT ĐỘNG CỦA ENC28J60
2.1. Đặc điểm
ENC28J60 là thiết bị kết nối Ethernet độc lập theo chuẩn công nghiệp giao
tiếp SPI. Nó được thiết kế để đáp ứng như một giao diện mạng Ethernet cho bất
kì bộ điều khiển nào có trang bị giao tiếp SPI.
Hình 3.1: ENC28J60.
62
2.2. Các chức năng của ENC28J60
ENC28J60 bao gồm 7 khối chức năng chính:
Một giao tiếp SPI phục vụ cho kênh truyền thông giữa vi điều khiển với
ENC28J60.
Các thanh ghi điều khiển được sử dụng để điều khiển và giám sát
ENC28J60.
Một bộ nhớ đệm RAM dùng cho nhận và truyền dữ liệu.
Một bộ phân xử để điều khiển truy nhập tới bộ đệm RAM khi yêu cầu
được tạo ra từ DMA, khối nhận và truyền.
Giao diện bus để trao đổi dữ liệu và nhận lệnh qua giao tiếp SPI.
Module MAC thực hiện phép logic MAC theo IEEE 802.3.
Module PHY mã hóa và giải mã dữ liệu tương tự truyền trên cặp đôi dây
xoắn.
.
Hình 3.2 : Giao diện cơ bản ENC28J60
2.3. Hoạt động
Tất cả bộ nhớ bên trong ENC28J60 là kiểu RAM tĩnh (SRAM ).
Có 3 loại bộ nhớ :
63
Bộ nhớ chứa các thanh ghi điều khiển được sử dụng để cấu hình,
điều khiển và lấy lại trạng thái của ENC28J60. Chúng được đọc và
ghi trực tiếp bởi giao tiếp SPI.
Bộ nhớ chứa các thanh ghi điều khiển được chia thành 4 ngăn
(bank ), có thể được chọn bởi các bit chọn ngăn BSEL1:BSEL0
trong thanh ghi ECON1. Mỗi bank dài 32 bytes và được đánh 5 bit
địa chỉ. Vị trí của 5 bytes cuối cùng (từ 1Bh đến 1Fh) của tất cả các
bank đều có chung năm thanh ghi EIE, EIR, ESTAT, ECON1,
ECON2.
Bộ đệm Ethernet là bộ nhớ đệm có được sử dụng để truyền và nhận
dữ liệu. Kích thước của bộ đệm là 8Kbyte và được chia thành bộ
đệm nhận và bộ đệm truyền. Trong đó, kích thước và vị trí của các
bộ đệm trên được lập trình bởi vi điều khiển qua giao tiếp SPI. Nội
dung của bộ đệm Ethernet được truy cập thông qua các con trỏ đọc
và ghi kết hợp với các lệnh đọc và ghi bộ nhớ đệm SPI.
Hình 3.3: Các vùng nhớ của ENC28J60.
64
Bộ đệm nhận là vùng nhớ tạm thời dùng để lưu dữ liệu nhận được từ mạng
Ethernet. Các cặp thanh ghi ERXSTH: ERXSTL và ERXNDH : ERXNDL đóng
vai trò như là các con trỏ để xác định kích thước và vị trí của bộ đệm trong bộ
nhớ. Khi các byte của dữ liệu nhận được từ giao diện Ethernet thì chúng sẽ được
ghi vào trong bộ đệm nhận một cách tuần tự.
Bộ đệm truyền sẽ chiếm phần bộ nhớ còn lại trong bộ đệm Ethernet. Bộ
đệm này cũng được xác định kích thước và vị trí thông qua các cặp thanh ghi
ETXST và ETXSN như các con trỏ. Dữ liệu trước khi truyền lên mạng Ethernet
sẽ được lưu tạm thời trong vùng nhớ này.
Hình 3.4: Vùng đệm truyền nhận của ENC28J60.
65
Các thanh ghi PHY được sử dụng để cấu hình, điều khiển và lấy lại trạng
thái của module PHY. Các thanh ghi này không được truy nhập trực tiếp qua
giao diện SPI, chúng chỉ có thể được truy nhập qua MII thực hiện trong MAC.
Mọi hoạt động của ENC28J60 phụ thuộc vào toàn bộ các lệnh được đưa từ
vi điều khiển thông qua giao diện SPI. Các lệnh này được sử dụng để truy nhập
tới bộ nhớ chứa các thanh ghi điều khiển và bộ đệm Ethernet.
Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì
các thanh ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi
điều khiển có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết
thanh ghi điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh
ghi nào của ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều
khiển viết các bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng
để thiết lập 8 bits điều khiển trong thanh ghi ETH. Lệnh này không được sử
dụng với thanh ghi MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8
bits trong thanh ghi điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều
khiển phát ra lệnh SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là
lệnh 1 byte, không tác động lên các thanh ghi khác.
66
PHỤ LỤC 4: THÔNG SỐ KỸ THUẬT CỦA SIM900
Hình 4.1: Sim900
Các thông số kỹ thuật
1. Nguồn cung cấp khoảng 3,2 – 4,8V
2. Nguồn lưu trữ
3. Băng tần
EGSM 900Mhz, DCS 1800 Mhz và PCS 1900Mhz
Phù hợp với GSM Pha 2/2+
4. Loại GSM là loại MS nhỏ
5. Kết nối GPRS
GPRS có nhiều rãnh loại 8 ( lựa chọn )
GPRS có nhiều ránh loại 10 ( tự động )
6. Giới hạn nhiêt độ:
Bình thường -900 C tới +700C
Hạn chế : - 350C tới -900 C và +700C tới +800C
67
Nhiệt độ bảo quản: -450C tới 850C
7. Dữ liệu GPRS:
GPRS dữ liệu tải xuống: Max 85.6 kbps
GPRS dữ liệu tải lên: Max 42.8 kbps
Sơ đồ mã hóa: CS-1, CS-2, CS-3 và CS-4
Sim 900 hổ trợ giao thức PAP ,kiểu sử dụng kết nối PPP
Sim 900 tích hợp giao thức TCP/IP
Chấp nhận thông tin được điều chỉnh rộng rãi
8. CSD:
Tốc độ truyền dẫn CSD: 2; 4; 8; 9; 6; 14 KPPS
Hỗ trợ USSD
9. SMS:
MT, MO, CB, Text and PDU mode
Bộ nhớ SMS: Sim, card
10. FAX:
Nhóm 3 loại 1
11.Sim card:
Hỗ trợ sim card: 1,8v ; 3v
12. Anten ngoài:
Kết nối thông qua anten ngoài 500km hoặc đế anten
13. Âm thanh:
Dạng mã hòa âm thanh.
Mức chế độ (ETS 06.20)
Toàn bộ chế độ (ETS 06.10)
Toàn bộ chế độ tăng cường (ETS 06.50/ 06.06/ 06.80)
Loại bỏ tiếng dội
14. Giao tiếp nối tiếp và sự ghép nối:
68
Cổng nối tiếp: 7 Cổng nối tiếp( ghép nối)
Cổng kết nối có thể Sd với CSD Fax, GPRS và gửi lệnh
ATCommand tới mudule điều khiển
Cổng nối tiếp có thể Sd chức năng giao tiếp
Hỗ trợ tốc độ truyền 1200 BPS tới 115200 BPS
Cổng hiệu chỉnh lỗi: 2 cổng nối tiếp TXD và RXD
Cổng hiệu chỉnh lỗi chỉ sử dụng sữa lỗi
15. Quản lý danh sách:
Hỗ trợ mẫu danh sách: SM, FD, LD, RC,ON, MC
16. Sim Application toolkit:
Hỗ trợ SAT loại GSM 11,14 bản 99
17. Đồng hồ thời gian thực:
Người cài đặt
18. Times function:
Lập trình thông qua AT Command
19. Đặc tính vật lý (đặc điểm):
Kích thướt 50±0.15 x 33±0.15 x7.7±0.3mm
Nặng 13.8 kg
Các file đính kèm theo tài liệu này:
- do_an_9098.pdf