added readClkOutMode() and writeClkOutMode()

This commit is contained in:
getoffmyhack
2020-10-06 21:07:04 -07:00
parent 831864333b
commit 782a154b46
2 changed files with 50 additions and 1 deletions
+37 -1
View File
@@ -1356,6 +1356,8 @@ void RTC_PCF8523::calibrate(Pcf8523OffsetMode mode, int8_t offset) {
Wire.endTransmission();
}
// START RTC_PCF8563 implementation
/**************************************************************************/
/*!
@brief Start I2C for the PCF8563 and test succesful connection
@@ -1466,7 +1468,41 @@ uint8_t RTC_PCF8563::isrunning() {
return !((ctlreg >> 5) & 1);
}
////////////////////////////////////////////////////////////////////////////////
/**************************************************************************/
/*!
@brief Read the mode of the CLKOUT pin on the PCF8563
@return CLKOUT pin mode as a #Pcf8563SClkOutMode enum
*/
/**************************************************************************/
Pcf8563ClkOutMode RTC_PCF8563::readClkOutMode() {
int mode;
Wire.beginTransmission(PCF8563_ADDRESS);
Wire._I2C_WRITE(PCF8563_CLKOUTCONTROL);
Wire.endTransmission();
Wire.requestFrom((uint8_t)PCF8563_ADDRESS, (uint8_t)1);
mode = Wire._I2C_READ();
return static_cast<Pcf8563ClkOutMode>(mode & PCF8563_CLKOUT_MASK);
}
/**************************************************************************/
/*!
@brief Set the CLKOUT pin mode on the PCF8563
@param mode The mode to set, see the #Pcf8563ClkOutMode enum for options
*/
/**************************************************************************/
void RTC_PCF8563::writeClkOutMode(Pcf8563ClkOutMode mode) {
Wire.beginTransmission(PCF8563_ADDRESS);
Wire._I2C_WRITE(PCF8563_CLKOUTCONTROL);
Wire._I2C_WRITE(mode);
Wire.endTransmission();
}
// END RTC_PCF8563 implementation
/**************************************************************************/
+13
View File
@@ -41,6 +41,7 @@ class TimeSpan;
#define PCF8563_CONTROL_1 0x00
#define PCF8563_CONTROL_2 0x01
#define PCF8563_VL_SECONDS 0x02
#define PCF8563_CLKOUT_MASK 0x83
#define DS1307_ADDRESS 0x68 ///< I2C address for DS1307
#define DS1307_CONTROL 0x07 ///< Control register
@@ -409,6 +410,15 @@ public:
void calibrate(Pcf8523OffsetMode mode, int8_t offset);
};
/** PCF8563 CLKOUT pin mode settings */
enum Pcf8563ClkOutMode {
PCF8563_SquareWaveOFF = 0x00, /**< Off */
PCF8563_SquareWave1Hz = 0x83, /**< 1Hz square wave */
PCF8563_SquareWave32Hz = 0x82, /**< 32Hz square wave */
PCF8563_SquareWave1kHz = 0x81, /**< 1kHz square wave */
PCF8563_SquareWave32kHz = 0x80 /**< 32kHz square wave */
};
/**************************************************************************/
/*!
@brief RTC based on the PCF8563 chip connected via I2C and the Wire library
@@ -424,6 +434,9 @@ public:
void start(void);
void stop(void);
uint8_t isrunning();
Pcf8563ClkOutMode readClkOutMode();
void writeClkOutMode(Pcf8563ClkOutMode mode);
};