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
-
uhm, với lại sửa mấy cái define của ENC nữa thì phải cái này hỏi a chikichita đó . Do mình làm báo cáo xong rồi nên k up lên 128 mặc dù còn rất nhiều ý tưởng
-
làm trên con 32 ok rồi h fai bắt chuyển wa 128 sửa lại hoài mà vẫn chay nữa. hix hix. khi chuyển từ 32 sang 128 mình chỉ cần thay đổi chân của giao tiếp SPI, uart, với timer, thôi đúng ko vậy Yamailuk. có thể giúp mình dc ko
Leave a comment:
-
Có chứ, Baud nó phụ thuộc vào tần số thạch anh mà. UART ở đây thầy dùng để dubug lỗi. Nếu bạn làm thành công thì có thể bỏ luôn nó.Nguyên văn bởi stevenboy Xem bài viếtAi cho e hỏi cách chuyển sang ATmega128 dùng thạch anh ngoài 7.3728M mình có cần khai báo F_CPU lại thành 7.3728 ko. và cái thạch anh này có ảnh hưởng gì đến usart ko vậy??? và hàm SIGNAL(SIG_UART0_TRANS), SIGNAL(SIG_UART0_RECV) 2 hàm này có tác dụng gì vậy?? Mong dc giúp đỡ
Leave a comment:
-
Ai cho e hỏi cách chuyển sang ATmega128 dùng thạch anh ngoài 7.3728M mình có cần khai báo F_CPU lại thành 7.3728 ko. và cái thạch anh này có ảnh hưởng gì đến usart ko vậy??? và hàm SIGNAL(SIG_UART0_TRANS), SIGNAL(SIG_UART0_RECV) 2 hàm này có tác dụng gì vậy?? Mong dc giúp đỡ
Leave a comment:
-
nhìn bạn ga_kon có cái mô hình đẹp quá,
, dạo này việc nhiều quá vẫn chưa có thời gian làm tiếp đề tài nữa, mới chỉ đang dừng lại tắt mở đèn trong bếp với đèn phòng, tranh thủ lúc đang ôm laptop làm biếng đi bật công tắc 
công nhận đề tài này hot quá hot, quá nhiều ý tưởng để phát triển, hy vọng càng ngày càng nhiều bạn tham gia tranh luận cho đề tài thêm phong phú.
hình layout cho bạn nào muốn dùng IC điều khiển bóng đèn 220AC
Leave a comment:
-
Leave a comment:
-
hay đấy, mình sắp xong rồi, khi nào có gì mình sẽ hỏi bạnNguyên văn bởi ga_kon Xem bài viếtSản phẩm mới ra lò! SAM4195 - YouTube ^^ . . . hi vọng nó thêm chút động lực để các pác trong topic cố gắng tìm hiểu!
À, cho em hỏi, chơi luôn cái "camera quan sát (loại có địa chỉ IP luôn)" thì làm thế nào ta? Chắc là cho cái con ATmega32 qua một bên quá ta! ^^
À, cái nữa em thắc mắc, chuyển qua 3G thì chắc là khác hẳn luôn bên này hả ta? Vì nghe đâu có liên quan đến GSM . . .^^
Còn 1 vấn đề này thấy nhiều người gặp phải mà ko biết ai giải quyết chưa. Lúc đầu ping mạch bình thường, nhưng sau đó khi lướt web trên lap hay pc thì ping rất khó, thường đợi 1 thời gian ping lại mới được. như là ic ethernet bị đứng vậy.
Mình có Debug thử và thấy mỗi khi có 1 frame (có type là IP, nó nhảy qua Ipprocess rồi được đưa về dạng giao thức UDP/IP. Tuy nhiên khi check trường bootp.opcode thì ko có dạng reply hay request, tạm gọi là unkown) đến thì làm cho ic bị đứng và ko nhận frame được nữa, chờ đủ vài giây cho nó tự khởi động lại mới ping dc.
Sau đó mình có thử thêm ethInit(); vào sau đk if lúc check dạng opcode của UDP thì ok, ping tốt.
Cái mình thắc mắc là tại sao 1 packet dạng giao thức UDP (nhưng ko phải replay hay request) lại làm đơ cả ic :-jif((packet->bootp.opcode != BOOTP_OP_BOOTREPLY) || (packet->bootp.transid != DhcpTransactID)){
ethInit();return;}Last edited by cowboy_188; 17-05-2013, 18:43.
Leave a comment:
-
Sản phẩm mới ra lò! SAM4195 - YouTube ^^ . . . hi vọng nó thêm chút động lực để các pác trong topic cố gắng tìm hiểu!
À, cho em hỏi, chơi luôn cái "camera quan sát (loại có địa chỉ IP luôn)" thì làm thế nào ta? Chắc là cho cái con ATmega32 qua một bên quá ta! ^^
À, cái nữa em thắc mắc, chuyển qua 3G thì chắc là khác hẳn luôn bên này hả ta? Vì nghe đâu có liên quan đến GSM . . .^^
Leave a comment:
-
thầy ơi cho em hỏi
1.em tính điều khiển 1 hệ thống qua websever, tuy nhiên nếu em ko có dây Lan để kéo vào port RJ45 đó thì có cách sử dụng mạng wifi ko
nếu quá rắc rối thì có thể mua thiết bị chuyển đổi (từ wifi qua dây) như vậy ko
(Đại ý là có cách nào sử dụng wifi mà ko phải Lan đc ko ^^)
2.Em ping đc rồi, nhưng mà avrstudio báo
Program Memory Usage : 4932 bytes 15.1 % Full
Data Memory Usage : 899 bytes 43.9 % Full
chiếm mất gần 1/2 SRam rồi, thì có ảnh hưởng gì tới lúc truyền frame Ethernet koLast edited by cowboy_188; 13-05-2013, 05:19.
Leave a comment:
-
void(*appDataIn)(unsigned char* dataBuffer,unsigned int dataLen,struct tcpSession *pSession) là một biến con trỏ, trỏ đến 1 hàm (function) nằm trong bộ nhớ flash, chứ không phải trỏ đến biến, trong AVR studio cho phép khai báo biến con trỏ như vậy.Nguyên văn bởi iamtomriddle Xem bài viếtà, em hiểu rôi. do em dùng trình dich ccs nên khi khai báo int nó hiểu là 1 byte, khi chuyên sang bên này phải đôi thành int16 hay với kiểu long thì đổi thành int32 hay la long long. em còn chỗ này bị vướng mắc nữa là
struct tcpSession{
unsigned int desPort; //Port on the remote host
unsigned int srcPort; //Port on the local host
unsigned long desIP; //IP address of the remote host
unsigned long seqNumber; //Sequence number
unsigned long ackNumber; //Acknowlegement number
unsigned char sesState; //Current state of TCP session
unsigned int srcWin;
unsigned int desWin;
unsigned long lastRxAck; //Last Received Ack
unsigned char nextAck;
unsigned char timeOut; //Session time out
void(*appDataIn)(unsigned char* dataBuffer,unsigned int dataLen,struct tcpSession *pSession);
unsigned char appID; //Upper layer application ID
unsigned char appState; //Upper layer application state
};
hàm này khai báo trong ccs không hiểu void(*appDataIn)(unsigned char* dataBuffer,unsigned int dataLen,struct tcpSession *pSession);
em chuyển mãi ko được, anh giải thích cho em hàm khai báo này với ạ.
Leave a comment:
-
à, em hiểu rôi. do em dùng trình dich ccs nên khi khai báo int nó hiểu là 1 byte, khi chuyên sang bên này phải đôi thành int16 hay với kiểu long thì đổi thành int32 hay la long long. em còn chỗ này bị vướng mắc nữa làNguyên văn bởi nttam79 Xem bài viếtBạn nhầm rồi:
biến char : 1 byte
biến int : 2 byte
biến long : 4 byte
HTONS(0x0800) sẽ cho kết quả 0x0008 (= ((0x0800<<8) | (0x0800>>8)) = (0x0000 | 0x0008) = 0x0008: đây là macro đổi thứ tự 2 byte của 1 số 2 byte thôi)
struct tcpSession{
unsigned int desPort; //Port on the remote host
unsigned int srcPort; //Port on the local host
unsigned long desIP; //IP address of the remote host
unsigned long seqNumber; //Sequence number
unsigned long ackNumber; //Acknowlegement number
unsigned char sesState; //Current state of TCP session
unsigned int srcWin;
unsigned int desWin;
unsigned long lastRxAck; //Last Received Ack
unsigned char nextAck;
unsigned char timeOut; //Session time out
void(*appDataIn)(unsigned char* dataBuffer,unsigned int dataLen,struct tcpSession *pSession);
unsigned char appID; //Upper layer application ID
unsigned char appState; //Upper layer application state
};
hàm này khai báo trong ccs không hiểu void(*appDataIn)(unsigned char* dataBuffer,unsigned int dataLen,struct tcpSession *pSession);
em chuyển mãi ko được, anh giải thích cho em hàm khai báo này với ạ.Last edited by iamtomriddle; 07-05-2013, 22:18.
Leave a comment:
-
Bạn nhầm rồi:Nguyên văn bởi iamtomriddle Xem bài viếtCác anh cho em hỏi //--------------------------------------------------------------------------------------
//Ethernet header
// Gom 14 byte:
// 06 byte dia chi dich
// 06 byte dia chi nguon
// 02 byte type (cho biet frame ethernet mang ben trong loai du lieu gi)
#define ETH_HEADER_LEN 14
struct ntEthHeader
{
struct ntEthAddr desAddr;
struct ntEthAddr srcAddr;
unsigned int type;
};
type la kiểu 2 byte sao lại khai báo chỉ là biến int chỉ có 1 byte. ví dụ với gói IP khi lấy dữ liệu vào thì biến type sẽ phải là 0x0800 mà biến type chi có 1 byte mà đó lại là byte thứ 13 nên sẽ là 0x08;
và dòng này
#define HTONS(s) ((s<<8) | (s>>8)) //danh cho bien 2 byte
theo em hiểu thì HTONS(0x0800) sẽ là 0x08000008 mà là kiểu 16bit nên sẽ là 0x0008;
vay khi so sánh thì type vẫn băng HOTN(0x0800); em có thử in lên cổng com biến type thì đúng là nó chỉ là 0x08;
em có làm theo kiểu
struct ntEthHeader
{
struct ntEthAddr desAddr;
struct ntEthAddr srcAddr;
unsigned int typeH;
unsigned int typeL;
};
so sánh và in typeH<<8 + typeL =0x0800;
các cấu trúc sau cũng thế, biến long 2byte int 1byte
//Cau truc ARP header
struct ntARPHeader
{
unsigned int hwType;
unsigned int protocol;
unsigned char hwLen;
unsigned char protoLen;
unsigned int opcode;
struct ntEthAddr shwaddr;
unsigned long sipaddr;
struct ntEthAddr dhwaddr;
unsigned long dipaddr;
};
+ Hardware type (2 bytes): cho biết loại địa chỉ phần cứng, đối với địa chỉ MAC của giao thức ethernet thì giá trị này được qui định là "0x0001".
+ Protocol type (2 bytes): cho biết loại địa chỉ giao thức lớp trên, đối với địa chỉ IP, giá trị này được qui định là “0x0800”.
+ HLEN (1 byte): cho biết chiều dài của địa chỉ vật lý (địa chỉ MAC).
+ PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP)
+ Operation (2 bytes): cho biết hoạt động đang thực hiện trong gói tin này (request hay reply).
+ Sender H/W (hardware address, 6 bytes): địa chỉ vật lý của phía gửi.
+ Sender IP (4 bytes): địa chỉ IP của phía gửi.
+ Target H/W (6 bytes): địa chỉ vật lý của phía nhận, nếu chưa biết thì sẽ là chứa toàn 0.
+ Target IP (4 bytes): địa chỉ IP của phía nhận.
mà sử dụng được cho 2byte và 4 byte. Em đang thắc mắc phần này mong thầy và các bạn gỡ rối ạ. Em đang chuyển code này sang pic mà thấy gặp nhiều khó khăn quá.
biến char : 1 byte
biến int : 2 byte
biến long : 4 byte
HTONS(0x0800) sẽ cho kết quả 0x0008 (= ((0x0800<<8) | (0x0800>>8)) = (0x0000 | 0x0008) = 0x0008: đây là macro đổi thứ tự 2 byte của 1 số 2 byte thôi)
Leave a comment:
-
Các anh cho em hỏi //--------------------------------------------------------------------------------------
//Ethernet header
// Gom 14 byte:
// 06 byte dia chi dich
// 06 byte dia chi nguon
// 02 byte type (cho biet frame ethernet mang ben trong loai du lieu gi)
#define ETH_HEADER_LEN 14
struct ntEthHeader
{
struct ntEthAddr desAddr;
struct ntEthAddr srcAddr;
unsigned int type;
};
type la kiểu 2 byte sao lại khai báo chỉ là biến int chỉ có 1 byte. ví dụ với gói IP khi lấy dữ liệu vào thì biến type sẽ phải là 0x0800 mà biến type chi có 1 byte mà đó lại là byte thứ 13 nên sẽ là 0x08;
và dòng này
#define HTONS(s) ((s<<8) | (s>>8)) //danh cho bien 2 byte
theo em hiểu thì HTONS(0x0800) sẽ là 0x08000008 mà là kiểu 16bit nên sẽ là 0x0008;
vay khi so sánh thì type vẫn băng HOTN(0x0800); em có thử in lên cổng com biến type thì đúng là nó chỉ là 0x08;
em có làm theo kiểu
struct ntEthHeader
{
struct ntEthAddr desAddr;
struct ntEthAddr srcAddr;
unsigned int typeH;
unsigned int typeL;
};
so sánh và in typeH<<8 + typeL =0x0800;
các cấu trúc sau cũng thế, biến long 2byte int 1byte
//Cau truc ARP header
struct ntARPHeader
{
unsigned int hwType;
unsigned int protocol;
unsigned char hwLen;
unsigned char protoLen;
unsigned int opcode;
struct ntEthAddr shwaddr;
unsigned long sipaddr;
struct ntEthAddr dhwaddr;
unsigned long dipaddr;
};
+ Hardware type (2 bytes): cho biết loại địa chỉ phần cứng, đối với địa chỉ MAC của giao thức ethernet thì giá trị này được qui định là "0x0001".
+ Protocol type (2 bytes): cho biết loại địa chỉ giao thức lớp trên, đối với địa chỉ IP, giá trị này được qui định là “0x0800”.
+ HLEN (1 byte): cho biết chiều dài của địa chỉ vật lý (địa chỉ MAC).
+ PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP)
+ Operation (2 bytes): cho biết hoạt động đang thực hiện trong gói tin này (request hay reply).
+ Sender H/W (hardware address, 6 bytes): địa chỉ vật lý của phía gửi.
+ Sender IP (4 bytes): địa chỉ IP của phía gửi.
+ Target H/W (6 bytes): địa chỉ vật lý của phía nhận, nếu chưa biết thì sẽ là chứa toàn 0.
+ Target IP (4 bytes): địa chỉ IP của phía nhận.
mà sử dụng được cho 2byte và 4 byte. Em đang thắc mắc phần này mong thầy và các bạn gỡ rối ạ. Em đang chuyển code này sang pic mà thấy gặp nhiều khó khăn quá.Last edited by iamtomriddle; 07-05-2013, 12:45.
Leave a comment:
-
Khi mình cần chuyển đổi Từ ATmega32->ATmega128 thì cần thay đổi những gì. Ai biết có thể giúp mình ko. Mình có sửa 1 vài chổ nhưng nó không chạy dc.
Leave a comment:
-
Cảm ơn thầy! em đã hiểu được phần enthernet dưới vi điều khiển rồi, nhưng thầy có thể nối thêm về dùng UDP với giao thức UDP to COM (giao thức cổng COM ảo trên UDP) được không? để xử lý trên PC, phần này em vẫn chưa hiểu.
Nguyên văn bởi nttam79 Xem bài viếtNhững vấn đề bạn hỏi, bạn yamailuk đã trả lời giúp khá đầy đủ rồi, ở đây chỉ giải thích thêm một ít cho rõ thôi.
Sở dĩ bảo cần 2kb ram để xử lý frame là vì trong tiêu chuẩn của TCP/IP và ethernet, kích thước dữ liệu tối đa cho 1 frame ethernet là 1500byte. Tất nhiên ta có thể gửi ngắn hơn, nhưng nếu bộ nhớ không đủ, trong trường hợp mạch vi điều khiển nhận được một frame có kích thước lớn từ máy tính gửi đến thì nó sẽ không xử lý được.
Trong giao thức TCP, có cho phép các bên báo kích thước gói tối đa mà mình nhận được cho bên kia (MSS), như vậy có thể sử dụng cơ chế này để tránh việc nhận được gói tin quá lớn.
Có thể gửi dữ liệu trong gói TCP/UDP với kích thước nhỏ tùy ý (thậm chí chiều dài dữ liệu có thể = 0) tuy nhiên cần lưu ý là dù kích thước dữ liệu nhỏ đến đâu thì 1 frame gửi đi vẫn phải có đủ header TCP/UDP và header IP, như vậy kích thước data cho 1 frame ethernet tối thiểu cũng bằng kích thước header IP+TCP hay IP+UDP.
Như vậy bạn vẫn hoàn toàn có thể giao tiếp ethernet được với kích thước ram nhỏ.
Còn một cách nữa cho phép xử lý được các frame ethernet với kích thước payload lớn (lên đến 1500byte) với vi điều khiển có ram nhỏ mà trong project này không đề cập đến: đó là xử lý các frame ethernet gửi và nhận ngay trên buffer của IC giao tiếp ethernet mà không copy về ram của VĐK để xử lý. Như vậy ta không bị giới hạn bởi kích thước ram nữa. Tuy nhiên để làm việc này cần thực hiện truy xuất trực tiếp vào buffer của IC ethernet qua SPI, dẫn đến phức tạp hơn 1 chút trong lập trình và thời gian xử lý có thể lâu hơn.
Cho ứng dụng RFID, tôi đề xuất dùng UDP với giao thức UDP to COM (giao thức cổng COM ảo trên UDP) là phù hợp nhất, cũng dễ xử lý trên PC nữa.
Leave a comment:
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 15:49 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnNhớ không nhầm thì lúc còn đi học có gặp chú 1 lần cf bãi xe Nguyễn Kim, giờ quán cf đó nghỉ bán rồi
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 15:44 -
-
Trả lời cho Thắc mắc pin 21v ?bởi lvhnCon số đấy biểu thị gần đúng thôi, cái đồng hồ đó có đảm bảo chính xác hay không? pin có cục lên 4v4 vẫn bình thường. Cái gì cũng có sai số trong phạm vi không quá lớn thì không ảnh hưởng gì đâu, bàn ngay ngón ngắn ngón dài mà
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 15:32 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnThay mấy con transisto nhỏ đầu vào, thường vi sai lỗi hay bị. Khám tổng quát chân các linh kiện xem có bị rỉ sét nhiều không?
-
Channel: Điện thanh
Hôm qua, 15:24 -
-
bởi dinhthuong92Mạch này hiệu suất ra led đạt khoảng 90.7% tại 12V in, 40W out.
-
Channel: Nguồn!
27-07-2026, 10:15 -
-
bởi dinhthuong92Có lẽ nguồn viết bài này chỉ mang tính định tính để nói rằng cần thay đổi tổng trở tải để có Pmax chứ trình bày chưa chi tiết và thấu đáo một cách định lượng. Công thức tổng quát phải có mặt L mới được, và nói là "tổng...
-
Channel: Nguồn!
27-07-2026, 10:09 -
-
Trả lời cho [Chia sẻ] Tổng hợp các công ty AI Việt Nam đang làm gì thật sự — Từ voicebot, computer vision đến AI agentsbởi nguyendinhvanCàng ngày, CNTT càng trở nên lôi thôi , rách việc.
Cái AI và Ge... trên trình duyệt chỉ tổ làm vướng mắt, mất thì gian.
Tôi toàm phải mất cộng tắt nó đi.-
Channel: Xu hướng, nhu cầu và thị trường
25-07-2026, 14:59 -
-
bởi trung30000Em có con amply 12 sò D 718 và e688 , biến áp 15A, 30v 0 30 v, một kênh thì hoạt động bình thường, kênh còn lại nổ bụp bụp, sột sột, đèn tín hiệu nhảy lên vạch max, khoảng 4 đến 5 giây, sau đó đèn tín hiệu trả về mức không, Em thấy như...
-
Channel: Điện thanh
24-07-2026, 13:50 -
-
Trả lời cho Tìm hiểu máy hàn lăn (Rolling Welding)bởi hoang_3ibác cần thì liên hệ Em: mayhanhaivuong.com (0903238399)...
-
Channel: Điện tử công nghiệp
24-07-2026, 10:58 -

Leave a comment: