Eric Hill
/
dac_controller2
can version
Fork of dac_controller by
DAC/DAC.cpp@2:c0287d9c2226, 2014-04-11 (annotated)
- Committer:
- erichill44
- Date:
- Fri Apr 11 19:53:01 2014 +0000
- Revision:
- 2:c0287d9c2226
- Parent:
- 1:4bd950ab8756
implemented CAN
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:4bd950ab8756 | 37 | if( (int)time_us % 1000000 <= 500000){ // 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 | } |