/* '@ @@@: @@@@@@ @@` '@@ .@@@@@# @`@@@@@. @@ @@# @'@ @@@. `@ ;@ .@@ @@ @.@ @.@ `@ @@ @@ @+ @@ @ @ @.@ @` @: @` @` @@ @ @@@.@ @# ;@@@@@@@@ @ @@ @ #@,.@ '@ @ @@ @ .@ .@ ;@ @@. @@@ `@ `@@. +@@ @@`@@ @@@' @@@ @@; @@ @@ @@ ,@@#@@ ,@@@ @@ @@ #@ , @+ @@ .#@@@@@@@@@@@` @, @ @@@@@+, `:+@@ @@ #@ @: @@ '@ @@ @# @. @, @@ `@ `@ ++ @ `@ # @+ @@ ;@@@ @@ @+ @@@ .@ ` @` .@@@@@ @, +@ @@@@@ @+'@@, @@@#@ @@@@@@@ '@ @. @@@@@@+ `@@@@ :@'@; @@@@@@@@@ @@ .+` @@ @@@@@@@@` @; @@ #@@@@@@@@@, @@@@@@@ @@@: `@ +@@@@@@@@@ +@ @. `@@@@@@@@@@ '` @ @,@@@@; @@@@@@@@@@ @: @@ +@ ;@@@@@@@@@# @; @ @@@@@@@@@@, #@ @@@@ @# #@@@@@@@@@ @@ '@ @@@@@@@@@@ @, @``@` `@ @@@@@@@@@@, `@ @@ ;@@@@@@@@@+ @@ @@ @@ @@ @@@@@@@@@@@ @` @, @@@@@@@@@@@ @. .@ @# @' @@@@@@@@@@@@ @@: @ @@@@@@@@@@@@ @@ @@ ,@ :@'@@@@@@@@@@@@ :@@@` @@# @@@@@@@@@@@@,@` ;@ '@@' @@ @@@@@:@@@@@@@@` @' ;@@@ ;@@@@@@@@@@@@@@ @'@@.,@@,@; @@@@@ #@@@@@@@` @ @ @@@@@@@@' @@@@@ #@@+ ;@@@.@@@@. @@@; @ @ .;+@ '@@@@#@'@ ;@@@@@@@ @ @ @@@@@@:@ +@;@@@@@ @ @` @@@@@@:@ #@@@@@@@@ @@@: @ @` .@@@# @@@@@@+@ @@@@@@+ @;+@+@@@@@@ @ @` @@@@@;;@ @@.@@@@@@# :@@@@@@` ;@@# .@ @@+ @` '@, @.@ @@@@@@@@' @@@@@@@@@ @@, +@ :@@@. `@@` ;@ @@# +@@@@@@ @@@ @@@@@ @+ @ @+ @@ +@@@ `@ .@ @, @@@@@ @@@@@ `@ @ '@ #@: @ @@ #@@@@. @@@@@ @@ .@ @# @ @ @ @@@@@ @@@@@ :@ @@ @` @; @# +@ .@@@@@.@@@@# `@: @ @ #@ ,@ @@ @@@@@@@@@@ @# @@ , @@ @ @, @# @@@@@@@@# @` `@ @@@@@@; @@@@@@@ :@ @ '@@@@@@@ +@ @# ;@ #;. @@ @@ @@ @@@@@@@.@ @@ @@ @; `@ @+ @@ #@@@@@@@@@@@+ @+ @@ +@ @@ @@ #@ @@@@@@@@@@@@@ `@.@@ @: @. @@.:@ @@@@@@@@@@@@@# '@# +@ '@ #@@, #@@@@@@@@@@@@@@ @; @; @@@@@@@@@@@@@@@' `@` `@ @@@@@@@@@@@@@@@@ #@ @+ '@@@@@@@@@@@@@@@@ @@ @@ '@@@@@@@@@@@: @: @@ ' @@ +@; `@; @@@@ @@ :@+ ,@'@@ ;@@ @@# @@ .@@ :@; @@@ @@: .@@@ @@@; @@: `@@ ' @; ;@@ .@ '@ +@@@@@@@. @ @@ .@###@@@@@ @` @; @@ @. @+ @` @ @@ ,@@ @@@. ;@ `@;@@@@@` :@@@@@# @@@. @@@@@ @@@@@@ @@@@@@ @@@ @@@ @@@@@ @@@@@ @@@@@@: @@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@@ @@@@@@@: @@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@ @@@ @@@@@ @@@ @@@ @@@ @@ @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@ @@ @@@ @@@ @@@ @@@@@@@ @@@ @@@@@@@ @@@ @@@ @@@ @@@ @@ @@ @@@ @@@ @@@ @@@@@@@ @@@@@ @@@@@@@ @@@ @@@ @@@ @@ @@ @@@@@ @@@ @@@ @@@@@@@ @@@@@ @@@@@@@ @@@ @@@ @@@ @@ @@ @@@@@ @@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@ @@@ @@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@ @@@ @@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@@ @@@ @@@@@@@ @@@@ @@@@@@ @@ @@@ @@@@@@@ @@@@@@@ @@@@@@@ @@@@@ @@@@@ @@@@ @@@@@@ @@ @@@ @@@@@ @@@@@ @@@@@@ @@@@@ */ //=======================================================================================================//| // //| // BEGINNNING OF FILE //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // TITLE: DS1302 Real Time Clock //| // FILENAME: virtuabotixRTC.h //| // PREPARED FOR: Virtuabotic, LLC //| // PROGRAMMER(S): Arduino.cc user "Krodal" //| // Joseph Datillo //| // T. Daniel Murphy //| // DEVELOPMENT DATE: 06 January 2014 //| // COMPILER USED: Arduino 1.0.5 and xCode 5.0.2 (Version 5A3005) //| // TARGET PLATFORM: Versilino and Arduino Microcontrollers //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Program Description Begin //| // //| //=======================================================================================================//| // //| // This header file contains the class declarations for the employment of a DS1302 Real Time Clock //| // library. This file is written for compatibility for Arduino Boards, as well as Versilino boards. //| // These functions will work on any pin type available on the boards (PWM, COMMUNICATION, DIGITAL, or //| // ANALOG). //| // //| //=======================================================================================================//| // //| // Program Description End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // This is the Revision Section Begin //| // //| //=======================================================================================================//| // //| // Date Programmer Revisions Made //| // //| // XX June 2012 Krodal Original //| // XX March 2013 Krodal Added bcd2bin, bin2bcd_h, and bin2bcd_l functions//| // 07 January 2014 Joseph Datillo Converted file into library format. //| // T. Daniel Murphy Added functions to allow for user implentation //| // as a library, vice a stand alone program. //| // Added ability to access individual elements of //| // the time structure. //| // Added functions for printing, and element access.//| // //| //=======================================================================================================//| // //| // Revision Section End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Acknowledgements Begin //| // //| //=======================================================================================================//| // //| // The original program was provided by Arduino.cc user Kodal on URL: //| // http://playground.arduino.cc/Main/DS1302 //| // //| //=======================================================================================================//| // //| // Acknowledgements End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Reference Links Begin //| // //| //=======================================================================================================//| //| // Datasheet: http://www.hobbytronics.co.uk/datasheets/DS1302.pdf //| // GET UPDATES: https://www.virtuabotix.com/resources.php?product=versalino //| //| //=======================================================================================================//| // //| // Reference Links End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Include files required for Program Function Begin //| // //| //=======================================================================================================//| //| #include "stdio.h" //| //| //=======================================================================================================//| // //| // Include files required for Program Function End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Include Guards Begin //| // //| //=======================================================================================================//| // //| // This will pull the topmost library for the BUS layouts, VersalinoPINS and VersalinoBUS structures //| // that you will be using in this library. A version of the Versalino.h should always be included //| // in your library folder just in case the user has not installed a Versalino library. (This will //| // prevent compile errors, and/or lower the complexity of the code you need to write for a cross //| // compatible Library) using as apposed to "Versalino.h" is what makes this code //| // automatically pull from a higher level if the library is already present in the users libraries //| // folder. //| // //| //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//| //| #ifndef virtuabotixRTC_H //| #define virtuabotixRTC_H //| //| #include //| #include //| //| #if defined(ARDUINO) && ARDUINO >= 100 //| #include "Arduino.h" //| #else //| #include "WProgram.h" //| #include //| #endif //| //| //=======================================================================================================//| // //| // Include Guards Break //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // Defines Required for Library Begin //| // //| //=======================================================================================================//| //| #define DS1302_ENABLE 0x8E //| #define DS1302_TRICKLE 0x90 //| //| //=======================================================================================================//| // //| // Defines Required for Library End //| // //| //=======================================================================================================//| //=======================================================================================================//| // //| // virtuabotixRTC Class Declaration Begin //| // //| //=======================================================================================================//| // //| // virtuabotixRTC - Creates the Real Time Clock object, and contains all of the functions that are //| // required for setting, and tracking the time, as well as converting that time into //| // the current UNIX Time. //| // //| //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//| //| class virtuabotixRTC { //| public: //| //+++++++++++++++++++++++++++++++++++++++++++++ Class Constructor +++++++++++++++++++++++++++++++++++++++//| virtuabotixRTC(uint8_t inSCLK, uint8_t inIO, uint8_t inC_E); //| //| //++++++++++++++++++++++++++++++++++++++++++++++ Class Functions ++++++++++++++++++++++++++++++++++++++++//| void initRTC(uint8_t CLK, uint8_t IO, uint8_t ENABLE); // Sets the pins and enable them //| void DS1302_clock_burst_read( uint8_t *p); // Reads clock data, and sets pinmode //| void DS1302_clock_burst_write( uint8_t *p); // Writes clcok data, and sets pinmode //| uint8_t DS1302_read(int address); // Reads a byte from DS1302, sets pinmode //| void DS1302_write( int address, uint8_t data); // Writes a byte to DS1302, sets pinmode //| void _DS1302_start( void); // Function to help setup start condition //| void _DS1302_stop(void); // Function to help stop the communication//| uint8_t _DS1302_toggleread( void); // Function to help read byte with bit //| void _DS1302_togglewrite( uint8_t data, uint8_t release); // Function to help wrtie byte with bit //| void setDS1302Time(uint8_t seconds, uint8_t minutes, // This function sets the time on the //| uint8_t hours, uint8_t dayofweek, // DS1302 //| uint8_t dayofmonth, uint8_t month, //| int year); //| void updateTime(); // This function simply updates the time //| //| //++++++++++++++++++++++++++++++++++++++++++++++ Class variables ++++++++++++++++++++++++++++++++++++++++//| uint8_t SCLK; //| uint8_t IO; //| uint8_t C_E; //| uint8_t seconds; //| uint8_t minutes; //| uint8_t hours; //| uint8_t dayofweek; //| uint8_t dayofmonth; //| uint8_t month; //| int year; //| }; //| //| //=======================================================================================================//| // //| // virtuabotixRTC Class Declaration End //| // //| //=======================================================================================================//| //| #endif // versalinoRTC_H //| //| //=======================================================================================================//| // //| // Include Guards End //| // //| //=======================================================================================================//|