lâu không vào diễn đàn rồi, vẫn thấy rôm rả quá mọi người nhỉ
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
-
Nguyên văn bởi chikichita Xem bài viếtmới bị gosh nhầm ổ đĩa DATA giờ đang mò mẫm lại code hihi, học lại từ đầu
Comment
-
cũng ko nghĩ đến trường hợp ni nữa
Nguyên văn bởi yamailuk Xem bài viếtSao 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ếtkhô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 ý
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ếtMì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
2/ Dùng Ajax
Hello Arduino
Arduino Ajax Web Server - YouTube
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ếtXin 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); }
Code://---------------------------------------------------------------------------- // Writen by NTTam - PTITHCM //---------------------------------------------------------------------------- #ifndef NTAVRNET_H #define NTAVRNET_H #endif //NTAVRNET_H
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ếtLâ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!
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ếtMạ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]
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
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
-
bởi Hatruong1309Cho e hỏi là phần chân X thì nối cái j thì mạch mới chạy được ạ và kiểm tra đúng sai kiểu j ạ
Đề bài thiết kế mạch dãy đồng bộ nhận biết dãy tín hiệu vào ở dạng nhị phân được đưa liên tiếp ở đầu vào X và được đồng...-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment