This program illustrates how to use the 24LCxx_I2C library In this version, NTP service was added to set RTC time

Dependencies:   NetServices mbed

Revision:
1:71ea5acdee1b
Parent:
0:944015c441cb
--- a/main.cpp	Thu Nov 25 06:59:09 2010 +0000
+++ b/main.cpp	Thu Nov 25 13:34:01 2010 +0000
@@ -1,12 +1,14 @@
 #include <string>
 
 #include "24LCxx_I2C.h"
+#include "EthernetNetIf.h"
+#include "NTPClient.h"
 
 /*
  * Declare functions
  */
 
-void AvailableIndicator();
+void AvailableIndicator(); // LED1 flashing for program while program is alive
 char DisplayMenuAndGetChoice(); // Display and get the user choice
 void RunStateMachine_WithStdStringValue(); // Write and read a string
 void RunStateMachine_WithByteValue(); // Write and read a byte
@@ -18,26 +20,44 @@
 /*
  * Declare statics
  */
+EthernetNetIf g_eth;
+
 enum States {
-    Idle,
-    Write,
-    Written,
-    Read
+    Idle, // Idle state / Read memory operation done
+    Write, // Write memory operation
+    Written, // Write memory operation done
+    Read // Read memory operation
 };
 States g_state; // Process states for memory operations
 
 DigitalOut g_availableLed(LED1); // To verify if program in running
 Ticker g_available; // LED1 will flash with a period of 2s
 
+#define __3_3V__
+#ifdef __3_3V__
 C2424LCXX_I2C g_myEEPROM(p28, p27, 0x01, p5, 400000); // Create an instance of the class C2424LCXX_I2C, p28: SDA, p29:SDL, p5: wired to WP input of 24LCxx, address: A3=0,A2=0,A=1, on 3.3V I2C bus
+#else // __3_3V__
+C2424LCXX_I2C g_myEEPROM(p28, p27, 0x07, p7, 400000); // Create an instance of the class C2424LCXX_I2C, p28: SDA, p29:SDL, p7: wired to WP input of 24LCxx, address: A3=1,A2=1,A=1, on 5V I2C bus
+#endif // __3_3V__
 
 int main() {
 
-    wait(1); // Needed after startup
+    // Launch available indicator
+    g_available.attach(&AvailableIndicator, 2.0);
+
+    // Initialize Ethernet
+    g_eth.setup();
+    
+    wait(1); // Needed after Ethernet startup
    
-    // Launch available indocator
-    g_available.attach(&AvailableIndicator, 2.0);
-    
+    IpAddr ip = g_eth.getIp();
+    printf("IP address: %d:%d:%d:%d\r\n", ip[0], ip[1], ip[2], ip[3]);
+
+    // Update time
+    Host ntpServer(IpAddr(), 123, "ntp.unice.fr");
+    NTPClient ntp;
+    ntp.setTime(ntpServer);
+
     g_myEEPROM.WriteProtect(false); // Disabe WP (pin 7) - See DS21203M - Clause 2.4 Write-Protect (WP)
     
     while (true) { // Interrupt driven processing
@@ -127,7 +147,11 @@
                 str += " UTC";
                 printf("RunStateMachine_WithStdStringValue: Write '%s'\r\n", str.c_str());
                 if (!g_myEEPROM.Write(256, str)) { // Write the string, including the length indicator
+#ifdef __DEBUG
                     DEBUG_FATAL("RunStateMachine_WithStdStringValue: write failed at address 256")
+#else // __DEBUG
+                    printf("RunStateMachine_WithStdStringValue: write failed at address 256\r\n");
+#endif // __DEBUG
                     g_state = Idle;
                 } else {
                     g_state = Written;