can version

Dependencies:   mbed MCP4725

Fork of dac_controller2 by Eric Hill

Committer:
dzl5187
Date:
Tue Apr 29 03:13:12 2014 +0000
Revision:
3:29aa7212dda4
Parent:
1:4bd950ab8756
final_version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dzl5187 1:4bd950ab8756 1 #include "mbed.h"
dzl5187 1:4bd950ab8756 2 #include "mcp4725.h"
dzl5187 1:4bd950ab8756 3 #include "DAC.h"
dzl5187 1:4bd950ab8756 4 #include "math.h"
dzl5187 1:4bd950ab8756 5 #include "log.h"
dzl5187 1:4bd950ab8756 6
dzl5187 1:4bd950ab8756 7 #define PI 3.1415926
dzl5187 1:4bd950ab8756 8 MCP4725 controller(p9, p10, MCP4725::Fast400kHz, DEVICE_ADDR_BIT);
dzl5187 1:4bd950ab8756 9 Timer DAC_timer;
dzl5187 1:4bd950ab8756 10
dzl5187 1:4bd950ab8756 11 bool volatile DAC_running = false;
dzl5187 1:4bd950ab8756 12 float p_range = 0;
dzl5187 1:4bd950ab8756 13 enum FREQ p_freq = FREQ_10HZ;
dzl5187 1:4bd950ab8756 14 enum FORM p_form = FORM_SQUARE;
dzl5187 1:4bd950ab8756 15
dzl5187 1:4bd950ab8756 16 void DAC_start(){
dzl5187 1:4bd950ab8756 17 DAC_running = true;
dzl5187 1:4bd950ab8756 18 }
dzl5187 1:4bd950ab8756 19
dzl5187 1:4bd950ab8756 20 void DAC_stop(){
dzl5187 1:4bd950ab8756 21 DAC_running = false;
dzl5187 1:4bd950ab8756 22 }
dzl5187 1:4bd950ab8756 23 void DAC_set(float range, enum FREQ freq, enum FORM form){
dzl5187 1:4bd950ab8756 24 p_range = range;
dzl5187 1:4bd950ab8756 25 p_freq = freq;
dzl5187 1:4bd950ab8756 26 p_form = form;
dzl5187 1:4bd950ab8756 27 }
dzl5187 1:4bd950ab8756 28
dzl5187 1:4bd950ab8756 29 void DAC_generate(){
dzl5187 1:4bd950ab8756 30 float Vout = 0;
dzl5187 1:4bd950ab8756 31 int time_us = 0;
dzl5187 1:4bd950ab8756 32 DAC_timer.start();
dzl5187 1:4bd950ab8756 33 while( DAC_running ){
dzl5187 1:4bd950ab8756 34 if( p_form == FORM_SQUARE ){
dzl5187 1:4bd950ab8756 35 if( p_freq == FREQ_10HZ ){
dzl5187 1:4bd950ab8756 36 //generate square wave at 10HZ
dzl5187 3:29aa7212dda4 37 if( (int)time_us % 100000 <= 50000){ // T = 100 ms
dzl5187 1:4bd950ab8756 38 Vout = p_range;
dzl5187 1:4bd950ab8756 39 }
dzl5187 1:4bd950ab8756 40 else
dzl5187 1:4bd950ab8756 41 Vout = 0;
dzl5187 1:4bd950ab8756 42 }
dzl5187 1:4bd950ab8756 43 else{
dzl5187 1:4bd950ab8756 44 //generate square wave at 1HZ
dzl5187 1:4bd950ab8756 45 if( (int)time_us % 1000000 <= 500000) //T = 1 s
dzl5187 1:4bd950ab8756 46 Vout = p_range;
dzl5187 1:4bd950ab8756 47 else
dzl5187 1:4bd950ab8756 48 Vout = 0;
dzl5187 1:4bd950ab8756 49 }
dzl5187 1:4bd950ab8756 50 }
dzl5187 1:4bd950ab8756 51 else if ( p_form == FORM_SIN){
dzl5187 1:4bd950ab8756 52 if( p_freq == FREQ_10HZ ){
dzl5187 1:4bd950ab8756 53 Vout = p_range / 2.0 * (sin( 2.0 * PI * 10.0 * time_us / 1000000.0) + 1);
dzl5187 1:4bd950ab8756 54 }
dzl5187 1:4bd950ab8756 55 else{
dzl5187 1:4bd950ab8756 56 //generate sin wave at 1HZ
dzl5187 1:4bd950ab8756 57 Vout = p_range / 2.0 * (sin( 2.0 * PI * 1.0 * time_us / 1000000.0) + 1);
dzl5187 1:4bd950ab8756 58 }
dzl5187 1:4bd950ab8756 59 }
dzl5187 1:4bd950ab8756 60 wait_us(1000); //delay 1 ms
dzl5187 1:4bd950ab8756 61 time_us += 1000;
dzl5187 1:4bd950ab8756 62 controller.write(MCP4725::Normal, (0xFFF * (Vout/VDD_VOLTAGE) ), false);
dzl5187 1:4bd950ab8756 63 }
dzl5187 1:4bd950ab8756 64 DAC_timer.stop();
dzl5187 1:4bd950ab8756 65 DAC_timer.reset();
dzl5187 1:4bd950ab8756 66
dzl5187 1:4bd950ab8756 67 }