Mình mới viết thử đoạn code giao tiếp với 1307, ngắt ngoài 0 dùng để set time, 2 nút up down. Mình set thử cho ngày chuyển từ chủ nhật (giá trị 7)qua thứ 2( giá tri 1). Nhưng con ds lại chuyển từ 7 qua 0, rồi sau đó các nút up down chạy sai, phải chuyển tới set lại DAY mới chạy đúng lại. Chuyển giữa các ngày khác trong tuần thì ko bị như thế. Ai biết lỗi này là lỗi gì ko chỉ giúp
Thông báo
Collapse
No announcement yet.
Thắc mắc về thanh ghi DAY của DS1307 !!!
Collapse
X
-
mình ko theo ASM nến ko xem được nhưng có chút góp ý
tại sao rất nhiều người trong đó có bạn phức tạp hóa vấn đề việc ấn phím dùng ngắt ngoài làm chi cho phức tạp mà ko dùng 1 chân bất kì khác để thực hiện nhấn phím, dùng ngắt ngoài đôi khi vì độ nhạy của ngắt ngoài gây ra việc nhận vài giá trị ngắt tại cùng 1 lần nhấn
còn việc bạn set ngày chủ nhật qua thứ 2 lại bị lỗi thì mình ko hiểu lắm, nó khác j các thanh ghi còn lại đâu
chỉ cần 1 cái điều kiện y như các thanh ghi khác của con DS ví dụ như nếu UP được ấn thì Day+1, nếu Day=8(chuyển từ CN qua thứ 2) thì Day=1(tức thứ 2) rồi ghi lại giá trị Day này cho DS là được mà
mình làm cái đồng hồ với DS1307 viết bằng C , các thuật toán cho cả 7 thanh ghi time có vấn đề gì đâu nhỉ mà bạn lại chỉ bị ở thanh DayWebsite chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
-
dùng thuật toán như bạn mast90 là ok mà nhưng mà không cần dùng ngắt cũng được. nhưng nếu dùng phím exit để thoát ra khỏi chế độ cài đặt hoặc thoát ra khỏi bất cứ 1 chế độ nào đó thì nên dùng ngắt sẽ đảm bảo hơn. còn về phần DS1307 mình có thắc mắc là nếu mình không set time, date trong hàm main bằng dòng lệnh:
rtc_set_time(h,m,s);
rtc_set_date(day,month,year);
cho nó thì nó không hề chạy nhưng khi set time, date trong hàm main rồi mà khi mình reset lại vi điều khiển thì nó set lại thời gian luôn mà không đếm tiếp thời gian đã đếm được trước đó do lệnh set time, date mình đặt trong hàm main. ai biết cách set time, date mà khi reset lại vi điều khiển thời gian vẫn tiếp tục đếm mà không bị set lại thời gian như thời gian mình cài đặt ban đầu không?Last edited by nhquangdt3k5; 13-06-2011, 23:17.Never forget who you are!
Comment
-
Nguyên văn bởi kakalot_bk Xem bài viếtcai này chỉ có cách là bạn phải làm các nút để chỉnh ngày thôi. còn cách đọc thời gian thì mình sẽ dùng timer. như vậy sẽ không còn lệnh set_timer và set_date trong ham main nua khi đó khi reset lai thì vẫn không bị sai.Never forget who you are!
Comment
-
kakalot nói đúng đó, ko lên để cái set time cho DS ở trong main mà lên dùng ngắt
như mạch mình đã làm thì mình dùng 1 ngắt timer khoảng 0,1s thì bắt nó nhảy vào hàm đọc read_time của con DS như vậy 2 chuơng trình main và đọc time hay set_time đều ko ảnh hưởng j đến nhau, cứ sau 0,1s xảy ra ngắt 1 lần và đọc lại giá trị time cung cấp cho VDK
DS hoạt động độc lập với VDK và có thạch anh+nguồn nuôi riêng nên việc hiển thị sai time chỉ có thể do Code của bạn đọc viết lỗi khiến nó hiển thị sai
bên cạnh đó việc thoát khỏi chế độ set_time cũng ko cần thiết dùng ngắt, mình cũng có thiết lập 1 phím exit ấn bất cứ lúc nào cũng được và chạy luột, ko hề có hiện tượng lỗi hay ko nhận phímWebsite chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
Comment
-
Nguyên văn bởi mast090 Xem bài viếtkakalot nói đúng đó, ko lên để cái set time cho DS ở trong main mà lên dùng ngắt
như mạch mình đã làm thì mình dùng 1 ngắt timer khoảng 0,1s thì bắt nó nhảy vào hàm đọc read_time của con DS như vậy 2 chuơng trình main và đọc time hay set_time đều ko ảnh hưởng j đến nhau, cứ sau 0,1s xảy ra ngắt 1 lần và đọc lại giá trị time cung cấp cho VDK
DS hoạt động độc lập với VDK và có thạch anh+nguồn nuôi riêng nên việc hiển thị sai time chỉ có thể do Code của bạn đọc viết lỗi khiến nó hiển thị sai
bên cạnh đó việc thoát khỏi chế độ set_time cũng ko cần thiết dùng ngắt, mình cũng có thiết lập 1 phím exit ấn bất cứ lúc nào cũng được và chạy luột, ko hề có hiện tượng lỗi hay ko nhận phímNever forget who you are!
Comment
-
code của bạn có vấn đề rồi đó. khi DS chạy sai giờ hoặc DS mới mua về bạn chỉ cần set cho nó 1 lần thôi, sau đó nhiệm vụ của bạn là chỉ Read nó ra. khi tắt nguồn thì DS của bạn phải có Pin nuôi.
sau khi set xong đúng giờ bạn có thể nạp lại code cho CPU bằng cách bỏ hàm set đi, khi đó sau này trong chương trình của bạn ko có hàm set nữa mà chỉ có hàm Read do đó dù có reset thì DS vẫn chạy đúng giờ. sau một thời gian nếu DS chạy sai giờ thì set lạiLMD 238 Tăng Bạc Hổ - TP. Quy Nhơn.
Comment
-
Bạn nên để hàm set_timer và set_date trong chuong trình con chỉnh ngày giờ. Chương trình con này được gọi khi ngắt sảy ra.--> vì thế khi reset thi vẫn không bị set về giá trị ban đầu. bạn phải lắp pin để nuối DS phòng trường hợp khi mất điện thì con DS vẫn chạy đúng. lần đầu tiên khi các bạn nạp code xong thì bạn chỉnh luôn thời gian (bạn không nên khai báo thời gian mặc định). sau 1 thời gian DS có thể bị chạy sai thì bạn có thể chỉnh lại bằng các nút bấm. nếu làm như vậy thì bạn chỉ cần nạp code cho VDK 1 lần duy nhất.
Comment
-
Hi,
Để khởi động RTC thì bác chỉ cần ghi dữ liệu vào vị trí lưu trữ Giây là được rồi không cần phải set lại ngày làm gì đâu. Khi không cung cấp điện, RTC chạy bằng Pin dự phòng vì vậy ngày giờ cũng được tự cập nhật theo thời gian thực, VDK chỉ việc đọc giờ mà thôi không cần phải set lại.
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
-
trong chương trình chính của mình chỉ có lấy giá trị từ rtc ra rồi hiểu thị thôi, quét tới cuối cùng nó sẽ kiểm tra xem có bấm nút up hay down ko, nếu ko thì thoát ra quét lại từ đầu tiếp. Ý mình là khi đang quét led bình thường ko nhấn nút gì hết (nghĩa là chỉ đọc từ rtc ra thôi ấy) gải sử là 23h59min giá trị day xuất ra ko hiệu chỉnh gì cả, thì khi qua 0h00 thì day nhảy giá trị là 0 chứ ko phải 1 như trong datasheet nó báo là thanh ghi day chỉ chạy từ 1-7 ko có giá trị 0.
Với lại ACE có thuật toán chuyển chế độ để set thời gian nào ngắn gọn ko up cho mình tham khảo với, cái code trên mình viết cho khóa dưới để nó đọc dễ hiểu thôi. Có code ASM up lên giúp mình, thank ! À nếu kết hợp với nháy led đang điều chỉnh thì càng tốt, mình viết ra rồi mà thấy hơi hao tốn các bit định địa chỉ.Last edited by chung1608; 14-06-2011, 20:05.
Comment
-
Nguyên văn bởi kakalot_bk Xem bài viếtBạn nên để hàm set_timer và set_date trong chuong trình con chỉnh ngày giờ. Chương trình con này được gọi khi ngắt sảy ra.--> vì thế khi reset thi vẫn không bị set về giá trị ban đầu. bạn phải lắp pin để nuối DS phòng trường hợp khi mất điện thì con DS vẫn chạy đúng. lần đầu tiên khi các bạn nạp code xong thì bạn chỉnh luôn thời gian (bạn không nên khai báo thời gian mặc định). sau 1 thời gian DS có thể bị chạy sai thì bạn có thể chỉnh lại bằng các nút bấm. nếu làm như vậy thì bạn chỉ cần nạp code cho VDK 1 lần duy nhất.
cảm ơn nhiều.Attached FilesNever forget who you are!
Comment
-
Nguyên văn bởi nhquangdt3k5 Xem bài viếtmình dùng hàm rtc_set_time va rtc_set_date để khai báo thời gian mặc định cho nó trong hàm main. nên khi reset vi điều khiển lại nó cũng bị reset luôn thời gian về mặc định nhưng nếu không dùng hàm rtc_set_time, date thì nó không chạy. nhưng nếu set mặc định như thế thì nó lại chạy đúng chỉ mỗi khi reset vi điều khiển thì thời gian lại về giá trị mặc định ban đầu. mình chưa nghĩ ra cách giải quyết nó. nếu như bạn nói đặt nó trong chương trình con rồi dùng ngắt thì sao nhỉ??? mình làm sao mà set được thời gian mặc định từ trước để khi bật lên nó bắt đầu đếm từ đấy nhỉ? mình có gửi kèm code lên các bạn xem giúp xem.
cảm ơn nhiều.
khi mà chưa set time lần nào cho VDK thì nó sẽ luôn cho giá trị các thanh ghi = 0, vì vậy trên LCD nó sẽ chỉ hiển thị tất cả các time =0, và khi set 1 lần rồi và có nguồn nuôi thì nó luôn tự đếm giờ và làm việc độc lập VDK
Mình nghĩ chắc bạn lập trình theo kiểu khởi tạo VDK, khởi tạo set time cho VDK rồi mới cho 1 vòng lặp vô tận 2 cặp lệnh đọc time+ hiển thị time ra. nếu làm thế này thì khi reset VDK thì chắc chắn nó sẽ tự reset luôn con DS. Bạn chỉ cần khởi tạo các thứ cần thiết cho VDK và LCD của bạn thôi, rồi nhảy luôn vào cái vòng lặp vô tận kia, khi chưa set_time cho nó thì nó cứ hiển thị giá trị 0 trên màn hình mà ko thay đổi, vào đây bạn chỉ nhấn phím để chỉnh time sau đó ghi giá trị này vào cho DS, lúc này DS sẽ tự đếm và xuất cho ta giá trị time cần
////mà mình ko hiểu theo ý các bạn là set_time với set_day là gì mà lắm set thế, một khi chỉnh xong các giá trị về thời gian xong(cụ thể là chỉnh cho 7 thanh ghi) thì mình ghi lại cả 7 giá trị này cho DS chứ ko cần phải tách riêng rẽ thếWebsite chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
Comment
-
Nguyên văn bởi chung1608 Xem bài viếttrong chương trình chính của mình chỉ có lấy giá trị từ rtc ra rồi hiểu thị thôi, quét tới cuối cùng nó sẽ kiểm tra xem có bấm nút up hay down ko, nếu ko thì thoát ra quét lại từ đầu tiếp. Ý mình là khi đang quét led bình thường ko nhấn nút gì hết (nghĩa là chỉ đọc từ rtc ra thôi ấy) gải sử là 23h59min giá trị day xuất ra ko hiệu chỉnh gì cả, thì khi qua 0h00 thì day nhảy giá trị là 0 chứ ko phải 1 như trong datasheet nó báo là thanh ghi day chỉ chạy từ 1-7 ko có giá trị 0.Website chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
Comment
-
Nguyên văn bởi mast090 Xem bài viếthjc, ko biết nhiều về AVR lên chỉ hiểu mỗi cái chỉnh giờ thôi, còn đâu chịu. nhưng mình nhắc bạn 1 điều rằng một khi đã set_time cho DS thì ko bao giờ có chuyện nó bị reset time khi reset VDK cả, 2 con này hoạt động độc lập nhau và DS còn có nguồn nuôi riêng để đề phòng mất điện, chỉ trừ trường hợp bạn ko lắp nguồn cho nó thôi
khi mà chưa set time lần nào cho VDK thì nó sẽ luôn cho giá trị các thanh ghi = 0, vì vậy trên LCD nó sẽ chỉ hiển thị tất cả các time =0, và khi set 1 lần rồi và có nguồn nuôi thì nó luôn tự đếm giờ và làm việc độc lập VDK
Mình nghĩ chắc bạn lập trình theo kiểu khởi tạo VDK, khởi tạo set time cho VDK rồi mới cho 1 vòng lặp vô tận 2 cặp lệnh đọc time+ hiển thị time ra. nếu làm thế này thì khi reset VDK thì chắc chắn nó sẽ tự reset luôn con DS. Bạn chỉ cần khởi tạo các thứ cần thiết cho VDK và LCD của bạn thôi, rồi nhảy luôn vào cái vòng lặp vô tận kia, khi chưa set_time cho nó thì nó cứ hiển thị giá trị 0 trên màn hình mà ko thay đổi, vào đây bạn chỉ nhấn phím để chỉnh time sau đó ghi giá trị này vào cho DS, lúc này DS sẽ tự đếm và xuất cho ta giá trị time cần
////mà mình ko hiểu theo ý các bạn là set_time với set_day là gì mà lắm set thế, một khi chỉnh xong các giá trị về thời gian xong(cụ thể là chỉnh cho 7 thanh ghi) thì mình ghi lại cả 7 giá trị này cho DS chứ ko cần phải tách riêng rẽ thếNever forget who you are!
Comment
Bài viết mới nhất
Collapse
-
bởi nguyendinhvanỞ đây thì cũng chỉ có mấy cái máy tập gym là cùng, vào Nhà máy thì không đủ tuổi, mà bài thực hành thì không đủ cơm trưa.
Mà mấy cái máy gym thì cần giải pháp đồng bộ tốt hơn là biện pháp chắp vá....-
Channel: Đặt hàng
26-12-2024, 23:12 -
-
Trả lời cho Mạch tự động bật nguồnbởi nguyendinhvanMấy cái hệ thống Minh Thông đó là tôi tránh xa.
Vì một ngày mình bấm nút La- bô mấy lần, bấm vào những giờ nào nó cũng lưu vào datalog.
Dễ lộ bảo mật.
...-
Channel: Điện tử gia dụng
26-12-2024, 23:00 -
-
Trả lời cho Mạch tự động bật nguồnbởi vi van phamĐinh Vặn và Nhà Thùng ngồi uống bia thì cúp điện. Đinh Vặn vào trạng thái stanby, cầm ly bia mà không uống được. Đến khi có điện, cảm biến của Đinh Vặn phát huy chức năng, cầm chai bia tu 1 hơi.
Nhà Thùng vào trạng thái stanby,...-
Channel: Điện tử gia dụng
26-12-2024, 07:47 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Lão hôm nay uốn mấy lọ? Làm tôi đọc bài của lão toát cả mồ hôi, mãi khi nhìn sơ đồ mới hiểu....
Aiza... Lão lại đi về thời 0.4 rồi! Giờ cảm biến và trợ lý và thiết bị có đầy...
Tôi về đến Pháp Vân, gọi...-
Channel: Điện tử gia dụng
25-12-2024, 23:30 -
-
bởi nguyendinhvanĐa số các đồ điện là cứ có điện là sẽ hoạt động.
Nhưng ngày nay, nhiều thiết bị điện có điều khiển không tự hoạt động khi có điện nguồn. Máy chỉ ở chế độ stanby, tới khi người sử dụng nhấn phím power.
Ví dụ...-
Channel: Điện tử gia dụng
25-12-2024, 21:02 -
-
bởi nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
22-12-2024, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
22-12-2024, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
22-12-2024, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
Comment