pizzo

Dependencies:   MCP4725 mbed

Fork of MCP4725_Library_Test by Donal Morrissey

Committer:
donalm
Date:
Sun Oct 27 14:03:26 2013 +0000
Revision:
0:3e143a2e21c8
Child:
4:092580187b59
Tidy up before publishing.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donalm 0:3e143a2e21c8 1 #include <stdbool.h>
donalm 0:3e143a2e21c8 2 #include "mbed.h"
donalm 0:3e143a2e21c8 3 #include "mcp4725.h"
donalm 0:3e143a2e21c8 4
donalm 0:3e143a2e21c8 5 /**
donalm 0:3e143a2e21c8 6 * A basic test suite for the MCP4725 DAC Library.
donalm 0:3e143a2e21c8 7 */
donalm 0:3e143a2e21c8 8
donalm 0:3e143a2e21c8 9 DigitalOut myled(LED1);
donalm 0:3e143a2e21c8 10 Serial pc(USBTX, USBRX);
donalm 0:3e143a2e21c8 11
donalm 0:3e143a2e21c8 12 void test_mcp4725_library(PinName sda, PinName scl, MCP4725::BusFrequency bus_frequency, int device_address_bits, char* testName);
donalm 0:3e143a2e21c8 13 int test_init(MCP4725* interface, char* testName);
donalm 0:3e143a2e21c8 14 int test_simple_read_write_no_eeprom(MCP4725* interface, enum MCP4725::PowerMode mode, int dac_value);
donalm 0:3e143a2e21c8 15 int test_simple_read_write_with_eeprom(MCP4725* interface, enum MCP4725::PowerMode mode, int dac_value);
donalm 0:3e143a2e21c8 16 int test_eeprom_write_status(MCP4725* interface);
donalm 0:3e143a2e21c8 17
donalm 0:3e143a2e21c8 18 int main()
donalm 0:3e143a2e21c8 19 {
donalm 0:3e143a2e21c8 20 pc.printf("Application for testing the MCP4725 interface library\r\n");
donalm 0:3e143a2e21c8 21
donalm 0:3e143a2e21c8 22 test_mcp4725_library(p9, p10, MCP4725::Standard100kHz, 0, "p9, p10, MCP4725::Standard100kHz");
donalm 0:3e143a2e21c8 23 test_mcp4725_library(p9, p10, MCP4725::Fast400kHz, 0, "p9, p10, MCP4725::Fast400kHz");
donalm 0:3e143a2e21c8 24 test_mcp4725_library(p9, p10, MCP4725::HighSpeed3_4Mhz, 0, "p9, p10, MCP4725::HighSpeed3_4Mhz");
donalm 0:3e143a2e21c8 25
donalm 0:3e143a2e21c8 26 while(1) {
donalm 0:3e143a2e21c8 27 myled = 1;
donalm 0:3e143a2e21c8 28 wait(0.5);
donalm 0:3e143a2e21c8 29 myled = 0;
donalm 0:3e143a2e21c8 30 wait(0.5);
donalm 0:3e143a2e21c8 31 }
donalm 0:3e143a2e21c8 32 }
donalm 0:3e143a2e21c8 33
donalm 0:3e143a2e21c8 34
donalm 0:3e143a2e21c8 35
donalm 0:3e143a2e21c8 36 /** Run a set of simple tests on the mcp4725 driver.
donalm 0:3e143a2e21c8 37 *
donalm 0:3e143a2e21c8 38 * @param sda I2C data line pin
donalm 0:3e143a2e21c8 39 * @param scl I2C clock line pin
donalm 0:3e143a2e21c8 40 * @param bus_frequency the frequency at which the I2C bus is running.
donalm 0:3e143a2e21c8 41 * @param device_address_bits The 3bit address bits of the device.
donalm 0:3e143a2e21c8 42 */
donalm 0:3e143a2e21c8 43 void test_mcp4725_library(PinName sda, PinName scl, MCP4725::BusFrequency bus_frequency, int device_address_bits, char* testName)
donalm 0:3e143a2e21c8 44 {
donalm 0:3e143a2e21c8 45 //Create our instance of the interface for test
donalm 0:3e143a2e21c8 46 MCP4725 mcp4725_interface(sda, scl, bus_frequency, device_address_bits);
donalm 0:3e143a2e21c8 47
donalm 0:3e143a2e21c8 48 if(test_init(&mcp4725_interface, testName) == 0)
donalm 0:3e143a2e21c8 49 {
donalm 0:3e143a2e21c8 50 test_simple_read_write_no_eeprom(&mcp4725_interface, MCP4725::Normal, 3095);
donalm 0:3e143a2e21c8 51 test_simple_read_write_no_eeprom(&mcp4725_interface, MCP4725::PowerDown1k, 2094);
donalm 0:3e143a2e21c8 52 test_simple_read_write_no_eeprom(&mcp4725_interface, MCP4725::PowerDown100k, 2093);
donalm 0:3e143a2e21c8 53 test_simple_read_write_no_eeprom(&mcp4725_interface, MCP4725::PowerDown500k, 92);
donalm 0:3e143a2e21c8 54 test_simple_read_write_no_eeprom(&mcp4725_interface, MCP4725::Normal, 4095);
donalm 0:3e143a2e21c8 55
donalm 0:3e143a2e21c8 56 test_simple_read_write_with_eeprom(&mcp4725_interface, MCP4725::Normal, 3095);
donalm 0:3e143a2e21c8 57 test_simple_read_write_with_eeprom(&mcp4725_interface, MCP4725::PowerDown1k, 2094);
donalm 0:3e143a2e21c8 58 test_simple_read_write_with_eeprom(&mcp4725_interface, MCP4725::PowerDown100k, 2093);
donalm 0:3e143a2e21c8 59 test_simple_read_write_with_eeprom(&mcp4725_interface, MCP4725::PowerDown500k, 92);
donalm 0:3e143a2e21c8 60 test_simple_read_write_with_eeprom(&mcp4725_interface, MCP4725::Normal, 4095);
donalm 0:3e143a2e21c8 61
donalm 0:3e143a2e21c8 62 test_eeprom_write_status(&mcp4725_interface);
donalm 0:3e143a2e21c8 63 }
donalm 0:3e143a2e21c8 64
donalm 0:3e143a2e21c8 65
donalm 0:3e143a2e21c8 66 }
donalm 0:3e143a2e21c8 67
donalm 0:3e143a2e21c8 68 /** Initialise the device registers & eeprom. */
donalm 0:3e143a2e21c8 69 int test_init(MCP4725* interface, char* testName)
donalm 0:3e143a2e21c8 70 {
donalm 0:3e143a2e21c8 71 int result;
donalm 0:3e143a2e21c8 72 pc.printf("Initialising test '%s': ", testName);
donalm 0:3e143a2e21c8 73
donalm 0:3e143a2e21c8 74 //Prime the device, including its eeprom.
donalm 0:3e143a2e21c8 75 result = interface->write(MCP4725::Normal, 0, true);
donalm 0:3e143a2e21c8 76 if(result == 0)
donalm 0:3e143a2e21c8 77 {
donalm 0:3e143a2e21c8 78 wait(0.5);
donalm 0:3e143a2e21c8 79 pc.printf("OK\r\n");
donalm 0:3e143a2e21c8 80 }
donalm 0:3e143a2e21c8 81 else
donalm 0:3e143a2e21c8 82 {
donalm 0:3e143a2e21c8 83 pc.printf("FAILED: %d\r\n", result);
donalm 0:3e143a2e21c8 84 }
donalm 0:3e143a2e21c8 85
donalm 0:3e143a2e21c8 86 return result;
donalm 0:3e143a2e21c8 87 }
donalm 0:3e143a2e21c8 88
donalm 0:3e143a2e21c8 89 /* Run a simple read/write test that does not write to eeprom. */
donalm 0:3e143a2e21c8 90 int test_simple_read_write_no_eeprom(MCP4725* interface, enum MCP4725::PowerMode mode, int dac_value)
donalm 0:3e143a2e21c8 91 {
donalm 0:3e143a2e21c8 92 enum MCP4725::PowerMode read_mode;
donalm 0:3e143a2e21c8 93 enum MCP4725::PowerMode read_mode_eeprom;//, write_mode_eeprom;
donalm 0:3e143a2e21c8 94 int read_dac_value;
donalm 0:3e143a2e21c8 95 int read_dac_value_eeprom;//, write_dac_value_eeprom;
donalm 0:3e143a2e21c8 96 bool read_eeprom_write_in_progress;
donalm 0:3e143a2e21c8 97
donalm 0:3e143a2e21c8 98 pc.printf("\tRead/write test without write to eeprom: ");
donalm 0:3e143a2e21c8 99
donalm 0:3e143a2e21c8 100 interface->write(mode, dac_value, false);
donalm 0:3e143a2e21c8 101 interface->read(&read_mode, &read_mode_eeprom, &read_dac_value, &read_dac_value_eeprom, &read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 102 if( (mode != read_mode) || (dac_value != read_dac_value) || (read_eeprom_write_in_progress == true) || (read_dac_value == read_dac_value_eeprom) )
donalm 0:3e143a2e21c8 103 {
donalm 0:3e143a2e21c8 104 pc.printf("Failed - mode=%d, read_mode=%d, dac_value=%d, read_dac_value=%d, eeprom_write_state:%d\r\n", (int)mode, (int)read_mode, dac_value, read_dac_value, read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 105 return 1;
donalm 0:3e143a2e21c8 106 }
donalm 0:3e143a2e21c8 107 else
donalm 0:3e143a2e21c8 108 {
donalm 0:3e143a2e21c8 109 pc.printf("Passed\r\n");
donalm 0:3e143a2e21c8 110 return 0;
donalm 0:3e143a2e21c8 111 }
donalm 0:3e143a2e21c8 112 }
donalm 0:3e143a2e21c8 113
donalm 0:3e143a2e21c8 114
donalm 0:3e143a2e21c8 115 /* Run a simple read/write test that does write to eeprom. */
donalm 0:3e143a2e21c8 116 int test_simple_read_write_with_eeprom(MCP4725* interface, enum MCP4725::PowerMode mode, int dac_value)
donalm 0:3e143a2e21c8 117 {
donalm 0:3e143a2e21c8 118 enum MCP4725::PowerMode read_mode;
donalm 0:3e143a2e21c8 119 enum MCP4725::PowerMode read_mode_eeprom;//, write_mode_eeprom;
donalm 0:3e143a2e21c8 120 int read_dac_value;
donalm 0:3e143a2e21c8 121 int read_dac_value_eeprom;//, write_dac_value_eeprom;
donalm 0:3e143a2e21c8 122 bool read_eeprom_write_in_progress;
donalm 0:3e143a2e21c8 123
donalm 0:3e143a2e21c8 124 pc.printf("\tRead/write test with write to eeprom: ");
donalm 0:3e143a2e21c8 125
donalm 0:3e143a2e21c8 126 interface->write(mode, dac_value, true);
donalm 0:3e143a2e21c8 127
donalm 0:3e143a2e21c8 128 wait(0.5); //Wait a short period for the eeprom write to complete.
donalm 0:3e143a2e21c8 129 interface->read(&read_mode, &read_mode_eeprom, &read_dac_value, &read_dac_value_eeprom, &read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 130
donalm 0:3e143a2e21c8 131 if( (mode != read_mode) || (dac_value != read_dac_value) || (read_eeprom_write_in_progress == true) || (read_dac_value != read_dac_value_eeprom) || (read_mode != read_mode_eeprom) )
donalm 0:3e143a2e21c8 132 {
donalm 0:3e143a2e21c8 133 pc.printf("Failed - mode=%d, read_mode=%d, dac_value=%d, read_dac_value=%d, eeprom_write_state:%d\r\n", (int)mode, (int)read_mode, dac_value, read_dac_value, read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 134 return 1;
donalm 0:3e143a2e21c8 135 }
donalm 0:3e143a2e21c8 136 else
donalm 0:3e143a2e21c8 137 {
donalm 0:3e143a2e21c8 138 pc.printf("Passed\r\n");
donalm 0:3e143a2e21c8 139 return 0;
donalm 0:3e143a2e21c8 140 }
donalm 0:3e143a2e21c8 141 }
donalm 0:3e143a2e21c8 142
donalm 0:3e143a2e21c8 143 /** Test to see if the eeprom write status bit is reported correctly. */
donalm 0:3e143a2e21c8 144 int test_eeprom_write_status(MCP4725* interface)
donalm 0:3e143a2e21c8 145 {
donalm 0:3e143a2e21c8 146 enum MCP4725::PowerMode read_mode;
donalm 0:3e143a2e21c8 147 enum MCP4725::PowerMode read_mode_eeprom;//, write_mode_eeprom;
donalm 0:3e143a2e21c8 148 int read_dac_value;
donalm 0:3e143a2e21c8 149 int read_dac_value_eeprom;//, write_dac_value_eeprom;
donalm 0:3e143a2e21c8 150 bool read_eeprom_write_in_progress;
donalm 0:3e143a2e21c8 151
donalm 0:3e143a2e21c8 152 pc.printf("\tTest eeprom write status: ");
donalm 0:3e143a2e21c8 153
donalm 0:3e143a2e21c8 154 interface->write(MCP4725::Normal, 4095, true);
donalm 0:3e143a2e21c8 155
donalm 0:3e143a2e21c8 156 //Immediately read the device
donalm 0:3e143a2e21c8 157 interface->read(&read_mode, &read_mode_eeprom, &read_dac_value, &read_dac_value_eeprom, &read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 158
donalm 0:3e143a2e21c8 159 if( read_eeprom_write_in_progress == false )
donalm 0:3e143a2e21c8 160 {
donalm 0:3e143a2e21c8 161 pc.printf("Failed - EEPROM Write not reported as in progress.\r\n");
donalm 0:3e143a2e21c8 162 return 1;
donalm 0:3e143a2e21c8 163 }
donalm 0:3e143a2e21c8 164 else
donalm 0:3e143a2e21c8 165 {
donalm 0:3e143a2e21c8 166 wait(0.5); //Wait a short period for the eeprom write to complete.
donalm 0:3e143a2e21c8 167 interface->read(&read_mode, &read_mode_eeprom, &read_dac_value, &read_dac_value_eeprom, &read_eeprom_write_in_progress);
donalm 0:3e143a2e21c8 168
donalm 0:3e143a2e21c8 169 if( read_eeprom_write_in_progress == false )
donalm 0:3e143a2e21c8 170 {
donalm 0:3e143a2e21c8 171 pc.printf("Passed\r\n");
donalm 0:3e143a2e21c8 172 return 0;
donalm 0:3e143a2e21c8 173 }
donalm 0:3e143a2e21c8 174 else
donalm 0:3e143a2e21c8 175 {
donalm 0:3e143a2e21c8 176 pc.printf("Failed - EEPROM Write reported as still in progress.\r\n");
donalm 0:3e143a2e21c8 177 return 1;
donalm 0:3e143a2e21c8 178 }
donalm 0:3e143a2e21c8 179 }
donalm 0:3e143a2e21c8 180 }