

TempLoggerNG
Four channel pt-100 temperature logging device using an ADS1248 and an ATMEGA328p with V-USB
- Size
- 56.9 × 45 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 29
- Nets
- 36
- Pads
- 169
- Tracks, vias
- 552, 23
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 30 Jun 2016
- Updated
- 11 Oct 2026
Overview
TempLoggerNG is an open-source printed circuit board by miree, from the miree/tempLoggerNG repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 56.9 × 45 mm with 29 parts on 36 nets, routed with 552 tracks and 23 vias.
It is built around the ATMEGA328-PU and ADS1248IPW. Its parts include 9 capacitors, 6 resistors, 6 connectors, 4 transistors and 3 ICs. It belongs with the sensors and measurement boards and the AVR (ATmega, ATtiny) boards of this library.
Main components
2ATMEGA328-PU
PDIP-28-40℃~+85℃ 1.8V~5.5V 10bit 1KB 20MHz 23 2KB 32KB 8 Bit AVR Built-in FLASH PDIP-28 Microcontrollers (MCU/MPU/SOC) ROHSMicrochip TechnologyMicrocontrollers (MCU/MPU/SOC)ADS1248IPW
TSSOP-28-40℃~+125℃ 100nA 10ppm/℃ 1MHz~4.5MHz、3.89MHz~4.3MHz 2.048V 2.78V~5.25V 24 2kHz 4、8 5Hz、10Hz、20Hz、40Hz、80Hz、160Hz、320Hz、640Hz、1kHz、2kHz 6LSB Built-in Built-in External、Built-in SPI Sigma-Delta Support Yes TSSOP-28 Analog to Digital Converters (ADC) ROHSTexas InstrumentsAnalog To Digital Converters (ADC)
README
README.mdtempLoggerNG
A four-channel PT-100 temperature logging device built around a Texas Instruments ADS1248 precision delta-sigma ADC and an ATmega328p microcontroller with V-USB (software-only USB, no dedicated USB controller chip). The device connects directly to a PC over USB and is controlled by a small command-line tool that triggers measurements and logs resistance/temperature readings to a file.
https://emsyfs.blogspot.com/2017/07/pt-100-temperature-logger.html
Features
- 4 independent PT-100 RTD input channels, read via a single ADS1248 24-bit ADC using its internal multiplexer and a programmable current source (IDAC) to excite each sensor.
- Full 4-wire measurement on all 4 channels, eliminating lead resistance errors for accurate readings even with long sensor cables.
- On-board diode temperature sensor, used to compensate for temperature drift of the measurement electronics themselves.
- Linear temperature-compensation coefficients (
a,b) stored in the ATmega's EEPROM, so each device can be individually calibrated and keeps its calibration across power cycles. - USB connectivity without a dedicated USB interface chip, using the V-USB software USB implementation on the ATmega328p.
- A command-line host tool (
templogger) that:- reads out the 4 channels at a configurable sample rate,
- converts raw resistance to temperature using the Callendar-Van Dusen equation for PT-100 sensors,
- logs readings (time, diode voltage, and temperature or resistance per channel) to a plain-text data file,
- optionally applies/updates the temperature-compensation calibration,
- can read/write individual ADS1248 configuration registers for debugging, and
- includes a USB round-trip echo self-test.
- Full KiCad hardware design (schematic, PCB layout, custom footprints, Specctra autorouter export, and a rendered schematic PDF) for building the device yourself.
Repository layout
firmware/ ATmega328p firmware (C), including the V-USB driver and
the ADS1248 driver
commandline/ Host-side command-line tool ("templogger") using libusb
hardware/ KiCad schematic/PCB project, footprints, and a PDF of
the schematicHardware
The design files live in hardware/ as a KiCad project
(tempLoggerNG.pro, tempLoggerNG.sch, tempLoggerNG.kicad_pcb). A
rendered PDF of the schematic is included as
tempLoggerNG-schematic.pdf if you just want to look at the circuit
without opening KiCad.
Note: This project was originally designed in an older version of KiCad (legacy schematic/library format). Opening it in a modern KiCad release will likely trigger the automatic "symbol rescue" feature, which copies any symbols it can't resolve against current libraries into local rescue files. This is expected and does not modify the original schematic; if KiCad has already run through this once in your checkout, you may need to clean up before committing anything.
Firmware
The firmware lives in firmware/ and is built with avr-gcc for the
ATmega328p.
Requirements
avr-gcc/avr-libc(AVR toolchain)avrdude- An AVR ISP programmer, such as a USBasp (the Makefile defaults to
avrdude -c usbasp -p m328p— editfirmware/Makefileif you use a different programmer)
Build and flash
cd firmware
make # builds main.hex
make flash # flashes main.hex to the ATmega328p via avrdude/usbaspThe ATmega328p is clocked at 12 MHz (F_CPU, set in main.c and the
Makefile) and must be fused accordingly (external crystal, no
clock-divide) before flashing application code — the fuse bytes are
not set by this Makefile and must be programmed separately with
avrdude, matching whatever oscillator is fitted on your board.
Other useful targets:
make disasm # disassemble main.bin with avr-objdump
make clean # remove build artifactsThe firmware never leave debug output enabled in a flashed device — the comment in the Makefile is explicit that debug builds distort the timing the USB stack depends on.
Command-line tool
The host tool lives in commandline/ and talks to the device over USB
using libusb (the classic 0.1 API, via libusb-config).
Requirements
gcclibusb(0.1, providinglibusb-config)
Build
cd commandline
makeThis produces a templogger binary. The device identifies itself
over USB using obdev's free shared VID/PID (0x16C0/0x05DC) with
manufacturer string www.obdev.at and product string Temp-Logger,
so no special udev rule beyond generic USB access permissions is
normally required — just make sure your user can access the USB
device (e.g. via a udev rule granting access for that VID/PID, or by
running as root).
Usage
usage: ./templogger [ch1] [ch2] [ch3] [ch4] [all] [options]Specify which channel(s) to log with one or more of ch1, ch2,
ch3, ch4, or all.
Options:
-v : verbose
-q : quiet
-o filename : name of data file. default is "temperature.dat"
-N n : stop measurement after n samples
-t t : stop measurement after t seconds
-d delta : take a sample every delta seconds. Default is 0.5, min is 0.15
-r : read registers (for debugging purposes)
-h : output this helpExample — log channels 1 and 2 to run1.dat, once per second, for 60
samples:
./templogger ch1 ch2 -o run1.dat -d 1 -N 60Calibration procedure
Each device's on-board diode-based temperature compensation uses two
coefficients, a and b, such that:
R_comp = a - b * V_diode
R = R_measured - R_compTo determine and store them for a given device:
- Connect a fixed, known resistor (e.g. 100 Ω) in place of a sensor.
- Disable temperature compensation with
-xand log resistance directly with-R. - Heat up the device itself (not the resistor) and record data while it cools down.
- Plot
V_diodeagainstR_measured - 100 Ωand fit a straight line to obtainaandb. - Write the coefficients to the device's EEPROM:
sh ./templogger -c <a> <b>
Once written, the coefficients are read back from EEPROM
automatically and applied during normal logging unless -x is given.
Self-test
./templogger testSends 1000 random values to the device and checks that they are echoed back correctly, as a basic USB communication sanity check.
License
The firmware and command-line tool (firmware/, commandline/) are
licensed under the GNU General Public License v2 (see LICENSE). The
bundled V-USB driver (firmware/usbdrv/) is dual-licensed under GPLv2
or a commercial license from Objective Development — see
firmware/usbdrv/License.txt and
firmware/usbdrv/CommercialLicense.txt for details, and
firmware/usbdrv/USB-ID-FAQ.txt / USB-IDs-for-free.txt regarding use
of the shared VID/PID.
The hardware design (hardware/) is licensed under the CERN Open
Hardware Licence Version 2 - Strongly Reciprocal (CERN-OHL-S v2), see
LICENSE-HARDWARE.
Parts
29| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | USB-MINI-B | localfootprints:USB_Mini-B | CON2, T-0, T-1, T-2, T-3 |
| 4 | 100n | Capacitors_SMD:C_0805_HandSoldering | C1, C2, C7, C10 |
| 3 | MOS_N | localfootprints:SOT-23_GSD_Handsoldering | Q1, Q2, Q3 |
| 2 | 10k | Resistors_SMD:R_0805_HandSoldering | R1, R6 |
| 2 | 10u | Capacitors_SMD:C_0805_HandSoldering | C3, C4 |
| 2 | 15p | Capacitors_SMD:C_0805_HandSoldering | C5, C6 |
| 2 | 68 | Resistors_SMD:R_0805_HandSoldering | R3, R4 |
| 1 | 12MHz | Crystals:Crystal_HC49-SD_SMD | X1 |
| 1 | 1k5 | Resistors_SMD:R_0805_HandSoldering | R2 |
| 1 | 4k7 | Resistors_SMD:R_0805_HandSoldering | R5 |
| 1 | 4u7 | Capacitors_SMD:C_0805_HandSoldering | C8 |
| 1 | ADS1248 | Housings_SSOP:SSOP-28_5.3x10.2mm_Pitch0.65mm | U1 |
| 1 | ATMEGA328p | libcms:TQFP32 | IC1 |
| 1 | MR-AVR-ISP-6 | Pin_Headers:Pin_Header_Straight_2x03 | CON1 |
| 1 | NCP1117-3v3 | SMD_Packages:SOT-223 | U2 |
| 1 | Q1-4: 2N7002 | localfootprints:SOT-23_GSD_Handsoldering | Q4 |
Questions
How big is the TempLoggerNG PCB?
It measures 56.9 × 45 mm and has 2 copper layers, 1.6 mm thick.
What parts does the TempLoggerNG use?
29 parts, built around the ATMEGA328-PU and ADS1248IPW. 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.
Where can I download the TempLoggerNG KiCad files?
From the miree/tempLoggerNG repository on GitHub, at the commit this page was made from: the board is hardware/tempLoggerNG.kicad_pcb and its schematic hardware/tempLoggerNG.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the TempLoggerNG design in my own project?
Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers104.9 × 75.2 mm

- 2 layers228 × 98 mm

- 2 layers94.6 × 46.1 mm

- 2 layers50 × 50 mm

- 2 layers284.7 × 94.2 mm

Lumberjack
peej/lumberjack-keyboard
5x12 ortholinear through-hole component keyboard PCB for standard 60% cases
165 parts403MIT - 2 layers132.1 × 45.7 mm

IPoS
peterheinrich/InternetOverSpaghetti
Transmitting IP packages over a pair of spaghetti thus demonstrating how media independent IP really is.
42 parts342 - 2 layers63.3 × 57.2 mm

- 2 layers285 × 117 mm
