MCP4726 sample

Dependencies:   AQM0802 MCP4726 mbed

See http://developer.mbed.org/users/yasuyuki/notebook/MCP4726/

Revision:
0:676aa4ff0765
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 15 14:45:19 2014 +0000
@@ -0,0 +1,84 @@
+//**********************
+// DDS with DAC 12bits
+// MCP4726 sample for mbed
+//
+// output
+// (1)sin wave with DDS, 1Hz-1KHz
+//
+// (C)Copyright 2014 All rights reserved by Y.Onodera
+// http://einstlab.web.fc2.com
+//**********************
+#include "mbed.h"
+#include "AQM0802.h"
+#include "MCP4726.h"
+
+#define PI 3.14159265
+// sampling frequency for DDS
+// 400KHz
+#define S   8400
+// 1MHz
+//#define S   12000
+
+#if defined(TARGET_LPC1768)
+I2C i2c(p28,p27);
+#endif
+// for TG-LPC11U35-501
+#if defined(TARGET_LPC11U35_501)
+I2C i2c(P0_5,P0_4);
+#endif
+// for Nucleo
+#if defined(TARGET_NUCLEO_F401RE)
+I2C i2c(D14,D15);
+#endif
+AQM0802 lcd(i2c);
+MCP4726 mcp4726(i2c);
+Ticker dds;
+
+unsigned short f;
+unsigned short sin_table[360];
+
+
+void sampling()
+{
+    static int t=0;
+    unsigned short x;
+    float a;
+
+    x=360*modff((float)f*t/S,&a);
+    x = sin_table[x];
+    if(++t>=S)t=0;
+
+    // D/A
+    mcp4726.put(x);
+}
+
+
+int main() {
+    
+    char msg[10];
+    int i;
+    
+    // to make 12bits sine table
+    for(i=0;i<360;i++){
+        sin_table[i]=0x7ff*sin(2*PI/360*i)+0x7ff;
+    }
+
+    // start signal with sampling
+    dds.attach_us(&sampling,1000000/S);    // for us
+
+    while(1){
+        // Set f, test signal
+        // 10-1KHz
+        for(f=10;f<=1000;f+=10){
+            sprintf(msg, "%5d Hz", f );
+            __disable_irq();
+            lcd.locate(0,0);
+            lcd.print(msg);
+            __enable_irq();
+            wait(1);
+        }
+    }
+
+}
+
+