Arduino Uno Schematic: ATmega328P Core Circuit
The Arduino Uno is one of the most studied open-source hardware designs. In this tutorial, we'll recreate its core schematic using tscircuit — the ATmega328P microcontroller with its essential support circuitry.
Components
| Ref | Part | Value / Part # | Footprint |
|---|---|---|---|
| U1 | ATmega328P | ATmega328P-PU | DIP-28 |
| Y1 | Crystal | 16 MHz | HC-49S |
| C1, C2 | Capacitor | 22 pF (crystal load) | 0402 |
| C3 | Capacitor | 100 nF (RESET filter) | 0402 |
| C4, C5 | Capacitor | 100 nF (VCC/AVCC bypass) | 0402 |
| C6 | Capacitor | 10 µF (AVCC bulk) | 0402 |
| R1 | Resistor | 10 kΩ (RESET pull-up) | 0402 |
| R2 | Resistor | 470 Ω (D13 LED limit) | 0402 |
| SW1 | Pushbutton | Tactile SPST | THT |
| LED1 | LED | Yellow (D13) | 0402 |
The ATmega328P at a Glance
The ATmega328P is an 8-bit AVR microcontroller in a 28-pin DIP package. It powers the original Arduino Uno. Its 28 pins break down into four groups:
- Power: VCC, AVCC (analog supply), AREF (analog reference), GND
- Crystal: XTAL1/XTAL2 for the external 16 MHz oscillator
- Reset: Active-low RESET pin
- I/O Ports: Port B (PB0–PB5), Port C (PC0–PC5, includes ADC), Port D (PD0–PD7)
Let's build the schematic step by step.
Step 1 — The Microcontroller
Start with the <chip> component, defining all 28 pin labels to match the
ATmega328P datasheet. We split the pins between the left and right sides of the
schematic symbol:
We use pin1–pin28 as keys. Each value is an array of aliases — tscircuit
lets you connect to any alias (e.g., .U1 > .RXD or .U1 > .PD0).
Step 2 — The Crystal Oscillator
The ATmega328P needs an external clock source. The Arduino Uno uses a 16 MHz crystal (Y1) with two 22 pF load capacitors (C1, C2) to ground. This is the standard Pierce oscillator circuit found on pins XTAL1 and XTAL2.
The 22 pF capacitors tune the crystal's oscillation frequency. The exact value depends on the crystal's specified load capacitance — typical AVR crystals need 12–22 pF.
Step 3 — Reset Circuit
The RESET pin is active-low: pulling it to GND resets the MCU. A 10 kΩ pull-up resistor (R1) holds RESET high during normal operation. A 100 nF capacitor (C3) filters noise. A momentary button connects RESET to GND for manual resets.
Step 4 — Power Decoupling
Every MCU needs bypass capacitors near its power pins to suppress high-frequency noise. Place 100 nF capacitors close to each VCC pin. The AVCC pin (analog power for the ADC) benefits from an additional 10 µF bulk capacitor.
Complete Schematic
Here is the full Arduino Uno core schematic: MCU, crystal oscillator, reset circuit, and power decoupling assembled together.
Key Takeaways
| Section | Purpose | Key Components |
|---|---|---|
| Crystal | Provides accurate 16 MHz clock | Y1 (crystal), C1/C2 (22 pF) |
| Reset | Manual reset and noise filtering | R1 (10 kΩ), C3 (100 nF), SW1 |
| Decoupling | Filters supply noise for clean operation | C4/C5 (100 nF), C6 (10 µF) |
| D13 LED | Classic Arduino indicator | R2 (470 Ω), LED1 |
Cost Estimate
| Component | Unit Cost | Qty | Total |
|---|---|---|---|
| ATmega328P-PU | $1.80 | 1 | $1.80 |
| 16 MHz Crystal (HC-49S) | $0.15 | 1 | $0.15 |
| 22 pF capacitor (0402) | $0.02 | 2 | $0.04 |
| 100 nF capacitor (0402) | $0.02 | 3 | $0.06 |
| 10 µF capacitor (0402) | $0.05 | 1 | $0.05 |
| 10 kΩ resistor (0402) | $0.01 | 1 | $0.01 |
| 470 Ω resistor (0402) | $0.01 | 1 | $0.01 |
| Tactile pushbutton | $0.05 | 1 | $0.05 |
| Yellow LED (0402) | $0.03 | 1 | $0.03 |
| PCB (2-layer, 5 pcs) | $0.40 | 1 | $0.40 |
| Total | ~$2.60 |
Prices based on LCSC/JLCPCB quantities of 10.
Going Further
- UART: PD0 (RXD) and PD1 (TXD) connect to a USB-serial chip (e.g., CH340C) for programming and serial communication.
- SPI/ICSP: PB3 (MOSI), PB4 (MISO), PB5 (SCK), and RESET form the 6-pin ICSP header used by the Arduino bootloader programmer.
- I²C: PC4 (SDA) and PC5 (SCL) with 4.7 kΩ pull-up resistors to VCC.
- Analog: PC0–PC5 are the six ADC inputs (A0–A5). AREF can be left unconnected (uses internal reference) or driven by an external 3.3 V source.
The full Arduino Uno schematic is open-source and available in Eagle/KiCad format on the Arduino GitHub page.