• 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 + Khối xử lý điều khiển : bao gồm vi điều
Trang 1CHƯƠNG DẪN NHẬP
1.1 ĐẶT VẤN ĐỀ:
Ngày nay, với sự phát triển của xã hội ngày càng cao đặc biệt là trong lĩnh vực công nghệ thông tin, cộng nghệ tự động, điều khiển giám sát các thiết bị từ xa ngày càng được phát triển sâu rộng và ngày càng đươc ứng dụng rộng rãi.Trước đây với những nghiên cứu tìm hiểu thì các nhà khoa học đã đưa ra những phát minh trong lĩnh vực điều khiển từ xa như : điều khiển qua sóng RF(remote), điều khiển
tự động bằng các cảm biến sensor (hệ thống đóng mở của tự động), điều khiển cảnh báo bằng điện thoại di động và điện thoại bàn, điều khiển bằng đường truyền cáp quang qua sóng vệ tinh….Tuy nhiên với các giải pháp nêu trên thì điều có các ưu nhược điểm riêng của từng giải pháp, cùng với nhu cầu không ngừng của con người luôn mong muốn có một giải pháp hoàn thiện về mọi mặt để phục vụ cho mục đích của mình, chính vì vậy mà nhóm chúng em chọn đề tài “điều khiển thiết bị qua
mạng Internet”
Các giải pháp đưa ra trước đây điều có các ưu, khuyết điểm riêng biệt như điều khiển qua sóng RF thì chỉ giới hạn trong cự ly gần và không có vật cản, điều khiển bằng các cảm biến thì cũng giới hạn ở cự ly gần đồng thời phải cài sẵn chế độ không thể thay đổi theo ý muốn Điều khiển cảnh báo qua điện thoại di động bị giới hạn bởi sóng điện thoại và tùy thuộc vào tốc độ truy cập của mạng điện thoại, truy cập qua sóng vệ tinh thì kinh phí lớn Trái lại với những khuyết điểm trên thì điều khiển thiết bị qua mạng internet đã khắc phục được những khuyết điểm trên là truy cập qua mạng internet tốc độ cao không bị giới hạn về khoảng cách có thể truy cập, giám sát và điều khiển thiết bị mọi lúc mọi nơi có mạng internet bằng máy tính hay điện thoại di động qua sóng GPRS, 3G Ít tốn kém chi phí có thể đăng ký tên miền tại các server miễn phí
Để giải quyết được vấn đề trên, trên thế giới có rất nhiều hãng cung cấp vi mạch hỗ trợ sẵn sàng cho các giao tiếp mạng theo giao thức TCP/IP, với các hãng lớn như: Realtek, Conexant, MicroChip, Tuy nhiên, nhóm em chọn sử dụng IC giao tiếp mạng ENC28J60 và vi điều khiển PIC18f4580 để giao tiếp mạng, vì chúng được sản xuất cùng hãng sản xuất là Microchip, nên chúng dễ dàng cho việc thực hiện giao tiếp giữa hai chip, ngoài ra còn được hỗ đầy đủ về tài liệu và các thư viện lập trình Vi mạch giao tiếp mạng để điều khiển bao gồm các khối cơ bản : khối giao tiếp mạng, khối xử lý điều khiển, khối thiết bị điều khiển thiết bị
+ Khối giao tiếp mạng : bao gồm cổng RJ45 giao tiếp mạng (modem), IC ENC28J60 Khối này có nhiệm vụ liên kết, xử lí với mạng thông qua cổng RJ45 với 4 đường nối bao gồm: TPOUT+ (TX+), TPOUT- (TX-), TPIN+ (RX+), TPIN- (RX-), ngoài ra còn 2 đường nối led báo trang thái liên kết mạng
Trang 2Nhiệm vụ thứ 2 là giao tiếp với MCU thông qua chuẩn SPI (Serial Peripheral Interface), gồm 3 đường dữ liệu chính: SI, SO, SCK
• 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)
+ Khối xử lý điều khiển : bao gồm vi điều khiển PIC18f4580, PIC18F4580 được xem là bộ xử lí dữ liệu của giao tiếp mạng nó có nhiệm vụ xử lí tất cả những yêu cầu từ mini Web gửi đến
+ Khối điều khiển thiết bị: Thực hiện nhận lệnh điều khiển từ PIC thực hiện đóng, ngắt Relay để tắt mở thiết bị điện
1.2 NỘI DUNG ĐỀ TÀI:
Với khoảng thời gian thực hiện đề tài 4 tuần, nhóm đã thảo luận và chọn nội dung của đề tài như sau:
- Tìm hiểu cấu trúc mạng Internet
- Tìn hiểu ngôn ngữ xây dựng Web bằng HTML, Javacript
- Thiết kế và thi công mạch Internet.
- Điều khiển thiết bị qua mạng internet
- Tìm hiểu cách giao tiếp mạng và truyền dữ liệu qua mạng internet
1.3 MỤC ĐÍCH ĐỀ TÀI:
Trong quá trình thiết kế và thực hiện đề tài này nhằm giúp người học:
- Tăng khả năng tự tìm hiểu, thiết kế, cũng như tự học
- Bước đầu tiếp xúc với thực tế
- Vận dụng những kiến thức đã có đồng thời tìm tòi những kiến thức mới để hiểu sâu sắc hơn trong lĩnh vực này
Để thiết kế được một hệ thống như đã nêu ở trên thì người thiết kế phải nắm vững kiến thức mạng, điện tử, tìm hiểu qua sách vở, tài liệu và dạng mạch thực tế
để thi công phần cứng
1.4 ĐỐI TƯỢNG TÌM HIỂU
- Tìm hiểu vi điều khiển PIC18f4580
- Tìm hiểu phương pháp lập trình C cho PIC bằng MikroC
- Tìm hiểu phương pháp nhúng trang web vào vi xử lý 18f4580
- Tìm hiểu IC giao tiếp Ethetnet ENC28J60
Trang 3CHƯƠNG II: CƠ SỞ LÝ THUYẾT 2.1 Vi điều khiển PIC18F4580
2.1.1 Sơ lược về vi điều khiển PIC 18F4580:
- 1 bộ định thời giám sát (WatchDog Timer)
- Một cổng truyền thông song song PSP
- Cổng truyền nối tiếp MSSP, Usart
- 20 nguồn ngắt
- Có chế độ tiết kiệm năng lượng
- Nạp chương trình bằng cổng nối tiếp ICSP
- 35 tập lệnh có độ dài 16 bits
- Tần số hoạt động tối đa 40MHz
Trang 4
2.1.2 Hình dạng và sơ đồ chân
Hình 2.1 PIC 18F4580
Trang 52.1.3 Sơ đồ khối của PIC18F4580
Hình 2.2: Sơ đồ khối PIC 18F4580
Trang 62.1.4 Một số điểm đặc biệt của CPU:
2.1.4.1 Dao động:
PIC18F4580 có khả năng sử dụng một trong 4 loại oscillator, đó là:
- LP: (low power crystal)
Lưu ý: Tụ có giá trị lớn sẽ tăng tính ổn định
của dao động nhưng cũng làm tăng thời gian
khởi động
Chế độ dao động RC được sử dụng như một
giải pháp tiết kiệm trong các ứng dụng không
PIC18F4580 có nhiều nguồn ngắt khác nhau Đây là một số ngắt tiêu biểu:
- Ngắt ngoài xảy ra trên chân INT
Trang 7mã hóa sẽ có dung lượng 1 word (14 bit) Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0008h với High priority Interrupt vector và 0018h với ngắt Low priority Interrupt vector Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình
Trang 9Hình 2.5: Cấu trúc bộ nhớ dữ liệu
** THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR:
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển các khối chức năng được tích hợp bên trong vi điều khiển Có thể phân thanh ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong (CPU)
và thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví
dụ như ADC, PWM …)
Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu
Trang 10Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số
về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrputon- change tại các chân của PORTB
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi
Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của
vi điều khiển
** THANH GHI MỤC ĐÍCH CHUNG GPR:
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSG (File Select Register) Đây là các thanh ghi dữ liệu thông thường, người sử
Trang 11dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình
PC sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng qui trình định trước
Bộ nhớ Stack trong vi điều khiển PIC họ 18F4580 có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá trị cất vào Stack lần thứ 2
Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết được khi nào stack tràn Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển bởi CPU
2.1.6 Các cổng xuất nhập của PIC18F4580
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 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
-Vi điều khiển PIC18F4580 có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE
2.1.6.1 PORT A:
PORTA (RPA) bao gồm 8 I/O pin Đây là các chân “hai chiều” (bidirectional pin), nghĩa là 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ỉ 85h) 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, đối với PORTC là TRISC, đối với PORTD là TRISD vàđối với PORTE là TRISE) Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)
Các thanh ghi SFR liên quan đến PORTA bao gồm:
- PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA
Trang 12- TRISA (địa chỉ 85h) : điều khiển xuất nhập
- CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh
- CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp
- ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
2.1.6.2 PORT B:
PORTB (RPB) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISB Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0 PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình
Các thanh ghi SFR liên quan đến PORTB bao gồm:
- PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB
- TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập
- OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ Timer0
2.1.6.3 PORT C:
PORTC (RPC) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISC Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART
Các thanh ghi điều khiển liên quan đến PORTC:
- PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
- TRISC (địa chỉ 87h) : điều khiển xuất nhập
2.1.6.4 PORT D:
PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)
Các thanh ghi liên quan đến PORTD bao gồm:
- Thanh ghi PORTD : chứa giá trị các pin trong PORTD
- Thanh ghi TRISD : điều khiển xuất nhập
2.1.6.5 PORT E:
PORTE (RPE) gồm 4 chân I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISE Các chân của PORTE có ngõ vào analog Bên cạnh đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP
Các thanh ghi liên quan đến PORTE bao gồm:
- PORTE : chứa giá trị các chân trong PORTE
- TRISE : điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP
- ADCON1 : thanh ghi điều khiển khối ADC
Trang 132.1.7 Giao Tiếp Nối Tiếp
USART (Universal Synchronous Asynchronous Receiver Transmitter) là một trong hai chuẩn giao tiếp nối tiếp.USART còn được gọi là giao diện giao tiếp nối tiếp SCI (Serial Communication Interface) Có thể sử dụng giao diện này cho các giao tiếp với các thiết bị ngoại vi, với các vi điều khiển khác hay với máy tính Các dạng của giao diện USART ngoại vi bao gồm:
Trong đó X là giá trị của thanh ghi RSBRG ( X là số nguyên và 0<X<255)
Các thanh ghi liên quan đến BRG bao gồm:
- TXSTA (địa chỉ 98h): chọn chế độ đòng bộ hay bất đồng bộ ( bit SYNC) và chọn mức tốc độ baud (bit BRGH)
- RCSTA (địa chỉ 18h): cho phép hoạt động cổng nối tiếp (bit SPEN)
- RSBRG (địa chỉ 99h): quyết định tốc độ baud
* USART bất đồng bộ: Ở chế độ truyền này USART 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, 8 hay 9 bit
dữ liệu (thông thường là 8 bit) và 1 bit Stop Bit LSB 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 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
Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART bất đồng bộ:
- Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép tất cả các ngắt
- Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF
- Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE
- Thanh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT)
- Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền
Trang 14- Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện
- Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud
* USART đồng bộ: Giao diện USART đồng bộ được kích hoạt bằng cách set bit
SYNC Cổng giao tiếp nối tiếp vẫn là hai chân RC7/RX/DT, RC6/TX/CK và được cho phép bằng cách set bit SPEN USART cho phép hai chế độ truyền nhận dữ liệu
là Master mode và Slave mode Master mode được kích hoạt bằng cách set bit CSRC (TXSTA<7>), Slave mode được kích hoạt bằng cách clear bit CSRC Điểm khác biệt duy nhất giữa hai chế độ này là Master mode sẽ lấy xung clock đồng bộ từ bộ tao xung baud BRG còn Slave mode lấy xung clock đồng bộ từ bên ngoài qua chân RC6/TX/CK Điều này cho phép Slave mode hoạt động ngay cả khi vi điều khiển đang ở chế độ sleep
Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART đồng
bộ Master mode:
- Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép tất cả các ngắt
- Thanh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF
- Thanh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE
- Thanh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT)
- Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền
- Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện
- Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud
2.2 ENC28J60
ENC28J60 là 1 chíp do Microchip cung cấp có 28 chân, phù hợp với giao thức chuẩn IEEE802.3
Hình 2.6: IC ENC28j60
Trang 152.2.1 Cấu trúc và chức năng:
Giao tiếp với các thiết bị ngoại vi theo chuẩn SPI với tốc độ lên tới
10Mbps
Giao thức chuẩn IEEE802.3
Bộ lọc đặc biệt tự động đánh giá, chấp nhận hoặc từ chối MagicPackit,
unicast, muliticast
Có bộ nhớ đệm SRam lên tới 8KB, có thể quản lý dữ liệu đáng tinh cậy và linh hoạt
2.2.2 Chức năng các chân của ENC28J60:
VDD, VDDOSC, VDDPLL, VDDRX, VDDTX : các chân này dùng để cấp nguồn nuôi cho IC, nối với +3,3V
GND, GND OSC, GND PLL, GND RX, GND TX : các chân này được nối Mass
RESET: chân Reset tích cực mức thấp để thiết lập lại chế độ cho chip
OSC1,OSC2: 2 chân nhận giao động bên ngoài, ENC28J60 hoạt động với thạch anh 25Mhz
CLKOUT: xung clock khoảng 6,25MHz cho ra bên ngoài của ENC
LedA, LedB: 2 chân báo trạng thái hoặt động mạng, LedA (Green LED)
báo trạng thái liên kết, LedB (Yellow LED) báo chỉ thị hoặt động mạng
Vcap: 2.5V ra cho chức năng ổn định bên trong, sử dụng thông thường với
tụ 10uF và giá trị nhỏ nhất có thể sử dụng 1uF để nối xuống ground
INT: chân ngõ ra cho chức năng ngắt
SO, SI, SCK CS: chân cho kết nối giao thức SPI
RESET: ngõ vào reset ENC tác động tích cực mức thấp
TPIN+, TPIN-, TPOUT+, TPOUT-: Ngõ vào, ra cho truyền tín hiệu mạng
trên cáp xoắn đôi
RBIAS: chân cho khối mạch PHY, phải nối xuống đất thông qua điện trở
2,32K
Trang 16Hình 2.7 Sơ đồ kết nối ngoại vi ENC28J60
2.2.3 Các khối cơ bản bên trong ENC28J60:
Hình 2.8:Các khối cơ bản bên trong ENC28J60
Trang 17Bao gồm 7 khối cơ bản sau:
1 Một giao diện SPI dùng để giao tiếp với vi điều khiển
2 Khối giám sát và điều khiển ENC28J60
3 Bộ nhớ đệm Sram cho viêc truyền và nhận gói tin
4 Khối giám sát việc truy cập vào bộ nhớ đệm
5 Khối Bus dữ liệu giải mã lệnh thông qua SPI
6 Module Mac theo chuẩn IEEE802.3
7 Module PHY mã hóa và giải mã tín hiệu điện
2.2.4 Sơ đồ kết nối với các thiết bị ngoại vi:
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), đây là chuẩn giao tiếp rất phổ biến, được 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, đó là:
Hình 2.9 Sơ đồ ghép nối ENC28J60 với vi xử lý
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)
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 2.10 Quá trình đọc thanh ghi điều khiển Ethernet
Trang 18Hình 2.11 Quá trình đọc thanh ghi điều khiển MAC
Hình 2.12 Quá trình ghi vào thanh ghi lệnh
Hình 2.13 Quá trình ghi vào bộ đệm lệnh
Trang 19Hình 2.14 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
Trang 202.2.5 Các thông số kĩ thuật
Hình 2.15 Sơ đồ vi mạch giao tiếp ethernet ENC28J60
Giới thiệu chung
Tương thích chuẩn IEEE 802.3 Ethernet Controller
Tích hợp địa chỉ MAC và 10BASE-T PHY
Bộ đệm SRAM 8 Kbyte Transmit/Receive Packet Dual Port
Buffer
Chế độ tự động gửi lại khi có xung đột
Chế độ tự động hủy bỏ các gói tin sai
Bộ đệm:
Kích thước bộ đệm transmit/receive có thể lập trình được
Giám sát quá trình nhận FIFO
PHY:
Bộ lọc tín hiệu ra
Có chế độ loopback
Mac(Media access Control):
Hỗ trợ Unicast, Multicast và Broadcast
Hỗ trợ nhiều dảng gói tin Magic Packet®, Unicast,
Multicast ,Broadcast
Trang 212.3 Cổng mạng RJ45
Hình 2.16: Cổng RJ45
Cổng RJ45 là thành phần quan trọng trong kết nối internet, nó đóng vai trò là cổng giao tiếp của thiết bị mạng này sang thiết bị mạng khác Trong kết nối mạng gồm có 2 kiểu kết nối cho chuẩn RJ45 đó là cáp chéo và cáp thẳng, cáp chéo dùng
để nối các thiết bị cùng nhóm, cáp thẳng để nối thiết bị khác nhóm
Chẩn RJ45 gồm 8 dây được xoắn làm 4 cặp, gồm có 4 dây dữ liệu là TX+, TX-,
RX+, RX- , ngoài ra 4 dây còn lại có tác dụng đệm chống nhiễu khi truyền khoảng cách lớn Theo cổng thông thường thì chân theo thứ tự là 1,2,3,6
Cổng RJ45 thực tế được sản xuất có 2 chuẩn chính là có biến áp và không có biến
áp, nếu là loại thông thường thì chân kết nối đúng thứ tự còn với loại có biến áp bên trong thì các chân vào ra có thể khác nhau không theo thứ tự do cấu trúc của biến áp Trong cấu tạo có thể có led hoặc không có led Với cấu trúc biến áp như sau:
Hình 2.17 Sơ đồ cổng RJ45
Trang 222.4 IC cảm biến nhiệt độ độ LM35
Hình 2.18: IC đo nhiêt độ LM35
LM35 có đầu vào là nhiệt độ môi trường và đầu ra là giá trị điện áp với các chân chức năng như sau:
Chân 1 nối nguồn 4V đến 20V
Chân 2 là đầu ra điện áp cho chuyển đổi ADC
Chân 3 nối ground cho IC
LM35 là sensor đo theo nhiệt độ C, đầu ra thay đổi 10mV/ 0C, đo nhiệt độ trong phạm vi từ -55 0C đến 150 0C
2.5 Giới thiệu thư viện ethernet của Mikro_C
2.5.1 Giới thiệu:
Thư viện được thiết kế để đơn giản hóa việc xử lí phần cứng cơ bản (RTL8019AS) Tuy nhiên người dùng cần có một mức độ hiểu biết nhất định về Ethernet và các giao thức cơ sở của Ethernet (ARP, IP, TCP/IP, UDP/IP, ICMP/IP) Ethernet là 1 giao thức tốc độ cao và linh hoạt, nhưng nó không hề đơn giản khi bạn
đã quen với nó thì bạn sẽ thích thú với các ứng dụng mà nó đem lại, bạn có thể làm được nhiều hơn những thứ bạn có thể với các chuẩn RS232/485 hoặc CAN
Trang 23Kiểu giao thức void Eth_Init(char * addrP, char * dataP, char * ctrlP,
char pinRetset, char pinIOW, char pinIOR);
Mô tả Thực hiện việc khởi tạo card Ethernet và thư viện
Yêu cầu Ghi chú cho toàn bộ thư viện
Ví dụ Eth_Init (&PORTB, &PORTD, PORTE, 2,1,0);
Eth_Set_Ip_Address:
Kiểu giao thức void Eth_Set_Ip_Address(char ip1, char ip2, char ip3, char ip4);
Mô tả Thiết lập địa chỉ ip của card mạng Ethernet đã được kết nối và
khởi tạo
Yêu cầu Chức năng này cần được gọi ngay sau khi khởi tạo NIC (xem
Eth_Init) Bạn có thể thay đổi địa chỉ IP bất cứ lúc nào, bất cứ ở đâu trong code
Ví dụ // set IP address 192.168.20.25
Eth_Set_Ip_Address(192u, 168u, 20u, 25u);
Eth_Set_Inport:
Kiểu giao thức unsigned short Eth_Inport(unsigned short address);
Trả về 1 byte từ địa chỉ đã được chỉ rõ
Mô tả Nhận về 1 byte từ địa chỉ đã chỉ rõ của chip card Ethernet
Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init
Ví dụ Udp_length |=Eth_Inport(NIC_DATA);
Eth_Scan_For_Event
Kiểu giao thức unsigned Eth_Scan_For_Event(unsigned short * next_ptr);
Trả về Kiểu gói Ethernet đã nhận có 2 kiểu phân biệt là: ARP và IP
Mô tả Nhận về địa chỉ MAC của người gởi và kiểu gói tin Ethernet đã
Trang 24nhận argument chức năng là con trỏ bên trong chỉ tới gói dữ liệu tiếp theo trong vùng đệm của RTL8019
Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Chức năng
phải được gọi trong 1 chuỗi chính xác, VD như ở ngay sau card init và IP address/UDP port init
Ví dụ Eth_Init (&PORTB, &PORTD, PORTE, 2,1,0);
Eth_Set_Ip_Address(192u, 168u, 20u, 25u);
Eth_Set_Udp-Port(10001);
do { // Main block of every Ethernet example
event_type = Eth_Scan_For_Evetn(&next_ptr);
if (event_type) { switch (event_type) { case ARP: Arp_Event(); break; case IP: Ip_Event();}
Kiểu giao thức unsigned short Eth_Get_Tp_Hdr_Len(void);
Trả về Chiều dài tiêu đề gói tin IP đã nhận
Mô tả Trả về chiều dài tiêu đề gói tin IP đã nhận trước khi dữ liệu khác
đặt trên giao thức IP (TCP,UDP.ICMP) có thể được phân tích, dữ liệu giao thức con phải được tải chính xác từ gói tin IP đã nhận Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Chức năng
phải được gọi trong 1 chuỗi chính xác, vd ngay sau khi xác định rằng gói tin đã nhận là gói tin IP
Ví dụ // Receive IP Header
Opt_len= Eth_Get_Ip_Hdr_Len() -20;
Eth_Load_Ip_Packet:
Kiểu giao thức void Eth_Load_Ip_Packet (void);
Mô tả Tải dữ liệu của gói tin IP khác nhau vào các biến Ethernet của PIC Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Một chuỗi
Trang 25Ví dụ Eth_Load_Ip_Packet();
Eth_Get_Hdr_Chksum
Kiểu giao thức void Eth_Get_Hdr_Chksum(void);
Mô tả Tải và trả về giá trị kiểm tra tổng của tiêu đề của gói IP đã nhận
Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Một chuỗi
chính xác các việc gọi phải được tuân theo( xem Ip_Event)
Ví dụ Eth_Get_Hdr_Chksum();
Eth_Get_Source_Ip_Address
Kiểu giao thức void Eth_Get_Source_Ip_Address(void);
Mô tả Tải và trả về giá trị kiểm tra tổng của tiêu đề của gói IP đã nhận
Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Một chuỗi
chính xác các việc gọi phải được tuân theo( xem Ip_Event)
Ví dụ Eth_Get_Source_Ip_Address();
Eth_Dest_Ip_Address:
Kiểu giao thức Void Eth_Dest_Ip_Address(void);
Mô tả Tải địa chỉ IP của gói IP đã nhận cho gói mà đã được chỉ định Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init Một chuỗi
chính xác các việc gọi phải được tuân theo( xem Ip_Event)
Ví dụ Eth_Dest_Ip_Address();
Eth_Arp_Response:
Kiểu giao thức void Eth_Arp_Response(void);
Mô tả Một sự đáp ứng ARP tự động người dùng nên gọi chức năng này
mỗi khi phát hiện sự kiện ARP trên NIC Yêu cầu Chỉ rõ cho toàn bộ thư viện
Ví dụ Eth_Arp_Response();
Trang 26Eth_Get_Icmp_Info:
Kiểu giao thức void Eth_Get_Icmp_Info(void);
Mô tả Tải thông tin giao thức ICMP( từ tiêu đề của gói ICMP đã nhận)
và lưu trữ nó trong biến Ethernet của PIC Yêu cầu Card (NIC) phải được khởi tạo đúng Xem Eth_Init, chức năng
này phải được gọi trong một chuỗi chính xác và trước lệnh Eth_Ping_response
Ví dụ Eth_Get_Icmp_Info();
Eth_Ping_Response:
Kiểu giao thức void Eth_Ping_Response(void);
Mô tả Một sự đáp ứng (ping) ICMP tự động người dùng nên gọi chức
năng này khi trả lời đến 1 sự kiện ICMP/IP Yêu cầu Chỉ rõ cho toàn bộ thư viện
Ví dụ Eth_Ping_Response();
Eth_Get_Udp_Source_Port:
Kiểu giao thức unsigned Eth_Get_Udp_Source_Port(void);
Trả về Trả về port nguồn của gói UDP đã nhận
Mô tả Chức năng trả về port nguồn của gói UDP đã nhận sau khi mối
liên hệ của gói tin IP tồn tại được phát hiện và kiểu của nó được xác định là UDP, tiêu đề gói UDP phải được phân giải Port nguồn UDP là dữ liệu đầu tiên trong tiêu đề UDP
Yêu cầu Chức năng này phải được gọi trong 1 chuỗi chính xác ngay sau sự
phân giải tiêu đề gói IP
Ví dụ Udp_source_port = Eth_Get_Udp_Source_Port();
Eth_Get_Udp_Dest_Port:
Kiểu giao thức Unsigned Eth_Get_Udp_Dest_Port(void);
Trả về Trả về port đến của gói UDP đã nhận
Mô tả Chức năng trả về port đến của gói UDP đã nhận thông tin thứ 2
chứa trong tiêu đề gói UDP là port điểm đến mà khi đến port đó thì gói tin được chỉ đến
Yêu cầu Chức năng này phải được gọi trong 1 chuỗi chính xác ngay sau khi
gọi chức năng Eth_Get_Udp_Source_Port
Trang 27Ví dụ Udp_dest_port = Eth_Get_Udp_Dest_Port();
Eth_Get_Udp_Port
Kiểu giao thức unsigned short Eth_Get_Udp_Port(void);
Trả về Trả về số thứ tự của port UDP mà được set for card Ethernet của
PIC
Mô tả Chức năng trả về số thứ tự của port UDP mà được set for card
Ethernet của PIC Sau khi port UDP được set ở thời điểm đầu của session( Eth_Set_Udp_Port), số thứ tự của nó được dùng sau để kiểm tra có gói tin UDP đã nhận được chỉ đến ở port mà chúng ta đang sử dụng không
Kiểu giao thức void Eth_Set_Udp_Port (unsigned udp_port);
Mô tả Thiết lập port UDP mặc định mà sẽ xử lí yêu cầu của người dùng
Người dùng có thể quyết định trước khi nhận gói UDP port mà gói tin được gởi đến và nó có được xử lí hay là từ chối
Yêu cầu Chỉ rõ cho toàn bộ thư viện
Ví dụ Eth_Set_Udp_Port(10001);
Eth_Send_Udp:
Kiểu giao thức void Eth_Send_Udp(char * msg);
Mô tả Gửi bản tin UDP đã được chuẩn bị, lên tới 16 bytes
Không giống ICMP và TCP, gói tin UDP không được tạo ra thông thường như một đáp ứng đến yêu cầu của khách hàng UDP không đảm bảo việc chuyển giao bản tin tới đích Điều này nói lên tại sao các gói tin UDP được gửi 1 cách đơn giản
Yêu cầu Chỉ rõ cho toàn thư viện cũng vậy, gói tin mà được gởi đi phải
Trang 28được định dạng như 1 chuỗi không giới hạn chiều dài bản tin không quá 16 kí tự
Ví dụ Eth_Send_Udp(udp_tx_message);
Eth_Load_Tcp_Header
Kiểu giao thức void Eth_Load_Tcp_Header(void);
Mô tả Tải dữ liệu của tiêu đề TCP khác nhau vào trong biến Ethernet của
PIC
Yêu cầu Chức năng này phải được gọi trong 1 chuỗi chính xác, ngay sau
khi nhận lại port nguồn và đích của bản tin TCP
Ví dụ // retrieve ‘source port’
Tcp_source_port = Eth_Inport (NIC_DATA) << 8;
Tcp_source_port |= Eth_Inport (NIC_DATA);
// retrieve ‘destination port’
Tcp_dest_port = Eth_Inport (NIC_DATA) << 8;
Tcp_dest_port |= Eth_Inport (NIC_DATA);
// we only respond to port 80 (HTML request)
Kiểu giao thức unsigned short Eth_Get_Tcp_Hdr_Offset(void);
Trả về Trả về chiều dài tiêu đề gói TCP dưới dạng bytes
Mô tả Chức năng trả về chiều dài tiêu đề gói TCP dưới dạng bytes
Trước khi nhận 1 gói TCP tồn tại, tiêu đề của nó được phân tích để đáp ứng chính xác Cần phải biết được chiều dài tiêu đề để cho phép trích ra thông tin chứa trong nó
Yêu cầu Chức năng này phải được gọi sau Eth_Load_Tcp_Header, kể từ
khi nó khởi tạo biến riêng được dùng cho chức năng này
Ví dụ // calculate offset (TCP header length)
Tcp_options = Eth_Get_Tcp_Hdr_Offset() – 20;
Eth_Get_Tcp_Flags:
Kiểu giao thức unsigned short Eth_Get_Tcp_Flags(void);
Trả về Trả về dữ liệu cờ từ tiêu đề của gói TCP đã nhận
Mô tả Chức năng trã về dữ liệu cờ từ tiêu đề của gói TCP đã nhận cờ
Trang 29liên lạc HTML được thiết lập trước những cờ đó Yêu cầu Chức năng này được gọi sau Eth_Load_Tcp_Header, kề từ khi nó
khởi tạo biến riêng được dùng cho chức năng này
Ví dụ Flags = Eth_Get_Tcp_Flags();
Eth_Set_Tcp_Date:
Kiểu giao thức void Eth_Set_Tcp_Date (const unsigned short *date);
Mô tả Chuẩn bị dữ liệu được gởi đến trên yêu cầu của HTMP, thư viện
này chỉ có thể xử lí yêu cầu của HTTP, vì vậy việc gởi các giao thức cơ sở TCP khác như là FTP sẽ gây ra lỗi lưu ý rằng TCP/IP không được thiết kế với 8-bit trong trí nhớ của MCU, nên hợp với yêu cầu HTTP của bạn
Yêu cầu Chỉ rõ cho toàn thư viện
Ví dụ //Let’s prepare a simple HTML page in our string:
Const char httpPage1[] =
//
Eth_Tcp_Response:
Kiểu giao thức void Eth_Tcp_Response(void);
Mô tả Thực hiện đáp ứng của người dùng tới sự kiện TCP/IP Người
dùng chỉ rõ dữ liệu được gửi đi, phụ thuộc vào yêu cầu đã nhận(HTTP, HTTPD, FTP, etc) điều này được thực hiện bởi chức năng Eth_Set_Tcp_Data
Yêu cầu Các yêu cầu của phần cứng là chỉ rõ cho toàn thư viện ưu tiên để
sữ dụng chức năng này, người dùng phải chuẩn bị dữ liệu được gửi đến qua TCP, xem Eth_Set_Tcp_Data
Ví dụ Eth_Tcp_Response();