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

  • stevenboy
    replied
    Nguyên văn bởi Ngoc Anh 91 Xem bài viết
    Lại gặp vấn đề rồi các anh ơi:
    //If POST method--------------------------------------------
    else if(httpSessionTable[i].rqst.method == HTTP_REQUEST_POST)
    {
    //Update POST data
    if(findstr(PSTR("Submit=Start"),buffer,bufferLen) != -1)
    {
    //OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    //================ DIEU KHIEN THIET BI =============
    //OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

    if((findstr(PSTR("Led1=ON"),buffer,bufferLen)) != -1)
    {
    sbi(PORTD,LED1);
    }
    else
    {
    cbi(PORTD,LED1);
    }
    //---------------------------------------------------
    if((findstr(PSTR("Led2=ON"),buffer,bufferLen)) != -1)
    {
    sbi(PORTD,LED2);
    }
    else
    {
    cbi(PORTD,LED2);
    }
    //---------------------------------------------------
    if((findstr(PSTR("Led3=ON"),buffer,bufferLen)) != -1)
    {
    sbi(PORTD,LED3);
    }
    else
    {
    cbi(PORTD,LED3);
    }
    //---------------------------------------------------
    if((findstr(PSTR("Led4=ON"),buffer,bufferLen)) != -1)
    {
    sbi(PORTD,LED4);
    }
    else
    {
    cbi(PORTD,LED4);
    }
    //---------------------------------------------------

    if((findstr(PSTR("Led5=ON"),buffer,bufferLen)) != -1)
    {
    sbi(PORTD,LED5);
    }
    else
    {
    cbi(PORTD,LED5);
    }

    //================================================== ================
    Đây là phần điều khiển 5 con led đơn của em? Điều khiển được rồi,nhưng sao con led sáng mờ căm? Em test bằng code khác thì led sáng bình thường! Tưởng do LCD, nên rút LCD ra, ai ngờ cũng vậy, sao vậy ta? Em chỉ mới thay đổi hàm HTTPDataIn(), còn hàm HTTPSent() em thay đổi thế này:
    void HTTPSend(const prog_char progdata[],unsigned int dataLen,struct tcpSession *pSession, unsigned char endData)
    {
    unsigned int i;
    DDRD=0xFF;
    unsigned int srcDataIdx = 0;
    unsigned char* dataBuffer;
    unsigned char Flags;
    //unsigned char* tmpStr;
    unsigned char tmpChr,tmpVar;

    Flags = TCP_PSH_FLAG;
    dataBuffer = ethGetBuffer() + ETH_HEADER_LEN + IP_HEADER_LEN + TCP_HEADER_LEN;
    if(dataLen == 0)
    {
    Flags |= TCP_ACK_FLAG;
    if(endData)
    {
    if(srcDataIdx == dataLen)
    {
    Flags |= TCP_FIN_FLAG;
    pSession->sesState = TCP_STATE_FIN_WAIT1;
    }
    }
    TCPPackedSend(pSession,Flags,0,dataBuffer);
    }
    while(srcDataIdx < dataLen)
    {
    i = 0;
    while(i<MAX_SEGMENT_SIZE)
    {
    tmpChr = pgm_read_byte(progdata + srcDataIdx++);

    //OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOO
    //================ GUI TRANG THAI THIET BI =============
    //OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOO

    if(tmpChr == '%')
    { //Truong hop ung voi dieu khien relay ("%Ledx)
    if( (i + 9) > MAX_SEGMENT_SIZE)
    { //Neu khong con du cho trong tren buffer
    srcDataIdx--;
    break;
    }
    //Tiep tuc neu du cho trong tren buffer
    tmpVar = pgm_read_byte(progdata + srcDataIdx + 3) - 0x30;
    if((pgm_read_byte(progdata + srcDataIdx) == 'L')&&(pgm_read_byte(progdata + srcDataIdx + 1) == 'E')&&(pgm_read_byte(progdata + srcDataIdx + 1) == '1'))
    {
    if(LED1==1)
    {//checked
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    else
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'w';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    }
    if((pgm_read_byte(progdata + srcDataIdx) == 'L')&&(pgm_read_byte(progdata + srcDataIdx + 1) == 'E')&&(pgm_read_byte(progdata + srcDataIdx + 1) == '2'))
    {
    if(LED2==1)
    {//checked
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    else
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'w';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    }
    if((pgm_read_byte(progdata + srcDataIdx) == 'L')&&(pgm_read_byte(progdata + srcDataIdx + 1) == 'E')&&(pgm_read_byte(progdata + srcDataIdx + 1) == '3'))
    {
    if(LED3==1)
    {//checked
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    else
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'w';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    }
    if((pgm_read_byte(progdata + srcDataIdx) == 'L')&&(pgm_read_byte(progdata + srcDataIdx + 1) == 'E')&&(pgm_read_byte(progdata + srcDataIdx + 1) == '4'))
    {
    if(LED4==1)
    {//checked
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    else
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'w';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    }
    if((pgm_read_byte(progdata + srcDataIdx) == 'L')&&(pgm_read_byte(progdata + srcDataIdx + 1) == 'E')&&(pgm_read_byte(progdata + srcDataIdx + 1) == '5'))
    {
    if(LED5==1)
    {//checked
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    else
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'w';dataBuffer[i++] = ' ';
    srcDataIdx += 5;
    }
    }
    }
    dataBuffer[i++] = tmpChr; //Copy data to tcp data buffer

    //========================== END =======================
    if(srcDataIdx==dataLen)
    {
    break;
    }
    }
    Flags |= TCP_ACK_FLAG;
    if(endData)
    {
    if(srcDataIdx == dataLen)
    {
    Flags |= TCP_FIN_FLAG;
    pSession->sesState = TCP_STATE_FIN_WAIT1;
    }
    }
    TCPPackedSend(pSession,Flags,i,dataBuffer);
    //delay_ms(100);
    #ifdef NETSTACK_DEBUG
    printf("Sent %d byte\r\n",srcDataIdx);
    #endif
    }
    }
    Biên dịch hok có lỗi, nạp OK, nhưng ping không được?
    bạn sửa được chưa vậy nó bị lỗi gì thế
    Last edited by stevenboy; 18-03-2013, 15:02.

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi lu_lu Xem bài viết
    Có bác nào cho em hỏi, trong cái project em down về, hàm httpInit() không dùng tới trong ntAVRnet.c nhưng vẫn điều khiển được thiết bị, rõ ràng là phải đăng nhập admin:1234 mới điều khiển được mà? Khó nghĩ quá!
    Bạn xem trang 56, #556 mình có nói về cách sửa lỗi này

    Nguyên văn bởi lu_lu Xem bài viết
    Có bác nào có Project đầy đủ về đề tài này không vậy các bác, cho em xin với!
    Mỗi người viết mỗi kiểu tùy vào phần cứng, thấy chỉ cho phần xương sống là truyền tải được lệch, giờ chỉ việc bắt lệch và thực hiện thôi, nếu muốn có sẵn bạn liên hệ tme hình như có bán đó

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi ga_kon Xem bài viết

    if((buffer[i] == 'l')&&(buffer[i+1] == 'c')&&(buffer[i+2] == 'd')&&(buffer[i+3] == '1'))
    {
    while(bufer[i]!=0x0a) // Nhan phim Enter
    {
    LCD_PRINT(buffer[i++]);
    }
    }
    Thứ nhất: ở đây i bắt đầu khi bắt được ký tự "l" theo bảng mã ascii, nên đúng ra phải lấy chuỗi này sau đó 5 ký tự nữa, lưu ý phải xử lý trước khi xuất vì còn ký tự "+" nếu chuỗi nhập vào có khoảng trắng

    Leave a comment:


  • lu_lu
    replied
    Có bác nào có Project đầy đủ về đề tài này không vậy các bác, cho em xin với!

    Leave a comment:


  • lu_lu
    replied
    Có bác nào cho em hỏi, trong cái project em down về, hàm httpInit() không dùng tới trong ntAVRnet.c nhưng vẫn điều khiển được thiết bị, rõ ràng là phải đăng nhập admin:1234 mới điều khiển được mà? Khó nghĩ quá!

    Leave a comment:


  • ga_kon
    replied
    Webpage như thế này:
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led1\" value=\"ON\"%LE1>LED 1</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led2\" value=\"ON\"%LE2>LED 2</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led3\" value=\"ON\"%LE3>LED 3</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led4\" value=\"ON\"%LE4>LED 4</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led5\" value=\"ON\"%LE5>LED 5</p>"
    "<input name=\"lcd1\" size=\"16\" maxlength=\"16\" type=\"text\" />LCD Line 1<br />"
    "<input name=\"lcd2\" size=\"16\" maxlength=\"16\" type=\"text\" />LCD Line 2<br />"
    "<p align=\"center\"><input type=\"submit\" value=\"Start\" name=\"Submit\" />"

    Vậy có phải:
    lcd1=<chuỗi thứ nhất nhập vào>
    lcd2=<chuỗi thứ hai nhập vào>

    Nếu muốn tìm được chuỗi lưu trong lcd1 có phải ta viết trong phần http POST là:

    if((buffer[i] == 'l')&&(buffer[i+1] == 'c')&&(buffer[i+2] == 'd')&&(buffer[i+3] == '1'))
    {
    while(bufer[i]!=0x0a) // Nhan phim Enter
    {
    LCD_PRINT(buffer[i++]);
    }
    }

    Leave a comment:


  • ga_kon
    replied
    Là sao? A chỉ cụ thể hơn được không ạ? Em đang bí phần này?

    Leave a comment:


  • aaahhhh
    replied
    Nguyên văn bởi ga_kon Xem bài viết
    Có ai xử lí được chuổi kí tự gửi về LCD trên Enthernet Board không? Chỉ dùm em với! Nó có giống với xử lí cho Relay hay ADC không?
    giống thôi, mà như vậy thì thêm phần tách chuỗi nữa

    Leave a comment:


  • ga_kon
    replied
    Có ai xử lí được chuổi kí tự gửi về LCD trên Enthernet Board không? Chỉ dùm em với! Nó có giống với xử lí cho Relay hay ADC không?

    Leave a comment:


  • titchuot
    replied
    Cần anh giúp đỡ.

    Nguyên văn bởi yamailuk Xem bài viết
    Trong đó a có file hướng dẫn rồi mà, hôm bữa nhờ thầy up file mô phỏng này lên #1 nhưng không được vì bài quá 72h không sửa được.
    Để mô phỏng được thì cần:
    + Cắm line vì project không viết cho wifi vì cấu trúc khung dữ liệu khác nhau
    + Cài proteus và wincap
    Mẹo test xem được chưa là: mở Explorer16 with Ethernet PICtail.DSN trong thư mục C:\Program Files (x86)\Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM MPLAB Viewer\Eval Boards\Ethernet (nếu khác ổ đĩa thì change lại cho đúng) (bản này microchip viết cho pic)
    nếu mô phỏng bình thường thì chắc chắn là code hex bạn nạp vào avr lỗi.
    + Kiểm tra lại xung nhịp thạch anh trong code.
    //
    Em đã làm như anh bảo nhưng không được, e cài win Xp thử thì làm được rồi, e nghĩ là do ứng dụng nào đó chiếm port 80 của mình
    Em cám ơn a nhé, bây giờ em vào mô phỏng được rồi.
    Và bây giờ e sẽ từ từ đọc và tìm hiểu thật kỹ.
    Có j khó khăn mong anh giúp đỡ nhé!
    Cám ơn anh nhiều

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi stevenboy Xem bài viết
    là sao bạn có thể giải thích rõ giùm mình dc ko. cái này minh ko rành cho lắm
    Nghĩa là bạn phải cài đặt dịch vụ NAT cho modem.
    Khi bạn cắm line vào Modem nó sẽ cấp phát động ip cho mô đun, và ip này là private chứ không phải public ip, nên từ bên ngoài mạng sẽ không kết nối được với mô đun.
    NAT sẽ thay thế ip private thành ip public động mà ISP cấp cho modem của chúng ta.
    Sơ sơ là như vậy, bạn đọc lại từ đầu, thầy tâm có nói về NAT.
    Bạn không nói tên modem nên mình không hướng dẫn được, bạn search google cách setup NAT nhé

    Leave a comment:


  • stevenboy
    replied
    là sao bạn có thể giải thích rõ giùm mình dc ko. cái này minh ko rành cho lắm

    Leave a comment:


  • aaahhhh
    replied
    Nguyên văn bởi stevenboy Xem bài viết
    Thầy cho e hỏi địa chỉ WAN để từ Internet có thể Ping dc đến mạch.
    vào whatsmyip.org, muốn ping dc thì phải vấu hình nat nữa

    Leave a comment:


  • stevenboy
    replied
    Thầy cho e hỏi địa chỉ WAN để từ Internet có thể Ping dc đến mạch.

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi titchuot Xem bài viết
    Anh ơi, a mô phỏng như vậy là dùng winpcap đúng không ạ.
    Hướng dẫn cho em với, so em cài wincap roi mà truy cap dia chi ip khong dc.
    thanks a!
    Trong đó a có file hướng dẫn rồi mà, hôm bữa nhờ thầy up file mô phỏng này lên #1 nhưng không được vì bài quá 72h không sửa được.
    Để mô phỏng được thì cần:
    + Cắm line vì project không viết cho wifi vì cấu trúc khung dữ liệu khác nhau
    + Cài proteus và wincap
    Mẹo test xem được chưa là: mở Explorer16 with Ethernet PICtail.DSN trong thư mục C:\Program Files (x86)\Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM MPLAB Viewer\Eval Boards\Ethernet (nếu khác ổ đĩa thì change lại cho đúng) (bản này microchip viết cho pic)
    nếu mô phỏng bình thường thì chắc chắn là code hex bạn nạp vào avr lỗi.
    + Kiểm tra lại xung nhịp thạch anh trong code.

    Leave a comment:

Về tác giả

Collapse

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

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

Collapse

  • Andrea14
    Vấn đề về tốc độ quay
    bởi Andrea14
    Chào mọi người,

    Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
    Hôm qua, 12:42
  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
  • afrendly
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi afrendly
    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
    04-12-2025, 01:27
Đang tải...
X