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

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

    Comment


    • 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

      Comment


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

        Comment


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

          Comment


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

            Comment


            • 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

              Comment


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

                Comment


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

                  Comment


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

                    Comment


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

                      Comment


                      • 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

                        Comment


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

                          Comment


                          • Ok, mình hiểu rồi! Tại vì mình gần báo cáo rồi, nên hơi gấp mà đốt cháy giai đoạn! Bắt tay vào lại từ đầu thôi, nhất định sẽ làm được!

                            Comment


                            • //========= Lay trang thai PORTD.0 ===========
                              #include <avr/io.h>
                              #include <util/delay.h>

                              #define sbi(sfr,bit) sfr|=_BV(bit)
                              #define cbi(sfr,bit) sfr&=~(_BV(bit))
                              #define IND PIND
                              #define LED1 PD1
                              #define LED2 PD2
                              unsigned int x;
                              int main(void)
                              {
                              DDRD=0xFE;
                              while(1)
                              {
                              x=(IND & 0x01);
                              if(x==0) {cbi(PORTD,LED2);sbi(PORTD,LED1);}
                              if(x==1) {sbi(PORTD,LED2);cbi(PORTD,LED1);}
                              }
                              }
                              //=========================================
                              Bác Yamailuk xem dùm em code lấy trạng thái thiết bị thế này có ổn không?
                              Kết quả như thế này:
                              Click image for larger version

Name:	TH1.jpg
Views:	1
Size:	100.1 KB
ID:	1376124
                              Click image for larger version

Name:	TH2.jpg
Views:	1
Size:	96.2 KB
ID:	1376125

                              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