Well… at this point, I’ve ported RampingIOS to run on the Series-1 chips (ATtiny412 / 416 / 817 / etc). That was pretty easy as almost everything was pretty self-contained. And I’ve created a couple drivers from scratch using that setup with good luck.
But now it’s time to try and tackle to larger, but more popular options… Andúril/FSM and NarsilM, here we come! I dunno exactly when I’ll get around to porting the code, but I made a development board for the ATtiny816 (or 1616 / 3216). Basically the same at the 817 except it’s 20 pin instead of 24; I don’t plan on need 24 pins anytime soon. Instead of running through regulators or FETs, I’m just using the MCU output to run the LED (limited with resistors). Since this is just for testing, I don’t need it to be bright… actually, bright is bad because I’d just be blinding myself.
I’ll chime in with a small update… I’ve been working a little with getting all functionality I need running on the 3217 for a specific project. I just got the last piece of the puzzle working, OTSM.
With a 100uF cap measuring off time in 0.125 second intervals with BOD fully enabled at 1.8V threshold I got about 11 seconds with the 1634. With this new 3217 I get about 35 seconds with the same setup. Then I tested using BOD in sampled mode and got just over a minute. In sampled mode it might even be reasonable to test OTSM with a 10uF cap.
Sometimes I like reading datasheets for fun and to see what unexplored features are out there. I've been using Timer Counter A every time I needed PWM, but these new 1-Series chips have multiple timers including one called Timer Counter D which is described as such in the datasheet:
The Timer/Counter type D (TCD) is a high performance waveform controller that consists
of an asynchronous counter, a prescaler, compare logic, capture logic, and control logic.
The purpose of the TCD is to control power applications like LED, motor control,
H-bridge and power converters. The TCD contains a counter that can run on a clock which
is asynchronous from the system clock.
In essence, this allows us to use a different clock for the system than what is being used for PWM. Without the TCD, to get high resolution PWM at a high frequency, you'd need to run the system clock at a high speed (like 20 MHz), but that can consume a non-trivial amount of power (10 mA) especially if you want to drive an LED at low power for a long time. By separating the system clock and the one used by PWM, we can use the Ultra-Low Power (ULP) 32 kHz clock for the system while using the 20 MHz clock for PWM only. This can save a decent amount of power (consumption < 1 mA). To prove this out, I used Atmel's ATtiny817 Xplained Mini dev board and set it up for current measurement (removing a single 0-Ohm resistor and forcing current to pass through my DMM as explained in the Xplained Mini User Guide). The DMM used in this test is my Aneng AN8008.
The code for the PWM current tests can be found here. After conducting the current tests, I tested out the TCD functionality for driving the Xplained's on-board LED. That code can be found here.
Note: default 1-Series main clock is 3.33 MHz (20 MHz oscillator with prescaler divisor of 6)
Agreed. I never saw the need for it before. But if you want high frequency and reduced consumption, it looks like a good option. I’m going to try and airwire a couple of my ’412 based drivers to get a real driver running with it.
I’ve never tried running the system on the ULP clock, it does look interesting for OTSM. Your test #1 and #13 suggest that I could use pretty low rated caps for OTSM, and with TCD I see no reason to use any other clock for the system. One of these days I have to test how much reliable off time I can get from a 10uF cap at both 3.33MHz and 32kHz ULP.
Well… it only took me a year to get the time to work on this. :person_facepalming: To my defense, I brought home my 5th child (yes, 5) just a couple weeks after getting the PCBs in the mail.
In the past few days, I have managed to (1) flash the dev board using Linux (previously I had only used Atmel Studio for these newer chips) and (2) completely ported over Anduril to run on the AVR 1-Series! I’ve got it running seemingly flawlessly on the dev board. Code can be found here. I’ve tested: ramping/stepped modes, batt check, temp check, flashy modes (candle, lightning, bike, etc), button aux LEDs, etc.
Next up: get this on a proper driver and in a flashlight. This will aid in verifying full thermal regulation, battery warnings, sleep mode current draw, etc.
This is great news. I immediately thought of your pic12 adapter board but am not sure how easy it would be to replace a pic with an 816. Programming the 816 shouldn’t be too bad, either using an explained board or maybe an arduino. Probably switch out the battery voltage divider resistors to match anduril and remove the ntc if the light has one for temperature sensing.
Is moving the switch input and the outputs around on the 816 fairly straight forward?