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

  • chikichita
    replied
    nhờ bạn debug chương trình mình xem dc ko sao làm hoài ko debug dc bạn ơi chán quáClick image for larger version

Name:	DSC01423.jpg
Views:	1
Size:	88.0 KB
ID:	1362419Click image for larger version

Name:	DSC01424.jpg
Views:	1
Size:	84.5 KB
ID:	1362420Click image for larger version

Name:	DSC01425.jpg
Views:	1
Size:	80.7 KB
ID:	1362421
    bị lỗi khác nữa hixhixx
    Click image for larger version

Name:	Noname1.jpg
Views:	1
Size:	67.3 KB
ID:	1362422
    chuongtrinh viet tren AVR studio.rar

    Leave a comment:


  • chikichita
    replied
    uhm mình thấy rồi thanks bạn nha. mà mình tháo ra cài avr studio rồi mà vẫn bị vậy ko biết tại sao nữa
    Nguyên văn bởi nacdanh90 Xem bài viết
    Hình như hồi trước em gặp lỗi này rồi! Nếu như chưa tìm ra cách sửa anh thử gỡ winavr ra cài lại xem có được ko?

    Sao firmware của anh trong ntAVRnet.h lại có hàm main ạ? em thấy trong ntAVRnet.c cũng có. TIMER_INTERRUPT_HANDLER(SIG_OVERFLOW1) cũng bị lặp 2 lần.

    Leave a comment:


  • nacdanh90
    replied
    Hình như hồi trước em gặp lỗi này rồi! Nếu như chưa tìm ra cách sửa anh thử gỡ winavr ra cài lại xem có được ko?

    Sao firmware của anh trong ntAVRnet.h lại có hàm main ạ? em thấy trong ntAVRnet.c cũng có. TIMER_INTERRUPT_HANDLER(SIG_OVERFLOW1) cũng bị lặp 2 lần.
    Last edited by nacdanh90; 04-06-2012, 16:39.

    Leave a comment:


  • chikichita
    replied
    mình dùng card nạp stk500 isp/hv của thiên minh mà sao ko dc, bình thường quen sài trên codevisionAVR rồi nên giờ chuyển qua AVR studio chưa quen mong mọi người giúp đỡ

    Leave a comment:


  • chikichita
    replied
    co ai xem dum minh chuong trinh minh sai cho nao khong. thanksClick image for larger version

Name:	Noname.jpg
Views:	1
Size:	87.0 KB
ID:	1362394

    chuongtrinh viet tren AVR studio.rar

    Leave a comment:


  • chikichita
    replied
    thêm 1 hinh nữa
    Click image for larger version

Name:	6.jpg
Views:	1
Size:	23.1 KB
ID:	1362373

    Leave a comment:


  • chikichita
    replied
    có chương trình này muốn đưa ra để mọi người cùng bàn luận PIC16f877a + ENC28j60 dùng CCSClick image for larger version

Name:	1.jpg
Views:	1
Size:	58.0 KB
ID:	1362368Click image for larger version

Name:	2.jpg
Views:	1
Size:	53.4 KB
ID:	1362369Click image for larger version

Name:	3.jpg
Views:	1
Size:	31.8 KB
ID:	1362370Click image for larger version

Name:	4.jpg
Views:	1
Size:	41.8 KB
ID:	1362371Click image for larger version

Name:	5.jpg
Views:	1
Size:	38.6 KB
ID:	1362372


    #include "tcpip/stacktsk.c" //include Microchip's TCP/IP stack
    #include "ccshelper.c" //include CCS's PICDEM.net/PICNET helper
    functions
    #include "ccshelperui.c"
    /////***** WEB PAGES STORED INTO PROGRAM MEMORY *****/////
    //The following escape characters are used:
    // %0 - AN0
    // %1 - AN1
    // %2 - BUTTON0
    // %3 - BUTTON1
    // %4 - Current LCD Message
    // %5 - CHECKED if LED1 is ON
    // %6 - CHECKED if LED1 is OFF
    // %7 - CHECKED if LED2 is ON
    // %8 - CHECKED if LED2 is OFF
    // %9 - Temperature (EWL ONLY)
    // %F - Message stack
    //here is this examples / page
    const char HTML_INDEX_PAGE[]=
    "<html><body bgcolor=#FFFFFF text=#000000>
    <br/>
    <h1>CCS HTTP/CGI EXAMPLE</h1>
    <h1>leethanhnc_nhim</h1>
    <p><b><i>%F</i></b></p>
    <form method=post>
    <table border=0>
    <tr><th>LCD:</th><td colspan=4><input type=\"text\" name=\"lcd\"
    size=20 maxlength=16 value=\"%4\"></td></tr>
    <tr><th>LED1:</th><td><input type=\"radio\" name=\"led1\" value=1
    %5></td><td>ON</td>
    <td><input type=\"radio\" name=\"led1\" value=0
    %6></td><td>OFF</td></tr>
    <tr><th>LED2:</th><td><input type=\"radio\" name=\"led2\" value=1
    %7></td><td>ON</td>
    <td><input type=\"radio\" name=\"led2\" value=0
    %8></td><td>OFF</td></tr>
    </table>
    <input type=\"hidden\" name=\"msgStack\" value=\"LCD/LEDs
    changed!\">
    <br/><input type=\"submit\"></form>
    <p><a href=\"/analog\">Analog Readings</a></p>
    </body></html>";
    //<img src=\"http://www.ccsinfo.com/images/CCSlogotiny.gif\">
    const char HTML_ANALOG_PAGE[]=
    "<html><body bgcolor=#ffffff text=#000000>
    <h1>leethanhnc_nhim</h1>
    <h1>PICNET ADC READINGS</h1>
    <p>%0</p>
    <br/>%1
    <p>%2</p>
    <br/>%3
    <p>%9</p>
    <p><a href=\"/\">Change LCD/LEDs</a></p>
    </body></html>";
    /////***** END OF WEB PAGES STORED INTO PROGRAM MEMORY *****/////
    char g_HTTPMessageStack[20]="";
    char g_HTTPLCDMessage[20]="CCS Webserver";
    //this is a callback function to the HTTP stack. see http.c
    //this demo provides to web "pages", an index (/) and an about
    page (/about)
    int32 http_get_page(char *file_str)
    {
    int32 file_loc=0;
    static char index[]="/";
    static char about[]="/analog";
    if (stricmp(file_str,index)==0)
    file_loc=label_address(HTML_INDEX_PAGE);
    else if (stricmp(file_str,about)==0)
    file_loc=label_address(HTML_ANALOG_PAGE);
    return(file_loc);
    }
    //this isn't a required callback, this is an application function
    being
    //used by http_format_char.
    int http_format_char_checked(int8 flag, char *str)
    {
    int len=0;
    if (flag)
    {
    sprintf(str,"checked=\"checked\"");
    len = 7;
    }
    return(len);
    }
    //this is a callback function to the HTTP stack. see http.c
    //The following escape characters are used:
    // %0 - AN0
    // %1 - AN1
    // %2 - BUTTON0
    // %3 - BUTTON1
    // %4 - Current LCD Message
    // %5 - CHECKED if LED1 is ON
    // %6 - CHECKED if LED1 is OFF
    // %7 - CHECKED if LED2 is ON
    // %8 - CHECKED if LED2 is OFF
    // %F - Message stack
    int8 http_format_char(int32 file, char id, char *str, int8
    max_ret) {
    char new_str[25];
    int8 len=0;
    int8 i;
    switch(id) {
    #if defined(ADC_CHAN_0)
    case '0':
    set_adc_channel(ADC_CHAN_0);
    delay_us(100);
    i=read_adc();
    sprintf(new_str,"<B>AN%U = </B>0x%X",ADC_CHAN_0,i);
    len=strlen(new_str);
    break;
    #endif
    #if defined(ADC_CHAN_1)
    case '1':
    set_adc_channel(ADC_CHAN_1);
    delay_us(100);
    i=read_adc();
    sprintf(new_str,"<B>AN%U = </B>0x%X",ADC_CHAN_1,i);
    len=strlen(new_str);
    break;
    #endif
    #if defined(USER_BUTTON1)
    case '2':
    sprintf(new_str,"<B>BTN1 = </B>");
    if (!BUTTON_PRESSED(USER_BUTTON1))
    sprintf(&new_str[14], "UP");
    else
    sprintf(&new_str[14], "DOWN");
    len=strlen(new_str);
    break;
    #endif
    #if defined(USER_BUTTON2)
    case '3':
    sprintf(new_str,"<B>BTN2 = </B>");
    if (!BUTTON_PRESSED(USER_BUTTON2))
    sprintf(&new_str[14], "UP");
    else
    sprintf(&new_str[14], "DOWN");
    len=strlen(new_str);
    break;
    #endif
    case '4':
    strncpy(new_str, g_HTTPLCDMessage, sizeof(new_str));
    new_str[sizeof(new_str)-1] = 0;
    len = strlen(new_str);
    break;
    case '5':
    len = http_format_char_checked(g_LEDState[0], new_str);
    break;
    case '6':
    len = http_format_char_checked(!g_LEDState[0], new_str);
    break;
    case '7':
    len = http_format_char_checked(g_LEDState[1], new_str);
    break;
    case '8':
    len = http_format_char_checked(!g_LEDState[1], new_str);
    break;
    #if STACK_USE_TEMP
    case '9':
    sprintf(new_str, "Temp: %6.2w&ordm F", read_full_temp());
    len=strlen(new_str);
    new_str[len]=0;
    break;
    #endif
    case 'F':
    strncpy(new_str, g_HTTPMessageStack, sizeof(new_str));
    new_str[sizeof(new_str)-1] = 0;
    len = strlen(new_str);
    g_HTTPMessageStack[0] = 0;
    break;
    }
    if (len){
    strncpy(str, new_str, max_ret);
    }else
    *str=0;
    return(len);
    }
    //this is a callback function to the HTTP stack. see http.c
    //in this example it verifies that "pwd" is "master", if it is
    //then it sets led1 and led2 ("led1" and "led2") based on their
    value
    //and changes the lcd screen ("lcd").
    void http_exec_cgi(int32 file, char *key, char *val) {
    static char led1_key[]="led1";
    static char led2_key[]="led2";
    static char lcd_key[]="lcd";
    static char msgStack_key[]="msgStack";
    int8 v;
    // #if defined(USER_LED1)
    if (stricmp(key,led1_key)==0) {
    v=atoi(val);
    g_LEDState[0]=v;
    }
    // #endif
    // #if defined(USER_LED2)
    if (stricmp(key,led2_key)==0) {
    v=atoi(val);
    g_LEDState[1]=v;
    }
    // #endif
    if (stricmp(key, msgStack_key)==0)
    {
    strncpy(g_HTTPMessageStack, val,
    sizeof(g_HTTPMessageStack));
    g_HTTPMessageStack[sizeof(g_HTTPMessageStack)-1] = 0;
    }
    if (stricmp(key,lcd_key)==0) {
    strncpy(g_HTTPLCDMessage, val, sizeof(g_HTTPLCDMessage));
    g_HTTPLCDMessage[sizeof(g_HTTPLCDMessage)-1] = 0;
    #if STACK_USE_PICDEM_LCD
    printf(lcd_putc,"\f%s",val);
    #endif
    }
    }
    void splash(void) {
    #IF STACK_USE_PICDEM_LCD
    printf(lcd_putc,"\fCCS Webserver");
    #ENDIF
    #if STACK_USE_ANNOUNCE
    InitAnnounce(" - EX_ST_WEBSERVER");
    #endif
    #if STACK_USE_SERIAL
    fprintf(USER,"\r\n\r\nCCS ex_st_webserver\r\n");
    ui_settings();
    ui_menu();
    #endif
    }
    void main(void)
    {
    fprintf(USER,"Init...");
    init(); // ccshelpers.c
    printf(lcd_putc,"\nAll Init OK ");
    fprintf(USER,"\nInit OK");
    delay_ms(1000);
    splash();
    while (TRUE) {
    restart_wdt();
    #if STACK_USE_SERIAL
    if (kbhit(USER)) {
    ui_handle();
    }
    #endif
    //every second: refresh current IP, blink LED
    if (second_counter>=1) {
    display_ip_lcd();
    #if defined(USER_LED3)
    output_toggle(USER_LED3);
    #endif
    second_counter=0;
    }
    //just something to test the buttons
    #if STACK_USE_CCS_PICNET
    if (BUTTON_PRESSED(USER_BUTTON1))
    {
    output_low(USER_LED1);
    }
    else
    {
    if (g_LEDState[0])
    output_low(USER_LED1);
    else
    {
    output_high(USER_LED1);
    }
    }
    if (BUTTON_PRESSED(USER_BUTTON2))
    {
    output_low(USER_LED2);
    }
    else
    {
    if (g_LEDState[1])
    output_low(USER_LED2);
    else
    {
    output_high(USER_LED2);
    }
    }
    #elif STACK_USE_CCS_PICENS
    if (g_LEDState[0])
    output_high(USER_LED1);
    else
    {
    output_low(USER_LED1);
    }
    if (g_LEDState[1])
    output_high(USER_LED2);
    else
    {
    output_low(USER_LED2);
    }
    if (BUTTON_PRESSED(USER_BUTTON1)) output_low(USER_LED3);
    #endif
    #if STACK_USE_PPP
    if (ppp_is_connected()) {
    #endif
    StackTask(); //Microchip's TCP/IP stack handler.
    Must be called routinely.
    #if STACK_USE_PPP
    }
    #endif
    }
    }

    Leave a comment:


  • docgiaclong
    replied
    Mọi người cho em hỏi làm như thế nào để gửi ADC từ board đến PC vậy ạ.

    Leave a comment:


  • nacdanh90
    replied
    Thầy và các anh cho em hỏi. Trong giao thức HTTP, khi hai bên client và server đã kết nối thì sau đó client có thể gửi bao nhiêu request đến server cũng được ạ? Trong một phiên TCP thì có giới hạn là client chỉ được gửi số lần hữu hạn request đến server không ạ? Hay là sau khi tạo kết nối client có thể gửi bao nhiêu request tùy ý miến là lần request tiếp theo vẫn chưa quá khoảng thời gian Keep alive mà hai bên đã thỏa thuận với nhau ạ?

    Leave a comment:


  • nacdanh90
    replied
    hi`! vâng ạ! chắc kiến thức của em còn hạn chế. Mong bác chém nhẹ! hi. Tại em thấy PC và modem nhà em nối với nhau bằng cáp song song nên vậy!

    Leave a comment:


  • wind-gon
    replied
    Nguyên văn bởi nacdanh90 Xem bài viết
    Vâng ạ! Em cảm ơn anh wind-gon. Em xin mạo muội đóng góp ý kiến của mình về câu hỏi của anh bên trên: Em tưởng là nối các thiết bị như cùng chức năng như: PC với PC; PC với mạch Enc28j60 thì mới dùng cap chéo chứ ạ? còn nối từ PC hoặc Enc28j60 đến modem hoặc swich thì dùng cap song song chứ ạ? Em nghĩ như vậy ko biết có đúng không? nếu sai mong các anh chém nhẹ! Hi.
    Theo lý thuyết là vậy .Nhưng bạn xem PC với modem bây giờ nối với nhau bằng dây nào??cáp chéo vẫn ok đó.

    Leave a comment:


  • nacdanh90
    replied
    Nguyên văn bởi wind-gon Xem bài viết
    Trước đây, mỗi kết nối TCP sẽ thực hiện chỉ 1 request HTTP và 1 response, nghĩa là nếu client request 2 lần thì sẽ cần 2 phiên kết nối TCP. Điều này gây ra nhiều bất cập, ảnh hưởng rất nhiều đến hiệu năng hoạt động của server.
    Hiện nay, giao thức HTTP đã hỗ trợ một phiên kết nối TCP cho phép nhiều HTTP request

    Client không cần phải chờ Server response mới có thể request và ngược lại.
    Hoạt động HTTP đơn giản nhất là GET. Đó là cách để Client lấy một đối tượng hoặc tài nguyên nào đó trên Server. Các trình duyệt sẽ yêu cầu một website từ Server với GET.
    Vâng ạ! Em cảm ơn anh wind-gon. Em xin mạo muội đóng góp ý kiến của mình về câu hỏi của anh bên trên: Em tưởng là nối các thiết bị như cùng chức năng như: PC với PC; PC với mạch Enc28j60 thì mới dùng cap chéo chứ ạ? còn nối từ PC hoặc Enc28j60 đến modem hoặc swich thì dùng cap song song chứ ạ? Em nghĩ như vậy ko biết có đúng không? nếu sai mong các anh chém nhẹ! Hi.

    Leave a comment:


  • wind-gon
    replied
    Nguyên văn bởi nacdanh90 Xem bài viết
    Vâng ạ! em cảm ơn thầy! Vậy nếu ko muốn dùng 1 kết nối TCP cho nhiều request/response thì ta bỏ 2 trường này đi đc ạ! E thấy máy tính hình như vẫn dùng 1 phiên tcp cho nhiều cặp request và response.
    Trước đây, mỗi kết nối TCP sẽ thực hiện chỉ 1 request HTTP và 1 response, nghĩa là nếu client request 2 lần thì sẽ cần 2 phiên kết nối TCP. Điều này gây ra nhiều bất cập, ảnh hưởng rất nhiều đến hiệu năng hoạt động của server.
    Hiện nay, giao thức HTTP đã hỗ trợ một phiên kết nối TCP cho phép nhiều HTTP request

    Client không cần phải chờ Server response mới có thể request và ngược lại.
    Hoạt động HTTP đơn giản nhất là GET. Đó là cách để Client lấy một đối tượng hoặc tài nguyên nào đó trên Server. Các trình duyệt sẽ yêu cầu một website từ Server với GET.

    Leave a comment:


  • wind-gon
    replied
    Nguyên văn bởi chikichita Xem bài viết
    mọi người giúp em với bị báo lỗi này là sao vậy
    [ATTACH=CONFIG]44637[/ATTACH]
    bạn tham khảo ở đây để sửa:
    AVR Freaks :: View topic - Error Code: -2147467259:

    Thân.

    Leave a comment:


  • wind-gon
    replied
    anh nttam79,hieppro89, dinh_dong ...

    Em dùng Cáp Chéo để nối máy PC và mạch vào modem 4 cổng.Em đặt PC và mạch đều địa chỉ IP động.
    Khi em gắn cáp chéo từ mạch vào modem thì thấy đèn cổng modem ko sáng.
    Mọi người hướng dẫn em cách để ping từ PC tới mạch với.

    Mong anh Tâm và mấy bạn giúp.

    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

Đang tải...
X