test program to power up two MAX11410 ADCs and check the inputs of ADC1. Uses MAX11410 library.

Dependencies:   MAX11410 mbed

Fork of I2C_scanner by Medic

Committer:
laserdad
Date:
Fri Jan 05 22:37:07 2018 +0000
Revision:
5:d7b803aa9079
Parent:
4:c194858fe0c6
working version;

Who changed what in which revision?

UserRevisionLine numberNew 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