MCP4726 sample
Dependencies: AQM0802 MCP4726 mbed
See http://developer.mbed.org/users/yasuyuki/notebook/MCP4726/
Diff: main.cpp
- 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); + } + } + +} + +