Mike Pizzo
/
MCP4725_Library_Test
pizzo
Fork of MCP4725_Library_Test by
main.cpp@5:03662d049f69, 2015-12-14 (annotated)
- Committer:
- mikepizzo
- Date:
- Mon Dec 14 05:05:43 2015 +0000
- Revision:
- 5:03662d049f69
- Parent:
- 4:092580187b59
zip;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mikepizzo | 5:03662d049f69 | 1 | |
donalm | 0:3e143a2e21c8 | 2 | #include "mbed.h" |
donalm | 0:3e143a2e21c8 | 3 | #include "mcp4725.h" |
mikepizzo | 5:03662d049f69 | 4 | #include "math.h" |
mikepizzo | 5:03662d049f69 | 5 | #include <iostream> |
mikepizzo | 5:03662d049f69 | 6 | using namespace std; |
donalm | 0:3e143a2e21c8 | 7 | |
donalm | 0:3e143a2e21c8 | 8 | /** |
mikepizzo | 5:03662d049f69 | 9 | * A test program for the MCP4725 DAC Library. This Test Application requires the following: |
mikepizzo | 5:03662d049f69 | 10 | * * An MCP4725 connected to the I2C bus of the mbed LPC1768. |
donalm | 4:092580187b59 | 11 | * * The analog out of the MCP1768 connected to Pin15 (analog in) of the mbed LPC1768. |
mikepizzo | 5:03662d049f69 | 12 | * |
donalm | 4:092580187b59 | 13 | * |
mikepizzo | 5:03662d049f69 | 14 | * This is a stripped down version of the MCP4725_Library_Test found online, and should make the necessary commands more clear. |
mikepizzo | 5:03662d049f69 | 15 | * Last Edited: 12/24/13, Tim Brubaker |
donalm | 4:092580187b59 | 16 | * |
donalm | 0:3e143a2e21c8 | 17 | */ |
donalm | 0:3e143a2e21c8 | 18 | |
donalm | 4:092580187b59 | 19 | DigitalOut testLed(LED1); |
donalm | 0:3e143a2e21c8 | 20 | Serial pc(USBTX, USBRX); |
donalm | 4:092580187b59 | 21 | AnalogIn analogIn(p15); |
mikepizzo | 5:03662d049f69 | 22 | CAN can1(p30,p29); |
donalm | 0:3e143a2e21c8 | 23 | |
mikepizzo | 5:03662d049f69 | 24 | // Class instantiation (similar to Serial pc(USBTX, USBRX) in function) |
mikepizzo | 5:03662d049f69 | 25 | MCP4725 bacon(p9, p10, MCP4725::Fast400kHz, 0x63); |
mikepizzo | 5:03662d049f69 | 26 | |
mikepizzo | 5:03662d049f69 | 27 | float xrad = 0; |
mikepizzo | 5:03662d049f69 | 28 | float x = 0; |
donalm | 0:3e143a2e21c8 | 29 | |
donalm | 0:3e143a2e21c8 | 30 | int main() |
donalm | 0:3e143a2e21c8 | 31 | { |
mikepizzo | 5:03662d049f69 | 32 | float xrad = 0; |
mikepizzo | 5:03662d049f69 | 33 | float x = 0; |
mikepizzo | 5:03662d049f69 | 34 | int state = 5; |
mikepizzo | 5:03662d049f69 | 35 | int mem = 0; |
mikepizzo | 5:03662d049f69 | 36 | // |
mikepizzo | 5:03662d049f69 | 37 | // |
mikepizzo | 5:03662d049f69 | 38 | // |
mikepizzo | 5:03662d049f69 | 39 | while (1) { |
mikepizzo | 5:03662d049f69 | 40 | CANMessage msg; |
mikepizzo | 5:03662d049f69 | 41 | if(can1.read(msg)){ |
mikepizzo | 5:03662d049f69 | 42 | printf("Message received: %d\n", msg.data[0]); |
mikepizzo | 5:03662d049f69 | 43 | switch(msg.data[0]){ |
mikepizzo | 5:03662d049f69 | 44 | case 0: |
mikepizzo | 5:03662d049f69 | 45 | state = mem; |
mikepizzo | 5:03662d049f69 | 46 | break; |
mikepizzo | 5:03662d049f69 | 47 | |
mikepizzo | 5:03662d049f69 | 48 | case 1: |
mikepizzo | 5:03662d049f69 | 49 | mem = state; |
mikepizzo | 5:03662d049f69 | 50 | state = 1; |
mikepizzo | 5:03662d049f69 | 51 | break; |
mikepizzo | 5:03662d049f69 | 52 | |
mikepizzo | 5:03662d049f69 | 53 | case 2: |
mikepizzo | 5:03662d049f69 | 54 | state = 2; |
mikepizzo | 5:03662d049f69 | 55 | break; |
mikepizzo | 5:03662d049f69 | 56 | |
mikepizzo | 5:03662d049f69 | 57 | case 3: |
mikepizzo | 5:03662d049f69 | 58 | state = 3; |
mikepizzo | 5:03662d049f69 | 59 | break; |
mikepizzo | 5:03662d049f69 | 60 | |
mikepizzo | 5:03662d049f69 | 61 | case 4: |
mikepizzo | 5:03662d049f69 | 62 | state = 4; |
mikepizzo | 5:03662d049f69 | 63 | break; |
mikepizzo | 5:03662d049f69 | 64 | |
mikepizzo | 5:03662d049f69 | 65 | case 5 : |
mikepizzo | 5:03662d049f69 | 66 | state = 5; |
mikepizzo | 5:03662d049f69 | 67 | break; |
mikepizzo | 5:03662d049f69 | 68 | } |
mikepizzo | 5:03662d049f69 | 69 | } |
mikepizzo | 5:03662d049f69 | 70 | switch (state){ |
mikepizzo | 5:03662d049f69 | 71 | case 0: |
mikepizzo | 5:03662d049f69 | 72 | //pc.printf("Start"); |
mikepizzo | 5:03662d049f69 | 73 | break; |
mikepizzo | 5:03662d049f69 | 74 | case 1: |
mikepizzo | 5:03662d049f69 | 75 | bacon.write(MCP4725::Normal, (0xFFF * (0.0 / 3.3)), false); |
mikepizzo | 5:03662d049f69 | 76 | pc.printf("Value is %f V \r\n", analogIn.read()*3.3); |
mikepizzo | 5:03662d049f69 | 77 | break; |
mikepizzo | 5:03662d049f69 | 78 | |
mikepizzo | 5:03662d049f69 | 79 | case 2: |
mikepizzo | 5:03662d049f69 | 80 | testLed = 1; |
mikepizzo | 5:03662d049f69 | 81 | wait(1); |
mikepizzo | 5:03662d049f69 | 82 | // Write to DAC register (not EEPROM). Documentation in library files. |
mikepizzo | 5:03662d049f69 | 83 | bacon.write(MCP4725::Normal, (0xFFF * (3.3 / 3.3)), false); |
mikepizzo | 5:03662d049f69 | 84 | testLed = 0; |
mikepizzo | 5:03662d049f69 | 85 | pc.printf("Value is %f V \r\n", analogIn.read()*3.3); |
mikepizzo | 5:03662d049f69 | 86 | wait(1); |
mikepizzo | 5:03662d049f69 | 87 | bacon.write(MCP4725::Normal, (0xFFF * (0.0 / 3.3)), false); |
mikepizzo | 5:03662d049f69 | 88 | // Print ADC measurement to terminal. Scale factor of 3.3 needed for internal ADC. |
mikepizzo | 5:03662d049f69 | 89 | pc.printf("Value is %f V \r\n", analogIn.read()*3.3); |
mikepizzo | 5:03662d049f69 | 90 | break; |
mikepizzo | 5:03662d049f69 | 91 | |
mikepizzo | 5:03662d049f69 | 92 | case 3: |
mikepizzo | 5:03662d049f69 | 93 | // printf("1 Hz Sine Wave\r\n"); |
mikepizzo | 5:03662d049f69 | 94 | //1 Hz Sine Wave |
mikepizzo | 5:03662d049f69 | 95 | xrad = x*3.14159 / 180; |
mikepizzo | 5:03662d049f69 | 96 | // Write to DAC register (not EEPROM). Documentation in library files. |
mikepizzo | 5:03662d049f69 | 97 | bacon.write(MCP4725::Normal, (0xFFF * (0.5*sin(xrad) + 0.5)), false); |
mikepizzo | 5:03662d049f69 | 98 | if (x == 360){ |
mikepizzo | 5:03662d049f69 | 99 | x = 0.045; |
mikepizzo | 5:03662d049f69 | 100 | } |
mikepizzo | 5:03662d049f69 | 101 | else { |
mikepizzo | 5:03662d049f69 | 102 | x = x + 0.045; |
mikepizzo | 5:03662d049f69 | 103 | } |
mikepizzo | 5:03662d049f69 | 104 | break; |
mikepizzo | 5:03662d049f69 | 105 | case 4: |
mikepizzo | 5:03662d049f69 | 106 | wait(.1); |
mikepizzo | 5:03662d049f69 | 107 | bacon.write(MCP4725::Normal, (0xFFF * (3.3 / 3.3)), false); |
mikepizzo | 5:03662d049f69 | 108 | testLed = 0; |
mikepizzo | 5:03662d049f69 | 109 | pc.printf("Value is %f V \r\n", analogIn.read()*3.3); |
mikepizzo | 5:03662d049f69 | 110 | wait(0.1); |
mikepizzo | 5:03662d049f69 | 111 | bacon.write(MCP4725::Normal, (0xFFF * (0.0 / 3.3)), false); |
mikepizzo | 5:03662d049f69 | 112 | // Print ADC measurement to terminal. Scale factor of 3.3 needed for internal ADC. |
mikepizzo | 5:03662d049f69 | 113 | pc.printf("Value is %f V \r\n", analogIn.read()*3.3); |
mikepizzo | 5:03662d049f69 | 114 | break; |
mikepizzo | 5:03662d049f69 | 115 | case 5: |
donalm | 4:092580187b59 | 116 | |
mikepizzo | 5:03662d049f69 | 117 | // Write to DAC register (not EEPROM). Documentation in library files. |
mikepizzo | 5:03662d049f69 | 118 | xrad = x*3.14159 / 180; |
mikepizzo | 5:03662d049f69 | 119 | // Write to DAC register (not EEPROM). Documentation in library files. |
mikepizzo | 5:03662d049f69 | 120 | bacon.write(MCP4725::Normal, (0xFFF * (0.5*sin(xrad) + 0.5)), false); |
mikepizzo | 5:03662d049f69 | 121 | if (x == 360){ |
mikepizzo | 5:03662d049f69 | 122 | x = 0.45; |
mikepizzo | 5:03662d049f69 | 123 | } |
mikepizzo | 5:03662d049f69 | 124 | else { |
mikepizzo | 5:03662d049f69 | 125 | x = x + 0.45; |
mikepizzo | 5:03662d049f69 | 126 | } |
mikepizzo | 5:03662d049f69 | 127 | break; |
donalm | 4:092580187b59 | 128 | } |
mikepizzo | 5:03662d049f69 | 129 | } |
donalm | 0:3e143a2e21c8 | 130 | } |