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
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
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. |
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 |
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) |
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 |
Code Examples
Blink (Onboard LED)
// 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
// 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
// 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
// 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
// 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
analogWrite(pin, 0-255) to generate PWM output.analogRead() but they cannot be used as digital I/O. Pins A0 through A5 can be used as either analog inputs or digital pins.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.



