Thông báo

Collapse
No announcement yet.

Ds1307 không chạy theo thời gian thực dù đã có battery 3V?

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

  • #16
    Nguyên văn bởi binhminhdem Xem bài viết
    Hihi mình cũng hiểu như vậy,b có cách nào mà khi reset con vi xu ly no van chay đúng với tg thực ko?mình nghĩ mãi mà vẫn ko ra,sửa đoạn code giùm minh đi.
    Hi,
    Cái này dễ mà, tui biết một số người dùng kiểu củ chuối là chạy lần đầu sẽ dùng lệnh set thời gian để set cho RTC, xong rồi bỏ (remove) lệnh đó đi và biên dịch lại rồi nạp lại cho chip.
    Còn cách của tui thì trước khi set thời gian, MCU sẽ đọc một ô nhớ định sẵn (ví dụ ở địa chỉ 0x08) xem có đúng với giá trị đã ghi sẵn trước đó không (ví dụ 0xAA). Nếu KHÔNG tức là RTC đó chưa được set thời gian vậy thì bác sẽ gọi hàm set thời gian và ghi giá trị 0xAA vào ô nhớ 0x08. Nếu giá trị đọc được là 0xAA thì tức là RTC đã được set nên sẽ bỏ qua lệnh set thời gian này. Vậy thì kết quả chạy từ lần reset thứ 2 trở đi, RTC luôn chạy đúng theo thời gian thực. Nếu Pin backup cho RTC bị hết (run out) và mất nguồn thì thời gian của RTC bị reset và ô nhơ 0x08 cũng mất dữ liệu, vậy coi như RTC chưa được set thời gian. Cách này dùng để test là chủ yếu còn để triển khai ứng dụng thực tế thì làm cách khác đó là dùng một module set thời gian chạy độc lập khi cần thì cắm vào set thời gian xong thì rút ra.
    Thân ái.
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

    Comment


    • #17
      Mình đang làm đồ án hiển thị đồng hồ analog trên LCD graphic. Mọi thứ đều đã OK, tuy nhiên mình gặp vấn đề là pin CMOS mới lắp vào, chạy chưa đến 2 tuần là sụt, giá trị còn khoảng 2.2, theo datasheet của DS1307 thì giá trị này vẫn ổn, tuy nhiên thực tế rtc không giữ được giờ realtime nữa. Mình muốn hỏi kinh nghiệm mọi người, vấn đề gì khiến rtc ngốn pin kinh khủng đến vậy (mình thử mua mới pin rồi, vẫn bị y chang).

      Comment


      • #18
        Nguyên văn bởi chanhvan08 Xem bài viết
        Mình đang làm đồ án hiển thị đồng hồ analog trên LCD graphic. Mọi thứ đều đã OK, tuy nhiên mình gặp vấn đề là pin CMOS mới lắp vào, chạy chưa đến 2 tuần là sụt, giá trị còn khoảng 2.2, theo datasheet của DS1307 thì giá trị này vẫn ổn, tuy nhiên thực tế rtc không giữ được giờ realtime nữa. Mình muốn hỏi kinh nghiệm mọi người, vấn đề gì khiến rtc ngốn pin kinh khủng đến vậy (mình thử mua mới pin rồi, vẫn bị y chang).
        Bạn coi có mua phải Pin dởm ko đó. À mà bạn làm xong phần chỉnh giờ bằng nút nhấn chưa, mình đang kẹt cái này. Nếu được bạn gửi cho mình nhé.
        Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
        Liên hệ sđt: 0902.808.371

        Comment


        • #19
          Nguyên văn bởi binhminhdem Xem bài viết
          E đã cài dc thời gian chạy song song với thực tế và khi reset chip vẫn chạy y như thực tế lun,hihi,nhưng e ko hiểu cách hoạt động.Đầu tiên e đặt cái code y như đầu bài rtc_set_time(thoi gian hiện tai)sau khi nạp vô e tắt mạch.rồi xóa dòng rtc_set_time(thoi gian) sau đó nạp tiếp cho chip thì luc này ngay cả khi reset chip hay tat nguồn thì mach van chay vô tư như thời gian thực.Vậy xin cho e hỏi giao tiep I2C la giao tiep đọc ghi dữ liệu giữa các thiêt bi ngoai vi va chip.Vậy khi lần đầu tiên mình rtc_set_time là mình đã nhờ con AVR ghi thời gian lên 1307 phải ko?e đang băn khoan vấn đề này vì theo e nghĩ 1307 chỉ là slave đọc thôi làm sao như vi xư ly co the write lên dc.moi người cho e ý kiến nha![ATTACH=CONFIG]35339[/ATTACH]

          Khi lần nạp đầu tiên bạn để dòng lệnh rtc_set_time(); thì tất nhiên nó sẽ chạy từ giá trị bạn set. Lúc này nếu reset chip thì nó lại nạp lại giá trị. còn không nó cứ đếm lên
          Khi lần nạp thứ 2 bạn bỏ dòng lệnh đó đi thì nó sẽ bỏ qua thao tác set time cho ds1307 => ds1307 vẫn lưu giá trị cũ, lúc này bạn nạp xong, reset chip thỏa mái nó vẫn không thay đổi ( qua rõ ràng rồi chứ nhỉ ^^)
          Nếu bạn dùng cách này để set time hiệu chỉnh chuẩn với giờ thực tế rất khó, độ chính xác không được cao, giả sử bạn áng trừng một khoảng thời gian nạp mất 30s để thao tác nạp xong. Nhưng trong thao tác của bạn sẽ không thể chính xác như thế được => dẫn đến sai số, lúc này can thiệp bằng phím up, down là ok

          Có một cách bạn có thể vẫn dùng lệnh đó, không phải nạp 2 lần là dùng điều kiện so sánh: Nếu con ds1307 chưa được ghi thời gian lên ( các thanh ghi về chỉ số thời gian mặc định =0) thì bạn thực hiện lệnh set time cho ds còn nếu đã ghi rồi thì dùng lệnh so sánh bỏ qua lệnh đó. Lúc này bạn chỉ cần nạp một lần, reset chip thoải mái vẫn không thay đổi

          e đang băn khoan vấn đề này vì theo e nghĩ 1307 chỉ là slave đọc thôi làm sao như vi xư ly co the write lên dc
          Khi bạn truyền lệnh từ vdk tới ds thông qua giao tiếp i2c, ds sẽ có nhiệm vụ nhận và giải mã lệnh, nếu là đọc thì nó sẽ lấy giá trị mà vdk cần đọc rồi tuyền lại cho vdk. Nếu là ghi thì nó sẽ lấy giá trị set đó để ghi vào ram. Hiểu đơn giản là như vậy. Bạn đọc kỹ datasheet của nó là thấy rõ ngay.

          Mình cũng đã làm project này : file code mô phỏng ai cần thì down về tham khảo
          Chúc thành công!
          link: DS1037-LM35-LCD-LED7SEG.rar
          Last edited by thiennv0109; 16-11-2011, 11:18.
          Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
          Gmail: -Mobile: 0989.194.472

          Comment


          • #20
            Chào các bạn !
            theo mình là khi bạn nạp vào VĐK thì đợi đến thời gian cài đặt thì bắt đầu cho chạy. Sau đó, bạn xóa dòng code rtc_set_time(12,38,00); đi và nạp lại 1 lần nữa VĐK. Từ đó khi chạy thì VĐK không set lại thời gian cho DS nữa và DS cứ chạy thôi.

            Comment


            • #21
              Nguyên văn bởi tvd3001 Xem bài viết
              Chào các bạn !
              theo mình là khi bạn nạp vào VĐK thì đợi đến thời gian cài đặt thì bắt đầu cho chạy. Sau đó, bạn xóa dòng code rtc_set_time(12,38,00); đi và nạp lại 1 lần nữa VĐK. Từ đó khi chạy thì VĐK không set lại thời gian cho DS nữa và DS cứ chạy thôi.
              cái này lâu rồi có lẽ các bạn hồi đó đã làm được rồi.
              theo mình thì có các nút điều chỉnh thời gian : với 1 ds1307 ban đầu ráp vào mạch khi cắm điện lên thì nó sẽ không chạy, khi ấy dùng các nút điều chỉnh thời gian để cập nhật thời gian cho ds. khi cắm điện lại thì vdk chỉ đọc thời gian từ ds, chỉ cập nhật khi vào cài đặt.
              chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
              Everything should be made as simple as possible, but not simpler

              Comment


              • #22
                Làm đồng hồ phải có thêm mấy cái nút mà chỉnh thời gian, sau khi chỉnh xong thì lưu lại giá trị đã chỉnh vào RTC. Minh thấy mấy đoạn code trước thấy không có đoạn nào để chỉnh và lưu giá trị RTC cả, thế nên người lập trình mới ngồi canh thời gian để...nạp sao cho đúng giờ. Sau khi đồng hồ đã chạy thì chẳng lẽ muốn cài đặt giờ lại phải nạp lại...

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X