Thông báo

Collapse
No announcement yet.

PIC và Internet application

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Kít của tớ cũng bắt chước của Olimex thui (xem attachment). Còn nếu dùng PIC giao tiếp với ENC mà không cần con 74HCT thì dùng PIC 18LF nó cũng chạy 3.3V giống ENC. Xem chi tiết tại đây.
    Attached Files
    Last edited by bxngoc; 05-08-2007, 18:24.
    “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

    Comment


    • #17
      @hackervnbk: cái RJ45 đó có biến áp ở trong, những loại tôi có đều có chiều dài của cái Jack là 2.5cm, có 2 LED, nếu cái RJ của bạn có chiều dài như vậy thì chắc chắn nó có biến áp.

      Còn chân SDO của ENC28J60 dùng điện áp 3v3 nối vào SDI của PIC là chân ST, về nguyên tắc thì mức 1 của ST là 0.8Vdd, nhưng trong thực tế thử với cả PIC và dsPIC đều nhận tốt mức 1 không cần qua đệm, tớ đã thử với SPI tốc độ 5Mhz, nhưng vẫn nên thêm đệm cho chắc chắn.

      Cái SCH anh Ngọc đính kèm nó dùng PIC 5V và con HCT125, PIC8LF có thể chạy ở điện áp 3v3 nhưng với điện áp đó chỉ có thể chạy được ở tốc độ 20Mhz, muốn tìm PIC 18 chạy 3v3 thì đó là những con PIC18FJ.

      Comment


      • #18
        Thế có pac nào làm chạy chưa. Mình định dùng pic18f86j60. nhờ các pac tư vấn dùm.
        Tui định dùng cả card mạng máy tính, nối chân TX+, TX-, RX+,RX- của con RTL8139 sang chân tương ứng của con PIC các pac thấy có ổn không.
        Tui cám ơn nhiều

        Comment


        • #19
          Thằng e của bác LinhNc đây,hic thời gian vừa rồi bận quá cũng chưa làm được nhiều với đề tài này,đã thế hôm nọ mua cái RJ45 của bác Newday bị ăn 1 vố to quá.Gì mà cái RJ45 "xịn" (tức là phải tích hợp biến áp bên trong) cảu bác Newday lại là cái loại có tích hợp thêm có mỗi 2 cái Led thôi ah (tìm mãi chẳng thấy biến áp đâu )
          Thế có ai muốn dùng RJ45 xịn không, giá cũng hơi xịn nhưng RJ45 thì chắc chắn vì phamthaihoa đã test rồi.
          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

          Biến tần
          Máy giặt
          Lò vi sóng
          Bếp từ.
          Tủ lạnh.
          Điều hòa

          Comment


          • #20
            Tớ vừa down Microchip TCP/IP stack v4.02 và dùng 18f87j60 nhưng không dịch được, có lẽ do MCC18 của tớ cũ hơn so với yêu cầu (MCC18 V3.12). Bác nào có ***** của bản này share cho tớ với. Cám ơn nhiều
            Last edited by tui; 09-08-2007, 01:34.

            Comment


            • #21
              Nguyên văn bởi phamthaihoa Xem bài viết
              @hackervnbk: cái RJ45 đó có biến áp ở trong, những loại tôi có đều có chiều dài của cái Jack là 2.5cm, có 2 LED, nếu cái RJ của bạn có chiều dài như vậy thì chắc chắn nó có biến áp.

              Còn chân SDO của ENC28J60 dùng điện áp 3v3 nối vào SDI của PIC là chân ST, về nguyên tắc thì mức 1 của ST là 0.8Vdd, nhưng trong thực tế thử với cả PIC và dsPIC đều nhận tốt mức 1 không cần qua đệm, tớ đã thử với SPI tốc độ 5Mhz, nhưng vẫn nên thêm đệm cho chắc chắn.

              Cái SCH anh Ngọc đính kèm nó dùng PIC 5V và con HCT125, PIC8LF có thể chạy ở điện áp 3v3 nhưng với điện áp đó chỉ có thể chạy được ở tốc độ 20Mhz, muốn tìm PIC 18 chạy 3v3 thì đó là những con PIC18FJ.


              Bác có biết cách nào nhận biết RJ45 có sẵn biến áp ko , đo thử các pin của nó ? Bác đo thử rồi cho mình biết đc ko , mới tháo đc 1 RJ cái từ cái router wifi bị hỏng .

              @ Minh Ha : cho em cái giá xịn của RJ45 đi anh .

              Comment


              • #22
                Cái xịn bác Minhha giá bai nhiu vậy ! Anh cho giá được không ?
                Mạch nạp Little Programmer
                MSC-51,AVR,EEPROM ... etc

                Site Fukusei shop :

                Comment


                • #23
                  Đã có bác nào làm xong board chưa? Thử nghiệm đầu tiên của em cho thấy mặc dù PIC chạy ở 40Mhz (XTAL 10Mhz, OSC=HSPLL) nếu thêm các lệnh đọc I/O (đọc nhiệt độ/độ ẩm từ sensor) vào chừng vài lần thì PIC và webserver ngủm củ tỏi. Có cách nào viết cho thao tác I/O tách riêng với phần giao tiếp TCP/IP? Dưới đây là vòng lặp chính của chương trình
                  Code:
                      // Once all items are initialized, go into infinite loop and let
                      // stack items execute their tasks.
                      // If application needs to perform its own task, it should be
                      // done at the end of while loop.
                      // Note that this is a "co-operative mult-tasking" mechanism
                      // where every task performs its tasks (whether all in one shot
                      // or part of it) and returns so that other tasks can do their
                      // job.
                      // If a task needs very long time to do its job, it must be broken
                      // down into smaller pieces so that other tasks can have CPU time.
                      while(1)
                      {
                          // This task performs normal stack task including checking
                          // for incoming packet, type of packet and calling
                          // appropriate stack entity to process it.
                          StackTask();
                  
                  
                          // This is a TCP application.  It listens to TCP port 80
                          // with one or more sockets and responds to remote requests.
                          HTTPServer();
                  
                          // Add your application specific tasks here.
                          ProcessIO(); // Giao tiếp với sensor trong hàm này. Đọc nhiệt độ/độ ẩm vào các biến
                                           // toàn cục để có thể view được từ web
                      }
                  “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

                  Comment


                  • #24
                    Khởi động computer từ Internet (Wake Up Over Internet)

                    Chúng ta cùng cài đặt chức năng khởi động máy tính từ Internet (tạm đặt là Wake Up Over Internet).Máy tính đã có sẵn chức năng Wake on LAN tức là khởi động máy tính từ mạng LAN. Để sử dụng chức năng này ta vào CMOS setup và enable chức năng này lên. Và tất nhiên là máy tính đã cắm nguồn sẵn sàng và được nối network cable vào hub/switch của LAN hoặc ADSL modem.
                    Để kích hoạt máy tính khởi động thì từ mạng LAN, một máy tính bất kỳ (hoặc kit ethernet của chúng ta) phải gởi một UDP package 1024 bytes đến địa chỉ broadcast là 255.255.255.255 (0xFF.0xFF.0xFF.0xFF) với nội dung như sau:
                    - 6 bytes đầu tiên là 0xFF (0xFF,0xFF,0xFF,0xFF,0xFF,0xFF)
                    - Địa chỉ MAC của máy tính cần khởi động lặp 16 lần.
                    Để có được địa chỉ MAC ta gõ lệnh ipconfig /all trong console của Windows. Dòng Physical Address chính là địa chỉ MAC (00-11-0A-40-F7-92)
                    Các bạn có thể tải chương trình demo Wake On Lan viết bằng C#bằng VB để xem cách hoạt động của nó.
                    Bây giờ quay lại bài toán của chúng ta. Ethernet kit sẽ hoạt động như một webserver, khi bạn từ ngoài Internet truy cập vào trang web sẽ có một button khi bấm vào PIC sẽ gởi một broadcast UDP package chứa địa chỉ MAC của máy tính cần khởi động.
                    Hàm WakeUpOnLAN được viết cho PIC bằng C18 dựa theo ví dụ UDPPerformanceTest trong TCP/IP stack v4.02 như sau
                    Code:
                    #define WAKE_UP_PORT        0x2fff // port=12287 let's use this one 
                    rom BYTE buffer[1024]; //buffer to be send; 6 bytes 0xFF; 16 times of MAC 6 bytes  (6+16*6), remaining bytes is zero
                    
                    int parseHex(char* hex)
                    {
                    	int res;
                    	int val;
                    	char* ptr;
                    	
                    	res = 0;
                    	ptr = hex;
                    	
                    	while((*ptr)=='0') ptr++;
                    	
                    	while(*ptr)
                    	{
                    		if(!((*ptr<'0')||(*ptr>'9')))
                    		{
                    			val = *ptr - '0';
                    		}
                    		else if(!((*ptr<'a')||(*ptr>'f')))
                    		{
                    			val = *ptr - 'a' + 10;
                    		}
                    		else if(!((*ptr<'A')||(*ptr>'F')))
                    		{
                    			val = *ptr - 'A' + 10;
                    		}
                    		else
                    		{
                    			return -1;
                    		}
                    		
                    		res = res*16+val;
                    		
                    		ptr++;
                    	}
                    	
                    	return res;
                    } 
                    
                    // My MAC address is 00-11-0A-40-F7-92
                    
                    void WakeUpOnLAN(const char* szMyMAC)
                    {
                    	UDP_SOCKET	MySocket;
                    	NODE_INFO	Remote;
                    	
                    	int					i, counter;
                    	const unsigned char delimiters[]=":- ";
                    	unsigned char		* token;
                    	BYTE				MAC[6];
                    	
                    	// Set the socket's destination to be a broadcast over our IP 
                    	// subnet
                    	// Set the MAC destination to be a broadcast
                    	memset(&Remote, 0xFF, sizeof(Remote));
                    	
                    	// Open a UDP socket for outbound transmission
                    	MySocket = UDPOpen(0, &Remote, WAKE_UP_PORT);
                    	
                    	// Abort operation if no UDP sockets are available
                    	// If this ever happens, incrementing MAX_UDP_SOCKETS in 
                    	// StackTsk.h may help (at the expense of more global memory 
                    	// resources).
                    	if(MySocket == INVALID_UDP_SOCKET)
                    		return;
                    	
                    	// Make certain the socket can be written to
                    	if(!UDPIsPutReady(MySocket))
                    	{
                    		UDPClose(MySocket);
                    		return;
                    	}
                    	memsetpgm(buffer,0,1024);
                    	//first 6 bytes should be 0xFF
                    	counter=0;
                    	for(i=0;i<6;i++) {
                    		buffer[i]=0xff; 
                    		counter++;
                    	}
                    	i = 0;
                    	token = strtok(szMyMAC, delimiters);
                    	while (token!= NULL)
                    	{
                    		MAC[i]=parseHex(token);			
                    		i++;
                    		token  = strtok (NULL, delimiters);
                    		if(i>5) break;
                    	}
                    	//now repeate MAC 16 times
                    	for(i=0;i<16;i++) {
                    		memcpypgm((rom BYTE*)&buffer[counter],(rom BYTE*)MAC,6);
                    		counter+=6;
                    	}
                    	UDPPutROMArray(buffer, 1024);
                    	// Send the packet
                    	UDPFlush();
                    	
                    	// Close the socket so it can be used by other modules
                    	UDPClose(MySocket);
                    }
                    Bạn có thể gọi hàm WakeUpOnLAN với tham số là địa chỉ MAC máy tính cần khởi động như sau:
                    WakeUpOnLAN("00-11-0A-40-F7-92") hoặc
                    WakeUpOnLAN("00:11:0A:40:F7:92") hoặc
                    WakeUpOnLAN("00 11 0A 40 F7 92")

                    Để kiểm tra xem PIC có gởi UDP package lên LAN không ta dùng một công cụ để monitor package trên LAN gọi là Ethereal (Cái này mà cài ở máy tính dịch vụ thì có thể ngửi (sniff) password, email, chat của mấy máy tính trong dịch vụ).

                    Note: Mặc dù code trên khi chạy thì PIC có gởi UDP package vào LAN nhưng khi mình dùng Ethereal để monitor thì thấy nội dung không đúng yêu cầu là:
                    - 6 bytes đầu là 0xFF
                    - Địa chỉ MAC 6 bytes được lặp 16 lần (16*6=96 bytes)
                    - 922 bytes còn lại (1024 - 6 - 96) là 0x00

                    Các bác kiểm tra dùm mình xem sai ở chỗ nào nhé.
                    Attached Files
                    Last edited by bxngoc; 09-08-2007, 16:59.
                    “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

                    Comment


                    • #25
                      Các bác nào cần mua cái RJ45 có biến áp hay mua biến áp không thì mail cho em nhé đồ cũ và mới !
                      Mạch nạp Little Programmer
                      MSC-51,AVR,EEPROM ... etc

                      Site Fukusei shop :

                      Comment


                      • #26
                        Nguyên văn bởi bxngoc Xem bài viết
                        Kít của tớ cũng bắt chước của Olimex thui (xem attachment). Còn nếu dùng PIC giao tiếp với ENC mà không cần con 74HCT thì dùng PIC 18LF nó cũng chạy 3.3V giống ENC. Xem chi tiết tại đây.
                        Mình cũng mới làm 1 cái kít pic ve internet dự vào cai sch trên. Có dung con 74hct125 dien ap cap cho pic la 5v cap cho enc la 3v3(da kiem tra) nhưng ko hiểu sao con enc cua minh sờ vao thấy hơi nóng ko biết con cua bạn có bị nóng như vậy ko?

                        Comment


                        • #27
                          Quá nóng đi nữa. Rờ vào con 7805 phỏng tay dù có tản nhiệt. Con ENC thì ấm ấm. Mạch này tiêu thụ dòng khác cao. Phải dùng adapter 9V/1A trở lên mới đủ.
                          “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

                          Comment


                          • #28
                            Nguyên văn bởi batbatdieu Xem bài viết
                            Bác có biết cách nào nhận biết RJ45 có sẵn biến áp ko , đo thử các pin của nó ? Bác đo thử rồi cho mình biết đc ko , mới tháo đc 1 RJ cái từ cái router wifi bị hỏng .

                            @ Minh Ha : cho em cái giá xịn của RJ45 đi anh .
                            Hien tai mihn cung co vai cai RJ45 hang xin luon. Nhìn vao khe ho ban cung thay cuon day dong ben trong roi. Neu ko thi dung VOM kiem tra neu co bien ap thi phan ket noi vao rj45 va phan han len board mach ko bi noi tat.

                            Comment


                            • #29
                              Nguyên văn bởi VENUS_START Xem bài viết
                              Hien tai mihn cung co vai cai RJ45 hang xin luon. Nhìn vao khe ho ban cung thay cuon day dong ben trong roi. Neu ko thi dung VOM kiem tra neu co bien ap thi phan ket noi vao rj45 va phan han len board mach ko bi noi tat.
                              bác để em vài cái đc ko ?
                              Last edited by batbatdieu; 11-09-2007, 11:46.

                              Comment


                              • #30
                                lâu lâu rồi không thấy mem nào update thông tin về mục này nhỉ. Ai có thông tin gì mời thì share cho anh em cùng biết. Ứng dụng trên nền Ethernet rất là hay và thực tế.
                                Ethernet-RS232, PIC Webserver, RFID Reader
                                CallerID, Cảnh báo BTS, ...
                                0988006696
                                linhnc308@gmail.com
                                http://linhnc308.blogspot.com

                                Comment

                                Về tác giả

                                Collapse

                                bxngoc Nothing to reveal Tìm hiểu thêm về bxngoc

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X