Created
October 26, 2016 17:36
-
-
Save loganwilliams/9ec1a7f977695e35196ac4169b85e492 to your computer and use it in GitHub Desktop.
Test script for capturing data from Heimman HTPA 32x32d
This file contains 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 characters
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")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment