Sơ đồ ghép nối vi điều khiển với ENC28j60

Một phần của tài liệu Đồ án Điều khiển thiết bị qua mạng Ethernet (Trang 52)

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. 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. 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ứ

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.

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

Một phần của tài liệu Đồ án Điều khiển thiết bị qua mạng Ethernet (Trang 52)