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.
Fork of MAX11410-test by
main.cpp@5:d7b803aa9079, 2018-01-05 (annotated)
- Committer:
- laserdad
- Date:
- Fri Jan 05 22:37:07 2018 +0000
- Revision:
- 5:d7b803aa9079
- Parent:
- 4:c194858fe0c6
- Child:
- 6:c3db4eff9170
working version;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| simon | 0:4f78cdfc99de | 1 | // I2CU - Search for devices on an I2C bus |
| simon | 0:4f78cdfc99de | 2 | // Copyright (c) 2009, sford |
| simon | 0:4f78cdfc99de | 3 | // Released under the MIT License: http://mbed.org/license/mit |
| simon | 0:4f78cdfc99de | 4 | // |
| simon | 0:4f78cdfc99de | 5 | // Goes through each device address, seeing if it gets a response |
| simon | 0:4f78cdfc99de | 6 | // - for every device if finds, it prints the 8-bit address |
| simon | 0:4f78cdfc99de | 7 | // - if the program hangs, the bus isn't working (check pull-ups etc) |
| simon | 0:4f78cdfc99de | 8 | // - if it doesn't find your device, check power/bus wiring etc |
| smartsystemdesign | 3:42120705a9bd | 9 | // |
| smartsystemdesign | 3:42120705a9bd | 10 | // - Note: if you plug / unplug devices try cycling power |
| smartsystemdesign | 2:39ba9beabf3c | 11 | |
| simon | 0:4f78cdfc99de | 12 | #include "mbed.h" |
| laserdad | 5:d7b803aa9079 | 13 | #include "MAX11410.h" |
| simon | 0:4f78cdfc99de | 14 | |
| laserdad | 5:d7b803aa9079 | 15 | #define CS1 D9 |
| laserdad | 5:d7b803aa9079 | 16 | #define CS2 D10 |
| laserdad | 5:d7b803aa9079 | 17 | #define MOSI_1 D11 |
| laserdad | 5:d7b803aa9079 | 18 | #define MISO_1 D12 |
| laserdad | 5:d7b803aa9079 | 19 | #define SCLK_1 D13 |
| laserdad | 5:d7b803aa9079 | 20 | #define VDD 3.3 |
| laserdad | 5:d7b803aa9079 | 21 | AnalogOut vOut1(A3); |
| laserdad | 5:d7b803aa9079 | 22 | AnalogOut vOut2(A4); |
| laserdad | 5:d7b803aa9079 | 23 | DigitalOut cs_pin1(CS1); |
| laserdad | 5:d7b803aa9079 | 24 | DigitalOut cs_pin2(CS2); |
| laserdad | 5:d7b803aa9079 | 25 | SPI spi(MOSI_1, MISO_1, SCLK_1); |
| laserdad | 5:d7b803aa9079 | 26 | MAX11410 adc1(&spi,&cs_pin1); |
| laserdad | 5:d7b803aa9079 | 27 | MAX11410 adc2(&spi,&cs_pin2); |
| laserdad | 5:d7b803aa9079 | 28 | //Serial pc(USBTX, USBRX,115200); |
| laserdad | 5:d7b803aa9079 | 29 | Serial pc(USBTX, USBRX, 9600); |
| laserdad | 5:d7b803aa9079 | 30 | |
| laserdad | 5:d7b803aa9079 | 31 | void starting() |
| smartsystemdesign | 2:39ba9beabf3c | 32 | { |
| laserdad | 5:d7b803aa9079 | 33 | pc.printf("this program has started\r\n"); |
| laserdad | 5:d7b803aa9079 | 34 | } |
| laserdad | 5:d7b803aa9079 | 35 | |
| simon | 0:4f78cdfc99de | 36 | |
| laserdad | 5:d7b803aa9079 | 37 | |
| laserdad | 5:d7b803aa9079 | 38 | |
| laserdad | 5:d7b803aa9079 | 39 | |
| laserdad | 5:d7b803aa9079 | 40 | void print8bitRegsAdc1(char start_reg,char end_reg) |
| laserdad | 5:d7b803aa9079 | 41 | { |
| laserdad | 5:d7b803aa9079 | 42 | bool int_status; |
| laserdad | 5:d7b803aa9079 | 43 | char val; |
| laserdad | 5:d7b803aa9079 | 44 | for(int n=start_reg;n<=end_reg;n++) |
| laserdad | 5:d7b803aa9079 | 45 | { |
| laserdad | 5:d7b803aa9079 | 46 | val = adc1.read8bits(n,&int_status); |
| laserdad | 5:d7b803aa9079 | 47 | pc.printf("reg %02x, val =%02x\r\n",n,val); |
| simon | 0:4f78cdfc99de | 48 | } |
| laserdad | 5:d7b803aa9079 | 49 | |
| laserdad | 5:d7b803aa9079 | 50 | } |
| laserdad | 5:d7b803aa9079 | 51 | |
| laserdad | 5:d7b803aa9079 | 52 | void print8bitRegsAdc2(char start_reg,char end_reg) |
| laserdad | 5:d7b803aa9079 | 53 | { |
| laserdad | 5:d7b803aa9079 | 54 | bool int_status; |
| laserdad | 5:d7b803aa9079 | 55 | char val; |
| laserdad | 5:d7b803aa9079 | 56 | for(int n=start_reg;n<=end_reg;n++) |
| laserdad | 5:d7b803aa9079 | 57 | { |
| laserdad | 5:d7b803aa9079 | 58 | val = adc2.read8bits(n,&int_status); |
| laserdad | 5:d7b803aa9079 | 59 | pc.printf("reg %02x, val =%02x\r\n",n,val); |
| laserdad | 5:d7b803aa9079 | 60 | } |
| simon | 0:4f78cdfc99de | 61 | } |
| smartsystemdesign | 2:39ba9beabf3c | 62 | |
| laserdad | 5:d7b803aa9079 | 63 | int main() |
| smartsystemdesign | 2:39ba9beabf3c | 64 | { |
| laserdad | 5:d7b803aa9079 | 65 | int32_t channel_data[10]; |
| laserdad | 5:d7b803aa9079 | 66 | float vdiff=0.01; |
| laserdad | 5:d7b803aa9079 | 67 | vOut1 = 0.5-vdiff/2; |
| laserdad | 5:d7b803aa9079 | 68 | vOut2 = 0.5+vdiff/2; |
| laserdad | 5:d7b803aa9079 | 69 | starting(); |
| laserdad | 5:d7b803aa9079 | 70 | bool int_state; |
| laserdad | 5:d7b803aa9079 | 71 | spi.format(8,MAX11410_SPI_MODE); //configure number of spi bits 8, 16 |
| laserdad | 5:d7b803aa9079 | 72 | spi.frequency(8000000); // Max 8MHz |
| laserdad | 5:d7b803aa9079 | 73 | //read chip ID |
| laserdad | 5:d7b803aa9079 | 74 | |
| laserdad | 5:d7b803aa9079 | 75 | pc.printf("chip ID %d\r\n",adc1.read8bits(REG_PART_ID,&int_state) ); |
| laserdad | 5:d7b803aa9079 | 76 | |
| laserdad | 5:d7b803aa9079 | 77 | //config ADC 1 |
| laserdad | 5:d7b803aa9079 | 78 | adc1.reset(); //POR |
| laserdad | 5:d7b803aa9079 | 79 | // adc2.reset(); |
| laserdad | 5:d7b803aa9079 | 80 | |
| laserdad | 5:d7b803aa9079 | 81 | //check default register configs |
| laserdad | 5:d7b803aa9079 | 82 | pc.printf("default regs for ADC1\r\n"); |
| laserdad | 5:d7b803aa9079 | 83 | print8bitRegsAdc1(REG_PD,REG_WAIT_START); |
| laserdad | 5:d7b803aa9079 | 84 | |
| laserdad | 5:d7b803aa9079 | 85 | pc.printf("default regs for ADC2\r\n"); |
| laserdad | 5:d7b803aa9079 | 86 | print8bitRegsAdc2(REG_PD,REG_WAIT_START); |
| laserdad | 5:d7b803aa9079 | 87 | |
| laserdad | 5:d7b803aa9079 | 88 | |
| laserdad | 5:d7b803aa9079 | 89 | //config interrupts, PGA, Buffer, polarity, reference |
| laserdad | 5:d7b803aa9079 | 90 | char mode_config = MODE_NORMAL; |
| laserdad | 5:d7b803aa9079 | 91 | adc1.write8bitReg(REG_PD,mode_config); //got to normal mode |
| laserdad | 5:d7b803aa9079 | 92 | adc2.write8bitReg(REG_PD,mode_config); //got to normal mode |
| laserdad | 5:d7b803aa9079 | 93 | |
| laserdad | 5:d7b803aa9079 | 94 | char filter_config = FIR_SIXTY | _RATE(4) ; // |
| laserdad | 5:d7b803aa9079 | 95 | adc1.write8bitReg( REG_FILTER,filter_config ); |
| laserdad | 5:d7b803aa9079 | 96 | adc2.write8bitReg( REG_FILTER,filter_config ); |
| laserdad | 5:d7b803aa9079 | 97 | |
| laserdad | 5:d7b803aa9079 | 98 | char ctrl_config = INT_CLOCK | BIPOLAR | TWOS_COMP | _PBUF_EN(0) | _NBUF_EN(0) | REF_AVDD ; //ADC configuration |
| laserdad | 5:d7b803aa9079 | 99 | adc1.write8bitReg( REG_CTRL, ctrl_config ); |
| laserdad | 5:d7b803aa9079 | 100 | adc2.write8bitReg( REG_CTRL, ctrl_config ); |
| laserdad | 5:d7b803aa9079 | 101 | |
| laserdad | 5:d7b803aa9079 | 102 | char source_config = VBIAS_ACTIVE | BRN_OFF | _IDAC(0); //not sourcing current |
| laserdad | 5:d7b803aa9079 | 103 | adc1.write8bitReg( REG_SOURCE,source_config ); |
| laserdad | 5:d7b803aa9079 | 104 | adc2.write8bitReg( REG_SOURCE,source_config ); |
| laserdad | 5:d7b803aa9079 | 105 | |
| laserdad | 5:d7b803aa9079 | 106 | uint32_t status_ie_config = DATA_RDY_INT | CAL_RDY_INT | CONV_RDY_INT; |
| laserdad | 5:d7b803aa9079 | 107 | adc1.write24bitReg(REG_STATUS_IE,status_ie_config); |
| laserdad | 5:d7b803aa9079 | 108 | adc2.write8bitReg( REG_SOURCE,source_config ); |
| laserdad | 5:d7b803aa9079 | 109 | |
| laserdad | 5:d7b803aa9079 | 110 | char gain_setting = 0; |
| laserdad | 5:d7b803aa9079 | 111 | char pga_config = PGA | _GAIN_EXP(gain_setting) ; //no gain |
| laserdad | 5:d7b803aa9079 | 112 | adc1.write8bitReg(REG_PGA,pga_config); |
| laserdad | 5:d7b803aa9079 | 113 | adc2.write8bitReg(REG_PGA,pga_config); |
| laserdad | 5:d7b803aa9079 | 114 | |
| laserdad | 5:d7b803aa9079 | 115 | pc.printf("PGA gain = %d\r\n",1<<gain_setting); |
| laserdad | 5:d7b803aa9079 | 116 | |
| laserdad | 5:d7b803aa9079 | 117 | //check register writes |
| laserdad | 5:d7b803aa9079 | 118 | pc.printf("checking register writes\r\n"); |
| laserdad | 5:d7b803aa9079 | 119 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PD,adc1.read8bits(REG_PD,&int_state),mode_config); |
| laserdad | 5:d7b803aa9079 | 120 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_FILTER,adc1.read8bits(REG_FILTER,&int_state),filter_config); |
| laserdad | 5:d7b803aa9079 | 121 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_CTRL,adc1.read8bits(REG_CTRL,&int_state),ctrl_config); |
| laserdad | 5:d7b803aa9079 | 122 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_SOURCE,adc1.read8bits(REG_SOURCE,&int_state),source_config); |
| laserdad | 5:d7b803aa9079 | 123 | pc.printf("reg %02x, val %06x, set to %06x\r\n",REG_STATUS_IE,adc1.read24bits(REG_STATUS_IE,&int_state),status_ie_config); |
| laserdad | 5:d7b803aa9079 | 124 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PGA,adc1.read8bits(REG_PGA,&int_state),pga_config); |
| laserdad | 5:d7b803aa9079 | 125 | |
| laserdad | 5:d7b803aa9079 | 126 | // for each channel 1-5 |
| laserdad | 5:d7b803aa9079 | 127 | for(int n=0;n<5;n++) |
| laserdad | 5:d7b803aa9079 | 128 | { |
| laserdad | 5:d7b803aa9079 | 129 | //select channel |
| laserdad | 5:d7b803aa9079 | 130 | char p_ch = 2*n<<4; |
| laserdad | 5:d7b803aa9079 | 131 | char n_ch = 2*n+1; |
| laserdad | 5:d7b803aa9079 | 132 | adc1.write8bitReg(REG_MUX_CTRL0, p_ch | n_ch ); |
| laserdad | 5:d7b803aa9079 | 133 | |
| laserdad | 5:d7b803aa9079 | 134 | //select data output register and begin conversion |
| laserdad | 5:d7b803aa9079 | 135 | adc1.write8bitReg(REG_CONV_START, (_DEST(n) | SINGLE_CONV) ); |
| laserdad | 5:d7b803aa9079 | 136 | |
| laserdad | 5:d7b803aa9079 | 137 | //optional: cal Gain |
| laserdad | 5:d7b803aa9079 | 138 | |
| laserdad | 5:d7b803aa9079 | 139 | //optional: cal Offset |
| laserdad | 5:d7b803aa9079 | 140 | |
| laserdad | 5:d7b803aa9079 | 141 | //optional: store cal parameters |
| laserdad | 5:d7b803aa9079 | 142 | |
| laserdad | 5:d7b803aa9079 | 143 | //begin conversion |
| laserdad | 5:d7b803aa9079 | 144 | |
| laserdad | 5:d7b803aa9079 | 145 | //wait for interrupt |
| laserdad | 5:d7b803aa9079 | 146 | while(!adc1.interrupt() ) |
| laserdad | 5:d7b803aa9079 | 147 | { |
| laserdad | 5:d7b803aa9079 | 148 | wait_ms(CONV_DELAY_MS);//do nothing |
| laserdad | 5:d7b803aa9079 | 149 | } |
| laserdad | 5:d7b803aa9079 | 150 | |
| laserdad | 5:d7b803aa9079 | 151 | //read conversion |
| laserdad | 5:d7b803aa9079 | 152 | channel_data[n] = adc1.read24bitsSigned(REG_DATA0+n,&int_state); |
| laserdad | 5:d7b803aa9079 | 153 | pc.printf("%d, ",channel_data[n]); |
| laserdad | 5:d7b803aa9079 | 154 | } //channel sweep |
| laserdad | 5:d7b803aa9079 | 155 | pc.printf("\r\n"); |
| laserdad | 5:d7b803aa9079 | 156 | |
| laserdad | 5:d7b803aa9079 | 157 | |
| laserdad | 5:d7b803aa9079 | 158 | //config ADC 2: repeat above |
| laserdad | 5:d7b803aa9079 | 159 | |
| laserdad | 5:d7b803aa9079 | 160 | |
| laserdad | 5:d7b803aa9079 | 161 | |
| laserdad | 5:d7b803aa9079 | 162 | // while(1) |
| laserdad | 5:d7b803aa9079 | 163 | // { |
| laserdad | 5:d7b803aa9079 | 164 | // |
| laserdad | 5:d7b803aa9079 | 165 | // } |
| laserdad | 5:d7b803aa9079 | 166 | |
| laserdad | 5:d7b803aa9079 | 167 | } //END MAIN |
