Skip to the content
2 layers62 × 29 mmGeiGer Counter LCD, the printed circuit board in 3D

This is a quick an dirty LCD display for Gieger counters to allow long term readings for low radiation levels.

Size
62 × 29 mm
Copper layers
2
Thickness
1.6 mm
Parts
20
Nets
13
Pads
50
Tracks, vias
55, 1
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Sep 2025
Updated
2 Nov 2025

Overview

GeiGer Counter LCD is an open-source printed circuit board by b-wave, from the b-wave/geiger_counter_lcd_display repository on GitHub. It is a 2-layer board of 62 × 29 mm with 20 parts on 13 nets, routed with 55 tracks and 1 via.

Its parts include 5 resistors, 3 diodes, 3 connectors, 2 capacitors and 2 switches. It belongs with the lEDs and displays and sensors and measurement boards and the PIC boards of this library.

README

README.md

PIC12F1822 Geiger Counter Display

This project was my first Co-Pilot collaberation. It came about when someone asked me how to tell if her frozen shrimp were radioactive. Simple, read the background radiation and add your sample reading the difference is the radiation from your frozen friends!

It uses a PIC12F1822 microcontroller to count Geiger pulses and display either total counts or CPM (counts per minute) on a serial LCD. It’s designed for ultra-low resource environments and runs entirely on internal oscillator and software UART. The display was intended to be an 8x2 LCD with a serial interface. I used a Newhaven Dispay NHD-0420DZ3 Display which is overkill but it was the only other serial diaplay on-hand for testing. If you want to use a larger display this one is OK but the backlight should be turned off on a battery powered system. Also, this display defaults to 9600bd but the PIC was not capible of outputting 9600bd. At 4800bd it worked fine but this display skips 4800bd so we reduced the rate to 2400. I will post a short video soon about my experence using my AI assistant Co-Pilot.

Features

  • Interrupt-driven pulse counting (RA1 was RA5)
  • Mode toggle between CPM and total count (RA3)
  • Reset button to clear counters (RA4)
  • Serial LCD output via software UART (RA0)
  • Timer1-based CPM calculation (1Hz tick)
  • Compact code for memory-constrained PICs

Count Modes

The counter has two modes. First is the total count. Also included is a timer to show how long the displayed count has ben running. There is also an overflow to prevent the count from rolling over.

The second is CPM. This counts the running number of counts-per-minute. There is a limit on the number of counts the counter will take due to speed limitations. If the threshhold of "reliable counts" get exceeded the counts are flagged as possble under counted.

Circuit Description

The KiCad schematic is provided in the hardware folder. A PDF version is in the Files folder. Also included is an untested PCB made from that schematic. The two diodes (D2 and D3) are optional. D2 provides input reverse polarity and a small voltage drop for counters supply voltage. My counter has a 6V battery, it is mostly OK for the 5V chip but it may be a little out of voltage spec. for some batteries. Diode D3 is to protect against the negitive part of the waveform. It is probabily not needed with the tansistor, but if you want to use the input pins of the PIC it may be useful. Typically, interrupts use RA5. I had issues using this input on my chips, the pin looked like a Low impeadence or Output Pin so I swapped to RA1. I am not sure what was going on but RA1 is typically uses as data input so since we were not usong serial input this was fine.

Hardware

Here are some features:

  • PIC12F1822 (8 MHz internal oscillator)
  • Geiger tube pulse output indicator
  • Serial LCD (2400 baud)
  • Button to toggle display modes "Total Count" and "CPM"
  • Reset Button to Zero the counts
  • A small 8x2 LCD Display to fit in counter case. (Set by software)
  • Serial input to LCD (Note: A serial "backpack" may be required)

Proto

The prototype shown here built up on a breadboard.

Pulse Input Waveform

Typical waveform from my Geiger Counter, the pulse stays active for 524uSec. This is the timeout for the counter that means the interrupt servce should be done before this time. Also note the pulse ends with a negitive drop. I added a buffer in the circuit so it should not be an issue.

Pulses can occur back to back. Shown here is an example of two close counts:

Pin Mapping

FunctionPIC PinSymbol
Geiger PulseRA1GP2
Reset ButtonRA4GP3
Mode SelectRA3GP4
LCD TXRA0GP1

Notes

  • Configuration bits are explicitly set to avoid compiler warnings.

  • sprintf() removed to reduce RAM usage.

  • Project based on a cloned MPLAB X setup—manual setup may require recreating project structure.

  • Timer1 Configuration Notes

  • Internal oscillator set to 8 MHz via OSCCON = 0x70

  • Timer1 uses 1:64 prescaler (T1CON = 0b00110101)

  • Preload value TMR1 = 0x85BE gives 1 Hz overflow:

    • Tick rate = 2 MHz / 64 = 31,250 Hz
    • Overflow after 31,250 ticks = 1 second
  • CPM calculation now matches expected values (e.g. 1 Hz input → 60 CPM)

Files

  • geiger_counter_display.c – Main source code
  • README.md – This file

File Naming Convention

This project uses a stable filename (geiger_counter_display.c) with versioning tracked in code comments and commit history. No separate v1/v2 branches—just iterative improvements.

License

MIT license.

Built with XC8

Parts

20
QtyValueFootprintReferences
310kResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR1, R2, R5
2220Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR3, R4
2MountingHole_PadMountingHole:MountingHole_3mm_PadH1, H2
10.1uCapacitor_THT:C_Disc_D3.8mm_W2.6mm_P2.50mmC1
110uCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC2
11N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD3
12N3904Package_TO_SOT_THT:TO-92_InlineQ1
1BuzzerBuzzer_Beeper:Buzzer_D14mm_H7mm_P10mmBZ1
1LCDConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1
1LEDLED_THT:LED_D5.0mm_ClearD1
1MODEButton_Switch_THT:SW_Push_2P1T_Toggle_CK_PVA1xxH1xxxxxxV2SW1
1PIC12F1822-xPPackage_DIP:DIP-8_W7.62mmU1
1POWERConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1PULSE INConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1TBDDiode_THT:D_A-405_P7.62mm_HorizontalD2
1ZEROButton_Switch_THT:SW_Push_2P1T_Toggle_CK_PVA1xxH1xxxxxxV2SW2

Similar boards

  • 2 layers66.9 × 74.5 mmDeskHop Rev1, the printed circuit board in 3D

    DeskHop Rev1

    hrvach/deskhop

    Fast Desktop Switching Device

    20 parts7.9kGPL-3.0
  • 2 layers86.4 × 64.8 mmSlot machine, the printed circuit board in 3D

    Slot machine

    google/google-ctf

    Google CTF

    20 parts5.1kApache-2.0
  • 2 layers36.2 × 26.8 mmEsp32 minimal, the printed circuit board in 3D

    Esp32 minimal

    atopile/atopile

    Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️

    20 parts4kMIT
  • 2 layers108.1 × 393.8 mmSweep compact ble, the printed circuit board in 3D

    Sweep compact ble

    davidphilipbarr/Sweep

    Sweep - a small promicro based keyboard inspired by the Ferris.

    20 parts2.1k
  • 2 layers26 × 15.9 mmTPS54340 Buck Regulator, the printed circuit board in 3D

    TPS54340 Buck Regulator

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    20 parts1.2k
  • 2 layers67.6 × 30.5 mmRgb to hdmi, the printed circuit board in 3D

    Rgb to hdmi

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    20 parts1kGPL-3.0
  • 2 layers44.3 × 28.7 mmLin bus adapter esp32, the printed circuit board in 3D

    Lin bus adapter esp32

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    20 parts915
  • 2 layers89.5 × 61.6 mmFreeDeck TH 2020-02, the printed circuit board in 3D

    FreeDeck TH 2020-02

    FreeYourStream/freedeck-hardware

    all the stuff you need to build your own FreeDeck

    20 parts772

Questions

How big is the GeiGer Counter LCD PCB?

It measures 62 × 29 mm and has 2 copper layers, 1.6 mm thick.

What parts does the GeiGer Counter LCD use?

20 parts. 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 GeiGer Counter LCD KiCad files?

From the b-wave/geiger_counter_lcd_display repository on GitHub, at the commit this page was made from: the board is Hardware/GeiGer_Counter_LCD.kicad_pcb and its schematic Hardware/GeiGer_Counter_LCD.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the GeiGer Counter LCD design in my own project?

Its repository states no licence, so its author keeps all rights: ask b-wave before reusing the design.