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 AaaabbbbbEm chào các anh chị ,cô chú . Em đang có 1 đề tài: Mô phỏng điều khiển động cơ 1 chiều và bộ điều khiển điện áp tự động (AVR) sử dụng MATLAB/Simulink và Arduino . Anh chị có thế giải thích hoặc định hướng giúp em với được không ạ . Em xin cảm ơn !!...
-
Channel: Vi điều khiển AVR
30-10-2024, 16:38 -
-
bởi 2embeyeuem mới nhập môn, bác nào có sơ đồ của mạch này và cách cắm mạch trên panel cho em xin với, em cảm ơn ạ
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 15:52 -
-
bởi dqt21091997Hi mọi người,
Team mình hiện là đối tác phân phối cho 1 dịch vụ Proxy US chuẩn bị mở mang tên Proxy Compass. Mọi người có thể trải nghiệm ở đây: https://proxycompass.com/vi/free-trial/
Điểm mạnh của Proxy Compass là:
- 50 địa chỉ IP proxy
...-
Channel: Tổng quan về ngành viễn thông
30-10-2024, 14:46 -
-
Trả lời cho Thắc mắc về kiến thức điện xoay chiềubởi SteinsKMình nhớ là do điện AC không có chia cực cố định như DC, thêm vào đó thì ổ điện loại mà 2 lỗ thì cũng không có phân biệt chiều cắm, thành ra mình cắm chiều nào cũng được. Đây là em hiểu như vậy, có bác nào có ý kiến khác không ạ....
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 09:57 -
-
bởi tivungvechào mọi người, em là sinh viên mới tìm hiểu về điện em có thắc mắc là tại sao điện AC ở nhà dùng có phích cắm khi cắm vào ổ điện thì cắm chiều nào cũng được, mà em đọc trên mạng thấy điện AC có dây trung tính và dây pha mà nhỉ...
-
Channel: Điện tử dành cho người mới bắt đầu
27-10-2024, 14:25 -
-
Trả lời cho ccs - 1 nút nhấn điều khiển 2 led - cần giúp ahbởi Truong2005Cám ơn nhiều! Code đẫ chạy
-
Channel: từ PIC tới dsPIC
26-10-2024, 21:21 -
-
bởi Manh.n.trCó ai từng thiết kế mạch cảm biến EC chưa ạ, cho em xin kinh nghiệm với ạ, em đang làm đề tài này bị mông lung quá
-
Channel: Hỗ trợ học tập
25-10-2024, 07:55 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi matnetgia99bạn giảm con C4, C5 (và giặt R song song với chúng) xem tần số tăng lên không
-
Channel: Hỗ trợ học tập
24-10-2024, 18:58 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi SteinsKEm cập nhật xíu nha mọi người, thì bữa trước em có mượn cái ossiloscope để đo lại thì mạch có tần số ngõ ra là 35kHz, sau khi em thay đổi L1=L2=1,5mH thì tần số có giảm xuống còn xấp xỉ 34kHz. Đổi L4=4.6mH và TR1 em có thay thành 1 con biến...
-
Channel: Hỗ trợ học tập
24-10-2024, 11:22 -
Comment