

GeiGer Counter LCD
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.mdPIC12F1822 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
| Function | PIC Pin | Symbol |
|---|---|---|
| Geiger Pulse | RA1 | GP2 |
| Reset Button | RA4 | GP3 |
| Mode Select | RA3 | GP4 |
| LCD TX | RA0 | GP1 |
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 = 0x85BEgives 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 codeREADME.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.
Parts
20| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 10k | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R1, R2, R5 |
| 2 | 220 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R3, R4 |
| 2 | MountingHole_Pad | MountingHole:MountingHole_3mm_Pad | H1, H2 |
| 1 | 0.1u | Capacitor_THT:C_Disc_D3.8mm_W2.6mm_P2.50mm | C1 |
| 1 | 10u | Capacitor_THT:CP_Radial_D5.0mm_P2.50mm | C2 |
| 1 | 1N4148 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D3 |
| 1 | 2N3904 | Package_TO_SOT_THT:TO-92_Inline | Q1 |
| 1 | Buzzer | Buzzer_Beeper:Buzzer_D14mm_H7mm_P10mm | BZ1 |
| 1 | LCD | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J1 |
| 1 | LED | LED_THT:LED_D5.0mm_Clear | D1 |
| 1 | MODE | Button_Switch_THT:SW_Push_2P1T_Toggle_CK_PVA1xxH1xxxxxxV2 | SW1 |
| 1 | PIC12F1822-xP | Package_DIP:DIP-8_W7.62mm | U1 |
| 1 | POWER | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | PULSE IN | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J3 |
| 1 | TBD | Diode_THT:D_A-405_P7.62mm_Horizontal | D2 |
| 1 | ZERO | Button_Switch_THT:SW_Push_2P1T_Toggle_CK_PVA1xxH1xxxxxxV2 | SW2 |
Similar boards
- 2 layers66.9 × 74.5 mm

- 2 layers86.4 × 64.8 mm

- 2 layers36.2 × 26.8 mm

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 mm

Sweep compact ble
davidphilipbarr/Sweep
Sweep - a small promicro based keyboard inspired by the Ferris.
20 parts2.1k - 2 layers26 × 15.9 mm

TPS54340 Buck Regulator
rusefi/rusefi
rusefi - GPL internal combustion engine control unit
20 parts1.2k - 2 layers67.6 × 30.5 mm

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 mm

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 mm

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.