Skip to main content
Contents[Show/Hide]

Oproep: Ik zoek iemand die kan zorgen voor de continuïteit van deze website

Dily3217 mini ATtiny3217 development breakout board in DIL24

Published: 27 December 2019
Last updated: 04 January 2023

30x10mm ATtiny3217 Arduino breakout board in DIL24

I am looking for someone who can take over the production and sales for a small one-time fee. I will place a link to your shop here too.

The Dily3217 is an Arduino compatible development board of 30x10mm, easy to integrate since it has a breadboard-friendly narrow DIL24 package. It is powered by the new ATtiny3217 and it has 21 I/O lines.

It can be programmed with an external USB FTDI adapter. It has more functionality than the ATmega328, see ATtiny3217 vs ATmega328p.

No external crystal connections

A serious difference with the ATmega328 is that no external crystal can be connected. Only the internal oscillator can be used, which has an accuracy of 2%. The ATiny3217 is definitely not suitable for applications where a precise timing is required.

ATtiny3217 Arduino development boardATtiny3217 Arduino development board

ATtiny3217 in breadboard-friendly narrow DIL24 packageATtiny3217 in breadboard-friendly narrow DIL24 package
The Dily3217 controls 21 LEDs in this demonstration video on YouTube:

Dily3217 circuit

Small ATtiny3217 development boardSmall ATtiny3217 development board circuit

ATtiny3217 development boardATtiny3217 development board

ATtiny3217 Arduino breakout board in DIL24ATtiny3217 Arduino breakout board in DIL24

Dily3217 vs ATmega328

The Dily3217 board is smaller than the ATmega328P chip itself, but it has more I/O pins, that’s crazy:

  • ATmega328P has 20 I/O pins
  • Dily3217 has 21 I/O pins

Dily3217 vs ATmega328P vs Arduino NanoDily3217 vs ATmega328P vs Arduino Nano

Self-clamping Arduino ICSP program connector

Instead of connector, I use just holes with zig-zag orientation on the PCB. The pin header of the programming tool is than inserted directly into these holes. By the zigzag positions of the PCB holes, the connector pins of the programmer press against the holes and make electrical contact. In practice, this connection is good enough during programming use. See Connectorless Arduino ICSP / FTDI / UPDI program connectors.

Extra 21 LEDs and a buzzer

I had an idea to provide the Dily3217 with 21 LEDs and also a buzzer. 

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.

How everything started

For the design of a battery fuel gauge with the MAX17263, I used an ATmega328PB, which controls the fuel gauge.
Note that you should no longer use the ATmega328P, but the ATmega328PB, this is the successor and is cheaper and better too.

ATmega328PB example with MAX17263 battery fuel gaugeATmega328PB example with MAX17263 battery fuel gauge

You see that the ATmega328PB is much too large in relation to the fuel gauge chip. That is why I wanted to use a smaller ATtiny chip. However, previously, the ATtiny chips doesn't have enough memory and you could not debug them well because they don’t had a UART. Then, I discovered the ATtiny3217, it has been released in 2018. This chip is small and has about the same features as the ATmega328P. Because the chip is so small, I immediately came up with the idea to make a narrow DIL24 design: the Dily3217.

Why choose the ATtiny3217?

The ATtiny3217 has the most memory (32k/2048) and I/O pins (21) of the ATtiny series. And because of the QFN-24 package, the chip is extremely small. Note that, there is a trend that many new chips are only delivered in very small packages, with a pin spacing of about 0.5 mm.

QFN24 package transformed into DIL24 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 Dily3217 board, just like I did with the SAM15x15.

Compatibility

The Dily3217 development board has more or less the same functionality as an Arduino Uno or Nano, you can simply upload sketches via the serial port because it has a bootloader. The difference with the Arduino Uno or Nano is:
The supply voltage is 1.8V - 5.5V, a voltage regulator for higher supply voltages can be soldered optionally.

The ATtiny3217 contains a hardware UART

A big advantage is the hardware UART, which is needed to be able to debug well.
Previously, you could only debug using a software UART on the ATtiny chips that didn't work very well.

Dily3217 board features

  • Atmel microcontroller ATtiny3217
  • Bootloader Optiboot preloaded (same as the Arduino Uno)
  • The DIL24 package leaves many pins free on a breadboard
  • FTDI connector-less connector
  • 32kByte program memory (same as the Arduino Uno)
  • 2048Byte SRAM (same as the Arduino Uno)
  • 21 I/O pins (20 on the Arduino Uno)
  • 20MHz clock at 5V (16MHz on the Arduino Uno)
  • 8-bit DAC (not on Arduino Uno)
  • Onboard LED
  • Power LED
  • Reset button
  • Supply voltage 1.8V - 5.5V
  • Optional voltage regulator for supply voltages higher than 5.5V
  • Straightforward pinout
  • See more on the Microchip website

Straightforward pinout

The pinout is straightforward: pin 1 = ATtiny3217 pin1, pin 2 = ATtiny3217 pin2 etc

On board regulator

The maximum power input is 5.5V.
On the bottom side of the PCB, you can mount a voltage regulator to allow supply voltages above 7V, the same as the Arduino Uno. Use an external voltage regulator if you need more output power.

ATtiny3217 Arduino development board on board regulatorATtiny3217 Arduino development board on board regulator

Upload sketches with the Arduino IDE

Step 1

Step 2

  • Connect the Dily3217 with a FTDI-adapter to the USB connector of your PC
  • Tools > Board = ATtiny3217 (Optiboot)
  • Board = First set Tools > Clock Speed = 20MHz, than set Tools > Select the clock speed
  • Voltage for UART baud calc = closer to 3V or 5V
  • Upload the sketch
  • Note: repeat step 1 after changing from board (this is an Arduino bug)

Spence Konde has extensively mapped out how to program the ATtiny3217
Note that the bootloader is already burned by me.
A standard FTDI board is needed to upload sketches and debugging via USB. 

FTDI connector-less connector for uploading sketches and debugging via USBFTDI connector-less connector for uploading sketches and debugging via USB

How to burn a bootloader into the ATtiny3217

Note that you don't need this step because the bootloader is already burned by me. But here's a description of how it's done:
Step-by-step guide to turn a uno/nano/pro mini into a UPDI programmer

Dily3217 burning bootloader with Arduino NanoDily3217 burning bootloader with Arduino Nano

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 most popular Atmel AVR-chips

  • ATmega328PB is the successor of the ATmega328P
  • ATtiny3217 is very small, but with large memory (32k / 2048) and hardware UART
  • Atmega32u4 has a built-in USB-interface but is with $4 expensive.