Khóa luận Nghiên cứu ứng dụng chíp điều khiển ethernet W5100

MỤC LỤC

 

Lời mở đầu 1

Chương 1: Tổng Quan Về TCP/IP 2

1.1. Giới Thiệu 2

1.2. Tổng quát 2

1.2.1. Tầng Giao Diện Mạng (Network Interface Layer) 2

1.2.2. Tầng Liên Mạng (Internet Layer) 3

1.2.3. Tầng Giao Vận (Transport Layer) 3

1.2.4. Tầng ứng dụng (Application Layer) 4

1.2.5. Địa chỉ IP 5

1.2.6. Địa chỉ IP Public và Địa chỉ IP Private 7

1.2.6.1. IP Public 7

1.2.6.2. IP Private 8

1.2.7. Lớp địa chỉ 8

1.2.8. Subnet Mask 10

1.2.9. Default Gateway 11

1.3. TCP/IP cho vi điều khiển 12

1.3.1. TCP/IP stack. 12

1.3.2. Hardwired TCP/IP 14

1.3.2.1. Giới thiệu về chip Ethernet W5100 14

1.3.2.1.1. Sơ đồ chân 15

1.3.2.1.2. Miêu tả một số thanh ghi 15

1.3.2.1.3. Miêu tả các chức năng 16

1.3.2.1.4. Truyền thông dữ liệu 17

1.3.2.1.5. Thông tin ứng dụng 18

Chương 2: Vi Điều Khiển 21

2.1. Tìm hiểu về vi điều khiển AVR-Micro Atmega64L 21

2.1.1. Mô tả chung về AVR 21

2.1.2. Tính năng của Atmega64L 21

2.1.3. Sơ đồ chân 23

2.1.4. Các khối của Atmega64L 25

2.1.4.1.Lõi CPU của Atmega64L 25

2.1.4.2. Bộ nhớ của Atmega64L 29

2.1.4.3 Nguồn xung hệ thống 31

2.1.4.4. Ngắt phần cứng của Atmega64L 31

2.1.4.5.Bộ đếm/định thời của Atmega64L: 32

2.1.4.5.Bộ biến đổi tương tự sang số ADC 33

2.1.4.6.Bộ truyền nhận nối tiếp USART 35

Chương 3: Thực Nghiệm 37

3.1. Thiết kế phần cứng 37

3.2. Xây dựng phần mềm 40

3.2.1.Viết chương trình cho vi điều khiển Atmega64L. 40

KẾT LUẬN 43

TÀI LIỆU THAM KHẢO 44

 

 

doc69 trang | Chia sẻ: maiphuongdc | Lượt xem: 2175 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Khóa luận Nghiên cứu ứng dụng chíp điều khiển ethernet W5100, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ỗi lớp thì nó có thể tác động trực tiếp tới một hoặc nhiều lớp khác thấp hơn nó. Hơn nữa, có cảm giác như rất nhiều lớp TCP/IP nó không chỉ hoạt động khi được yêu cầu mà cả những lúc không được yêu cầu. Một hệ thống có nhiều bộ nhớ dữ liệu và bộ nhớ chương trình có thể dể dàng kết hợp chặt chẽ thực hiện những nhu cầu. Một hệ thống điều khiển có thể cung cấp rất nhiều thuận lợi và do đó nó có thể thực hiện theo các phần khác nhau. Nhưng nó cũng trở nên khó khăn khi hệ thống chỉ có 8bit điều khiển, với vài trăm byte RAM và giới hạn bộ nhớ chương trình sử dụng. Thêm vào đó là truy cập hệ thống điều khiển, người dùng phải đặc biệt chú ý ứng dụng chính. Một TCP/IP Stack nó kết hợp chặt chẽ với ứng dụng chính là tương đối dễ dàng và có thể nó rất có hiệu quả. Phần lớn các chương trình được viết bằng ngôn ngữ “C”. Nó phụ thuộc vào chương trình biên dịch để nó tự động thay đổi các file nguồn. Giả sử TCP/IP Stack được thiết kế cho họ vi điều khiển PIC 18 thì nó có thể dễ dàng chạy trong các thiết bị phần cứng của vi điều khiển PIC 18. Cũng giống như TCP/IP chuẩn, TCP/IP Stack cho vi điều khiển cũng chia thành nhiều lớp TCP/IP Stack. Các mã ở mỗi lớp được tách ra từ dữ liệu ban đầu, trong khi các APIs(Application Programming Interfaces) được định nghĩa thông qua các thư viện có sẵn. Không giống như TCP/IP chuẩn thì nhiều lớp TCP/IP Stack của vi điều khiển trực tiếp truy cập một hoặc nhiều lớp mà không cần theo thứ tự từ trên xuống. Thêm vào đó TCP/IP Stack có thêm 2 module mới là “Stack Task” và “ARPTask”. StackTask dùng để điều khiển tất cả các module trong khi ARPTask quản lý các lớp ARP(Address Resolution Protocol). Như đã đề cập phía trên thì TCP/IP stack là một ngăn xếp hoạt đông liên tục có vài lớp TCP/IP thì hoạt động ở chế độ không đồng bộ. TCP/IP Stack cho vi điều khiển được thiết kế một cách động lập đối với một hệ thống và do đó có thể thực thi hệ thống một cách đa nhiệm. Kết quả là nó có thể sử dụng được một vài hệ thống và thường được sử dụng để điều khiển hệ thống đa nhiệm hoặc là không. Hình 4 : Biểu diễn sở đồ TCP/IP stack cho vi điều khiển Hardwired TCP/IP Giới thiệu về chip Ethernet W5100 Cung cấp bộ giao thức TCP/IP trong phần cứng: TCP, UDP, IPv4ARP, IGMP, PPPoE, Ethernet. 10BaseT/100BaseTX được tích hợp trong phần cứng. Tự động cung cấp MDI/MDIX. Kết nối ADSL(sử dụng giao thức PPPoE với PAP/CHAP ). 4 sockets độc lập đồng thời xảy ra cùng 1 lúc. 16Kbyte cho bộ nhớ trong dùng cho truyền nhận. Công nghệ CMOS 0.18um. Điện áp làm việc 3.3v-5v. Được đóng gói trong 80 chân vào ra. Chuẩn giao tiếp cho phép truyền dữ liệu đồng bộ(SPI mode 0,3). Có LED ở lối ra (truyền, nhận, tốc độ, xung đột, kết nối). Sơ đồ chân Hình 5: Sơ đồ cấu hình chân của W5100 Miêu tả một số thanh ghi MR (Mode Register) [R/W] [0x0000] [0x00]: Là thanh ghi dùng để S/W reset,kiểm tra mode bộ nhớ, mode ngắt kết nối, mode PPPoE và bus I/F. GWR (Gateway IP Address Register) [R/W] [0x0001 – 0x0004] [0x00]: Là thanh ghi để cài đặt địa chỉ Gateway. SUBR (Subnet Mask Register) [R/W] [0x0005 – 0x0008] [0x00]: Là thanh ghi để cài đặt địa chỉ Subnet Mask. SHAR (Source Hardware Address Register) [R/W] [0x0009 – 0x000E] [0x00]: Là thanh ghi để cài đặt địa chỉ Source Hardware . SIPR (Source IP Address Register) [R/W] [0x000F – 0x0012] [0x00]: Là thanh ghi để cài đặt địa chỉ IP. IR (Interrupt Register) [R] [0x0015] [0x00]: Là thanh ghi dùng để xử lý nhiều trường hợp còn gọi là ngắt. IMR (Interrupt Mask Register) [R/W] [0x0016] [0x00]: Thanh ghi mặt nạ ngắt. Miêu tả các chức năng a. Cài đặt thông tin ban đầu Để điều khiển được W5100 thì phải lựa chọn và sử dụng các thanh ghi thích hợp như sau: Thanh ghi cách thức (MR) Thanh ghi mặt nạ ngắt (IMR) Thanh ghi khởi tạo thời gian (RTR) Thanh ghi đếm(RCR) b. Cài đặt về thông tin mạng Thanh ghi dưới đây là cấu hình của một mạng cơ bản và tùy thuộc vào môi trường mạng. Thanh ghi địa chỉ Gateway (GAR) Thanh ghi địa chỉ phần cứng (SHAR) Thanh ghi Subnet Mask (SUBR) Thanh ghi địa chỉ IP (SIPR) Truyền thông dữ liệu Việc kết nối dữ liệu được thông qua TCP,UDP,IP-Raw và MAC-Raw.Đúng ra việc lựa chọn kết nối là một dải các giao thức của các khe cắm kết nối.(W5100 cung cấp cho 4 khe cắm ). a. TCP TCP là một phương pháp kết nối cơ bản trong đó nó cho phép thiết lập kết nối trong một yêu cầu nhất định và việc chuyển giao dữ liệu kết nối bằng địa chỉ IP và số cổng của hệ thống. Có 2 phương pháp để thiết lập kết nối: Server đợi đến khi có yêu cầu kết nối Client gửi yêu cầu kết nối tới Server Hình 6: Phương pháp kết nối TCP b. UDP UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giao thức TCP/IP. Dùng UDP, chương trình trên máy tính có thể gởi những dữ liệu ngắn được gọi là datagram tới máy khác. UDP không cung cấp sự tin cậy và thứ tự truyền nhận mà TCP làm, các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo. Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian. Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu. Những ứng dụng phổ biến sử dụng UDP như DNS (Domain Name System), ứng dụng streaming media, Voice over IP, Trivial File Transfer Protocol (TFTP) và game trực tuyến. Thông tin ứng dụng Việc truyền thông giữa vi điều khiển với chíp ethernet W5100 cung cấp hướng kết nối sau: Theo phương pháp trực tiếp, phương pháp gián tiếp và SPI phương pháp. Truyền thông dùng Ethernet PHY(MAC). a. Dùng các phương pháp kết nối trực tiếp Dùng 15bit địa chỉ và 8bit dữ liệu: /CS, /RD, /WR, /INT. b. Dùng các phương pháp kết nối gián tiếp Dùng 2bit địa chỉ và 8bit dữ liệu: /CS, /RD, /WR, /INT. c. Dùng phương pháp kết nối SPI (Serial Peripheral Interface) SPI chỉ dùng 4 chân để truyền dữ liệu: /SCLK, /SS, /MOSI, /MISO. Ở W5100, SPI_EN là chân dùng để điều khiển SPI. Một số ứng dụng W5100 Thiết bị mạng gia đình: Hộp nối, PVRs, chuyển đổi nguồn số. Bộ nối tiếp tới ethernet: Bộ điều khiển truy cập, LED hiện thị, Rơle AT không giây… Bộ song song tới ethernet: Máy in, máy photocopy. USB ethernet: Thiết bị lưu trữ, máy in mạng. GPIO ethernet: Các cảm biến mạng gia đình. Hệ thống bảo vệ: DVRs, camera giám sát thông qua mạng. Sản xuất và chế tạo tự động. Các thiết bị điều khiển ứng dụng trong y tế. Các hệ thống cố định. Chương 2: Vi Điều Khiển 2.1. Tìm hiểu về vi điều khiển AVR-Micro Atmega64L Hãng Atmel đã từ lâu nổi tiếng với chíp vi điều khiển họ 89Cxx phù hợp với các ứng dụng đơn giản. Chuyển sang họ AVR, Atmel đã thêm vào chip vi điều khiển này nhiều tính năng mà chíp họ 8051 không có như là ADC, PWM, BUS I2C, 2 Wire v.v..., để giúp cho người sử dụng có thêm nhiều tính năng để sử dụng. 2.1.1. Mô tả chung về AVR AVR là vi điều khiển được thiết kế cho rất nhiều ứng dụng. Từ các ứng dụng điều khiển, đo lường... Vi điều khiển AVR có thể coi như là một máy vi tính được tích hợp trên một chíp đơn. AVR là vi điều khiển 8 bit ( không thuộc họ vi điều khiển xử lý số DSP ) thiết kế hướng vào mục đích điều khiển. Được tích hợp các bộ nhớ EEPROM và bộ nhớ Flash (có thể lập trình được trong hệ thống- In system programmable). AVR có các trình dịch hộ trợ để lập trình từ mức thấp assembly (AVR Studio), đến ngôn ngữ bậc cao như là C ( ICC, AVR CodeVision ). AVR có thể thực hiện được hàng triệu lệnh đơn trong một giây. 2.1.2. Tính năng của Atmega64L Hiệu suât cao. Là dòng AVR 8 bit tiêu thụ điện năng thấp (Low power AVR). Sử dụng cấu trúc RISC 133 chỉ lệnh. Một lệnh trong 1 chu kỳ máy. 32x8 thanh ghi chung + thanh ghi điều khiển ngoại vi. Lên đến 16 triệu lệnh/s với tấn số 16 MHz. Bộ nhớ chương trình và bộ nhớ dữ liệu: 64K Byte bộ nhớ Flash lập trình lại trong hệ thống. Lựa chọn Boot code với các bit lock độc lập. Lập trình trong hệ thông bằng chương trình Boot. 4KB EEPROM và 4KB SRAM. ( có thể mở rộng 64K RAM ngoài). Lập trình trong hệ thống (ISP) qua giao diện SPI. Giao diện JTAG (chuẩn IEEE std. 1149.1) Hỗ trợ chức năng gỡ rối trên chíp. Lập trình thông qua JTAG. Các tính năng ngoại vi: Hai timer 8 bit và hai timer 16 bit. Đồng hồ thời gian thực với bộ chia tần số. Hai kênh PWM 8bit. 6 kênh PWM 2-16bit. Bộ so sánh tương tự. ADC 8 kênh 10 bit. 7 kênh ADC vi phân, 2 kênh ADC có bộ khếch đại 1x, 10x, 200x. Giao diện nối tiếp Two-wire. Hai UASRT. Giao diện nối tiếp Chủ/Tớ SPI. Timer watch dog. Các tính năng đặc biệt: Reset khi cấp nguồn. Bộ phát hiện xụt nguồn (Brown-out detection) khả trình. Bộ giao động RC tích hợp sẵn bên trong. Ngắt trong và ngắt ngoài. Sáu chế độ ngủ ( Sleep) để tiết kiệm năng lượng. Tần số làm việc có thể xác định bằng phần mềm. Điện áp làm việc: 2,7 – 5,5V cho Atmega64L 4,5 – 5,5V cho Atmega64 Tốc độ: 0 - 8 MHz cho Atmega64L 0 - 16 MHz cho Atmega64 2.1.3. Sơ đồ chân Sơ đồ cấu hình chân của Atmega64L Hình 7: Sơ đồ phần cứng Sơ đồ khối: Hình 8: Sơ đồ khối vi điều khiển AVR: Atmega64L 2.1.4. Các khối của Atmega64L Do các khối chức năng của Atmega64L rất nhiều lên em chỉ đề cập đến các khối chức năng sử dụng trong luận văn này. 2.1.4.1.Lõi CPU của Atmega64L Trong mục này sẽ mô tả tổng quát về cấu trúc lõi CPU của AVR. Chức năng chính của lõi CPU là đảm bảo cho chương trình hoạt động. CPU phải có khả năng truy cập vào bộ nhớ, thực hiện tính toán, điều khiển ngoại vi và quản lý ngắt. Sơ đồ khối của CPU: Hình 9: Sơ đồ khối CPU Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau. Hình trên minh họa sơ đồ khối CPU của AVR. Bus dữliệu dùng cho bộ nhớ dữ liệu là 1 bus 8 bit, cho phép nối hầu hết các bộ phận ngoại vi với tệp thanh ghi ( register file). Bus dữ liệu dùng cho bộ nhớ chương trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh. Khối số học logic ALU Khối số học (ALU) thực hiện các thao tác như thao tác bit, phép tính số học và lôgic trên nội dung của các thanh ghi và ghi ngược kết quả vào tệp thanh ghi trên thanh ghi đã được chỉ định. Các thao tác này được thực hiện trong một chu kỳ đồng hồ đơn lẻ. Mỗi một thao tác ALU đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái (STATUS), tùy thuộc vào lệnh. Thanh ghi trạng thái SREG Thanh ghi triạng thái có chứa 8bit cờ, đóng vai trò báo hiệu trạng thái hiện tại của bộ xử lý. Tất cả các bit đó dược xóa bởi chương trình. Các địa chỉ I/O của thanh ghi trang thái là $3F( địa chỉ bộ nhớ là $57). Thanh ghi trạng thái không được lưu trữ bằng máy (machine) trong thời gian diễn ra một thao tác ngắt. Lệnh trong một đoạn chương trình ngắt có thể xủa đổi bít cờ trạng thái, và vì thế chương trình của người dùng phải lưu trữ và khôi phục thanh ghi trạng thái trong thời gian có một ngắt. Tập thanh ghi đa năng Tất cả các bộ điều khiển AVRđều có 32 thanh ghi đa năng. Một số trong các thanh ghi này còn có các chức năng riêng, bổ sung. Các thanh ghi dược đặt tên từ R0 đến R31. Tệp thanh ghi được tách thành 2 phần, mỗi phần có 16 thanh ghi, đánh số từ R0 đến R15 và R16 đến R31. Tất cả truy nhập trong chu trình đơn đến tất cả các thanh ghi. Thanh ghi con trỏ ngăn xếp SP Thanh ghi này có độ rộng bằng 1 byte đối với các bộ xử lý có đến 256 byte bộ nhớ SRAM và bằng 2byte (được gọi là SPH và SPL) đối với các bộ xử lý có bộ nhớ . Thanh ghi này sử dụng để chỉ đến vùng trong bộ nhớ SRAM ở đỉnh của ngăn xếp. Ngăn xếp được sử dụng để lưu trữ địa chỉ mà bộ xử lý trả trở lại trong thời gian một ngắt và gọi thủ tục . Bởi vì SP được khởi tạo về $0000 khi rết, nên chương trình người dùng cần phải khởi tạo SP cho thích hợp, bởi vì địa chỉ bắt đầu của bộ nhắ SRAM không phải là $0000 mà là $60. Ngăn xếp sắp xếp theo thứ tự từ trên xuống dưới trong địa chỉ bộ nhớ, nghĩa là, việc đẩy một giá trị lên trên ngăn xếp sẽ làm cho SP giảm đi một giá trị. Khi kéo một giá trị khỏi ngăn xếp sẽ làm tăng SP thêm một giá trị. Việc thực thi lệnh Bộ xử lý AVR được điều khiển bởi đồng hồ hệ thống, đồng hồ này có thể ở bên ngoài hoặc, nếu có tồn tại và được phép, một đồng hồ RC bên trong có thể được sử dụng. Đồng hồ hệ thống này không qua bất kỳ bộ chia nào và được sử dụng trục tiếp cho tất cả các thao tác truy nhập bên trong bộ xử lý. Bộ xử lý có một đường ống (pipeline) 2 tầng, và lệnh tìm nạp giải mã được thực hiện đồng thời vời việc thực thi lệnh. Hình 10: Tìm nạp/ giải mã lệnh và việc thực thi lệnh. Cứ mỗi lần lệnh được tìm nạp, nếu đây là một lệnh liên quan đến ALU, nó có thể được thực thi bởi khối ALU như được minh họa tren hình 3-5 cho một chu trình đơn lẻ. Hình 11: Việc thực thi của ALU bao gồm tìm/nạp thực thi, và ghi ngược lại vào thanh ghi. Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như dược minh họa ở hình dưới. Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng một thanh ghi con trỏ dùng cho địa chỉ bộ nhớ SRAM. Thanh ghi con trỏ này chỉ là một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y hoặc Z) có trên chip. Chu trình đồng hồ thứ nhất được cần đến để truy nhập tệp thanh ghi và để thao tác trên thanh ghi con trỏ (các lệnh truy nhập bộ nhớ SRAM cho phếp tăng địa chỉ trước/ sau thao tác trên thanh ghi con trỏ). Ở thời điểm kết thúc của chu kỳ đồng hồ thứ nhất, khối ALU thực hiện phép tính này, và sau đó địa chỉ này được sử dụng để truy nhập ô nhớ SRAM và để ghi vào ô nhớ này ( hoặc đọc ra rừ đó vòa thanh ghi đích), như được minh họa hình dưới. Hình 12: Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip. 2.1.4.2. Bộ nhớ của Atmega64L Bộ nhớ của Atmega64L được chia làm 2 phần: bộ nhớ chương trình và bộ nhớ dữ liệu. Trong trường hợp đặc biệt bộ nhớ EEPROM được mô tả như là bộ nhớ dữ liệu. Atmega có 64k Byte bộ nhớ Flash lập trình lại được trong hệ thống (ISP- In system progammable) cho bộ nhớ chương trình. Bây giờ họ vi điều khiển AVR đề là chip 16 hoặc 32 bit thì Flash được tổ chức là 32k x 6. Để vi điều khiển hoạt động chương trình phải được nạp vào bộ nhớ Flash. Giới thiệu bộ nạp AVR-doper: Hình 13: Bộ nạp AVR-doper. Bộ nạp này có ưu điểm là sử dụng giao diện USB với PC, và hoạt động được với điện áp 3,3V. Atmega64L có bộ nhớ SRAM là 4k byte. 2.1.4.3 Nguồn xung hệ thống Atmega có thể dùng các nguồn xung clock: RC ngoài, thạch anh ngoài, nguồn xung ngoài hoặc bộ dao động RC tích hợp bên trong. Trong luận văn, vi điều khiển Atmega64L dùng bộ cộng hưởng thạch anh ngoài 7.3728 MHz . 2.1.4.4. Ngắt phần cứng của Atmega64L Atmega64L có tổng cộng 36 ngắt phần cứng : ngắt cho timer, ngắt USART, ngắt ADC, PWM v.v... Hình 14: bảng véc tơ ngắt của Atmega64L 2.1.4.5.Bộ đếm/định thời của Atmega64L: Atmega64L có 4 timer/counter gồm 2 timer 8bit (timer0 và timer2) và 2 timer 16bít (timer1 và timer2). Sơ đồ khối của timer1: Hình 15: Sơ đồ khối của timer/counter. Timer/counter1, 16 bit cho phép lập trình các thời gian điều khiển chính xác ( đếm các sự kiện), tạo xung, đo độ rộng thời gian của tín hiệu. Các tính năng: Là timer 16 bit cho phép tạo PWM 16bit. Ba lối ra so sánh độc lập. Một bộ capture đầu vào. Chế độ Auto Reload. Triệt nhiễu đầu vào Capture. Hiệu chỉnh pha PWM. Chu kỳ PWM thay đổi được. Bộ tạo tần số. Đếm sự kiện ngoài. 10 nguyên nhân gây ngắt timer độc lập(TOV1, OCF1A, OCF1B, OCF1C, ICF1, TOV3, OCF3A, OCF3B, OCF3C, and ICF3). 2.1.4.5.Bộ biến đổi tương tự sang số ADC Tính năng: Trả về kết quả ADC 10 bit. 0.75 đơn vị không tuyến tính. Độ chính xác tuyệt đối là ± 1.5 LSB. Thời gian biến đổi là từ 13- 260 μs. 8 lối vào đơn hợp kênh ADC. 7 lối vào vi phân ADC. 2 lối vào vi phân có bộ khếch đại đầu vào. Điều chỉnh lệch trái ở kết quả ADC. Điện áp vào ADC từ 0 – Vcc hoặc 2,7 – Vcc đối với ADC vi phân. Có khả năng lựa chọn 2,56V làm điện áp chuẩn cho ADC. ADC tự động bắt đầu biến đổi bời Auto Trigger của nguồn ngắt. Ngắt khi biến đổi hoàn thành. Có mode loại trừ nhiễu. Hình 16: Sơ đồ khối bộ biến đổi ADC. 2.1.4.6.Bộ truyền nhận nối tiếp USART Atmega64L có 2 khối USART: USART0 và USART1. Tính năng: Hoạt động song công ( Thanh ghi truyền và nhận độc lập ) Hoạt động ở chế độ đồng bộ hoặc không đồng bộ. Bộ tạo tốc độ Baud. Khung truyền 5,6,7,8 hoặc 9 bit dữ liệu và 1 hoặc 2 bit stop. Tạo và kiểm tra chẵn lẻ bằng phần cứng. Phát hiện tràn dữ liệu. Phát hiện lỗi khung truyền. Lọc nhiễu bao gồm phát hiện lỗi bit start và lọc số thông thấp. Ba ngắt : truyền hoàn tất, thanh ghi dữ liệu TX trống, nhận hoàn tất. Truyền thông đa vi xử lý. Gấp đôi tốc độ với mode truyền không đồng bộ. Hình 17: Sơ đồ khối USART. Mode thường được sử dụng là mode: truyền không đồng bộ, tốc độ baud 9600, 8 bit dữ liệu, 1 bit stop, không kiểm chẵn lẻ, không bắt tay. Trong luận văn này em sử dụng USART1 để hiện thị các thông số cần thiết để xuất ra màn hình. Chương 3: Thực Nghiệm Với cơ sở lý thuyết trên ta xây dựng một thiết bị ethernet kết hợp với vi điều khiển. Thiết bị này được xây dựng chủ yếu bởi hai phần chính là thiết kế phần cứng và xây dựng phần mềm. Do yêu cầu module ethernet WIZ810MJ này dùng nguồn là 3,3V. Toàn bộ mạch được thiết kế với các linh kiện low power bao gồm: LDO 3,3V (78M33), Atmega16L, WIZ810MJ. 3.1. Thiết kế phần cứng Phần cứng này bao gồm 1 module Ethernet WIZ810MJ được nối với vi điều khiển theo kết nối chuẩn SPI. Sơ đồ nguyên lý được chỉ bởi hình dưới. Thành phần chính bao gồm khối nguồn dùng LM7805 ổn áp từ 12V xuống 5V, LDO ổn áp từ 5V xuống 3.3V, vi điều khiển Atmega64L, Max232 để hiện thị các thông số cần thiết ra máy tính. Hình 18: Sơ đồ nguyên lý mạch chính. Hình 19: Sơ đồ nguyên lý Module ethernet WIZ810MJ. Thành phần của mạch bao gồm vi điều khiển W5100,Jac ethernet RJ45.Để kết nối SPI với vi điều khiển Atmega64L ta sử dụng các chân sau: /MISO, /MOSI, /SS, /SCLK +MISO: Master Out Slaver In +MOSI: Master In Slaver Out +SS: Slaver Select +SCLK: Serial Clock Hình 20: Mặt sau của mạch thiết kế. Hình 21: Mặt trước của mạch thiết kế. 3.2. Xây dựng phần mềm 3.2.1.Viết chương trình cho vi điều khiển Atmega64L. Ở đây ta phải viết chương trình cho Atmega 64L để đọc dữ liệu từ module ethernet bằng chuẩn kết nối SPI. Chương trình được viết và biên dịch bằng chương trình AVR Studio 4. Việc kết nối giữa module ethernet WIZ810MJ với các máy tính có nối mạng .Trong luận văn này sử dụng giao thức kết nối DHCP(Dynamic Host Configuration Protocol). Giá trị cần thiết được trả về qua USART1 về máy tính để debug các thông số như:Địa chỉ IP, tên miền (Host name), địa chỉ Mac. Hình 22: Quá trình viết chương trình cho vi điều khiển. Hình 23: Kết quả thu được từ địa chỉ của Model . Hình trên là kết quả thử nghiệm thành công DHCP mà em thu được có Tên miền là WIZnet, địa chỉ MAC là 00:08:DC:00:00:11 ,địa chỉ IP là 192.168.11.152. Kết quả này được kiểm tra từ địa chỉ của Model là 192.168.11.1 Hình 24: Kết quả Ping giữa module ethernet với máy tính PC. Trên đây là kết quả thử nghiệm ping thành công kết nối giữa 1 máy tính tới module ethernet WIZ810MJ có địa chỉ là 192.168.11.152. KẾT LUẬN Trong khoá luận tốt nghiệp này, em đã hiểu thực hiện được một số công việc chính như sau: Tìm hiều và ứng dụng vi điều khiển Atmega64L trong điều khiển và đo lường, phương pháp tích hợp và giao tiếp thông qua SPI. Nắm rõ được hoạt động, ứng dụng của chíp ethernet W5100 thông qua module WIZ810MJ. Tìm hiểu về cấu hình, hoạt động về TCP/IP. Đề xuất một số ứng dụng của thiết bị: Sử dụng thiết bị để cập nhật các thông tin mới, chính xác về thời tiết,chỉ số chứng khoán bằng ma tran led. Sử dụng thiết bị cho việc truyền các thông tin, dữ liệu từ các sensor y tế để cập nhật các thông tin của bệnh nhân. TÀI LIỆU THAM KHẢO [1] Alexander Popov & Peter Popov “Portable Network Service Monitor” [2] [3] [4] [5] [6] CHƯƠNG TRÌNH TRÊN VI ĐIỀU KHIỂN ATMEGA64L /***************************************************** Project : Signed Language Version : 1.0 Date : 20/03/2008 Author : Nguyen Thanh Hiep Org : Coltech Vnu Chip type : ATmega64L Program type : Application Clock frequency : 7,372800 MHz *****************************************************/ #include "w5100.h" #include "dhcp.h" #define DHCP_DEBUG #define HOST_NAME "WIZnet" /* Host Name */ u_char SRC_MAC_ADDR[6]; /* Local MAC address */ u_char GET_SN_MASK[4]; /* Subnet mask received from the DHCP server */ u_char GET_GW_IP[4]; /* Gateway ip address received from the DHCP server */ u_char GET_DNS_IP[4] = "\x00\x00\x00\x00"; /* DNS server ip address received from the DHCP server */ u_char GET_SIP[4] = {0,}; /* Local ip address received from the DHCP server */ static u_char DHCP_SIP[4] = {0,}; /*DNS server ip address is discovered */ static u_char DHCP_REAL_SIP[4] = {0,}; /* For extract my DHCP server in a few DHCP servers */ static u_char OLD_SIP[4]; /* Previous local ip address received from DHCP server */ static char dhcp_state; /**< DHCP client status */ static char retry_count; /**< retry count */ static u_char DHCP_timeout; /**< DHCP Timeout flag */ static un_l2cval lease_time; /**< Leased time */ static u_long dhcp_time, next_dhcp_time; /**< DHCP Timer tick count */ static u_long DHCP_XID; static SOCKET DHCPC_SOCK; /**< Socket for the DHCP client */ static RIP_MSG* pRIPMSG; /**< Pointer for the DHCP message */ void (*dhcp_ip_update)(void) = 0; /**< handler to be called when the IP address from DHCP server is updated */ void (*dhcp_ip_conflict)(void) = 0; /**< handler to be called when the IP address from DHCP server is conflict */ static void send_DHCP_DISCOVER(SOCKET s); /* Send the discovery message to the DHCP server */ static void send_DHCP_REQUEST(SOCKET s); /* Send the request message to the DHCP server */ static void send_DHCP_RELEASE_DECLINE(SOCKET s,char msgtype); /**< send the release message to the DHCP server */ static char parseDHCPMSG(SOCKET s, u_int length); /* Receive the message from DHCP server and parse it. */ static void reset_DHCP_time(void); /* Initialize DHCP Timer */ static void DHCP_timer_handler(void); /* DHCP Timer handler */ static char check_leasedIP(void); /* Check the leased IP address */ static void check_DHCP_Timeout(void); /* Check DHCP Timeout */ static void set_DHCP_network(void); /* Apply the leased IP address to LP-NetCAM II */ static void proc_ip_conflict(void); /* called when the leased IP address is conflict */ //------------------------------------------------------------------------------------------------------ static void reset_DHCP_time(void) { dhcp_time = 0; next_dhcp_time = dhcp_time + DHCP_WAIT_TIME; retry_count = 0; } //------------------------------------------------------------------------------------------------------static void send_DHCP_DISCOVER( SOCKET s /**< a socket number. */) { unsigned char ip[4]; unsigned int i=0; pRIPMSG = (RIP_MSG*)TX_BUF; *((unsigned long*)DHCP_SIP)=0; *((unsigned long*)DHCP_REAL_SIP)=0; memset((void*)pRIPMSG,0,sizeof(RIP_MSG)); pRIPMSG->op = DHCP_BOOTREQUEST; pRIPMSG->htype = DHCP_HTYPE10MB; pRIPMSG->hlen = DHCP_HLENETHERNET; pRIPMSG->hops = DHCP_HOPS; pRIPMSG->xid = htonl(DHCP_XID); pRIPMSG->secs = htons(DHCP_SECS); pRIPMSG->flags = htons(DHCP_FLAGSBROADCAST); pRIPMSG->chaddr[0] = SRC_MAC_ADDR[0]; pRIPMSG->chaddr[1] = SRC_MAC_ADDR[1]; pRIPMSG->chaddr[2] = SRC_MAC_ADDR[2]; pRIPMSG->chaddr[3] = SRC_MAC_ADDR[3]; pRIPMSG->chaddr[4] = SRC_MAC_ADDR[4]; pRIPMSG->chaddr[5] = SRC_MAC_ADDR[5]; /* MAGIC_COOKIE */ pRIPMSG->OPT[i++] = (char)((MAGIC_COOKIE >> 24)& 0xFF); pRIPMSG->OPT[i++] = (char)((MAGIC_COOKIE >> 16)& 0xFF); pRIPMSG->OPT[i++] = (char)((MAGIC_COOKIE >> 8)& 0xFF); pRIPMSG->OPT[i++] = (char)(MAGIC_COOKIE& 0xFF); /* Option Request Param. */ pRIPMSG->OPT[i++] = dhcpMessageType; pRIPMSG->OPT[i++] = 0x01; pRIPMSG->OPT[i++] = DHCP_DISCOVER; // Client identifier pRIPMSG->OPT[i++] = dhcpClientIdentifier; pRIPMSG->OPT[i++] = 0x07; pRIPMSG->OPT[i++] = 0x01; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[0]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[1]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[2]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[3]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[4]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[5]; // host name pRIPMSG->OPT[i++] = hostName; pRIPMSG->OPT[i++] = strlen(HOST_NAME)+3; // length of hostname + 3 strcpy(&(pRIPMSG->OPT[i]),HOST_NAME); i+=strlen(HOST_NAME); pRIPMSG->OPT[i++] = SRC_MAC_ADDR[3]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[4]; pRIPMSG->OPT[i++] = SRC_MAC_ADDR[5]; pRIPMSG->OPT[i++] = dhcpParamRequest; pRIPMSG->OPT[i++] = 0x06; pRIPMSG->OPT[i++] = subnetMask; pRIPMSG->OPT[i++] = routersOnSubnet; pRIPMSG->OPT[i++] = dns; pRIPMSG->OPT[i++] = domainName; pRIPMSG->OPT[i++] = dhcpT1value; pRIPMSG->OPT[i++] = dhcpT2value; pRIPMSG->OPT[i++] = endOption; /* send broadcasting packet */ ip[0] = 255; ip[1] = 255; ip[2] = 255; ip[3] = 255; if(0 == sendto(s, (u_char *)pRIPMSG, sizeof(RIP_MSG), ip, DHCP_SERVER_PORT)) { if ( dhcp_ip_conflict != 0 ) (*dhcp_ip_conflict)(); } } //-------------------------------------

Các file đính kèm theo tài liệu này:

  • docNghien cuu ung dung chip dieu khien ethernet W5100.doc