Thông báo

Collapse
No announcement yet.

Giao thức TCP/IP và Web server với AVR

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • lâu không vào diễn đàn rồi, vẫn thấy rôm rả quá mọi người nhỉ

    Điện tử viễn thông - Hutech

    Comment


    • mới bị gosh nhầm ổ đĩa DATA giờ đang mò mẫm lại code hihi, học lại từ đầu

      Điện tử viễn thông - Hutech

      Comment


      • Nguyên văn bởi chikichita Xem bài viết
        mới bị gosh nhầm ổ đĩa DATA giờ đang mò mẫm lại code hihi, học lại từ đầu
        Sao a không dùng dropbox hay driver mà đồng bộ

        Comment


        • cảm ơn anh về bài viết
          liên hệ 0904 152 023

          Comment


          • cũng ko nghĩ đến trường hợp ni nữa
            Nguyên văn bởi yamailuk Xem bài viết
            Sao a không dùng dropbox hay driver mà đồng bộ

            Điện tử viễn thông - Hutech

            Comment


            • không biết mọi ng đã giải quyết được bài toán dùng một lúc thì mạch bị "đứng" chưa nhỉ. Mình có 2 kinh nghiệm chia sẻ


              1. Thay vì dùng ngắt ngoài để đọc từng gói tin ta có thể đọc trực tiếp và liên tục qua hàm ethGetFrame, rồi so sánh nếu len>0 thì đưa vào phân tích gói tin.

              Lưu ý thêm: trong hàm con enc28j60PacketReceive, sau khi đọc độ dài len nhớ thêm vào "len-=4;". Lý do là vì cần bỏ đi 4 byte CRC, nếu không trừ đi 4 byte này thì khi so sánh hoặc gửi trả lại gói tin sẽ bị sai. (Có thể dùng Wireshark để check lúc server trả gói tin arp, nó vẫn nhận nhưng báo sai byte)


              2. cái này quan trọng hơn và là nguyên nhân chính làm cho server bị "đứng". Vì dùng 1 lúc chip sẽ bị quá tải bộ nhớ dẫn đến ghi đè hoặc xóa các biến cũ, trong đó có biến ARPMyAddr trong file arp.c. Vì sau 1 thời gian, các bản arp ở các thiết bị client sẽ bị xóa, client khi liên lạc lại sẽ gửi gói tin arp hỏi server "địa chỉ 192.168.1.***" này là của ai, thì server sẽ không thể trả lời được gói tin arp này được do mất biến ARPMyAddr !

              Lý do là hàm con arpArpProcess có nhiệm vụ nhận và trả gói tin arp như đã nói ở trên đã bị mất biến ARPMyAddr nên nó không hiểu và loại ra khỏi điều kiện if (lúc check ip của chính server).

              Để fix vẫn đề này không khó, các bạn thay lúc check biến ARPMyAddr.ip bằng arpHeader->dipaddr == HTONL(IPADDRESS), trong đó IPADDRESS là cái ta đã define ban đầu trong thư viện ntAVRnet.h. Có một điều mình không hiểu lắm là tại sao biến ip và các biến khác của mình bị mất còn biến ARPMyAddr.ethAddr dùng cỡ nào cũng không thấy mất


              Trên đây là 1 vài kinh nghiệm khi dùng code thầy Tâm :-)
              bạn nào còn quan tâm thì có thể lưu ý

              Comment


              • Nguyên văn bởi cowboy_188 Xem bài viết
                không biết mọi ng đã giải quyết được bài toán dùng một lúc thì mạch bị "đứng" chưa nhỉ. Mình có 2 kinh nghiệm chia sẻ


                1. Thay vì dùng ngắt ngoài để đọc từng gói tin ta có thể đọc trực tiếp và liên tục qua hàm ethGetFrame, rồi so sánh nếu len>0 thì đưa vào phân tích gói tin.

                Lưu ý thêm: trong hàm con enc28j60PacketReceive, sau khi đọc độ dài len nhớ thêm vào "len-=4;". Lý do là vì cần bỏ đi 4 byte CRC, nếu không trừ đi 4 byte này thì khi so sánh hoặc gửi trả lại gói tin sẽ bị sai. (Có thể dùng Wireshark để check lúc server trả gói tin arp, nó vẫn nhận nhưng báo sai byte)


                2. cái này quan trọng hơn và là nguyên nhân chính làm cho server bị "đứng". Vì dùng 1 lúc chip sẽ bị quá tải bộ nhớ dẫn đến ghi đè hoặc xóa các biến cũ, trong đó có biến ARPMyAddr trong file arp.c. Vì sau 1 thời gian, các bản arp ở các thiết bị client sẽ bị xóa, client khi liên lạc lại sẽ gửi gói tin arp hỏi server "địa chỉ 192.168.1.***" này là của ai, thì server sẽ không thể trả lời được gói tin arp này được do mất biến ARPMyAddr !

                Lý do là hàm con arpArpProcess có nhiệm vụ nhận và trả gói tin arp như đã nói ở trên đã bị mất biến ARPMyAddr nên nó không hiểu và loại ra khỏi điều kiện if (lúc check ip của chính server).

                Để fix vẫn đề này không khó, các bạn thay lúc check biến ARPMyAddr.ip bằng arpHeader->dipaddr == HTONL(IPADDRESS), trong đó IPADDRESS là cái ta đã define ban đầu trong thư viện ntAVRnet.h. Có một điều mình không hiểu lắm là tại sao biến ip và các biến khác của mình bị mất còn biến ARPMyAddr.ethAddr dùng cỡ nào cũng không thấy mất


                Trên đây là 1 vài kinh nghiệm khi dùng code thầy Tâm :-)
                bạn nào còn quan tâm thì có thể lưu ý
                Bạn có thể hướng đãn mình cụ thể hoặc share code chỉnh sửa cho mình được không?
                thank bạn nhiều!

                Comment


                • Mình đọc hết cả luồng từ đầu chưa thấy thảo luận nhiều về vấn đề chuyền 1 chuỗi kí tự lên hiển thì trên web server. Mình mọi người giúp mình 2 cấu hỏi với.
                  1/ Cách gửi 1 chuỗi kí tự lên web ( như mình đọc là thay đổi chuỗi %AD). nhưng thực sự mình chưa hiểu rõ nguyên lý lắm.
                  2/Làm cách nào để cập nhật trạng thái liên tục của 1 kênh analog lên Web server mà không cần tự động làm tươi trình duyệt.
                  Mong mọi người giúp đỡ mình

                  Comment


                  • Nguyên văn bởi thanhnhuvt20 Xem bài viết
                    Mình đọc hết cả luồng từ đầu chưa thấy thảo luận nhiều về vấn đề chuyền 1 chuỗi kí tự lên hiển thì trên web server. Mình mọi người giúp mình 2 cấu hỏi với.
                    1/ Cách gửi 1 chuỗi kí tự lên web ( như mình đọc là thay đổi chuỗi %AD). nhưng thực sự mình chưa hiểu rõ nguyên lý lắm.
                    2/Làm cách nào để cập nhật trạng thái liên tục của 1 kênh analog lên Web server mà không cần tự động làm tươi trình duyệt.
                    Mong mọi người giúp đỡ mình
                    1/ Không phải thay đổi chuỗi %AD mà là thay thế: Dấu % ở đây đóng vai trò là mã nhận dạng, còn AD là mã của giá trị cần thay thế (Do có nhiều thông số cần truyền đi).
                    2/ Dùng Ajax
                    Hello Arduino
                    Arduino Ajax Web Server - YouTube

                    Comment


                    • Anh có thể giải thích hàm "void decode_base64". Mình vẫn chưa đăng nhập được. thank!

                      Comment


                      • anh ơi cho em xin cái hình mạch đi mờ quá không thấy gì hết

                        Comment


                        • anh ơi cho em xin cái hình mạch đi mờ quá không thấy gì hết
                          Nguyên văn bởi nttam79 Xem bài viết
                          Xin chào tất cả mọi người.
                          Mình tham gia diễn đàn đã khá lâu rồi nhưng không có đóng góp gì cho diễn đàn, mà chôm từ diễn đàn thì khá nhiều. Hôm nay thấy cắn rứt lương tâm quá nên làm 1 cái tut đóng góp cho ĐTVN.
                          Mình thấy đề tài giao tiếp TCP/IP với AVR và điều khiển qua Internet được khá nhiều bạn quan tâm, tài liệu trên các diễn đàn nước ngoài cũng khá nhiều nhưng chưa có tut nào cụ thể và chi tiết, đặc biệt là hướng dẫn để mọi người có thể tự viết code được, chứ không phải copy code có sẵn. Vì vậy nên mình lôi 1 project đã làm cách đây khá lâu ra để làm cơ sở cho tut này.
                          Bài 1-Hardware:
                          Trong project này mình sử dụng một con ENC28J60 của Microchip để giao tiếp Ethernet. Vi điều khiển thì sử dụng Atmega32, có bộ nhớ RAM 2k, vừa đủ dùng (vì 1 frame ethernet có chiều dài max 1500bytes).
                          Mọi người có thể mua 1 module phát triển Atmega32 + ENC28J60 tại TME (ATMEGA32 - Ethernet board - TMe: Linh kien, Sensors, Kit Phat trien, Mach nap 8051, PIC, AVR, ARM, EPROM, Flash...). Hay tự build 1 mạch theo sơ đồ sau:


                          Mô tả:
                          - Atmega32 giao tiếp với ENC28J60 qua SPI (MOSI/MISO/SCK) ngoài ra còn có chân chọn chip CS (nối với bất cứ IO nào của Atmega) và ngắt INT (nối vào ngắt ngoài VĐK).
                          - ENC28J60 dùng nguồn 3V3, do đó cần 1 IC ổn áp 3V3. ENC28J60 cần 1 port RJ45 có tích hợp sẵn Transformer và LED.
                          - Thêm MAX232 để dùng vào mục đích debug.
                          - Thêm LCD và keypad (dùng để config hay hiển thị gì đó sau này). Nếu không cần có thể bỏ ra.

                          Bài 2-Cở sở giao thức và thiết kế lưu đồ dữ liệu-Tạo project trong AVR studio:
                          Chồng giao thức TCP/IP:
                          Dưới đây là mô hình chồng giao thức TCP/IP


                          Cụ thể hóa và lưu đồ dữ liệu vào ra của giao thức (áp dụng cho phần lập trình)


                          Như vậy phần lập trình sẽ chia ra các module sau:
                          - Module điều khiển ENC28J60: nằm trong file “enc28j60.c” và file header “enc28j60.h”, thêm file “enc28j60conf.h” để lưu các config.
                          - Module giao thức Ethernet: gồm các file: “ethernet.c” và “ethernet.h”, thêm file "packet.h" khai báo các cấu trúc gói tin sử dụng trong bộ giao thức TCP/IP.
                          - Module giao thức phân giải địa chỉ Address Resolution Protocol, gồm file “arp.c” và “arp.h”
                          - Module giao thức IP gồm “ip.c” và “ip.h”
                          - Module giao thức cấp phát địa chỉ IP động DHCP (Dynamic Host Configuration Protocol) gồm các file “dhcp.c” và “dhcp.h”
                          - Module giao thức UDP gồm các file “udp.c” và “udp.h”
                          - Module giao thức TCP gồm các file “tcp.c” và “tcp.h”
                          - Module giao thức HTTP gồm các file “http.c” và “http.h”
                          - Và một số các hàm hỗ trợ khác (uart, timer,…)
                          Toàn bộ code viết trên AVR Studio, biên dịch với AVR-GCC

                          Ta tạo 1 project mới trong AVR studio:

                          Set thuộc tính cho project và chọn CPU, chọn tần số thạch anh:


                          Sau khi tạo project, ta sẽ có source file đầu tiên là “ntAVRnet.c”.
                          Mở file này, thêm vào hàm main, chương trình chính, nội dung hàm này sẽ được viết cuối cùng
                          Code:
                          //----------------------------------------------------------------------------
                          // Writen by NTTam - PTITHCM
                          //----------------------------------------------------------------------------
                          #include <avr/io.h>
                          //----------------------------------------------------------------------------
                          
                          int	main()
                          {
                          	return(0);
                          }
                          Tạo thêm file header cho nó: “ntAVRnet.h” có nội dung:
                          Code:
                          //----------------------------------------------------------------------------
                          // Writen by NTTam - PTITHCM
                          //----------------------------------------------------------------------------
                          #ifndef NTAVRNET_H
                          #define NTAVRNET_H
                          
                          
                          #endif //NTAVRNET_H
                          File này sẽ dùng để chứa các define và thông tin config chung cho toàn project

                          Comment


                          • có bạn nào có file mô phỏng protues cho mình xin với!
                            mình xem sample của microchip trong protues thì nó không hiện IP! chằng biết làm thế nào!
                            có file mô phỏng được thì tìm hiểu nó cũng trực quan hơn!
                            cảm ơn!
                            Last edited by ztranhhung; 06-12-2013, 18:32.

                            Comment


                            • Nguyên văn bởi hieppro89 Xem bài viết
                              Lâu lắm box ko có sự kiện gì mới, cơ bản là Thầy cũng bận,cuối kì rùi
                              các bạn chắc cũng đang ôn thi
                              mình cũng đang ôn thi, mà còn phải liên hệ tìm công ty thực tập
                              năm cuối rùi mà, đang háo hức đi làm
                              coi như project này của thầy là project cuối cùng về mảng AVR mình ngâm cứu 2 năm qua
                              phía trc còn nhìu mảng hay lắm, còn nhìu dòng vi điều khiển đang chờ khai phá
                              hôm nay,lên 4rum thấy Thầy trả lời câu hỏi của 1 bạn thấy vui vui rồi
                              quyết định quay lại project,viết tiếp code LCD và code ADC cho Thầy và các bạn phấn khởi đầu năm mới
                              anh Huy pro hứa là em làm xong 2 phần này, anh sẽ lo phần còn lại, gửi ADC lên Website
                              mong Thầy và các bạn giúp đỡ mảng này

                              Báo cáo kết quả đạt được sau 2 tháng: từ 1/11 tới 1/1/2012
                              Báo cáo Thầy, sau 2 tháng ngâm cứu, em đã đạt được những kết quả sau:

                              1.Nắm vững cách thức hoạt động của mô hình TCP/IP Ver4

                              2.lập trình và mô phỏng mạch bằng proteus

                              3. ping đến mạch, truy cập qua LAN

                              4.có khả năng tự tìm IP thông qua internet

                              5.thiết lập tên miền web miễn phí: duydt2.tk

                              6.cấu hình cho Modem để có thể truy cập qua mạng internet

                              7. truy cập qua WAN ok

                              Ngay từ bây giờ, bất cứ khi nào online Thầy, và các bạn cũng có thể truy cập vô duy dt2 k3

                              Server nằm ngay trên mạch Proteus Thầy ạ

                              Nhưng cũng có cái chưa được, cần thêm thời gian:

                              1. Chưa khắc phục được bệnh IP động của Modem nhà mình

                              --->mỗi lần IP của Modem thay đổi lại phải thay đổi lại đường dẫn của domain: duydt2.tk

                              quá trình như sau: user--->duydt2.tk---->IP public của Modem------->IP cục bộ của board mạch

                              nhưng vì lý do IP public của Modem là động( mình ko thể cấu hình tĩnh vì lý do ADSL ko hỗ trợ, em đã thử và mất mạng cả xóm)

                              nên mỗi khi thay đổi IP lại phải sửa lại khâu duydt2.tk---->IP public của Modem

                              2..điều khiển đèn led qua internet(có mấy cái ô check điều khiển Relay,kích vô rồi nhấn Sumit là led sáng hoặc tắt)

                              4.gửi dữ liệu lên web(gửi nhiệt độ tử Board mạch lên Website)


                              Thưa Thầy, trên đây là những điều đã đạt được và những điều chưa được

                              gửi Thầy và các bạn toàn bộ Project
                              phần mô phỏng các bạn down WinPcap về cài
                              phần mềm hỗ trợ NIC mạng ảo cho proteus
                              kích đúp vô con ENC28J60 chọn Network Card No là 1
                              và chạy thui
                              đây là giao diện Web của mình, sửa lại ít của Thầy, he he

                              không biết post file lên diễn đàn kiểu gì mà hok dc
                              các bạn dùng tạm link này vậy!
                              ntAVRnet.rar - 4shared.com - online file sharing and storage - download
                              Best Regards!
                              em chào anh!
                              anh ơi sao em không download được nhỉ?
                              nó toàn báo (Liên kết tập tin bạn đã yêu cầu không hợp lệ.)
                              em cảm ơn!

                              Comment


                              • Nguyên văn bởi yamailuk Xem bài viết
                                Mạch của a huy thì không sai vì a huy đã làm thành công rồi mà. Thầy Tâm chỉ share code phần khung của project thôi, còn các phần khác như LCD, điều khiển thiết bị, giám sát trạng thái, cảm biến .v.v. là do tự bản thân bạn phát triển lên. Bạn dùng hercules thì không sai, bạn xem kỹ lại xem có thể bạn chưa bật Configure Virtual Serial Port Driver. Đây là bức hình mình vừa test lại file mô phỏng của mình (có thể download ở ngay chữ ký của mình)
                                [ATTACH=CONFIG]66982[/ATTACH]
                                anh ơi!
                                sao em không thấy chổ nào đễ download phần mô phỏng nhỉ?
                                anh gửi vào email cho em được không ạ? (h.ledinhhung@gmail.com)
                                em cảm ơn!
                                Last edited by ztranhhung; 06-12-2013, 18:32.

                                Comment

                                Về tác giả

                                Collapse

                                nttam79 Tìm hiểu thêm về nttam79

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

                                Collapse

                                Đang tải...
                                X