Thông báo

Collapse
No announcement yet.

Độ chính xác của đồng hồ điện tử dùng 8051

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

  • Độ chính xác của đồng hồ điện tử dùng 8051

    Tôi đang tìm hiểu về vi điều khiển và dự định lập trình 1 chiếc đồng hồ dùng 89C2051 (như trong diễn đàn có giới thiệu). Theo tôi lập trình đồng hồ giúp những người mới như tôi va chạm khá nhiều với các vấn đề của VĐK nhưng cũng không đến nỗi quá khó.

    Vậy xin hỏi các bạn độ chính xác của đồng hồ này khi dùng các vòng lặp để đếm thời gian là bao nhiêu (giả sử trường hợp không dùng các bộ định thời như DS12887 hoặc DS1307 mà chỉ viết các hàm delay để đếm thời gian)

    Cảm ơn các bạn

  • #2
    Nếu ct bạn thiết kế chỉ 1 ngắt cho timer thì có thể chấp nhận dc nhưng có những trường hợp bạn có thể đụng phải khi thiết kế.ví dụ:
    -mất điện ->trở về 00:00:00 00/00/00 à
    -Dùng delay ư không đảm bảo độ chính xác cao dc vì bạn phải tính toán các lệnh số chu kì xung thế nào.
    --->Lời khuyên 1 DS1307 giá cũng không cao 15K thì phải hỗ trợ bạn rất nhiều trong các vấn đề về mất điện.
    PS:còn 1 vấn đề nữa là leap year (cái này dịch là năm nhuận hổng nhớ phải hông) thì bạn cũng phải tính toán.hình như DS1307 còn có 1 số ô nhớ trống có thể tuỳ chọn ghi vào bạn có thể dùng nó để hẹn giờ cái này mình không nhớ lắm về check lại rồi cofirm sau.

    Sông dài, Thuyền lớn, Biển rộng bao la.
    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

    Comment


    • #3
      Trong sơ đồ của Wichit Sirichote (http://www.kmitl.ac.th/~kswichit%20/clock/clock.htm) có sử dụng 3 pin 1,5V làm nguồn dự phòng, tôi nghĩ phương án này có thể chấp nhận được.

      Còn vấn đề về độ chính xác, theo như bạn nói có nghĩa là nếu chỉ dùng chính 89C2051 để tạo xung nhịp nhằm đếm giờ thì không thể có độ chính xác cao đúng không?

      Tôi chưa hiểu lắm về DS1307, bạn có thể giải thích tại sao dùng DS1307 lại giải quyết được vấn đề mất điện không?

      Comment


      • #4
        Nguyên văn bởi zeroFILL Xem bài viết
        Trong sơ đồ của Wichit Sirichote (http://www.kmitl.ac.th/~kswichit%20/clock/clock.htm) có sử dụng 3 pin 1,5V làm nguồn dự phòng, tôi nghĩ phương án này có thể chấp nhận được.

        Còn vấn đề về độ chính xác, theo như bạn nói có nghĩa là nếu chỉ dùng chính 89C2051 để tạo xung nhịp nhằm đếm giờ thì không thể có độ chính xác cao đúng không?

        Tôi chưa hiểu lắm về DS1307, bạn có thể giải thích tại sao dùng DS1307 lại giải quyết được vấn đề mất điện không?
        Nếu không dùng IC thời gian bên ngoài mà muốn đạt độ chính xác cao thì rất vất vả vì phải tính đến từng chu kỳ của từng lệnh mình dùng.

        Trên thị trường có rất nhiều loại IC thời gian:
        DS1307 là 1 IC thời gian giao tiếp nối tiếp (I2C), muốn khi mất điện mà nó vẫn chạy thì phải dùng 1 cục Pin ngoài.
        DS12C887 là 1 IC thời gian giao tiếp song song, nó có sẵn Pin ở trong nên khi mất điện nó vẫn chạy ( hơi đắt 1 chút).
        .... còn nhiều IC nữa nhưng có 1 con chạy rất tốt trong các điều kiện môi trường đó là R8025SANB

        email:mahaco@fpt.vn

        Comment


        • #5
          Tôi sẽ thử dỡ máy của đồng hồ treo tường ra, lúc đó sẽ có 1 xung 1Hz khá chuẩn. Kích xung này lên đưa vào ngắt ngoài của 8051 chắc là OK.

          Comment


          • #6
            Tui đã thử mạch dùng nguồn pin 4.5V làm dự phòng : chạy rất tốt.
            Tuy nhiên tui có sử dụng analog comparator để phát hiện mất điện lưới, khi đó sẽ đưa MCU vào idle mode (vẫn wake up khi có ngắt 1sec từ timer để cập nhật thời gian, rồi lại ngủ tiếp).
            Dùng mạch này thì không cần RTC, nhược điểm : phải định kỳ thay pin, và phải thay lúc đang có điện lưới.
            Imagine all the people
            Living life in peace...

            Comment


            • #7
              Chịu khó ngâm cứu I2C tí, rất có ích sau này vì nhiều thiết bị khác giao tiếp theo I2C. Sau đó xài cho DS1307, 14-15k giá tại Nhật tảo.

              DS1307 chưa phải là tốt nhất, nhưng độ chính xác và giá tiền của nó là quá hợp lý. Nhỏ gọn, tương đối chính xác. Có thêm 56byte RAM + pin 3V dự phòng nữa coi như ta cũng có thêm vài chục byte Eeprom.

              8951 nếu dùng delay mà xuất giờ thì rất vất vả. Vì mỗi lần muốn thêm thắt các chức năng khác trong chương trình thì phải tính toán lại toàn bộ chu trình. Chưa kể mất điện thì mất hết, mà pin nuôi cho 8951 thì hao hơn nhiều so với 1307.

              Chưa kể phải mất công ngồi đưa ra giải thuật đếm giây/phút/giờ/ngày/tháng/năm/thứ mà năm thì có năm nhuận năm không, tháng thì 28-29-30-31 ngày. Công sức đó bỏ ra ngâm cứu I2C hay hơn/ Có 15 ngàn + 1 ít công sức I2C thấy vẫn nhẹ nhàng hơn nhiều.

              Comment


              • #8
                Cảm ơn các bạn rất nhiều, mong được học hỏi thêm nhiều hơn nữa

                Comment


                • #9
                  Nguyên văn bởi zeroFILL Xem bài viết
                  Tôi sẽ thử dỡ máy của đồng hồ treo tường ra, lúc đó sẽ có 1 xung 1Hz khá chuẩn. Kích xung này lên đưa vào ngắt ngoài của 8051 chắc là OK.
                  Cái này mình đã dùng , hay đấy, độ chính xác là của ... đồng hồ treo tường. Khi mất điện phải update lại, nếu không dùnh nguồn nuôi cho CPU

                  Comment


                  • #10
                    Nguyên văn bởi zeroFILL Xem bài viết
                    Tôi sẽ thử dỡ máy của đồng hồ treo tường ra, lúc đó sẽ có 1 xung 1Hz khá chuẩn. Kích xung này lên đưa vào ngắt ngoài của 8051 chắc là OK.
                    Cái này mình đã dùng, hay đấy, độ chính xác là của ... đồng hồ treo tường. Khi mất điện phải update lại, nếu không dùng nguồn nuôi cho CPU.

                    Comment


                    • #11
                      Nguyên văn bởi zeroFILL Xem bài viết
                      Cảm ơn các bạn rất nhiều, mong được học hỏi thêm nhiều hơn nữa
                      Giả sử rằng không mất điện hoặc có pin dự phòng. Thì trong phần Debug của Keil có chỉ ra thời gian mổi lần ngắt timer hoạt động. Bạn có thể thay đổi giá trị các thanh ghi THx va TLx để chuẩn lại độ chính xác có thể đạt độ chính xác +/- 12us(max)/1s (nếu dùng thạch anh 12Mhz) đấy. Thử tính nhé 1 triệu giây(khoảng 12 ngày) sai 12 giây. Vậy 1 năm 365 ngày sai khoảng 360 giây là khoảng 6 phút đó bạn. Nếu dùng thạch anh 24MHz thi sai khoảng 3 phút. Mạch đã được dủng thử rồi nhưng chưa thử được đến 1 năm. Ứng dụng chính của tôi là làm timer chính xác trong vài ngày. Thêm thông tin cho bạn tham khảo.

                      Comment


                      • #12
                        Khổ thế nhỉ.

                        Mất 2 ngày ngâm cứu I2C, 2 ngày nữa để hiện thực hóa nó. Sau đó dùng I2C này cho DS1307 chính xác đến từng ... giây, không lo mất điện đồng hồ. Dùng tiếp EEprom 24cxx không lo mất data khi cúp điện hay phải kè kè nuôi pin 8951.

                        DS1307 có mạch tự phát hiện khi cúp điện để chuyển sang pin dự phòng, mà nó cũng rất ít hao nên pin xài mấy năm. 8951 nếu bạn gắn pin cho nó thì hoặc pin được sạc liên tục chóng hỏng, hoặc bạn phải thiết kế thêm mạch sạc. Nói chung là rất nhiều phiền phức mà không tối ưu.

                        Học nhanh "mì ăn liền" thì được, chứ còn lâu dài và làm những sản phẩm đòi hỏi độ chính xác thì không thể thủ công mãi được.

                        Chưa kể 8951 nếu chỉ dùng timer đếm giờ và hiển thị thì chỉ tạm ổn, chứ thêm phần cài đặt báo giờ hay điều khiển kèm thêm mấy thứ khác nữa là thua.

                        Comment


                        • #13
                          ^_^ thanks

                          Comment


                          • #14
                            Nguyên văn bởi PSman Xem bài viết
                            Khổ thế nhỉ.

                            Mất 2 ngày ngâm cứu I2C, 2 ngày nữa để hiện thực hóa nó. Sau đó dùng I2C này cho DS1307 chính xác đến từng ... giây, không lo mất điện đồng hồ. Dùng tiếp EEprom 24cxx không lo mất data khi cúp điện hay phải kè kè nuôi pin 8951.

                            DS1307 có mạch tự phát hiện khi cúp điện để chuyển sang pin dự phòng, mà nó cũng rất ít hao nên pin xài mấy năm. 8951 nếu bạn gắn pin cho nó thì hoặc pin được sạc liên tục chóng hỏng, hoặc bạn phải thiết kế thêm mạch sạc. Nói chung là rất nhiều phiền phức mà không tối ưu.

                            Học nhanh "mì ăn liền" thì được, chứ còn lâu dài và làm những sản phẩm đòi hỏi độ chính xác thì không thể thủ công mãi được.

                            Chưa kể 8951 nếu chỉ dùng timer đếm giờ và hiển thị thì chỉ tạm ổn, chứ thêm phần cài đặt báo giờ hay điều khiển kèm thêm mấy thứ khác nữa là thua.
                            Coi thường 89c51 quá đáng rồi đấy bác ạh,tôi thiết kế mạch báo giờ cho trường học chỉ dùng 1 e 89c51 chạy từ năm này sang tháng khác,có đầy đủ tháng thiếu ,tháng đủ và cả năm nhuận. 1 năm chậm hơn chưa tới 10 phút.Cúp điện thì tự chuyển sang xài pin CMOS chạy cầm hơi,không xuất ra Led.Có lẽ tại trường học ít cúp điện mà 2 năm này con pin CMOS chưa phải thay cái nào.Dùng Timer ngoài cũng tốt nhưng lằng nhằng quá,không có yêu cầu lớn thì cứ NGẮT TRONG mà chơi tới đi bác


                            email:
                            Giá mà mạch điện tử không có nhiễu (noise) thì mình bây giờ đã là ... đại gia

                            Comment


                            • #15
                              đồng hồ số mà ko dùng IC RTC thì ko bao giờ chính xác được bởi vì trong ASM, va C thực hiện theo chu ky máy, bạn ko thể tính toán chính xác chu kỳ máy để quy đổi ra giá trị nạp Timer. dùng RTC ngắn gọn hơn, nhưng dòi hỏi bạn phải hiểu về giao tiếp I2C ( cũng ko phức tạp lắm ),mình đang làm ĐHS dùng RTC DS1307 nhưng van chưa được
                              Còn nếu bạn có ý định làm bằng timer thi link này có đấy:
                              link1: http://www.mediafire.com/?xc22f39vboaz3g3
                              link2: http://www.mediafire.com/?7bd9l6v3cwytcyf
                              link3 ( cai nay dung RTC 1307, mình mới tìm thấy trên 4rum) http://www.dientuvietnam.net/forums/...ad.php?t=38638
                              " Muốn biết phải hỏi, muốn giỏi phải học "

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X