MAX11410 high speed 24-bit Delta-Sigma ADC

Dependents:   MAX11410BOB_24bit_ADC MAX11410BOB_Serial_Tester

Committer:
whismanoid
Date:
Fri Dec 20 23:46:49 2019 +0000
Revision:
2:eac67184cc0c
Parent:
1:d57c1a2cb83c
Child:
3:658a93dfb2d8
udpate docs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whismanoid 0:68e64068330f 1 // /*******************************************************************************
whismanoid 0:68e64068330f 2 // * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
whismanoid 0:68e64068330f 3 // *
whismanoid 0:68e64068330f 4 // * Permission is hereby granted, free of charge, to any person obtaining a
whismanoid 0:68e64068330f 5 // * copy of this software and associated documentation files (the "Software"),
whismanoid 0:68e64068330f 6 // * to deal in the Software without restriction, including without limitation
whismanoid 0:68e64068330f 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
whismanoid 0:68e64068330f 8 // * and/or sell copies of the Software, and to permit persons to whom the
whismanoid 0:68e64068330f 9 // * Software is furnished to do so, subject to the following conditions:
whismanoid 0:68e64068330f 10 // *
whismanoid 0:68e64068330f 11 // * The above copyright notice and this permission notice shall be included
whismanoid 0:68e64068330f 12 // * in all copies or substantial portions of the Software.
whismanoid 0:68e64068330f 13 // *
whismanoid 0:68e64068330f 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
whismanoid 0:68e64068330f 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
whismanoid 0:68e64068330f 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
whismanoid 0:68e64068330f 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
whismanoid 0:68e64068330f 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
whismanoid 0:68e64068330f 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
whismanoid 0:68e64068330f 20 // * OTHER DEALINGS IN THE SOFTWARE.
whismanoid 0:68e64068330f 21 // *
whismanoid 0:68e64068330f 22 // * Except as contained in this notice, the name of Maxim Integrated
whismanoid 0:68e64068330f 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
whismanoid 0:68e64068330f 24 // * Products, Inc. Branding Policy.
whismanoid 0:68e64068330f 25 // *
whismanoid 0:68e64068330f 26 // * The mere transfer of this software does not imply any licenses
whismanoid 0:68e64068330f 27 // * of trade secrets, proprietary technology, copyrights, patents,
whismanoid 0:68e64068330f 28 // * trademarks, maskwork rights, or any other form of intellectual
whismanoid 0:68e64068330f 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
whismanoid 0:68e64068330f 30 // * ownership rights.
whismanoid 0:68e64068330f 31 // *******************************************************************************
whismanoid 0:68e64068330f 32 // */
whismanoid 0:68e64068330f 33 // *********************************************************************
whismanoid 0:68e64068330f 34 // @file MAX11410.cpp
whismanoid 0:68e64068330f 35 // *********************************************************************
whismanoid 0:68e64068330f 36 // Device Driver file
whismanoid 0:68e64068330f 37 // DO NOT EDIT; except areas designated "CUSTOMIZE". Automatically generated file.
whismanoid 0:68e64068330f 38 // generated by XMLSystemOfDevicesToMBED.py
whismanoid 0:68e64068330f 39 // System Name = ExampleSystem
whismanoid 0:68e64068330f 40 // System Description = Device driver example
whismanoid 0:68e64068330f 41
whismanoid 0:68e64068330f 42 #include "MAX11410.h"
whismanoid 0:68e64068330f 43
whismanoid 0:68e64068330f 44 // Device Name = MAX11410
whismanoid 0:68e64068330f 45 // Device Description = 1.9ksps, Low-Power, Serial SPI 24-Bit, 10-Channel, Differential/Single-Ended Input, SAR ADC
whismanoid 0:68e64068330f 46 // Device DeviceBriefDescription = 24-bit 1.9ksps Delta-Sigma ADC
whismanoid 0:68e64068330f 47 // Device Manufacturer = Maxim Integrated
whismanoid 0:68e64068330f 48 // Device PartNumber = MAX11410ATI+
whismanoid 0:68e64068330f 49 // Device RegValue_Width = DataWidth16bit_HL
whismanoid 0:68e64068330f 50 //
whismanoid 0:68e64068330f 51 // ADC MaxOutputDataRate = 1.9ksps
whismanoid 0:68e64068330f 52 // ADC NumChannels = 10
whismanoid 0:68e64068330f 53 // ADC ResolutionBits = 24
whismanoid 0:68e64068330f 54 //
whismanoid 0:68e64068330f 55 // SPI CS = ActiveLow
whismanoid 0:68e64068330f 56 // SPI FrameStart = CS
whismanoid 0:68e64068330f 57 // SPI CPOL = 0
whismanoid 0:68e64068330f 58 // SPI CPHA = 0
whismanoid 0:68e64068330f 59 // SPI MOSI and MISO Data are both stable on Rising edge of SCLK
whismanoid 0:68e64068330f 60 // SPI SCLK Idle Low
whismanoid 0:68e64068330f 61 // SPI SCLKMaxMHz = 8
whismanoid 0:68e64068330f 62 // SPI SCLKMinMHz = 0
whismanoid 0:68e64068330f 63 //
whismanoid 0:68e64068330f 64
whismanoid 0:68e64068330f 65 // CODE GENERATOR: class constructor definition
whismanoid 0:68e64068330f 66 MAX11410::MAX11410(SPI &spi, DigitalOut &cs_pin, // SPI interface
whismanoid 0:68e64068330f 67 // CODE GENERATOR: class constructor definition gpio InputPin pins
whismanoid 0:68e64068330f 68 // CODE GENERATOR: class constructor definition gpio OutputPin pins
whismanoid 0:68e64068330f 69 // CODE GENERATOR: class constructor definition ic_variant
whismanoid 0:68e64068330f 70 MAX11410_ic_t ic_variant)
whismanoid 0:68e64068330f 71 // CODE GENERATOR: class constructor initializer list
whismanoid 0:68e64068330f 72 : m_spi(spi), m_cs_pin(cs_pin), // SPI interface
whismanoid 0:68e64068330f 73 // CODE GENERATOR: class constructor initializer list gpio InputPin pins
whismanoid 0:68e64068330f 74 // CODE GENERATOR: class constructor initializer list gpio OutputPin pins
whismanoid 0:68e64068330f 75 // CODE GENERATOR: class constructor initializer list ic_variant
whismanoid 0:68e64068330f 76 m_ic_variant(ic_variant)
whismanoid 0:68e64068330f 77 {
whismanoid 0:68e64068330f 78 // CODE GENERATOR: class constructor definition SPI interface initialization
whismanoid 0:68e64068330f 79 //
whismanoid 0:68e64068330f 80 // SPI CS = ActiveLow
whismanoid 0:68e64068330f 81 // SPI FrameStart = CS
whismanoid 0:68e64068330f 82 m_SPI_cs_state = 1;
whismanoid 0:68e64068330f 83 m_cs_pin = m_SPI_cs_state;
whismanoid 0:68e64068330f 84
whismanoid 0:68e64068330f 85 // SPI CPOL = 0
whismanoid 0:68e64068330f 86 // SPI CPHA = 0
whismanoid 0:68e64068330f 87 // SPI MOSI and MISO Data are both stable on Rising edge of SCLK
whismanoid 0:68e64068330f 88 // SPI SCLK Idle Low
whismanoid 0:68e64068330f 89 m_SPI_dataMode = 0; //SPI_MODE0; // CPOL=0,CPHA=0: Rising Edge stable; SCLK idle Low
whismanoid 0:68e64068330f 90 m_spi.format(8,m_SPI_dataMode); // int bits_must_be_8, int mode=0_3 CPOL=0,CPHA=0
whismanoid 0:68e64068330f 91
whismanoid 0:68e64068330f 92 // SPI SCLKMaxMHz = 8
whismanoid 0:68e64068330f 93 // SPI SCLKMinMHz = 0
whismanoid 0:68e64068330f 94 //#define SPI_SCLK_Hz 48000000 // 48MHz
whismanoid 0:68e64068330f 95 //#define SPI_SCLK_Hz 24000000 // 24MHz
whismanoid 0:68e64068330f 96 //#define SPI_SCLK_Hz 12000000 // 12MHz
whismanoid 0:68e64068330f 97 //#define SPI_SCLK_Hz 6000000 // 6MHz
whismanoid 0:68e64068330f 98 //#define SPI_SCLK_Hz 4000000 // 4MHz
whismanoid 0:68e64068330f 99 //#define SPI_SCLK_Hz 2000000 // 2MHz
whismanoid 0:68e64068330f 100 //#define SPI_SCLK_Hz 1000000 // 1MHz
whismanoid 0:68e64068330f 101 m_SPI_SCLK_Hz = 8000000; // 8MHz; MAX11410 limit is 8MHz
whismanoid 0:68e64068330f 102 m_spi.frequency(m_SPI_SCLK_Hz);
whismanoid 0:68e64068330f 103
whismanoid 0:68e64068330f 104 }
whismanoid 0:68e64068330f 105
whismanoid 0:68e64068330f 106 // CODE GENERATOR: class destructor definition
whismanoid 0:68e64068330f 107 MAX11410::~MAX11410()
whismanoid 0:68e64068330f 108 {
whismanoid 0:68e64068330f 109 // do nothing
whismanoid 0:68e64068330f 110 }
whismanoid 0:68e64068330f 111
whismanoid 0:68e64068330f 112 // CODE GENERATOR: spi_frequency setter definition
whismanoid 0:68e64068330f 113 /// set SPI SCLK frequency
whismanoid 0:68e64068330f 114 void MAX11410::spi_frequency(int spi_sclk_Hz)
whismanoid 0:68e64068330f 115 {
whismanoid 0:68e64068330f 116 m_SPI_SCLK_Hz = spi_sclk_Hz;
whismanoid 0:68e64068330f 117 m_spi.frequency(m_SPI_SCLK_Hz);
whismanoid 0:68e64068330f 118 }
whismanoid 0:68e64068330f 119
whismanoid 0:68e64068330f 120 // CODE GENERATOR: omit global g_MAX11410_device
whismanoid 0:68e64068330f 121 // CODE GENERATOR: extern function declarations
whismanoid 0:68e64068330f 122 // CODE GENERATOR: extern function requirement MAX11410::SPIoutputCS
whismanoid 0:68e64068330f 123 // Assert SPI Chip Select
whismanoid 0:68e64068330f 124 // SPI chip-select for MAX11410
whismanoid 0:68e64068330f 125 //
whismanoid 0:68e64068330f 126 void MAX11410::SPIoutputCS(int isLogicHigh)
whismanoid 0:68e64068330f 127 {
whismanoid 0:68e64068330f 128 // CODE GENERATOR: extern function definition for function SPIoutputCS
whismanoid 0:68e64068330f 129 // CODE GENERATOR: extern function definition for standard SPI interface function SPIoutputCS(int isLogicHigh)
whismanoid 0:68e64068330f 130 m_SPI_cs_state = isLogicHigh;
whismanoid 0:68e64068330f 131 m_cs_pin = m_SPI_cs_state;
whismanoid 0:68e64068330f 132 }
whismanoid 0:68e64068330f 133
whismanoid 0:68e64068330f 134 // CODE GENERATOR: extern function requirement MAX11410::SPIwrite16bits
whismanoid 0:68e64068330f 135 // SPI write 16 bits
whismanoid 0:68e64068330f 136 // SPI interface to MAX11410 shift 16 bits mosiData into MAX11410 DIN
whismanoid 0:68e64068330f 137 //
whismanoid 0:68e64068330f 138 void MAX11410::SPIwrite16bits(int16_t mosiData16)
whismanoid 0:68e64068330f 139 {
whismanoid 0:68e64068330f 140 // CODE GENERATOR: extern function definition for function SPIwrite16bits
whismanoid 0:68e64068330f 141 // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite16bits(int16_t mosiData16)
whismanoid 0:68e64068330f 142 size_t byteCount = 2;
whismanoid 0:68e64068330f 143 static char mosiData[2];
whismanoid 0:68e64068330f 144 static char misoData[2];
whismanoid 0:68e64068330f 145 mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
whismanoid 0:68e64068330f 146 mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
whismanoid 0:68e64068330f 147 //
whismanoid 0:68e64068330f 148 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 149 //~ noInterrupts();
whismanoid 0:68e64068330f 150 //
whismanoid 0:68e64068330f 151 //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 152 //
whismanoid 0:68e64068330f 153 unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
whismanoid 0:68e64068330f 154 //~ m_spi.transfer(mosiData8_FF0000);
whismanoid 0:68e64068330f 155 //~ m_spi.transfer(mosiData16_00FF00);
whismanoid 0:68e64068330f 156 //~ m_spi.transfer(mosiData16_0000FF);
whismanoid 0:68e64068330f 157 //
whismanoid 0:68e64068330f 158 //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 159 //
whismanoid 0:68e64068330f 160 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 161 //~ interrupts();
whismanoid 0:68e64068330f 162 // Optional Diagnostic function to print SPI transactions
whismanoid 0:68e64068330f 163 if (onSPIprint)
whismanoid 0:68e64068330f 164 {
whismanoid 0:68e64068330f 165 onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
whismanoid 0:68e64068330f 166 }
whismanoid 0:68e64068330f 167 //
whismanoid 0:68e64068330f 168 // VERIFY: SPIwrite24bits print diagnostic information
whismanoid 0:68e64068330f 169 //cmdLine.serial().printf(" MOSI->"));
whismanoid 0:68e64068330f 170 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 171 //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
whismanoid 0:68e64068330f 172 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 173 //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
whismanoid 0:68e64068330f 174 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 175 //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
whismanoid 0:68e64068330f 176 // hex dump mosiData[0..byteCount-1]
whismanoid 0:68e64068330f 177 #if 0 // HAS_MICROUSBSERIAL
whismanoid 0:68e64068330f 178 cmdLine_microUSBserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 179 if (byteCount > 7) {
whismanoid 0:68e64068330f 180 cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 181 }
whismanoid 0:68e64068330f 182 cmdLine_microUSBserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 183 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 184 {
whismanoid 0:68e64068330f 185 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 186 }
whismanoid 0:68e64068330f 187 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 188 cmdLine_microUSBserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 189 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 190 {
whismanoid 0:68e64068330f 191 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 192 }
whismanoid 0:68e64068330f 193 cmdLine_microUSBserial.serial().printf(" ");
whismanoid 0:68e64068330f 194 #endif
whismanoid 0:68e64068330f 195 #if 0 // HAS_DAPLINK_SERIAL
whismanoid 0:68e64068330f 196 cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 197 if (byteCount > 7) {
whismanoid 0:68e64068330f 198 cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 199 }
whismanoid 0:68e64068330f 200 cmdLine_DAPLINKserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 201 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 202 {
whismanoid 0:68e64068330f 203 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 204 }
whismanoid 0:68e64068330f 205 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 206 cmdLine_DAPLINKserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 207 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 208 {
whismanoid 0:68e64068330f 209 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 210 }
whismanoid 0:68e64068330f 211 cmdLine_DAPLINKserial.serial().printf(" ");
whismanoid 0:68e64068330f 212 #endif
whismanoid 0:68e64068330f 213 // VERIFY: DIAGNOSTIC: print MAX5715 device register write
whismanoid 0:68e64068330f 214 // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
whismanoid 0:68e64068330f 215 // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
whismanoid 0:68e64068330f 216 //
whismanoid 0:68e64068330f 217 // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
whismanoid 0:68e64068330f 218 // return misoData16;
whismanoid 0:68e64068330f 219 }
whismanoid 0:68e64068330f 220
whismanoid 0:68e64068330f 221 // CODE GENERATOR: extern function requirement MAX11410::SPIreadWrite16bits
whismanoid 0:68e64068330f 222 // SPI read and write 16 bits
whismanoid 0:68e64068330f 223 // SPI interface to MAX11410 shift 16 bits mosiData16 into MAX11410 DIN
whismanoid 0:68e64068330f 224 // while simultaneously capturing 16 bits miso data from MAX11410 DOUT
whismanoid 0:68e64068330f 225 //
whismanoid 0:68e64068330f 226 int16_t MAX11410::SPIreadWrite16bits(int16_t mosiData16)
whismanoid 0:68e64068330f 227 {
whismanoid 0:68e64068330f 228 // CODE GENERATOR: extern function definition for function SPIreadWrite16bits
whismanoid 0:68e64068330f 229 // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite16bits(int16_t mosiData16)
whismanoid 0:68e64068330f 230 size_t byteCount = 2;
whismanoid 0:68e64068330f 231 static char mosiData[2];
whismanoid 0:68e64068330f 232 static char misoData[2];
whismanoid 0:68e64068330f 233 mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
whismanoid 0:68e64068330f 234 mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
whismanoid 0:68e64068330f 235 //
whismanoid 0:68e64068330f 236 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 237 //~ noInterrupts();
whismanoid 0:68e64068330f 238 //
whismanoid 0:68e64068330f 239 //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 240 //
whismanoid 0:68e64068330f 241 unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
whismanoid 0:68e64068330f 242 //~ m_spi.transfer(mosiData8_FF0000);
whismanoid 0:68e64068330f 243 //~ m_spi.transfer(mosiData16_00FF00);
whismanoid 0:68e64068330f 244 //~ m_spi.transfer(mosiData16_0000FF);
whismanoid 0:68e64068330f 245 //
whismanoid 0:68e64068330f 246 //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 247 //
whismanoid 0:68e64068330f 248 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 249 //~ interrupts();
whismanoid 0:68e64068330f 250 // Optional Diagnostic function to print SPI transactions
whismanoid 0:68e64068330f 251 if (onSPIprint)
whismanoid 0:68e64068330f 252 {
whismanoid 0:68e64068330f 253 onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
whismanoid 0:68e64068330f 254 }
whismanoid 0:68e64068330f 255 //
whismanoid 0:68e64068330f 256 // VERIFY: SPIwrite24bits print diagnostic information
whismanoid 0:68e64068330f 257 //cmdLine.serial().printf(" MOSI->"));
whismanoid 0:68e64068330f 258 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 259 //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
whismanoid 0:68e64068330f 260 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 261 //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
whismanoid 0:68e64068330f 262 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 263 //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
whismanoid 0:68e64068330f 264 // hex dump mosiData[0..byteCount-1]
whismanoid 0:68e64068330f 265 #if 0 // HAS_MICROUSBSERIAL
whismanoid 0:68e64068330f 266 cmdLine_microUSBserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 267 if (byteCount > 7) {
whismanoid 0:68e64068330f 268 cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 269 }
whismanoid 0:68e64068330f 270 cmdLine_microUSBserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 271 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 272 {
whismanoid 0:68e64068330f 273 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 274 }
whismanoid 0:68e64068330f 275 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 276 cmdLine_microUSBserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 277 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 278 {
whismanoid 0:68e64068330f 279 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 280 }
whismanoid 0:68e64068330f 281 cmdLine_microUSBserial.serial().printf(" ");
whismanoid 0:68e64068330f 282 #endif
whismanoid 0:68e64068330f 283 #if 0 // HAS_DAPLINK_SERIAL
whismanoid 0:68e64068330f 284 cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 285 if (byteCount > 7) {
whismanoid 0:68e64068330f 286 cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 287 }
whismanoid 0:68e64068330f 288 cmdLine_DAPLINKserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 289 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 290 {
whismanoid 0:68e64068330f 291 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 292 }
whismanoid 0:68e64068330f 293 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 294 cmdLine_DAPLINKserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 295 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 296 {
whismanoid 0:68e64068330f 297 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 298 }
whismanoid 0:68e64068330f 299 cmdLine_DAPLINKserial.serial().printf(" ");
whismanoid 0:68e64068330f 300 #endif
whismanoid 0:68e64068330f 301 // VERIFY: DIAGNOSTIC: print MAX5715 device register write
whismanoid 0:68e64068330f 302 // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
whismanoid 0:68e64068330f 303 // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
whismanoid 0:68e64068330f 304 //
whismanoid 0:68e64068330f 305 //int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
whismanoid 0:68e64068330f 306 int misoData16 = (misoData[0] << 8) | misoData[1];
whismanoid 0:68e64068330f 307 return misoData16;
whismanoid 0:68e64068330f 308 }
whismanoid 0:68e64068330f 309
whismanoid 0:68e64068330f 310 // CODE GENERATOR: extern function requirement MAX11410::SPIreadWrite32bits
whismanoid 0:68e64068330f 311 // SPI read and write 32 bits
whismanoid 0:68e64068330f 312 // SPI interface to MAX11410 shift 32 bits mosiData into MAX11410 DIN
whismanoid 0:68e64068330f 313 // while simultaneously capturing 32 bits miso data from MAX11410 DOUT
whismanoid 0:68e64068330f 314 //
whismanoid 0:68e64068330f 315 int32_t MAX11410::SPIreadWrite32bits(int32_t mosiData32)
whismanoid 0:68e64068330f 316 {
whismanoid 0:68e64068330f 317 // CODE GENERATOR: extern function definition for function SPIreadWrite32bits
whismanoid 0:68e64068330f 318 // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32)
whismanoid 0:68e64068330f 319 size_t byteCount = 4;
whismanoid 0:68e64068330f 320 static char mosiData[4];
whismanoid 0:68e64068330f 321 static char misoData[4];
whismanoid 0:68e64068330f 322 mosiData[0] = (char)((mosiData32 >> 24) & 0xFF); // MSByte
whismanoid 0:68e64068330f 323 mosiData[1] = (char)((mosiData32 >> 16) & 0xFF);
whismanoid 0:68e64068330f 324 mosiData[2] = (char)((mosiData32 >> 8) & 0xFF);
whismanoid 0:68e64068330f 325 mosiData[3] = (char)((mosiData32 >> 0) & 0xFF); // LSByte
whismanoid 0:68e64068330f 326 //
whismanoid 0:68e64068330f 327 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 328 //~ noInterrupts();
whismanoid 0:68e64068330f 329 //
whismanoid 0:68e64068330f 330 //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 331 //
whismanoid 0:68e64068330f 332 unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
whismanoid 0:68e64068330f 333 //~ m_spi.transfer(mosiData8_FF0000);
whismanoid 0:68e64068330f 334 //~ m_spi.transfer(mosiData16_00FF00);
whismanoid 0:68e64068330f 335 //~ m_spi.transfer(mosiData16_0000FF);
whismanoid 0:68e64068330f 336 //
whismanoid 0:68e64068330f 337 //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
whismanoid 0:68e64068330f 338 //
whismanoid 0:68e64068330f 339 // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
whismanoid 0:68e64068330f 340 //~ interrupts();
whismanoid 0:68e64068330f 341 // Optional Diagnostic function to print SPI transactions
whismanoid 0:68e64068330f 342 if (onSPIprint)
whismanoid 0:68e64068330f 343 {
whismanoid 0:68e64068330f 344 onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
whismanoid 0:68e64068330f 345 }
whismanoid 0:68e64068330f 346 //
whismanoid 0:68e64068330f 347 // VERIFY: SPIwrite24bits print diagnostic information
whismanoid 0:68e64068330f 348 //cmdLine.serial().printf(" MOSI->"));
whismanoid 0:68e64068330f 349 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 350 //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
whismanoid 0:68e64068330f 351 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 352 //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
whismanoid 0:68e64068330f 353 //cmdLine.serial().printf(" 0x"));
whismanoid 0:68e64068330f 354 //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
whismanoid 0:68e64068330f 355 // hex dump mosiData[0..byteCount-1]
whismanoid 0:68e64068330f 356 #if 0 // HAS_MICROUSBSERIAL
whismanoid 0:68e64068330f 357 cmdLine_microUSBserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 358 if (byteCount > 7) {
whismanoid 0:68e64068330f 359 cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 360 }
whismanoid 0:68e64068330f 361 cmdLine_microUSBserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 362 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 363 {
whismanoid 0:68e64068330f 364 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 365 }
whismanoid 0:68e64068330f 366 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 367 cmdLine_microUSBserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 368 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 369 {
whismanoid 0:68e64068330f 370 cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 371 }
whismanoid 0:68e64068330f 372 cmdLine_microUSBserial.serial().printf(" ");
whismanoid 0:68e64068330f 373 #endif
whismanoid 0:68e64068330f 374 #if 0 // HAS_DAPLINK_SERIAL
whismanoid 0:68e64068330f 375 cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
whismanoid 0:68e64068330f 376 if (byteCount > 7) {
whismanoid 0:68e64068330f 377 cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
whismanoid 0:68e64068330f 378 }
whismanoid 0:68e64068330f 379 cmdLine_DAPLINKserial.serial().printf(" MOSI->");
whismanoid 0:68e64068330f 380 for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
whismanoid 0:68e64068330f 381 {
whismanoid 0:68e64068330f 382 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
whismanoid 0:68e64068330f 383 }
whismanoid 0:68e64068330f 384 // hex dump misoData[0..byteCount-1]
whismanoid 0:68e64068330f 385 cmdLine_DAPLINKserial.serial().printf(" MISO<-");
whismanoid 0:68e64068330f 386 for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
whismanoid 0:68e64068330f 387 {
whismanoid 0:68e64068330f 388 cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
whismanoid 0:68e64068330f 389 }
whismanoid 0:68e64068330f 390 cmdLine_DAPLINKserial.serial().printf(" ");
whismanoid 0:68e64068330f 391 #endif
whismanoid 0:68e64068330f 392 // VERIFY: DIAGNOSTIC: print MAX5715 device register write
whismanoid 0:68e64068330f 393 // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
whismanoid 0:68e64068330f 394 // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
whismanoid 0:68e64068330f 395 //
whismanoid 0:68e64068330f 396 //int misoData32 = (misoData32_FF000000 << 24) | (misoData32_FF0000 << 16) | (misoData32_0000FF00 << 8) | misoData32_000000FF;
whismanoid 0:68e64068330f 397 int misoData32 = (misoData[0] << 24) | (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
whismanoid 0:68e64068330f 398 return misoData32;
whismanoid 0:68e64068330f 399 }
whismanoid 0:68e64068330f 400
whismanoid 0:68e64068330f 401 // CODE GENERATOR: class member function definitions
whismanoid 0:68e64068330f 402 //----------------------------------------
whismanoid 0:68e64068330f 403 // Menu item '!'
whismanoid 0:68e64068330f 404 // Initialize device
whismanoid 0:68e64068330f 405 // @return 1 on success; 0 on failure
whismanoid 0:68e64068330f 406 uint8_t MAX11410::Init(void)
whismanoid 0:68e64068330f 407 {
whismanoid 0:68e64068330f 408
whismanoid 0:68e64068330f 409 //----------------------------------------
whismanoid 1:d57c1a2cb83c 410 // AIN0-AIN1 reference voltage, in Volts
whismanoid 1:d57c1a2cb83c 411 VRef_REF0 = 2.500;
whismanoid 1:d57c1a2cb83c 412
whismanoid 1:d57c1a2cb83c 413 //----------------------------------------
whismanoid 1:d57c1a2cb83c 414 // REF1P-REF1N reference resistance, in Ohms
whismanoid 1:d57c1a2cb83c 415 VRef_REF1 = 4999;
whismanoid 1:d57c1a2cb83c 416
whismanoid 1:d57c1a2cb83c 417 //----------------------------------------
whismanoid 1:d57c1a2cb83c 418 // REF2P-REF2N reference voltage, in Volts
whismanoid 1:d57c1a2cb83c 419 VRef_REF2 = 2.500;
whismanoid 1:d57c1a2cb83c 420
whismanoid 1:d57c1a2cb83c 421 //----------------------------------------
whismanoid 1:d57c1a2cb83c 422 // AVDD-AGND supply voltage, in Volts
whismanoid 1:d57c1a2cb83c 423 VRef_AVDD = 3.300;
whismanoid 1:d57c1a2cb83c 424
whismanoid 1:d57c1a2cb83c 425 //----------------------------------------
whismanoid 1:d57c1a2cb83c 426 // shadow of register ctrl CMD_r000_1001_dddd_dddd_CTRL
whismanoid 1:d57c1a2cb83c 427 ctrl = 0x01;
whismanoid 1:d57c1a2cb83c 428
whismanoid 1:d57c1a2cb83c 429 //----------------------------------------
whismanoid 1:d57c1a2cb83c 430 // write8 0x00 PD = 0x03 (Reset Registers; enter Standby mode)
whismanoid 1:d57c1a2cb83c 431 RegWrite(CMD_r000_0000_xxxx_xxdd_PD, PD_11_Reset);
whismanoid 1:d57c1a2cb83c 432
whismanoid 1:d57c1a2cb83c 433 //----------------------------------------
whismanoid 1:d57c1a2cb83c 434 // write8 0x00 PD = 0x00 (NOP)
whismanoid 1:d57c1a2cb83c 435 RegWrite(CMD_r000_0000_xxxx_xxdd_PD, PD_00_Normal);
whismanoid 0:68e64068330f 436
whismanoid 0:68e64068330f 437 //----------------------------------------
whismanoid 0:68e64068330f 438 // success
whismanoid 0:68e64068330f 439 return 1;
whismanoid 0:68e64068330f 440 }
whismanoid 0:68e64068330f 441
whismanoid 0:68e64068330f 442 //----------------------------------------
whismanoid 1:d57c1a2cb83c 443 // Return the physical voltage corresponding to conversion result,
whismanoid 1:d57c1a2cb83c 444 // for unipolar mode.
whismanoid 0:68e64068330f 445 // Does not perform any offset or gain correction.
whismanoid 0:68e64068330f 446 //
whismanoid 1:d57c1a2cb83c 447 // @pre CTRL::U_BN = 1 -- Unipolar mode
whismanoid 1:d57c1a2cb83c 448 // @pre CTRL::FORMAT = x
whismanoid 0:68e64068330f 449 // @pre VRef = Voltage of REF input, in Volts
whismanoid 0:68e64068330f 450 // @param[in] value_u24: raw 24-bit MAX11410 code (right justified).
whismanoid 0:68e64068330f 451 // @return physical voltage corresponding to MAX11410 code.
whismanoid 1:d57c1a2cb83c 452 // @test VoltageOfCode_Unipolar(0xFFFFFF) expect 2.500 Full Scale
whismanoid 1:d57c1a2cb83c 453 // @test VoltageOfCode_Unipolar(0xFFFFFE) expect 2.500 Full Scale
whismanoid 1:d57c1a2cb83c 454 // @test VoltageOfCode_Unipolar(0xCCCCCC) expect 2.000 Two Volts
whismanoid 1:d57c1a2cb83c 455 // @test VoltageOfCode_Unipolar(0xC00000) expect 1.875 75% Scale
whismanoid 1:d57c1a2cb83c 456 // @test VoltageOfCode_Unipolar(0x800000) expect 1.250 Mid Scale
whismanoid 1:d57c1a2cb83c 457 // @test VoltageOfCode_Unipolar(0x666666) expect 1.000 One Volt
whismanoid 1:d57c1a2cb83c 458 // @test VoltageOfCode_Unipolar(0x400000) expect 0.625 25% Scale
whismanoid 1:d57c1a2cb83c 459 // @test VoltageOfCode_Unipolar(0x0A3D70) expect 0.100 100mV
whismanoid 1:d57c1a2cb83c 460 // @test VoltageOfCode_Unipolar(0x000064) expect 0.000014901162 100 LSB
whismanoid 1:d57c1a2cb83c 461 // @test VoltageOfCode_Unipolar(0x00000A) expect 0.0000014901162 Ten LSB
whismanoid 1:d57c1a2cb83c 462 // @test VoltageOfCode_Unipolar(0x000003) expect 0.00000044703483 Three LSB
whismanoid 1:d57c1a2cb83c 463 // @test VoltageOfCode_Unipolar(0x000002) expect 0.00000029802326 Two LSB
whismanoid 1:d57c1a2cb83c 464 // @test VoltageOfCode_Unipolar(0x000001) expect 0.00000014901162 One LSB
whismanoid 1:d57c1a2cb83c 465 // @test VoltageOfCode_Unipolar(0x000000) expect 0.0 Zero Scale
whismanoid 1:d57c1a2cb83c 466 //
whismanoid 1:d57c1a2cb83c 467 double MAX11410::VoltageOfCode_Unipolar(uint32_t value_u24)
whismanoid 0:68e64068330f 468 {
whismanoid 0:68e64068330f 469
whismanoid 0:68e64068330f 470 //----------------------------------------
whismanoid 0:68e64068330f 471 // Linear map min and max endpoints
whismanoid 1:d57c1a2cb83c 472 double VRef = VRef_REF2;
whismanoid 1:d57c1a2cb83c 473 uint8_t ref_sel = (ctrl & 0x03); // MAX11410_REF_SEL_enum_t
whismanoid 1:d57c1a2cb83c 474 switch(ref_sel)
whismanoid 1:d57c1a2cb83c 475 {
whismanoid 1:d57c1a2cb83c 476 case REF_SEL_000_AIN0_AIN1: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 477 case REF_SEL_001_REF1P_REF1N: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 478 case REF_SEL_010_REF2P_REF2N: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 479 case REF_SEL_011_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 480 case REF_SEL_100_AIN0_AGND: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 481 case REF_SEL_101_REF1P_AGND: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 482 case REF_SEL_110_REF2P_AGND: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 483 case REF_SEL_111_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 484 }
whismanoid 0:68e64068330f 485 double MaxScaleVoltage = VRef; // voltage of maximum code 0xffffff
whismanoid 0:68e64068330f 486 double MinScaleVoltage = 0.0; // voltage of minimum code 0x000
whismanoid 0:68e64068330f 487 const uint32_t FULL_SCALE_CODE_24BIT = 0xffffff;
whismanoid 0:68e64068330f 488 const uint32_t MaxCode = FULL_SCALE_CODE_24BIT;
whismanoid 0:68e64068330f 489 const uint32_t MinCode = 0x000;
whismanoid 0:68e64068330f 490 double codeFraction = ((double)value_u24 - MinCode) / (MaxCode - MinCode + 1);
whismanoid 1:d57c1a2cb83c 491 return (MinScaleVoltage + ((MaxScaleVoltage - MinScaleVoltage) * codeFraction)) / pgaGain;
whismanoid 1:d57c1a2cb83c 492 }
whismanoid 1:d57c1a2cb83c 493
whismanoid 1:d57c1a2cb83c 494 //----------------------------------------
whismanoid 1:d57c1a2cb83c 495 // Return the physical voltage corresponding to conversion result,
whismanoid 1:d57c1a2cb83c 496 // when conversion format is Bipolar mode, offset binary.
whismanoid 1:d57c1a2cb83c 497 // Does not perform any offset or gain correction.
whismanoid 1:d57c1a2cb83c 498 //
whismanoid 1:d57c1a2cb83c 499 // @pre CTRL::U_BN = 0 -- Bipolar mode
whismanoid 1:d57c1a2cb83c 500 // @pre CTRL::FORMAT = 1 -- offset binary
whismanoid 1:d57c1a2cb83c 501 // @pre VRef = Voltage of REF input, in Volts
whismanoid 1:d57c1a2cb83c 502 // @param[in] value_u24: raw 24-bit MAX11410 code (right justified).
whismanoid 1:d57c1a2cb83c 503 // @return physical voltage corresponding to MAX11410 code.
whismanoid 1:d57c1a2cb83c 504 // @test VoltageOfCode_Bipolar_OffsetBinary(0xFFFFFF) expect 2.5 Full Scale
whismanoid 1:d57c1a2cb83c 505 // @test VoltageOfCode_Bipolar_OffsetBinary(0xFFFFFE) expect 2.5 Full Scale
whismanoid 1:d57c1a2cb83c 506 // @test VoltageOfCode_Bipolar_OffsetBinary(0xC00000) expect 1.25 Mid Scale
whismanoid 1:d57c1a2cb83c 507 // @test VoltageOfCode_Bipolar_OffsetBinary(0x800003) expect 0.00000894069671 Three LSB
whismanoid 1:d57c1a2cb83c 508 // @test VoltageOfCode_Bipolar_OffsetBinary(0x800002) expect 0.00000596046447 Two LSB
whismanoid 1:d57c1a2cb83c 509 // @test VoltageOfCode_Bipolar_OffsetBinary(0x800001) expect 0.0000029802326 One LSB
whismanoid 1:d57c1a2cb83c 510 // @test VoltageOfCode_Bipolar_OffsetBinary(0x800000) expect 0.0 Zero Scale
whismanoid 1:d57c1a2cb83c 511 // @test VoltageOfCode_Bipolar_OffsetBinary(0x7FFFFF) expect -0.0000029802326 Negative One LSB
whismanoid 1:d57c1a2cb83c 512 // @test VoltageOfCode_Bipolar_OffsetBinary(0x7FFFFE) expect -0.0000059604644 Negative Two LSB
whismanoid 1:d57c1a2cb83c 513 // @test VoltageOfCode_Bipolar_OffsetBinary(0x7FFFFD) expect -0.0000089406967 Negative Three LSB
whismanoid 1:d57c1a2cb83c 514 // @test VoltageOfCode_Bipolar_OffsetBinary(0x400000) expect -1.25 Negative Mid Scale
whismanoid 1:d57c1a2cb83c 515 // @test VoltageOfCode_Bipolar_OffsetBinary(0x000001) expect -2.5 Negative Full Scale
whismanoid 1:d57c1a2cb83c 516 // @test VoltageOfCode_Bipolar_OffsetBinary(0x000000) expect -2.5 Negative Full Scale
whismanoid 1:d57c1a2cb83c 517 //
whismanoid 1:d57c1a2cb83c 518 double MAX11410::VoltageOfCode_Bipolar_OffsetBinary(uint32_t value_u24)
whismanoid 1:d57c1a2cb83c 519 {
whismanoid 1:d57c1a2cb83c 520
whismanoid 1:d57c1a2cb83c 521 //----------------------------------------
whismanoid 1:d57c1a2cb83c 522 // Linear map min and max endpoints
whismanoid 1:d57c1a2cb83c 523 double VRef = VRef_REF2;
whismanoid 1:d57c1a2cb83c 524 uint8_t ref_sel = (ctrl & 0x03); // MAX11410_REF_SEL_enum_t
whismanoid 1:d57c1a2cb83c 525 switch(ref_sel)
whismanoid 1:d57c1a2cb83c 526 {
whismanoid 1:d57c1a2cb83c 527 case REF_SEL_000_AIN0_AIN1: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 528 case REF_SEL_001_REF1P_REF1N: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 529 case REF_SEL_010_REF2P_REF2N: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 530 case REF_SEL_011_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 531 case REF_SEL_100_AIN0_AGND: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 532 case REF_SEL_101_REF1P_AGND: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 533 case REF_SEL_110_REF2P_AGND: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 534 case REF_SEL_111_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 535 }
whismanoid 1:d57c1a2cb83c 536 double MaxScaleVoltage = 2*VRef; // voltage of maximum code 0x7fffff
whismanoid 1:d57c1a2cb83c 537 double MinScaleVoltage = 0; // voltage of minimum code 0x800000;
whismanoid 1:d57c1a2cb83c 538 const uint32_t FULL_SCALE_CODE_24BIT = 0x7fffff;
whismanoid 1:d57c1a2cb83c 539 const uint32_t MaxCode = FULL_SCALE_CODE_24BIT;
whismanoid 1:d57c1a2cb83c 540 const int32_t CodeSpan = 0x1000000;
whismanoid 1:d57c1a2cb83c 541 const uint32_t MinCode = 0x800000;
whismanoid 1:d57c1a2cb83c 542 double codeFraction = ((double)value_u24 - MinCode) / CodeSpan;
whismanoid 1:d57c1a2cb83c 543 return (MinScaleVoltage + ((MaxScaleVoltage - MinScaleVoltage) * codeFraction)) / pgaGain;
whismanoid 1:d57c1a2cb83c 544 }
whismanoid 1:d57c1a2cb83c 545
whismanoid 1:d57c1a2cb83c 546 //----------------------------------------
whismanoid 1:d57c1a2cb83c 547 // Return the physical voltage corresponding to conversion result,
whismanoid 1:d57c1a2cb83c 548 // when conversion format is Bipolar mode, 2's complement.
whismanoid 1:d57c1a2cb83c 549 // Does not perform any offset or gain correction.
whismanoid 1:d57c1a2cb83c 550 //
whismanoid 1:d57c1a2cb83c 551 // @pre CTRL::U_BN = 0 -- Bipolar mode
whismanoid 1:d57c1a2cb83c 552 // @pre CTRL::FORMAT = 0 -- 2's complement
whismanoid 1:d57c1a2cb83c 553 // @pre VRef = Voltage of REF input, in Volts
whismanoid 1:d57c1a2cb83c 554 // @param[in] value_u24: raw 24-bit MAX11410 code (right justified).
whismanoid 1:d57c1a2cb83c 555 // @return physical voltage corresponding to MAX11410 code.
whismanoid 1:d57c1a2cb83c 556 // @test VoltageOfCode_Bipolar_2sComplement(0x7FFFFF) expect 2.500 Full Scale
whismanoid 1:d57c1a2cb83c 557 // @test VoltageOfCode_Bipolar_2sComplement(0x7FFFFE) expect 2.500 Full Scale
whismanoid 1:d57c1a2cb83c 558 // @test VoltageOfCode_Bipolar_2sComplement(0x666666) expect 2.000 Two Volts
whismanoid 1:d57c1a2cb83c 559 // @test VoltageOfCode_Bipolar_2sComplement(0x600000) expect 1.875 75% Scale
whismanoid 1:d57c1a2cb83c 560 // @test VoltageOfCode_Bipolar_2sComplement(0x400000) expect 1.250 Mid Scale
whismanoid 1:d57c1a2cb83c 561 // @test VoltageOfCode_Bipolar_2sComplement(0x333333) expect 1.000 One Volt
whismanoid 1:d57c1a2cb83c 562 // @test VoltageOfCode_Bipolar_2sComplement(0x200000) expect 0.625 25% Scale
whismanoid 1:d57c1a2cb83c 563 // @test VoltageOfCode_Bipolar_2sComplement(0x051eb8) expect 0.100 100mV
whismanoid 1:d57c1a2cb83c 564 // @test VoltageOfCode_Bipolar_2sComplement(0x000003) expect 0.00000894069671 Three LSB
whismanoid 1:d57c1a2cb83c 565 // @test VoltageOfCode_Bipolar_2sComplement(0x000002) expect 0.00000596046447 Two LSB
whismanoid 1:d57c1a2cb83c 566 // @test VoltageOfCode_Bipolar_2sComplement(0x000001) expect 0.0000029802326 One LSB
whismanoid 1:d57c1a2cb83c 567 // @test VoltageOfCode_Bipolar_2sComplement(0x000000) expect 0.0 Zero Scale
whismanoid 1:d57c1a2cb83c 568 // @test VoltageOfCode_Bipolar_2sComplement(0xFFFFFF) expect -0.0000029802326 Negative One LSB
whismanoid 1:d57c1a2cb83c 569 // @test VoltageOfCode_Bipolar_2sComplement(0xFFFFFE) expect -0.0000059604644 Negative Two LSB
whismanoid 1:d57c1a2cb83c 570 // @test VoltageOfCode_Bipolar_2sComplement(0xFFFFFD) expect -0.0000089406967 Negative Three LSB
whismanoid 1:d57c1a2cb83c 571 // @test VoltageOfCode_Bipolar_2sComplement(0xFAE148) expect -0.100 Negative 100mV
whismanoid 1:d57c1a2cb83c 572 // @test VoltageOfCode_Bipolar_2sComplement(0xE00000) expect -0.625 Negative 25% Scale
whismanoid 1:d57c1a2cb83c 573 // @test VoltageOfCode_Bipolar_2sComplement(0xCCCCCD) expect -1.000 Negative One Volt
whismanoid 1:d57c1a2cb83c 574 // @test VoltageOfCode_Bipolar_2sComplement(0xC00000) expect -1.250 Negative Mid Scale
whismanoid 1:d57c1a2cb83c 575 // @test VoltageOfCode_Bipolar_2sComplement(0xA00000) expect -1.875 Negative 75% Scale
whismanoid 1:d57c1a2cb83c 576 // @test VoltageOfCode_Bipolar_2sComplement(0x99999A) expect -2.000 Negative Two Volts
whismanoid 1:d57c1a2cb83c 577 // @test VoltageOfCode_Bipolar_2sComplement(0x800001) expect -2.500 Negative Full Scale
whismanoid 1:d57c1a2cb83c 578 // @test VoltageOfCode_Bipolar_2sComplement(0x800000) expect -2.500 Negative Full Scale
whismanoid 1:d57c1a2cb83c 579 //
whismanoid 1:d57c1a2cb83c 580 double MAX11410::VoltageOfCode_Bipolar_2sComplement(uint32_t value_u24)
whismanoid 1:d57c1a2cb83c 581 {
whismanoid 1:d57c1a2cb83c 582
whismanoid 1:d57c1a2cb83c 583 //----------------------------------------
whismanoid 1:d57c1a2cb83c 584 // Linear map min and max endpoints
whismanoid 1:d57c1a2cb83c 585 double VRef = VRef_REF2;
whismanoid 1:d57c1a2cb83c 586 uint8_t ref_sel = (ctrl & 0x03); // MAX11410_REF_SEL_enum_t
whismanoid 1:d57c1a2cb83c 587 switch(ref_sel)
whismanoid 1:d57c1a2cb83c 588 {
whismanoid 1:d57c1a2cb83c 589 case REF_SEL_000_AIN0_AIN1: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 590 case REF_SEL_001_REF1P_REF1N: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 591 case REF_SEL_010_REF2P_REF2N: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 592 case REF_SEL_011_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 593 case REF_SEL_100_AIN0_AGND: VRef = VRef_REF0; break;
whismanoid 1:d57c1a2cb83c 594 case REF_SEL_101_REF1P_AGND: VRef = VRef_REF1; break;
whismanoid 1:d57c1a2cb83c 595 case REF_SEL_110_REF2P_AGND: VRef = VRef_REF2; break;
whismanoid 1:d57c1a2cb83c 596 case REF_SEL_111_AVDD_AGND: VRef = VRef_AVDD; break;
whismanoid 1:d57c1a2cb83c 597 }
whismanoid 1:d57c1a2cb83c 598 double MaxScaleVoltage = 2 * VRef; // voltage of maximum code 0x7fffff
whismanoid 1:d57c1a2cb83c 599 double MinScaleVoltage = 0; // voltage of minimum code 0x800000
whismanoid 1:d57c1a2cb83c 600 const int32_t FULL_SCALE_CODE_24BIT_2S_COMPLEMENT = 0x7fffff;
whismanoid 1:d57c1a2cb83c 601 const int32_t SIGN_BIT_24BIT_2S_COMPLEMENT = 0x800000;
whismanoid 1:d57c1a2cb83c 602 if (value_u24 >= SIGN_BIT_24BIT_2S_COMPLEMENT) { value_u24 = value_u24 - (2 * SIGN_BIT_24BIT_2S_COMPLEMENT); }
whismanoid 1:d57c1a2cb83c 603 const int32_t MaxCode = FULL_SCALE_CODE_24BIT_2S_COMPLEMENT;
whismanoid 1:d57c1a2cb83c 604 const int32_t CodeSpan = 0x1000000;
whismanoid 1:d57c1a2cb83c 605 const int32_t MinCode = 0;
whismanoid 1:d57c1a2cb83c 606 double codeFraction = ((double)((int32_t)value_u24) - MinCode) / CodeSpan;
whismanoid 1:d57c1a2cb83c 607 return (MinScaleVoltage + ((MaxScaleVoltage - MinScaleVoltage) * codeFraction)) / pgaGain;
whismanoid 1:d57c1a2cb83c 608 }
whismanoid 1:d57c1a2cb83c 609
whismanoid 1:d57c1a2cb83c 610 //----------------------------------------
whismanoid 1:d57c1a2cb83c 611 // Return the physical voltage corresponding to conversion result,
whismanoid 1:d57c1a2cb83c 612 // when conversion format is determined by the CTRL register.
whismanoid 1:d57c1a2cb83c 613 // Does not perform any offset or gain correction.
whismanoid 1:d57c1a2cb83c 614 //
whismanoid 1:d57c1a2cb83c 615 // @pre CTRL::U_BN and CTRL::FORMAT = 0 select offset binary, 2's complement, or straight binary
whismanoid 1:d57c1a2cb83c 616 // @pre VRef = Voltage of REF input, in Volts
whismanoid 1:d57c1a2cb83c 617 // @param[in] value_u24: raw 24-bit MAX11410 code (right justified).
whismanoid 1:d57c1a2cb83c 618 // @return physical voltage corresponding to MAX11410 code.
whismanoid 1:d57c1a2cb83c 619 double MAX11410::VoltageOfCode(uint32_t value_u24)
whismanoid 1:d57c1a2cb83c 620 {
whismanoid 1:d57c1a2cb83c 621
whismanoid 1:d57c1a2cb83c 622 //----------------------------------------
whismanoid 1:d57c1a2cb83c 623 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 624 #warning "Not Tested Yet: MAX11410::VoltageOfCode..."
whismanoid 1:d57c1a2cb83c 625
whismanoid 1:d57c1a2cb83c 626 //----------------------------------------
whismanoid 1:d57c1a2cb83c 627 // Determine format from CTRL register U_BN and FORMAT
whismanoid 1:d57c1a2cb83c 628 uint8_t u_bn_bitmask = (1 << 6);
whismanoid 1:d57c1a2cb83c 629 uint8_t format_bitmask = (1 << 5);
whismanoid 1:d57c1a2cb83c 630 if ((ctrl & u_bn_bitmask) != 0)
whismanoid 1:d57c1a2cb83c 631 {
whismanoid 1:d57c1a2cb83c 632 return VoltageOfCode_Unipolar(value_u24);
whismanoid 1:d57c1a2cb83c 633 }
whismanoid 1:d57c1a2cb83c 634 if ((ctrl & format_bitmask) != 0)
whismanoid 1:d57c1a2cb83c 635 {
whismanoid 1:d57c1a2cb83c 636 return VoltageOfCode_Bipolar_OffsetBinary(value_u24);
whismanoid 1:d57c1a2cb83c 637 }
whismanoid 1:d57c1a2cb83c 638 return VoltageOfCode_Bipolar_2sComplement(value_u24);
whismanoid 0:68e64068330f 639 }
whismanoid 0:68e64068330f 640
whismanoid 0:68e64068330f 641 //----------------------------------------
whismanoid 0:68e64068330f 642 // Write a MAX11410 register.
whismanoid 0:68e64068330f 643 //
whismanoid 0:68e64068330f 644 // CMD_1aaa_aaaa_REGISTER_READ bit is cleared 0 indicating a write operation.
whismanoid 0:68e64068330f 645 //
whismanoid 0:68e64068330f 646 // MAX11410 register length can be determined by function RegSize.
whismanoid 0:68e64068330f 647 //
whismanoid 0:68e64068330f 648 // For 8-bit register size:
whismanoid 0:68e64068330f 649 //
whismanoid 0:68e64068330f 650 // SPI 16-bit transfer
whismanoid 0:68e64068330f 651 //
whismanoid 0:68e64068330f 652 // SPI MOSI = 0aaa_aaaa_dddd_dddd
whismanoid 0:68e64068330f 653 //
whismanoid 0:68e64068330f 654 // SPI MISO = xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 655 //
whismanoid 0:68e64068330f 656 // For 16-bit register size:
whismanoid 0:68e64068330f 657 //
whismanoid 0:68e64068330f 658 // SPI 24-bit or 32-bit transfer
whismanoid 0:68e64068330f 659 //
whismanoid 0:68e64068330f 660 // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 661 //
whismanoid 0:68e64068330f 662 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 663 //
whismanoid 0:68e64068330f 664 // For 24-bit register size:
whismanoid 0:68e64068330f 665 //
whismanoid 0:68e64068330f 666 // SPI 32-bit transfer
whismanoid 0:68e64068330f 667 //
whismanoid 0:68e64068330f 668 // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 669 //
whismanoid 0:68e64068330f 670 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 671 //
whismanoid 0:68e64068330f 672 // @return 1 on success; 0 on failure
whismanoid 0:68e64068330f 673 uint8_t MAX11410::RegWrite(MAX11410_CMD_enum_t regAddress, uint32_t regData)
whismanoid 0:68e64068330f 674 {
whismanoid 0:68e64068330f 675
whismanoid 0:68e64068330f 676 //----------------------------------------
whismanoid 0:68e64068330f 677 // switch based on register address szie RegSize(regAddress)
whismanoid 0:68e64068330f 678 regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF);
whismanoid 0:68e64068330f 679 switch(RegSize(regAddress))
whismanoid 0:68e64068330f 680 {
whismanoid 0:68e64068330f 681 case 8: // 8-bit register size
whismanoid 0:68e64068330f 682 {
whismanoid 0:68e64068330f 683 // SPI 16-bit transfer
whismanoid 0:68e64068330f 684 // SPI MOSI = 0aaa_aaaa_dddd_dddd
whismanoid 0:68e64068330f 685 // SPI MISO = xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 686 int16_t mosiData16 = ((int16_t)regAddress << 8) | ((int16_t)regData & 0xFF);
whismanoid 0:68e64068330f 687 SPIoutputCS(0);
whismanoid 0:68e64068330f 688 SPIwrite16bits(mosiData16);
whismanoid 0:68e64068330f 689 SPIoutputCS(1);
whismanoid 0:68e64068330f 690 }
whismanoid 0:68e64068330f 691 break;
whismanoid 0:68e64068330f 692 case 16: // 16-bit register size
whismanoid 0:68e64068330f 693 #warning "Not Verified Yet: MAX11410::RegWrite 16-bit SPIreadWrite32bits"
whismanoid 0:68e64068330f 694 {
whismanoid 0:68e64068330f 695 // SPI 24-bit or 32-bit transfer
whismanoid 0:68e64068330f 696 // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 697 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 698 // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_0000_0000
whismanoid 0:68e64068330f 699 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 700 int32_t mosiData32 = ((int32_t)regAddress << 24) | (((int32_t)regData & 0xFFFF) << 8);
whismanoid 0:68e64068330f 701 SPIoutputCS(0);
whismanoid 0:68e64068330f 702 SPIreadWrite32bits(mosiData32);
whismanoid 0:68e64068330f 703 SPIoutputCS(1);
whismanoid 0:68e64068330f 704 }
whismanoid 0:68e64068330f 705 break;
whismanoid 0:68e64068330f 706 case 24: // 24-bit register size
whismanoid 0:68e64068330f 707 {
whismanoid 0:68e64068330f 708 // SPI 32-bit transfer
whismanoid 0:68e64068330f 709 // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 710 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
whismanoid 0:68e64068330f 711 int32_t mosiData32 = ((int32_t)regAddress << 24) | ((int32_t)regData & 0x00FFFFFF);
whismanoid 0:68e64068330f 712 SPIoutputCS(0);
whismanoid 0:68e64068330f 713 SPIreadWrite32bits(mosiData32);
whismanoid 0:68e64068330f 714 SPIoutputCS(1);
whismanoid 0:68e64068330f 715 }
whismanoid 0:68e64068330f 716 break;
whismanoid 0:68e64068330f 717 }
whismanoid 0:68e64068330f 718
whismanoid 0:68e64068330f 719 //----------------------------------------
whismanoid 0:68e64068330f 720 // success
whismanoid 0:68e64068330f 721 return 1;
whismanoid 0:68e64068330f 722 }
whismanoid 0:68e64068330f 723
whismanoid 0:68e64068330f 724 //----------------------------------------
whismanoid 0:68e64068330f 725 // Read an 8-bit MAX11410 register
whismanoid 0:68e64068330f 726 //
whismanoid 0:68e64068330f 727 // CMD_1aaa_aaaa_REGISTER_READ bit is set 1 indicating a read operation.
whismanoid 0:68e64068330f 728 //
whismanoid 0:68e64068330f 729 // MAX11410 register length can be determined by function RegSize.
whismanoid 0:68e64068330f 730 //
whismanoid 0:68e64068330f 731 // For 8-bit register size:
whismanoid 0:68e64068330f 732 //
whismanoid 0:68e64068330f 733 // SPI 16-bit transfer
whismanoid 0:68e64068330f 734 //
whismanoid 0:68e64068330f 735 // SPI MOSI = 1aaa_aaaa_0000_0000
whismanoid 0:68e64068330f 736 //
whismanoid 0:68e64068330f 737 // SPI MISO = xxxx_xxxx_dddd_dddd
whismanoid 0:68e64068330f 738 //
whismanoid 0:68e64068330f 739 // For 16-bit register size:
whismanoid 0:68e64068330f 740 //
whismanoid 0:68e64068330f 741 // SPI 24-bit or 32-bit transfer
whismanoid 0:68e64068330f 742 //
whismanoid 0:68e64068330f 743 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
whismanoid 0:68e64068330f 744 //
whismanoid 0:68e64068330f 745 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 746 //
whismanoid 0:68e64068330f 747 // For 24-bit register size:
whismanoid 0:68e64068330f 748 //
whismanoid 0:68e64068330f 749 // SPI 32-bit transfer
whismanoid 0:68e64068330f 750 //
whismanoid 0:68e64068330f 751 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
whismanoid 0:68e64068330f 752 //
whismanoid 0:68e64068330f 753 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 754 //
whismanoid 0:68e64068330f 755 //
whismanoid 0:68e64068330f 756 // @return 1 on success; 0 on failure
whismanoid 0:68e64068330f 757 uint8_t MAX11410::RegRead(MAX11410_CMD_enum_t regAddress, uint32_t* ptrRegData)
whismanoid 0:68e64068330f 758 {
whismanoid 0:68e64068330f 759
whismanoid 0:68e64068330f 760 //----------------------------------------
whismanoid 0:68e64068330f 761 // switch based on register address szie RegSize(regAddress)
whismanoid 0:68e64068330f 762 regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF);
whismanoid 0:68e64068330f 763 switch(RegSize(regAddress))
whismanoid 0:68e64068330f 764 {
whismanoid 0:68e64068330f 765 case 8: // 8-bit register size
whismanoid 0:68e64068330f 766 {
whismanoid 0:68e64068330f 767 // SPI 16-bit transfer
whismanoid 0:68e64068330f 768 // SPI MOSI = 1aaa_aaaa_0000_0000
whismanoid 0:68e64068330f 769 // SPI MISO = xxxx_xxxx_dddd_dddd
whismanoid 0:68e64068330f 770 int16_t mosiData16 = ((CMD_1aaa_aaaa_REGISTER_READ | (int16_t)regAddress) << 8) | ((int16_t)0);
whismanoid 0:68e64068330f 771 SPIoutputCS(0);
whismanoid 0:68e64068330f 772 int16_t misoData16 = SPIreadWrite16bits(mosiData16);
whismanoid 0:68e64068330f 773 SPIoutputCS(1);
whismanoid 0:68e64068330f 774 (*ptrRegData) = (misoData16 & 0x00FF);
whismanoid 0:68e64068330f 775 }
whismanoid 0:68e64068330f 776 break;
whismanoid 0:68e64068330f 777 case 16: // 16-bit register size
whismanoid 0:68e64068330f 778 #warning "Not Verified Yet: MAX11410::RegRead 16-bit SPIreadWrite32bits"
whismanoid 0:68e64068330f 779 {
whismanoid 0:68e64068330f 780 // SPI 24-bit or 32-bit transfer
whismanoid 0:68e64068330f 781 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000
whismanoid 0:68e64068330f 782 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 783 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
whismanoid 0:68e64068330f 784 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_xxxx_xxxx
whismanoid 0:68e64068330f 785 int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)regAddress) << 24);
whismanoid 0:68e64068330f 786 SPIoutputCS(0);
whismanoid 0:68e64068330f 787 int32_t misoData32 = SPIreadWrite32bits(mosiData32);
whismanoid 0:68e64068330f 788 SPIoutputCS(1);
whismanoid 0:68e64068330f 789 (*ptrRegData) = ((misoData32 >> 8) & 0x00FFFF);
whismanoid 0:68e64068330f 790 }
whismanoid 0:68e64068330f 791 break;
whismanoid 0:68e64068330f 792 case 24: // 24-bit register size
whismanoid 0:68e64068330f 793 {
whismanoid 0:68e64068330f 794 // SPI 32-bit transfer
whismanoid 0:68e64068330f 795 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
whismanoid 0:68e64068330f 796 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
whismanoid 0:68e64068330f 797 int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)regAddress) << 24);
whismanoid 0:68e64068330f 798 SPIoutputCS(0);
whismanoid 0:68e64068330f 799 int32_t misoData32 = SPIreadWrite32bits(mosiData32);
whismanoid 0:68e64068330f 800 SPIoutputCS(1);
whismanoid 0:68e64068330f 801 (*ptrRegData) = (misoData32 & 0x00FFFFFF);
whismanoid 0:68e64068330f 802 }
whismanoid 0:68e64068330f 803 break;
whismanoid 0:68e64068330f 804 }
whismanoid 0:68e64068330f 805
whismanoid 0:68e64068330f 806 //----------------------------------------
whismanoid 0:68e64068330f 807 // success
whismanoid 0:68e64068330f 808 return 1;
whismanoid 0:68e64068330f 809 }
whismanoid 0:68e64068330f 810
whismanoid 0:68e64068330f 811 //----------------------------------------
whismanoid 0:68e64068330f 812 // Return the size of a MAX11410 register
whismanoid 0:68e64068330f 813 //
whismanoid 0:68e64068330f 814 // @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size
whismanoid 0:68e64068330f 815 uint8_t MAX11410::RegSize(MAX11410_CMD_enum_t regAddress)
whismanoid 0:68e64068330f 816 {
whismanoid 0:68e64068330f 817
whismanoid 0:68e64068330f 818 //----------------------------------------
whismanoid 0:68e64068330f 819 // switch based on register address value regAddress
whismanoid 0:68e64068330f 820 regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF);
whismanoid 0:68e64068330f 821 switch(regAddress)
whismanoid 0:68e64068330f 822 {
whismanoid 0:68e64068330f 823 default:
whismanoid 0:68e64068330f 824 return 0; // undefined register size
whismanoid 0:68e64068330f 825 case CMD_r000_0000_xxxx_xxdd_PD:
whismanoid 0:68e64068330f 826 case CMD_r000_0001_xddd_xxdd_CONV_START:
whismanoid 0:68e64068330f 827 case CMD_r000_0010_xddd_dddd_SEQ_START:
whismanoid 0:68e64068330f 828 case CMD_r000_0011_xxxx_xddd_CAL_START:
whismanoid 0:68e64068330f 829 case CMD_r000_0100_dddd_xddd_GP0_CTRL:
whismanoid 0:68e64068330f 830 case CMD_r000_0101_dddd_xddd_GP1_CTRL:
whismanoid 0:68e64068330f 831 case CMD_r000_0110_xddd_xxdd_GP_CONV:
whismanoid 0:68e64068330f 832 case CMD_r000_0111_xddd_dddd_GP_SEQ_ADDR:
whismanoid 0:68e64068330f 833 case CMD_r000_1000_x0dd_dddd_FILTER:
whismanoid 0:68e64068330f 834 case CMD_r000_1001_dddd_dddd_CTRL:
whismanoid 0:68e64068330f 835 case CMD_r000_1010_dddd_dddd_SOURCE:
whismanoid 0:68e64068330f 836 case CMD_r000_1011_dddd_dddd_MUX_CTRL0:
whismanoid 0:68e64068330f 837 case CMD_r000_1100_dddd_dddd_MUX_CTRL1:
whismanoid 0:68e64068330f 838 case CMD_r000_1101_dddd_dddd_MUX_CTRL2:
whismanoid 0:68e64068330f 839 case CMD_r000_1110_xxdd_xddd_PGA:
whismanoid 0:68e64068330f 840 case CMD_r000_1111_dddd_dddd_WAIT_EXT:
whismanoid 0:68e64068330f 841 case CMD_r001_0000_xxxx_xxxx_WAIT_START:
whismanoid 0:68e64068330f 842 return 8; // 8-bit register size
whismanoid 0:68e64068330f 843 case CMD_r001_0001_xxxx_xxxx_xxxx_xxxx_xxxx_xddd_PART_ID:
whismanoid 0:68e64068330f 844 case CMD_r001_0010_xxxx_xxxx_dddd_xxdd_dddd_dddd_SYSC_SEL:
whismanoid 0:68e64068330f 845 case CMD_r001_0011_dddd_dddd_dddd_dddd_dddd_dddd_SYS_OFF_A:
whismanoid 0:68e64068330f 846 case CMD_r001_0100_dddd_dddd_dddd_dddd_dddd_dddd_SYS_OFF_B:
whismanoid 0:68e64068330f 847 case CMD_r001_0101_dddd_dddd_dddd_dddd_dddd_dddd_SYS_GAIN_A:
whismanoid 0:68e64068330f 848 case CMD_r001_0110_dddd_dddd_dddd_dddd_dddd_dddd_SYS_GAIN_B:
whismanoid 0:68e64068330f 849 case CMD_r001_0111_dddd_dddd_dddd_dddd_dddd_dddd_SELF_OFF:
whismanoid 0:68e64068330f 850 case CMD_r001_1000_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_1:
whismanoid 0:68e64068330f 851 case CMD_r001_1001_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_2:
whismanoid 0:68e64068330f 852 case CMD_r001_1010_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_4:
whismanoid 0:68e64068330f 853 case CMD_r001_1011_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_8:
whismanoid 0:68e64068330f 854 case CMD_r001_1100_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_16:
whismanoid 0:68e64068330f 855 case CMD_r001_1101_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_32:
whismanoid 0:68e64068330f 856 case CMD_r001_1110_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_64:
whismanoid 0:68e64068330f 857 case CMD_r001_1111_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_128:
whismanoid 0:68e64068330f 858 case CMD_r010_0000_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH0:
whismanoid 0:68e64068330f 859 case CMD_r010_0001_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH1:
whismanoid 0:68e64068330f 860 case CMD_r010_0010_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH2:
whismanoid 0:68e64068330f 861 case CMD_r010_0011_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH3:
whismanoid 0:68e64068330f 862 case CMD_r010_0100_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH4:
whismanoid 0:68e64068330f 863 case CMD_r010_0101_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH5:
whismanoid 0:68e64068330f 864 case CMD_r010_0110_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH6:
whismanoid 0:68e64068330f 865 case CMD_r010_0111_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH7:
whismanoid 0:68e64068330f 866 case CMD_r010_1000_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH0:
whismanoid 0:68e64068330f 867 case CMD_r010_1001_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH1:
whismanoid 0:68e64068330f 868 case CMD_r010_1010_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH2:
whismanoid 0:68e64068330f 869 case CMD_r010_1011_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH3:
whismanoid 0:68e64068330f 870 case CMD_r010_1100_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH4:
whismanoid 0:68e64068330f 871 case CMD_r010_1101_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH5:
whismanoid 0:68e64068330f 872 case CMD_r010_1110_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH6:
whismanoid 0:68e64068330f 873 case CMD_r010_1111_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH7:
whismanoid 0:68e64068330f 874 case CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0:
whismanoid 0:68e64068330f 875 case CMD_r011_0001_dddd_dddd_dddd_dddd_dddd_dddd_DATA1:
whismanoid 0:68e64068330f 876 case CMD_r011_0010_dddd_dddd_dddd_dddd_dddd_dddd_DATA2:
whismanoid 0:68e64068330f 877 case CMD_r011_0011_dddd_dddd_dddd_dddd_dddd_dddd_DATA3:
whismanoid 0:68e64068330f 878 case CMD_r011_0100_dddd_dddd_dddd_dddd_dddd_dddd_DATA4:
whismanoid 0:68e64068330f 879 case CMD_r011_0101_dddd_dddd_dddd_dddd_dddd_dddd_DATA5:
whismanoid 0:68e64068330f 880 case CMD_r011_0110_dddd_dddd_dddd_dddd_dddd_dddd_DATA6:
whismanoid 0:68e64068330f 881 case CMD_r011_0111_dddd_dddd_dddd_dddd_dddd_dddd_DATA7:
whismanoid 0:68e64068330f 882 case CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS:
whismanoid 0:68e64068330f 883 case CMD_r011_1001_dddd_dddd_dddd_dddd_dxxd_dddd_STATUS_IE:
whismanoid 0:68e64068330f 884 return 24; // 24-bit register size
whismanoid 0:68e64068330f 885 case CMD_r011_1010_xaaa_aaaa_dddd_dddd_UC_0:
whismanoid 0:68e64068330f 886 case CMD_r011_1011_xaaa_aaaa_dddd_dddd_UC_1:
whismanoid 0:68e64068330f 887 case CMD_r011_1100_xaaa_aaaa_dddd_dddd_UC_2:
whismanoid 0:68e64068330f 888 case CMD_r011_1101_xaaa_aaaa_dddd_dddd_UC_3:
whismanoid 0:68e64068330f 889 case CMD_r011_1110_xaaa_aaaa_dddd_dddd_UC_4:
whismanoid 0:68e64068330f 890 case CMD_r011_1111_xaaa_aaaa_dddd_dddd_UC_5:
whismanoid 0:68e64068330f 891 case CMD_r100_0000_xaaa_aaaa_dddd_dddd_UC_6:
whismanoid 0:68e64068330f 892 case CMD_r100_0001_xaaa_aaaa_dddd_dddd_UC_7:
whismanoid 0:68e64068330f 893 case CMD_r100_0010_xaaa_aaaa_dddd_dddd_UC_8:
whismanoid 0:68e64068330f 894 case CMD_r100_0011_xaaa_aaaa_dddd_dddd_UC_9:
whismanoid 0:68e64068330f 895 case CMD_r100_0100_xaaa_aaaa_dddd_dddd_UC_10:
whismanoid 0:68e64068330f 896 case CMD_r100_0101_xaaa_aaaa_dddd_dddd_UC_11:
whismanoid 0:68e64068330f 897 case CMD_r100_0110_xaaa_aaaa_dddd_dddd_UC_12:
whismanoid 0:68e64068330f 898 case CMD_r100_0111_xaaa_aaaa_dddd_dddd_UC_13:
whismanoid 0:68e64068330f 899 case CMD_r100_1000_xaaa_aaaa_dddd_dddd_UC_14:
whismanoid 0:68e64068330f 900 case CMD_r100_1001_xaaa_aaaa_dddd_dddd_UC_15:
whismanoid 0:68e64068330f 901 case CMD_r100_1010_xaaa_aaaa_dddd_dddd_UC_16:
whismanoid 0:68e64068330f 902 case CMD_r100_1011_xaaa_aaaa_dddd_dddd_UC_17:
whismanoid 0:68e64068330f 903 case CMD_r100_1100_xaaa_aaaa_dddd_dddd_UC_18:
whismanoid 0:68e64068330f 904 case CMD_r100_1101_xaaa_aaaa_dddd_dddd_UC_19:
whismanoid 0:68e64068330f 905 case CMD_r100_1110_xaaa_aaaa_dddd_dddd_UC_20:
whismanoid 0:68e64068330f 906 case CMD_r100_1111_xaaa_aaaa_dddd_dddd_UC_21:
whismanoid 0:68e64068330f 907 case CMD_r101_0000_xaaa_aaaa_dddd_dddd_UC_22:
whismanoid 0:68e64068330f 908 case CMD_r101_0001_xaaa_aaaa_dddd_dddd_UC_23:
whismanoid 0:68e64068330f 909 case CMD_r101_0010_xaaa_aaaa_dddd_dddd_UC_24:
whismanoid 0:68e64068330f 910 case CMD_r101_0011_xaaa_aaaa_dddd_dddd_UC_25:
whismanoid 0:68e64068330f 911 case CMD_r101_0100_xaaa_aaaa_dddd_dddd_UC_26:
whismanoid 0:68e64068330f 912 case CMD_r101_0101_xaaa_aaaa_dddd_dddd_UC_27:
whismanoid 0:68e64068330f 913 case CMD_r101_0110_xaaa_aaaa_dddd_dddd_UC_28:
whismanoid 0:68e64068330f 914 case CMD_r101_0111_xaaa_aaaa_dddd_dddd_UC_29:
whismanoid 0:68e64068330f 915 case CMD_r101_1000_xaaa_aaaa_dddd_dddd_UC_30:
whismanoid 0:68e64068330f 916 case CMD_r101_1001_xaaa_aaaa_dddd_dddd_UC_31:
whismanoid 0:68e64068330f 917 case CMD_r101_1010_xaaa_aaaa_dddd_dddd_UC_32:
whismanoid 0:68e64068330f 918 case CMD_r101_1011_xaaa_aaaa_dddd_dddd_UC_33:
whismanoid 0:68e64068330f 919 case CMD_r101_1100_xaaa_aaaa_dddd_dddd_UC_34:
whismanoid 0:68e64068330f 920 case CMD_r101_1101_xaaa_aaaa_dddd_dddd_UC_35:
whismanoid 0:68e64068330f 921 case CMD_r101_1110_xaaa_aaaa_dddd_dddd_UC_36:
whismanoid 0:68e64068330f 922 case CMD_r101_1111_xaaa_aaaa_dddd_dddd_UC_37:
whismanoid 0:68e64068330f 923 case CMD_r110_0000_xaaa_aaaa_dddd_dddd_UC_38:
whismanoid 0:68e64068330f 924 case CMD_r110_0001_xaaa_aaaa_dddd_dddd_UC_39:
whismanoid 0:68e64068330f 925 case CMD_r110_0010_xaaa_aaaa_dddd_dddd_UC_40:
whismanoid 0:68e64068330f 926 case CMD_r110_0011_xaaa_aaaa_dddd_dddd_UC_41:
whismanoid 0:68e64068330f 927 case CMD_r110_0100_xaaa_aaaa_dddd_dddd_UC_42:
whismanoid 0:68e64068330f 928 case CMD_r110_0101_xaaa_aaaa_dddd_dddd_UC_43:
whismanoid 0:68e64068330f 929 case CMD_r110_0110_xaaa_aaaa_dddd_dddd_UC_44:
whismanoid 0:68e64068330f 930 case CMD_r110_0111_xaaa_aaaa_dddd_dddd_UC_45:
whismanoid 0:68e64068330f 931 case CMD_r110_1000_xaaa_aaaa_dddd_dddd_UC_46:
whismanoid 0:68e64068330f 932 case CMD_r110_1001_xaaa_aaaa_dddd_dddd_UC_47:
whismanoid 0:68e64068330f 933 case CMD_r110_1010_xaaa_aaaa_dddd_dddd_UC_48:
whismanoid 0:68e64068330f 934 case CMD_r110_1011_xaaa_aaaa_dddd_dddd_UC_49:
whismanoid 0:68e64068330f 935 case CMD_r110_1100_xaaa_aaaa_dddd_dddd_UC_50:
whismanoid 0:68e64068330f 936 case CMD_r110_1101_xaaa_aaaa_dddd_dddd_UC_51:
whismanoid 0:68e64068330f 937 case CMD_r110_1110_xaaa_aaaa_dddd_dddd_UC_52:
whismanoid 0:68e64068330f 938 case CMD_r110_1111_xxxx_xxxx_xaaa_aaaa_UCADDR:
whismanoid 0:68e64068330f 939 return 16; // 16-bit register size
whismanoid 0:68e64068330f 940 }
whismanoid 0:68e64068330f 941 }
whismanoid 0:68e64068330f 942
whismanoid 0:68e64068330f 943 //----------------------------------------
whismanoid 0:68e64068330f 944 // Return the name of a MAX11410 register
whismanoid 0:68e64068330f 945 //
whismanoid 0:68e64068330f 946 // @return null-terminated constant C string containing register name or empty string
whismanoid 0:68e64068330f 947 const char* MAX11410::RegName(MAX11410_CMD_enum_t regAddress)
whismanoid 0:68e64068330f 948 {
whismanoid 0:68e64068330f 949
whismanoid 0:68e64068330f 950 //----------------------------------------
whismanoid 0:68e64068330f 951 // switch based on register address value regAddress
whismanoid 0:68e64068330f 952 regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF);
whismanoid 0:68e64068330f 953 switch(regAddress)
whismanoid 0:68e64068330f 954 {
whismanoid 0:68e64068330f 955 default:
whismanoid 0:68e64068330f 956 return ""; // undefined register
whismanoid 0:68e64068330f 957 case CMD_r000_0000_xxxx_xxdd_PD: return "PD";
whismanoid 0:68e64068330f 958 case CMD_r000_0001_xddd_xxdd_CONV_START: return "CONV_START";
whismanoid 0:68e64068330f 959 case CMD_r000_0010_xddd_dddd_SEQ_START: return "SEQ_START";
whismanoid 0:68e64068330f 960 case CMD_r000_0011_xxxx_xddd_CAL_START: return "CAL_START";
whismanoid 0:68e64068330f 961 case CMD_r000_0100_dddd_xddd_GP0_CTRL: return "GP0_CTRL";
whismanoid 0:68e64068330f 962 case CMD_r000_0101_dddd_xddd_GP1_CTRL: return "GP1_CTRL";
whismanoid 0:68e64068330f 963 case CMD_r000_0110_xddd_xxdd_GP_CONV: return "GP_CONV";
whismanoid 0:68e64068330f 964 case CMD_r000_0111_xddd_dddd_GP_SEQ_ADDR: return "GP_SEQ_ADDR";
whismanoid 0:68e64068330f 965 case CMD_r000_1000_x0dd_dddd_FILTER: return "FILTER";
whismanoid 0:68e64068330f 966 case CMD_r000_1001_dddd_dddd_CTRL: return "CTRL";
whismanoid 0:68e64068330f 967 case CMD_r000_1010_dddd_dddd_SOURCE: return "SOURCE";
whismanoid 0:68e64068330f 968 case CMD_r000_1011_dddd_dddd_MUX_CTRL0: return "MUX_CTRL0";
whismanoid 0:68e64068330f 969 case CMD_r000_1100_dddd_dddd_MUX_CTRL1: return "MUX_CTRL1";
whismanoid 0:68e64068330f 970 case CMD_r000_1101_dddd_dddd_MUX_CTRL2: return "MUX_CTRL2";
whismanoid 0:68e64068330f 971 case CMD_r000_1110_xxdd_xddd_PGA: return "PGA";
whismanoid 0:68e64068330f 972 case CMD_r000_1111_dddd_dddd_WAIT_EXT: return "WAIT_EXT";
whismanoid 0:68e64068330f 973 case CMD_r001_0000_xxxx_xxxx_WAIT_START: return "WAIT_START";
whismanoid 0:68e64068330f 974 case CMD_r001_0001_xxxx_xxxx_xxxx_xxxx_xxxx_xddd_PART_ID: return "PART_ID";
whismanoid 0:68e64068330f 975 case CMD_r001_0010_xxxx_xxxx_dddd_xxdd_dddd_dddd_SYSC_SEL: return "SYSC_SEL";
whismanoid 0:68e64068330f 976 case CMD_r001_0011_dddd_dddd_dddd_dddd_dddd_dddd_SYS_OFF_A: return "SYS_OFF_A";
whismanoid 0:68e64068330f 977 case CMD_r001_0100_dddd_dddd_dddd_dddd_dddd_dddd_SYS_OFF_B: return "SYS_OFF_B";
whismanoid 0:68e64068330f 978 case CMD_r001_0101_dddd_dddd_dddd_dddd_dddd_dddd_SYS_GAIN_A: return "SYS_GAIN_A";
whismanoid 0:68e64068330f 979 case CMD_r001_0110_dddd_dddd_dddd_dddd_dddd_dddd_SYS_GAIN_B: return "SYS_GAIN_B";
whismanoid 0:68e64068330f 980 case CMD_r001_0111_dddd_dddd_dddd_dddd_dddd_dddd_SELF_OFF: return "SELF_OFF";
whismanoid 0:68e64068330f 981 case CMD_r001_1000_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_1: return "SELF_GAIN_1";
whismanoid 0:68e64068330f 982 case CMD_r001_1001_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_2: return "SELF_GAIN_2";
whismanoid 0:68e64068330f 983 case CMD_r001_1010_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_4: return "SELF_GAIN_4";
whismanoid 0:68e64068330f 984 case CMD_r001_1011_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_8: return "SELF_GAIN_8";
whismanoid 0:68e64068330f 985 case CMD_r001_1100_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_16: return "SELF_GAIN_16";
whismanoid 0:68e64068330f 986 case CMD_r001_1101_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_32: return "SELF_GAIN_32";
whismanoid 0:68e64068330f 987 case CMD_r001_1110_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_64: return "SELF_GAIN_64";
whismanoid 0:68e64068330f 988 case CMD_r001_1111_dddd_dddd_dddd_dddd_dddd_dddd_SELF_GAIN_128: return "SELF_GAIN_128";
whismanoid 0:68e64068330f 989 case CMD_r010_0000_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH0: return "LTHRESH0";
whismanoid 0:68e64068330f 990 case CMD_r010_0001_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH1: return "LTHRESH1";
whismanoid 0:68e64068330f 991 case CMD_r010_0010_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH2: return "LTHRESH2";
whismanoid 0:68e64068330f 992 case CMD_r010_0011_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH3: return "LTHRESH3";
whismanoid 0:68e64068330f 993 case CMD_r010_0100_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH4: return "LTHRESH4";
whismanoid 0:68e64068330f 994 case CMD_r010_0101_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH5: return "LTHRESH5";
whismanoid 0:68e64068330f 995 case CMD_r010_0110_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH6: return "LTHRESH6";
whismanoid 0:68e64068330f 996 case CMD_r010_0111_dddd_dddd_dddd_dddd_dddd_dddd_LTHRESH7: return "LTHRESH7";
whismanoid 0:68e64068330f 997 case CMD_r010_1000_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH0: return "UTHRESH0";
whismanoid 0:68e64068330f 998 case CMD_r010_1001_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH1: return "UTHRESH1";
whismanoid 0:68e64068330f 999 case CMD_r010_1010_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH2: return "UTHRESH2";
whismanoid 0:68e64068330f 1000 case CMD_r010_1011_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH3: return "UTHRESH3";
whismanoid 0:68e64068330f 1001 case CMD_r010_1100_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH4: return "UTHRESH4";
whismanoid 0:68e64068330f 1002 case CMD_r010_1101_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH5: return "UTHRESH5";
whismanoid 0:68e64068330f 1003 case CMD_r010_1110_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH6: return "UTHRESH6";
whismanoid 0:68e64068330f 1004 case CMD_r010_1111_dddd_dddd_dddd_dddd_dddd_dddd_UTHRESH7: return "UTHRESH7";
whismanoid 0:68e64068330f 1005 case CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0: return "DATA0";
whismanoid 0:68e64068330f 1006 case CMD_r011_0001_dddd_dddd_dddd_dddd_dddd_dddd_DATA1: return "DATA1";
whismanoid 0:68e64068330f 1007 case CMD_r011_0010_dddd_dddd_dddd_dddd_dddd_dddd_DATA2: return "DATA2";
whismanoid 0:68e64068330f 1008 case CMD_r011_0011_dddd_dddd_dddd_dddd_dddd_dddd_DATA3: return "DATA3";
whismanoid 0:68e64068330f 1009 case CMD_r011_0100_dddd_dddd_dddd_dddd_dddd_dddd_DATA4: return "DATA4";
whismanoid 0:68e64068330f 1010 case CMD_r011_0101_dddd_dddd_dddd_dddd_dddd_dddd_DATA5: return "DATA5";
whismanoid 0:68e64068330f 1011 case CMD_r011_0110_dddd_dddd_dddd_dddd_dddd_dddd_DATA6: return "DATA6";
whismanoid 0:68e64068330f 1012 case CMD_r011_0111_dddd_dddd_dddd_dddd_dddd_dddd_DATA7: return "DATA7";
whismanoid 0:68e64068330f 1013 case CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS: return "STATUS";
whismanoid 0:68e64068330f 1014 case CMD_r011_1001_dddd_dddd_dddd_dddd_dxxd_dddd_STATUS_IE: return "STATUS_IE";
whismanoid 0:68e64068330f 1015 case CMD_r011_1010_xaaa_aaaa_dddd_dddd_UC_0: return "UC_0";
whismanoid 0:68e64068330f 1016 case CMD_r011_1011_xaaa_aaaa_dddd_dddd_UC_1: return "UC_1";
whismanoid 0:68e64068330f 1017 case CMD_r011_1100_xaaa_aaaa_dddd_dddd_UC_2: return "UC_2";
whismanoid 0:68e64068330f 1018 case CMD_r011_1101_xaaa_aaaa_dddd_dddd_UC_3: return "UC_3";
whismanoid 0:68e64068330f 1019 case CMD_r011_1110_xaaa_aaaa_dddd_dddd_UC_4: return "UC_4";
whismanoid 0:68e64068330f 1020 case CMD_r011_1111_xaaa_aaaa_dddd_dddd_UC_5: return "UC_5";
whismanoid 0:68e64068330f 1021 case CMD_r100_0000_xaaa_aaaa_dddd_dddd_UC_6: return "UC_6";
whismanoid 0:68e64068330f 1022 case CMD_r100_0001_xaaa_aaaa_dddd_dddd_UC_7: return "UC_7";
whismanoid 0:68e64068330f 1023 case CMD_r100_0010_xaaa_aaaa_dddd_dddd_UC_8: return "UC_8";
whismanoid 0:68e64068330f 1024 case CMD_r100_0011_xaaa_aaaa_dddd_dddd_UC_9: return "UC_9";
whismanoid 0:68e64068330f 1025 case CMD_r100_0100_xaaa_aaaa_dddd_dddd_UC_10: return "UC_10";
whismanoid 0:68e64068330f 1026 case CMD_r100_0101_xaaa_aaaa_dddd_dddd_UC_11: return "UC_11";
whismanoid 0:68e64068330f 1027 case CMD_r100_0110_xaaa_aaaa_dddd_dddd_UC_12: return "UC_12";
whismanoid 0:68e64068330f 1028 case CMD_r100_0111_xaaa_aaaa_dddd_dddd_UC_13: return "UC_13";
whismanoid 0:68e64068330f 1029 case CMD_r100_1000_xaaa_aaaa_dddd_dddd_UC_14: return "UC_14";
whismanoid 0:68e64068330f 1030 case CMD_r100_1001_xaaa_aaaa_dddd_dddd_UC_15: return "UC_15";
whismanoid 0:68e64068330f 1031 case CMD_r100_1010_xaaa_aaaa_dddd_dddd_UC_16: return "UC_16";
whismanoid 0:68e64068330f 1032 case CMD_r100_1011_xaaa_aaaa_dddd_dddd_UC_17: return "UC_17";
whismanoid 0:68e64068330f 1033 case CMD_r100_1100_xaaa_aaaa_dddd_dddd_UC_18: return "UC_18";
whismanoid 0:68e64068330f 1034 case CMD_r100_1101_xaaa_aaaa_dddd_dddd_UC_19: return "UC_19";
whismanoid 0:68e64068330f 1035 case CMD_r100_1110_xaaa_aaaa_dddd_dddd_UC_20: return "UC_20";
whismanoid 0:68e64068330f 1036 case CMD_r100_1111_xaaa_aaaa_dddd_dddd_UC_21: return "UC_21";
whismanoid 0:68e64068330f 1037 case CMD_r101_0000_xaaa_aaaa_dddd_dddd_UC_22: return "UC_22";
whismanoid 0:68e64068330f 1038 case CMD_r101_0001_xaaa_aaaa_dddd_dddd_UC_23: return "UC_23";
whismanoid 0:68e64068330f 1039 case CMD_r101_0010_xaaa_aaaa_dddd_dddd_UC_24: return "UC_24";
whismanoid 0:68e64068330f 1040 case CMD_r101_0011_xaaa_aaaa_dddd_dddd_UC_25: return "UC_25";
whismanoid 0:68e64068330f 1041 case CMD_r101_0100_xaaa_aaaa_dddd_dddd_UC_26: return "UC_26";
whismanoid 0:68e64068330f 1042 case CMD_r101_0101_xaaa_aaaa_dddd_dddd_UC_27: return "UC_27";
whismanoid 0:68e64068330f 1043 case CMD_r101_0110_xaaa_aaaa_dddd_dddd_UC_28: return "UC_28";
whismanoid 0:68e64068330f 1044 case CMD_r101_0111_xaaa_aaaa_dddd_dddd_UC_29: return "UC_29";
whismanoid 0:68e64068330f 1045 case CMD_r101_1000_xaaa_aaaa_dddd_dddd_UC_30: return "UC_30";
whismanoid 0:68e64068330f 1046 case CMD_r101_1001_xaaa_aaaa_dddd_dddd_UC_31: return "UC_31";
whismanoid 0:68e64068330f 1047 case CMD_r101_1010_xaaa_aaaa_dddd_dddd_UC_32: return "UC_32";
whismanoid 0:68e64068330f 1048 case CMD_r101_1011_xaaa_aaaa_dddd_dddd_UC_33: return "UC_33";
whismanoid 0:68e64068330f 1049 case CMD_r101_1100_xaaa_aaaa_dddd_dddd_UC_34: return "UC_34";
whismanoid 0:68e64068330f 1050 case CMD_r101_1101_xaaa_aaaa_dddd_dddd_UC_35: return "UC_35";
whismanoid 0:68e64068330f 1051 case CMD_r101_1110_xaaa_aaaa_dddd_dddd_UC_36: return "UC_36";
whismanoid 0:68e64068330f 1052 case CMD_r101_1111_xaaa_aaaa_dddd_dddd_UC_37: return "UC_37";
whismanoid 0:68e64068330f 1053 case CMD_r110_0000_xaaa_aaaa_dddd_dddd_UC_38: return "UC_38";
whismanoid 0:68e64068330f 1054 case CMD_r110_0001_xaaa_aaaa_dddd_dddd_UC_39: return "UC_39";
whismanoid 0:68e64068330f 1055 case CMD_r110_0010_xaaa_aaaa_dddd_dddd_UC_40: return "UC_40";
whismanoid 0:68e64068330f 1056 case CMD_r110_0011_xaaa_aaaa_dddd_dddd_UC_41: return "UC_41";
whismanoid 0:68e64068330f 1057 case CMD_r110_0100_xaaa_aaaa_dddd_dddd_UC_42: return "UC_42";
whismanoid 0:68e64068330f 1058 case CMD_r110_0101_xaaa_aaaa_dddd_dddd_UC_43: return "UC_43";
whismanoid 0:68e64068330f 1059 case CMD_r110_0110_xaaa_aaaa_dddd_dddd_UC_44: return "UC_44";
whismanoid 0:68e64068330f 1060 case CMD_r110_0111_xaaa_aaaa_dddd_dddd_UC_45: return "UC_45";
whismanoid 0:68e64068330f 1061 case CMD_r110_1000_xaaa_aaaa_dddd_dddd_UC_46: return "UC_46";
whismanoid 0:68e64068330f 1062 case CMD_r110_1001_xaaa_aaaa_dddd_dddd_UC_47: return "UC_47";
whismanoid 0:68e64068330f 1063 case CMD_r110_1010_xaaa_aaaa_dddd_dddd_UC_48: return "UC_48";
whismanoid 0:68e64068330f 1064 case CMD_r110_1011_xaaa_aaaa_dddd_dddd_UC_49: return "UC_49";
whismanoid 0:68e64068330f 1065 case CMD_r110_1100_xaaa_aaaa_dddd_dddd_UC_50: return "UC_50";
whismanoid 0:68e64068330f 1066 case CMD_r110_1101_xaaa_aaaa_dddd_dddd_UC_51: return "UC_51";
whismanoid 0:68e64068330f 1067 case CMD_r110_1110_xaaa_aaaa_dddd_dddd_UC_52: return "UC_52";
whismanoid 0:68e64068330f 1068 case CMD_r110_1111_xxxx_xxxx_xaaa_aaaa_UCADDR: return "UCADDR";
whismanoid 0:68e64068330f 1069 }
whismanoid 0:68e64068330f 1070 }
whismanoid 0:68e64068330f 1071
whismanoid 0:68e64068330f 1072 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1073 // Menu item 'XF'
whismanoid 1:d57c1a2cb83c 1074 //
whismanoid 1:d57c1a2cb83c 1075 // FILTER Select Filter and Rate.
whismanoid 1:d57c1a2cb83c 1076 // Sets conversion rate based on RATE, LINEF, and CONV_TYPE value. See Table 9a through Table 9d for details.
whismanoid 1:d57c1a2cb83c 1077 // For CONV_TYPE_01_Continuous, linef=LINEF_11_SINC4, rate=RATE_0100 selects output data rate 60SPS.
whismanoid 1:d57c1a2cb83c 1078 //
whismanoid 1:d57c1a2cb83c 1079 // @param[in] linef = filter type, default=MAX11410::LINEF_enum_t::LINEF_11_SINC4
whismanoid 1:d57c1a2cb83c 1080 // @param[in] rate = output data rate selection, default=MAX11410::RATE_enum_t::RATE_0100
whismanoid 1:d57c1a2cb83c 1081 //
whismanoid 1:d57c1a2cb83c 1082 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1083 uint8_t MAX11410::Configure_FILTER(uint8_t linef, uint8_t rate)
whismanoid 1:d57c1a2cb83c 1084 {
whismanoid 1:d57c1a2cb83c 1085
whismanoid 1:d57c1a2cb83c 1086 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1087 // write8 0x08 FILTER
whismanoid 1:d57c1a2cb83c 1088 RegWrite(CMD_r000_1000_x0dd_dddd_FILTER, (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1089 | (((uint8_t)linef & 3) << 4)
whismanoid 1:d57c1a2cb83c 1090 | (((uint8_t)rate & 15) << 0)
whismanoid 1:d57c1a2cb83c 1091 ));
whismanoid 1:d57c1a2cb83c 1092
whismanoid 1:d57c1a2cb83c 1093 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1094 // success
whismanoid 1:d57c1a2cb83c 1095 return 1;
whismanoid 1:d57c1a2cb83c 1096 }
whismanoid 1:d57c1a2cb83c 1097
whismanoid 1:d57c1a2cb83c 1098 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1099 // Menu item 'XP'
whismanoid 1:d57c1a2cb83c 1100 //
whismanoid 1:d57c1a2cb83c 1101 // PGA Select Gain and Signal Path.
whismanoid 1:d57c1a2cb83c 1102 //
whismanoid 1:d57c1a2cb83c 1103 // @param[in] sigpath = signal path, default=MAX11410::SIG_PATH_enum_t::SIG_PATH_00_BUFFERED
whismanoid 1:d57c1a2cb83c 1104 // @param[in] gain = gain selection, default=MAX11410::GAIN_enum_t::GAIN_000_1
whismanoid 1:d57c1a2cb83c 1105 //
whismanoid 1:d57c1a2cb83c 1106 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1107 uint8_t MAX11410::Configure_PGA(uint8_t sigpath, uint8_t gain)
whismanoid 1:d57c1a2cb83c 1108 {
whismanoid 1:d57c1a2cb83c 1109
whismanoid 1:d57c1a2cb83c 1110 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1111 // pga gain 1, 2, 4, 8, 16, 32, 64, or 128 based on gain index in register pga CMD_r000_1110_xxdd_xddd_PGA
whismanoid 1:d57c1a2cb83c 1112 static uint8_t pgaGainTable[8] = {1, 2, 4, 8, 16, 32, 64, 128};
whismanoid 1:d57c1a2cb83c 1113 pgaGain = (sigpath == SIG_PATH_10_PGA) ? pgaGainTable[(uint8_t)gain] : 1;
whismanoid 1:d57c1a2cb83c 1114
whismanoid 1:d57c1a2cb83c 1115 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1116 // write8 0x0E PGA
whismanoid 1:d57c1a2cb83c 1117 RegWrite(CMD_r000_1110_xxdd_xddd_PGA, (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1118 | (((uint8_t)sigpath & 2) << 4)
whismanoid 1:d57c1a2cb83c 1119 | (((uint8_t)gain & 7) << 0)
whismanoid 1:d57c1a2cb83c 1120 ));
whismanoid 1:d57c1a2cb83c 1121
whismanoid 1:d57c1a2cb83c 1122 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1123 // success
whismanoid 1:d57c1a2cb83c 1124 return 1;
whismanoid 1:d57c1a2cb83c 1125 }
whismanoid 1:d57c1a2cb83c 1126
whismanoid 1:d57c1a2cb83c 1127 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1128 // Menu item 'XC'
whismanoid 1:d57c1a2cb83c 1129 //
whismanoid 1:d57c1a2cb83c 1130 // CTRL Select clock, format, and reference.
whismanoid 1:d57c1a2cb83c 1131 //
whismanoid 1:d57c1a2cb83c 1132 // @param[in] extclk = external clock enable, default=0
whismanoid 1:d57c1a2cb83c 1133 // @param[in] u_bn = unipolar input range enable, default=0
whismanoid 1:d57c1a2cb83c 1134 // @param[in] format = offset binary format enable, default=0
whismanoid 1:d57c1a2cb83c 1135 // @param[in] refbufp_en = REFP reference buffer enable, default=0
whismanoid 1:d57c1a2cb83c 1136 // @param[in] refbufn_en = REFN reference buffer enable, default=0
whismanoid 1:d57c1a2cb83c 1137 // @param[in] ref_sel = reference selection, default=MAX11410::REF_SEL_enum_t::REF_SEL_001_REF1P_REF1N
whismanoid 1:d57c1a2cb83c 1138 //
whismanoid 1:d57c1a2cb83c 1139 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1140 uint8_t MAX11410::Configure_CTRL(uint8_t extclk, uint8_t u_bn, uint8_t format, uint8_t refbufp_en, uint8_t refbufn_en, uint8_t ref_sel)
whismanoid 1:d57c1a2cb83c 1141 {
whismanoid 1:d57c1a2cb83c 1142
whismanoid 1:d57c1a2cb83c 1143 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1144 // shadow of register CMD_r000_1001_dddd_dddd_CTRL
whismanoid 1:d57c1a2cb83c 1145 ctrl = (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1146 | (((uint8_t)extclk & 1) << 7)
whismanoid 1:d57c1a2cb83c 1147 | (((uint8_t)u_bn & 1) << 6)
whismanoid 1:d57c1a2cb83c 1148 | (((uint8_t)format & 1) << 5)
whismanoid 1:d57c1a2cb83c 1149 | (((uint8_t)refbufp_en & 1) << 4)
whismanoid 1:d57c1a2cb83c 1150 | (((uint8_t)refbufn_en & 1) << 3)
whismanoid 1:d57c1a2cb83c 1151 | (((uint8_t)ref_sel & 7) << 0)
whismanoid 1:d57c1a2cb83c 1152 );
whismanoid 1:d57c1a2cb83c 1153
whismanoid 1:d57c1a2cb83c 1154 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1155 // write8 0x09 CTRL
whismanoid 1:d57c1a2cb83c 1156 RegWrite(CMD_r000_1001_dddd_dddd_CTRL, ctrl);
whismanoid 1:d57c1a2cb83c 1157
whismanoid 1:d57c1a2cb83c 1158 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1159 // success
whismanoid 1:d57c1a2cb83c 1160 return 1;
whismanoid 1:d57c1a2cb83c 1161 }
whismanoid 1:d57c1a2cb83c 1162
whismanoid 1:d57c1a2cb83c 1163 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1164 // Menu item 'XS'
whismanoid 1:d57c1a2cb83c 1165 //
whismanoid 1:d57c1a2cb83c 1166 // SOURCE Configure voltage bias source, current source, burnout mode
whismanoid 1:d57c1a2cb83c 1167 //
whismanoid 1:d57c1a2cb83c 1168 // @param[in] vbias_mode = _______, default=MAX11410::VBIAS_MODE_enum_t::VBIAS_MODE_00_Active
whismanoid 1:d57c1a2cb83c 1169 // @param[in] brn_mode = _______, default=MAX11410::BRN_MODE_enum_t::BRN_MODE_00_disabled
whismanoid 1:d57c1a2cb83c 1170 // @param[in] idac_mode = _______, default=MAX11410::IDAC_MODE_enum_t::IDAC_MODE_0000_10uA
whismanoid 1:d57c1a2cb83c 1171 //
whismanoid 1:d57c1a2cb83c 1172 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1173 uint8_t MAX11410::Configure_SOURCE(uint8_t vbias_mode, uint8_t brn_mode, uint8_t idac_mode)
whismanoid 1:d57c1a2cb83c 1174 {
whismanoid 1:d57c1a2cb83c 1175
whismanoid 1:d57c1a2cb83c 1176 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1177 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1178 #warning "Not Tested Yet: MAX11410::Configure_SOURCE..."
whismanoid 1:d57c1a2cb83c 1179
whismanoid 1:d57c1a2cb83c 1180 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1181 // write8 0x0A SOURCE
whismanoid 1:d57c1a2cb83c 1182 RegWrite(CMD_r000_1010_dddd_dddd_SOURCE, (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1183 | (((uint8_t)vbias_mode & 3) << 6)
whismanoid 1:d57c1a2cb83c 1184 | (((uint8_t)brn_mode & 3) << 4)
whismanoid 1:d57c1a2cb83c 1185 | (((uint8_t)idac_mode & 15) << 0)
whismanoid 1:d57c1a2cb83c 1186 ));
whismanoid 1:d57c1a2cb83c 1187
whismanoid 1:d57c1a2cb83c 1188 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1189 // success
whismanoid 1:d57c1a2cb83c 1190 return 1;
whismanoid 1:d57c1a2cb83c 1191 }
whismanoid 1:d57c1a2cb83c 1192
whismanoid 1:d57c1a2cb83c 1193 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1194 // Menu item 'XM'
whismanoid 1:d57c1a2cb83c 1195 //
whismanoid 1:d57c1a2cb83c 1196 // MUX_CTRL0 Select pins for analog input AINP and AINN
whismanoid 1:d57c1a2cb83c 1197 //
whismanoid 1:d57c1a2cb83c 1198 // @param[in] ainp = channel high side, default=MAX11410::AINP_SEL_enum_t::AINP_SEL_0000_AIN0
whismanoid 1:d57c1a2cb83c 1199 // @param[in] ainn = channel low side, default=MAX11410::AINN_SEL_enum_t::AINN_SEL_1010_GND
whismanoid 1:d57c1a2cb83c 1200 //
whismanoid 1:d57c1a2cb83c 1201 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1202 uint8_t MAX11410::Configure_MUX_CTRL0(uint8_t ainp, uint8_t ainn)
whismanoid 1:d57c1a2cb83c 1203 {
whismanoid 1:d57c1a2cb83c 1204
whismanoid 1:d57c1a2cb83c 1205 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1206 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1207 #warning "Not Tested Yet: MAX11410::Configure_MUX_CTRL0..."
whismanoid 1:d57c1a2cb83c 1208
whismanoid 1:d57c1a2cb83c 1209 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1210 // write8 0x0B MUX_CTRL0
whismanoid 1:d57c1a2cb83c 1211 RegWrite(CMD_r000_1011_dddd_dddd_MUX_CTRL0, (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1212 | (((uint8_t)ainp & 15) << 4)
whismanoid 1:d57c1a2cb83c 1213 | (((uint8_t)ainn & 15) << 0)
whismanoid 1:d57c1a2cb83c 1214 ));
whismanoid 1:d57c1a2cb83c 1215
whismanoid 1:d57c1a2cb83c 1216 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1217 // success
whismanoid 1:d57c1a2cb83c 1218 return 1;
whismanoid 1:d57c1a2cb83c 1219 }
whismanoid 1:d57c1a2cb83c 1220
whismanoid 1:d57c1a2cb83c 1221 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1222 // Menu item 'XI'
whismanoid 1:d57c1a2cb83c 1223 //
whismanoid 1:d57c1a2cb83c 1224 // MUX_CTRL1 Select pins for current source
whismanoid 1:d57c1a2cb83c 1225 //
whismanoid 1:d57c1a2cb83c 1226 // @param[in] idac1_sel = channel high side, default=MAX11410::IDAC1_SEL_enum_t::IDAC1_SEL_1111_unconnected
whismanoid 1:d57c1a2cb83c 1227 // @param[in] idac0_sel = channel low side, default=MAX11410::IDAC0_SEL_enum_t::IDAC0_SEL_1111_unconnected
whismanoid 1:d57c1a2cb83c 1228 //
whismanoid 1:d57c1a2cb83c 1229 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1230 uint8_t MAX11410::Configure_MUX_CTRL1(uint8_t idac1_sel, uint8_t idac0_sel)
whismanoid 1:d57c1a2cb83c 1231 {
whismanoid 1:d57c1a2cb83c 1232
whismanoid 1:d57c1a2cb83c 1233 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1234 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1235 #warning "Not Tested Yet: MAX11410::Configure_MUX_CTRL1..."
whismanoid 1:d57c1a2cb83c 1236
whismanoid 1:d57c1a2cb83c 1237 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1238 // write8 0x0C MUX_CTRL1
whismanoid 1:d57c1a2cb83c 1239 RegWrite(CMD_r000_1100_dddd_dddd_MUX_CTRL1, (uint8_t)(0
whismanoid 1:d57c1a2cb83c 1240 | (((uint8_t)idac1_sel & 15) << 4)
whismanoid 1:d57c1a2cb83c 1241 | (((uint8_t)idac0_sel & 15) << 0)
whismanoid 1:d57c1a2cb83c 1242 ));
whismanoid 1:d57c1a2cb83c 1243
whismanoid 1:d57c1a2cb83c 1244 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1245 // success
whismanoid 1:d57c1a2cb83c 1246 return 1;
whismanoid 1:d57c1a2cb83c 1247 }
whismanoid 1:d57c1a2cb83c 1248
whismanoid 1:d57c1a2cb83c 1249 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1250 // Menu item 'XV'
whismanoid 1:d57c1a2cb83c 1251 //
whismanoid 1:d57c1a2cb83c 1252 // MUX_CTRL2 Select pins for voltage bias source
whismanoid 1:d57c1a2cb83c 1253 //
whismanoid 1:d57c1a2cb83c 1254 // @param[in] vbias_ain7_ain0_bitmap = bit map of AIN7..AIN0 enables for voltage bias, default=0
whismanoid 1:d57c1a2cb83c 1255 //
whismanoid 1:d57c1a2cb83c 1256 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1257 uint8_t MAX11410::Configure_MUX_CTRL2(uint8_t vbias_ain7_ain0_bitmap)
whismanoid 1:d57c1a2cb83c 1258 {
whismanoid 1:d57c1a2cb83c 1259
whismanoid 1:d57c1a2cb83c 1260 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1261 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1262 #warning "Not Tested Yet: MAX11410::Configure_MUX_CTRL2..."
whismanoid 1:d57c1a2cb83c 1263
whismanoid 1:d57c1a2cb83c 1264 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1265 // write8 0x0D MUX_CTRL2
whismanoid 1:d57c1a2cb83c 1266 RegWrite(CMD_r000_1101_dddd_dddd_MUX_CTRL2, vbias_ain7_ain0_bitmap);
whismanoid 1:d57c1a2cb83c 1267
whismanoid 1:d57c1a2cb83c 1268 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1269 // success
whismanoid 1:d57c1a2cb83c 1270 return 1;
whismanoid 1:d57c1a2cb83c 1271 }
whismanoid 1:d57c1a2cb83c 1272
whismanoid 1:d57c1a2cb83c 1273 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1274 // Menu item 'X0'
whismanoid 1:d57c1a2cb83c 1275 //
whismanoid 1:d57c1a2cb83c 1276 // CAL_START Calibrate Self Offset and Gain.
whismanoid 1:d57c1a2cb83c 1277 //
whismanoid 1:d57c1a2cb83c 1278 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1279 uint8_t MAX11410::Calibrate_Self_Offset_Gain(void)
whismanoid 1:d57c1a2cb83c 1280 {
whismanoid 1:d57c1a2cb83c 1281
whismanoid 1:d57c1a2cb83c 1282 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1283 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1284 #warning "Not Tested Yet: MAX11410::Calibrate_Self_Offset_Gain..."
whismanoid 1:d57c1a2cb83c 1285
whismanoid 1:d57c1a2cb83c 1286 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1287 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1288 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_000_SELF_CAL);
whismanoid 1:d57c1a2cb83c 1289
whismanoid 1:d57c1a2cb83c 1290 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1291 // success
whismanoid 1:d57c1a2cb83c 1292 return 1;
whismanoid 1:d57c1a2cb83c 1293 }
whismanoid 1:d57c1a2cb83c 1294
whismanoid 1:d57c1a2cb83c 1295 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1296 // Menu item 'X1'
whismanoid 1:d57c1a2cb83c 1297 //
whismanoid 1:d57c1a2cb83c 1298 // CAL_START Calibrate Selected PGA.
whismanoid 1:d57c1a2cb83c 1299 //
whismanoid 1:d57c1a2cb83c 1300 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1301 uint8_t MAX11410::Calibrate_PGA_Gain(void)
whismanoid 1:d57c1a2cb83c 1302 {
whismanoid 1:d57c1a2cb83c 1303
whismanoid 1:d57c1a2cb83c 1304 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1305 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1306 #warning "Not Tested Yet: MAX11410::Calibrate_PGA_Gain..."
whismanoid 1:d57c1a2cb83c 1307
whismanoid 1:d57c1a2cb83c 1308 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1309 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1310 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_001_PGA_GAIN);
whismanoid 1:d57c1a2cb83c 1311
whismanoid 1:d57c1a2cb83c 1312 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1313 // success
whismanoid 1:d57c1a2cb83c 1314 return 1;
whismanoid 1:d57c1a2cb83c 1315 }
whismanoid 1:d57c1a2cb83c 1316
whismanoid 1:d57c1a2cb83c 1317 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1318 // Menu item 'X4'
whismanoid 1:d57c1a2cb83c 1319 //
whismanoid 1:d57c1a2cb83c 1320 // CAL_START Calibrate System Offset A.
whismanoid 1:d57c1a2cb83c 1321 //
whismanoid 1:d57c1a2cb83c 1322 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1323 uint8_t MAX11410::Calibrate_System_Offset_A(void)
whismanoid 1:d57c1a2cb83c 1324 {
whismanoid 1:d57c1a2cb83c 1325
whismanoid 1:d57c1a2cb83c 1326 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1327 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1328 #warning "Not Tested Yet: MAX11410::Calibrate_System_Offset_A..."
whismanoid 1:d57c1a2cb83c 1329
whismanoid 1:d57c1a2cb83c 1330 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1331 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1332 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_100_SYS_OFF_A);
whismanoid 1:d57c1a2cb83c 1333
whismanoid 1:d57c1a2cb83c 1334 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1335 // success
whismanoid 1:d57c1a2cb83c 1336 return 1;
whismanoid 1:d57c1a2cb83c 1337 }
whismanoid 1:d57c1a2cb83c 1338
whismanoid 1:d57c1a2cb83c 1339 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1340 // Menu item 'X5'
whismanoid 1:d57c1a2cb83c 1341 //
whismanoid 1:d57c1a2cb83c 1342 // X6 0x03 CAL_START 0x06 Calibrate System Offset B
whismanoid 1:d57c1a2cb83c 1343 // X7 0x03 CAL_START 0x07 Calibrate System Gain B
whismanoid 1:d57c1a2cb83c 1344 // CAL_START Calibrate System Gain A.
whismanoid 1:d57c1a2cb83c 1345 //
whismanoid 1:d57c1a2cb83c 1346 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1347 uint8_t MAX11410::Calibrate_System_Gain_A(void)
whismanoid 1:d57c1a2cb83c 1348 {
whismanoid 1:d57c1a2cb83c 1349
whismanoid 1:d57c1a2cb83c 1350 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1351 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1352 #warning "Not Tested Yet: MAX11410::Calibrate_System_Gain_A..."
whismanoid 1:d57c1a2cb83c 1353
whismanoid 1:d57c1a2cb83c 1354 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1355 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1356 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_101_SYS_GAIN_A);
whismanoid 1:d57c1a2cb83c 1357
whismanoid 1:d57c1a2cb83c 1358 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1359 // success
whismanoid 1:d57c1a2cb83c 1360 return 1;
whismanoid 1:d57c1a2cb83c 1361 }
whismanoid 1:d57c1a2cb83c 1362
whismanoid 1:d57c1a2cb83c 1363 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1364 // Menu item 'X6'
whismanoid 1:d57c1a2cb83c 1365 //
whismanoid 1:d57c1a2cb83c 1366 // CAL_START Calibrate System Offset B.
whismanoid 1:d57c1a2cb83c 1367 //
whismanoid 1:d57c1a2cb83c 1368 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1369 uint8_t MAX11410::Calibrate_System_Offset_B(void)
whismanoid 1:d57c1a2cb83c 1370 {
whismanoid 1:d57c1a2cb83c 1371
whismanoid 1:d57c1a2cb83c 1372 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1373 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1374 #warning "Not Tested Yet: MAX11410::Calibrate_System_Offset_B..."
whismanoid 1:d57c1a2cb83c 1375
whismanoid 1:d57c1a2cb83c 1376 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1377 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1378 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_110_SYS_OFF_B);
whismanoid 1:d57c1a2cb83c 1379
whismanoid 1:d57c1a2cb83c 1380 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1381 // success
whismanoid 1:d57c1a2cb83c 1382 return 1;
whismanoid 1:d57c1a2cb83c 1383 }
whismanoid 1:d57c1a2cb83c 1384
whismanoid 1:d57c1a2cb83c 1385 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1386 // Menu item 'X7'
whismanoid 1:d57c1a2cb83c 1387 //
whismanoid 1:d57c1a2cb83c 1388 // CAL_START Calibrate System Gain B.
whismanoid 1:d57c1a2cb83c 1389 //
whismanoid 1:d57c1a2cb83c 1390 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1391 uint8_t MAX11410::Calibrate_System_Gain_B(void)
whismanoid 1:d57c1a2cb83c 1392 {
whismanoid 1:d57c1a2cb83c 1393
whismanoid 1:d57c1a2cb83c 1394 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1395 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1396 #warning "Not Tested Yet: MAX11410::Calibrate_System_Gain_B..."
whismanoid 1:d57c1a2cb83c 1397
whismanoid 1:d57c1a2cb83c 1398 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1399 // write8 0x03 CAL_START
whismanoid 1:d57c1a2cb83c 1400 RegWrite(CMD_r000_0011_xxxx_xddd_CAL_START, (uint8_t)CAL_TYPE_111_SYS_GAIN_B);
whismanoid 1:d57c1a2cb83c 1401
whismanoid 1:d57c1a2cb83c 1402 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1403 // success
whismanoid 1:d57c1a2cb83c 1404 return 1;
whismanoid 1:d57c1a2cb83c 1405 }
whismanoid 1:d57c1a2cb83c 1406
whismanoid 1:d57c1a2cb83c 1407 //----------------------------------------
whismanoid 0:68e64068330f 1408 // Configure Measurement for voltage input.
whismanoid 0:68e64068330f 1409 //
whismanoid 0:68e64068330f 1410 // Example code for typical voltage measurement.
whismanoid 0:68e64068330f 1411 //
whismanoid 0:68e64068330f 1412 // SPI register write sequence test AIN0-AGND voltage input using REF2=2.5V
whismanoid 0:68e64068330f 1413 // write8 0x00 PD = 0x03 (Reset Registers; enter Standby mode)
whismanoid 0:68e64068330f 1414 // write8 0x00 PD = 0x00 (NOP)
whismanoid 0:68e64068330f 1415 // write8 0x08 FILTER = 0x34 to select RATE_0100, LINEF_11_SINC4 60SPS (given CONV_TYPE_01_Continuous )
whismanoid 0:68e64068330f 1416 // write8 0x0B MUX_CTRL0 = 0x0A to select AINP=AIN0 and AINN=GND
whismanoid 0:68e64068330f 1417 // write8 0x09 CTRL = 0x02 to select reference REF2P/REF2N; or CTRL = 0x1A to select reference REF2P/REF2N with reference input buffers enabled; Data Format = Bipolar 2's Complement
whismanoid 0:68e64068330f 1418 // write8 0x0E PGA = 0x00 to select input path = Buffers, digital gain = 1V/V
whismanoid 0:68e64068330f 1419 // write8 0x01 CONV_START = 0x01 to set Conversion Mode = Continuous
whismanoid 0:68e64068330f 1420 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1421 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0)
whismanoid 0:68e64068330f 1422 //
whismanoid 1:d57c1a2cb83c 1423 // @param[in] ainp = channel high side, default=AINP_SEL_enum_t::AINP_SEL_0000_AIN0
whismanoid 1:d57c1a2cb83c 1424 // @param[in] ainn = channel low side, default=AINN_SEL_enum_t::AINN_SEL_1010_GND
whismanoid 0:68e64068330f 1425 //
whismanoid 0:68e64068330f 1426 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1427 uint8_t MAX11410::Configure_Voltage(MAX11410_AINP_SEL_enum_t ainp, MAX11410_AINN_SEL_enum_t ainn)
whismanoid 0:68e64068330f 1428 {
whismanoid 0:68e64068330f 1429
whismanoid 0:68e64068330f 1430 //----------------------------------------
whismanoid 0:68e64068330f 1431 // warning -- WIP work in progress
whismanoid 0:68e64068330f 1432 #warning "Not Tested Yet: MAX11410::Configure_Voltage..."
whismanoid 0:68e64068330f 1433
whismanoid 0:68e64068330f 1434 //----------------------------------------
whismanoid 0:68e64068330f 1435 // write8 0x00 PD = 0x03 (Reset Registers; enter Standby mode)
whismanoid 0:68e64068330f 1436 RegWrite(CMD_r000_0000_xxxx_xxdd_PD, PD_11_Reset);
whismanoid 0:68e64068330f 1437
whismanoid 0:68e64068330f 1438 //----------------------------------------
whismanoid 0:68e64068330f 1439 // write8 0x00 PD = 0x00 (NOP)
whismanoid 0:68e64068330f 1440 RegWrite(CMD_r000_0000_xxxx_xxdd_PD, PD_00_Normal);
whismanoid 0:68e64068330f 1441
whismanoid 0:68e64068330f 1442 //----------------------------------------
whismanoid 0:68e64068330f 1443 // write8 0x08 FILTER = 0x34 to select RATE_0100, LINEF_11_SINC4 60SPS (given CONV_TYPE_01_Continuous)
whismanoid 2:eac67184cc0c 1444 Configure_FILTER((uint8_t) /* MAX11410::MAX11410_LINEF_enum_t:: */ LINEF_11_SINC4,
whismanoid 2:eac67184cc0c 1445 (uint8_t) /* MAX11410::MAX11410_RATE_enum_t:: */ RATE_0100);
whismanoid 0:68e64068330f 1446
whismanoid 0:68e64068330f 1447 //----------------------------------------
whismanoid 0:68e64068330f 1448 // write8 0x0B MUX_CTRL0 = 0x0A to select AINP=AIN0 and AINN=GND
whismanoid 1:d57c1a2cb83c 1449 Configure_MUX_CTRL0((uint8_t)AINP_SEL_0000_AIN0, (uint8_t)AINN_SEL_1010_GND);
whismanoid 0:68e64068330f 1450
whismanoid 0:68e64068330f 1451 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1452 // write8 0x09 CTRL to select reference REF2P/REF2N; Data Format = Bipolar 2's Complement
whismanoid 1:d57c1a2cb83c 1453 Configure_CTRL(/*extclk*/ 0, /*u_bn*/ 0, /*format*/ 0,
whismanoid 1:d57c1a2cb83c 1454 /*refbufp_en*/ 0, /*refbufn_en*/ 0,
whismanoid 1:d57c1a2cb83c 1455 /*ref_sel*/ (uint8_t)REF_SEL_010_REF2P_REF2N);
whismanoid 0:68e64068330f 1456
whismanoid 0:68e64068330f 1457 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1458 // write8 0x0E PGA
whismanoid 2:eac67184cc0c 1459 Configure_PGA((uint8_t) /* MAX11410_SIG_PATH_enum_t:: */ SIG_PATH_00_BUFFERED,
whismanoid 2:eac67184cc0c 1460 (uint8_t) /* MAX11410_GAIN_enum_t:: */ GAIN_000_1);
whismanoid 0:68e64068330f 1461
whismanoid 0:68e64068330f 1462 //----------------------------------------
whismanoid 0:68e64068330f 1463 // write8 0x01 CONV_START = 0x01 to set Conversion Mode = Continuous
whismanoid 0:68e64068330f 1464 RegWrite(CMD_r000_0001_xddd_xxdd_CONV_START, 0x01);
whismanoid 0:68e64068330f 1465
whismanoid 0:68e64068330f 1466 //----------------------------------------
whismanoid 0:68e64068330f 1467 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1468 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1469
whismanoid 0:68e64068330f 1470 //----------------------------------------
whismanoid 0:68e64068330f 1471 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0)
whismanoid 0:68e64068330f 1472 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &data0);
whismanoid 0:68e64068330f 1473
whismanoid 0:68e64068330f 1474 //----------------------------------------
whismanoid 0:68e64068330f 1475 // success
whismanoid 0:68e64068330f 1476 return 1;
whismanoid 0:68e64068330f 1477 }
whismanoid 0:68e64068330f 1478
whismanoid 0:68e64068330f 1479 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1480 // Menu item '$'
whismanoid 1:d57c1a2cb83c 1481 // Measure all ADC channels in sequence.
whismanoid 1:d57c1a2cb83c 1482 // @post AINcode[0..9]: measurement result LSB code
whismanoid 0:68e64068330f 1483 //
whismanoid 0:68e64068330f 1484 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1485 uint8_t MAX11410::Read_All_Voltages(void)
whismanoid 0:68e64068330f 1486 {
whismanoid 0:68e64068330f 1487
whismanoid 0:68e64068330f 1488 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1489 // scan AIN0..AIN9
whismanoid 1:d57c1a2cb83c 1490 const MAX11410_AINN_SEL_enum_t ainn = AINN_SEL_1010_GND;
whismanoid 2:eac67184cc0c 1491 for(uint8_t ainp = /* MAX11410_AINP_SEL_enum_t:: */ AINP_SEL_0000_AIN0; ainp <= /* MAX11410_AINP_SEL_enum_t:: */ AINP_SEL_1010_AVDD; ainp++)
whismanoid 1:d57c1a2cb83c 1492 {
whismanoid 1:d57c1a2cb83c 1493 Measure_Voltage((MAX11410_AINP_SEL_enum_t)ainp, ainn);
whismanoid 1:d57c1a2cb83c 1494 }
whismanoid 0:68e64068330f 1495
whismanoid 0:68e64068330f 1496 //----------------------------------------
whismanoid 0:68e64068330f 1497 // success
whismanoid 0:68e64068330f 1498 return 1;
whismanoid 0:68e64068330f 1499 }
whismanoid 0:68e64068330f 1500
whismanoid 0:68e64068330f 1501 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1502 // Menu item 'V'
whismanoid 0:68e64068330f 1503 // Trigger Measurement for voltage input.
whismanoid 0:68e64068330f 1504 //
whismanoid 0:68e64068330f 1505 // Example code for typical voltage measurement.
whismanoid 0:68e64068330f 1506 //
whismanoid 1:d57c1a2cb83c 1507 // @pre external connection REF2P-REF2N is a reference voltage
whismanoid 1:d57c1a2cb83c 1508 // @pre VRef = Voltage of REF input, in Volts
whismanoid 1:d57c1a2cb83c 1509 // @param[in] ainp = channel high side, default=AINP_SEL_0000_AIN0
whismanoid 1:d57c1a2cb83c 1510 // @param[in] ainn = channel low side, default=AINN_SEL_1010_GND
whismanoid 1:d57c1a2cb83c 1511 // @post AINcode[ainp]: measurement result LSB code
whismanoid 0:68e64068330f 1512 //
whismanoid 1:d57c1a2cb83c 1513 // @return ideal voltage calculated from raw LSB code and reference voltage
whismanoid 1:d57c1a2cb83c 1514 double MAX11410::Measure_Voltage(MAX11410_AINP_SEL_enum_t ainp, MAX11410_AINN_SEL_enum_t ainn)
whismanoid 0:68e64068330f 1515 {
whismanoid 0:68e64068330f 1516
whismanoid 0:68e64068330f 1517 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1518 // write8 0x0B MUX_CTRL0 = 0x0A to select AINP=AIN0 and AINN=GND
whismanoid 1:d57c1a2cb83c 1519 Configure_MUX_CTRL0((uint8_t)ainp, (uint8_t)ainn);
whismanoid 1:d57c1a2cb83c 1520
whismanoid 1:d57c1a2cb83c 1521 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1522 // write8 0x09 CTRL to select reference REF2P/REF2N; Data Format = Bipolar 2's Complement
whismanoid 1:d57c1a2cb83c 1523 Configure_CTRL(/*extclk*/ 0, /*u_bn*/ 0, /*format*/ 0,
whismanoid 1:d57c1a2cb83c 1524 /*refbufp_en*/ 0, /*refbufn_en*/ 0,
whismanoid 1:d57c1a2cb83c 1525 /*ref_sel*/ (uint8_t)REF_SEL_010_REF2P_REF2N);
whismanoid 1:d57c1a2cb83c 1526
whismanoid 1:d57c1a2cb83c 1527 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1528 // write8 0x0E PGA
whismanoid 2:eac67184cc0c 1529 Configure_PGA((uint8_t) /* MAX11410_SIG_PATH_enum_t:: */ SIG_PATH_00_BUFFERED,
whismanoid 2:eac67184cc0c 1530 (uint8_t) /* MAX11410_GAIN_enum_t:: */ GAIN_000_1);
whismanoid 1:d57c1a2cb83c 1531
whismanoid 1:d57c1a2cb83c 1532 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1533 // write8 0x08 FILTER = 0x34 to select RATE_0100, LINEF_11_SINC4 60SPS (given CONV_TYPE_01_Continuous)
whismanoid 2:eac67184cc0c 1534 Configure_FILTER((uint8_t) /* MAX11410::MAX11410_LINEF_enum_t:: */ LINEF_11_SINC4,
whismanoid 2:eac67184cc0c 1535 (uint8_t) /* MAX11410::MAX11410_RATE_enum_t:: */ RATE_0100);
whismanoid 1:d57c1a2cb83c 1536
whismanoid 1:d57c1a2cb83c 1537 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1538 // write8 0x01 CONV_START = 0x01 to set Conversion Mode = Continuous
whismanoid 1:d57c1a2cb83c 1539 RegWrite(CMD_r000_0001_xddd_xxdd_CONV_START, 0x01);
whismanoid 0:68e64068330f 1540
whismanoid 0:68e64068330f 1541 //----------------------------------------
whismanoid 0:68e64068330f 1542 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1543 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1544
whismanoid 0:68e64068330f 1545 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1546 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0): AINcode[ainp] = measurement
whismanoid 1:d57c1a2cb83c 1547 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &AINcode[((int)ainp & 0x0F)]);
whismanoid 1:d57c1a2cb83c 1548 data0 = AINcode[((int)ainp & 0x0F)];
whismanoid 0:68e64068330f 1549
whismanoid 0:68e64068330f 1550 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1551 // ideal voltage calculated from raw LSB code and reference voltage
whismanoid 1:d57c1a2cb83c 1552 return VoltageOfCode(AINcode[((int)ainp & 0x0F)]);
whismanoid 0:68e64068330f 1553 }
whismanoid 0:68e64068330f 1554
whismanoid 0:68e64068330f 1555 //----------------------------------------
whismanoid 0:68e64068330f 1556 // Configure Measurement for Resistive Temperature Device (RTD).
whismanoid 0:68e64068330f 1557 //
whismanoid 0:68e64068330f 1558 // Example code for typical RTD measurement.
whismanoid 0:68e64068330f 1559 //
whismanoid 1:d57c1a2cb83c 1560 // @pre external connection REF1P-REF1N is a reference resistor
whismanoid 1:d57c1a2cb83c 1561 // @param[in] rtd_iout = channel RTD high side force, default=MAX11410::IDAC0_SEL_enum_t::IDAC0_SEL_0111_AIN7
whismanoid 1:d57c1a2cb83c 1562 // @param[in] rtd_ainp = channel RTD high side sense, default=MAX11410::AINP_SEL_enum_t::AINP_SEL_1000_AIN8
whismanoid 1:d57c1a2cb83c 1563 // @param[in] rtd_ainn = channel RTD low side, default=MAX11410::AINN_SEL_enum_t::AINN_SEL_1001_AIN9
whismanoid 1:d57c1a2cb83c 1564 // @post AINcode[rtd_ainp]: measurement result LSB code
whismanoid 0:68e64068330f 1565 //
whismanoid 0:68e64068330f 1566 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1567 uint8_t MAX11410::Configure_RTD(MAX11410_AINP_SEL_enum_t rtd_iout, MAX11410_AINP_SEL_enum_t rtd_ainp, MAX11410_AINN_SEL_enum_t rtd_ainn)
whismanoid 0:68e64068330f 1568 {
whismanoid 0:68e64068330f 1569
whismanoid 0:68e64068330f 1570 //----------------------------------------
whismanoid 0:68e64068330f 1571 // warning -- WIP work in progress
whismanoid 0:68e64068330f 1572 #warning "Not Implemented Yet: MAX11410::Configure_RTD..."
whismanoid 0:68e64068330f 1573
whismanoid 0:68e64068330f 1574 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1575 // write8 0x08 FILTER = 0x34 to select RATE_0100, LINEF_11_SINC4 60SPS (given CONV_TYPE_01_Continuous)
whismanoid 2:eac67184cc0c 1576 Configure_FILTER((uint8_t) /* MAX11410::MAX11410_LINEF_enum_t:: */ LINEF_11_SINC4,
whismanoid 2:eac67184cc0c 1577 (uint8_t) /* MAX11410::MAX11410_RATE_enum_t:: */ RATE_0100);
whismanoid 1:d57c1a2cb83c 1578
whismanoid 1:d57c1a2cb83c 1579 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1580 // write8 0x09 CTRL to select reference resistor REF1P/REF1N; Data Format = Unipolar
whismanoid 1:d57c1a2cb83c 1581 Configure_CTRL(/*extclk*/ 0, /*u_bn*/ 1, /*format*/ 0,
whismanoid 1:d57c1a2cb83c 1582 /*refbufp_en*/ 0, /*refbufn_en*/ 0,
whismanoid 1:d57c1a2cb83c 1583 /*ref_sel*/ (uint8_t)REF_SEL_001_REF1P_REF1N);
whismanoid 1:d57c1a2cb83c 1584
whismanoid 1:d57c1a2cb83c 1585 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1586 // write8 0x0A SOURCE = 0x0B to select IDAC_MODE 400uA; AIN9=2.000V, AIN8(PT100)=2.040V, AIN8(PT1000)=2.400V
whismanoid 1:d57c1a2cb83c 1587 Configure_SOURCE((uint8_t)VBIAS_MODE_00_Active,
whismanoid 1:d57c1a2cb83c 1588 (uint8_t)BRN_MODE_00_disabled,
whismanoid 1:d57c1a2cb83c 1589 (uint8_t)IDAC_MODE_1011_400uA);
whismanoid 1:d57c1a2cb83c 1590
whismanoid 1:d57c1a2cb83c 1591 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1592 // write8 0x0B MUX_CTRL0 = 0x89 to select AINP=AIN8 and AINN=AIN9
whismanoid 1:d57c1a2cb83c 1593 Configure_MUX_CTRL0((uint8_t)rtd_ainp, (uint8_t)rtd_ainn);
whismanoid 1:d57c1a2cb83c 1594
whismanoid 1:d57c1a2cb83c 1595 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1596 // write8 0x0C MUX_CTRL1 = 0xF7 to select IDAC1_SEL=NC, IDAC0_SEL=AIN7
whismanoid 1:d57c1a2cb83c 1597 Configure_MUX_CTRL1((uint8_t)IDAC1_SEL_1111_unconnected, (uint8_t)rtd_iout);
whismanoid 1:d57c1a2cb83c 1598
whismanoid 1:d57c1a2cb83c 1599 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1600 // write8 0x0E PGA
whismanoid 2:eac67184cc0c 1601 Configure_PGA((uint8_t) /* MAX11410_SIG_PATH_enum_t:: */ SIG_PATH_10_PGA,
whismanoid 2:eac67184cc0c 1602 (uint8_t) /* MAX11410_GAIN_enum_t:: */ GAIN_010_4);
whismanoid 1:d57c1a2cb83c 1603
whismanoid 1:d57c1a2cb83c 1604 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1605 // write8 0x01 CONV_START = 0x01 to set Conversion Mode = Continuous
whismanoid 1:d57c1a2cb83c 1606 RegWrite(CMD_r000_0001_xddd_xxdd_CONV_START, 0x01);
whismanoid 1:d57c1a2cb83c 1607
whismanoid 1:d57c1a2cb83c 1608 //----------------------------------------
whismanoid 0:68e64068330f 1609 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1610 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1611
whismanoid 0:68e64068330f 1612 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1613 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0): AINcode[rtd_ainp] = measurement
whismanoid 1:d57c1a2cb83c 1614 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &AINcode[((int)rtd_ainp & 0x0F)]);
whismanoid 1:d57c1a2cb83c 1615 data0 = AINcode[((int)rtd_ainp & 0x0F)];
whismanoid 0:68e64068330f 1616
whismanoid 0:68e64068330f 1617 //----------------------------------------
whismanoid 0:68e64068330f 1618 // success
whismanoid 0:68e64068330f 1619 return 1;
whismanoid 0:68e64068330f 1620 }
whismanoid 0:68e64068330f 1621
whismanoid 0:68e64068330f 1622 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1623 // Menu item 'R'
whismanoid 0:68e64068330f 1624 // Trigger Measurement for Resistive Temperature Device (RTD).
whismanoid 0:68e64068330f 1625 //
whismanoid 0:68e64068330f 1626 // Example code for typical RTD measurement.
whismanoid 0:68e64068330f 1627 //
whismanoid 1:d57c1a2cb83c 1628 // @pre external connection REF1P-REF1N is a reference resistor
whismanoid 1:d57c1a2cb83c 1629 // @pre VRef_REF1 = reference resistance in ohms, default=4999
whismanoid 1:d57c1a2cb83c 1630 // @param[in] rtd_iout = channel RTD high side force, default=AINP_SEL_0111_AIN7
whismanoid 1:d57c1a2cb83c 1631 // @param[in] rtd_ainp = channel RTD high side sense, default=AINP_SEL_1000_AIN8
whismanoid 1:d57c1a2cb83c 1632 // @param[in] rtd_ainn = channel RTD low side, default=AINN_SEL_1001_AIN9
whismanoid 1:d57c1a2cb83c 1633 // @post AINcode[rtd_ainp]: measurement result LSB code
whismanoid 0:68e64068330f 1634 //
whismanoid 1:d57c1a2cb83c 1635 // @return ideal voltage calculated from raw LSB code and reference voltage
whismanoid 1:d57c1a2cb83c 1636 double MAX11410::Measure_RTD(MAX11410_AINP_SEL_enum_t rtd_iout, MAX11410_AINP_SEL_enum_t rtd_ainp, MAX11410_AINN_SEL_enum_t rtd_ainn)
whismanoid 0:68e64068330f 1637 {
whismanoid 0:68e64068330f 1638
whismanoid 0:68e64068330f 1639 //----------------------------------------
whismanoid 0:68e64068330f 1640 // warning -- WIP work in progress
whismanoid 0:68e64068330f 1641 #warning "Not Implemented Yet: MAX11410::Measure_RTD..."
whismanoid 0:68e64068330f 1642
whismanoid 0:68e64068330f 1643 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1644 // write8 0x08 FILTER = 0x34 to select RATE_0100, LINEF_11_SINC4 60SPS (given CONV_TYPE_01_Continuous)
whismanoid 2:eac67184cc0c 1645 Configure_FILTER((uint8_t) /* MAX11410::MAX11410_LINEF_enum_t:: */ LINEF_11_SINC4,
whismanoid 2:eac67184cc0c 1646 (uint8_t) /* MAX11410::MAX11410_RATE_enum_t:: */ RATE_0100);
whismanoid 1:d57c1a2cb83c 1647
whismanoid 1:d57c1a2cb83c 1648 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1649 // write8 0x09 CTRL to select reference resistor REF1P/REF1N; Data Format = Unipolar
whismanoid 1:d57c1a2cb83c 1650 Configure_CTRL(/*extclk*/ 0, /*u_bn*/ 1, /*format*/ 0,
whismanoid 1:d57c1a2cb83c 1651 /*refbufp_en*/ 0, /*refbufn_en*/ 0,
whismanoid 1:d57c1a2cb83c 1652 /*ref_sel*/ (uint8_t)REF_SEL_001_REF1P_REF1N);
whismanoid 1:d57c1a2cb83c 1653
whismanoid 1:d57c1a2cb83c 1654 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1655 // write8 0x0A SOURCE = 0x0B to select IDAC_MODE 400uA; AIN9=2.000V, AIN8(PT100)=2.040V, AIN8(PT1000)=2.400V
whismanoid 1:d57c1a2cb83c 1656 Configure_SOURCE(VBIAS_MODE_00_Active, BRN_MODE_00_disabled, IDAC_MODE_1011_400uA);
whismanoid 1:d57c1a2cb83c 1657
whismanoid 1:d57c1a2cb83c 1658 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1659 // write8 0x0B MUX_CTRL0 = 0x89 to select AINP=AIN8 and AINN=AIN9
whismanoid 1:d57c1a2cb83c 1660 Configure_MUX_CTRL0((uint8_t)rtd_ainp, (uint8_t)rtd_ainn);
whismanoid 1:d57c1a2cb83c 1661
whismanoid 1:d57c1a2cb83c 1662 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1663 // write8 0x0C MUX_CTRL1 = 0xF7 to select IDAC1_SEL=NC, IDAC0_SEL=AIN7
whismanoid 1:d57c1a2cb83c 1664 Configure_MUX_CTRL1((uint8_t)IDAC1_SEL_1111_unconnected, (uint8_t)rtd_iout);
whismanoid 1:d57c1a2cb83c 1665
whismanoid 1:d57c1a2cb83c 1666 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1667 // write8 0x0E PGA
whismanoid 2:eac67184cc0c 1668 Configure_PGA((uint8_t) /* MAX11410_SIG_PATH_enum_t:: */ SIG_PATH_10_PGA,
whismanoid 2:eac67184cc0c 1669 (uint8_t) /* MAX11410_GAIN_enum_t:: */ GAIN_001_2);
whismanoid 1:d57c1a2cb83c 1670
whismanoid 1:d57c1a2cb83c 1671 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1672 // write8 0x01 CONV_START = 0x01 to set Conversion Mode = Continuous
whismanoid 1:d57c1a2cb83c 1673 RegWrite(CMD_r000_0001_xddd_xxdd_CONV_START, 0x01);
whismanoid 1:d57c1a2cb83c 1674
whismanoid 1:d57c1a2cb83c 1675 //----------------------------------------
whismanoid 0:68e64068330f 1676 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1677 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1678
whismanoid 0:68e64068330f 1679 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1680 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0): AINcode[ainp] = measurement
whismanoid 1:d57c1a2cb83c 1681 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &AINcode[((int)rtd_ainp & 0x0F)]);
whismanoid 1:d57c1a2cb83c 1682 data0 = AINcode[((int)rtd_ainp & 0x0F)];
whismanoid 0:68e64068330f 1683
whismanoid 0:68e64068330f 1684 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1685 // warning -- WIP work in progress
whismanoid 1:d57c1a2cb83c 1686 #warning "Measure_RTD need calculate RTD return value from raw data, return R/RREF? R? T(R,R0)?"
whismanoid 1:d57c1a2cb83c 1687
whismanoid 1:d57c1a2cb83c 1688 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1689 // ideal voltage calculated from raw LSB code and VRef_REF1 reference resistance in ohms
whismanoid 1:d57c1a2cb83c 1690 double Rx = VoltageOfCode(AINcode[((int)rtd_ainp & 0x0F)]);
whismanoid 1:d57c1a2cb83c 1691 // TODO: calculate temperature from the measured resistance Rx
whismanoid 1:d57c1a2cb83c 1692 return Rx;
whismanoid 0:68e64068330f 1693 }
whismanoid 0:68e64068330f 1694
whismanoid 0:68e64068330f 1695 //----------------------------------------
whismanoid 0:68e64068330f 1696 // Configure Measurement for Thermocouple
whismanoid 0:68e64068330f 1697 //
whismanoid 0:68e64068330f 1698 // Example code for typical Thermocouple measurement.
whismanoid 0:68e64068330f 1699 //
whismanoid 1:d57c1a2cb83c 1700 // @param[in] tc_ainp = channel of Thermocouple high side, default=AINP_SEL_0101_AIN5
whismanoid 1:d57c1a2cb83c 1701 // @param[in] tc_ainn = channel of Thermocouple low side, default=AINN_SEL_0110_AIN6
whismanoid 1:d57c1a2cb83c 1702 // @param[in] rtd_iout = channel RTD high side force, default=AINP_SEL_0111_AIN7
whismanoid 1:d57c1a2cb83c 1703 // @param[in] rtd_ainp = channel RTD high side sense, default=AINP_SEL_1000_AIN8
whismanoid 1:d57c1a2cb83c 1704 // @param[in] rtd_ainn = channel RTD low side, default=AINN_SEL_1001_AIN9
whismanoid 1:d57c1a2cb83c 1705 // @post AINcode[tc_ainp]: measurement result LSB code
whismanoid 0:68e64068330f 1706 //
whismanoid 0:68e64068330f 1707 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1708 uint8_t MAX11410::Configure_Thermocouple(MAX11410_AINP_SEL_enum_t tc_ainp, MAX11410_AINN_SEL_enum_t tc_ainn, MAX11410_AINP_SEL_enum_t rtd_iout, MAX11410_AINP_SEL_enum_t rtd_ainp, MAX11410_AINN_SEL_enum_t rtd_ainn)
whismanoid 0:68e64068330f 1709 {
whismanoid 0:68e64068330f 1710
whismanoid 0:68e64068330f 1711 //----------------------------------------
whismanoid 0:68e64068330f 1712 // warning -- WIP work in progress
whismanoid 0:68e64068330f 1713 #warning "Not Implemented Yet: MAX11410::Configure_Thermocouple..."
whismanoid 0:68e64068330f 1714
whismanoid 0:68e64068330f 1715 //----------------------------------------
whismanoid 0:68e64068330f 1716 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1717 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1718
whismanoid 0:68e64068330f 1719 //----------------------------------------
whismanoid 0:68e64068330f 1720 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0)
whismanoid 0:68e64068330f 1721 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &data0);
whismanoid 0:68e64068330f 1722
whismanoid 0:68e64068330f 1723 //----------------------------------------
whismanoid 0:68e64068330f 1724 // success
whismanoid 0:68e64068330f 1725 return 1;
whismanoid 0:68e64068330f 1726 }
whismanoid 0:68e64068330f 1727
whismanoid 0:68e64068330f 1728 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1729 // Menu item 'T'
whismanoid 0:68e64068330f 1730 // Trigger Measurement for Thermocouple
whismanoid 0:68e64068330f 1731 //
whismanoid 0:68e64068330f 1732 // Example code for typical Thermocouple measurement.
whismanoid 1:d57c1a2cb83c 1733 // An RTD measures the "cold junction" where TC connects to the board,
whismanoid 1:d57c1a2cb83c 1734 // and the TC measures the temperature difference above the cold junction.
whismanoid 0:68e64068330f 1735 //
whismanoid 1:d57c1a2cb83c 1736 // @param[in] tc_ainp = channel of Thermocouple high side, default=AINP_SEL_0101_AIN5
whismanoid 1:d57c1a2cb83c 1737 // @param[in] tc_ainn = channel of Thermocouple low side, default=AINN_SEL_0110_AIN6
whismanoid 1:d57c1a2cb83c 1738 // @param[in] rtd_iout = channel RTD high side force, default=AINP_SEL_0111_AIN7
whismanoid 1:d57c1a2cb83c 1739 // @param[in] rtd_ainp = channel RTD high side sense, default=AINP_SEL_1000_AIN8
whismanoid 1:d57c1a2cb83c 1740 // @param[in] rtd_ainn = channel RTD low side, default=AINN_SEL_1001_AIN9
whismanoid 1:d57c1a2cb83c 1741 // @post AINcode[tc_ainp]: measurement result LSB code
whismanoid 0:68e64068330f 1742 //
whismanoid 0:68e64068330f 1743 // @return 1 on success; 0 on failure
whismanoid 1:d57c1a2cb83c 1744 double MAX11410::Measure_Thermocouple(MAX11410_AINP_SEL_enum_t tc_ainp, MAX11410_AINN_SEL_enum_t tc_ainn, MAX11410_AINP_SEL_enum_t rtd_iout, MAX11410_AINP_SEL_enum_t rtd_ainp, MAX11410_AINN_SEL_enum_t rtd_ainn)
whismanoid 0:68e64068330f 1745 {
whismanoid 0:68e64068330f 1746
whismanoid 0:68e64068330f 1747 //----------------------------------------
whismanoid 0:68e64068330f 1748 // warning -- WIP work in progress
whismanoid 0:68e64068330f 1749 #warning "Not Implemented Yet: MAX11410::Measure_Thermocouple..."
whismanoid 0:68e64068330f 1750
whismanoid 0:68e64068330f 1751 //----------------------------------------
whismanoid 0:68e64068330f 1752 // read24 0x80|0x38 STATUS (%SW 0xB8 0 0 0)
whismanoid 0:68e64068330f 1753 RegRead(CMD_r011_1000_dddd_dddd_dddd_dddd_dxxx_dddd_STATUS, &status);
whismanoid 0:68e64068330f 1754
whismanoid 0:68e64068330f 1755 //----------------------------------------
whismanoid 0:68e64068330f 1756 // read24 0x80|0x30 DATA0 (%SW 0xB0 0 0 0)
whismanoid 0:68e64068330f 1757 RegRead(CMD_r011_0000_dddd_dddd_dddd_dddd_dddd_dddd_DATA0, &data0);
whismanoid 0:68e64068330f 1758
whismanoid 0:68e64068330f 1759 //----------------------------------------
whismanoid 1:d57c1a2cb83c 1760 // ideal voltage calculated from raw LSB code and reference voltage
whismanoid 1:d57c1a2cb83c 1761 return VoltageOfCode(AINcode[((int)rtd_ainp & 0x0F)]);
whismanoid 0:68e64068330f 1762 }
whismanoid 0:68e64068330f 1763
whismanoid 0:68e64068330f 1764
whismanoid 0:68e64068330f 1765 // End of file