Published: 27 December 2019
Last updated: 21 June 2024
The Arduino Nano DIP is the smallest complete Arduino board ever. It's compatible with the Arduino Uno, but surprisingly, it has the same size as the ATmega328P-PU chip itself: 33 x 10mm.
Nano DIP: the smallest Arduino Nano board 33 x 10mm
Selling at Elecrow
You can buy the Nano DIP at Elecrow.
Smallest complete Arduino board: the Nano DIP 33x10mm
Advantages of the Arduino Nano DIP
Unparalleled compactness, being the smallest Arduino board ever developed. Its DIP26 size of 33 x 10mm allows for easy integration into projects with limited space constraints.
It has more functionality than the Arduino Uno.
The DIP26 package leaves more pins free on a solderless breadboard.
Arduino Nano DIP features
DIP26 size, 33 x 10 mm
Arduino Uno compatible
ATtiny3217 instead of the ATmega328P
21 I/O pins
12 x 10 bit ADC channels
Supply voltage 1.8V - 5.5V
Supply voltage V+ max18V
Clock 16MHz (max 20Mhz)
Straightforward pinout
Additional features compared to the Arduino Uno
1 x fast 350ksps 8-bit real DAC
The USB supply pin is protected by an ideal diode that doesn't have a 0.7V voltage drop
A 2-pole header, which is connected to D2, can be used as a jumper. Use pinMode(INPUT_PULLUP)
The LED at D0 can be disabled by a jumper
Features same as the Arduino Uno
USB connector for programming and debugging
Bootloader Optiboot preloaded
32kByte program memory
2048Byte SRAM
Reset button
3 LEDs for indication of power, TXD and RXD
5V regulator
Missing features compared to the Arduino Uno
The clock oscillator has no pins for an external crystal. The frequency accuracy is 2%
There is no 3.3V regulator on board
The Arduino has shrunken down to 33x10mm
Nano DIP pinout
Note that the megaTinyCore is used. All the information needed to program the Nano DIP can be found on SpenceKonde's GitHub.
Arduino Nano DIP circuit
Small ATtiny3217 development board circuitArduino Nano DIP circuit
Why did you build the Nano DIP?
It was just fun to build a complete Arduino on the size of the ATmega328P-PU chip itself. It was a challenge to get all parts on a PCB the size of DIP26 IC. It was a really entertaining puzzle. Moreover, I wanted a solid groundplane, thus as few tracks as possible at the bottom side.
I know, there are better microcontrollers, like the STM32F103C8. But that is not an Atmel chip, which can cause compatibility problems.
I also have many applications where the Arduino ATmega328PB-AU microcontroller is simply too large in size.
PCB design
Fitting all 23 components within the 33mm x 7.6mm PCB was a challenge. To make this job easy, I could have opted for small 0201 SMD parts and thin 2 mil traces. However, I chose not to do this. I wanted the PCB to be cheap to produce, which imposed restrictive conditions:
PCB trace width / space 6/6 mil.
Via drill / outer diameter 12/24 mil.
All SMD parts 0402 or larger.
Smallest Arduino: Nano DIP 33x10mm
Arduino Nano DIP GND plane
Here is an video of the Nano DIP old version without the USB connector.
It controls 21 LEDs in this demonstration video on YouTube:
More memory (32k/2048)
Until the year 2018, the small and cheap ATtiny microcontroller series, such as the ATtiny85, had less memory (8k/512). This was often a serious problem, sometimes you need a microcontroller with a larger memory but small in size. But in 2018, more powerful ATtiny chips were introduced, such as the ATtiny3217. It has 32kByte program memory and 2048Byte SRAM equal to the ATmega328P which is used on the Arduino Uno.
QFN24 package transformed into DIP26 package
For hobbyists, the drawback of the ATtiny3217 is that it is only available in a QFN24 package, with a pin spacing of 0.5 mm, which can only be soldered using a solder mask. Since there is no breadboard-friendly DIL package of the ATtiny3217, you always need a development board. That's why I made the small DIP board, just like I did with the SAM15x15.
Compatibility
The pin numbers are different than the Arduino Nano or UNO, you must change them in the sketch.
5V regulator
The maximum input voltage on the V+ pin is 18V.
Upload sketches with the Arduino IDE
Step 1
File > Preferences > Additional board manager URLs = http://drazzy.com/package_drazzy.com_index.json
Tools > Boards -> Boards Manager
Select "megaTinyCore by Spence Konde" and click "Install"
Step 2
Tools > Board = ATtiny3217 (Optiboot).
Board = First set Tools > Clock Speed = 16MHz.
Upload the sketch
Note that the bootloader is already burned by me.
How to burn a bootloader into the ATtiny3217
Note that you don't need this step because the bootloader is already burned by me. Read here how you can burn a bootloader yourself: Burning a bootloader into the ATtiny3217.
ATtiny3227 vs ATtiny3217
My preference is the ATtiny3217 because it has an extra DAC. These are the main differences:
ATtiny3217: 1-series, DAC
ATtiny3227: 2-series, no DAC,12 bit ADC, 3kbyte RAM, differential ADC, 2 UARTs
See more:
Calibration of the internal RC oscillator
The accuracy of the internal RC oscillator is factory calibrated within ±4%. This only applies for 0-70ºC 16MHz or 20MHz and voltage between 1.8 and 3.6V. It is possible to perform a secondary calibration of the RC oscillator to obtain a frequency accuracy within ±1% see here. Note that the oscillator temperature coefficient is also corrected and calibrated.
Checking the clock speed
If you forget to set the clock speed with tools> Clock Speed, it can have serious consequences. For example, at the Yamaha battery dongle, to reduce power consumption, I use a clock frequency of 5MHz instead of 20MHz. If the factory forgets to set the frequency, the dongle will still work. While the dongle still passes the test, the electronics will overheat. That is why it is important to add a test in the software. In this example, the program stops if the clock frequency is not 5Mhz.
while(checkClockSpeed()) blinkError(5)
bool checkClockSpeed() { byte b = CLKCTRL.MCLKCTRLB; // 0=20MHz 1=10MHz 11=5MHz not allowed: 16, 8, 4, 1 MHz return b!= 3; }
My favorite Arduino chips