Chức năng và hoạt động của RTC DS1307

Chức năng và hoạt động của RTC DS1307


Trong bài viết này nói về cấu tạo, tổ chức thanh ghi, mã hóa số liệu của DS1307. Tất cả những gì dưới đây giúp các bạn hiểu rõ hơn phần nào về con thời gian thực DS1307 giao tiếp qua chuẩn truyền thông I2C.
I ) Giới thiệu về thời gian thực DS13307
DS1307 là chip thời gian thực hay RTC (Read time clock). Đây là một IC tích hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời gian : Thứ, ngày,tháng, năm, giờ, phút, giây. DS1307 là chế tạo bởi Dallas. Chip  này có 7 thanh ghi 8 bit mỗi thanh ghi này chứa : Thứ , ngày, tháng, năm, giờ , phút, giây. Ngoài ra DS1307 còn chứa 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống các thanh ghi này có thể dùng như là RAM. DS1307 được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và ghi từ DS1307 thông qua chuẩn truyền thông này. Do nó được giao tiếp chuẩn I2C nên cấu tạo bên ngoài nó rất đơn giản. Ví dụ 1 dạng đóng vỏ của DS1307 như sau :


Trên là hai dạng cấu tạo của DS1307. Chip này có 8 chân và chúng ta hay dùng là dạng Dip và các chân nó được mô tả như sau :
+ X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh 32.768Khz.[separator]
+ Vbat là nguồn nuôi cho chip. Nguồn này từ ( 2V- 3.5V) ta lấy pin có nguồn 3V. Đây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc mà DS1307 vẫn hoạt động theo thời gian
+ Vcc là nguồn cho giao tiếp I2C. Điện áp cung cấp là 5V chuẩn và được dùng chung với vi xử lý. Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn hoạt động bình thường nhưng mà không ghi và đọc được dữ liệu.
+ GND là nguồn Mass chung cho cả Vcc và Vbat
+ SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông). Chân này tôi nghĩ không ảnh hưởng đến thời gian thực nên chúng ta không sử dụng chân này trong thời gian thực và bỏ trống chân này!
+ SCL và SDA là hai bus dữ liệu của DS1307. Thông tin truyền và ghi đều được truyền qua 2 đường truyền này theo chuẩn I2C
II) Ghép nối DS1307 với vi điều khiển
Do DS1307 giao tiếp chuẩn I2C nên việc ghép nối nó với vi điều khiển khá là đơn giản và theo datasheet thì tôi đưa ra sơ đồ sau :


Ds1307 nó chỉ giao tiếp với vi điều khiển với 2 đường truyền SCL và SDA nên do đó trên vi xử lý cần phải xác định chân nào trên vi xử lý nó có SCL và SDA để nối với DS1307 cái này đối với dòng PIC, AVR còn với dòng Psoc nó có sự khác tùy theo kiều Fimware hay harware mà các chân SDA và SCL nó sẽ nằm ở chân nào cái được thiết lập trong phần mền.
III : Tổ chức thanh ghi trong DS1307
Cấu tạo bên trong của DS1307 bao gồm mạch nguồn, dao động, logic và con trỏ ,thanh ghi thực hiện việc ghi đọc. Do trong các bài toán chúng ta thường sử dụng DS1307 cho đồng hồ thời gian thực nên do đó chúng ta chỉ quan tâm đến việc ghi đọc các thanh ghi cần thiết (sec, min, hour…) thông qua chuẩn truyền thông I2C còn các thanh ghi khác thì chúng ta có thể tìm hiểu kỹ trong datasheet! Vì các thanh ghi đó được coi như là RAM lưu trữ. Nên do đó tôi chỉ giới thiệu các thanh ghi có chức năng thời gian thực phục vụ cho bài toán thời gian.
Trong bộ nhớ của DS1307 có tất cả 64 thanh ghi địa chỉ từ 0 đến 63 và được bắt đầu từ 0x00 đến 0x3F nhưng trong đó chỉ có 8 thanh ghi đầu là thanh ghi thời gian thực nên chúng ta sẽ đi sâu vào 8 thanh ghi ( chức năng và địa chỉ thanh ghi thời gian thực này). Nhìn vào bảng thanh ghi trong datasheet ta sẽ thấy như sau :


Nhìn vào bảng trên chúng ta thấy các thanh ghi thời gian thực nó được sắp sếp theo thứ tự : giây, phút, giờ, thứ, ngày , tháng, năm và bắt đầu từ thanh ghi Giây (0x00) và kết thúc bằng thanh ghi năm (0x06). Riêng thanh ghi Control dùng để điều khiển ngõ ra của chân SQW/OUT nên trong thực tế nên không mấy ai sử dụng thanh ghi này trong thời gian thực nên chúng ta bỏ qua thanh ghi này!
Do 7 thanh ghi đầu tiên là khá quan trọng cho thời gian thực và là thanh ghi quan trọng nhất trong con DS1307 nên chúng ta phải hiểu được cách tổ chức thanh ghi này trong DS1307. Tôi tham khảo datasheet và đưa ra tổ chức thanh ghi trong datasheet thời gian thực như sau :


Nhìn bảng trên chúng ta thấy các thanh ghi được mã hóa theo bit. Mỗi bit trong thanh ghi đều có chức năng riêng và tôi sẽ trình bày chi tiết như sau :
+ Thanh ghi giây (0x00) : Đây là thanh ghi giây của DS1307. Nhìn trên bảng trên ta thấy được từ bit 0 đến bit 3 là dùng để mã hóa số BCD hàng đơn vị của giây. Tiếp theo từ bit 4 đến bit 6 dùng để mã hóa BCD hàng chục của giây. Tại sao nó chỉ sử dụng có 3 bit này là do giây của chúng ta lớn nhất chỉ đến 59 nên hàng chục lớn nhất là 5 nên chỉ cần 3 thanh ghi này là cũng đủ mã hóa rồi! Còn bit thứ 7 có tên là “CH” theo tôi nó có nghĩa là “ Clock Halt – Treo đồng hồ” Do đó nếu mà bit 7 này mà được đưa lên 1 tức là khóa đồng hồ nên do đó nó vô hiệu hóa chip và chip không hoạt động. Nên do vậy lúc nào cũng phải cho bit 7 này luôn xuống 0 từ lúc đầu( cái này sử dụng lệnh end với 0x7F)
+ Thanh ghi phút (0x01) : Đây là thanh ghi phút của DS1307. Cũng nhìn trên bảng thanh ghi này được tổ chức như thanh ghi giây. Cũng là 3 bit thấp dùng để mã hóa BCD chữ số hàng đơn vị và số hàng trục chỉ lớn nhất là 5 nên do đó chỉ cần dùng từ bit 4 đến bit 6 để mã hóa BCD tiếp chữ số hàng chục. Nhưng thanh ghi này có sự khác biệt với thanh ghi giây là bit 7 nó đã mặc định bằng 0 rồi nên do đó chúng ta không phải làm gì với bit 7 mà kệ nó!
+ Thanh ghi giờ (0x02) : Đây là thanh ghi giờ của DS1307 và tôi thấy thanh ghi này được coi là phức tạp nhất vì nó lằng nhà lằng nhằng nhưng mà nhìn bảng thì thấy các tổ chức của nó cũng hợp lý. Trước tiên chúng ta thấy được rằng từ bit 0 đến bit 3 nó dùng để mã hóa BCD của chữ số hàng đơn vị của giờ. Nhưng mà giờ nó còn có chế độ 24h và 12h nên do đó nó phức tạp ở các bit cao (bit 4 đến bit 7) và sự chọn chế độ 12h và 24h nó lại nằm ở bit 6. Nếu bit 6=0 thì  ở chế độ 24h thì do chữ số hàng trục lớn nhất là 2 nên do đó nó chỉ dùng 2 bit ( bit 4 và bit 5 ) để mã hóa BCD chữ số hàng trục của giờ. Nếu bit 6 =1 thì chế độ 12h được chọn nhưng do chữ số của hàng trục của giờ trong chế độ này chỉ lớn nhất là 1 nên do đó bit thứ 4 là đủ để mã hóa BCD chữ số hàng trục của giờ rồi nhưng mà bit thứ 5 nó lại dùng để chỉ buổi sáng hay chiều, nếu mà bit 5 = 0 là AM và bit 5 =1 là PM. Trong cả 2 chế độ 12h và 24h thì bit 7 =0 nên ta ko cần chú ý đến thanh ghi này.
+ Thanh ghi thứ (0x03): Đây là thanh ghi thứ trong tuần của DS1307 và thanh ghi này khá là đơn giản trong DS1307. Nó dùng số để chỉ thứ trong tuần nên do đó nó chỉ lấy từ 1 đến 7 tương đương từ thứ hai đến chủ nhật. Nên do đó nó dùng 3 bit thấp (bit 0 đến bit 2) để mã hóa BCD ra thứ trong ngày. Còn các bit từ 3 đến 7 thì nó mặc định bằng 0 và ta không làm gì với các bit này!
+ Thanh ghi ngày (0x04) : Đây là thanh ghi ngày trong tháng của DS1307. Do trong các tháng có số ngày khác nhau nhưng mà nằm trong khoảng từ 1đến 31 ngày. Do đó thanh ghi này các bit được tổ chức khá là đơn giản. Nó dùng 4 bit thấp (bit0 đến bit 3) dùng để mã hóa BCD ra chữ số hàng đơn vị của ngày trong tháng. Nhưng do chữ số hàng trục của ngày trong tháng chỉ lớn nhất là 3 nên chỉ dùng bit 4 và bit 5 là đủ mã hóa BCD rồi. Còn bit 6 và bit 7 chúng ta không làm gì và nó mặc định bằng 0.
+ Thanh ghi tháng (0x05) :  Đây là thanh ghi tháng trong năm của DS1307. Tháng trong năm chỉ có từ 1 đến 12 tháng nên việc tổ chức trong bit cũng tương tự như ngày trong tháng nên do cũng 4 bit thấp (từ bit 0 đến bit 3) mã hóa BCD hàng đơn vị của tháng. Nhưng do hàng chục chỉ lớn nhất là 1 nên chỉ dùng 1 bit thứ 4 để mã hóa BCD ra chữ số hàng trục và các bit còn lại từ bit 5 đến bit 7 thì bỏ trống và nó mặc định cho xuống mức 0.
+ Thanh ghi năm (0x06): Đây là thanh ghi năm trong DS1307. DS1307 chỉ có 100 năm thôi tương đương với 00 đến 99 nên nó dùng tất cả các bit thấp và bit cao để mã hóa BCD ra năm!
+ Thanh ghi điều khiển (0x07): Đây là thanh ghi điều khiển quá trình ghi của DS1307 và Quá trình ghi phải được kết thúc bằng địa chỉ 0x93.

IV: Tổng kết
Như chúng ta đã biết thì DS1307 nó mã hóa ra số BCD như tôi đã nói ở trên do đó khi ghi vào các thanh ghi này cũng phải là số BCD. Vì vậy việc đọc và ghi thì đều là giá trị BCD trong lập trình thì việc đưa các giá trị BCD này vào khó khăn nên chúng ta thường dùng biến đổi qua lại giữa BCD và thập lục phân để dễ dàng kiểm soát của các giá trị của thanh ghi.
Tôi lấy ví dụ như thế này : Thanh ghi giờ cho giá trị là 0x10 đây là mã BCD nhưng mà khi chuyển sang mã thập lục phân thì giá trị nó là 16
Cái này các bạn tìm hiểu các chuyển đổi và cấu tạo của hai mã này. Ở đây tôi không nói về nó! Nói chung trong LED 7 vạch thì các mã BCD này rất tiện dùng vì LED 7 được mã hóa theo BCD khi dùng thêm con mã hóa 7447 chả hạn!
Trong quá trình ghi dữ liệu cho các thanh ghi thời gian thực chúng ta cũng phải chuyển đổi thành mã BCD tương ứng sau đó mới ghi vào cho DS1307.
Việc đọc và ghi dữ liệu cho DS1307 phụ thuộc vào chương trình điều khiển. Tôi sẽ viết bài hướng dẫn đọc và ghi dữ liệu dùng PSoc!

Bình Luận
Cùng danh mục: Điện - Điện tử căn bản

Dòng điện một chiều - Công thức tính toán và ứng dụng thực tế

16/10/2023 21:34:31 / Lượt xem: 1428 / Người đăng: biendt

Điện là nguồn năng lượng quan trọng, góp phần tạo nên sự phát triển của máy móc, thiết bị điện tử… và mang lại nhiều tiện nghi cho con người. Dòng điện 1 chiều quen thuộc, cơ bản được phát minh đầu tiên có tính ứng dụng cao trong cuộc sống. Việc hiểu rõ về dòng điện 1 chiều sẽ giúp bạn sử dụng các thiết bị một cách hiệu quả. Đặc biệt với những người làm việc trong lĩnh vực kỹ thuật điện cần hiểu về dòng điện 1 chiều là gì? Nguyên lý làm việc và công thức tính để đảm bảo sử dụng an toàn, lắp đặt thiết bị hiệu quả.

Cảm biến hồng ngoại là gì? Nguyên lý, ứng dụng và những điều cần lưu ý

28/09/2023 21:49:40 / Lượt xem: 733 / Người đăng: biendt

Cảm biến là thiết bị điện tự động hóa quan trọng, cần thiết giúp các hệ thống vận hành một cách hiệu quả, chính xác theo thiết kế kỹ thuật ban đầu. Cảm biến có nhiều loại, được thiết kế dựa trên các nguyên tắc vật lý cơ bản, tiếp nhận thông tin và chuyển đổi tín hiệu. Trong đó có cảm biến hồng ngoại - tính ứng dụng cao trong nhiều hệ thống. Vậy, cảm biến hồng ngoại là gì? Nguyên lý hoạt động của cảm biến hồng ngoại như thế nào? Ứng dụng thực tế và những lưu ý khi sử dụng thiết bị?

Linh kiện DIAC là gì? Cấu trúc lớp, ký hiệu, nguyên lý và ứng dụng thực tế.

10/09/2023 06:55:49 / Lượt xem: 761 / Người đăng: biendt

DIAC viết tắt của cụm từ Diode for alternating current hay Diode AC là một linh kiện bán dẫn cho dòng điện xoay chiều. Bản chất của DIAC là một diode bán dẫn có thể chuyển sang trại thái dẫn dòng, ngay khi điện áp rơi đạt mức bị đánh thủng VBO (break out). Có thể hiểu đơn giản, DIAC có thể dẫn dòng điện xoay chiều, nếu như điện áp đặt lên nó lớn hơn giới hạn điện áp ngưỡng của nó. Thông thường, điện áp ngưỡng của một DIAC là 30V.

Sơ đồ chân IC 74LS00 và Mạch ứng dụng

06/03/2022 12:01:50 / Lượt xem: 1738 / Người đăng: biendt

74LS00 là một thành viên học IC (vi mạch) 74XXYY. Các vi mạch 74xxyy là các cổng logic của điện tử kỹ thuật số. IC 74LS00 có bốn cổng NAND . Ngoài ra mỗi cổng có hai đầu vào. Do đó đặt tên CỔNG NAND ĐẦU VÀO QUAD HAI. Các ứng dụng : + Logic mục đích chung+ Điện tử kỹ thuật số+ PC và máy tính xách tay+ Máy chủ+ ALU+ Kết nối mạng+ Hệ thống kỹ thuật số

Điện 2 pha là gì? Điện 2 pha khác gì so với điện 1 pha

08/09/2021 17:09:45 / Lượt xem: 2040 / Người đăng: biendt

Trên thực tế nhiều người vẫn lầm tưởng và không phân biệt được giữa điện 1 pha, 2 pha và 3 pha. Thông thường, điện 1 pha được sử dụng cho sinh hoạt gia đình, công suất thiết bị nhỏ, các thiết bị không bị hao phí về điện năng nhiều. Điện 3 pha được dùng cho việc truyền tải, sản xuất công nghiệp sử dụng thiết bị điện có công suất lớn nhằm giải quyết các vấn đề tổn hao điện năng. Còn điện 2 pha được sử dụng như thế nào thì các bạn tham khảo bài viết dưới đây