Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:832808d6b029, 2020-08-13 (annotated)
- Committer:
- elelthvd
- Date:
- Thu Aug 13 15:57:28 2020 +0800
- Revision:
- 0:832808d6b029
Add test software for MAX11300 library, with example configuration.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| elelthvd | 0:832808d6b029 | 1 | #include "mbed.h" |
| elelthvd | 0:832808d6b029 | 2 | #include "MAX11300.h" |
| elelthvd | 0:832808d6b029 | 3 | #include "MAX11300Hex.h" // Contains PIXI configuration: port0 ADC, port1 DAC |
| elelthvd | 0:832808d6b029 | 4 | |
| elelthvd | 0:832808d6b029 | 5 | #define D_TX USBTX |
| elelthvd | 0:832808d6b029 | 6 | #define D_RX USBRX |
| elelthvd | 0:832808d6b029 | 7 | // Create a BufferedSerial object to be used by the system I/O retarget code. |
| elelthvd | 0:832808d6b029 | 8 | static BufferedSerial pc(D_TX, D_RX, 115200); |
| elelthvd | 0:832808d6b029 | 9 | // static BufferedSerial pc(D_TX, D_RX, 115200); |
| elelthvd | 0:832808d6b029 | 10 | // Specify a custom FileHandle for the console. |
| elelthvd | 0:832808d6b029 | 11 | FileHandle * mbed::mbed_override_console(int fd) { |
| elelthvd | 0:832808d6b029 | 12 | return &pc; |
| elelthvd | 0:832808d6b029 | 13 | } |
| elelthvd | 0:832808d6b029 | 14 | DigitalOut myled(LED1); |
| elelthvd | 0:832808d6b029 | 15 | |
| elelthvd | 0:832808d6b029 | 16 | // SPI for DISCO_F746NG board w/Mikro Adruino Click Shield |
| elelthvd | 0:832808d6b029 | 17 | SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); |
| elelthvd | 0:832808d6b029 | 18 | // SPI for DISCO_F746NG board w/Mikro Adruino Click Shield |
| elelthvd | 0:832808d6b029 | 19 | // #define D_CS D9 // PWM_OUT // MikroBUS 2 |
| elelthvd | 0:832808d6b029 | 20 | // #define D_INTR D3 // PB_4 // MikroBUS 2 |
| elelthvd | 0:832808d6b029 | 21 | // #define D_RST A2 // PF_9 // MikroBUS 2 |
| elelthvd | 0:832808d6b029 | 22 | #define D_CS D10 // SPI_CS // MikroBUS 1 |
| elelthvd | 0:832808d6b029 | 23 | #define D_INTR D2 // PG_6 // MikroBUS 1 |
| elelthvd | 0:832808d6b029 | 24 | #define D_RST A3 // PF_8 // MikroBUS 1 |
| elelthvd | 0:832808d6b029 | 25 | |
| elelthvd | 0:832808d6b029 | 26 | // main() runs in its own thread in the OS |
| elelthvd | 0:832808d6b029 | 27 | int main() |
| elelthvd | 0:832808d6b029 | 28 | { |
| elelthvd | 0:832808d6b029 | 29 | printf("MAX11300 Test...\r\n"); |
| elelthvd | 0:832808d6b029 | 30 | uint16_t adcvalue = 0; // 12-bit |
| elelthvd | 0:832808d6b029 | 31 | float f_adcvalue = 0; |
| elelthvd | 0:832808d6b029 | 32 | uint16_t dacvalue = 0xFFF; // 12-bit |
| elelthvd | 0:832808d6b029 | 33 | float f_dacvalue = 0; |
| elelthvd | 0:832808d6b029 | 34 | |
| elelthvd | 0:832808d6b029 | 35 | uint8_t step = 0; |
| elelthvd | 0:832808d6b029 | 36 | |
| elelthvd | 0:832808d6b029 | 37 | for(int i=0;i<100;i++) { |
| elelthvd | 0:832808d6b029 | 38 | myled = !myled;thread_sleep_for(10); |
| elelthvd | 0:832808d6b029 | 39 | } |
| elelthvd | 0:832808d6b029 | 40 | MAX11300 mikroe_pixi_click(spi, D_CS, D_INTR, NC); |
| elelthvd | 0:832808d6b029 | 41 | MAX11300::CmdResult pixi_result; |
| elelthvd | 0:832808d6b029 | 42 | myled = !myled;thread_sleep_for(1000);myled = !myled; |
| elelthvd | 0:832808d6b029 | 43 | |
| elelthvd | 0:832808d6b029 | 44 | while (1) { |
| elelthvd | 0:832808d6b029 | 45 | f_dacvalue = 10.0*(step/10.0)-5.0; // Walk -5..5V in 10 steps. |
| elelthvd | 0:832808d6b029 | 46 | dacvalue = static_cast<uint16_t>( 4095 * ((f_dacvalue+5)/10.0) );// 12-bit over range 0.0-2.5 volts |
| elelthvd | 0:832808d6b029 | 47 | |
| elelthvd | 0:832808d6b029 | 48 | pixi_result = mikroe_pixi_click.single_ended_dac_write(MAX11300::PORT1, dacvalue); |
| elelthvd | 0:832808d6b029 | 49 | if(pixi_result != MAX11300::Success) |
| elelthvd | 0:832808d6b029 | 50 | printf("Failure in single_ended_dac_write\r\n"); |
| elelthvd | 0:832808d6b029 | 51 | |
| elelthvd | 0:832808d6b029 | 52 | thread_sleep_for(1*1); |
| elelthvd | 0:832808d6b029 | 53 | |
| elelthvd | 0:832808d6b029 | 54 | mikroe_pixi_click.single_ended_adc_read(MAX11300::PORT0, (uint16_t &) adcvalue); |
| elelthvd | 0:832808d6b029 | 55 | if(pixi_result != MAX11300::Success) |
| elelthvd | 0:832808d6b029 | 56 | printf("Failure in single_ended_adc_read\r\n"); |
| elelthvd | 0:832808d6b029 | 57 | |
| elelthvd | 0:832808d6b029 | 58 | f_adcvalue = (adcvalue * 10.0) / 4095 - 5.0; // ADC voltage range -5...5V |
| elelthvd | 0:832808d6b029 | 59 | f_dacvalue = (dacvalue * 10.0) / 4095 - 5.0; |
| elelthvd | 0:832808d6b029 | 60 | |
| elelthvd | 0:832808d6b029 | 61 | printf("%d: dac:%04X (%+f), adc:%04X (%+f), err:(%+f)\r\n", step, dacvalue, f_dacvalue, adcvalue, f_adcvalue, f_adcvalue-f_dacvalue); |
| elelthvd | 0:832808d6b029 | 62 | |
| elelthvd | 0:832808d6b029 | 63 | myled = !myled; // Does not work because SPI classes are loaded?? |
| elelthvd | 0:832808d6b029 | 64 | thread_sleep_for(1*1); |
| elelthvd | 0:832808d6b029 | 65 | |
| elelthvd | 0:832808d6b029 | 66 | step++; |
| elelthvd | 0:832808d6b029 | 67 | if (step >= 10) step = 0; |
| elelthvd | 0:832808d6b029 | 68 | } |
| elelthvd | 0:832808d6b029 | 69 | } |
| elelthvd | 0:832808d6b029 | 70 |