Created
October 26, 2016 17:36
-
-
Save loganwilliams/9ec1a7f977695e35196ac4169b85e492 to your computer and use it in GitHub Desktop.
Revisions
-
loganwilliams created this gist
Oct 26, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,75 @@ from periphery import I2C import time import numpy as np import copy import pickle i2c = I2C("/dev/i2c-1") device_address = 0x1A def generate_command(register, value): return [I2C.Message([register, value])] def send_command(cmd) i2c.transfer(device_addess, cmd) time.sleep(0.005) # sleep for 5 ms wakeup = generate_command(0x01, 0x01) # wake up the device adc_res = generate_command(0x03, 0x0C) # set ADC resolution to 16 bits bias_top = generate_command(0x04, 0x0C) # bias_bottom = generate_command(0x05, 0x0C) # clk_speed = generate_command(0x06, 0x14) cm_top = generate_command(0x07, 0x0C) cm_bottom = generate_command(0x08, 0x0C) pull_ups = generate_command(0x09, 0x88) def generate_expose_block_command(block): return generate_command(0x01, 0x09 + (block << 4)) print("Sending commands") send_command(wakeup) send_command(adc_res) send_command(bias_top) send_command(bias_bottom) send_command(clk_speed) send_command(cm_top) send_command(cm_bottom) send_command(pull_ups) pixel_values = np.zeros(1024) ptats = np.zeros(8) for block in range(4): print("Exposing block " + str(block)) send_command(generate_expose_block_command(block)) query = [I2C.Message([0x02]), I2C.Message([0x00], read=True)] expected = 1 + (block << 2) done = False while not done: i2c.transfer(device_addess, query) if not (query[1].data == expected): print("Not ready, received " + str(query[1].data) + ", expected " + str(expected)) time.sleep(0.03) else: done = True top_read_block = [I2C.Message([0x0A]), I2C.Message([0x00]*258, read=True)] i2c.transfer(device_address, top_read_block) top_data = read_block[1].data[1::2] + (read_block[1].data[0::2] << 8) bottom_read_block = [I2C.Message([0x0B]), I2C.Message([0x00]*258, read=True)] i2c.transfer(device_address, bottom_read_block) bottom_data = read_block[1].data[1::2] + (read_block[1].data[0::2] << 8) pixel_values[(0+block*128):(127+block*128)] = copy.copy(top_data[1:]) pixel_values[(896-block*128):(1024-block*128)] = copy.copy(np.flipud(bottom_data[1:])) ptats[block] = top_data[0] ptats[7-block] = bottom_data[0] pickle.dump((pixel_values, ptats), open("capture.p", "wb"))