Thông báo

Collapse
No announcement yet.

Thắc mắc về dấu chấm động trong CCS

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

  • Thắc mắc về dấu chấm động trong CCS

    Em viết code cho PIC 18F4620 dùng CCS, khi lập trình đọc và xử lý các giá trị cảm biến cần dùng định dạng float, thử chuyển kết quả về máy tính thì thấy toàn là 0.00. Do quá trình xử lý dữ liệu có nhân với 1 hằng số khá nhỏ nên kết quả <0.01 là chuyện bình thường, nhưng em có thắc mắc là khi hiển thị như vậy, kết quả mà PIC lưu trong RAM là 0.00xxx hay là 0.00?
    VD như em đặt biến const float P = 3.14159, khi cho hiển thị lên LCD ( printf(lcd_putc,"P= %f", P) hoặc chuyển kết quả về máy tính (printf("P= %f" , P) đều nhận được kết quả là 3.14. Như vậy con PIC nó có hiểu số P em định nghĩa hay là nó tự làm tròn? Nếu nó không tự làm tròn mà em muốn nhận được kết quả số thực với nhiều chữ số sau dấu phẩy hơn thì phải dùng lệnh gì? (Chương trình em tính toán với nhiều số nhỏ nên yêu cầu chính xác cao)

  • #2
    mình nghĩ bạn có thể nhân với nó thêm cho 100 hoặc 1000 để được nhiều chữ số sau dấu phẩy hơn, khi truyền lên PC bạn chỉ cần chia lại thôi

    Comment


    • #3
      Bạn dùng printf(lcd_putc,"P= %2.10f", P) là được mà

      Comment


      • #4
        Khỏi cần print .Send luôn 4byte lên máy tính.Muốn số nhỏ cũng được.Bạn dÙng kiểu union,hoặc lấy địa chỉ của số float,sau đó read 4 byte từ địa chỉ này.
        , , ,

        Comment


        • #5
          hic, mấy thao tác đó mình chưa làm bao giờ, nghe bạn nói như vịt nghe sấm @_@

          Comment


          • #6
            Như thế này nhé:
            cách 1:
            tạo kiểu union như sau:
            union float_4byte{
            float so;
            unsigned char array_byte[4];
            };
            khi dÙng thì khai báo như sau:
            float_4byte bien;
            float gt;
            giả sử nạp giá trị vào biến:
            bien.so=gt;//đặt giá trị
            đọc từng byte
            đọc từng byte:
            for(i=0;i<4;i++)
            read=bien.array_byte[i];
            cách 2:
            float bien;
            float gt;
            unsigned char *pdata;//trỏ đến địa chỉ
            nạp giá trị vào biến:
            bien=gt;
            lấy địa chỉ pdata=(unsigned char *)&bien;
            giá trị từng byte
            for(i=0;i<4;i++)
            read=*pdata++;
            , , ,

            Comment


            • #7
              Lưu ý byte có chỉ số thấp là byte thấp ví dụ: array_byte[0] là byte thấp nhất,array_byte[3] byte cao nhất.
              1 chỗ khi khai báo biến với kiểu union làm như sau:
              union float_4byte bien;//ko phải float_4byte(định nghĩa typedef thì dÙng kô cần thêm union vào)
              , , ,

              Comment


              • #8
                thế này là ổn rồi :
                Bạn dùng printf(lcd_putc,"P= %2.10f", P) là được mà
                Last edited by hienclubvn; 13-01-2012, 10:47.
                My Face :

                Comment


                • #9
                  heheh, nói thì giỏi nhiều, nhưng có ai viết được code c cho xu lý ảnh khôg?
                  như lọc trung vị, lọc trung bình....nén ảnh

                  Comment


                  • #10
                    Nguyên văn bởi nguyenmanht Xem bài viết
                    heheh, nói thì giỏi nhiều, nhưng có ai viết được code c cho xu lý ảnh khôg?
                    như lọc trung vị, lọc trung bình....nén ảnh
                    tự nhiên nhảy vào đây chém ? bạn ko thấy ngại à ?
                    Người ta đang hỏi về vấn đề của họ mà. Còn bạn muốn xử lý ảnh thì chúng ta có Thread bên OpenCV mà, sao ko qua đó mà chém ?
                    My Face :

                    Comment


                    • #11
                      Kô Có gì.Ép kiểu : *(float *)pdata.
                      Last edited by rptdnmqs; 13-01-2012, 12:10.
                      , , ,

                      Comment


                      • #12
                        ----------------------------------------------------------
                        Last edited by hienclubvn; 13-01-2012, 10:47.
                        My Face :

                        Comment


                        • #13
                          -+++-++-+-++-++*** chúc tất cả mọi người có tết ấm no hạnh phúc
                          Last edited by rptdnmqs; 13-01-2012, 12:14.
                          , , ,

                          Comment


                          • #14
                            --------------------------------------------------------
                            Last edited by hienclubvn; 13-01-2012, 10:47.
                            My Face :

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X