The Arduino UNO R3 is the classic ATmega328P-based Arduino board and remains the reference point for a huge amount of Arduino documentation, shields, examples and educational material.
Its architecture is simple:
- 8-bit ATmega328P at 16 MHz;
- 5 V logic;
- 14 digital I/O pins;
- 6 analog inputs;
- 6 PWM outputs;
- one hardware UART;
- one SPI interface;
- one I²C/TWI interface;
- two dedicated external interrupt pins.
UNO R3 Specifications
| Feature | UNO R3 |
|---|---|
| Main MCU | ATmega328P |
| Architecture | 8-bit AVR |
| Clock | 16 MHz |
| Logic voltage | 5 V |
| Flash | 32 kB |
| SRAM | 2 kB |
| EEPROM | 1 kB |
| Digital I/O | 14 |
| Analog inputs | 6 |
| PWM outputs | 6 |
| ADC | 10 bit |
| USB interface | ATmega16U2 USB-to-serial/interface MCU on official board |
| Maximum recommended current per I/O | 20 mA |
Complete Digital Pinout
| Arduino pin | ATmega328P pin | Main functions |
|---|---|---|
| D0 | PD0 | UART RX, digital I/O, PCINT16 |
| D1 | PD1 | UART TX, digital I/O, PCINT17 |
| D2 | PD2 | INT0, digital I/O, PCINT18 |
| D3 | PD3 | INT1, PWM OC2B, PCINT19 |
| D4 | PD4 | GPIO, T0/XCK, PCINT20 |
| D5 | PD5 | PWM OC0B, PCINT21 |
| D6 | PD6 | PWM OC0A, comparator input, PCINT22 |
| D7 | PD7 | GPIO, comparator input, PCINT23 |
| D8 | PB0 | GPIO, Timer1 input capture, PCINT0 |
| D9 | PB1 | PWM OC1A, PCINT1 |
| D10 | PB2 | PWM OC1B, SPI SS, PCINT2 |
| D11 | PB3 | PWM OC2A, SPI MOSI/COPI, PCINT3 |
| D12 | PB4 | SPI MISO/CIPO, PCINT4 |
| D13 | PB5 | SPI SCK, LED_BUILTIN, PCINT5 |
PWM Pins
The six standard PWM outputs are:
|
1 2 3 4 5 6 7 8 9 |
D3 D5 D6 D9 D10 D11 |
Use:
|
1 2 3 4 |
analogWrite(9, 128); |
for approximately 50% duty cycle on D9.
PWM Timer Mapping
| Timer | Pins |
|---|---|
| Timer0 | D5, D6 |
| Timer1 | D9, D10 |
| Timer2 | D3, D11 |
Timer0 also supports Arduino timekeeping functions such as millis() and delay(). Reconfiguring it directly can therefore break normal timing.
Analog Inputs
The six analog inputs are:
|
1 2 3 4 5 6 7 8 9 |
A0 A1 A2 A3 A4 A5 |
They map to ATmega328P ADC0-ADC5 and provide 10-bit conversion.
|
1 2 3 4 5 |
analogRead(A0) → 0 to 1023 |
With a nominal 5 V reference, one ideal LSB is about 4.88 mV.
A0-A5 Can Also Be Digital Pins
The analog pins are also digital-capable and may be referred to as:
|
1 2 3 4 5 6 7 8 9 |
A0 = D14 A1 = D15 A2 = D16 A3 = D17 A4 = D18 A5 = D19 |
I²C
The hardware TWI/I²C bus uses:
|
1 2 3 4 5 |
A4 / D18 = SDA A5 / D19 = SCL |
UNO R3 also duplicates SDA/SCL near the AREF header for shield compatibility. They are the same electrical bus, not a second I²C peripheral.
SPI
The hardware SPI pins are:
|
1 2 3 4 5 6 7 |
D10 = SS D11 = COPI / MOSI D12 = CIPO / MISO D13 = SCK |
The same SPI signals are available on the 6-pin ICSP header.
D10 and SPI Master Mode
D10 is the ATmega328P hardware SS pin. When the MCU is used as an SPI controller/master, configure the hardware SS pin as an output so an unexpected low level cannot force the SPI peripheral into slave mode.
UART
|
1 2 3 4 5 |
D0 = RX D1 = TX |
The official UNO R3 uses an ATmega16U2 as the USB interface. That USB interface is connected to the ATmega328P hardware UART, which means external devices on D0/D1 can interfere with uploads and Serial Monitor.
External Interrupts
The two dedicated external interrupt pins are:
|
1 2 3 4 5 |
D2 = INT0 D3 = INT1 |
Use:
|
1 2 3 4 5 6 7 8 |
attachInterrupt( digitalPinToInterrupt(2), myISR, FALLING ); |
Pin-Change Interrupts
Most UNO R3 GPIO also support the ATmega328P pin-change interrupt system:
- D0-D7 through Port D;
- D8-D13 through Port B;
- A0-A5 through Port C.
Unlike INT0/INT1, pin-change interrupts share vectors by port and require lower-level code or a supporting library.
Built-In LED
The built-in user LED is connected to:
|
1 2 3 4 |
D13 |
Because D13 is also SPI SCK, the LED can flicker during SPI communication.
AREF
The AREF pin is used for the ADC reference. Arduino can select an external reference with:
|
1 2 3 4 |
analogReference(EXTERNAL); |
Only connect a valid external reference within the ATmega328P limits.
Internal 1.1 V Reference
The ATmega328P also includes an internal nominal 1.1 V reference, useful when measuring smaller signals that fit inside that range.
Input Capture on D8
D8 maps to Timer1 input capture:
|
1 2 3 4 |
D8 = ICP1 |
This can timestamp external edges in hardware and is useful for RPM, frequency and pulse-width measurements.
5 V Logic
UNO R3 is a 5 V board. This is one reason it remains easy to use with older sensors, LCDs, relay boards and shields.
Modern 3.3 V sensors may still require level shifting, especially when their inputs are not 5 V tolerant.
GPIO Current
Arduino’s pinout specifies a maximum recommended current of:
|
1 2 3 4 |
20 mA per I/O pin |
The ATmega328P absolute maximum ratings should not be treated as normal design targets. Use drivers for power loads.
Power Pins
The board provides:
- VIN;
- 5 V;
- 3.3 V;
- GND;
- IOREF;
- RESET.
Arduino documents VIN operation across roughly 6–20 V, with 7–12 V commonly recommended for comfortable regulator operation.
Classic Limitations
UNO R3 does not include:
- Wi-Fi;
- Bluetooth;
- native USB on the main ATmega328P;
- CAN controller;
- RTC;
- true DAC;
- large RAM.
Those limitations are exactly why newer boards such as UNO R4 exist, but they also keep the UNO R3 architecture easy to understand.
Quick Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
UART D0 RX D1 TX External interrupts D2 INT0 D3 INT1 PWM D3 D5 D6 D9 D10 D11 SPI D10 SS D11 COPI/MOSI D12 CIPO/MISO D13 SCK I2C A4 SDA A5 SCL ADC A0-A5 10 bit Built-in LED D13 Logic 5 V |
Final Thoughts
The UNO R3 pinout became the de facto Arduino reference because it is simple, predictable and extremely well documented.
The core rules are easy to remember:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
D0/D1 → UART D2/D3 → external interrupts D3/D5/D6/D9/D10/D11 → PWM D10-D13 → SPI A4/A5 → I2C A0-A5 → 10-bit ADC |
For modern projects requiring more RAM, native USB, CAN, DAC or wireless connectivity, newer boards are more capable. For learning AVR timers, GPIO and the classic Arduino API, UNO R3 remains one of the clearest platforms available.