chip_label.py generates customized labels with pin number for chips.
There are four modes (see output examples below):
- image (default): generate a single image (.png) for each chip
chip_label -c 555 7404 8085
- output: 555.png 7404.png 8085.png
- page: generate one or more pages with all chips aligned in a grid
chip_label -c 555 555 555 555 7404 7404 8085 -p
- output: page1.png with all chips (4x555, 2x7404, 8085)
- text: output the chip pinout on stdout
chip_label -c 555 -t
- output: ASCII pinout of the chip
- list: list all the chips in the library or libraries
chip_label -l
This project was inspired by clabel (which is in Perl and can print on a PTouch label maker). The original clabel project repository was converted to git and archived on github.
I started working on the original Perl code and made some small improvements but I decided to abandon the Perl version and start the whole thing from scratch in Python.
I kept the original YAML configuration file format for the chips.
- Python 3.6
- If you're not using the installation package, you will need to install two libraries manually:
- PyYAML for parsing chip pinout files
- simple install:
pip install PyYAML
- simple install:
- Pillow for image generation and manipulation
- simple install:
pip install Pillow
- simple install:
- PyYAML for parsing chip pinout files
or see requirements.txt
- Download or
git clone
sources - Launch
chip_label.py
(orpython3 chip_label.py
) from project root
- Download latest release package
- Install with
pip3 install chiplabel-(version).tar.gz
- If your paths are set properly you'll be able to launch
chip_label
from anywhere
usage: chip_label.py [-h] (-c name [name ...] | -a | -l) [-i dir] [-o dir] [-f font]
[--dpi num] [--invert] [-p] [--page_size n n] [--page_padding inch]
[--page_nocrop] [-t] [--debug | -v]
Generate footprint images for chips.
optional arguments:
-h, --help show this help message and exit
-c name [name ...], --chip name [name ...]
one or more chip identifier
-a, --all generate labels for chips in package
-l, --list list all chips in package
-i dir, --input dir input chip library file or directory (default: $package/chips).
If a directory is specified all .yaml files in that directory
will be loaded
-o dir, --output dir output directory (default: .)
--debug print debugging statements
-v, --verbose print additional information
Image Options:
-f font, --font font TTF font to use (default: $package/fonts/CascadiaMono.ttf). Under
Windows the system font directory is searched automatically
--dpi num resolution in dots per inch (default: 300)
--invert invert label, for dead bug soldering
Page Mode Options:
-p, --page page mode: fit all specified chips in a grid on one or more pages
--page_size n n page width and height, in inches (default: 7.5 10)
--page_padding inch space between chips, in inches (default: 0.1)
--page_nocrop whitespace is cropped by default. Use this argument to leave the
whitespace
Text Output Options:
-t, --text generate text output in console instead of image. Image options
will be ignored
You can use a file with a list of chips (one chip per line) and pass it to the --chip parameter like this:
chip_label -c @chiplist -p
This will generate a page with all the chips in chiplist. This if you are working on a project and want to label all the chips in it.
In the examples folder I put a file beneater8bit.txt that contains the BOM of the Ben Eater's TTL Computer
I put the output of chip_label -c @examples/beneater8bit.txt -p
in the out folder
Chips part the 7400 family have auto-generated aliases (see configuration file format)
If your chip configuration file defines the 74999 chip, you will be able to generate chip images for all the variants:
chip_label -c 74999 74LS999 74HCT999
The only difference is the name printed on the chip. This is useful to avoid mixing incompatible families by mistake.
SN76489AN Sound Generator
-----------
1 | D5 VCC | 16
2 | D6 D4 | 15
3 | D7 CLK | 14
4 | RDY D3 | 13
5 | /WE D2 | 12
6 | /CE D1 | 11
7 | OUT D0 | 10
8 | GND NC | 9
-----------
A chip library configuration file is a .yaml file containing a list of chip definition such as:
SN76489AN:
description: Sound Generator
pins: [ D5, D6, D7, RDY, /WE, /CE, OUT, GND, NC, D0, D1, D2, D3, CLK, D4, VCC ]
The format is very simple as you can see. The only required fields are the chip id (e.g. SN76489AN in the example above) and the list of pins.
The optional fields are:
- name: replaces the chip id on the label.
- description: appended to name.
- type: wide generates 12mm labels instead of the default 6mm.
- family: 7400 generates family aliases for common (and uncommon) families: LS, ALS, HC, HCT, etc.
Pins that start with '/', '!' or '~' will be drawn as inverted (with a line on top):
- /OE
- !WR
- ~RD
These are functionally equivalent.
The '~' token allows partial pin inversion. The first ~ starts the range and the second ends it. If only one ~ is found, the inversion continues until the end of the label.
- ~ABC = A̅B̅C̅ (same behavior as /ABC or !ABC)
- A/~BC = A/B̅C̅ (continues until the end of the label)
- a
BCde = aB̅C̅de (range)
Hidden Chips, Templates
Chips with an id that begins with an underscore (_) are hidden from chip list. This is useful to generate many chips based on the same pinout without cluttering the chip list:
_op1: &op1
description: OpAmp
pins: [BAL, IN-, IN+, V-, BAL, OUT, V+, NC]
LF356: *op1
LM741: *op1
This will generate two chips with the same pinout: LF356 and LM741. You can override fields (such as description) like this:
LM741:
<<: *op1
description: custom description
- Multiple line pins
- Partial pin negation: R/(/W), /(B1) vs (/B)1
- Subscript A1
- Color output