Top and bottom views of Arduino Nano V3.0 Pre-Soldered CH340G ATmega328P board

ShillehTek Nano ATmega328P CH340C USB-C Pre-Soldered | Product Manual

Arduinousb-c
$5.99 USD In stock · Order by 3pm ET, ships today

Overview

This guide covers the USB-C / CH340C variant (AH034) of the ShillehTek pre-soldered Nano. View the USB-C Nano or see the combined Micro-USB and USB-C manual to compare versions.

The ShillehTek Nano V3.0 is an Arduino-compatible ATmega328P development board with a USB-C connector and WCH CH340C USB-to-serial bridge. It runs at 16 MHz with 5V logic and comes with pre-soldered headers for breadboard use.

There are 14 labeled digital pins (D0-D13), including six PWM outputs, and eight 10-bit analog inputs (A0-A7). A0-A5 can also serve as digital I/O, giving 20 digital-capable pins in total; A6 and A7 are analog-input-only. Hardware UART, I2C and SPI support sensors, displays and other peripherals.

Connect a data-capable USB-C cable and select Arduino Nano in the Arduino IDE. The ATmega328P has 32 KB of flash, 2 KB of SRAM and 1 KB of EEPROM; available sketch space depends on the installed bootloader. A CH340 driver may be needed if the serial port is not detected. See the setup guidance below.

At a Glance

Microcontroller
ATmega328P
Clock Speed
16 MHz
USB Interface
USB-C (CH340C)
Operating Voltage
5V logic
Digital / Analog Pins
14 labeled Digital / 8 Analog
Flash / SRAM / EEPROM
32KB / 2KB / 1KB

Specifications

Parameter Value
Microcontroller ATmega328P (AVR 8-bit)
Clock Speed 16 MHz
USB-to-Serial Chip CH340C
USB Connector USB Type-C
Operating Voltage 5V
Input Voltage (VIN) Use USB 5V for setup; verify board-specific VIN limits before external power
Digital I/O Pins 14 labeled D0-D13; A0-A5 add six digital-capable pins (20 total)
Analog Input Pins 8 (A0-A7, 10-bit ADC); A6 and A7 are analog-only
DC Current per I/O Pin For low-current signals; observe the ATmega328P per-pin and combined port limits
Flash Memory 32 KB total; available sketch space depends on the installed bootloader
SRAM / EEPROM 2 KB / 1 KB
Communication Interfaces UART (D0/D1), I2C (A4/A5), SPI (D10-D13)

Pinout Reference

Board labels Function
D0 / RX, D1 / TX UART receive / transmit; shared with the USB-to-serial bridge
D2-D13 Digital I/O; D2 and D3 also support external interrupts
D3, D5, D6, D9, D10, D11 PWM outputs
A0-A5 Analog inputs or digital I/O (D14-D19)
A6, A7 Analog-only inputs ADC6 / ADC7; no digital I/O
A4 / SDA, A5 / SCL I2C data / clock
D10 / SS, D11 / MOSI, D12 / MISO, D13 / SCK SPI interface; D13 is also the built-in LED pin
RST Active-low RESET (ATmega328P PC6)
AREF / REF Analog reference; do not treat it as a power output
5V, 3V3, VIN, GND Power connections; see the power guidance below

Match the printed labels on the board before wiring. Headers are pre-soldered. The table lists pin functions without assuming a viewing orientation.

Wiring Guide

Powering the Nano

Start with regulated 5V USB power through a data-capable USB-C cable. Disconnect power before wiring, use one power source at a time, and share ground with connected peripherals.

Connection Pin / Port Guidance
USB-C USB port Recommended for programming and initial testing; supplies 5V from the USB host
Regulated 5V 5V pin Direct connection to the 5V rail. Use only a stable regulated 5V supply, check polarity, and disconnect USB first.
External input VIN pin Verify the input range and regulator limits for the actual board before use; USB power is recommended for setup.
3.3V rail 3V3 pin No output-current rating is specified here. Use a suitable external regulated 3.3V supply for peripherals whose demand has not been verified.
Warning: Do not connect an unregulated battery to the 5V pin. The I/O uses 5V logic; protect 3.3V-only peripherals with an appropriate level shifter.
Tip: Power motors, servos and other high-current loads from a separate suitable supply and use a driver where needed. Connect the supply grounds together; do not drive these loads directly from GPIO pins.

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 Regulated supply suitable for the module; share GND
GND GND
SDA A4
SCL A5
Note: Check the peripheral's supply and logic requirements. I2C needs pull-up resistors; check for existing pull-ups and select an appropriate value and voltage. Use a bidirectional level shifter when connecting 3.3V-only I2C devices to this 5V board.
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 Regulated supply suitable for the module; share GND
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: Identify pin 1 from the actual board markings and verify the signal orientation before connecting a programmer. Do not assume the orientation from a different Nano 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);
  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 <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  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);
  Serial.println("Analog Read on A0");
}

void loop() {
  int rawValue = analogRead(SENSOR_PIN);
  // Approximate voltage using an assumed 5.0V ADC reference.
  // Use your measured reference voltage for better accuracy.
  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?
Driver availability depends on your operating system and configuration. If the board does not appear as a serial port, first check that your USB-C cable supports data. Install the appropriate WCH Windows driver or WCH macOS driver if needed, then reconnect the board. Linux systems commonly use the kernel CH341 driver; serial-port access permissions may also need checking.
Which board should I select in the Arduino IDE?
Install the Arduino AVR Boards package and choose Tools > Board > Arduino AVR Boards > Arduino Nano. Select the correct serial port and start with Tools > Processor > ATmega328P. If uploading fails after checking the cable and port, try ATmega328P (Old Bootloader). The installed bootloader determines the correct setting, not the USB connector or CH340 model.
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, with suitable power and logic-level conversion. The Nano uses 5V logic, so do not connect its outputs directly to 3.3V-only inputs. Use an appropriate level shifter, a regulated supply suited to the sensor, and a common ground. Verify the board's 3V3 output capacity before relying on it to power a peripheral.
Why does my Nano keep resetting when I open the Serial Monitor?
Opening a serial port can toggle the CH340C DTR signal and reset the ATmega328P through the board's auto-reset circuit. Your sketch then restarts. Allow startup to complete before sending commands.
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. Use the atmelavr platform with the arduino framework. Select board = nanoatmega328 for the older Nano bootloader or board = nanoatmega328new for the newer bootloader, matching the board you have. A CH340 driver may also be needed for USB serial access.

Related Tutorials

These are project references. Tutorials written for Nano Every or another Arduino board may require different board selections or wiring; follow this manual for this ATmega328P board.

Datasheets and Software References

These manufacturer datasheets describe the individual chips, not the assembled ShillehTek board. They are not board schematics and do not establish this board's regulator limits, dimensions, or included accessories.

Datasheets & downloads

Reference documents for the Arduino Nano V3.0 ATmega328P Pre-Soldered – Micro-USB / USB-C. This manual covers wiring and code; the documents below carry the full electrical specifications.