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

Files at this revision

API Documentation at this revision

Comitter:
laserdad
Date:
Fri Jan 05 22:37:07 2018 +0000
Parent:
4:c194858fe0c6
Commit message:
working version;

Changed in this revision

MAX11410.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r c194858fe0c6 -r d7b803aa9079 MAX11410.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX11410.lib	Fri Jan 05 22:37:07 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/laserdad/code/MAX11410/#4784f0a3b76d
diff -r c194858fe0c6 -r d7b803aa9079 main.cpp
--- a/main.cpp	Fri Nov 18 20:25:57 2016 +0000
+++ b/main.cpp	Fri Jan 05 22:37:07 2018 +0000
@@ -10,26 +10,158 @@
 //  - Note: if you plug / unplug devices try cycling power
 
 #include "mbed.h"
-
-I2C i2c(I2C_SDA, I2C_SCL); // sda, scl
-Ticker repeatTicker;
+#include "MAX11410.h"
 
-void repeat()
+#define CS1 D9
+#define CS2 D10
+#define MOSI_1 D11
+#define MISO_1 D12
+#define SCLK_1 D13
+#define VDD 3.3
+AnalogOut vOut1(A3);
+AnalogOut vOut2(A4);
+DigitalOut cs_pin1(CS1);
+DigitalOut cs_pin2(CS2);
+SPI spi(MOSI_1, MISO_1, SCLK_1);
+MAX11410 adc1(&spi,&cs_pin1);
+MAX11410 adc2(&spi,&cs_pin2);
+//Serial pc(USBTX, USBRX,115200);
+Serial pc(USBTX, USBRX, 9600);
+
+void starting()
 {
-    printf("I2CU! Searching for I2C devices...\n");
+    pc.printf("this program has started\r\n");
+}
+
 
-    int count = 0;
-    for (int address=0; address<256; address+=2) {
-        bool temp = i2c.write(address, NULL, 0); // 0 if successful, otherwise non-zero
-        if (!temp && (address >> 1) != 0) { // not interested in address 0
-            printf(" - I2C device found at address 0x%02X (7 bit - Arduino) or 0x%02X (8 bit - mbed)\n", address >> 1, address);
-            count++;
-        }
+
+
+
+void print8bitRegsAdc1(char start_reg,char end_reg)
+{
+    bool int_status;
+    char val;
+    for(int n=start_reg;n<=end_reg;n++)
+    {
+        val = adc1.read8bits(n,&int_status);
+        pc.printf("reg %02x, val =%02x\r\n",n,val);
     }
-    printf("%d device(s) found\n", count);
+    
+}
+
+void print8bitRegsAdc2(char start_reg,char end_reg)
+{
+    bool int_status;
+    char val;
+    for(int n=start_reg;n<=end_reg;n++)
+    {
+        val = adc2.read8bits(n,&int_status);
+        pc.printf("reg %02x, val =%02x\r\n",n,val);
+    }
 }
 
-int main()
+int main() 
 {
-    repeatTicker.attach(&repeat, 2.0);
-}
\ No newline at end of file
+    int32_t channel_data[10];
+    float vdiff=0.01;
+    vOut1 = 0.5-vdiff/2;
+    vOut2 = 0.5+vdiff/2;
+    starting();
+    bool int_state;
+    spi.format(8,MAX11410_SPI_MODE); //configure number of spi bits 8, 16
+    spi.frequency(8000000); // Max 8MHz
+    //read chip ID
+    
+    pc.printf("chip ID %d\r\n",adc1.read8bits(REG_PART_ID,&int_state) );
+    
+    //config ADC 1
+    adc1.reset(); //POR
+//    adc2.reset();
+        
+    //check default register configs
+    pc.printf("default regs for ADC1\r\n");
+    print8bitRegsAdc1(REG_PD,REG_WAIT_START);
+    
+    pc.printf("default regs for ADC2\r\n");
+    print8bitRegsAdc2(REG_PD,REG_WAIT_START);
+    
+    
+    //config interrupts, PGA, Buffer, polarity, reference    
+    char mode_config = MODE_NORMAL;
+    adc1.write8bitReg(REG_PD,mode_config);      //got to normal mode
+    adc2.write8bitReg(REG_PD,mode_config);      //got to normal mode
+    
+    char filter_config = FIR_SIXTY | _RATE(4) ; //
+    adc1.write8bitReg( REG_FILTER,filter_config );
+    adc2.write8bitReg( REG_FILTER,filter_config );
+ 
+    char ctrl_config = INT_CLOCK | BIPOLAR | TWOS_COMP | _PBUF_EN(0) | _NBUF_EN(0) | REF_AVDD ; //ADC configuration
+    adc1.write8bitReg( REG_CTRL, ctrl_config );
+    adc2.write8bitReg( REG_CTRL, ctrl_config );
+    
+    char source_config = VBIAS_ACTIVE | BRN_OFF | _IDAC(0); //not sourcing current
+    adc1.write8bitReg( REG_SOURCE,source_config );
+    adc2.write8bitReg( REG_SOURCE,source_config );
+
+    uint32_t status_ie_config = DATA_RDY_INT | CAL_RDY_INT | CONV_RDY_INT;   
+    adc1.write24bitReg(REG_STATUS_IE,status_ie_config); 
+    adc2.write8bitReg( REG_SOURCE,source_config );
+    
+    char gain_setting = 0;
+    char pga_config = PGA | _GAIN_EXP(gain_setting) ; //no gain
+    adc1.write8bitReg(REG_PGA,pga_config);
+    adc2.write8bitReg(REG_PGA,pga_config);
+
+    pc.printf("PGA gain = %d\r\n",1<<gain_setting);
+    
+    //check register writes
+    pc.printf("checking register writes\r\n");
+    pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PD,adc1.read8bits(REG_PD,&int_state),mode_config);
+    pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_FILTER,adc1.read8bits(REG_FILTER,&int_state),filter_config);     
+    pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_CTRL,adc1.read8bits(REG_CTRL,&int_state),ctrl_config);
+    pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_SOURCE,adc1.read8bits(REG_SOURCE,&int_state),source_config);
+    pc.printf("reg %02x, val %06x, set to %06x\r\n",REG_STATUS_IE,adc1.read24bits(REG_STATUS_IE,&int_state),status_ie_config);     
+    pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PGA,adc1.read8bits(REG_PGA,&int_state),pga_config);    
+    
+        // for each channel 1-5
+        for(int n=0;n<5;n++)
+        {
+            //select channel
+            char p_ch = 2*n<<4;
+            char n_ch = 2*n+1;
+            adc1.write8bitReg(REG_MUX_CTRL0, p_ch | n_ch );
+            
+            //select data output register and begin conversion
+            adc1.write8bitReg(REG_CONV_START, (_DEST(n) | SINGLE_CONV) );
+            
+            //optional: cal Gain
+            
+            //optional: cal Offset
+            
+            //optional: store cal parameters
+            
+            //begin conversion
+            
+            //wait for interrupt
+            while(!adc1.interrupt() )
+            {
+                wait_ms(CONV_DELAY_MS);//do nothing
+            }
+            
+            //read conversion
+           channel_data[n] = adc1.read24bitsSigned(REG_DATA0+n,&int_state);
+           pc.printf("%d, ",channel_data[n]);    
+        } //channel sweep
+        pc.printf("\r\n");
+
+    
+    //config ADC 2: repeat above
+    
+    
+    
+//    while(1) 
+//    {
+//       
+//    }
+
+} //END MAIN