Documentation

Arduino Nano V3.0 ATmega328P 16MHz CH340C Type-C Board | ShillehTek Product Manual
Documentation / Arduino Nano V3.0 ATmega328P 16MHz CH340C Type-C Board | ShillehTek Product Manual

Arduino Nano V3.0 ATmega328P 16MHz CH340C Type-C Board | ShillehTek Product Manual

manualshillehtek

Overview

The ShillehTek Arduino Nano V3.0 is a compact, breadboard-friendly microcontroller board built around the ATmega328P running at 16MHz. This modernized version replaces the legacy Mini-USB port with a USB Type-C connector and uses the CH340C USB-to-Serial chip for broad driver compatibility across Windows, macOS, and Linux. The board ships pre-soldered with headers, so you can drop it straight into a breadboard and start prototyping.

With 22 usable digital I/O pins (including 6 PWM outputs), 8 analog inputs with 10-bit resolution, hardware I2C (A4/A5), SPI (D10-D13), and UART (D0/D1), the Nano covers the vast majority of hobbyist projects — sensor reading, motor control, LED animations, data logging, IoT prototypes, and robotics. It is fully compatible with the Arduino IDE and PlatformIO, and works with thousands of existing Arduino libraries.

The USB Type-C port and CH340C combination makes this board ideal for modern setups where Mini-USB cables are increasingly rare. Whether you're a beginner running your first Blink sketch or an experienced maker building a complex project, the Nano V3.0 delivers proven ATmega328P performance in a tiny 45mm x 18mm footprint.

At a Glance

Microcontroller
ATmega328P
Clock Speed
16 MHz
USB Interface
Type-C (CH340C)
Operating Voltage
5V (3.3V pin available)
Digital / Analog Pins
22 Digital / 8 Analog
Flash / SRAM / EEPROM
32KB / 2KB / 1KB

Specifications

Parameter Value
Microcontroller ATmega328P (AVR 8-bit)
Clock Speed 16 MHz (external crystal)
USB-to-Serial Chip CH340C
USB Connector USB Type-C
Operating Voltage 5V
Input Voltage (VIN) 7-12V recommended (6-20V limit)
Digital I/O Pins 22 (of which 6 provide PWM)
Analog Input Pins 8 (A0-A7, 10-bit ADC)
DC Current per I/O Pin 20 mA (40 mA absolute max)
Flash Memory 32 KB (2 KB used by bootloader)
SRAM / EEPROM 2 KB / 1 KB
Communication Interfaces UART (D0/D1), I2C (A4/A5), SPI (D10-D13)
Dimensions 45mm x 18mm

Pinout Diagram

Arduino Nano V3.0 ATmega328P 16MHz CH340C Type-C pinout diagram showing digital pins D0-D13, analog pins A0-A7, power pins (5V, 3V3, VIN, GND), PWM outputs, I2C (SDA/SCL), SPI (MOSI/MISO/SCK/SS), UART (TX/RX), and ICSP header

Wiring Guide

Powering the Nano

The Nano V3.0 can be powered through one of three methods. Only supply power through one source at a time to avoid damaging the onboard regulator.

Source Pin / Port Details
USB Type-C USB-C port 5V regulated — easiest for programming and testing
Regulated 5V 5V pin Bypasses onboard regulator — must be clean 5V
Unregulated DC VIN pin 7-12V recommended; onboard regulator steps down to 5V
3.3V Output 3V3 pin Provides ~50mA for 3.3V sensors and modules
Warning: Never apply more than 5V to the 5V pin or more than 20V to VIN. Doing so will destroy the onboard voltage regulator and possibly the ATmega328P.
Tip: If powering the board via VIN with a 9V battery, the onboard AMS1117 regulator can get warm under load. Keep current draw under ~200mA when using VIN.

I2C Peripheral Wiring

The Nano's I2C bus uses pins A4 (SDA) and A5 (SCL). These are shared by every I2C device — just connect all SDA lines together and all SCL lines together, ensuring each device has a unique 7-bit address.

I2C Peripheral Pin Nano Pin
VCC 5V (or 3V3 for 3.3V modules)
GND GND
SDA A4
SCL A5
Note: Most breakout boards (BMP280, MPU6050, SSD1306, etc.) include onboard pull-up resistors. If your bus has no pull-ups, add external 4.7kΩ resistors from SDA and SCL to VCC.
Tip: Use the I2C scanner sketch (in Code Examples below) to confirm your device is detected before trying to read data from it.

SPI Peripheral Wiring

The Nano's hardware SPI peripheral uses fixed pins D10-D13. SS (Slave Select) can be any digital pin, but D10 is conventional.

SPI Peripheral Pin Nano Pin
VCC 5V or 3V3
GND GND
SCK (Clock) D13
MISO (Master In) D12
MOSI (Master Out) D11
SS / CS (Slave Select) D10 (or any digital pin)
Warning: D13 is shared with the onboard LED. The LED will flicker during SPI communication — this is normal but can interfere with SPI devices that are sensitive to clock line loading.

ICSP Header (In-Circuit Serial Programming)

The 6-pin ICSP header exposes the SPI lines directly and is used for programming the ATmega328P with an external programmer (like USBasp or another Arduino running ArduinoISP). This is useful if the bootloader is corrupted or if you want to write directly to flash without using the CH340C.

ICSP Pin Function ATmega328P
1 (MISO) Master In, Slave Out PB4 / D12
2 (VCC) +5V VCC
3 (SCK) Serial Clock PB5 / D13
4 (MOSI) Master Out, Slave In PB3 / D11
5 (RESET) Active-low reset RST
6 (GND) Ground GND
Note: Pin 1 of the ICSP header is marked with a small dot or triangle on the silkscreen. Orient your programming cable accordingly — reversing it can damage the board.

Code Examples

Blink (Onboard LED)

blink.ino
// Blink the onboard LED (connected to D13)
// The classic "Hello World" of microcontrollers

void setup() {
  // Configure pin D13 (LED_BUILTIN) as an output
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // Turn LED on
  delay(1000);                       // Wait 1 second
  digitalWrite(LED_BUILTIN, LOW);    // Turn LED off
  delay(1000);                       // Wait 1 second
}

Serial Communication

serial_hello.ino
// Print a counter over USB Serial
// Open Serial Monitor at 9600 baud to see output

unsigned long counter = 0;

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // Wait for serial port to connect (needed on some boards)
  }
  Serial.println("Arduino Nano V3.0 ready!");
}

void loop() {
  Serial.print("Counter: ");
  Serial.println(counter);
  counter++;
  delay(500);
}

I2C Scanner

i2c_scanner.ino
// Scan the I2C bus and print the addresses of any devices found
// Use SDA=A4, SCL=A5 on the Nano

#include 

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);
  Serial.println("I2C Scanner");
}

void loop() {
  byte error, address;
  int nDevices = 0;

  Serial.println("Scanning...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
      nDevices++;
    }
  }

  if (nDevices == 0) {
    Serial.println("No I2C devices found");
  } else {
    Serial.print(nDevices);
    Serial.println(" device(s) found");
  }

  delay(5000);
}

Analog Read

analog_read.ino
// Read an analog value from A0 (e.g., potentiometer, LDR, analog sensor)
// Convert the 10-bit reading (0-1023) to a voltage (0-5V)

const int SENSOR_PIN = A0;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("Analog Read on A0");
}

void loop() {
  int rawValue = analogRead(SENSOR_PIN);
  float voltage = rawValue * (5.0 / 1023.0);

  Serial.print("Raw: ");
  Serial.print(rawValue);
  Serial.print("  Voltage: ");
  Serial.print(voltage, 3);
  Serial.println(" V");

  delay(200);
}

PWM Fade

pwm_fade.ino
// Fade an LED in and out using PWM
// Connect an LED (with 220 ohm resistor) from D9 to GND
// D9 is one of the PWM-capable pins (marked with ~ on the silkscreen)

const int LED_PIN = 9;
int brightness = 0;
int fadeStep = 5;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  analogWrite(LED_PIN, brightness);

  brightness += fadeStep;
  if (brightness <= 0 || brightness >= 255) {
    fadeStep = -fadeStep;  // Reverse direction at endpoints
  }

  delay(20);
}

Frequently Asked Questions

Do I need to install drivers for the CH340C?
On Windows 10/11 and recent macOS/Linux distributions, the CH340 driver is usually included. If the board isn't recognized, download the CH340 driver from wch.cn (the chip manufacturer) and install it. After installation, unplug and replug the USB-C cable.
Which board should I select in the Arduino IDE?
Select Tools > Board > Arduino AVR Boards > Arduino Nano. Then set Tools > Processor > ATmega328P (Old Bootloader) if the standard option fails to upload — many clone Nanos use the older bootloader.
How many PWM pins does the Nano have?
The Nano has 6 PWM-capable pins: D3, D5, D6, D9, D10, and D11. They are marked with a tilde (~) symbol on the silkscreen. Use analogWrite(pin, 0-255) to output PWM.
Can I use 3.3V sensors with this board?
Yes — the 3V3 pin provides up to ~50mA for powering 3.3V modules. However, the ATmega328P's I/O pins operate at 5V logic. For input signals from 3.3V devices this is usually fine, but sending 5V signals into a 3.3V-only input can damage it. Use a logic level shifter for bidirectional 3.3V devices.
Why does my Nano keep resetting when I open the Serial Monitor?
This is expected behavior. The DTR line of the CH340C pulses the RESET pin when a serial connection is opened, which restarts the sketch. To disable auto-reset, place a ~10μF capacitor between RESET and GND — but remove it during uploads.
What's the difference between A6/A7 and other analog pins?
A6 and A7 are analog-only inputs — they can read analog voltages with analogRead() but cannot be used as digital I/O. Pins A0-A5 can work as either analog inputs or digital pins.
Can I program this board using PlatformIO?
Yes. Create a new project and select Arduino Nano ATmega328 (New Bootloader) or Arduino Nano ATmega328 (Old Bootloader) depending on your board. The CH340C driver is all that's needed on the host side.

Related Tutorials