Adventures in TinyAVR 1-Series

Microchip (Atmel) has been releasing some interesting new MCU’s over the past couple of years, their new 0-Series and 1-Series ATtiny’s (eg, the 412, 416, 817, 3217). The 0-Series and 1-Series are nearly identical, but the 1-Series has a few more peripheral options. I feel like they include some new features that, while not vital to our uses, have some benefits. And any guesses on how old our tried & true ATtiny85 is? 14 years, as of the time of this writing (it was launched early 2005). While microcontrollers may not be developing at breakneck speeds, a lot can change in 14 years.

Benefits

  • Easier wiring for flashing. These guys use the UPDI interface which is only 3 wires: VCC, GND, and UPDI. Compared to our traditional 6-pin wiring, this makes programming clips easier to wire up and makes programming pads & keys appreciably smaller.
  • Internal 32.768KHz ultra-low power oscillator: useful for time keeping (though not as accurate as an external crystal) and can also be used as the main clock source for very low power active states (think ~10uA while active vs the main clock set to 5MHz consuming ~1.6mA )
  • New peripherals: RTC interrupts (replacement for what we use WDT for), true TWI/I2C support, multiple 16-bit timer/counters, QTouch touch controller (capacitive touch sensing), an event system that can run while sleeping and perform simple tasks without waking the main processor… etc
  • For space-constrained applications, available in QFN (4x4mm) and VQFN (3x3mm) packages
  • Internal voltage and temperature sensing (though the ’85 does have this)
  • Need a lot of program space? You can have 32KB with the ATtiny3217

Potential downsides

  • If you want to stay away from QFN (quad flat no lead) chips and stick with our 8-pin SOIC footprint, the biggest chip so far is the ATtiny412 with 4KB. The ’85, albeit with a larger footprint than SOIC-8, has 8KB.
  • There’s not as much information available yet on the 1-Series versus the ’85 which has been used and abused for 14 years
  • Coding for the 1-Series is a bit different than the older ATtiny’s - the registers are named and structured differently. So existing firmwares would need to be ported (but not terribly difficult - I’ve ported RampingIOS)

Development Tools

  • ATtiny416 Xplained Nano (info) (buy): nice, tiny dev board for testing out code and great for programming off-board chips
  • ATtiny817 Xplained Mini (info) (buy): bigger dev board with more options, good for testing out code, and can be used for programming off-board chips (though it’s a bit large if this is all you plan on doing with it)
  • To use one of the Xplained dev boards to program an external chip, you simply need to remove 4x 0 Ohm resistors/jumpers to disconnect the onboard chip. Then you can run VCC (from the VREG pin), GND, and UPDI leads to your chip/board. I soldered on header pins so that I could easily swap back and forth between on-board and off-board.
  • AVR JTAG ICE (info) (buy): without going the “official” route with the Xplained boards, El Tangas has devised a way to use this as a flashing device (think AVRISP replacement)… though it’s a bit hack-y. In order to use it, you need to flash custom firmware onto it. And then to use it with AVRDUDE, you need to modify the avrdude config file to recognize the adapter.
  • My new favorite flashing method (perhaps second to the Xplained Nano) is using a dirt cheap USB to Serial TTL adapter. These can be bought anywhere and can be had for around $1. Common ones use the CH340 / CH341 or CP2102 USB-to-Serial chips. SpenceKonde has a great write-up on these here. You can use these adapters along with pymcuprog, a Python-based open-source utility, created by Microchip itself. Note, you can also use pymcuprog with the Xplained Nano/Mini boards, those actually make things even easier. Another note, my CP2102 adapter had an LED attached to the RX pin; I had to remove this LED in order for the board to work properly.
  • This is my favorite USB to Serial adapter. Since there isn’t an RX LED, it doesn’t require any modifications. And it comes with jumper wires!

Windows: Development
Atmel Studio 7 makes dev’ing for this chips easy. Everything is built-in. Just choose the right MCU and go!

Windows: Flashing

  • Once again, flashing from Windows can easily be done using Atmel Studio and an Xplained Nano / Mini. Note that if you’re going to flash a different chip than what your Xplained board came with (saying using an 416-XNano to flash an ATtiny412) you need to enable the mEDBG (“mini embedded debugger”?) to be used with other target. AS7: Tools (Main Menu) -> Options … -> Tools -> Hide Unsupported Device -> False
  • You can also flash firmware from the command line using “pymcuprog” and either the Xplained boards or the Serial adapter.
  • I have not tried it, but you can probably use the AVR JTAG ICE adapter mentioned above and the modified avrdude config

Linux: Development
This is definitely possible. I’ve built hex files in Linux using AVR GCC. The trick to this is downloading and extracting the Atmel ATtiny Device Family Pack and including those files when you compile your code. See my build script here (it’s an offshoot of TK’s build scripts). Note that you’ll need to update the DFP variable with the directory of your unzipped Device Pack

Linux: Flashing

  • Recommended: The USB to Serial adapters can be used with pymcuprog
  • The AVR JTAG ICE dev tool mentioned above can be used with the modified avrdude
  • The Xplained Nano/Mini boards can be used with pymcuprog

Example pymcuprog commands: note that the device path may vary. For Windows, use your com port as noted in the Device Manager’s Ports section (eg, “com3”). On Linux, check the output of the “dmesg | grep tty” command (eg, “/dev/ttyUSB0”). For MacOS, try the command “ls /dev/{tty,cu}.*” To install pymcuprog, first have python and pip installed, then execute this command: pip install pymcuprog

-- erase the chip (recommended to always do this before flashing firmware)
pymcuprog erase -d attiny1616 -t uart -u /dev/ttyUSB0
-- write a hex file and then verify
pymcuprog write -d attiny1616 -t uart -u /dev/ttyUSB0 -f anduril.hex --verify
-- write fuses, this enables BOD in Active Mode
pymcuprog write -d attiny1616 -t uart -u /dev/ttyUSB0 -m fuses -o 0x01 -l 0x04
-- read back the fuse value
pymcuprog read -d attiny1616 -t uart -u /dev/ttyUSB0 -m fuses -o 0x01

Code Samples

Chip Information and other Resources

Random Thoughts

  • The 412 has a similar footprint to some PIC chips, it makes replacing those easy. I used it as a straight replacement in my D25 headlamp without any funky wiring or trace cutting
  • The default clock on these guys is usually 3.33MHz (20MHz / 6). Changing it is easy, but remember to respect the CCP (configuration change protection).
  • Note: make sure you’re on at least version 3.10.2 of pymcuprog. Earlier versions have a bug with fuses embedded in hex files. If you need to update, the command is “python -m pip install -U pymcuprog”
  • Unlike earlier attiny chips, these new ones actually can have fuses embedded in the hex files. This is pretty handy.

Oshpark Boards

1 Thank

reserved… Justin Case

:+1:

Great. What does all this mean?

It means that us folks that like to build & flash drivers will be buying a bunch of new components soon…. :smiley:

Keep up the good work :+1:

Well I’m subbed… Justin Case! :laughing:

Once upon a time Wight made one of these adapters to replace a pic with an attiny. OSH Park ~

Could a similar adapter board be made to convert the 25, 45, and 85 SOIC footprint to a 20 pin QFN footprint of a 1616?

Consider the size of the SOIC package with space for the programming clip. Take that footprint and cram the QFN package to one corner and in the opposite corner make a three pin L shaped programming port. The programming key would have two pins on one side of a printed circuit board and one on the other. If there is space left over and the trace routing isn’t horrible a few I/O pads could be made. Probably not enough space for a crystal but an accurate clock would be nice.

Newer drivers could have the programming ports on the spring side. The L shaped layout would make it impossible to put the key on the wrong way.

I know it won’t be as easy as it sounds, but it would be nice if it could happen.

I think I recall mr Mike C is using the Attiny1617 for his flashlight driver projects also! I think this is related to new AVR1 series because it also has updi?

Is he? Last I checked in with him I think he was using the 1634, which is the older style, but is a QFN footprint.

Pretty sure Mike is using the 1634, before that he was using the 841. As far as I know gchart is the first one here to use anything with updi.

I’m surprised this isn’t getting more attention. People around here seem to have wanted more pins and memory for a long time but it’s always been the chicken and egg story. Why build a driver using an mcu no one has written firmware for and how do you develop firmware without any hardware to test with?

Without having to use Atmel ice, programming these new drivers is surprisingly cheap. It’ll be even cheaper if usbasp can support updi, and from what gchart is saying that is not too far away. If an adapter board can be made any driver can be converted for cheap. I believe the 1616 is cheaper than an 85 and a tiny driver adapter board at Oshpark should only be a couple bucks for three. The explained board and the total cost of three programming keys wouldn’t be much more than a Ponoma clip. I know how easy it is to wear out a Ponoma clip but I can’t imagine wearing out a programming key.

More I/O pins and up to four times as much memory, the new one series looks good.

I will say, I don’t have any fancy tools (no hot air station or reflow oven) and no stencils yet, so these VQFN have been a pain to solder. I imagine they’ll get easier as I get more experience. The 412 has been easy-peasy of course.

Speaking of programming keys…

That’s correct. Besides more memory I found that the 1634 was far better suited for OTSM than the 841, low power operations are much better.

Not me, not any more. I thought that more would be interested in moving over to 16kb MCUs because I was reading about interest in the 1616 and 1617 about the time I started using the 1634. That was quite some time ago, but to my knowledge nothing happened.

I’m quite happy with the 1634. Believe or not I’ve actually made a driver that uses every single IO on it, but what has my interest is the three pin UDPI programming. That might very well get me on to the 1616 or 3217. I’m some what reserved though, the reason why I went with the 1634 is because it’s 4x4mm with 20 pins. The pin density is high enough, I’ve had some issues with amount of solder paste on them but I seem to have got it dialed now. The 1616 has 20 pins crammed in on 3x3mm, and the 1617/3217 have 24 pins crammed in on 4x4mm. I can’t say I’m looking forward to building drivers with them… I’ve looked for 4x4mm QFN 20 pin options with at least 16kb and UDPI but didn’t find anything. I won’t move over to anything less than 16kb regardless of other benefits so my own options are limited, but gchart’s work with UDPI is something I’m following with great interest.

Hi gchart,
How to wire the 412 for your RampingIOS ?
PIN 1 VCC
PIN 2 SW
PIN 3 —-
PIN 4 PWM
PIN 5 ATL
PIN 6 UPDI
PIN 7 —-
PIN 8 GND

I always thought it was the cost of programming equipment and that held back use of the updi mcu’s, its not the first time I’ve been wrong.

I just soldered the pogo pins on a six pin Harley Quinn programming key. Even with the vias to locate the pins I need a little magnification to line things up. It’s 100 times nicer than using a Ponoma clip. Gchart’s little three pin key would be even better. Would love to figure out a way to attach one to a dial indicator stand.

I’m not sure how gchart is soldering his mcu’s without a hot plate or hot air station, that can’t be easy. I have most of the parts for a GXB172 driver so I’ll be finding out how hard soldering qfn packages is pretty soon. It looks like trying to toothpick the solder in place will be a disaster. I’m hoping thinning down some solder paste with some liquid flux and smearing it around will work OK. Bought a couple spare MCU’s to practice with, trashing boost converters will get expensive.

Do you think putting some vias near the center of the chip to give excess solder a place to go would help?

I’ve been using a hot plate. Not perfect, but better than just using an iron. I just ordered my first stencils, hopefully those will make these QFN chips easier.

This image is labeled for my current setup: [Review] 77 Outdoors D25 Headlamp (18650) - #2 by gchart

Changing pins for PWM, Switch, and adding ALT PWM should all be doable in the tk-attiny.h file except for PWM output also needs to be enabled for specific pins at the top of int main(): set TCA0.SINGLE.CTRLB to enable the correct compare channel(s). You might need to reference the 402 datasheet to map the waveform/compare out to pin assignments (the 412 datasheet is missing some of these details).

The 412 that qchart is using is not QFN package, it’s SOIC with legs.

I usually have a couple of vias in there, and paste does sip through, but I don’t know how helpful it is. I just do it for connection to GND plane.

True, but I’ve also been using the 416 and 817 which are both QFN.

Aha, alrighty. Using a hot plate.

I’ve been using stencils for a long time. I got sick of pasting by hand real fast. If I decided to work overtime the same amount of time I save with stencils, the stencils would pay for themselves multiple times over.

This is a great ref source for everything ATtiny: https://en.wikipedia.org/wiki/ATtiny_microcontroller_comparison_chart

You should add this in the OP.