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 bqvietServo cuối cùng vẫn chỉ là điều chỉnh tốc độ và đọc phản hồi vị trí
Qua cổng song song LPT cổ
https://www.electronicsforu.com/elec...eed-controller
Qua cổng USB - xem thêm đám FT232RL-
Channel: Điện tử công nghiệp
22-11-2024, 15:56 -
-
bởi thiennam0703Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
-
Channel: Điện tử công nghiệp
22-11-2024, 15:32 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi bacthoMình cũng bị như vậy mà chưa biết ở đâu
-
Channel: Vi điều khiển AVR
21-11-2024, 21:00 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi nhathung1101Câu trả lời là không dùng được.
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....-
Channel: Thiết bị điện tử cá nhân
21-11-2024, 16:20 -
-
Comment on Tổng hợp các thông tin về mạch nạp cho AVRbởi Memem
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi MememMọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
bởi mantruongepuNhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
-
Channel: Điện tử dành cho người mới bắt đầu
20-11-2024, 14:40 -
-
bởi TherulCảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
-
Channel: từ PIC tới dsPIC
20-11-2024, 07:20 -
-
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 nguyendinhvanBạn nên nghiên cứu cái chấn lưu đèn ống Compact fluorescent lamp hay đèn compact trước đã. Nó rẻ đỡ tốn kém.
Sau khi hiểu rõ rồi thì chuyển sang cái mạch này.
Ở cái chấn lưu, tần số của nó linh tinh lắm, tùy điện áp nguồn, tùy...-
Channel: Hỗ trợ học tập
19-11-2024, 22:44 -
Comment