RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

DS1307 phải chạm tay mới chạy!!! help !!!

Collapse
This topic is closed.
X
X
 
  • Giờ
  • Show
Clear All
new posts

  • lengo90
    replied
    bạn chỉ clr bít cuối của thanh ghi giây xuống 0 thôi đừng xóa tất cả thanh ghi, sẽ bị sai giờ, còn khi mất điện mà mất hết giờ do trong quá trình lưu giờ đâu chuơng trình sai nên nó ghi tất vào các thanh ghi khác nữa nên sai

    Leave a comment:


  • hoangex
    replied
    Nguyên văn bởi nmhai Xem bài viết
    Chú nạp thì chú chỉ clear cái bit CH thôi chứ, ai lại clear toàn bộ các thanh ghi hour, min, sec. Khi khởi động, chú read các giá trị thanh ghi hiện tại hour, min, sec. Rồi chú write nó vào lại. Để clear bit CH ở thanh ghi giây thì giá trị của nó là: value_sec_write = value_sec_read & (~0x80). Thì nghĩa là chú đã clear bit CH rồi. Nhớ là chỉ clear 1 bit CH thôi, không được clear các giá trị khác.
    Cám ơn các anh đã giúp đỡ, em làm được rùi!!!!!!!!!! Thanksssssssssssssssssssssssssssss

    Leave a comment:


  • nmhai
    replied
    Chú nạp thì chú chỉ clear cái bit CH thôi chứ, ai lại clear toàn bộ các thanh ghi hour, min, sec. Khi khởi động, chú read các giá trị thanh ghi hiện tại hour, min, sec. Rồi chú write nó vào lại. Để clear bit CH ở thanh ghi giây thì giá trị của nó là: value_sec_write = value_sec_read & (~0x80). Thì nghĩa là chú đã clear bit CH rồi. Nhớ là chỉ clear 1 bit CH thôi, không được clear các giá trị khác.

    Leave a comment:


  • chung1608
    replied
    Nguyên văn bởi hoangex Xem bài viết
    Dạ không phải chip không hoạt động đâu anh mà là nó trở lại trạng thái ban đầu sec = min = hour =0; em set cho thanh ghi giây bằng 0 ngay ở đầu hàm void, nên bị vậy. Set ở đó có đúng không anh ?, em mô phỏng trên proteus cũng bị vậy nên chắc không phải tại nhiễu. Không biết có làm sai gì không, Em mới tìm hiểu về VXL nên còn gà lắm !!
    bạn nạp code có set thanh ghi giây vào mạch 1 lần nữa đi, rồi xóa cái đoạn code set thanh ghi đó đi (nghĩa là ko đụng gì tới con DS nữa chỉ vào phần quét led là mới đọc ra thôi ) sau đó nạp lại cho chip

    Leave a comment:


  • hoangex
    replied
    Nguyên văn bởi chung1608 Xem bài viết

    Bit CH của thanh ghi giây là bit cho phép DS hoạt động (khi được xóa về 0). Khi DS mới mua về thường nó là mức 1, khi bạn gắn vào mạch đã có pin rồi và lần đầu tiên ghi vào thanh ghi giây giá trị 00H thì DS sẽ chạy mãi cho tới khi bit CH bị set lên 1. Vì thế bạn chỉ cần xóa nó lần đầu tiên thôi, khi mất điện rồi có điện lại mà DS ko hoạt động thì có thể chip bị nhiễu hoặc chân thạch anh tiếp xúc ko tốt. Đường đồng chân thạch anh bạn nên giảm tối đa độ dài và phủ GND xung quanh là tốt nhất, trong hình, thạch anh của mình cho dán sát chân DS luôn và phủ GND xung quanh
    Dạ không phải chip không hoạt động đâu anh mà là nó trở lại trạng thái ban đầu sec = min = hour =0; em set cho thanh ghi giây bằng 0 ngay ở đầu hàm void, nên bị vậy. Set ở đó có đúng không anh ?, em mô phỏng trên proteus cũng bị vậy nên chắc không phải tại nhiễu. Không biết có làm sai gì không, Em mới tìm hiểu về VXL nên còn gà lắm !!

    Leave a comment:


  • chung1608
    replied
    Nguyên văn bởi hoangex Xem bài viết
    Dĩ nhiên là có pin chứ pác, mấy pác kia chỉ là set lại giá trị sec = 0 thì chạy, vậy sau mỗi lần reset thì sec lại nạp lại giá trị 0 mất rùi ????

    Bit CH của thanh ghi giây là bit cho phép DS hoạt động (khi được xóa về 0). Khi DS mới mua về thường nó là mức 1, khi bạn gắn vào mạch đã có pin rồi và lần đầu tiên ghi vào thanh ghi giây giá trị 00H thì DS sẽ chạy mãi cho tới khi bit CH bị set lên 1. Vì thế bạn chỉ cần xóa nó lần đầu tiên thôi, khi mất điện rồi có điện lại mà DS ko hoạt động thì có thể chip bị nhiễu hoặc chân thạch anh tiếp xúc ko tốt. Đường đồng chân thạch anh bạn nên giảm tối đa độ dài và phủ GND xung quanh là tốt nhất, trong hình, thạch anh của mình cho dán sát chân DS luôn và phủ GND xung quanh

    Leave a comment:


  • hoangex
    replied
    Nguyên văn bởi nmhai Xem bài viết
    Chú có dùng PIN không vậy, sao lạ thế, hay là khi khởi động chú nạp lại giá trị time.
    Dĩ nhiên là có pin chứ pác, mấy pác kia chỉ là set lại giá trị sec = 0 thì chạy, vậy sau mỗi lần reset thì sec lại nạp lại giá trị 0 mất rùi ????

    Leave a comment:


  • nmhai
    replied
    Chú có dùng PIN không vậy, sao lạ thế, hay là khi khởi động chú nạp lại giá trị time.

    Leave a comment:


  • hoangex
    replied
    Nguyên văn bởi lengo90 Xem bài viết
    chỉ làm 1 lần lúc bắt đầu khởi động thôi cho ở đầu chương trình, mà xoá về 0 xong rồi phải viết vào RTC đấy, thì nó mới có tác dụng, bạn đọc kỹ về datasheet con ds1307 đi nhé
    Mình đã đưa sec = 0 và ghi vào RTC ở đầu hàm void như bạn hướng dẫn. Kết quả là nó chạy lại như bình thường, nhưng khi mất điện hoặc reset thì lại mất hết dữ liệu ngày giờ, phải chỉnh lại. Mình làm có gì sai không bạn.

    Leave a comment:


  • lengo90
    replied
    Nguyên văn bởi hoangdai Xem bài viết
    Có khi chưa có trở treo Vcc.
    bạn đấy nói chạy ngon lành được 2 ngày rồi, không có lý gì không có trở treo mà chạy đc 2 ngày giờ lại không chạy nữa, với lại con 8051 ngoài port0 ra thì các port khác giao tiếp với ds khỏi cần trở treo vẫn chạy như thường. nguyên nhân này là do khi mình để bản mạch trên 1 vật gì đó có điện trở trong khi mình đang chỉnh giờ nên vô tình khi write vào thanh ghi giây con ds1307 bít cuối cùng được setb lên 1 làm cho con ds ngưng hoạt động, ngày xưa mình hay cầm tay vào đó rồi chỉnh giờ thì bị như vậy, từ khi treo nó lên chỗ khô ráo thì không thấy bị nữa

    Leave a comment:


  • voiconvuive
    replied
    bạn vẽ trên cùng board mạch hay nối bus qua ,thử gỡ chip ra nạp lại xem sao ,khởi tạo lại giá trị cho ds lun nha .

    nếu nối bus qua thì xoắn trực 2 dây sda và scl lại để chống nhiễu @@

    Leave a comment:


  • hoangdai
    replied
    Có khi chưa có trở treo Vcc.

    Leave a comment:


  • bocapchua
    replied
    Xem kỹ lại, khả năng là khi chạm tay vào SDA và SCL thì nó sẽ chạy tốt. Tự nghiên cứu thêm nếu gặp đúng trường hợp đó nhé, chịu khó suy nghĩ sẽ ra, heheee

    Leave a comment:


  • hoangex
    replied
    Nguyên văn bởi lengo90 Xem bài viết
    chỉ làm 1 lần lúc bắt đầu khởi động thôi cho ở đầu chương trình, mà xoá về 0 xong rồi phải viết vào RTC đấy, thì nó mới có tác dụng, bạn đọc kỹ về datasheet con ds1307 đi nhé
    Ok de mình thử, cám ơn bạn nhiều !!

    Leave a comment:


  • lengo90
    replied
    chỉ làm 1 lần lúc bắt đầu khởi động thôi cho ở đầu chương trình, mà xoá về 0 xong rồi phải viết vào RTC đấy, thì nó mới có tác dụng, bạn đọc kỹ về datasheet con ds1307 đi nhé

    Leave a comment:

Về tác giả

Collapse

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

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

Collapse

Đang tải...