Modular barcode generation for TTL synchronization with clean hardware separation
Project description
TTL Barcoder
Generate and decode binary barcodes over TTL signals to synchronize multiple data acquisition systems. Barcodes encode a timestamp or random value as a sequence of timed HIGH/LOW pulses, transmittable over any digital output.
Quick Start
from ttl_barcoder.core import BarcodeTTL, BarcodeConfig, TTLType, TimestampPrecision
# Timestamp barcode (default) — encodes current time at ms precision
barcoder = BarcodeTTL()
sequence = barcoder.get_sequence() # [(level: bool, duration_ms: float), ...]
# Random barcode
config = BarcodeConfig(ttl_type=TTLType.random, barcode_bits=32)
barcoder = BarcodeTTL(config)
sequence = barcoder.get_sequence()
Bpod
from ttl_barcoder.core import BarcodeTTL
from ttl_barcoder.hardware.bpod import inject_barcode_states
barcoder = BarcodeTTL()
sequence = barcoder.get_sequence()
inject_barcode_states(sma, sequence, bnc_channel='BNC1', first_state_name='send_sync', last_state_name='next')
Raspberry Pi GPIO
from ttl_barcoder.hardware.pigpio import send_barcode_sequence
send_barcode_sequence(barcoder.get_sequence(), pin=18)
Installation
pip install ttl-barcoder # core only
pip install ttl-barcoder[bpod] # + Bpod
pip install ttl-barcoder[pigpio] # + Raspberry Pi GPIO
Configuration
BarcodeConfig is a Pydantic model — all fields are validated on construction.
from ttl_barcoder.core import BarcodeConfig, TTLType, TimestampPrecision
config = BarcodeConfig(
ttl_type=TTLType.timestamp, # or TTLType.random
barcode_bits=37, # 16–64 bits
timestamp_precision=TimestampPrecision.milliseconds, # s / ms / us
bit_duration_ms=35.0,
init_duration_ms=10.0,
tolerance=0.25,
)
Presets: default, high_speed, conservative, high_precision, random
from ttl_barcoder.core import get_preset
config = get_preset("conservative")
| Preset | Bits | Precision | Bit duration | TX duration | Coverage |
|---|---|---|---|---|---|
default |
37 | ms | 35 ms | 1355 ms | 4.4 yr |
high_speed |
32 | ms | 25 ms | 848 ms | 49 days |
conservative |
37 | ms | 50 ms | 1940 ms | 4.4 yr |
high_precision |
42 | us | 50 ms | 2190 ms | 51 days |
Architecture
ttl_barcoder/
├── core/
│ ├── config.py # BarcodeConfig (Pydantic), TTLType, TimestampPrecision
│ ├── generator.py # TTLGenerator ABC → TimestampGenerator / RandomGenerator
│ ├── encoder.py # bits → (level, duration_ms) timing sequence
│ ├── decoder.py # edge timestamps → barcode value
│ └── barcode_ttl.py # BarcodeTTL — main interface combining the above
└── hardware/
├── bpod/ # Bpod StateMachine integration
└── pigpio/ # Raspberry Pi GPIO via pigpio
- The generator is selected via a factory (
create_generator(config)) based onTTLType. TimestampGeneratorquantizes Unix time at the configured precisionRandomGeneratordraws from a numpy RNG. Both share the sameencode_bits/max_valueinterface on theTTLGeneratorbase class.
Examples
examples/dry_simulation.py— full walkthrough, no hardware neededexamples/bpod_loopback.py— Bpod StateMachine with loopback testexamples/pigpio_send.py— Raspberry Pi GPIO transmission
Contributing
- Fork and create a feature branch
- Add tests for new functionality
- Run
pytest - Submit a pull request
Acknowledgments
- Based on barcode synchronization from University of Colorado ONE Core
- Inspired by Open Ephys protocols
- Built for the neuroscience and scientific DAQ community
License & sources
This software is released under the BSD 3-Clause License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ttl_barcoder-0.4.1.tar.gz.
File metadata
- Download URL: ttl_barcoder-0.4.1.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b27f2b43e6386ef8f6ee656191d3d6b73a39e5c728af06a7cd8c0b86d53c1d2f
|
|
| MD5 |
a622970285c32c8a95258d90804c914c
|
|
| BLAKE2b-256 |
79bc0c43d3f8c2ba0b3f3f4f63af7d79fbd4ec9f2a6590d34f0f79586acced4e
|
File details
Details for the file ttl_barcoder-0.4.1-py3-none-any.whl.
File metadata
- Download URL: ttl_barcoder-0.4.1-py3-none-any.whl
- Upload date:
- Size: 14.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d73ab441a15830b2385b4e4e8a075c4234e46518b90ad8f5db59123b6417eaa
|
|
| MD5 |
d0c417ca015ab64e5ae02446be6bede5
|
|
| BLAKE2b-256 |
960861052ddd03fc536ac402e8ee84126516d669b6271bb05b4f05f72da1b86f
|