{{ ADS1118 }} CON CLK = 23 CS = 22 DOUT = 21 DIN = 20 _clkmode = xtal1 + pll16x ' set clock mode _xinfreq = 5_000_000 ' set external crystal freqCON propTX = 30 propRX = 31 baudrate = 115_200 ' Used by "SS" bit START_NOW = 1 << 15 ' Start of conversion in single-shot mode ' Input multiplexer configuration selection for bits "MUX" ' Differential inputs DIFF_0_1 = %000 << 12 ' Differential input: Vin=A0-A1 DIFF_0_3 = %001 << 12 ' Differential input: Vin=A0-A3 DIFF_1_3 = %010 << 12 ' Differential input: Vin=A1-A3 DIFF_2_3 = %011 << 12 ' Differential input: Vin=A2-A3 ' Single ended inputs AIN_0 = %100 << 12 ' Single ended input: Vin=A0 AIN_1 = %101 << 12 ' Single ended input: Vin=A1 AIN_2 = %110 << 12 ' Single ended input: Vin=A2 AIN_3 = %111 << 12 ' Single ended input: Vin=A3 ' Full scale range (FSR) selection by "PGA" bits. FSR_6144 = %000 << 9 ' Range: ±6.144 v. LSB SIZE = 187.5μVFSR is +- 6.144 V FSR_4096 = %001 << 9 ' Range: ±4.096 v. LSB SIZE = 125μV FSR_2048 = %010 << 9 ' Range: ±2.048 v. LSB SIZE = 62.5μV ***DEFAULT FSR_1024 = %011 << 9 ' Range: ±1.024 v. LSB SIZE = 31.25μV FSR_512 = %100 << 9 ' Range: ±0.512 v. LSB SIZE = 15.625μV FSR_256 = %101 << 9 ' Range: ±0.256 v. LSB SIZE = 7.8125μV ' Used by "MODE" bit CONTINUOUS = %0 << 8 ' Continuous conversion mode SINGLE_SHOT = %1 << 8 ' Single-shot conversion and power down mode ' Sampling rate selection by "DR" bits. RATE8SPS = %000 << 5 ' 8 samples/s, Tconv=125ms RATE16SPS = %001 << 5 ' 16 samples/s, Tconv=62.5ms RATE32SPS = %010 << 5 ' 32 samples/s, Tconv=31.25ms RATE64SPS = %011 << 5 ' 64 samples/s, Tconv=15.625ms RATE128SPS = %100 << 5 ' 128 samples/s, Tconv=7.8125ms ***DEFAULT RATE250SPS = %101 << 5 ' 250 samples/s, Tconv=4ms RATE475SPS = %110 << 5 ' 475 samples/s, Tconv=2.105ms RATE860SPS = %111 << 5 ' 860 samples/s, Tconv=1.163ms ' Used by "TS_MODE" bit ADC_MODE = %0 << 4 ' External (inputs) voltage reading mode TEMP_MODE = %1 << 4 ' Internal temperature sensor reading mode ' Used by "PULL_UP_EN" bit DOUT_PULLUP = %1 << 3 ' Internal pull-up resistor enabled for DOUT ***DEFAULT DOUT_NO_PULLUP = %0 << 3 ' Internal pull-up resistor disabled ' Used by "NOP" bits VALID_CFG = %01 << 1 ' Data will be written to Config register NO_VALID_CFG = %00 << 1 ' Data won't be written to Config register ' Used by "Reserved" bit RESERVED = %1 ' Its value is always 1, reserved LSB = 0 MSB = 1 DELAY = 500 FRAMESIZE = 16 SPIMODE = 1 MSBPRE = 0 MSBFIRST = 5 OBJ debug : "FullDuplexSerial" adc : "SPI_spin" f : "Float32" fs : "FloatString" VAR long data0[32] long config0[16] long data1[16] long config1[16] PUB Main | temp, volts0, volts1, tmp, vlts config0 := START_NOW | DIFF_0_1 | FSR_256 | SINGLE_SHOT | RATE8SPS | ADC_MODE | DOUT_PULLUP | VALID_CFG | RESERVED config1 := START_NOW | DIFF_2_3 | FSR_256 | SINGLE_SHOT | RATE8SPS | ADC_MODE | DOUT_PULLUP | VALID_CFG | RESERVED adc.start(15,1) f.start debug.start(propRX, propTX, 0, baudrate) debug.str(string("Config register0 is: ")) debug.bin(config0,16) debug.tx(10) debug.str(string("Config register1 is: ")) debug.bin(config1,16) debug.tx(10) repeat data0 := 0 data1 :=0 LOW(CS) adc.shiftout(DIN,CLK,MSBFIRST,16,config0) LOW(CLK) HIGH(CS) waitcnt(clkfreq / 1000 + cnt) LOW(CS) data0 := adc.shiftin(DOUT,CLK,MSBPRE,16) LOW(CLK) HIGH(CS) waitcnt(clkfreq + cnt) LOW(CS) adc.shiftout(DIN,CLK,MSBFIRST,16,config1) LOW(CLK) HIGH(CS) waitcnt(clkfreq / 1000 + cnt) LOW(CS) data1 := adc.shiftin(DOUT,CLK,MSBPRE,16) LOW(CLK) HIGH(CS) debug.dec(data0) debug.tx(10) debug.dec(data1) debug.tx(10) volts0 := data0 * 8 - data0 * 3 / 16 volts1 := data1 * 8 - data1 * 3 / 16 'vlts := f.FFloat(data) 'vlts := f.FMul(vlts,0.0078125) 'vlts := f.FDiv(vlts,1000.0) 'debug.Str (fs.floattostring(vlts)) debug.dec(volts0) debug.tx(10) debug.dec(volts1) debug.tx(10) debug.tx(10) waitcnt(clkfreq + cnt) PUB HIGH(Pin) dira[Pin]~~ outa[Pin]~~ PUB LOW(Pin) dira[Pin]~~ outa[Pin]~