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

  • Cám ơn bạn rptdnmqs đã quan tâm!
    Ping 1 lần được lần 2 được lần 3,4... tịt luôn. Nói thật cũng muốn làm cho mình một cái web nhỏ nhỏ bấm phá chơi nhưng thật là cực khó, vừa đọc vừa nhờ diễn đàn để hiểu cho nhanh nhưng hơi thất vọng vì đọc datasheet tự ngâm cứu thì không còn thời gian chia sẽ, đọc mấy bài của Thay Tam mà chả vô được bao nhiêu, code thì quá dài dòng, chắc bỏ vụ này thôi mua thiết bị về sử dụng có vẽ đỡ tốn thời gian hơn. Cám ơn mọi người

    Comment


    • Mình cũng luyện công code với codevision nhưng thằng này dịch dở quá.Đọc cái list nó sinh ra thấy khó chịu vì nó biên dịch kém quá.Mình sợ còn chưa chạy nổi đến IP huống chi là TCP.Mình bỏ rồi.Có gì email mình.Mình gửi code phần ethernet cho.
      , , ,

      Comment


      • Giao tiếp với ethernet hay làm webserver nhỏ nhỏ dựa trên AVR thì nên vào trang web này:
        tuxgraphics.org: An AVR microcontroller based Ethernet device
        tuxgraphics.org: HTTP/TCP with an atmega88 microcontroller (AVR web server)
        - Mình nghĩ các bạn nên sử dụng các thư viện giao tiếp phần cứng với ENC có sẵn để viết code xây dựng các giao thức.
        - Còn về ping thì cái sai theo mình nghĩ là ở việc xây dựng giao thức của các bạn chứ mình không nghĩ là complier.

        Xây dựng một web server nhỏ thì không có vấn đề gì (chỉ cần con atmega8 là đủ),nhưng khi một web server với nhiều yêu cầu cùng một lúc mới khó.

        Comment


        • Bạn đọc code asm khi biên dịch với codevision chưa.Khi nào đọc kĩ rồi nói nhé.Bình thường với lệnh dịch trái 2 bit là mất 10 chu kì máy.Bạn cứ thử đi.Cho nên phần giao tiếp ethernet tốn nhiều chu kì máy thì làm sao mà webserver chạy được nhiều kết nối.
          , , ,

          Comment


          • Còn nữa việc đọc giá trị từ con trỏ cũng tốn kha khá chu kì máy đấy.Nếu chỉ đơn giản đọc mảng byte thì 1 lần đọc mất 15-20 chu kì,chưa tính việc xử lý gì sau đó. tính đọc 500 lần thì mất khoảng 15*500.Tính thêm khoảng thời gian truyền spi nữa thì có mà đợi mãi mãi.Các lớp trên chưa tính
            , , ,

            Comment


            • Nếu với thạch anh 12MHz thì bạn chỉ mất 2,5ms để đọc 500 mảng byte, trong khi các giao thức TCP/IP cho phép ràng buộc về thời gian lên đến hàng chục ms để nhận dữ liệu trước khi nó loại gói tin. Ngoài ra nó còn phụ thuộc vào thuật toán của bạn, không ai đọc 500 lần một mảng byte rồi xử lý tiếp đâu, nếu làm như bạn thì cho dù trình biên dịch có tối ưu đến mấy thì cũng không có đủ khả năng đáp ứng được cho bạn về tốc độ đâu. Khối lượng công việc trong quá trình xử lý các giao thức của TCP/IP là cực lớn nên nếu đem sự tối ưu ra để xem xét không thôi là chưa đủ được !!!!

              Comment


              • mình đồng ý với bạn enter88 . Trình độ lập trình nằm ở giải thuật chứ không nằm ở sự thuộc bài . Viết code là một nghệ thuật chứ ko phải là món khô khan . Điều này lý giải vì sao :chương trình của người ta sáng sủa , đọc sơ qua có thể nắm được vấn đề , code chạy trơn tru. Còn code của mình rối rấm , chồng chéo nhau . Đọc cả ngày chả hỉu mình vừa viết cái gì...

                Comment


                • @rptdnmqs : mình cài trên máy 2 trình dịch : codevision + avr studio . Gặp chương trình hay thì dùng trình dịch tương ứng mở ra xem . Học code của họ . Mình cũng ko là tín đồ của trình dịch nào . Mỗi cái có cái hay , cái dỡ riêng .
                  Chúc vui .

                  Comment


                  • Khi nào mà gặp trục trặc thì tự khắc biết.Code sáng sủa chưa chắc tối ưu.Code của mình sáng như ban ngày mà khi dịch còn bị vấp.Thôi để kiếm trình biên dịch khác.
                    , , ,

                    Comment


                    • ai làm mạch chạy ,điều khiển được rồi thì post lên e xem với.
                      còn phần web thì điều khiển như thế nào?khi mình nhúng vào avr thì còn phải thêm gì nữa thì mới điều khiển được?
                      (tại e làm mạch chạy rồi ,chỉ có điều khiển thiết bị thôi,code lấy trên mạng,không giống với của thầy Tâm)
                      rồi giờ mình múôn xuất thời gian lên web,tinh toán,thì làm sao?mọi người hướng dẫn mình với.
                      bữa giờ làm không được,mà đồ án của e phải làm 2 cái mạch đây,điều khiển cũng vậy mà thầy hướng dẫn bắt làm 2 cái mới chết tiền,huhu,mong mọi người giúp đỡ e

                      Comment


                      • 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

                        Em cảm ơn bài viết của anh! Anh cho em hỏi con Enc28j60 này có phương thức cho phép nó truy cập tới một web server không ạ? Và nếu có thì đó là phương thức gì ạ?

                        Comment


                        • Nguyên văn bởi nacdanh90 Xem bài viết
                          Anh cho em hỏi con Enc28j60 này có phương thức cho phép nó truy cập tới một web server không ạ? Và nếu có thì đó là phương thức gì ạ?
                          ENC28J60 là IC giao tiếp ethernet, nó cung cấp kết nối ethernet cho mạch, còn truy cập các dịch vụ trên internet đều do lập trình trên vi điều khiển. Tất nhiên là qua nó ta có thể truy cập đến 1 trang web được, thông qua giao thức HTTP, trong đó, vi điều khiển đóng vai trò HTTP client (trong project trên - web server thì vi điều khiển đóng vai trò HTTP server). Phương thức HTTP (HTTP method) có thể sử dụng cho mục đích này là HTTP POST và HTTP GET.

                          Comment


                          • năm mới nhìu niềm vui mới!chúc sức khỏe Thầy và các bạn dientuvietnam.net

                            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!

                            Comment


                            • Vâng! Em cảm ơn câu trả lời của anh ! Em đang định làm một project liên quan đến con ENC28J60 e đang phân vân nên dùng CodeVisionAVR hay avr studio. Anh có thể cho em xin một lời khuyên được không ạ? tại em thấy avr studio sau khi buid ra dung lượng của firmware lớn hơn của CodeVisionAVR.

                              Comment


                              • Nguyên văn bởi nttam79 Xem bài viết
                                ENC28J60 là IC giao tiếp ethernet, nó cung cấp kết nối ethernet cho mạch, còn truy cập các dịch vụ trên internet đều do lập trình trên vi điều khiển. Tất nhiên là qua nó ta có thể truy cập đến 1 trang web được, thông qua giao thức HTTP, trong đó, vi điều khiển đóng vai trò HTTP client (trong project trên - web server thì vi điều khiển đóng vai trò HTTP server). Phương thức HTTP (HTTP method) có thể sử dụng cho mục đích này là HTTP POST và HTTP GET.
                                Vâng! Em cảm ơn câu trả lời của anh ! Em đang định làm một project liên quan đến con ENC28J60 e đang phân vân nên dùng CodeVisionAVR hay avr studio. Anh có thể cho em xin một lời khuyên được không ạ? tại em thấy avr studio sau khi buid ra dung lượng của firmware lớn hơn của CodeVisionAVR.

                                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