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

ShillehTek Nano ATmega328P Micro-USB & USB-C Pre-Soldered | Product Manual

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

Overview

The ShillehTek Nano V3.0 is an Arduino-compatible ATmega328P development board available in two pre-soldered versions: Micro-USB with a WCH CH340G USB-to-serial bridge and USB-C with a WCH CH340C USB-to-serial bridge. Both run at 16 MHz with 5V logic and have headers already soldered for breadboard use. This manual covers their shared setup and pin functions; connector and component placement differ between the boards.

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 cable matching your selected board: Micro-USB for XS997-MICRO or USB-C for AH034. 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.

Choose Your USB Version

Version USB-to-serial chip SKU Product link
Micro-USB WCH CH340G XS997-MICRO View Micro-USB Nano
USB-C WCH CH340C AH034 View USB-C Nano

Both versions use the ATmega328P and pre-soldered headers. Choose the version that matches your USB cable. The USB bridge does not determine which bootloader is installed. For the USB-C version's dedicated reference, see the USB-C CH340C manual.

At a Glance

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

Specifications

Parameter Value
Microcontroller Atmel ATmega328P (AVR 8-bit)
Clock Speed 16 MHz
USB-to-Serial Chip WCH CH340G on Micro-USB; WCH CH340C on USB-C
USB Connector Micro-USB (Type-B) or USB Type-C, depending on selected variant
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)
PWM Pins 6 (D3, D5, D6, D9, D10, D11)
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
3.3V Pin Output Output capacity is not specified here; use a suitable external regulated supply when required
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)
Onboard LEDs Power, TX, RX, and D13 indicators

Pinout Reference

Arduino Nano V3.0 CH340G ATmega328P pinout diagram showing TXD (D1), RXD (D0), RST, GND, D2-D12 digital pins on the left side and VIN, GND, RST, 5V, A7-A0 analog pins, REF (Analog Reference), 3V3 (3.3V Output), D13 on the right side, with TX LED, RX LED, Pin13 LED, RESET button, ATmega328P microcontroller, and Micro-USB connector labeled

Micro-USB version shown: this diagram depicts the CH340G board before header installation. Both product variants ship with pre-soldered headers. The USB-C CH340C board has a different connector and component arrangement; use the shared pin-function table below and match the printed labels on your actual board before wiring.

Shared ATmega328P Nano Pin Functions

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

This table applies to both USB versions and does not assume a viewing orientation. A6 and A7 are analog-only; A0-A5 can also be used as digital I/O.

Wiring Guide

Powering the Nano

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

Connection Pin / Port Guidance
Micro-USB or USB-C, as fitted 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 hardware I2C bus uses pins A4 (SDA) and A5 (SCL). You can daisy-chain multiple I2C devices on the same two lines — just make sure 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: Run the I2C scanner sketch (in Code Examples below) first to confirm the device is detected before debugging sensor-specific code.

SPI Peripheral Wiring

The Nano's hardware SPI peripheral uses fixed pins D10–D13. Chip Select (CS/SS) can be any digital pin, but D10 is the conventional choice.

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 also connected to the onboard LED. It will flicker during SPI traffic — harmless in most cases, but be aware if you have an SPI device that's sensitive to clock-line capacitance.

ICSP Header (In-Circuit Serial Programming)

The 6-pin ICSP header exposes the SPI lines directly and is used for flashing the ATmega328P with an external programmer (USBasp, AVRISP mkII, or another Arduino running ArduinoISP). This allows you to reinstall the bootloader or program flash without using the CH340G or CH340C USB-to-serial bridge.

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 wired to D13.
// The classic "Hello World" of microcontrollers.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);   // LED_BUILTIN = D13 on the Nano
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

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 address of every device.
// Use SDA = A4 and 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 (potentiometer, LDR, etc.)
// and print both the raw 10-bit value (0-1023) and the voltage.

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.
// Wire an LED (with a 220 ohm resistor) from D9 to GND.
// D9 is one of six PWM 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 CH340G or CH340C?
Driver availability depends on your operating system and configuration. If the board does not appear as a serial port, first check that your Micro-USB or USB-C cable matches the board and 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?
Six: D3, D5, D6, D9, D10, and D11. They're marked with a tilde (~) symbol on the silkscreen. Use analogWrite(pin, 0-255) to generate PWM output.
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 reset every time I open the Serial Monitor?
Opening a serial port can toggle the CH340G or 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 the other analog pins?
A6 and A7 are analog-only — they can read voltages with analogRead() but they cannot be used as digital I/O. Pins A0 through A5 can be used 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.