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 bpsvietnamNguyên lý hoạt động ngưng tụ lạnh của máy hút ẩm
Không khí ẩm sẽ được hút vào trong máy thông qua cửa hút gió, không khí vào trong tiếp tục đi qua giàn lạnh. Tại hệ thống làm lạnh, không khí ẩm sẽ ngưng tụ tạo thành nước. Nước...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 15:18 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
hôm nay, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
Hôm qua, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
Hôm qua, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 00:35 -
Comment