Library for Real Time Clock module MCP97410 based on Library for DS1307

Fork of RTC-DS1307 by Henry Leinen

Revision:
13:10e564536e23
Parent:
12:88f82e47b6a1
--- a/Rtc_Mcp97410.cpp	Fri Jan 16 21:17:52 2015 +0000
+++ b/Rtc_Mcp97410.cpp	Sun Mar 08 21:12:29 2015 +0000
@@ -232,6 +232,74 @@
     }
 }
 
+
+uint8_t Rtc_Mcp97410::readTrim()
+{
+    uint8_t  trim;
+    if (readRTC(ADDR_CAL, (char *) &trim, 1)) {
+        INFO("OSCTRIM: %02X \n", trim);
+        return trim;
+    } else {
+        return 0;
+    }
+}
+
+bool Rtc_Mcp97410::incTrim()
+{
+    uint8_t  trim;
+    uint8_t  trim_val;
+    uint8_t  trim_sign;
+
+    readRTC(ADDR_CAL, (char *) &trim, 1);
+    trim_val = 0x7F&trim;
+    trim_sign= trim >> 7;
+    if (trim_sign == 1) {
+        // positive: inc
+        if (trim_val < 0x7F) {
+            trim_val = trim_val++;
+        }
+    } else {
+        // negative: dec
+        if (trim_val != 0) {
+            trim_val = trim_val--;
+        } else {
+            // change sign
+            trim_sign = 1;
+        }
+    }
+    trim = trim_sign <<7 | trim_val;
+    INFO("incTrim: New TRIM: %02X\n", trim);
+    return writeRTC(ADDR_CAL, (char *) &trim, 1);
+}
+
+bool Rtc_Mcp97410::decTrim()
+{
+    uint8_t  trim;
+    uint8_t  trim_val;
+    uint8_t  trim_sign;
+
+    readRTC(ADDR_CAL, (char *) &trim, 1);
+    trim_val = 0x7F&trim;
+    trim_sign= trim >> 7;
+    if (trim_sign == 0) {
+        // negative: inc
+        if (trim_val < 0x7F) {
+            trim_val = trim_val++;
+        }
+    } else {
+        // positive: dec
+        if (trim_val != 0) {
+            trim_val = trim_val--;
+        } else {
+            // change sign
+            trim_sign = 0;
+        }
+    }
+    trim = trim_sign <<7 | trim_val;
+    INFO("decTrim: New TRIM: %02X\n", trim);
+    return writeRTC(ADDR_CAL, (char *) &trim, 1);
+}
+
 bool Rtc_Mcp97410::disableEEPROMWrite()
 {
     // protect all EEPROM from write operations
@@ -280,7 +348,7 @@
     // write 0x55 and then 0xAA to the EEUNLOCK-register
     char reg =0x00;
     bool result = true;
-    
+
     reg = 0x55;
     result &= writeRTC(ADDR_ULID,&reg,1);
     reg = 0xAA;