Files
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

308 lines
27 KiB
C++

/*
'@ @@@: @@@@@@ @@` '@@
.@@@@@# @`@@@@@. @@ @@# @'@
@@@. `@ ;@ .@@ @@ @.@ @.@
`@ @@ @@ @+ @@ @ @ @.@
@` @: @` @` @@ @ @@@.@
@# ;@@@@@@@@ @ @@ @ #@,.@
'@ @ @@ @ .@ .@
;@ @@. @@@
`@ `@@. +@@ @@`@@
@@@' @@@ @@; @@ @@
@@ ,@@#@@ ,@@@ @@
@@ #@ , @+
@@ .#@@@@@@@@@@@` @,
@ @@@@@+, `:+@@ @@
#@ @: @@ '@
@@ @# @. @,
@@ `@ `@ ++ @
`@ # @+ @@ ;@@@ @@
@+ @@@ .@ ` @` .@@@@@ @,
+@ @@@@@ @+'@@, @@@#@ @@@@@@@ '@
@. @@@@@@+ `@@@@ :@'@; @@@@@@@@@ @@ .+`
@@ @@@@@@@@` @; @@ #@@@@@@@@@, @@@@@@@
@@@: `@ +@@@@@@@@@ +@ @. `@@@@@@@@@@ '` @
@,@@@@; @@@@@@@@@@ @: @@ +@ ;@@@@@@@@@# @;
@ @@@@@@@@@@, #@ @@@@ @# #@@@@@@@@@ @@
'@ @@@@@@@@@@ @, @``@` `@ @@@@@@@@@@, `@
@@ ;@@@@@@@@@+ @@ @@ @@ @@ @@@@@@@@@@@ @`
@, @@@@@@@@@@@ @. .@ @# @' @@@@@@@@@@@@ @@:
@ @@@@@@@@@@@@ @@ @@ ,@ :@'@@@@@@@@@@@@ :@@@`
@@# @@@@@@@@@@@@,@` ;@ '@@' @@ @@@@@:@@@@@@@@` @'
;@@@ ;@@@@@@@@@@@@@@ @'@@.,@@,@; @@@@@ #@@@@@@@` @
@ @@@@@@@@' @@@@@ #@@+ ;@@@.@@@@. @@@; @
@ .;+@ '@@@@#@'@ ;@@@@@@@ @
@ @@@@@@:@ +@;@@@@@ @
@` @@@@@@:@ #@@@@@@@@ @@@: @
@` .@@@# @@@@@@+@ @@@@@@+ @;+@+@@@@@@ @
@` @@@@@;;@ @@.@@@@@@# :@@@@@@` ;@@# .@ @@+
@` '@, @.@ @@@@@@@@' @@@@@@@@@ @@, +@ :@@@.
`@@` ;@ @@# +@@@@@@ @@@ @@@@@ @+ @ @+ @@
+@@@ `@ .@ @, @@@@@ @@@@@ `@ @ '@
#@: @ @@ #@@@@. @@@@@ @@ .@ @#
@ @ @ @@@@@ @@@@@ :@ @@ @`
@; @# +@ .@@@@@.@@@@# `@: @ @
#@ ,@ @@ @@@@@@@@@@ @# @@ , @@
@ @, @# @@@@@@@@# @` `@ @@@@@@;
@@@@@@@ :@ @ '@@@@@@@ +@ @# ;@
#;. @@ @@ @@ @@@@@@@.@ @@ @@ @;
`@ @+ @@ #@@@@@@@@@@@+ @+ @@ +@
@@ @@ #@ @@@@@@@@@@@@@ `@.@@ @:
@. @@.:@ @@@@@@@@@@@@@# '@# +@
'@ #@@, #@@@@@@@@@@@@@@ @;
@; @@@@@@@@@@@@@@@' `@`
`@ @@@@@@@@@@@@@@@@ #@
@+ '@@@@@@@@@@@@@@@@ @@
@@ '@@@@@@@@@@@: @:
@@ ' @@
+@; `@; @@@@ @@
:@+ ,@'@@ ;@@ @@# @@
.@@ :@; @@@ @@: .@@@
@@@; @@: `@@ '
@; ;@@ .@
'@ +@@@@@@@. @
@@ .@###@@@@@ @`
@; @@ @. @+
@` @ @@ ,@@
@@@. ;@ `@;@@@@@`
:@@@@@# @@@.
@@@@@ @@@@@@ @@@@@@ @@@ @@@ @@@@@ @@@@@ @@@@@@: @@@@@
@@@@@@@ @@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@@ @@@@@@@: @@@@@
@@@ @@@ @@@@@@@ @@@@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@ @@@ @@@@@
@@@ @@@ @@@ @@ @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@ @@ @@@
@@@ @@@ @@@@@@@ @@@ @@@@@@@ @@@ @@@ @@@ @@@ @@ @@ @@@
@@@ @@@ @@@@@@@ @@@@@ @@@@@@@ @@@ @@@ @@@ @@ @@ @@@@@
@@@ @@@ @@@@@@@ @@@@@ @@@@@@@ @@@ @@@ @@@ @@ @@ @@@@@
@@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@ @@@
@@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@ @@@
@@@ @@@ @@@@ @@@ @@ @@@@ @@@ @@@ @@@ @@@ @@ @@@ @@@
@@@@@@@ @@@@ @@@@@@ @@ @@@ @@@@@@@ @@@@@@@ @@@@@@@ @@@@@
@@@@@ @@@@ @@@@@@ @@ @@@ @@@@@ @@@@@ @@@@@@ @@@@@
*/
//=======================================================================================================//|
// //|
// 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 <Versalino.h> 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 <stddef.h> //|
#include <string.h> //|
//|
#if defined(ARDUINO) && ARDUINO >= 100 //|
#include "Arduino.h" //|
#else //|
#include "WProgram.h" //|
#include <pins_arduino.h> //|
#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 //|
// //|
//=======================================================================================================//|