控制larpix芯片

larpix-control的Python项目详细描述


LARPIX控制

控制larpix芯片

documentation status生成状态

设置和安装

这段代码用于Python2.7+和Python3.6+。

使用从pip安装larpix控件

pip install larpix-control

要将名称空间返回到larpix之前的状态,只需 运行pip uninstall larpix control。如果你想下载代码 你自己,你可以。只需从 存储库。

测试

您可以运行测试来说服自己软件的工作原理是 预期。在安装这个包之后,您可以运行测试 使用简单的命令pytest

您可以阅读这些测试以了解如何调用所有 功能。

文件结构

Larpix软件包包含:

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json

最小工作示例

所以你不是那种辅导的人。这是一个最低限度的工作 供您使用的示例:

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]

教程

本教程将介绍如何使用 拉皮克斯控制。

要访问包内容,请使用以下两种方法之一import 声明:

importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace

本教程的其余部分将假设您已经导入了所有的核心larpix 通过a从larpix.larpix import*命令初始化。

创建larpix控制器

larpix控制器翻译高级思想,如"read 配置寄存器10"进入与LARPIX ASIC之间的通信, 并将接收到的数据解释为可用格式。

控制器对象通过IO接口与LARPIX ASIC通信。 当前可用的IO接口有serialportzmq\u IOfakeio。在本教程中,我们将使用fakeio,但是 代码仍将与其他IO的正确初始化版本一起工作 接口。

使用

fromlarpix.io.fakeioimportFakeIOfromlarpix.logger.stdout_loggerimportStdoutLoggercontroller=Controller()controller.io=FakeIO()controller.logger=StdoutLogger(buffer_length=0)controller.logger.enable()

fakeio对象模拟一个真正的io接口,用于测试目的。 它将输出指向stdout(即打印输出),然后 从手动更新的队列获取其输入。在每个结尾 本教程的相关章节将是添加预期 输出到队列。你每次跑步都得重新排队 代码。

类似地,stdoutlogger模拟真实的记录器接口进行测试。它 将读/写命令的格式良好的记录打印到stdout every 缓冲区长度数据包。记录器接口需要启用 将存储消息之前的记录器。在结束python会话之前, 应禁用记录器以刷新缓冲区中存储的所有剩余数据包。

设置larpix芯片

芯片对象表示实际的larpix asic。对于你想要的每个asic 与通信,创建一个larpix芯片对象并将其添加到 控制器。

chipid=5chip_key='1-1-5'chip5=controller.add_chip(chip_key)chip5=controller.get_chip(chip_key)

chip_键字段指定控制器的必要信息。io 对象将数据包路由到/从芯片路由。此密钥如何映射到 物理芯片为每个larpix.io类分别实现。

密钥本身由3个1字节的整数值组成,这些整数值表示 低层In larpix读数:

  • IO组:这是最高的层,代表一个控制系统 与多个IO通道通信

  • IO通道:这是中间层,代表一个单独的mosi/miso 配对< /P>

  • 芯片ID:这是最低层,表示 mosi/miso网络

如果要直接与芯片密钥交互,可以使用 一个有效的键字符串(三个1字节整数,用破折号分隔,例如'1-1-1')。 请注意,0和255的ID是为特殊功能保留的。

fromlarpix.larpiximportKeyexample_key=Key('1-2-3')

您可以通过许多有用的方法从密钥中获取相关信息 属性:

example_key.io_group# 1example_key.io_channel# 2example_key.chip_id# 3example_key.to_dict()# returns a dict with the above keys / values

如果在脚本中使用键,建议您生成键 通过key.from_dict()方法保护密钥不被更新 格式化。

您可以阅读文档了解有关功能的更多信息。

调整larpix芯片的配置

每个芯片对象在软件中管理自己的配置。 可以使用芯片的属性按名称调整配置 配置:

chip5.config.global_threshold=35# entire register = 1 numberchip5.config.periodic_reset=1# one bit as part of a registerchip5.config.channel_mask[20]=1# one bit per channel

值被验证,无效值将引发异常。

注意:改变芯片对象的配置不会改变 ASIC上的配置。

设置配置后,必须将新值发送到larpix 亚瑟士。有一种合适的控制器方法:

pip install larpix-control
0

可以使用配置对象查找寄存器地址:

pip install larpix-control
1

对于扩展到多个寄存器的配置,相关的 属性将以\u addresses结尾。某些配置共享 单个寄存器,其属性中包含所有名称。查看 找到要查找的名称的文档或源代码。(或看 Larpix产品介绍。)

从larpix asics读取配置

LARPIX ASIC的当前配置状态可以通过 使用控制器发送"配置读取"请求:

pip install larpix-control
2

对只读某些寄存器实现的相同变体 与写作一样阅读。

LARPIX ASIC的响应存储起来以供检查。见 "检查接收到的数据"部分了解更多信息。

Fakeio队列代码:

pip install larpix-control
3

从LARPIX ASIC接收数据

当第一次初始化时,larpix控制器忽略并丢弃 它从larpix接收的所有数据。控制器必须激活 通过调用start_listening()。所有接收到的数据 在依赖于实现的队列或缓冲区中累积,具体取决于 在使用的IO接口上。要从缓冲区读取数据,请调用 controller的read()方法,它返回原始的bytestream 已接收的以及已被 从Bytestream中提取。要停止监听新数据,请致电 停止收听()。最后,将数据存储在控制器中 对象,调用store_packets方法。全部合计:

pip install larpix-control
4

阅读数据有一个共同的模式,即开始倾听, 然后定期签入新数据,然后在一定数量之后 时间已过,停止监听并将所有数据存储为一个 收集。方法run(timelimit,message)实现了这一点。

pip install larpix-control
5

第一个代码块的fakeio队列代码:

pip install larpix-control
6

第二个代码块的fakeio队列代码:

pip install larpix-control
7

检查接收到的数据

一旦数据存储在控制器中,它就可以在读取中使用 属性作为所有数据运行的列表。列表中的每个元素都是 packetcollection对象,其功能类似于数据包对象的列表 每个代表一个larpix包。

packetcollection对象可以像列表一样进行索引:

αααα18

可以打印packetcollections以显示数据包的内容 它们包含。为了防止无休止的滚动,只有前十个和后十个 显示数据包,并记录省略的数据包的数量。到 查看省略的数据包,使用感兴趣区域周围的切片。

pip install larpix-control
9

在交互式python中,返回的对象不是打印的,而是 它们的"表示"被打印出来(参见\u repr\u方法)。这个 packetcollections的表示是 数据包、"读取id"(也称为运行号)和消息 创建时与packetcollection关联。

单个LARPIX数据包

larpix包对象表示单个larpix uart包。他们 具有可用于检查或修改 包裹。

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
0

在内部,包被表示为一个位数组,并且 不同的属性使用python"properties"无缝转换 在位表示和更直观的整数之间 代表。位表示可以用 属性。

数据包对象不限制您调整 数据包类型不正确。例如,您可以创建一个数据包并 然后设置packet.register_address=5。这将调整数据包 与配置包的"寄存器地址"相对应的位 区域,这可能不是您想要的数据包。

数据包有一个奇偶校验位,它强制奇偶校验,即 包中的所有单个位都必须是奇数。宇称 使用奇偶校验位值属性可以如上所述访问位。 正确的奇偶校验位可以使用compute_parity()计算, 数据包奇偶校验的有效性可以用 具有有效的奇偶校验()。当构造一个新包时,正确的 可以使用assign_parity()指定奇偶校验位

可以打印单个数据包以显示可读性 包内容的解释。印刷版调整其 基于数据包类型的输出,因此数据包将显示数据 字、时间戳等,而配置包将显示寄存器 地址和注册数据。

与packetcollections一样,包也有一个"表示"视图 基于组成数据包的字节。这对 创建新数据包,因为数据包的表示形式也是可用的 调用包构造函数。所以交互的输出 会话可以作为输入复制,也可以复制到脚本中以创建相同的会话 包,

使用HDF5记录器记录与LARPIX ASIC的通信

要创建与LARPIX ASIC通信的永久记录, 使用HDF5记录器。创建新的记录器

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
1

您还可以通过传递 启用关键字参数(默认为false):

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
2

现在,无论何时发送或接收数据包,它们都将被记录器捕获 并添加到记录器的缓冲区中。一旦缓冲区长度数据包 捕获的数据包将写入文件。你可以强迫记录器 使用hdf5logger.flush()

随时转储当前保存的数据包
larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
3

如果你想暂时停止追踪通讯, 禁用启用命令的作用与您所想的完全一样。

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
4

完成测试后,请确保禁用记录器。如果你不这样做, 您将丢失仍在记录器对象缓冲区中的任何数据。我们强烈建议 使用try包装记录器代码,如果可以,则使用语句包装记录器代码。任何剩余的 禁用时,缓冲区中的数据包将刷新到文件。

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
5

从HDF5记录器查看数据

hdf5记录器使用format调用larpix+hdf5v1.0,在 larpix.format.hdf5format模块(和 文档 从2.3.0版开始)。该模块包含一个to_文件方法,该方法是 由hdf5loggerfrom_file方法在内部使用 可用于将文件内容加载回larpix控件。这个 LARPIX+HDF5格式是一种"普通HDF5"格式,可以使用 h5py或任何语言的hdf5绑定。

从python打开hdf5文件

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
6

数据文件中有一个组("u header")和两个数据集 ("数据包""消息")。头组包含一些关于 创建数据文件时,文件格式版本号存储为 属性。

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
7

数据包按顺序存储为 HDF5数据集的行。列引用numpy mixed的元素 类型数组。数据类型和条目的详细信息由 larpix.format.hdf5format.dtype对象-有关详细信息,请参阅larpix控制文档。 只需访问包在 HDF5数据集。

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
8

如果要使用numpy的混合类型数组,可以转换 将原始值作为列表(长度为 1,例如)通过

larpix
|-- larpix
|-- io
|   |-- fakeio
|   |-- serialport
|   `-- zmq_io
|-- logger
|   |-- h5_logger
|   `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
|   |-- analyzers
|   |-- dataformatter
|   |-- dataloader
|   `-- datalogger
`-- configs
    |-- chip
    |   |-- csa_bypass.json
    |   |-- default.json
    |   |-- physics.json
    |   `-- quiet.json
    `-- controller
        |-- pcb-10_chip_info.json
        |-- pcb-1_chip_info.json
        |-- pcb-2_chip_info.json
        |-- pcb-3_chip_info.json
        |-- pcb-4_chip_info.json
        |-- pcb-5_chip_info.json
        `-- pcb-6_chip_info.json
9

您还可以查看整个"列"的数据:

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
0

h5pynumpy优化数据检索,以便您可以读取 某些列或行,而不将整个数据文件加载到内存中。

完成后别忘了关闭文件。(无需 如果您即将退出,则使用交互式python会话。)

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
1

使用Bern DAQ板运行

既然您已经用fakeio类完成了教程,现在就可以了 与一些larpix asic接口。如果你有一个伯尔尼DAQv2-3设置,你可以 按照本教程的其余部分进行操作。

在配置系统之前,需要生成配置 zmq_io或multizmq_io接口的文件。这提供了 物理设备的芯片密钥。在zmq接口的情况下,它映射 IO组到DAQ板的IP地址。许多例子 配置在下面的安装中提供 larpix/configs/io/<;config name>;.json,这可能适合您的目的。我们 建议阅读有关如何创建这些配置文件之一的文档。 默认情况下,在查找 安装文件。如果你的网络上只有一个数据采集板 您将加载io/daq srv<;>;.json配置。

在DAQ系统启动并运行时

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
2

这会给你一个安静的状态,没有数据包。偶尔,会有 在一个系统缓冲区(larpix、fpga、daq服务器)中留下一些数据包。一 第二次运行命令应返回,而不包含任何新数据包。

如果使用的是v1.5阳极,则可能需要重新配置miso/mosi映射(因为菊花链的miso/mosi对不一定在单个通道上)。为此,请在初始化时将miso_mapmosi_map传递给zmq-io对象:

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
3

检查配置

如果您仍在接收数据,可以检查硬件芯片配置 将软件芯片配置与匹配

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
4

如果配置读取数据包与软件芯片配置不匹配,则 将返回

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
5

丢失的数据包将显示为

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
6

如果您的配置匹配,并且您仍然收到数据,那么您可能会看到 从环境中探测到的传感器祝你好运!< /P>

启用单个通道

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
7

设置芯片的全局阈值

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
8

将脉冲注入特定通道

>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
9

您需要定期将DAC重置为255,否则将收到 valueerror一旦DAC达到最小指定值。

importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace
0

在通道上启用模拟监视器

importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace
1

当软件强制每个芯片只有一个通道被驱动时 模拟监视器,如果在芯片之间移动,则必须禁用模拟监视器。

其他实现细节

末端性

我们使用的约定是lsb先发出,然后再读入。 LSB在数组中的位置,并列出从对象到 对象,基于与我们交互的其他包的约定。

特别是,pyserial首先发送索引0,因此对于bytes对象, 索引0通常具有lsb。另一方面,比特串 将最后的索引视为lsb,这也是数字的方式 通常显示在屏幕上,例如二进制的0100表示4而不是2。所以 位数组对象,LSB通常是最后一个。

注意,这种组合导致了一个稍微尴尬的约定 bytestring的最低有效位是 第一个字节。例如,如果包的位[15:0]是 0000 0010 0000 0001(=0x0201=513),则字节将作为 b'\x01\x02'

配置对象

配置对象表示larpix中的所有选项 配置寄存器。larpix数据表中配置表中的每一行 在配置对象中具有相应的属性。每通道 属性存储在列表中,所有其他属性存储为 一个简单的整数。(这包括从单个位到值的所有内容 例如"重置周期",它跨越3个字节。)

配置对象还具有一些用于启用和 禁用每通道设置(例如csa_testpulse_enable频道掩码)。这里列出了相关的方法,应该是 前缀为启用或禁用:

  • 通道启用/禁用通道掩码寄存器
  • 外部触发器启用/禁用外部触发器掩码 注册
  • testpulse启用/禁用csa\u testpulse\u启用寄存器
  • 模拟监视器启用/禁用CSA监视器选择寄存器

大多数这些方法都接受一个可选的通道列表来启用或 禁用(并且在所有频道上没有指定列表的操作)。例外情况 是启用模拟监视器(及其禁用对应项)启用 方法要求指定特定的通道,并且禁用 方法根本不需要任何参数。这是因为最多只有一个 允许通道启用模拟监视器。

配置对象的机制确保每个值 在发送时转换为适当的位集 对物理芯片的实际命令。虽然这不是透明的 作为这个库的用户,您可能想知道 配置选项总是在同一配置中一起发送 包:

  • csa_gaincsa_bypassinternal_bypass组合成一个 单字节,所以即使它们有自己的属性,它们也必须 一起写入物理芯片

  • 测试模式交叉触发模式定期复位,以及 fifo_诊断阿梅路< /P>

类似地,所有的每通道选项(除了像素修剪 阈值)以4组8个频道发送。

可以通过导入larpix.configs并运行 加载函数。此函数用于搜索具有 在搜索 "系统"位置(秘密地在larpix/configs/文件夹中)。这是 类似于c中的"header.h"行为。

通过调用 所需的文件名。

配置芯片对象后,必须发送配置 到物理芯片。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java区块链表示   如何识别此Java框架中使用的加密技术?   java从outter jar加载一个包含所有组件的类   java如何在netty中序列化和反序列化HttpMessage或HttpContent?   java Hibernate在一定量的插入后生成负id   文件在FTP服务器上复制,而不是在java中移动   java如何在Android应用程序中使用静态对话框片段方法?   java扫描器while循环   java如何比较drools中数组列表的泛型元素?   java构建Restful服务失败CDI部署失败   java我的播放机将子弹射出90度   在Android设备中使用WiFi direct进行java数据传输   java在命令设计模式中将上下文传递给execute方法   java KeyClope TomcatAdapter:是否有“KeyClope”的替代路径。json'?   java如何将数据库中的名称放入我在另一个类中创建的JLIst中?   java Spring Mvc和MediaType for在获取rest请求的@RequestMapping中使用   java如何在应用程序运行时从包中打开文本文件?   java以Spring形式为单个对象定义POJO id   java清除gridview中的所有选定项