MCP4726 sample
Dependencies: AQM0802 MCP4726 mbed
See http://developer.mbed.org/users/yasuyuki/notebook/MCP4726/
main.cpp@0:676aa4ff0765, 2014-10-15 (annotated)
- Committer:
- yasuyuki
- Date:
- Wed Oct 15 14:45:19 2014 +0000
- Revision:
- 0:676aa4ff0765
first release
Who changed what in which revision?
User | Revision | Line number | New 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 |