import pigpio import time CLK_PIN = 4 CLK_FREQ = 1000000 RDY_PIN = 16 SPI_FREQ = 1000000 mode = 1 spi_handle = None REG_DEVICE_CONTROL_1 = 0x09 REG_DEVICE_CONTROL_2 = 0x0F REG_ADC_DATA_RESULT = 0x00 REG_ADC_CONTROL_1 = 0x01 REG_ADC_CONTROL_2 = 0x10 REG_ISW_MUX = 0x0A REG_VSENSE_MUX = 0x0B REG_DAC_FREQ = 0x0E REG_MISC_1 = 0x02 REG_MISC_2 = 0x03 REG_MISC_3 = 0x1A REG_WEIGHT_SCALE = 0x0D REG_IQ_MODE_ENABLE = 0x0C pi = pigpio.pi() def turn_on_clock(): pi.hardware_clock(CLK_PIN, CLK_FREQ) def turn_off_clock(): pi.hardware_clock(CLK_PIN, 0) def spi_init(): global spi_handle spi_handle = pi.spi_open(0, SPI_FREQ, mode) # print(spi_handle) def read(register): packet = [] packet.append(0x20 | (0x1f & register)) packet.append(0x00) packet.append(0x00) (count, data) = pi.spi_xfer(spi_handle, packet) #print("read sent "+(','.join(format(p, "04X") for p in packet))) if count < 3: print("ERROR: read received "+str(count)+" bytes: "+(','.join(format(d, "#04X") for d in data))) print("read received "+str(count)+" bytes: "+(','.join(format(d, "#04X") for d in data))) return (0xff00 & (data[1]<<8)) | (0xff & packet[2]) def write(register, data): packet = [] packet.append(0x1f & register); packet.append(0xff & (data >> 8)); packet.append(0xff & data); #print(','.join(format(p, "#04X") for p in packet)) #print(spi_handle) (count, data) = pi.spi_xfer(spi_handle, packet) print("write sent "+(','.join(format(p, "04X") for p in packet))) if count < 3: print("ERROR: write received "+str(count)+" bytes: "+(','.join(format(d, "#04X") for d in data))) # print("write received "+str(count)+" bytes: "+(','.join(format(d, "#04X") for d in data))) def measure(): write(REG_ADC_CONTROL_1, 0xC1C0) while pi.read(RDY_PIN) > 0: time.sleep(0.001) print("shlep") data = read(REG_ADC_DATA_RESULT) write(REG_ADC_CONTROL_1, 0x41C0) return data def calibrate(): write(REG_VSENSE_MUX, 0x0201) write(REG_ISW_MUX, 0x0201) code1 = measure() write(REG_VSENSE_MUX, 0x0202) write(REG_ISW_MUX, 0x0202) code2 = measure() print("Calibrate: code1: "+str(code1)+", code2: "+str(code2)) def main(): turn_on_clock() pi.set_mode(RDY_PIN, pigpio.INPUT) spi_init() #board init print("init registers:") write(REG_MISC_1, 0x0000) write(REG_MISC_2, 0xFFFF); write(REG_DEVICE_CONTROL_1, 0x6006); write(REG_DAC_FREQ, 0x0032); write(REG_ADC_CONTROL_2, 0x0063); write(REG_MISC_3, 0x0030); write(REG_WEIGHT_SCALE, 0x0000); write(REG_IQ_MODE_ENABLE, 0x0000); write(REG_DEVICE_CONTROL_2, 0x0000); print("done with init registers\n") calibrate() print(spi_handle) #time.sleep(5) pi.spi_close(spi_handle) turn_off_clock() main()