[HỌC AVR] BÀI 7: GIAO TIẾP IC THỜI GIAN THỰC DS1307
Có thể bạn quan tâm
Xin chào các bạn! Trong bài viết này mình xin hướng dẫn các bạn giao tiếp với IC thời gian thực DS1307 sử dụng Atmega16. Project chạy trên KIT AVR V4.
Chú ý : Source code bài viết dưới đây được biên dịch bằng phần mềm CodeVisionAVR để biên dịch code không lỗi xin vui lòng Download bản CodeVisionAVR Tại Đây
I.MÔ TẢ PHẦN CỨNG Kit AVR V4 cung cấp cho các bạn khối IC thời gian thực DS1307 có sơ đồ nguyên lý như sau:
Các chân kết nối với Atmega16:
- Chân SCL à PORTC0
- Chân SDA à PORTC1
Các thông số kỹ thuật của DS1307:
- Điện áp hoạt động: 5V
- Sử dụng nguồn Pin 3V bên ngoài khi mất điện.
- Giao tiếp theo chuẩn I2C.
- Có 56 Byte RAM trống để người dùng tùy ý sử dụng.
- Có thể xuất ra được xung có tần số 1Hz, 4.096KHz, 8.192KHz, 32.768KHz.
Tên và chức năng các chân của DS1307:
DS1307 có 7 thanh ghi (0x00 – 0x06) chứa thông tin về thời gian của đồng hồ và 1 thanh ghi (0x07) sử dụng để điều khiển xung ra tại chân SQW/OUT. Giao tiếp với DS1307 tức là ghi giá trị và đọc các thanh ghi này, các thanh ghi này sẽ chứa mã BCD của các giá trị:
Tên và chức năng các thanh ghi thời gian của DS1307:
Thanh ghi CONTROL (0x07):
Trong đó:
- OUT: lựa chọn mức logic xuất ra tại chân SQW/OUT khi chức năng SQW không được kích hoạt (SQW=0).
- SQW: = 1, cho phép tạo xung vuông ra trên chân SQW/OUT, tần số xung vuông được thiết lập bởi RS0, RS1:
II.LẬP TRÌNH PHẦN MỀM
Để giao tiếp với DS1307, ta sử dụng chuẩn giao tiếp I2C (các bạn tham khảo Driver I2C trong file đính kèm). Các bước để Ghi/Đọc thời gian với DS1307:
Các bạn sử dụng hàm void DS1307_SetTime(uint8_t Hour, uint8_t Minute, uint8_t Second) để cài đặt thời gian cho DS1307:
void DS1307_SetTime(uint8_t Hour, uint8_t Minute, uint8_t Second) { DS1307_WriteData(DS1307_ADDR_SECOND,Second); DS1307_WriteData(DS1307_ADDR_MINUTE,Minute); DS1307_WriteData(DS1307_ADDR_HOUR,Hour); }Các bạn sử dụng hàm void DS1307_GetTime(uint8_t *Hour, uint8_t* Minute, uint8_t* Second)để lấy giá trị thời gian từ DS1307:
void DS1307_GetTime(uint8_t *Hour, uint8_t* Minute, uint8_t* Second) { *Hour = DS1307_ReadData(DS1307_ADDR_HOUR); *Minute = DS1307_ReadData(DS1307_ADDR_MINUTE); *Second = DS1307_ReadData(DS1307_ADDR_SECOND); }Các bạn cấu hình GPIO:
- PORTC3:5 (các chân điều khiển LCD16x2), PORTB4:7 (các chân dữ liệu LCD16x2) là OUTPUT với mức logic đầu ra ban đầu là mức 1.
- PORTC0:1 (chân Clock và Data của DS1307) là OUTPUT.
Chương trình chính đọc thời gian và hiển thị lên LCD16x2:
LCD16X2_Init(); // Khoi tao LCD16X2 DS1307_Init(); DS1307_SetControl(1,DS1307_SQW_1Hz); if(FlagSetTime) { DS1307_SetTime(11,15,0); FlagSetTime=0; } LCD16X2_Gotoxy(0,0); LCD16X2_Puts(" DS1307 AVR V4 "); while (1) { DS1307_GetTime(&Hour,&Min,&Sec); sprintf(Str,"Time: %2u-%2u-%2u",Hour,Min,Sec); LCD16X2_Gotoxy(0,1); LCD16X2_Puts(Str); delay_ms(200); }Code các hiệu ứng tham khảo ở file code đính kèm. TẠI ĐÂY
Tags: arduinoatmega16CodeVisionAVRds1307Từ khóa » Tìm Hiểu Về Ds1307
-
Đồng Hồ Thời Gian Thực DS1307
-
Chức Năng Và Hoạt động Của RTC DS1307
-
TIỂU LUẬN "TÌM HIỂU RTC DS1307" Docx - Tài Liệu Text - 123doc
-
Đồng Hồ Thời Gian Thực (Read Time Clock - DS1307) Sử Dụng Arduino
-
Giao Tiếp Module Thời Gian Thực DS1307 Với Arduino - Điện Tử Việt
-
[PDF] ỨNG DỤNG DS1307 XÂY DỰNG HỆ THỐNG THỜI GIAN THỰC
-
Ds1307 Là Gì - Hiển Thị Thời Gian Thực (Rtc) Lên Lcd
-
Ds1307 Là Gì - Chức Năng Và Hoạt Động Của Rtc Ds1307
-
DS1307 – Real Time Clock I2C (RTC) - Blog Mecsu
-
RTC DS1307 - Mô Tả Pin, Tính Năng & Hoạt động Của DS1307
-
Mạch Thời Gian Thực RTC DS1307
-
DS1307 | #9_STM32 Và Ngoại Vi - Kỹ Sư Nghèo
-
[PDF] IC Thời Gian Thực (RTC) DS1307 Có Thể đếm Giờ, Phú
-
Ic Thời Gian Thực Ds1307