Difference between revisions of "Real Time Clock(DS1307) with AVR"
Line 11: | Line 11: | ||
[[File:Schematic AVR Interfacing RTC.JPG|680px]] | [[File:Schematic AVR Interfacing RTC.JPG|680px]] | ||
+ | |||
+ | =Code= | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | /*----------------------------------------------------------------------------- | ||
+ | Program to demonstrate displaying of RTC on LCD | ||
+ | ----------------------------------------------------------------------------- | ||
+ | note: | ||
+ | Refer lcd.c(lcd_4_bit.c/lcd_8_bit.c) file for Pin connections | ||
+ | Refer Atmega32 DataSheet for register descriptions. | ||
+ | ------------------------------------------------------------------------------*/ | ||
+ | |||
+ | |||
+ | /* io.h contains the defnition of all ports and SFRs */ | ||
+ | #include <avr\io.h> | ||
+ | |||
+ | #include "lcd.h" //User defined LCD library which conatins the lcd routines | ||
+ | #include "ds1307.h" //User defined library which conatins the RTC(ds1307) routines | ||
+ | |||
+ | |||
+ | /* start the main program */ | ||
+ | void main() | ||
+ | { | ||
+ | unsigned char sec,min,hour,day,month,year; | ||
+ | |||
+ | /* Initilize the lcd before displaying any thing on the lcd */ | ||
+ | LCD_Init(); | ||
+ | |||
+ | /* Initilize the RTC(ds1307) before reading or writing time/date */ | ||
+ | DS1307_Init(); | ||
+ | |||
+ | |||
+ | /*Set the time and Date only once */ | ||
+ | DS1307_SetTime(0x10,0x40,0x20); // 10:40:20 am | ||
+ | DS1307_SetDate(0x14,0x11,0x12); // 14th Nov 2012 | ||
+ | |||
+ | /* Display "Time" on first line*/ | ||
+ | LCD_DisplayString("Time: "); | ||
+ | |||
+ | /* Display "Date" on Second line*/ | ||
+ | LCD_GoToLineTwo(); | ||
+ | LCD_DisplayString("Date: "); | ||
+ | |||
+ | /* Display the Time and Date continuously */ | ||
+ | while(1) | ||
+ | { | ||
+ | /* Read the Time from RTC(ds1307) */ | ||
+ | DS1307_GetTime(&hour,&min,&sec); | ||
+ | |||
+ | /* Display the time on Firstline-7th position*/ | ||
+ | LCD_GoToXY(0,6); | ||
+ | LCD_DisplayRtcTime(hour,min,sec); | ||
+ | |||
+ | |||
+ | /* Read the Date from RTC(ds1307) */ | ||
+ | DS1307_GetDate(&day,&month,&year); | ||
+ | |||
+ | /* Display the Date on Secondline-7th position*/ | ||
+ | LCD_GoToXY(1,6); | ||
+ | LCD_DisplayRtcDate(day,month,year); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
[[Category:AVR Tutorials]] | [[Category:AVR Tutorials]] |
Revision as of 12:33, 4 February 2015
Basics
The Real time clock DS1307 IC basically is stand alone time clock. Well, basically we can use a micrcontroller to keep time, but the value would go off as soon as it is powered off.
The RTC DS1307 is a handy solution to keep time all the way, when it is powered by a coin cell.
It is uses I²C (Inter-Integrated Circuit) protocol, referred to as I-squared-C, I-two-C, or IIC for communication with the micrcontroller.Check the basics of I2C here, if are not familiar with it.
Schematic
Code
- /*-----------------------------------------------------------------------------
- Program to demonstrate displaying of RTC on LCD
- -----------------------------------------------------------------------------
- note:
- Refer lcd.c(lcd_4_bit.c/lcd_8_bit.c) file for Pin connections
- Refer Atmega32 DataSheet for register descriptions.
- ------------------------------------------------------------------------------*/
- /* io.h contains the defnition of all ports and SFRs */
- #include <avr\io.h>
- #include "lcd.h" //User defined LCD library which conatins the lcd routines
- #include "ds1307.h" //User defined library which conatins the RTC(ds1307) routines
- /* start the main program */
- void main()
- {
- unsigned char sec,min,hour,day,month,year;
- /* Initilize the lcd before displaying any thing on the lcd */
- LCD_Init();
- /* Initilize the RTC(ds1307) before reading or writing time/date */
- DS1307_Init();
- /*Set the time and Date only once */
- DS1307_SetTime(0x10,0x40,0x20); // 10:40:20 am
- DS1307_SetDate(0x14,0x11,0x12); // 14th Nov 2012
- /* Display "Time" on first line*/
- LCD_DisplayString("Time: ");
- /* Display "Date" on Second line*/
- LCD_GoToLineTwo();
- LCD_DisplayString("Date: ");
- /* Display the Time and Date continuously */
- while(1)
- {
- /* Read the Time from RTC(ds1307) */
- DS1307_GetTime(&hour,&min,&sec);
- /* Display the time on Firstline-7th position*/
- LCD_GoToXY(0,6);
- LCD_DisplayRtcTime(hour,min,sec);
- /* Read the Date from RTC(ds1307) */
- DS1307_GetDate(&day,&month,&year);
- /* Display the Date on Secondline-7th position*/
- LCD_GoToXY(1,6);
- LCD_DisplayRtcDate(day,month,year);
- }
- }