-
-
Save jamesshannon/abb918f58c88f0f52cc140ae1fd8bd67 to your computer and use it in GitHub Desktop.
Test script for capturing data from Heimman HTPA 32x32d
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 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