Tổng quan về DS1307
1. Sơ đồ chân:
X1, X2: Kết nối với thạch anh tạo xung dao động
VBAT : Ngõ ra kết nối với Pin để duy trì bộ đếm thời gian thực.
GND : Nối đất, nguồn âm.
Vcc : Nối nguồn (Nguồn để truyền dữ liệu)
SQW/OUT: Chân xuất xung vuông từ DS1307 ra ngoài
SCL : Chân clock để truyền dữ liệu
SDA : Chân dữ liệu.
2. Sơ đồ kết nối với các linh kiện ngoại vi
- Chân SQW/OUT nếu không sử dụng có thể để trông không kết nối với các bộ phận ngoại vi khác.
- Nguồn sử dụng: Nguồn DC điện áp nằm trong khoảng 4.5V đến 5.5V.
- Thạch anh có độ lớn 32.768 kHz.
3. RAM lưu trữ và điều khiển DS1307 (RTC RAM)
- RTC RAM có địa chỉ từ 00H-08H
- Dữ liệu được lưu trữ dưới dạng BCD.
- Có thể hiển thị dưới dang 12h/24h.
- Truyền dữ liệu thông qua chuẩn truyền thông I2C.
4. Chuẩn truyền thông I2C:
Một thiết bị gửi dữ liệu trên một dây đẫn được định nghĩa là thiết bị truyền và thiết bị nhận dữ liệu là thiết bị nhận. Thiết bị điều khiển dữ liệu gửi được gọi là Master. Thiết bị chịu sự điều khiển của Master gọi là Slave.
Dây dẫn phải được điều khiển bởi Master phát một xung clock (SCL), xung clock gồm có Start bit, và Stop bit. DS1307 hoạt động như một Slave.
5. Điều kiện để dữ liệu có thể truyền dẫn trên chuẩn I2C:
Những điều kiện:
- Đường truyền rảnh: Cả hai dây dẫn SCL (clock) và SDA (dữ liệu) ở mức cao (HIGH).
- Bắt đầu truyền dữ liệu (Start bit): Thay đổi trạng thái ở dây dữ liệu (SDA), từ Cao xuống Thấp.
- Dừng việc truyền dữ liệu (Stop bit): Thay đổi trạng thái ở dây dữ liệu (SDA), ở mức thấp (LOW) sang mức cao (HIGH).
- Dữ liệu hợp lệ: Dữ liệu chỉ có giá trị sau khi co điều kiện truyền dữ liệu (Start bit), Dữ liệu có mức không thay đổi (mức logic không đổi) trong khi xung clock (SCL) ở mức Cao, Dữ liệu có thể thay đổi mức logic khi xung clock (SCL) ở mức Thấp, 1 xung clock tương đương với 1 bit dữ liệu.
- Dữ liệu truyền không giới hạn.
- Khi nhận được dữ liệu, sẽ có một tín hiệu phản hồi (Acknowledges, ACK) trên dây SDA nhằm xác nhận việc đã nhận dữ liệu thành công.
6. Cấu trúc dữ liệu:
Có 2 loại truyền dữ liệu có khả năng:
a. Slave nhận dữ liệu:
Dữ liệu nối tiếp nhận được thông qua 2 chân SCL và SDA. Sau khi mỗi Byte đữ liệu được nhận sẽ có 1 ACK (bit xác nhận) được truyền đi. Start và Stop được công nhận như bắt đầu và kết thúc của việc truyền dữ liệu nối tiếp. Phần mềm sẽ xác định địa chỉ Slave và bit điều khiển. Byte địa chỉ là byte đầu tiên nhận được sau khi có điều kiện Start. Địa chỉ Slave bao gồm 7 bit đia chỉ Ds1307, với 1101000, theo sau đó là bit điều khiển đọc/ghi, ghi là 0, đọc là 1. Sau khi nhận và giải mã byte địa chỉ Slave. Ds1307 xuất ra 1 tín hiệu xác nhân (ACK) trên SDA. Sau khi xác nhận (ACK) địa chỉ Slave và bit điều khiển (ghi), Master truyền dữ liệu trên chân SDA Ds1307. Khi kết thúc việc gửi dữ liệu Master sẽ gửi một Stop bit để kết thúc việc gửi.
b. Slave truyền dữ liệu:
Byte đầu tiên đã được nhận và xử lý trên Slave. Trong trường hợp này, bit điều khiển sẽ được cho biết rằng điều khiển truyền được đảo ngược ( Dữ liệu sẽ bị đảo ngược khi nhận được, MSB bit sẽ được truyền đầu tiên). Ds1307 sẽ truyền dữ liệu nối tiếp trên SDA khi nhận được xung clock ở SCL. Điều kiện Start and Stop được công nhận như là bắt đầu và kết thúc của truyền nối tiếp. Byte địa chỉ Slave sẽ là byte đầu tiên nhận được sau khi điều kiện Start được phát ra bởi Master. Địa chỉ Slave là 1101000, theo sau là bit điều khiển đọc/ghi, nó là 1 khi đọc dữ liệu từ Slave. Sau khi nhận và giải mã địa chỉ Slave, Ds1307 sẽ xuất một xung xác nhận (ACK) trên SDA. Ds1307 sẽ bắt đầu truyền dữ liệu bắt đầu với con trỏ dữ liệu, nếu con trỏ dữ liệu không được ghi trước khi bắt đầu đọc dữ liệu thì dữ liệu sẽ được truyền ở địa chỉ đầu tiên mà nó đã đọc lần cuối cùng mà nó có sẵn trên con trỏ dữ liệu (đọc từ vị trí 00H). Ds1307 phải nhận được một tín hiệu “Không xác nhận” (NOT ACK) để kết thúc việc đọc.
1. I2C trên Pic
Tham khảo code của mình tại đây: