
Batterymeter
hb020/batterymeter
Handheld Battery AC and Time Domain characterization tool on Attiny series 2

modular logic probe (3V3 logic level, 16 channels per device, SCPI)
Analog bridge is an open-source printed circuit board by mayermakes, from the mayermakes/analog-bridge repository on GitHub. It is a 2-layer board of 100 × 120 mm with 112 parts on 102 nets, routed with 981 tracks and 2,332 vias.
It is built around the ATTINY3226-SU and ADS1115IDGS. Its parts include 39 diodes, 31 resistors, 23 capacitors, 10 ICs and 7 connectors. It belongs with the interfaces and adapters and sensors and measurement boards and the AVR (ATmega, ATtiny) boards of this library.
A modular, open hardware 16-channel measurement and logic-monitoring platform built around an ATtiny3226 and four ADS1115 ADCs. The bridge exposes a line-oriented SCPI interface over Ethernet and USB serial, making it useful for automated test fixtures, digital logic observation, and lightweight data acquisition.
Status: Work in progress. The hardware, firmware, and host tools are under active development.
analog-bridge/
├── analog-bridge-PCB/ # KiCad project, schematic, and PCB layout
├── analog-bridge/ # PlatformIO firmware and Python host tools
│ ├── src/ # Firmware sources
│ ├── include/ # Firmware headers
│ ├── lib/ # Project libraries
│ ├── test/ # PlatformIO tests
│ ├── platformio.ini # Build and upload configuration
│ ├── API_README.md # Complete SCPI and transport reference
│ ├── analog_bridge_monitor.py
│ └── analog_bridge_oscilloscope.py
└── manufacturing/ # 3MF and SVG enclosure/manufacturing filesEach ADS1115 contributes four single-ended inputs:
| Logical channels | ADS1115 address | Inputs |
|---|---|---|
| 0–3 | 0x48 | AIN0–AIN3 |
| 4–7 | 0x49 | AIN0–AIN3 |
| 8–11 | 0x4A | AIN0–AIN3 |
| 12–15 | 0x4B | AIN0–AIN3 |
The firmware uses the ADS1115 GAIN_ONE setting, with a nominal input range of approximately ±4.096 V. Always observe the electrical limits of the ADC and the assembled hardware.
The device accepts one command per line. Commands are case-insensitive and can be sent over either transport:
5025115200 8N1Example Ethernet session:
printf '*IDN?\n' | nc 192.168.1.42 5025
printf 'MEAS:RAW? 6\n' | nc 192.168.1.42 5025Frequently used commands include:
| Command | Purpose |
|---|---|
*IDN? | Return device identification |
*RST | Restore enabled channels and 16 SPS defaults |
SYST:ERR? | Read and clear the latest error |
CONF:CHAN<n>:RATE <sps> | Set a channel’s sampling rate |
CONF:CHAN<n>:STAT ON|OFF | Enable or disable a channel |
MEAS:RAW? <n> | Read the latest raw ADC value |
MEAS:RAW:ALL? | Return all 16 channels as CSV records |
Supported rates are 8, 16, 32, 64, 128, 250, 475, and 860 SPS. For the full command reference, wiring information, response formats, and transport details, see analog-bridge/API_README.md.
The SCPI interface has no authentication or encryption. Use Ethernet access only on a trusted network.
The firmware is built with PlatformIO and the Arduino framework.
pymcuprog for UPDI upload:python3 -m pip install pymcuprogFrom the firmware directory:
cd analog-bridge
pio run
pio run -e Upload_UPDI -t uploadConfigure the upload port and speed for your UPDI adapter according to your local setup. The default PlatformIO environment is Upload_UPDI.
The repository includes a direct ADC test firmware that bypasses the normal SCPI scheduler:
pio run -e ADC_TEST -t uploadOpen the serial port at 115200 8N1 to view probe and raw conversion output. Use this mode to isolate ADC, I²C, power, address, or wiring problems.
The host applications use only the Python standard library unless USB serial discovery is needed.
The monitor discovers up to two bridges over Ethernet or USB serial and serves a live 32-channel dashboard. Ethernet discovery scans local IPv4 /24 networks for TCP port 5025; USB discovery requires pyserial.
cd analog-bridge
python3 -m pip install pyserial # optional, required for USB discovery
python3 analog_bridge_monitor.pyOpen http://127.0.0.1:8080. By default, channels are classified as:
HIGH: ≥ 2.00 VLOW: ≤ 0.80 Vdoubt: between the two thresholdsCustomize the thresholds, serial port, or web server:
python3 analog_bridge_monitor.py \
--serial-port /dev/ttyUSB0 \
--high 2.2 \
--low 0.7 \
--port 8080The oscilloscope discovers up to four Ethernet bridges and plots AIN0 from each ADS1115: logical channels 0, 4, 8, and 12.
python3 analog_bridge_oscilloscope.pyOpen http://127.0.0.1:8090. Adjust the rolling history and polling interval with:
python3 analog_bridge_oscilloscope.py --history 60 --poll 0.1 --port 8090The tools use the device’s millisecond timestamp, which is relative to device boot rather than synchronized Unix time.
The KiCad project is in analog-bridge-PCB/. It includes the main PCB, project configuration, and analog-section schematic. Manufacturing and enclosure assets are in manufacturing/, including SVG and 3MF files.
The primary ATtiny3226 connections are:
| Function | Pin |
|---|---|
| I²C SCL | PB0 |
| I²C SDA | PB1 |
| UART TX | PB2 |
| UART RX | PB3 |
| ADS alert 0–3 | PB4, PB5, PC0, PC1 |
| ENC28J60 MOSI/MISO/SCK | PA1, PA2, PA3 |
| ENC28J60 CS/INT | PA4, PA6 |
| UPDI | PA0 |
Issues and pull requests are welcome. When reporting a hardware or firmware problem, include the board revision, firmware environment, transport used, wiring, and relevant serial or SCPI output.
This project is licensed under the Open Community License v1.1 (OCL v1.1), without add-on conditions.
OCL v1.1 grants non-commercial users the right to use, copy, modify, and repair the project and requires distributed derivatives to remain under OCL. Commercial business use is limited to internal use unless a separate business or repair license is obtained. See LICENSE for the complete terms.
Third-party components and dependencies distributed with or alongside this project remain under their respective licenses where those licenses are incompatible with OCL. The authoritative OCL text and available add-ons are maintained by the OpenCommunityLicence project.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 33 | D_Schottky | Diode_SMD:D_0603_1608Metric | D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25 +17 |
| 16 | 1k | Resistor_SMD:R_0603_1608Metric | R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29 |
| 15 | 0,1uF | Capacitor_SMD:C_0603_1608Metric | C1, C3, C4, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 |
| 6 | 10k | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R30, R31 |
| 6 | WE-TVS_SOT23-6L_82402305 | WE-TVS_SOT23-6L_82402305:WE-TVS_SOT23-6L | D1, D2, D4, D5, D6, D7 |
| 5 | 10uF | Capacitor_SMD:C_0603_1608Metric | C5, C6, C7, C8, C10 |
| 4 | 49,9 | Resistor_SMD:R_0603_1608Metric | R6, R7, R8, R9 |
| 4 | ADS1115IDGS | Package_SO:TSSOP-10_3x3mm_P0.5mm | U7, U8, U9, U10 |
| 3 | PRG | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J1, J6, J7 |
| 2 | 330 | Resistor_SMD:R_0603_1608Metric | R10, R11 |
| 2 | 5k1 | Resistor_SMD:R_0603_1608Metric | R12, R13 |
| 2 | 8pF | Capacitor_SMD:C_0603_1608Metric | C9, C11 |
| 2 | DA15_Socket_MountingHoles | Connector_Dsub:DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm | J4, J5 |
| 2 | MCP1825S | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U3, U4 |
| 1 | 1uF | Capacitor_SMD:C_0603_1608Metric | C2 |
| 1 | 2171790001 | USB-C_20_molex:MOLEX_2171790001 | J2 |
| 1 | 2k32 | Resistor_SMD:R_0603_1608Metric | R5 |
| 1 | ATtiny3226-S | Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm | U1 |
| 1 | CP2102N-Axx-xQFN28 | Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm | U2 |
| 1 | ENC28J60x-SO | Package_SO:SOIC-28W_7.5x18.7mm_P1.27mm | U5 |
| 1 | FerriteBead | Inductor_SMD:L_0603_1608Metric | FB1 |
| 1 | P01-0002-01 | P01-0002-01:BEL_P01-0002-01 | J3 |
| 1 | Val** | e14 Presents KiCad Footprints:e14presents logo 10mm silk only v1 | Ref** |
| 1 | ~ | Crystal:Crystal_SMD_2520-4Pin_2.5x2.0mm | U6 |

hb020/batterymeter
Handheld Battery AC and Time Domain characterization tool on Attiny series 2

mayermakes/MyGenWashy
Generic washing Machine Controller - Result of the TuttleButtle Hackathon 2025

etherkit/EtherKeyerMini
A simple Morse Code keyer that does the basic functions you need




alexanderenrique/attiny-e-ink
Ultra-low-power ATtiny3226 e-ink quote display — firmware and KiCad PCB

etherkit/Si5351AVFO
After any schematic change, run tools/exportdocs.sh (needs KiCad 10 kicad-cli). It rewrites docs/Si5351AVFOschematic.pdf, the netlist, SVGs and docs/erc.rpt.
It measures 100 × 120 mm and has 2 copper layers, 1.6 mm thick.
112 parts, built around the ATTINY3226-SU and ADS1115IDGS. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the mayermakes/analog-bridge repository on GitHub, at the commit this page was made from: the board is analog-bridge-PCB/analog-bridge.kicad_pcb and its schematic analog-bridge-PCB/Analog-section.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask mayermakes before reusing the design.