Skip to main content
Tutorials

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.

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:

Pin Naming Convention

We use pin1pin28 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

SectionPurposeKey Components
CrystalProvides accurate 16 MHz clockY1 (crystal), C1/C2 (22 pF)
ResetManual reset and noise filteringR1 (10 kΩ), C3 (100 nF), SW1
DecouplingFilters supply noise for clean operationC4/C5 (100 nF), C6 (10 µF)
D13 LEDClassic Arduino indicatorR2 (470 Ω), LED1

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.