Anh Nguyễn

nvtienanh.info

Sử dụng TCP/IP trên PIC18F4550 điều khiển thiết bị qua mạng

2015-02-02 Anh Nguyễnnotes

Giới thiệu

Internet Of Things (IOT) là một xu hướng phát triển mạnh mẽ trong tương lai khi mà hầu như tất cả mọi thiết bị đều được kết nối với nhau và người sử dụng có thể giám sát và điều khiển các thiết bị đó thông qua mạng internet. Hôm nay mình sẽ giới thiệu một ứng dụng rất đơn giản về điều khiển thiết bị bằng giao thức TCP/IP cho vi điều khiển PIC18F4550. Hiện nay thì hãng Microchip hỗ trợ TCP/IP Stack cho các dòng PIC18, PIC24, dsPIC & PIC32 các bạn có thể vào địa chỉ http://www.microchip.com/tcpip để xem thêm.

Các thiết bị phần cứng cần thiết

  • Moduel: ENC28J60 - Vi điều khiển PIC18F4550 - Cáp mạng LAN - Cáp RS232-USB Module: ENC28J60

Các phần mềm

Hoạt động

  • Chương trình sẽ biến vi điều khiển thành một webserver thu nhỏ, mang một địa chỉ IP, thông qua giao thức TCP/IP, người sử dung có thể truy cập và điều khiển các chân I/O thông qua mạng. - Bởi vì dung lượng của PIC18F4550 là rất nhỏ so với nên ứng dung cũng chỉ dung lại ở mức đóng ngắt đơn giản

Code chương trình

#include "main.h"
#include "var.h"
#include "lcd16x2/lcd_16x2.c"
#include "TCPIP/enc28j60/enc28j60.c"
#include "TCPIP/ethernet/ethernet.c"
#include "TCPIP/ip/ip.c"
#include "TCPIP/arp/arp.c"
#include "TCPIP/icmp/icmp.c"
#include "TCPIP/tcp/tcp.c"
#include "TCPIP/http/http.c"
void main()
{
   unsigned int16 len;
   char addr[6];
   DDRA=0x00;
   DDRB=0x00;
   DDRB2=DDRIN;
   DDRC=0x80;
   DDRD=0x00;
   DDRE=0x00;
//!   printf("%c%c",0xa3,0x1);//CLEAR
//!   delay_ms(10);
//!   printf("%c%c%c",0xa1,0,0);   
//!   printf("%cDemo ethernet%c",0xa2,0);
//!   printf("%c%c%c",0xa1,0,1);   
//!   printf("%cTIEN ANH%c",0xa2,0);
   delay_ms(1000);
   LCD_Init();
   //delay_ms(300);

   LED1=0;
   LED2=0;
   LED3=0;
   delay_ms(10);
   ENC28J60_RST=0;
   delay_ms(100);
   ENC28J60_RST=1;
   delay_ms(100);
   ETH_Init(MyMacAddr);                 
   ENC28J60_PhyWrite(PHLCON,0x0476);   
   ENC28J60_ClkOut(2);
   //delay_ms(1000);
   ETH_GetMac(addr);
   printf("MAC: %2x:%2x:%2x:%2x:%2x:%2x\r\n",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);  
   //HTTP_SendData(Eth_Frame);
   while(TRUE)
   {
      len = ETH_GetFrame(BUFFER_SIZE, Eth_Frame);      
         if(len!=0)
         {
               
               printf("Co Goi EThetnet Moi\r\n");
               ETH_ProcessDataIn(len,Eth_Frame);
         }
         
   }
}

Kết quả

Đây là giao diện web nhúng trên PIC Demo kêt qua