MCP4726 sample

Dependencies:   AQM0802 MCP4726 mbed

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

Committer:
yasuyuki
Date:
Wed Oct 15 14:45:19 2014 +0000
Revision:
0:676aa4ff0765
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yasuyuki 0:676aa4ff0765 1 //**********************
yasuyuki 0:676aa4ff0765 2 // DDS with DAC 12bits
yasuyuki 0:676aa4ff0765 3 // MCP4726 sample for mbed
yasuyuki 0:676aa4ff0765 4 //
yasuyuki 0:676aa4ff0765 5 // output
yasuyuki 0:676aa4ff0765 6 // (1)sin wave with DDS, 1Hz-1KHz
yasuyuki 0:676aa4ff0765 7 //
yasuyuki 0:676aa4ff0765 8 // (C)Copyright 2014 All rights reserved by Y.Onodera
yasuyuki 0:676aa4ff0765 9 // http://einstlab.web.fc2.com
yasuyuki 0:676aa4ff0765 10 //**********************
yasuyuki 0:676aa4ff0765 11 #include "mbed.h"
yasuyuki 0:676aa4ff0765 12 #include "AQM0802.h"
yasuyuki 0:676aa4ff0765 13 #include "MCP4726.h"
yasuyuki 0:676aa4ff0765 14
yasuyuki 0:676aa4ff0765 15 #define PI 3.14159265
yasuyuki 0:676aa4ff0765 16 // sampling frequency for DDS
yasuyuki 0:676aa4ff0765 17 // 400KHz
yasuyuki 0:676aa4ff0765 18 #define S 8400
yasuyuki 0:676aa4ff0765 19 // 1MHz
yasuyuki 0:676aa4ff0765 20 //#define S 12000
yasuyuki 0:676aa4ff0765 21
yasuyuki 0:676aa4ff0765 22 #if defined(TARGET_LPC1768)
yasuyuki 0:676aa4ff0765 23 I2C i2c(p28,p27);
yasuyuki 0:676aa4ff0765 24 #endif
yasuyuki 0:676aa4ff0765 25 // for TG-LPC11U35-501
yasuyuki 0:676aa4ff0765 26 #if defined(TARGET_LPC11U35_501)
yasuyuki 0:676aa4ff0765 27 I2C i2c(P0_5,P0_4);
yasuyuki 0:676aa4ff0765 28 #endif
yasuyuki 0:676aa4ff0765 29 // for Nucleo
yasuyuki 0:676aa4ff0765 30 #if defined(TARGET_NUCLEO_F401RE)
yasuyuki 0:676aa4ff0765 31 I2C i2c(D14,D15);
yasuyuki 0:676aa4ff0765 32 #endif
yasuyuki 0:676aa4ff0765 33 AQM0802 lcd(i2c);
yasuyuki 0:676aa4ff0765 34 MCP4726 mcp4726(i2c);
yasuyuki 0:676aa4ff0765 35 Ticker dds;
yasuyuki 0:676aa4ff0765 36
yasuyuki 0:676aa4ff0765 37 unsigned short f;
yasuyuki 0:676aa4ff0765 38 unsigned short sin_table[360];
yasuyuki 0:676aa4ff0765 39
yasuyuki 0:676aa4ff0765 40
yasuyuki 0:676aa4ff0765 41 void sampling()
yasuyuki 0:676aa4ff0765 42 {
yasuyuki 0:676aa4ff0765 43 static int t=0;
yasuyuki 0:676aa4ff0765 44 unsigned short x;
yasuyuki 0:676aa4ff0765 45 float a;
yasuyuki 0:676aa4ff0765 46
yasuyuki 0:676aa4ff0765 47 x=360*modff((float)f*t/S,&a);
yasuyuki 0:676aa4ff0765 48 x = sin_table[x];
yasuyuki 0:676aa4ff0765 49 if(++t>=S)t=0;
yasuyuki 0:676aa4ff0765 50
yasuyuki 0:676aa4ff0765 51 // D/A
yasuyuki 0:676aa4ff0765 52 mcp4726.put(x);
yasuyuki 0:676aa4ff0765 53 }
yasuyuki 0:676aa4ff0765 54
yasuyuki 0:676aa4ff0765 55
yasuyuki 0:676aa4ff0765 56 int main() {
yasuyuki 0:676aa4ff0765 57
yasuyuki 0:676aa4ff0765 58 char msg[10];
yasuyuki 0:676aa4ff0765 59 int i;
yasuyuki 0:676aa4ff0765 60
yasuyuki 0:676aa4ff0765 61 // to make 12bits sine table
yasuyuki 0:676aa4ff0765 62 for(i=0;i<360;i++){
yasuyuki 0:676aa4ff0765 63 sin_table[i]=0x7ff*sin(2*PI/360*i)+0x7ff;
yasuyuki 0:676aa4ff0765 64 }
yasuyuki 0:676aa4ff0765 65
yasuyuki 0:676aa4ff0765 66 // start signal with sampling
yasuyuki 0:676aa4ff0765 67 dds.attach_us(&sampling,1000000/S); // for us
yasuyuki 0:676aa4ff0765 68
yasuyuki 0:676aa4ff0765 69 while(1){
yasuyuki 0:676aa4ff0765 70 // Set f, test signal
yasuyuki 0:676aa4ff0765 71 // 10-1KHz
yasuyuki 0:676aa4ff0765 72 for(f=10;f<=1000;f+=10){
yasuyuki 0:676aa4ff0765 73 sprintf(msg, "%5d Hz", f );
yasuyuki 0:676aa4ff0765 74 __disable_irq();
yasuyuki 0:676aa4ff0765 75 lcd.locate(0,0);
yasuyuki 0:676aa4ff0765 76 lcd.print(msg);
yasuyuki 0:676aa4ff0765 77 __enable_irq();
yasuyuki 0:676aa4ff0765 78 wait(1);
yasuyuki 0:676aa4ff0765 79 }
yasuyuki 0:676aa4ff0765 80 }
yasuyuki 0:676aa4ff0765 81
yasuyuki 0:676aa4ff0765 82 }
yasuyuki 0:676aa4ff0765 83
yasuyuki 0:676aa4ff0765 84