Thông báo

Collapse
No announcement yet.

Giải phương trình bậc 3 trong avr ???

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giải phương trình bậc 3 trong avr ???

    chào các anh. E có phương trình bậc 3 như sau:
    6728 = 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3)
    Đây là phương trình tính ĐỘ ẨM theo datasheet thì với tần số 6728 thì em tính ra độ ẩm A = 50%.
    EM PHẢI LÀM THẾ NÀO ĐỂ GIẢI ĐƯỢC PHƯƠNG TRÌNH BẬC 3 NÀY TRONG VĐK AVR ATMEGA16.
    Mong các anh giúp em với. em xin cảm ơn
    01689964729

  • #2
    Giải bình thường chứ còn thế nào nữa !

    10^-3 = 0,001 ; 10^-6 = 0,000001 ; A^2 = A*A ; A^3 = A*A*A

    cứ thế bóc tách ra mà tính !
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Nguyên văn bởi queduong Xem bài viết
      Giải bình thường chứ còn thế nào nữa !

      10^-3 = 0,001 ; 10^-6 = 0,000001 ; A^2 = A*A ; A^3 = A*A*A

      cứ thế bóc tách ra mà tính !
      Anh có thể nó chi tiết hơn không?
      làm sao mà tính được anh ơi. đây có phải là mình nhập vào máy tinh CASIO đâu a. m có tách ra thì cũng không nhóm với nhau được để giải. Anh xem lại phương trình của em nhá.
      01689964729

      Comment


      • #4
        Nguyên văn bởi kenvindang Xem bài viết
        Anh có thể nó chi tiết hơn không?
        làm sao mà tính được anh ơi. đây có phải là mình nhập vào máy tinh CASIO đâu a. m có tách ra thì cũng không nhóm với nhau được để giải. Anh xem lại phương trình của em nhá.
        Hic , vận dụng kém vậy ? Con Vi điều khiển không là bố của máy tính ấy chứ

        Nếu phương trình của bạn là đúng , bạn bóc tách nó ra ( để trình dịch có thể hiểu)... rồi cho 1 liều thuốc thử

        ( số % thì chỉ có từ 0% đến 100% ) ... cho 1 vòng lặp : for (i = 0 đến 100 ) rồi liên tục kiểm tra kiểm tra với kết quả tần số ...
        thằng i nào MATCH thì đó là số % độ ẩm . Có vậy thôi !
        ( chứ giải 1 dãy số kia đến đầu óc Giáo sư , tiến sỹ cũng phải mang Casio ra mà bấm nữa là !!! )
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • #5
          cũng làm tương tự như trên nhưng có thể làm nhanh hơn và chính xác hơn = cách chia đôi.....

          Comment


          • #6
            Nguyên văn bởi queduong Xem bài viết
            Hic , vận dụng kém vậy ? Con Vi điều khiển không là bố của máy tính ấy chứ

            Nếu phương trình của bạn là đúng , bạn bóc tách nó ra ( để trình dịch có thể hiểu)... rồi cho 1 liều thuốc thử

            ( số % thì chỉ có từ 0% đến 100% ) ... cho 1 vòng lặp : for (i = 0 đến 100 ) rồi liên tục kiểm tra kiểm tra với kết quả tần số ...
            thằng i nào MATCH thì đó là số % độ ẩm . Có vậy thôi !
            ( chứ giải 1 dãy số kia đến đầu óc Giáo sư , tiến sỹ cũng phải mang Casio ra mà bấm nữa là !!! )
            Em cũng đã dùng cách này rồi nhưng không ổn anh ạ.
            e có code như sau:
            unsigned long int freq;
            unsigned int i;
            unsigned int mang[5] = {578,1234,5648,4849,2565};
            ...
            void lcd_putnum(float so)
            {
            long a, b, c,d;
            a=so/10; //hang chuc
            b=(so-10*a); //hang don vi
            lcd_putchar(a+48);
            lcd_putchar(b+48);

            }
            .....
            for(i = 1; i<6;i++)
            {
            if(mang[i] >= freq)
            {
            lcd_gotoxy(0,1);
            lcd_putnum(i);

            }
            }
            e mô phỏng trên proteus. e nhập tần số là 4849. do sai số nó hiển thị LCD là 4852. và thế là i in ra LCD là 3 mà chính ra phải là 4 chứ???.
            01689964729

            Comment


            • #7
              Nguyên văn bởi tan0710 Xem bài viết
              cũng làm tương tự như trên nhưng có thể làm nhanh hơn và chính xác hơn = cách chia đôi.....
              anh có thể nói cụ thể hơn được k ạ????
              01689964729

              Comment


              • #8
                ví dụ như:
                độ ẩm thì cho là 0% -> 100% đi
                lấy giá trị 50% thay vào đấy.
                tính biểu thức
                6728 - 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3) xem <> 0 ? với A=50%
                giả sử A=0% thì biểu thức dương còn A=100% thì biểu thức âm đi.
                nếu với A=50% biểu thức có giá trị âm. thì lấy tiếp khoảng 50 - 100
                chia đôi khoảng này ra là 75%. tính tiếp như thế....
                bạn đặt ngưỡng sai số bằng cách gán giá trị ngưỡng của biểu thức tính được để dừng việc chia đôi.
                cách này nhanh và chính xác hơn việc tính theo vòng for từ 0-100

                Comment


                • #9
                  Nguyên văn bởi kenvindang Xem bài viết
                  anh có thể nói cụ thể hơn được k ạ????
                  với cách trên thì chỉ sau khoảng 10 vòng lặp đã ra kết quả và chính xác đến vài chữ số thập phân rồi.

                  Comment


                  • #10
                    Nguyên văn bởi kenvindang Xem bài viết
                    Em cũng đã dùng cách này rồi nhưng không ổn anh ạ.
                    e có code như sau:
                    unsigned long int freq;
                    unsigned int i;
                    unsigned int mang[5] = {578,1234,5648,4849,2565};
                    ...
                    void lcd_putnum(float so)
                    {
                    long a, b, c,d;
                    a=so/10; //hang chuc
                    b=(so-10*a); //hang don vi
                    lcd_putchar(a+48);
                    lcd_putchar(b+48);

                    }
                    .....
                    for(i = 1; i<6;i++)
                    {
                    if(mang[i] >= freq)
                    {
                    lcd_gotoxy(0,1);
                    lcd_putnum(i);

                    }
                    }
                    e mô phỏng trên proteus. e nhập tần số là 4849. do sai số nó hiển thị LCD là 4852. và thế là i in ra LCD là 3 mà chính ra phải là 4 chứ???.
                    ặc ặc , chẳng hiểu lập trình kiểu gì ?
                    mảng có 5 phần tử thì chỉ có từ 0 đến thôi mang[0] , mang[1] .... mang[4]

                    câu lệnh này sai ròy ! ( sẽ bị tràn mảng ... trình dịch xịn nó báo lỗi tràn ngay - trình dịch lởm không báo lỗi )
                    for(i = 1; i<6;i++)


                    i mà = 3 thì vị trí nó ở trong mảng là thứ đó .

                    --- Cứ húc đầu cắm cổ vào proteus thì chẳng bao giờ mà khá lên được !
                    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                    Comment


                    • #11
                      Nguyên văn bởi tan0710 Xem bài viết
                      ví dụ như:
                      độ ẩm thì cho là 0% -> 100% đi
                      lấy giá trị 50% thay vào đấy.
                      tính biểu thức
                      6728 - 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3) xem <> 0 ? với A=50%
                      giả sử A=0% thì biểu thức dương còn A=100% thì biểu thức âm đi.
                      nếu với A=50% biểu thức có giá trị âm. thì lấy tiếp khoảng 50 - 100
                      chia đôi khoảng này ra là 75%. tính tiếp như thế....
                      bạn đặt ngưỡng sai số bằng cách gán giá trị ngưỡng của biểu thức tính được để dừng việc chia đôi.
                      cách này nhanh và chính xác hơn việc tính theo vòng for từ 0-100
                      Anh ơi. giá trị ở đây thay đổi theo Tần số anh ạ. số 6728 là tần số em lấy làm ví dụ thôi. công thức của nó phải là thế này ạ:
                      F = 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3). Nếu F là giá trị cố định thì dùng cách của a được. nhưng F thay đổi anh ạ
                      01689964729

                      Comment


                      • #12
                        Nguyên văn bởi kenvindang Xem bài viết
                        Anh ơi. giá trị ở đây thay đổi theo Tần số anh ạ. số 6728 là tần số em lấy làm ví dụ thôi. công thức của nó phải là thế này ạ:
                        F = 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3). Nếu F là giá trị cố định thì dùng cách của a được. nhưng F thay đổi anh ạ
                        thì phải đọc tần số vào từ cảm biến đúng không..!!???
                        vì độ ẩm thay đổi chậm nên lấy vài trăm mẫu rồi lấy trung bình chứ đừng lấy trực tiếp.
                        rồi thay độ ẩm tương ứng vào chương trình trên... chương trình chạy bằng cách truyền vào tham biến là tần số trung bình đấy.

                        Comment


                        • #13
                          Nguyên văn bởi queduong Xem bài viết
                          ặc ặc , chẳng hiểu lập trình kiểu gì ?
                          mảng có 5 phần tử thì chỉ có từ 0 đến thôi mang[0] , mang[1] .... mang[4]

                          câu lệnh này sai ròy ! ( sẽ bị tràn mảng ... trình dịch xịn nó báo lỗi tràn ngay - trình dịch lởm không báo lỗi )
                          for(i = 1; i<6;i++)


                          i mà = 3 thì vị trí nó ở trong mảng là thứ đó .

                          --- Cứ húc đầu cắm cổ vào proteus thì chẳng bao giờ mà khá lên được !
                          Em thay bằng for(i = 0; i<5;i++) vẫn thế.
                          húc đầu cắm cổ vào proteus thì chẳng bao giờ mà khá lên được thì anh bảo em húc đầu cắm cổ vào phần mềm nào thì khá lên được ạ. anh bảo em với
                          01689964729

                          Comment


                          • #14
                            Nguyên văn bởi tan0710 Xem bài viết
                            ví dụ như:
                            độ ẩm thì cho là 0% -> 100% đi
                            lấy giá trị 50% thay vào đấy.
                            tính biểu thức
                            6728 - 6660(1.1038 - 1.9368*10^-3*A + 3.0114*10^-6*A^2 - 3.4403*10^-8*A^3) xem <> 0 ? với A=50%
                            giả sử A=0% thì biểu thức dương còn A=100% thì biểu thức âm đi.
                            nếu với A=50% biểu thức có giá trị âm. thì lấy tiếp khoảng 50 - 100
                            chia đôi khoảng này ra là 75%. tính tiếp như thế....
                            bạn đặt ngưỡng sai số bằng cách gán giá trị ngưỡng của biểu thức tính được để dừng việc chia đôi.
                            cách này nhanh và chính xác hơn việc tính theo vòng for từ 0-100
                            với cách này là đã biết chính xác điểm 50% rồi ... còn nếu như bị sai số , cho cận đầu , cận cuối thì việc tính toán sẽ phức tạp hơn ... kể cả việc lấy miền âm cũng sẽ bị sinh rom code nhiều hơn

                            cách cho từ 0 - 100 là cách đơn giản nhất , dễ hiểu nhất và dù ở cận đầu hay cận cuối đều được .
                            Nếu cần thiết thì xác định nửa đầu , nửa cuối rồi sau đó sẽ cho biến chạy từ nửa đầu hay nửa cuối ... khi đã so sánh và match kết quả thì thoát khỏi vòng for. Đó là cách an toàn và cũng rất nhanh, dễ hiểu không phức tạp !
                            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                            Comment


                            • #15
                              Nguyên văn bởi queduong Xem bài viết
                              với cách này là đã biết chính xác điểm 50% rồi ... còn nếu như bị sai số , cho cận đầu , cận cuối thì việc tính toán sẽ phức tạp hơn ... kể cả việc lấy miền âm cũng sẽ bị sinh rom code nhiều hơn

                              cách cho từ 0 - 100 là cách đơn giản nhất , dễ hiểu nhất và dù ở cận đầu hay cận cuối đều được .
                              Nếu cần thiết thì xác định nửa đầu , nửa cuối rồi sau đó sẽ cho biến chạy từ nửa đầu hay nửa cuối ... khi đã so sánh và match kết quả thì thoát khỏi vòng for. Đó là cách an toàn và cũng rất nhanh, dễ hiểu không phức tạp !
                              đâu phải bác....đấy là mình cứ chia đôi khoảng ra chứ có ai biết 50% là chính xác đâu....nếu chĩnh xác thì giá trị biểu thức =0 luôn rồi mà bác ( thì cần gì phải chia đôi bước nữa )

                              Comment

                              Về tác giả

                              Collapse

                              kenvindang Tìm hiểu thêm về kenvindang

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X