This class provides simplified I2C access to a MAXIM DS130x Real-Time Clock device, even if the LPC1768 has an embedded RTC module. My objective is to share the same RTC with Microchip 18F MCU.

Revision:
1:834e9897e269
Parent:
0:a1b58e3c9fdb
--- a/DS130x_I2C.h	Wed Feb 09 13:43:21 2011 +0000
+++ b/DS130x_I2C.h	Fri Feb 11 10:16:20 2011 +0000
@@ -29,7 +29,7 @@
 #include "Debug.h" // Include mbed header + debug primitives. See DebugLibrary
 
 namespace DS130X_I2C {
-    /** This class provides simplified I2C access to a MAXIM DS130x Real-Time Clock device. V0.0.0.1
+    /** This class provides simplified I2C access to a MAXIM DS130x Real-Time Clock device. V0.0.0.2
      *
      * A typical use case should be the Mbed which acts as a time server with an ethernet connection, it synchronyzes a RTC circuit for all other module (Microchip/ATiny MCUs).
      *
@@ -143,7 +143,16 @@
          * @return The packed BCD value
          */
         inline unsigned char ConvertBCDToHex(const unsigned char p_bcdValue) {
-            return (unsigned char)((unsigned char)(p_bcdValue >> 4) * 10) + (unsigned char)(p_bcdValue & 0x0f);
+            /*DEBUG("ConvertBCDToHex: %02x - %02x - %02x - %02x - %d", 
+                p_bcdValue, 
+                (unsigned char)(p_bcdValue >> 4), 
+                (unsigned char)((unsigned char)(p_bcdValue >> 4) * 10), 
+                (unsigned char)(p_bcdValue & 0x0f), 
+                (int)(
+                    (unsigned char)((unsigned char)(p_bcdValue >> 4) * 10) | (unsigned char)(p_bcdValue & 0x0f)
+                 )
+            )*/
+            return (unsigned char)((unsigned char)(p_bcdValue >> 4) * 10) | (unsigned char)(p_bcdValue & 0x0f);
         }
 
         /** This methods converts an hexadecimal value < 99 into a packed BCD (e.g. 0x20 -> 0x32)
@@ -152,7 +161,8 @@
          * @return The packed BCD value
          */
         inline unsigned char ConvertHexToBCD(const unsigned char p_hexaValue) {
-            return (p_hexaValue / 10) << 4 + (p_hexaValue % 10);
+            //DEBUG("ConvertHexToBCD: %02x - %02x - %02x", p_hexaValue, (unsigned char)(p_hexaValue / 10 << 4), (unsigned char)(p_hexaValue % 10))
+            return (unsigned char)(p_hexaValue / 10 << 4) | (unsigned char)(p_hexaValue % 10);
         }
 
         /** Restart the clock