Documentation

ShillehTek Arduino Nano V3.0 Presoldered CH340G ATmega328P | ShillehTek Product Manual
Documentation / ShillehTek Arduino Nano V3.0 Presoldered CH340G ATmega328P | ShillehTek Product Manual

ShillehTek Arduino Nano V3.0 Presoldered CH340G ATmega328P | ShillehTek Product Manual

manualshillehtek

Overview

The ShillehTek Arduino Nano V3.0 Pre-Soldered (CH340G) is the classic, time-tested Nano: a compact breadboard-friendly microcontroller board built around the ATmega328P running at 16 MHz, with the familiar Micro-USB port and the WCH CH340G USB-to-serial converter. It ships with headers pre-soldered so you can plug it straight into a breadboard and start prototyping. If you've followed almost any Arduino tutorial from the last decade, this is the board the tutorial was written for.

You get 14 digital I/O pins (6 with PWM), 8 analog inputs with 10-bit resolution, hardware UART on D0/D1, hardware I2C on A4/A5, and hardware SPI on D10–D13. Three onboard indicator LEDs (TX, RX, and the yellow D13 LED) make it easy to tell what the board is doing at a glance, and the RESET button lets you restart a sketch without unplugging anything.

The CH340G USB-to-serial chip is supported out of the box on modern Windows, macOS, and Linux. Just plug in a Micro-USB cable, open the Arduino IDE, pick "Arduino Nano" as the board, choose the COM port, and upload. With over 32 KB of flash and thousands of compatible libraries, this board covers sensor reading, motor control, LED animations, data logging, and almost any other hobbyist project you can think of.

At a Glance

Microcontroller
ATmega328P
Clock Speed
16 MHz
USB Interface
Micro-USB (CH340G)
Operating Voltage
5V (3.3V pin available)
Digital / Analog Pins
14 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 (external crystal)
USB-to-Serial Chip WCH CH340G
USB Connector Micro-USB (Type-B)
Operating Voltage 5V
Input Voltage (VIN) 7–12V recommended (6–20V absolute)
Digital I/O Pins 14 (D0–D13, 6 with PWM)
PWM Pins 6 (D3, D5, D6, D9, D10, D11)
Analog Input Pins 8 (A0–A7, 10-bit ADC)
DC Current per I/O Pin 20 mA (40 mA absolute max)
3.3V Pin Output ~50 mA
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)
Onboard LEDs Power, TX (white), RX (red), D13 (yellow)
Dimensions 45 × 18 mm

Pinout Diagram

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

Wiring Guide

Powering the Nano

The Nano V3.0 can be powered through any one of three sources. Only supply power through one source at a time to avoid back-feeding the onboard AMS1117 regulator.

Source Pin / Port Details
Micro-USB USB port 5V regulated from host — easiest for programming and testing
Regulated 5V 5V pin Bypasses onboard regulator — must be clean, stable 5V
Unregulated DC VIN pin 7–12V recommended; onboard regulator steps down to 5V
3.3V Output 3V3 pin Provides ~50 mA for 3.3V sensors and modules
Warning: Never apply more than 5V to the 5V pin or more than 20V to VIN. Exceeding these limits will destroy the voltage regulator and likely the ATmega328P.
Tip: If you're powering motors, LEDs, or other high-current peripherals, feed them from a separate supply rather than pulling from the Nano's 5V pin. The AMS1117 regulator is only good for about 200 mA of total output.

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 5V (or 3V3 for 3.3V modules)
GND GND
SDA A4
SCL A5
Note: Most I2C breakout boards (BMP280, MPU6050, SSD1306, etc.) already include onboard pull-up resistors. If nothing on your bus has pull-ups, add external 4.7kΩ resistors from SDA and SCL to VCC.
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 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 also connected to the onboard yellow 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 is how you reinstall the bootloader if it becomes corrupted, or how you bypass the CH340G entirely for high-speed uploads.

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. Line up your programming cable accordingly — reversing the connector can damage the board.

Code Examples

Blink (Onboard LED)

blink.ino
// Blink the onboard yellow 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);
  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?
On modern Windows 10/11 and recent macOS/Linux distributions, the CH340 driver is typically included automatically. If your computer doesn't recognize the board, download the CH340 driver from wch.cn (the chip manufacturer) and install it. After installing the driver, unplug and re-plug the Micro-USB cable.
Which board should I select in the Arduino IDE?
Choose Tools > Board > Arduino AVR Boards > Arduino Nano. If upload fails with "avrdude: stk500_recv(): programmer is not responding", switch Tools > Processor to ATmega328P (Old Bootloader) — many clone Nanos ship with the older bootloader.
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?
You can power 3.3V modules from the 3V3 pin (good for about 50 mA). However, the ATmega328P's I/O pins run at 5V logic, so signals coming out of the Nano are 5V. Most 3.3V input pins cannot tolerate 5V — use a logic level shifter or a resistor divider for outputs going into 3.3V devices.
Why does my Nano reset every time I open the Serial Monitor?
This is expected. The CH340G pulses the DTR line when a serial connection opens, which pulses RESET on the ATmega328P and restarts your sketch. To disable auto-reset, place a ~10µF capacitor between RESET and GND — just remember to remove it before uploading a new sketch.
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. In platformio.ini, use board = nanoatmega328 (standard bootloader) or board = nanoatmega328new depending on which bootloader your board shipped with. The CH340 driver is the only host-side software you need.

Related Tutorials