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

  • Nguyên văn bởi nttam79 Xem bài viết
    - Quá trình biến đổi từ tín hiệu tương tự sang tín hiệu số thông qua 4 bước:
    Filtering (lọc) -> Sampling (lấy mẫu) -> Quantizing (lượng tử hóa) -> Encoding (Mã hóa)
    Quá trình này còn gọi là điều chế PCM (Pulse Code Modulation)

    Filtering: Tín hiệu tương tự được lọc để giới hạn băng thông của tín hiệu, bảo đảm thõa điều kiện của định lý Nyquist (băng thông của tín hiệu analog được lấy mẫu phải nhỏ hơn hoặc bằng 1/2 tần số lấy mẫu)
    Sampling: Ở quá trình này, tín hiệu tương tự sẽ được lấy mẫu liên tục với 1 tần số xác định (tức là số lần lấy mẫu/giây). Ví dụ trong hệ thống audio ghi trên các đĩa CD thì tần số này là 44kHz (tức là lấy mẫu 44000 lần/giây), trong hệ thống thoại (điện thoại cố định) là 8kHz.
    Quantizing: vì giá trị của mỗi mẫu sẽ được biểu diễn bằng 1 con số (1 chuỗi nhị phân), nên số mức biên độ mà ta có thể biễu diễn được là hữu hạn, ví dụ nếu dùng 4bit ta biễu diễn được n=16 mức, 8bit biễu diễn được n=256 mức,... nên ta cần làm tròn giá trị biên độ của mỗi mẫu về các giá trị nguyên gần nhất. Quá trình này là lượng tử hóa.
    Có 2 cách lượng tử hóa:
    - Lượng tử hóa đều: tức là ta chia khoảng biên độ của tín hiệu ra thành n mức đều nhau.
    - Lượng tử hóa không đều: người ta nhận thấy nếu chia đều như vậy sẽ không tốt vì nếu tín hiệu vào có biên độ nhỏ, thì sai số do quá trình lượng tử hóa sẽ lớn, vì vậy người ta chia các mức này không đều nhau, cụ thể khoảng cách giữa các mức sẽ nhỏ hơn ở vùng biên độ nhỏ, và lớn hơn ở vủng biên độ lớn. Tất nhiên việc chia không đều này phải theo 1 qui luật nhất định. Hiện nay có 2 luật dùng phổ biến cho lượng tử hóa không đều là luật A và luật u (muy).
    Coding: mỗi mẫu với biên độ đã được lượng tử hóa sẽ được biễu diễn thành 1 chuỗi nhị phân có chiều dài N bit phù hợp với số mức lượng tử ở trên. Ví dụ trong hệ thống audio trên CD là 16bit, hệ thống thoại của ĐT cố định là 8bit, hệ thống điện thoại di động GSM là 13bit,...

    Vậy cho câu hỏi của em: số bit của PCM độc lập với việc nó lượng tử hóa đều hay không đều. 16bit hay 8bit đều có thể lượng tử hóa đều hoặc không đều.
    Để convert giữa các PCM có số bit mã hóa khác nhau, đơn giản là ta làm tròn để giảm bớt số mức lượng tử của nó (trong trường hợp convert từ số bit lớn hơn sang nhỏ hơn), còn nếu ngược lại, từ số bit nhỏ hơn sang lớn hơn, thông thường người ta dùng các thuật toán nội suy để tính lại các giá trị mẫu nhằm đạt chất lượng tín hiệu tốt hơn.

    Lưu ý bộ mã G.729 mà em định làm là bộ mã âm thanh dạng voice coder, thường dùng cho VoIP, nén tín hiệu thoại dựa trên nguyên lý tiếng nói của con người, nó đòi hỏi mức độ xử lý khá cao, thầy không nghĩ các microcontroller thông thường có thể đảm đương được mà có lẽ cần 1 DSP?
    Em cảm ơn thầy ạ.
    Em vừa đọc qua thì thấy DSP là chip đựoc tối ưu cho xử lý tín hiệu số (âm thanh/hình ảnh đc số hóa), vậy có chip DSP nào chuyên biệt cho G.729 không ạ? Hay các DSP cũng khả trình? (Em search thấy TMS320C54x có liên quan j đó đến G.729 nhưng toàn tiếng Anh, em ngại đọc quá ). Xin thầy chỉ bảo.

    Comment


    • Nguyên văn bởi dhp11591 Xem bài viết
      Em cảm ơn thầy ạ.
      Em vừa đọc qua thì thấy DSP là chip đựoc tối ưu cho xử lý tín hiệu số (âm thanh/hình ảnh đc số hóa), vậy có chip DSP nào chuyên biệt cho G.729 không ạ? Hay các DSP cũng khả trình? (Em search thấy TMS320C54x có liên quan j đó đến G.729 nhưng toàn tiếng Anh, em ngại đọc quá ). Xin thầy chỉ bảo.
      DSP là khả trình, em có thể nạp vào 1 DSP đủ mạnh cả convert PCM lẫn mã hóa G.729.
      Em có thể tìm trên các opensource hoặc các thư viện hỗ trợ của hãng sản xuất DSP đều có các module mã hóa này.

      Comment


      • cho em hỏi tí được không ạ ? DSP ở đây ý có phải là mình nạp âm thanh trực tiếp vào IC rồi đưa nó lên wed ah Thầy, nhưng như em thấy ic này tín hiệu ra rất bé, em thí dụ em đang dùng con ISD1420p khi đưa ra loa thì hầu như không nghe gì, mấy loa vi tính bình thường không phát lên được tín hiệu. vậy thì mình phải đưa lên wed như thế nào ạ Thầy?

        Điện tử viễn thông - Hutech

        Comment


        • Nguyên văn bởi chikichita Xem bài viết
          cho em hỏi tí được không ạ ? DSP ở đây ý có phải là mình nạp âm thanh trực tiếp vào IC rồi đưa nó lên wed ah Thầy, nhưng như em thấy ic này tín hiệu ra rất bé, em thí dụ em đang dùng con ISD1420p khi đưa ra loa thì hầu như không nghe gì, mấy loa vi tính bình thường không phát lên được tín hiệu. vậy thì mình phải đưa lên wed như thế nào ạ Thầy?
          DSP chỉ xử lý tín hiệu số thôi, không đưa output của nó ra loa được, trừ 1 vài DSP có tích hợp sẵn DAC ở ngỏ ra, nhưng công suất tín hiệu ra rất nhỏ, cần có amplifier trước khi ra loa. Đây là đang nói về hardware nhé.

          Còn nếu đưa âm thanh lên web thì trên web có liên quan gì đến hardware đâu, âm thanh trên web chỉ là 1 chuỗi media stream, được gởi xuống client thông qua giao thức RTP (Realtime Transport Protocol) chạy trên nền giao thức UDP.

          Còn cái project mà dhp11591 đang hỏi là truyền âm thanh qua mạng LAN, có thể là giữa hai thiết bị, không có liên quan gì đến web cả (tôi đoán là 1 project nhỏ có liên quan đến VoIP (Voice over Internet Protocol), có thể là bạn đang làm phần codec (mã hóa âm thanh), các giao thức báo hiệu (SIP, H.323,...) thì dễ hơn, microcontroller có thể đảm đương được).
          Last edited by nttam79; 06-03-2013, 14:10.

          Comment


          • ---xóa do post bị lặp lại---
            Last edited by nttam79; 06-03-2013, 14:11.

            Comment


            • Nguyên văn bởi nttam79 Xem bài viết
              DSP chỉ xử lý tín hiệu số thôi, không đưa output của nó ra loa được, trừ 1 vài DSP có tích hợp sẵn DAC ở ngỏ ra, nhưng công suất tín hiệu ra rất nhỏ, cần có amplifier trước khi ra loa. Đây là đang nói về hardware nhé.

              Còn nếu đưa âm thanh lên web thì trên web có liên quan gì đến hardware đâu, âm thanh trên web chỉ là 1 chuỗi media stream, được gởi xuống client thông qua giao thức RTP (Realtime Transport Protocol) chạy trên nền giao thức UDP.

              Còn cái project mà dhp11591 đang hỏi là truyền âm thanh qua mạng LAN, có thể là giữa hai thiết bị, không có liên quan gì đến web cả (tôi đoán là 1 project nhỏ có liên quan đến VoIP (Voice over Internet Protocol), có thể là bạn đang làm phần codec (mã hóa âm thanh), các giao thức báo hiệu (SIP, H.323,...) thì dễ hơn, microcontroller có thể đảm đương được).
              Vâng, mấy tháng trước em đã tìm hiểu qua nhưng tự dưng bị tai nạn nằm 1 chỗ, rồi phải chuyển sang làm LED, h mới tiếp tục được.
              Em cũng định dùng AVR để chạy SIP, từ hôm biết là có loại DSP thì em thấy thoáng hẳn. Ý tưởng của em là dùng DSP xử lý âm thanh rồi truyền mã cho AVR, AVR truyền qua Internet. Nhưng không biết DSP có phải loại khả trình điều khiển bằng command như ENC28J60 không ạ?

              Comment


              • @@! Ảo quá, lại bị trùng!

                Comment


                • Nguyên văn bởi dhp11591 Xem bài viết
                  Vâng, mấy tháng trước em đã tìm hiểu qua nhưng tự dưng bị tai nạn nằm 1 chỗ, rồi phải chuyển sang làm LED, h mới tiếp tục được.
                  Em cũng định dùng AVR để chạy SIP, từ hôm biết là có loại DSP thì em thấy thoáng hẳn. Ý tưởng của em là dùng DSP xử lý âm thanh rồi truyền mã cho AVR, AVR truyền qua Internet. Nhưng không biết DSP có phải loại khả trình điều khiển bằng command như ENC28J60 không ạ?
                  DSP là loại IC khả trình, cần được lập trình riêng (thường bằng ngôn ngữ C) trên compiler riêng của nó (ví dụ như Code Composer Studio của TI cho các DSP của TI), và nạp chương trình vào flash ROM như vi điều khiển. Trong quá trình hoạt động nó có thể được điều khiển bởi Microcontroller (ví dụ như thay đổi bộ mã, on/off,...)
                  Ngoài ra có 1 số DSP đã được thiết kế chuyên biệt cho 1 mục đích nào đó, nạp sẵn chương trình.

                  Nếu em muốn làm 1 terminal VoIP hoàn chỉnh (SIP User Agent) thì có lẽ giải pháp là dùng 1 DSP để nén thoại, output đưa vào 1 buffer, và microcontroller sẽ gửi đi qua giao tiếp mạng, microcontroller cũng đảm nhiệm luôn xử lý giao thức SIP.

                  Hiện nay cũng có 1 số IC dạng SoC (System on Chip) tích hợp luôn DSP và microcontroller, thậm chí có thể cả display, keypad interface, ADC/DAC, audio amplifier,... dùng cho mục đích này. Kiếm 1 con như vậy, lập trình cho nó là có 1 thiết bị VoIP rồi.

                  À, còn 1 giải pháp đơn giản hơn: đừng dùng G.729 nữa, dùng G.711 (không nén, 8kHz sampling, 8bits encoding, A/u law companding). Vậy thì không còn cần DSP nữa, chỉ cần 1 IC codec chuyển trực tiếp audio analog sang G.711 và ngược lại (ví dụ TP3054, mua Nhật Tảo có). Thêm microcontroller điều khiển nữa là đủ. Tuy nhiên băng thông sẽ lớn (stream = 64kbps), khó truyền qua internet nhưng em đang truyền trên LAN mà, lo gì.
                  Last edited by nttam79; 07-03-2013, 11:14.

                  Comment


                  • 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?

                    Comment


                    • Nguyên văn bởi nttam79 Xem bài viết
                      DSP là loại IC khả trình, cần được lập trình riêng (thường bằng ngôn ngữ C) trên compiler riêng của nó (ví dụ như Code Composer Studio của TI cho các DSP của TI), và nạp chương trình vào flash ROM như vi điều khiển. Trong quá trình hoạt động nó có thể được điều khiển bởi Microcontroller (ví dụ như thay đổi bộ mã, on/off,...)
                      Ngoài ra có 1 số DSP đã được thiết kế chuyên biệt cho 1 mục đích nào đó, nạp sẵn chương trình.

                      Nếu em muốn làm 1 terminal VoIP hoàn chỉnh (SIP User Agent) thì có lẽ giải pháp là dùng 1 DSP để nén thoại, output đưa vào 1 buffer, và microcontroller sẽ gửi đi qua giao tiếp mạng, microcontroller cũng đảm nhiệm luôn xử lý giao thức SIP.

                      Hiện nay cũng có 1 số IC dạng SoC (System on Chip) tích hợp luôn DSP và microcontroller, thậm chí có thể cả display, keypad interface, ADC/DAC, audio amplifier,... dùng cho mục đích này. Kiếm 1 con như vậy, lập trình cho nó là có 1 thiết bị VoIP rồi.

                      À, còn 1 giải pháp đơn giản hơn: đừng dùng G.729 nữa, dùng G.711 (không nén, 8kHz sampling, 8bits encoding, A/u law companding). Vậy thì không còn cần DSP nữa, chỉ cần 1 IC codec chuyển trực tiếp audio analog sang G.711 và ngược lại (ví dụ TP3054, mua Nhật Tảo có). Thêm microcontroller điều khiển nữa là đủ. Tuy nhiên băng thông sẽ lớn (stream = 64kbps), khó truyền qua internet nhưng em đang truyền trên LAN mà, lo gì.
                      Vâng, em cảm ơn thầy ạ, vậy là các ý tưởng em đang tính làm thực sự là khả thi.
                      Em từng định dùng G.711 tạm thay cho G.729, thậm chí dùng "ADC của AVR / dùng AVR điều khiển DAC" thay cho chip G.711, tất nhiên là chấp nhận méo xiên xẹo.

                      Comment


                      • do nguồn yếu thôi
                        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?

                        Điện tử viễn thông - Hutech

                        Comment


                        • Nguyên văn bởi yamailuk Xem bài viết
                          Phần khai báo SPI của avr hình như không ổn định khi mình kết hợp với DS1307. Nó gây xung đột và rất dễ bị treo.
                          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!

                          Comment


                          • 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.

                            Comment


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

                              Comment


                              • 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

                                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