Việc thiết kế Module Ethernet trên vi điều khiển PIC18F4550 nhằm ứng dụng đo lường và điều khiển có ý nghĩa rất lớn, có thể ứng dụng trong nhiều lĩnh vực của đời sống xã hội và trong công nghiệp. Ngoài ra, module Ethernet trên vi điều khiển PIC18F4550 cũng phục vụ cho việc học tập và nghiên cứu của sinh viên. Việc xây dựng module này liên quan đến nhiều mảng kiến thức, từ những kiến thức lý thuyết cho đến những kiến thức thực tiễn.
89 trang |
Chia sẻ: lylyngoc | Lượt xem: 6718 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Điều khiển thiết bị qua mạng Ethernet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trị trường này chính là số 16 bít mà số thứ tự gói tin cần dịch trái.
Option -2byte: vùng tùy chọn, khai báo các option của TCP trong đó có độ dài tối đa của vùng TCP data trong 1 segment.
Padding-: phẩn chèn thêm vào header để đảm bảo phần header luôn kết thúc ở một mốc 32 bít.
TCP data: chứa dữ liệu, của tầng trên có độ dài tối đa ngầm định là 536 byte. Gía trị này có thể khai báo trên phẩn Option.
Cấu trúc gói tin ARP (Adrees Resolution Protocol)
Mọi máy tính cùng nằm trên một mạng có cùng một net ID và các máy tính cùng trên mạng vật lý có thể gửi frame vật lý trực tiếp cho nhau nên việc truyền thông tin giữa hai máy tính trong cùng một mạng vật lý không cần sử dụng gateway. Việc dẫn đường trực tiếp chỉ sử dụng phần địa chỉ máy host ID trong địa chỉ IP. Trạm gửi chỉ việc kết khối dữ liệu vào frame, chuyển địa chỉ IP của trạm đích thành địa chỉ vật lý và gửi trực tiếp frame tới máy nhận.
Một cơ chế sử dụng để chuyển địa chỉ IP thành địa chỉ vật lý là ARP (Address Resolution Protocol). Khi hai máy tính cùng nối vào một mạng vật lý, chúng biết được địa chỉ IP của nhau nhưng để truyền thông giữa hai máy, chúng phải biết được địa chỉ vật lý của nhau. ARP giải quyết vấn đề chuyển từ địa chỉ IP 32 bits sang địa chỉ Ethernet 48 bits. Người ta sử dụng hai cơ chế đó là ARP request và ARP relay.
Hình 2. 5: Mô tả đường truyền dữ liệu ARP
Mô tả hoạt động của khung ARP
Chuyển giao trực tiếp: Địa chỉ vật lý là một hàm của địa chỉ IP ví dụ sử dụng trên mạng token ring proNET-10 là mạng cho phép đặt địa chỉ IP và địa chỉ vật lý thoải mái. Người ta có thể đặt địa chỉ IP là 192.5.48.3 và địa chỉ vật lý là 3, khi đó ta có PA = f(IA). Với PA là địa chỉ vật lý, IA là địa chỉ Internet và f là hàm chuyển đổi. Chuyển giao gián tiếp: Chuyển giao địa chỉ động được thực hiện bằng cách máy tính muốn gửi thông tin gửi một thông báo tới toàn bộ các máy tính trên mạng, trong thông báo đó có chứa địa chỉ IP của máy tính nó cần liên lạc, mọi máy sẽ nhận được thông báo và máy nào thấy địa chỉ IP của mình thì trả lại một thông báo chứa địa chỉ vật lý của chính mình. Khi đó hai máy tính có thể “ nói chuyện” với nhau. Ngoài ra, người ta còn sử dụng bảng chỉ đường để lưu trữ tạm thời các địa chỉ sử dụng mới nhất ( Address Reslution Cache) để tăng tốc độ của việc chuyển giao địa chỉ. Một gói thông tin ARP là một Ethernet Frame được truyền trực tiếp từ máy này tới máy khác. Vì không phải sử dụng IP, gói tin này không có địa chỉ IP cũng như không cần được dẫn đường, nó phải được gửi broadcast tới tất cả các máy trên mạng Ethernet (với địa chỉ FFFF_FFFF_FFFF).
Bảng 2. 1: Mô tả gói thông tin ARP
Không giống phần lớn các giao thức khác,dữ liệu trong ARP không có một định dạng chuẩn cho header. Để ARP có thể làm việc với nhiều công nghệ khác nhau, người ta dùng một trường để chứa độ dài của những trường đi sau nó.
Trong trường hợp máy tính trạm không có thiết bị nhớ phụ, và vì vậy nó không biết địa chỉ IP của chính mình khi khởi động, người ta sử dụng cơ chế chuyển ngược địa chỉ (Reverse Address Resolution Protocol – RARP) hoạt đọng tương tự ARP để giải quyết vấn đề này. Theo cơ chế đó, có một máy chủ chứa bảng địa chỉ IP của các máy trạm, khi máy trạm khởi động, nó gửi một request tới tất cả các máy và máy chủ gửi trả lại một gói tin chứa địa chỉ IP của máy trạm yêu cầu..
Gói tin của ARP
Protocol type: 0x0800 cho IP (0000.1000.0000.0000).
Hardware len = 6 bytes cho ethernet.
Protocol len = 4 bytes cho IP.
ARP operation:
1= yêu cầu
2 = đáp lại
3/4 = RARP yêu cầu/đáp lại
Bảng 2. 2: Khung dữ liệu ARP
Destination Address
Source Address
Frame type
(ARP) Data
CRC
6 bytes
6 bytes
2 bytes
28 bytes
4 ytes
Trường của khung ARP
Địa chỉ đích (ethernet destination address):
FF:FF:FF:FF:FF:FF là địa chỉ broadcast cho ARP request.
Địa chỉ nguồn (ethernet source address) là địa chỉ của ARP yêu cầu.
Frame type:
ARP yêu cầu hoặc đáp lại (ARP request/rely) : 0x0806
RARP yêu cầu hoặc đáp lại (RARP request/rely): 0x08035
IP: 0x0800
Cấu trúc gói tin UDP
Vùng header của UDP có 64 bít với 4 trường:
Source port – 2byte: xác định cổng của người gửi thông tin và có ý nghĩa nếu muốn nhận thông tin phản hồi từ người nhận. nếu không thì đặt nó bằng 0.
Dentination port-2byte: xác định cổng nhận thông tin và trường này là cần thiết.
Length- 2 byte: là chiều dài của toàn bộ gói tin( phần header và phần dữ liệu). chiều dài tối thiểu là 8 byte khi gói tin không có dữ liệu mà chỉ có header.
Checksum- 2byte: dùng cho việc kiểm tra lỗi của phần header và phần dữ liệu.
Giao thức điều khiển truyền tin – ICMP (Internet Control Message Protocol).
Việc dẫn đường qua các mạng sử dụng giao thức diều khiển truyền tin (Internet Control Message Protocol - ICMP) được định nghĩa trong RFC 792. ICMP sử dụng gói tin IP để chuyển thông báo của nó. ICMP gửi các thông báo làm các công việc: Điều khiển, thông báo lỗi và chức năng thông tin cho TCP/IP. Thông thường ICMP được gửi khi một gói tin không thể đi tới đích, một gateway không còn đủ chỗ nhớ để nhận thêm gói tin hay một gateway hướng dẫn máy tính sử dụng gateway khác để truyền thông tin theo một con đường tối ưu hơn.
Cấu trúc gói tin ICMP:
Mặc dù mỗi thông báo ICMP có một kiểu định dạng riêng của nó, song các thông báo đều chứa 3 trường đầu tiên giống nhau:
TYPE: Định nghĩa thông báo đi sau.
CODE: Cung cấp thông tin thêm về thông báo.
CHECKSUM: Chứa checksum của thông báo.
Bảng 2. 3: Cấu trúc gói ICMP
Type Field
ICMP Message Type
0
Echo Reply
3
Destination Ủneachable
4
Source Quench
5
Redirect (Change a router)
8
Echo Request
11
Time Exceeded for a Datagram
12
Parameter Problem on a Datagram
13
Timestamp Request
14
Timestamp Reply
15
Information Request
16
Information Reply
17
Address Mask Request
18
Address Mask Reply
Chương 3: Phần cứng
3.1. Vi điều khiển PIC
3.1.1. Giới thiệu về vi điều khiển PIC
PIC là một họ vi điều khiển theo kiến trúc Havard được sản xuất bởi công ty Microchip Techonology
3.1.1.1. Lịch sử phát triển
Năm 1965 hãng Genneral Instrument thành lập ban vi điện tử nhằm tập trung nghiên cứu công nghệ chế tạo bộ nhớ EPROM và EEPROM , đó là các linh kiện thu hút nhiều đầu tư của các phòng thí nghiệm bán dẫn.Đầu những năm 70 Genneral Instrument cũng chế tạo vi xư lý 16 bit PC1600.Bộ xử lý này khá tốt nhưng có nhược điểm là khả năng cào ra không mạnh để thích ứng bộ xử lý PC1600 trong các ứng dụng cần có tính năng cao. Năm 1975 Genneral Instrument thiết keess vi mạch điều khiển giao tiếp ngoại vi (Peripheral interface controler) viêt tắt là PIC, đó là linh kiện hỗ trợ các tính năng vào ra do đó bộ mã lệnh của nó khá nhỏ gọn. Những vi điều khiển PIC đầu tiên có điểm yếu là chế tạo theo công nghệ n-MOS nên tiêu thụ nhiều năng lượng, bộ nhớ chương trình là loại ROM mặt nạ chỉ nạp được một lần, do đó chương trình điều khiển được nạp ngay khi chế tạo vi mạch nên chỉ thích hợp với các khác hang đặt mua với số lượng lớn, để lắp ráp trong sản xuất những sản phẩm cụ thể.
Những năm đầu thập kỉ 80 Genneral Instument gặp khó khan trong thương mại và tổ chức lại.Hãng tập trung vào chế tạo linh kiện bán dẫn công suất lớn là thế mạnh cho tới hiện nay của hang. General Instrument đã chuyển nhượng Ban vi điện tử và nhà máy tại Chandle, bang Anizona cho cá nhà đầu tư. Họ lập ra một công ty mới, đặt tên là Arizpna Microchip technology hiện nay là Microchip technology Inc.
Chiến lược của nhà đầu tư là tập chung vào vi điều khiển và bộ nhớ của bán dẫn. các vi mạch PIC n-MOS được cải tiến, chế tạo dựa trên nền tảng công nghệ mới CMOS.các sản phẩm đầu tiên của Microchip được biết tới và bán ra với số lượng lớn là các vi điều khiển PIC thược họ PIC16C5x. họ này có hai biến thể với bộ nhớ chương trình là OTP và UV EPROM. Loại OTP có thể nạp trình một lần dùng cho sản xuất loại lớn. Loại UV EPROM có thể xóa được bằng tia cực tím ( tia UV) dùng khi phát triển, thử nghiệm phần mềm.
Măn 1983 Microchip là hãng đầu tiên đã tích hợp được bộ nhớ chương trình fash EEPROM vào những vi điều khiển mới, trong đó được biết đến nhiều nhất là PIC16C84 và PIC16F84. Bộ nhớ chương trình fash đã loại bỏ vai trò của vi điều khiển có bộ nhớ xóa bằng tia cực tím, có vỏ bằng gốm đắt tiền và các đèn chiếu tia cưc tím.
3.1.1.2. phân loại
Hiện nay có khá nhiều các dòng PIC và có nhiều khác biệt về phần cứng, nhưng các chức năng chính có thể điểm qua một vài nét như sau:
8/16 bit CPU ,xây dựng theo kiến trúc Harvard có sửa đổi khác với kiến trúc Von Neumann của AVR.
Flash và ROM có thể tùy chọn từ 256 byte đến 256Kbyte
Các cổng Xuất/Nhập (T/O ports) (mức logic thường từ 0V đến 5.5V, ứng với logic 0 và logic 1).
8/16 Bit Tỉmer
Công nghệ Nanowatt (dòng PIC 18Fxxxx)
Các chuẩn giao tiếp ngoại vi nối tiếp đồng bộ/ Không đồng bộ USART ,AUSART ,EUSARTs.
Bộ chuyển đổi ADC Analog –to-digital converters , 10/12bit
Bộ so sánh điện áp (Voltage Comparators)
Các module Capture/Compare/PWM.
LCD
MSSP peripheral dung cho giao tiếp I2C, SPI, I2S.
Bộ nhớ nội EEPROM –có thể ghi/xóa lên tới 1 triệu lần
Module điều khiển động cơ, đọc encoder
Hỗ trợ giao tiếp USB
Hỗ trợ điều khiển Ethernet
Hỗ trợ giao tiếp CAN
Hỗ trợ giao tiếp LIN
Hỗ trợ giao tiếp IrDA
Một số dòng có tích hợp bộ RF (PIC 16F639 và rfPIC)
KEELOQ mã hóa và giải mã
DSP những tính năng xử lý tín hiệu số (dsPIC)
Tiêu chuẩn để phân nhóm dựa vào sự khác nhau về kiến trúc bộ xử lý bên trong của vi điều khiển:
Số các thanh ghi có thể truy nhập được.
Có hay không có ngắt, số lượng ngắt .
Độ dài từ lệnh.
Chia làm 4 họ:
Họ cấp thấp (low - end): 12C5xx,16C5x,16C505, 16HV540.
Họ cấp chung (mid - range): 12C6xx, 14C000, 16C6x, 16C62x, 16F62x,16C67x, 16CC8x, 16F87x, 169xx.
Họ cấp cao (high - end): 17Cxxx.
Họ cấp cao (high – performance): 18Cxxx,18Fxx2.
3.1.2. Một số ưu điểm của Microchip PIC
Bộ nạp trình cho PIC có thể tự lắp ráp một cách dễ dàng với chi phí thấp dp ƠIC chủ yếu nạp trình theo chuẩn ICSP (In –Circuit Siral Programming) là phương pháp nạp trình nối tiếp: các dữ liệu được nạp vào bộ nhớ chương trình thông qua 2 chân vào /ra được gán là cổng truy nhập đến bộ nhớ chương trình trong quá trình nạp trình. Do đó nhờ có bộ nhớ flash và nạp trình theo chuẩn ICSP mà những người nghiên cứu và sử dụng PIC đã tiết kiệm được đáng kể cho phí mua các công cụ nạp. Với bộ nhớ flash thì thời gian nạp trình cũng được cải thiện đáng kể (chỉ khoảng vài chục giây) so với UV EPROM (cỡ vài chục phút).
Microchip cũng cung cấp rất đầy đủ và chi tiết các tài liệu kỹ thuật về tất cả các loại vi điều khiển PIC. Ngoài ra còn có rất nhiều sách viết về PIC và các trang web nói về vi điều khiển này. Tài liệu hỗ trợ cho vi điều khiển PIC chỉ dung sau máy tính cá nhân PC và về doanh số bán ra thị trường hiện nay. Microchip đã đứng đầu về doanh số bán PIIC 8bit , vượt lên các vi điều khiển của Motorola.
3.1.3. Vi điều khiển PIC18F4550
3.1.3.1. PIC18F4550
Hình 3. 1: Hình thực tế của PIC18F4550
PIC18F4550 là vi điều khiển thuộc nhóm cao cấp trong dòng vi điều khiển PIC18 – hiệu suất tính toán lớn, giá cả phù hợp - độ bền cao, dung lượng bộ nhớ chương trình được nâng cấp. Ngoài ra chúng còn được thiết kế để phù hợp cho những ứng dụng có hiệu suất cao, ít tiêu tốn năng lượng.
Những tính năng PIC18F4550
Tần số hoạt động: DC - 48 MHz
Bộ nhớ chương trình (Bytes): 32768
Bộ nhớ chương trình (Chỉ định): 16384
Bộ nhớ dữ liệu (Bytes): 2048
Bộ nhớ EEPROM dữ liệu (Bytes): 256
Nguồn ngắt: 20
Cổng I/O: Ports A,B,C,D,E
Timers: 4
Module Capture/Compare/PWM: 1
Module Capture/Compare/PWM cải tiến: 1
Giao tiếp nối tiếp: MSSP, USART cải tiến.
Module Universal Serial Bus (USB): 1
Streaming Parallel Port (SPP): có
Module 10-Bit Analog-to Digital: 13 Input Channels
Bộ so sánh (Comparators): 2
Resets (and Delays): POR, BOR, RESET Instruction, Stack Full, Stack Underflow (PWRT, OST), MCLR (optional), WDT
Programmable Low-Voltage Detect: có
Programmable Brown-out Reset: có
Instruction Set: 75 Instructions; 83 with Extendexd Instruction Set enabled
Packages: 40-Pin PDIP, 44-Pin QFN, 44-Pin TQFP
Điểm chú ý của PIC18f4550:
Với bộ nhớ có 32kb Flash lưu trữ chương trình , 2kb bộ nhớ SRAM bay hơi và 256byte EEPROM(Bộ nhớ không bay hơi) để lưu trữ dại hạn dữ liệu như cấu hình….
Các chỉ thị dài 1byte với ngoại lệ dài 2byte (CALL, MOVFF, GOTO, LSFR). Sử dụng cơ chế đường ống để thực thi mã bằng việc khiến các chỉ thị lien tiếp hoạt động trong 4 xung nhịp(độ dại xung) có 4 lần nhảy xung được thêm vào.
Các đặc tính đáng chú ý khác là có đồng hồ,ngắt ( đồng hồ gắn trong và gắn ngoài) với hai mức ưu tiên và dung cả hai mức như bộ so sánh tương tự kèm theo với bộ phát điện thế chuẩn có 16 mức (hữu ích khi dung trigger ở mức phần cứng).
Cuối cùng ,PIC cũng có bộ chuyển đổi tương tự 10 bit nhưng dao đông ký không đủ yêu cầu về tốc độ cao cần thiết. Vì vậy máy phát dao động có tốc độ
48Mhz giữa thời gian trễ do truyền tải các ngắt khác ( vòng lặp…) . Không thể đạt được tốc độ lớn hơn 200Khz.
3.1.3.2 Sơ đồ chân
Hình 3. 2: sơ đồ chân của PIC18F4550
3.1.3.3 Chức năng của các chân PIC18F4550
Bảng 3. 1: Bảng chức năng chân của PIC18F4550
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
1
MCLR/
VPP/RE3
MCLR
1
I
ST
Master clear.chân reset đầu vào thiết lập
VPP
P
Đầu vào kênh 0 của bộ biển đổi A/D
RE3
1
I
ST
Đầu vào số
13
OSC1/
CLKI
OSC1
1
I
ANA
Đầu vào nối với bộ giao động
CLKI
1
I
ANA
Đầu vào nguồn xung ngoài, Luôn gắn liền với
chức năng pin OSC1
14
OSC2/
CLKO
/RA6
OSC2
0
O
--
Đầu vào nối với bộ giao động
CLKO
0
O
--
Đầu vào nguồn xung ngoài, Luôn gắn liền với
chức năng pin OSC1
RA6
1/0
I/O
TLL
chân vào/ra bình thường
Bảng 3. 2: Bảng chức năng chân của PORTA
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
2
RA0/AN0
RA0
0
1
O
I
TTL
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN0
1
I
ANA
Đầu vào kênh 0 của bộ biển đổi A/D
3
RA1/AN1
RA1
0
1
O
I
TTL
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN1
1
I
ANA
Đầu vào kênh 1 của bộ biển đổi A/D
4
RA2/AN2/
VREF-/CVREF
RA2
0
1
O
I
TTL
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN2
1
I
ANA
Đầu vào kênh 2 của bộ biển đổi A/D
VREF-
1
I
ANA
A/D và đầu vào điện áp tham chiếu mức thấp bộ so sánh
CVREF
X
O
ANA
Đầu ra điện áp tham chiếu bộ so sánh
5
RA3/AN3/
VREF+
RA3
0
1
O
I
TTL
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN3
1
I
ANA
Đầu vào kênh 3 của bộ biển đổi A/D
VREF+
1
I
ANA
A/D và đầu vào điện áp tham chiếu mức cao bộ so sánh
6
RA4/T0CKI/C1OUT/
RCV
RA4
0
1
O
I
ST
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
T0CKI
1
I
ST
Cấp xung cho timer0
C1OUT
0
O
--
Đầu ra 1 bộ so sánh/ưu tiên hơn vào/ra dữ liệu
RCV
1
I
TTL
Đầu vào USB thu phát RCV bên ngoài
7
RA5/AN4/SS/
HLVDIN/C2OUT
RA5
0
1
O
I
TTL
Chiều ra vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN4
1
I
ANA
Đầu vào kênh 4 của bộ biển đổi A/D
SS
1
I
TTL
Đầu vào SS(lựa chọn thiết bị tơ) chế độ SPI
HLVDIN
1
I
ANA
Đầu vào module phát điện áp cao
C2OUT
0
O
--
Đầu ra 2 bộ so sánh/ưu tiên hơn vào/ra dữ liệu
Bảng 3. 3: Bảng chức năng chân của PORTB
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
33
RB0/AN12/INT0/
FLT0/
SDI/SDA
RB0
1/0
I/O
TTL
Chiều ra /vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN12
1
I
ANA
Đầu vào kênh 12 của bộ biển đổi A/D
INT0
1
I
ST
Ngắt ngoài 0
FLT0
1
I
ST
Đầu vào báo sự cố PWM(module ECCP1)
SDI
1
I
ST
Đầu vào dữ liệu chế độ SPI
SDA
1/0
I/O
ST
Đầu vào/ra dữ liệu chế độ I2C
34
RB1/AN10/INT1/SCK/SCL
RB1
1/0
I/O
TTL
Chiều ra/ vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN10
1
I
ANA
Đầu vào kênh 10 của bộ biển đổi A/D
INT1
1
I
ST
Ngắt ngoài 1
SCK
1/0
I
ST
Xung đồng bộ nối tiếp đầu vào/ra cho chế độ SPI
SCL
1/0
I/O
ST
Xung đồng bộ nối tiếp đầu vào/ra cho chế độ I2C
35
RB2/AN8
/INT2/
VMO
RB2
1/0
I/O
TTL
Chiều ra/ vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN8
1
I
ANA
Đầu vào kênh 8 của bộ biển đổi A/D
INT2
1
I
ST
Ngắt ngoài 2
VMO
0
O
--
Ngắt thu phát USB ,đầu ra VMO
36
RB3/AN9/CCP2/VPO
RB3
1/0
I/O
TTL
Chiều ra /vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN9
1
I
ANA
Đầu vào kênh 9 của bộ biển đổi A/D
CCP2(1)
1/0
I/O
ST
Đầu vào bộ capture CCP2/ CCP2 của bộ so sánh đầu ra của PWM
VPO
0
O
--
Ngắt thu phát USB ,đầu ra VPO
37
RB4/AN11/KBI0/CSSPP
RB4
1/0
I/O
TTL
Chiều ra/vào dữ liệu, không ảnh hưởng đầu vào tương tự
AN11
1
I
ANA
Đầu vào kênh 11 của bộ biển đổi A/D
KBI0
1
I
TTL
Chân ngắt của ngắt thay đổi mức PORTB
CSSPP
0
O
--
Điều kiển chọn chip đầu ra SPP
38
RB5/KBI1/PGM
RB5
1/0
I/O
TTL
Chiều ra /vào dữ liệu số
KBI1
1
I
TTL
Chân ngắt của ngắt thay đổi mức PORTB
PGM
1/0
I/O
ST
Tín hiệu nối mạch nạp nối tiếp(ICSP)
39
RB6/KBI2/PGC
RB6
1/0
I/O
TTL
Chiều ra/ vào dữ liệu số
KBI2
1
I
TTL
Chân ngắt của ngắt thay đổi mức PORTB
PGC
1/0
I/O
ST
Đầu vào xung từ(ICSP và ICD)
40
RB7/KBI3/PGD
RB7
1/0
I/O
TTL
Chiều ra/ vào dữ liệu số
KBI3
1
I
TTL
Chân ngắt của ngắt thay đổi mức PORTB
Bảng 3. 4: Bảng chức năng chân của PORTC
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
15
RC0/
T1OSO/
T13CKI
RC0
1/0
I/O
ST
Chiều ra /vào dữ liệu số
T1OSO
0
O
—
Đầu ra bộ phất xung timer 1
T13CKI
1
I
ST
Cấp xung cho timer1 /timer3 chế độ đếm sự kiện (counter).
16
RC1/
T1OSI/
CCP2/UOE
RC1
1/0
I/O
ST
Chiều ra /vào dữ liệu số
T1OSI
x
I
CMOS
Đầu vào bộ dao động timer1.cấm đầu ra/vào số
CCP2(2)
1/0
I/O
ST
Đầu vào capture(CCP2)/CCP2 của bộ so sánh và đầu ra của PWM
UOE
0
—
—
Ngắt thu phát USB ,đầu ra UOE
17
RC2/CCP1
/P1A
RC2
1/0
I/O
ST
Chiều ra /vào dữ liệu số
CCP1
1/0
I/O
ST
Đầu vào capture(CCP1)/ CCP1 của bộ so sánh và đầu ra của PWM
P1A
0
O
TTL
Điện áp tăng cường đâu ra CCP1 PWM, kênh A.
23
RC4/
D-/VM
RC4
1
I
TTL
Chiều ra /vào dữ liệu số
D-
1/0
I/O
—
Dòng trừ khác biệt USB (đầu vào/ ra)
VM
1
I
TTL
Ngắt thu phát USB ,đầu vào VM
24
RC5/D+
/VP
RC5
1
I
TTL
Chiều ra /vào dữ liệu số
D+
1/0
I/O
—
Dòng cộng khác biệt USB (đầu vào/ ra)
VP
1
O
TTL
Ngắt thu phát USB ,đầu vào VP
25
RC6/TX/
CK
RC6
1/0
I/O
ST
Chiều ra /vào dữ liệu số
TX
0
O
—
Chân truyền dữ liệu nối tiếp không động bộ của module EUSART
CK
1/0
I/O
ST
Chân phát xung(clock) đồng bộ nối tiếp của module EUSART
26
RC7/RX/
DT/SDO
RC7
1/0
I/O
ST
Chiều ra /vào dữ liệu số
RX
0
O
ST
Chân nhận dữ liệu nối tiếp không động bộ của module EUSART
DT
1/0
I/O
ST
Chân truyền dữ liệu nối tiếp động bộ của
module EUSART
SDO
1
I
—
Chân ra dữ liệu của giao tiếp SPI
Bảng 3. 5: Bảng chức năng chân của PORTD
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
19
RD0/SPP0
RD0
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP0
1/0
I/O
TLL
Cổng dữ liệu song song
20
RD1/SPP1
RD1
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP1
1/0
I/O
TLL
Cổng dữ liệu song song
21
RD2/SPP2
RD2
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP2
1/0
I/O
TLL
Cổng dữ liệu song song
22
RD3/SPP3
RD3
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP3
1/0
I/O
TLL
Cổng dữ liệu song song
27
RD4/SPP4
RD4
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP4
1/0
I/O
TLL
Cổng dữ liệu song song
28
RD5/SPP5
/P1B
RD5
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP5
1/0
I/O
TLL
Cổng dữ liệu song song
P1B
0
O
—
Đầu ra kênh B của bộ PWM tăng cường ECCP1
29
RD6/SPP6
/P1C
RD6
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP6
1/0
I/O
TLL
Cổng dữ liệu song song
P1C
0
O
—
Đầu ra kênh C của bộ PWM tăng cường ECCP1
30
RD7/SPP7
/P1D
RD7
1/0
I/O
ST
Chiều ra /vào dữ liệu số
SPP7
1/0
I/O
TLL
Cổng dữ liệu song song
P1D
0
O
—
Đầu ra kênh D của bộ PWM tăng cường ECCP1
Bảng 3. 6: Bảng chức năng chân của PORTE
stt
chân
Chức
năng
Thanh
Ghi
TRIS
I/O
Kiểu
I/O
Mô tả
8
RE0/AN5/CK1SPP
RE0
1/0
I/O
ST
Chiều ra /vào dữ liệu số,khồng ảnh hưởng của đầu vào analog
AN5
1
I
ANA
Đầu vào kênh 5 của bộ chuyển đổi A/D
CK1SPP
0
O
—
Xung ra 1 SPP
9
RE1/AN6/CK2SPP
RE1
1/0
I/O
ST
Chiều ra /vào dữ liệu số,khồng ảnh hưởng của đầu vào analog
AN6
1
I
ANA
Đầu vào kênh6 của bộ chuyển đổi A/D
CK2SPP
0
O
—
Xung ra 2 SPP
10
RE2/AN7/OESPP
RE2
1/0
I/O
ST
Chiều ra /vào dữ liệu số,khồng ảnh hưởng của đầu vào analog
AN7
1
I
ANA
Đầu vào kênh 7 của bộ chuyển đổi A/D
OESPP
0
O
—
Cho phép SPP đầu ra.
12,31
VSS
VSS
P
Nối mass
11,32
VDD
VDD
P
ST
Nối nguồn dương
29
VUSB
VUSB
0
O
ST
Nội bộ USB đầu ra điều chỉnh điện áp 3.3V.
Legend:
TTL = TTL compatible input CMOS = CMOS compatible input or output
ST = Schmitt Trigger input with CMOS levels I = Input
O = Output P = Power
Note 1: Alternate assignment for CCP2 when CCP2MX Configuration bit is cleared.
2: Default assignment for CCP2 when CCP2MX Configuration bit is set.
3: These pins are No Connect unless the ICPRT Configuration bit is set. For NC/ICPORTS, the pin is No Connect unless ICPRT is set and the DEBUGConfiguration bit is cleared
3.3. Cảm biến nhiệt độ LM35
IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển thành tín hiệu điện dưới dạng dòng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán dẫn với nhiệt độ, tạo ra điện áp hoặc dòng điện tỷ lệ thuận với nhiệt độ tuyệt đối. Đo tín hiệu điện ta biết được giá trị của nhiệt độ cần đo. Sự tác động tạo ra điện tích tự do và lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phần tử, bứt các electron thành dạng tự dô di chuyển qua cùng cấu trúc mạng tinh thể tọa sự xuất hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo quy luật hàm mũ với nhiệt độ.
Các đặc trưng của LM35:
Ngõ ra là điện áp.
Đơn vị nhiệ độ : oC.
Các hiệu năng cao,công suất tiêu thụ là 60uA.
Sản phẩm không cần phải canh chỉnh nhiệt độ khi sử dụng.
Độ nhạy 10mV/1oC.
Sai số cực đạu 1,5oC khi nhiệt độ lớn hơn 100oC.
Phạm vi sử dụng: 0oC => 100oC.
Chân +Vs là chân cung cấp điện áp cho LM35 hoạt động (4->20V)
Chân Vout là chân điện áp ngõ ra của LM35, được đưa vào chân Analog của các bộ ADC.
Chân GND là chân nỗi mas, lưu ý cần nỗi mass chân này để tránh làm hỏng cảm biến cũng như làm giảm sai số trong quá trình đo.
Cứ 10mV tương ứng với 1oC, ở 0oC điện áp ra là 0V, tương ứng với giá trị ADC là 0. Ta dùng ADC 10bit với điện áp lấy mẫu là 5V , giá trị của ADC từ 0 đến 1023. Vậy mỗi giá trị ADC ứng với 5V/1024 = 4.883mV. Vậy 1 giá trị của A/D tương ứng với 0.4883oC. Muốn tăng độ phân giải A/D ta giảm giá trị điện áp lấy mẫu đi.
Hình 3. 3: Sơ đồ chân của LM35
Tính toán để chuyển đổ mức logic chân ADC của vi điều khiển thành nhiệt độ hiện thị:
Ta có ADC 10bit, vậy có 1024 mức lượng tử. Điện áp lấy mẫu trong bài ta sử dụng là 5V.Như vậy mỗi mức lượng tử tương ứng với giá trị điện áp là:
5V1024 = 4.883 (mV)
LM35 thay đổi 10mV/1oC do đó ứng với thay đổi 1oC sẽ thay đổi 2.048 mức lượng tử (10mV/4.883mV = 2.048). Như vậy ta sẽ có công thức tính nhiệt độ để hiển thị là:
Nhiệt độ = Adc_value2.048 (oC)
(Adc_value :là giá trị chân ADC của PIC đọc từ LM35)
3.4. Module Ethernet ENC28J60 và chuẩn giao tiếp SPI
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, người thực hiện đề tài đã chọn cách sử dụng chip ENC28J60.
3.4.1. Vi Mạch Ethernet ENC28j60
ENC28J60 là vi điều khiển hỗ trợ kết nối Ethernet ở lớp vật lý tương tự trong mô hình OSI cho bất kỳ vi điều khiển nào có giao tiếp SPI. ENC28J60 được thiết kế và chế tạo bởi Microchip.
Phần cứng của ENC28J60 được tích hợp trong cả hai lớp kết nối dữ liệu và lớp vật lý .
Hỗ trợ giao tiếp SPI với tốc độ tối đa đạt 20MHz.
Điện áp hoạt động của ENC28J60 từ 3.1V đến 3.6V.
Hỗ trợ công nghệ 10BASE-T.
Hỗ trợ truyền song công và bán song công, đồng thời nhằm tránh xung đột trên kênh truyền.
3.4.2. Sơ đồ chân và sơ đồ khối của ENC28j60
Sơ đồ chân ENC28j60:
Hình 3. 4: Sơ đồ chân ENC28J60
Sơ đồ khối ENC28J60:
Hình 3. 5: Sơ đồ khối ENC28J60
3.4.3. Sơ đồ ghép nối vi điều khiển với ENC28j60
Hình 3. 6: Sơ đồ ghép nối vi điều khiển với ENC28j60
SCK Serial Clock – Xung đồng bộ cho đường nối tiếp
SI Serial Input – Tín hiệu nối tiếp vào (ghi)
SO Serial Output – Tín hiệu nối tiếp ra (đọc)
3.4.4. Sơ đồ nguyên lý Module Ethernet
Hình 3. 7 : Sơ đồ nguyên lý Module Ethernet
Nguyên lý hoạt động của mạch:
Vi điều khiển ENC28J60 được điều khiển hoàn toàn thông qua giao tiếp SPI với PIC18.
PIC18 đóng vai trò là Master trong giao tiếp SPI với ENC28J60.
Tương tự như kết nối mạng trên PC, PIC18 đóng vai trò là PC còn ENC28J60 đóng vai trò như card mạng.
Nhận dữ liệu: Tín hiệu yêu cầu từ mạng truyền qua cổng RJ45 vào ENC28J60. ENC28J60 được thiết kế để giải mã tín hiệu và chuyển tín hiệu đó thành dữ liệu và lưu vào bộ đệm thu. Thông qua giao tiếp SPI, PIC18 liên tục kiểm tra bộ đệm của ENC28J60. Nếu phát hiện có dữ liệu nó sẽ đọc dữ liệu và xử lí.
Truyền dữ liệu: Thông qua giao tiếp SPI, PIC18 sẽ gửi dữ liệu vào bộ đệm phát của ENC28J60. ENC28J60 sẽ mã hóa dữ liệu và truyền ra đường RJ45 đến địa chỉ mong muốn.
3.4.5. Module Ethernet
Hình 3. 8: Module Ethernet thực tế
Sử dụng chip ENC28j60 Ethernet, SOP 28 chân.
Giao tiếp theo chuẩn SPI.
Đầu nối RJ45 HR911105A.
Sử dụng điện áp 3,3V.
Tần số 25Mhz.
Trong mạch này, sử dụng đầu cắm giao tiếp RJ45 là HR911105A của HANRUN.HR911105A được tích hợp sẵn biến áp cad có 2 đèn led để thông báo trạng thái kết nối của mạch.
3.4.6. Chuẩn truyền thông SPI
SPI (Serial Peripheral Inteface) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select).
SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
MISO– Master Input / Slave Output: nếu là chip Master thì đây là đường Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves được nối trực tiếp với nhau.
MOSI – Master Output / Slave Input: nếu là chip Master thì đây là đường Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối trực tiếp với nhau.
SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
Hình 3. 9: SPI giữa một chip Master và 3 chip Slave thông qua 4 đường.
Hoạt động: mỗi chip Master hay Slave có một thanh ghi dữ liệu 8 bits. Cứ mỗi xung nhịp do Master tạo ra trên đường giữ nhịp SCK, một bit trong thanh ghi dữ liệu của Master được truyền qua Slave trên đường MOSI, đồng thời một bit trong thanh ghi dữ liệu của chip Slave cũng được truyền qua Master trên đường MISO. Do 2 gói dữ liệu trên 2 chip được gởi qua lại đồng thời nên quá trình truyền dữ liệu này được gọi là “song công”.
Hình 3. 10: Quá trình truyền 1 gói dữ liệu thực hiện bởi module SPI
Vi mạch ENC28J60 giao tiếp với các vi xử lý khác thông qua chuẩn truyền dữ liệu nối tiếp SPI (Serial Peripheral Interface), dùng để nối các vi mạch trong cùng một hệ thống với ưu điểm là chạy nhanh và tốn rất ít dây nối tín hiệu, chỉ cần 3 dây cho cả đường ghi và đọc.
Sau đây là bộ lệnh SPI dùng cho vi mạch ENC28J60 và các giản đồ xung thể hiện các quá trình ghi, đọc dữ liệu, lệnh giữa vi xử lý và ENC28J60 :
Hình 3. 11: Quá trình đọc thanh ghi điều khiển Ethernet
Hình 3. 12: Quá trình đọc thanh ghi điều khiển MAC
Hình 3. 13: Quá trình ghi vào thanh ghi lệnh
Hình 3. 14: Quá trình ghi vào bộ đệm lệnh
Hình 3. 15: Quá trình ghi vào lệnh của hệ thống
Mặc dù đã được thiết kế theo cấu trúc “stand alone” (một chip làm hết các việc) nhưng việc điều khiển để vi mạch này hoạt động được là rất phức tạp và đòi hỏi có hiểu biết khá toàn diện về vi điều khiển, mạch điện tử và mạng Internet. Tuy nhiên, rất may mắn cho người thiết kế và lập trình vì hãng MicroChip (hãng sản xuất vi mạch ENC28J60) đã hỗ trợ tối đa, bằng cách đưa ra đầy đủ các thư viện phục vụ cho việc lập trình, làm cho việc lập trình giao tiếp với vi mạch này trở nên khá dễ dàng.
3.5. Text LCD
3.5.1. Cấu trúc Text LCD
Text LCD là các loại màn hình tinh thể lỏng dung để hiển thị các dòng chữ hoặc số trong bẳng mã ASCII.Không giống các loại LCD lớn, text LCD được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII.Cũng vì lý do chỉ hiển thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (để phân biết với Graphic LCD có thể hiển thị được hình ảnh). Mỗi ô của Text LCD bao gồm các chấm tinh thể lỏng, việc kết hợp “ẩn” và “hiện”các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong Text LCD, các mẫu ký tự được đinh nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng hiển thị tối đa được 16 ký tự. Một số kích thước thông thường của LCD là: 16x1,16x2,16x4,20x2,20x4…
Hình 3. 16: Text LCD 16x2
Text LCD có 2 giao thức cơ bản là nối tiếp (như I2C) và song song. Trong phạm vi bài học này chúng tôi chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD 16x2 điều khiển bởi chip HD44780U của hang Hitachi. Đối với các LCD khác bạn cần tham khảo datasheet riêng của từng loại , HD44780U cũng được gọi là chuẩn chung cho các loại Text LCD, vì thế bạn có thể dung chương trình ví dụ trong bài này để text trên các LCD khác với 1 ít chỉnh sửa cho phù hợp.
HD44780U là bộ điều khiển cho các Text LCD dạng ma trận điểm, chip này có thể được dung cho các LCD có 1 hoặc 2 dòng hiển thị. HD44780U có 2 mode giao tiếp là 4bit và 8 bit. Nó chứa sẵn 208 ký tự mẫu kích thước font 5x8 và 32 ký tự mẫu font 5x10 (tổng cộng có 240 mẫu ký tự khác nhau).
3.5.2. Sơ đồ chân
Bảng 3. 7: Chức năng chân của LCD
Chức năng
Số thứ tự chân
Tên
Trạng thái logic
Mô tả
Ground
1
VSS (GND)
-
0V
Nguồn cho LCD
2
VDD (VCC)
-
+5V
Tương phản
3
Vee
-
0 – Vdd
Điều khiển LCD
4
RS
0
1
D0-D7: lệnh
5
R/W
0
1
D0-D7: dữ liệu
6
E
0
1
Từ 1 xuống 0
Ghi (Từ PIC vào LCD)
Đọc (từ LCD vào PIC)
Dữ liệu/ Lệnh
7
D0
0/1
Bit 0 LSB
8
D1
0/1
Bit 1
9
D2
0/1
Bit 2
10
D3
0/1
Bit 3
11
D4
0/1
Bit 4
12
D5
0/1
Bit 5
13
D6
0/1
Bit 6
14
D7
0/1
Bit 7 MSB
Các Text LCD theo chuẩn HD44780U thường có 16 chân trong đó có 14 chân kết nối với bộ điều khiển và 2 chân nguồn cho “đèn LED nền”. Thứ tự chân thường được sắp xếp như hình trên.
Trong một số LCD 2 chân LED nền được đánh số 15 và 16 nhưng trong một số trường hợp 2 chân này đươc ghi là A(Anode) và K(Cathode).
Hình 3. 17: kết nối Text LCD với Vi điều khiển
Chân 1 và 2 là các chân nguồn, được nối với GND và nguồn 5V. Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với 1 biến trở để đạt được độ tương phản cần thiết, sau đó giữa mức biến trở này. Các chân điều khiển RS, R/W,EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển, chúng ta sẽ khảo sát kỹ càng hơn trong các phần sau.
3.5.3. Điều khiển hiển thị
Các chân điều khiển việc đọc và ghi LCD bao gồm RS,R/W và EN. Chân RS là chân số 3 : Chân lựa chọn thanh ghi ,chân này cho phép lựa chọn 1 trong 2 thanh ghi ỈR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được chọn và nếu RS=1 thanh ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gởi 1 mã lệnh đến LCD thì chân RS phải được reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả trong hình 12.
Hình 3. 18: Hoạt động của chân RS
R/W (chân số 4): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag - BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài này tôi hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2 bạn chỉ cần một thay đổi nhỏ trong chương trình wait_LCD (sẽ trình bày chi tiết sau) và kết nối chân R/W của LCD xuống GND.
EN (chân số 5): Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một “xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0:7, sau đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống.
3.5.4. Mạch RJ14
- Mạch sử dụng đầu cắm giao tiếp RJ14 là HR911105A của HANRUN, HR911105A được tích hợp sắn biến áp và có 2 con led để thông báo trạng thái kết nối của mạch.
Hình 3. 19: Sở đồ khối của HR911105A
Chương 4: Trình biên dịch CCS và webserver
4.1. Trình dịch CCS (PIC C Compiler)
4.1.1. Vì sao ta sử dụng CCS
Sự ra đời của một loại vi điều khiển đi kèm với việc phát triển phần mềm ứng dụng cho việc lập trình con vi điều khiển đó. Vì điều khiển chỉ hiểu và làm việc với hai con số 0 và 1. Ban đầu việc lập trình cho vi điểu khiển chỉ là 0 và 1. Sau này khi kiến trúc vi điều khiển ngày càng phúc tạp, số lượng thanh ghi lệnh nhiều lên, việc lập trình với các con số 0 và 1 không còn phù hợp nữa đòi hỏi ra đời ngôn ngữ mới thay thế. Và ngôn ngữ lập trình Assembly, C … cũng đã phát triển để phục vụ cho việc giao tiếp với vi điều khiển. Bên cạnh đó cũng đã ra đời nhiều chương trình soạn thảo và biên dịch dễ dàng hơn ngắn gọn hơn cho các ngôn ngữ đó: Keil C, CCS …
Tôi chọn CCS để lập trình cho PIC, vì CCS là một công cụ lập trình C mạnh cho vi điều khiển PIC.
4.1.2. Giới thiệu về CCS
CCS là trình biên dịch lập trình ngôn ngữ C cho vi điều khiển PIC của hãng Microchip. Chương trình là sự tích hợp của 3 trình biên dịch riêng biệt cho 3 dòng PIC khác nhau đó là:
PCB cho dòng PIC 12-bit opcodes
PCB cho dòng PIC 14-bit opcodes
PCB cho dòng 16 và 18-bit
Tất cả 3 trình biên dịch này được tích hợp lại trong một chương trình bao gồm cả trình soạn thảo và biên dịch CCS. Phiên bản được sử dụng trong tài liệu này là PCWH Compiler Vẻ 4.104.
Giống nhiều trình biên dịch C khác cho PIC, CCS giúp cho người sử dụng nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các dự án. Các chương trình điều khiển sẽ được thực hiện nhanh chóng và hiệu quả cao thông qua việc sử dụng ngôn ngữ nạp trình cấp cao – ngôn ngữ C.
Hình 4. 1: Giao diện chương trình CCS
4.1.3. Tạo PROJECT đầu tiên trong CCS
Để tạo một Project trong CCS có nhiều cách, có thể dùng Project Wizard, Manual Creat, hay đơn giản là tạo một Files mới và thêm vào đó các khai báo ban đầu cần thiết và “bắt buộc”.
Dưới đây sẽ trình bày cách tạo một project hợp lệ theo cả 3 phương pháp. Một điều ta cần chú ý khi tạo một Project đó là: khi tạo bắt cứ một Project nào mới thì ta nên tạo một thư mục mới với tên liên quan đến Project ta định làm, rồi lưu các files vào đó.
Khi lập trình và biên dịch, CCS sẽ tạo ra rất nhiều files khác nhau, do đó nếu để chung các Project trong một thư mục sẽ rất mất thời gian trong việc tìm kiếm sau này. Đây cũng là quy tắc chung khi ta làm việc với bất kỳ phần mềm nào, thiết kế mạch hay lập trình .
Tạo một PROJECT sử dụng PIC Wizard
Trước hết bạn khởi động chương trình làm việc PIC C Compiler. Từ giao diện chương trình di chuột chọn Project -> PIC Wizad.
Sau khi nhấn chuột, một cửa sổ hiện ra yêu cầu ban nhập tên Files cần tạo. Bạn tạo một thư mục mới, vào thư mục đó và lưu tên files cần tạo tại đây.
Hình 4. 2: Tạo file mới trong PCW compiler
Như vậy là xong bước đầu tiên. Sau khi nhấn nút Save, một cửa sổ New Project hiện ra. Trong của sổ này bao gồm rất nhiều Tab, mỗi Tab mô tả về một vài tính năng của con PIC. Ta sẽ chọn tính năng sử dụng tại các Tab tương ứng.
Hình 4. 3: Bảng hỗ trợ chức năng cho PIC
Dưới đây sẽ trình bầy ý nghĩa từng mục chọn trong mỗi Tab. Các mục chọn này chính là đề cập đến các tính năng của một con PIC, tùy theo từng loại mà sẽ có các Tab tương ứng. Đối với từng dự án khác nhau, khi ta cần sử dụng tính năng nào của con PIC thì ta sẽ chọn mục đó. Sau đây xin giới thiệu những Tab chính thường hay được sử dụng.
4.1.3.1. Tab General
Tab General cho phép ta lựa chọn loại PIC mà ta sử dụng và một số lựa chọn khác như chọn tần số thạch anh dao động, thiết lập các bit CONFIG nhằm thiết lập chế độ hoạt động cho PIC.
Hình 4. 4: Tab General
Device: Liệt kê danh sách các loại PIC 12F, 16F, 18F… Ta sẽ chọn tên Vi điều khiển PIC mà ta sử dụng trong dự án. Lấy ví dụ chọn PIC16F877A
Oscilator Frequency: Tần số thạch anh ta sử dụng, chọn 20 MHz (tùy từng loại)
Fuses: Thiết lập các bit Config như: Chế độ dao động (HS, RC, Internal ), chế độ bảo vệ Code, Brownout detected…
Chọn kiểu con trỏ RAM là 16-bit hay 8-bit
4.1.3.2. Tab Communications
Tab Communications liệt kê các giao tiếp nối tiếp mà một con PIC hỗ trợ, thường là RS232 và I2C, cùng với các lựa chọn để thiết lập chế độ hoạt động cho từng loại giao tiếp.
Giao tiếp RS232: Mỗi một Vi điều khiển PIC hỗ trợ một cổng truyền thông RS232 chuẩn. Tab này cho phép ta lựa chọn chân Rx, Tx, tốc độ Baud, Data bit, Bit Parity…
Giao tiếp I2C: Để sử dụng I2C ta tích vào nút chọn Use I2C, khi đó ta có các lựa chọn: Chân SDA, SCL, Tốc độ truyền (Fast - Slow), chế độ Master hay Slave, địa chỉ cho Salve.
Hình 4. 5: Tab Communications
4.1.3.3. Tab SPI và Tab LCD
Tab này liệt kê cho người dùng các lựa chọn đối với giao tiếp nối tiếp SPI, chuẩn giao tiếp tốc độ cao mà PIC hỗ trợ về phần cứng. Chú ý khi ta dùng I2C thì không thể dùng SPI và ngược lại. Để có thể sử dụng cả hai giao tiếp này cùng một lúc thì buộc một trong 2 giao tiếp phải lập trình bằng phần mềm (giồng như khi dùng I2C cho các chip AT8051, không có hỗ trợ phần cứng SSP).
Hình 4. 6: Tab SPI
Hình 4. 7: Tab LCD
4.1.3.4. Tab Timers
Liệt kê các bộ đếm/định thời mà các con PIC dòng Mid-range có: Timer0, timer1, timer2, WDT…
Trong các lựa chọn cấu hình cho các bộ đếm /định thời có: chọn nguồn xung đồng hồ (trong (internal) /ngoài (external)), tần số xung, khoảng thời gian xảy ra tràn…
Hình 4. 8: Tab Timer
4.1.3.5. Tab Analog
Liệt kê các lựa chọn cho bộ chuyển đổi tương tự/số (ADC) của PIC.Tùy vào từng IC cụ thể mà có các lựa chọn khác nhau, bao gồm:
Lựa chọn cổng vào tương tự
Chọn chân điện áp lấy mẫu (Vref)
Chọn độ phân giải: 8-bit = 0 ~ 255 hay 10-bit = 0~1023
Nguồn xung đồng hồ cho bộ ADC (trong hay ngoài), từ đó mà ta có được tốc độ lấy mẫu, thường ta chọn là internal 2-6 us.
Khi không sử dụng bộ ADC ta chọn none
Hình 4. 9: Tab Analog
4.1.3.6. Tab Interrupts và Tab Driver
Tab Interrupts cho phép ta lựa chọn nguồn ngắt mà ta muốn sử dụng. Tùy vào từng loại PIC mà số lượng nguồn ngắt khác nhau, bao gồm: ngắt ngoài 0 (INT0), ngắt RS232, ngắt Timer, ngắt I2C-SPI, ngắt onchange PORTB.v.v…
Tab Drivers được dùng để lựa chọn những ngoại vi mà trình dịch đã hỗ trợ các hàm giao tiếp. Đây là những ngoại vi mà ta sẽ kết nối với PIC, trong các IC mà CCS hỗ trợ, đáng chú ý là các loại EEPROM như 2404, 2416, 2432, 9346, 9356…Ngoài ra còn có IC RAM PCF8570, IC thời gian thực DS1302, Keypad 3x4, LCD, ADC… Chi tiết ta có thể xem trong thư mục Driver của chương trình: \...\PICC\Drivers.
Hình 4. 10: Tab Driver và Tab Interrupt
4.1.3.7. Tab Other
Tab này cho phép ta thiết lập các thông số cho các bộ Capture / Comparator /PWM.
Capture - Bắt giữ
Chọn bắt giữ xung theo sườn dương (rising edge) hay sườn âm (falling edge) của
xung vào.
Chọn bắt giữ sau 1,4 hay 16 xung (copy giá trị của TimerX vào thanh ghi lưu trữ CCCPx sau 1, 4 hay 16 xung).
Compare - So sánh
Ta có các lựa chọn thực hiện lệnh khi xay ra bằng nhau giữa 2 đối tượng so sánh là giá trị của Timer1 với giá trị lưu trong thanh ghi để so sánh. Bao gồm:
Thực hiện ngắt và thiết lập mức 0
Thực hiện ngắt và thiết lập mức 1
Thực hiện ngắt nhưng không thay đổi trạng thái của chân PIC.
Đưa Timer1 về 0 nhưng không thay đổi trạng thái chân.
PWM - Điều chế độ rộng xung
Lựa chọn về tần số xung ra và duty cycle. Ta có thể lựa chọn sẵn hay tự chọn tần số, tất nhiên tần số ra phải nằm trong một khoảng nhất định.
Comparator - So sánh điện áp
Lựa chọn mức điện áp so sánh Vref. Có rất nhiều mức điện áp để ta lựa chọn. Ngoài ra ta còn có thể lựa chọn cho đầu vào của các bộ so sánh.
Hình 4. 11: Tab Other
Sau các bước chọn trên, ta nhấn OK để kết thúc quá trình tạo một Project trong CCS, một Files ten_project.c được tạo ra, chứa những khai báo cần thiết cho PIC trong một Files ten_project. h.
4.2. Web động
Web động hay DHTML (Dynamic HTML) có thể được định nghĩa như một phần mềm được sử dụng cho việc mô tả sự kết hợp giữa ngôn ngữ đánh dấu siêu văn bản HTML, các stylesheet và ngôn ngữ script làm cho tài liệu trở nên sinh động.
DHTML cho phép người lập trình dễ dàng thêm các hiệu ứng cho các trang web. Ví dụ như làm động các hình ảnh và text trên trang web.
Cấu trúc của một DHTML:
Điều khiển LED
Bảng điều khiển LED thông qua internet
4.3. CSS
CSS là chữ viết tắt của “Cascading Style Sheet”, là kiểu thiết kế sử dụng nhiều lớp định dạng chồng lên nhau. CSS được tổ chức World Wide Web giới thiệu vào năm 1996. Cách đơn giản nhất để hiểu CSS là coi nó như một phần mở rộng của HTML để giúp đơn giản hoá và cải tiến việc thiết kế cho các trang web.
Một tiện ích của CSS là định nghĩa các Style (kiểu dáng, định dạng ….) một lần và các trình duyệt có thể áp dụng các Style này nhiều lần trong một đoạn văn bản.
4.3.1. Ưu điểm của CSS
CSS có thể tách riêng phần định dạng ra khỏi nội dung một trang web, do đó nó sẽ rất thuận tiện khi thay đổi giao diện của một trang web.
CSS là một sợi chỉ xuyên suốt trong quá trình thiết kế một website bởi vì nó cho phép nhà thiết kế kiểm soát toàn bộ giao diện, kiểu cách và sự sắp đặt của nhiều trang hay nhiều đối tượng trong một lần định nghĩa. Để thay đổi tổng thể hay nhiều đối tượng có cùng style, chỉ cần thay đổi style đó và lập tức tất cả các thành phần áp dụng Style đó sẽ thay đổi theo. Nó giúp tiết kiểm công sức rất nhiều.
Do định nghĩa các style có thể được tách riêng ra khỏi nội dung của trang web, chúng được các trình duyệt tải một lần và sử dụng cho nhiều lần, do đó nó giúp các trang web nhẹ hơn và chạy nhanh hơn.
4.3.2. Các đặc tính cơ bản của CSS
CSS quy định cách hiển thị các thẻ HTML bằng cách quy định các thuộc tính của các thẻ đó (font chữ, màu sắc). Để thuận tiện có thể đặt toàn bộ các thuộc tính của thẻ vào trong một file riêng có phần mở rộng là “.css”.
CSS phá vỡ giới hạn trong thiết kế Web, chỉ cần một file CSS có thể quản lý định dạng và layout trên nhiều trang web khác nhau. Các nhà phát triển Web có thể định nghĩa sẵn thuộc tính của một số thẻ HTML nào đó và sau đó nó có thể dùng lại trên nhiều trang khác.
Có thể khai báo CSS bằng nhiều cách khác nhau. Có thể đoạn CSS phía trong thẻ … hoặc tạo một file riêng rồi chèn vào tài liệu HTML hoặc có thể chèn trực tiếp vào bất cứ đâu của tài liệu HTML.
4.3.2.1. Cú pháp cơ bản của CSS
Css_selector_1{
Thuộc_tính_1 : giá_trị_của_thuộc_tính_1;
Thuộc_tính_2 : giá_trị_của_thuộc_tính_2;
……….
Thuộc_tính_n : giá_trị_của_thuộc_tính_n;
}
Css_selector_2{
Thuộc_tính_1 : giá_trị_của_thuộc_tính_1;
Thuộc_tính_2 : giá_trị_của_thuộc_tính_2;
……….
Thuộc_tính_n : giá_trị_của_thuộc_tính_n;
}
Css_selector_3{
Thuộc_tính_1 : giá_trị_của_thuộc_tính_1;
Thuộc_tính_2 : giá_trị_của_thuộc_tính_2;
……….
Thuộc_tính_n : giá_trị_của_thuộc_tính_n;
}
4.3.2.2. Ví dụ minh hoạ về mã CSS
Body{
Background: #ffffff; /*Nền sẽ có màu trắng*/
Color: blue; /*Chữ sẽ có màu xanh*/
}
4.3.2.3. Thứ tự xếp lớp
Tuỳ vào từng cách đặt khác nhau mà mức độ ưu tiên cho các style cũng khác nhau. Mức độ ưu tiên này tuân theo thứ tự sau:
Style nội tuyến - Style đặt trong từng thẻ HTML riêng biệt.
Style bên trong – Style đặt trong cặp thẻ …
Style bên ngoài – style đặt trong các file riêng có đuôi “.css”.
Style theo mặc định của trình duyệt.
4.3.3. CSS có tính kế thừa và kết hợp
4.3.3.1. Tính kế thừa
Giả sử rằng ở đầu file styleshet.css khai báo cho body có các thuộc tính như sau:
Body{
Color: #000000;
Font-size: 24px;
}
Nhưng trong trường hợp muốn khai báo các phần tử nhỏ hơn nằm trong nó như div có id là main-content:
#main-content{
Color: #ffffff;
Background: #000000;
}
Như vậy thì div có id là main-content sẽ không chịu ảnh hưởng của thuộc tính body nữa mà sẽ mang thuộc tính của chính nó. Chữ sẽ màu trắng và nền sẽ màu đen.
4.3.3.2. Tính kết hợp
Có thể định nghĩa nhiều CSS cùng một thuộc tính thay vì phải định nghĩa riêng lẻ từng cái một.
Ví dụ:
h1,h2,h3{
Color: #c9c9c9;
}
Thay cho việc định nghĩa riêng tường thuộc tính như sau:
h1 {
Color: #c9c9c9;
}
h2 {
Color: #c9c9c9;
}
h3{
Color: #c9c9c9;
}
4.3.3.3 Tạo bảng bằng html và css
Trong html để tạo được một bảng thì ta dùng . Khi thực hiện lệnh thì ta dẽ có một bảng rồi ta dùng các thuộc tính như border để chỉnh đường viền cho bảng.
Trong bảng thì có thẻ là các dòng trong bảng. mỗi là một dòng cho bảng.
Ngoài ra còn có thẻ là các cột cho bảng. Mỗi là một cột cho bảng. Để gộp các cột lại với nhau ta dùng code như sau: . Câu lệnh colspan="3" nghĩa là ra sẽ gộp 3 cột lại thành 1.
Còn nghĩa là ta sẽ gộp 2 dòng lại thành 1.
Hình 4. 12: websever
Chương 5: Sơ đồ khối và mô phỏng
5.1. Sơ đồ khối.
Khối điều khiển
VĐK PIC18F4550
Khối hiển thị
LCD 16x2
Khối nguồn
Module Ethernet
ENC26j80
Thiết bị được điều khiển bởi mạch
WEB
INTERNET
Bảng điều khiển trên trình duyệt thông qua internet
Hình 5. 1: Sơ đồ khối giao tiếp của mạch
5.2. Mạch nguyên lý.
Hình 5. 2: Mạch nguyên lý
5.2.1. Khối nguồn
Hình 5. 3: Khối nguồn
5.2.2. Khối công suất (RELAY)
Hình 5. 4: khối công suất (relay 5 chân 12v DC/ 240v AC)
5.2.3. Khối hiển thị (LCD 16x2)
Hình 5. 5: khối hiển thị (LCD 16x2)
5.2.4. Khối Key điều khiển đèn (Nút nhấn)
Hình 5. 6: Khối Nút nhấn
5.2.5. Khối đo nhiệt độ và Header giao tiếp với Module Ethernet
Hình 5. 7: LM35(nhiết độ) & Header kết nối với Module Ethernet
5.2.6. Khối reset, Xung thạch anh, Lọc nguồn
a, b, c,
Hình 5. 8: a:xung thạch anh
b: lọc nguồn
c: khối reset
5.2.7. Khối Vi xử lý trung tâm (Pic 18F4550)
Hình 5. 9: Khối xử lý dùng vi điều khiển PIC18F4550
5.3. Mô Phỏng
Hình 5. 10: Mô phỏng
KẾT LUẬN
Việc thiết kế Module Ethernet trên vi điều khiển PIC18F4550 nhằm ứng dụng đo lường và điều khiển có ý nghĩa rất lớn, có thể ứng dụng trong nhiều lĩnh vực của đời sống xã hội và trong công nghiệp. Ngoài ra, module Ethernet trên vi điều khiển PIC18F4550 cũng phục vụ cho việc học tập và nghiên cứu của sinh viên. Việc xây dựng module này liên quan đến nhiều mảng kiến thức, từ những kiến thức lý thuyết cho đến những kiến thức thực tiễn.
Những kết quả chính thực hiện được
Tìm hiểu nguyên lý chung chuẩn truyền thông Ethernet do IEÊ 802.3 quy định, tìm hiểu kiến thức về họ giao thức TCP/IP.
Kết nối thành công mạch demo với máy tính thông qua chuẩn truyền thông Ethernet.
Lập trình cho mạch demo bằng phần mềm CCS, sử dụng thư viện TCP/IP Stack cảu hang Microchip để thực hiện điều khiển các ứng dụng cơ bản như bật tắt đèn, hiển thị lên LCD và đo tham số nhiệt độ hiển thị lên web.
Trong quá trình làm còn nhiều thiếu sót về mặt khiến thức lên sản phẩm chưa được thực sự hoàn thiện. Trong tương lại sản phẩm có thể phát triển thêm các ứng dụng cho ngôi nhà thông minh của chúng ta.
Tài liệu tham khảo:
Datasheet PIC18F4550
Datasheet ENC28J60
Datasheet LM35
File Help của trình biên dịch PIC C Compiler (CCS)
Tài liệu tham khảo từ các trang web, diễn đàn trên Internet:
Các file đính kèm theo tài liệu này:
- dieu_khien_thiet_bi_tu_xa_qua_mang_ethernet_0181.docx