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

  • yamailuk
    replied
    Nguyên văn bởi lu_lu Xem bài viết
    Thầy xem hộ cho em cái code này, em không biết tại sao nó vẫn chưa cập nhật được trạng thái các của Led1 và Led2! Mong thầy giúp đỡ!
    ntAVRnet.rar
    Mình chưa xem code nhưng với những dấu hiệu bạn nêu ra thì chắc chắn là do code sai.
    Như thầy đã giải thích thì muốn đưa trạng thái thì chỉ cần tìm %ADx và thay đổi nó
    Như vậy có 2 việc cần làm:
    + Lấy trạng thái thiết bị
    + Thay đổi %AD
    Theo như trên thì có thể nói rằng bạn chưa lấy được trạng thái thiết bị để đưa lên mà thôi.
    Vậy vấn đề còn lại là lấy trạng thái chân điều khiển thiết bị đúng chưa?
    Muốn kiểm tra được thì bạn phải hiểu cái trình dịch và ngôn ngữ bạn sử dụng? AVR Studio thì khác CodeVisionAVR, dùng C thì khác dùng ASM.
    Còn muốn kiểm tra phương pháp bạn lấy trạng thái thì bạn printf nó ra UART và check.
    Mình đoán là nó lấy sai thôi. Kiểm tra thì nó hơi ngược lại với điều khiển một chút hay nói cách khác bạn điều khiển được thì bạn phải lấy được nếu bạn biết viết code hoặc ít nhất bạn đọc hiểu code đó nếu không phải bạn viết.
    Tinh thần của project này chỉ là giúp bạn truyền được thông tin qua mạng, các vấn đề liên quan sâu đến phần cứng theo mình bạn phải tự giải quyết như RTC DS1307 chẳng hạn trừ khi bạn làm phần cứng giống hệt thầy thì rất có thể thầy giúp được bạn

    Theo mình bạn nên học hết 10 bài của trang này: http://www.hocavr.com
    Cách đây 5 tháng mình cũng bắt đầu từ đây
    Nhớ hồi đó mình toàn quen dùng 8051. Đến lúc học con này, cái nan giải cơ bản nhất mà mình mất nhiều thời gian nhất là làm sao điều khiển được 1 chân của nó và đọc được trạng thái chân đó. Mình nghĩ rất có thể bạn cũng đang chỉ mới tới gian đoạn này ( hơn 3 ngày mới tìm ra được). Hồi đó là làm điều khiển qua SMS, module sim 548 dùng giao tiếp UART nên mình phải viết từ UART đi lên, mô phỏng trên proteus, viết giao tiếp truyền được thông tin điều khiển được rồi, nhưng loay hoay mãi k dk được 1 chân vì toàn ví dụ port. Nên cứ thực hiện lệnh mới thì lại mất lệnh cũ. Rồi làm tiếp LCD, ADC, RTC theo gợi ý điều khiển theo nhiệt và hẹn giờ của thầy. Nói như vậy để thấy, không có cách nào đi từ ngọn xuống gốc đâu bạn ah. Và cái giao tiếp ethernet này là một cái ngọn rất cao.
    Last edited by yamailuk; 27-03-2013, 02:11.

    Leave a comment:


  • lu_lu
    replied
    Nguyên văn bởi nttam79 Xem bài viết
    Đoạn trên là do các bạn khác phát triển đấy nhé, ko phải từ code gốc. Tuy nhiên có thể trả lời vấn đề của bạn như vầy:
    1-
    Code:
    if(tmpChr == '%')
    ...
    if((pgm_read_byte(progdata + srcDataIdx) == 'L') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D'))
    Như vậy là trước tìm ký tự '%', sau đó tìm ký tự 'L' và 'D' của chuỗi "%LDx" (x=1,2,3,4)
    tmpVar = pgm_read_byte(progdata + srcDataIdx + 2) - 0x30;
    Vậy tmpVar = 1 nếu là "%LD1", ...

    2-Chỗ này bạn coi qua ngôn ngữ HTML là hiểu liền, giải thích ngắn gọn thì như vầy:
    <input type="checkbox" name="Led5" value="ON" checked/> là một ô checkbox (không có chữ kèm theo), với trạng thái được check.
    <input type="checkbox" name="Led5" value="ON"/> là một ô checkbox , với trạng thái không check.
    <p align="left">chuỗi</p> là một dòng canh lề trái, có nội dung là chuỗi.
    Vậy thì <p align="left"><input type="checkbox" name="Led5" value="ON"/>LED 3</p> là 1 dòng trên đó có 1 ô check, bên phải là chữ LED 3.
    Có vậy thôi, đó là cách các trang web được hiển thị, nếu muốn bạn có thể right-click trên trang web và chọn view source để xem code HTML.
    Thầy xem hộ cho em cái code này, em không biết tại sao nó vẫn chưa cập nhật được trạng thái các của Led1 và Led2! Mong thầy giúp đỡ!
    ntAVRnet.rar

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi stevenboy Xem bài viết
    còn phần địa chỉ WAn để điều khiển qua internet thì sao thầy. mong thầy giúp đỡ
    NAT là gì - Static, Dynamic và Overload NAT
    Cách NAT port trên một số modem thông dụng ( sưu tầm internet) - Trung Tâm Đào Tạo Mạng Máy Tính Nhất Nghệ

    Leave a comment:


  • stevenboy
    replied
    còn phần địa chỉ WAn để điều khiển qua internet thì sao thầy. mong thầy giúp đỡ

    Leave a comment:


  • nttam79
    replied
    Nguyên văn bởi lu_lu Xem bài viết
    + Theo em hiểu thì nguyên tắc của phần này là: Đầu tiên tìm kí tự '%' trong dataBuffer, sau đó là tìm số thứ tự của các Led bằng cách tmpVar = pgm_read_byte(progdata + srcDataIdx + 2) - 0x30; Vậy tương ứng với Led1 biến tmpVar=1, Led1 -> tmpVar=2 . . . đúng không ạ? Vậy nếu dùng code trên thì có cần tạo ra biến tmpVar không ạ? Hay là xác định trực tiếp bằng cú pháp: if((pgm_read_byte(progdata + srcDataIdx) == 'L') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D')&& (pgm_read_byte(progdata + srcDataIdx + 1) == '1')) ???
    + Cái thứ hai em muốn hỏi là khi thay chuỗi "LD1" bằng chuỗi "checked" thì trên web nó sẽ tự hiểu và tự check vào cái checkbox của con Led tương ứng hay sao? Em vẫn chưa hiểu nguyên tắc hoạt động tương thích của cái hàm httpSend() với trang web???
    Đoạn trên là do các bạn khác phát triển đấy nhé, ko phải từ code gốc. Tuy nhiên có thể trả lời vấn đề của bạn như vầy:
    1-
    Code:
    if(tmpChr == '%')
    ...
    if((pgm_read_byte(progdata + srcDataIdx) == 'L') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D'))
    Như vậy là trước tìm ký tự '%', sau đó tìm ký tự 'L' và 'D' của chuỗi "%LDx" (x=1,2,3,4)
    tmpVar = pgm_read_byte(progdata + srcDataIdx + 2) - 0x30;
    Vậy tmpVar = 1 nếu là "%LD1", ...

    2-Chỗ này bạn coi qua ngôn ngữ HTML là hiểu liền, giải thích ngắn gọn thì như vầy:
    <input type="checkbox" name="Led5" value="ON" checked/> là một ô checkbox (không có chữ kèm theo), với trạng thái được check.
    <input type="checkbox" name="Led5" value="ON"/> là một ô checkbox , với trạng thái không check.
    <p align="left">chuỗi</p> là một dòng canh lề trái, có nội dung là chuỗi.
    Vậy thì <p align="left"><input type="checkbox" name="Led5" value="ON"/>LED 3</p> là 1 dòng trên đó có 1 ô check, bên phải là chữ LED 3.
    Có vậy thôi, đó là cách các trang web được hiển thị, nếu muốn bạn có thể right-click trên trang web và chọn view source để xem code HTML.

    Leave a comment:


  • lu_lu
    replied
    Trong hàm httpSend() có đoạn như sau:

    while(srcDataIdx < dataLen)
    {
    i = 0;
    while(i<MAX_SEGMENT_SIZE)
    {
    tmpChr = pgm_read_byte(progdata + srcDataIdx++);
    if(tmpChr == '%')
    {
    if( (i + 9) > MAX_SEGMENT_SIZE)
    {
    srcDataIdx--;
    break;
    }
    tmpVar = pgm_read_byte(progdata + srcDataIdx + 2) - 0x30;
    if((pgm_read_byte(progdata + srcDataIdx) == 'L') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D'))
    {
    if(LED1==1)
    {
    dataBuffer[i++] = ' ';dataBuffer[i++] = 'c';dataBuffer[i++] = 'h';dataBuffer[i++] = 'e';
    dataBuffer[i++] = 'c';dataBuffer[i++] = 'k';dataBuffer[i++] = 'e';dataBuffer[i++] = 'd';
    }
    srcDataIdx += 3;
    }
    }
    else
    {
    dataBuffer[i++] = tmpChr;
    }
    if(srcDataIdx==dataLen)
    {
    break;
    }
    }
    //================================================== ===
    Các bác cho em hỏi:
    Giả sử trong webpage của em như thế này:
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led1\" value=\"ON\"%LD1>LED 1</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led2\" value=\"ON\"%LD2>LED 2</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led3\" value=\"ON\"%LD3>LED 3</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led4\" value=\"ON\"%LD4>LED 4</p>"
    "<p align=\"left\"><input type=\"checkbox\" name=\"Led5\" value=\"ON\"%LD5>LED 5</p>"

    + Theo em hiểu thì nguyên tắc của phần này là: Đầu tiên tìm kí tự '%' trong dataBuffer, sau đó là tìm số thứ tự của các Led bằng cách tmpVar = pgm_read_byte(progdata + srcDataIdx + 2) - 0x30; Vậy tương ứng với Led1 biến tmpVar=1, Led1 -> tmpVar=2 . . . đúng không ạ? Vậy nếu dùng code trên thì có cần tạo ra biến tmpVar không ạ? Hay là xác định trực tiếp bằng cú pháp: if((pgm_read_byte(progdata + srcDataIdx) == 'L') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D')&& (pgm_read_byte(progdata + srcDataIdx + 1) == '1')) ???
    + Cái thứ hai em muốn hỏi là khi thay chuỗi "LD1" bằng chuỗi "checked" thì trên web nó sẽ tự hiểu và tự check vào cái checkbox của con Led tương ứng hay sao? Em vẫn chưa hiểu nguyên tắc hoạt động tương thích của cái hàm httpSend() với trang web???

    Leave a comment:


  • lu_lu
    replied
    Các bác xem dùm cái ds1307 này, mô phỏng ok,nhưng nạp thật không chạy! Có file proteus luôn!
    ds1307new.rar

    Leave a comment:


  • stevenboy
    replied
    cái phần đăng nhập mình làm vẫn chưa dc nek

    Leave a comment:


  • stevenboy
    replied
    mình vào tới đây rồi mà ko biết cấu hình nó sao. Click image for larger version

Name:	wan.jpg
Views:	1
Size:	72.1 KB
ID:	1375876
    Click image for larger version

Name:	ip wan.jpg
Views:	1
Size:	61.6 KB
ID:	1375877

    Ai biết giúp mình với hix hix. từ internet vẫn chưa truy cập dc vào mạch.
    Last edited by stevenboy; 22-03-2013, 19:22.

    Leave a comment:


  • lu_lu
    replied
    Bác stevenboy ở đâu vậy? Có thể gặp nhau để hướng dẫn mình không? Bế tắc quá! để cái hàm httpInit() zô rồi! Mà vẫn đăng nhập không được!
    Bác có thể cho mình tham khảo cái Project của bác không?

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi stevenboy Xem bài viết
    đăng nhập được nhưng chỉ đăng nhập 1 lần thôi mấy lần sau vô nó không bắt đang nhập nữa.

    cám ơn bạn mình cũng đưa dữ liệu lên được rồi. Đề tài mình người làm bạn mình thì nó làm về cảm biến hiển thị lên ra giá trị luôn nó gửi ủat wa nên mình chỉ cần xử lí số gửi wa thôi h thì ok rồi nhẹ cả người hehe.

    h còn xem địa chỉ WAN nữa. chỉ mới dk được ở mạng LAN chưa dk được trên internet. bạn làm được phần đó chưa
    Thì config NAT cho modem là sử dụng được thôi

    Leave a comment:


  • stevenboy
    replied
    đăng nhập được nhưng chỉ đăng nhập 1 lần thôi mấy lần sau vô nó không bắt đang nhập nữa.

    cám ơn bạn mình cũng đưa dữ liệu lên được rồi. Đề tài mình người làm bạn mình thì nó làm về cảm biến hiển thị lên ra giá trị luôn nó gửi ủat wa nên mình chỉ cần xử lí số gửi wa thôi h thì ok rồi nhẹ cả người hehe.

    h còn xem địa chỉ WAN nữa. chỉ mới dk được ở mạng LAN chưa dk được trên internet. bạn làm được phần đó chưa
    Last edited by stevenboy; 20-03-2013, 19:49.

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi lu_lu Xem bài viết
    Bác cho em hỏi nếu muốn bỏ cái vụ đăng nhập thì làm thế nào ta?
    Làm ơn đọc hết toàn bộ project dùm cái

    Leave a comment:


  • lu_lu
    replied
    Bác cho em hỏi nếu muốn bỏ cái vụ đăng nhập thì làm thế nào ta?

    Leave a comment:


  • yamailuk
    replied
    Nguyên văn bởi lu_lu Xem bài viết
    #include "packet.h"
    #include "ethernet.h"
    #include "http.h"
    #include "webpage.h"
    #include "tcp.h"////
    #include "uart.h"
    #include "ntAVRnet.h"
    #include "lcd.h"
    prog_char Auth_str[]="Authorization";

    Có phải thế này không bác yamailuk??? Em làm rồi mà vẫn đăng nhập không được!
    Theo như bản của mình thì bình thường. Bạn xem lạ xem đã thêm httpInit(); trong hàm main chưa.
    Nếu chưa bạn down code thầy gửi sửa lại xem

    Nguyên văn bởi stevenboy Xem bài viết
    bạn có thể viết hàm này được ko. mình lên xem chuyển đổi thì thấy hàm itoa nhưng là trong codevision còn trong avrstudio ko biết nó có thư viện ko nữa
    Mình thì không viết hàm như của thầy, mình lấy giá trị trực tiếp rồi xử lý luôn:
    Trong đó thì temp_adc = (uint8_t)((read_adc(0))/2.046);
    if((pgm_read_byte(progdata + srcDataIdx) == 'A') && (pgm_read_byte(progdata + srcDataIdx + 1) == 'D')){
    if(temp_adc /100 == 0 && (temp_adc %100) /10 != 0) dataBuffer[i++] = (temp_adc %100) /10 + 0x30;
    else if(temp_adc /100 != 0) {dataBuffer[i++] = temp_adc /100 + 0x30; dataBuffer[i++] = (temp_adc %100) /10 + 0x30;}
    dataBuffer[i++] = (temp_adc %100) %10 + 0x30;
    srcDataIdx+=2;}

    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