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

  • titchuot
    replied
    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!

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • Ngoc Anh 91
    replied
    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?

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • dhp11591
    replied
    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 ạ?

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • stevenboy
    replied
    E đã chỉnh lại và ping được rồi. do lúc đầu e hok biết nên e khia báo IP giống nhau nên khi ping nó giống.E đã làm dc rùi thanks thầy. đề tài của e là điều khiển xe wa mạng internet tìm được tài liệu này của thầy giúp e rất nhiều.

    Leave a comment:


  • nttam79
    replied
    Ủa, sao em khai báo IP cho máy tính giống với IP của mạch à, liên quan gì tới COM??? COM port (dùng uart) và ping là hai vấn đề hoàn toàn không dính dáng gì đến nhan hết. Em đang mong nhận được gì ở Hyper terminal? Cổng COM là để kết nối với uart của VĐK thôi chứ (dùng hyper terminal để nhận). Em định dùng Hyper terminal để ping à?

    Leave a comment:


  • stevenboy
    replied
    Click image for larger version

Name:	sss.png
Views:	1
Size:	45.9 KB
ID:	1375105
    e đã khai báo lại như vậy
    #define IPADDRESS IPDOT(10,0,0,7)
    #define NETMASK IPDOT(255,0,0,0)
    #define GATEWAY IPDOT(10,0,0,2)
    Nhưng khi ping thì nó vẫn giống như khi chưa có com. về phần cứng thì bỏad của e chỉ ko có LCD e nghĩ cái đó cũng ko ảnh hưởng. Tại e cũng chỉ mới học về phần này mong dc thầy 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

  • 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