Adventures in TinyAVR 1-Series

Very exciting developments and many thanks to ToyKeeper, gchart, HarleyQuin for the work! Actually I've been recently working on a driver with 3 channels control just like what TK was talking about, using a buck regulator for most of the range, a separate channel for very low brightness levels, and finally one for FET, though practically speaking the lowest range doesn't need much resolution for brightness levels I think.

Thanks for popping in, loneoceans! I always look forward to seeing what you cook up :slight_smile:

I’m excited for development on low-brightness channels. So far the standard has mostly been a 1x7135 channel, and it does alright. I’d be most excited for an example of how to do it well that others could implement on their future designs

New 20mm FET+1 boards just came in and I assembled one today and threw it in a Sofirn SC31B. So far everything is working great. :+1:

sorry, I hadn’t cleaned flux off yet

I admire your skills and abilities gchart. Well done.

Really nice work!

Outstanding! Any updates? I'm working with Anduril2 now. I assume that's a FET+1.

Well, not a whole lot to update on I guess. Driver works great, and Anduril is running well on it. I haven’t tried Anduril2 yet. Want to make sure it’s fairly stable before I mess with it.

It’s getting pretty close. I probably would have merged it already, but I’ve been trying to get a bit more feedback first and am hoping to give it an updated diagram or two. However, there’s so much stuff to put into the diagram, it keeps either turning into a tangled mess or a reference table. So perhaps I should split it into several diagrams.

When every mode change required going through “off”, the diagram layout was much simpler. But with new shortcuts between a few different modes, I end up with lines crossing each other. It’s nice during use, but makes for a messy flowchart.

gchart sent me a fully populated 20 mm FET+1 1616 driver, a pogo pin cable assembly, and a XNANO 0416 dev kit. I was able to get Anduril running on it today:

  • created a AS 7 project for the 1616
  • plugged in gchart's Anduril/fsm source code
  • got the XNANO USB dongle board recognized by Windows (must use a good high qual USB-A to Micro USB-B that supports power data)
  • used AS 7 to program the driver via its Tools-->Device Programming method

It's working!

Temp calibration was Dead On!! I never saw this before with any Narsil/Anduril light, ever (gchart mentions it's accurate in the OP)

Now I have a working dev/test platform for this processor. Just have to get it in to a light for full testing.

Woohoo!

PS - I think you meant a USB cable that supports data. Many do not - they only have the power wires.

I’ve noticed that with a lot of “charger cables”, especially those that come included with cheap stuff. Bonus points if they’re super short (8 inches/20cm or less).

Thank you for your great work gchart, I want to make a tint adjustable driver and I think I should go with those 1 series attiny. The 3 wires flashing, calibrated temp sensor, and fast higher resolution PWM all sound very good.

A bit late but here is the answer :

I’m a novice in EE too but I want to make an Anduril tint ramping driver and those 7135 wont do so I’m trying to learn.

To explain a bit, the signal from the MCU (attiny1634) is divided down to Rsense level (50mV for a 10mΩ Rsense and 5A) by R3-R4, and is filtered by R4-C3 and fed to the non inverting input of the Op Amp, output to the gate of the mosfet, and Vsense to the inverting input, creating a feedback loop which makes the op amp adjust Vgs of the mosfet to maintain both its input at the same voltage. Reducing the duty cycle on PB3 lowers the voltage at the op-amp’s Vin+, for example at 10% we get 5mV, thus the gate voltage is lowered to get Vsense at 5mV, so 0.5A.

C5 : I suppose it is a decoupling capacitor for the op amp VCC.
R6 : gate resistor.
R7 : gate-source resistor, I’m not sure it’s necessary here ? I thought it was needed to discharge the gate capacitance as fast as possible when switching. No switching here.
C4 : when I simulate the circuit without it there are massive current oscillations so I guess it’s to eliminate those, 100pF seems to be sufficient, the higher it is the slower the current is adjusted, especially at very low currents, I’m guessing this is why there is a turn ON delay at level 1 and 2 and maybe its value is too high and could be reduced to improve that (I just put some probable values for the capacitors on the schematic, I didn’t measure them)
R8 : looking for precision Op-Amp I came upon this page , the diagram mentions “resistor cancels out parasitic seebeck effect voltage”, so hmmm… probably that :nerd_face: .

There is a 2.8V LDO (MIC5205) powering the MCU and the aux LEDs, and a second mosfet for the direct drive channel.

In the led4power driver there is a direct drive option with just one mosfet onboard so I’m guessing there is simply another signal from the MCU going to the gate of the mosfet, pulling it to high for direct drive. I don’t know if it ramps down from DD to CC with PWM, but in simulation PWM on the gate seems to cause some problems and only seems to work at low frequencies, it seems that the op amp feedback loop is not fast enough to respond each time DD is OFF. Probably why on the Noctigon there is a dedicated mosfet for DD.

I tested the opposite thing in simulation to achieve very low output, instead of pulling the gate to high, pulling it to low (a small nFET between the gate of Q2 and GND, controlled by another pin) when dimmed analogically at low output, say 10mA, even just 8bit PWM would give extremely low outputs, but again it only works at low frequencies unfortunately.

So the other way mentioned in the thread is increasing the resolution, it would help a bit, if it works in practice in this case because the voltages compared by the op amp become extremely low, 12uV at 12bit, the offset voltage of the TLV333 is 2uV(typ) 15uV(max) so it’s just really close. It would do 1.2mA, which is sublumen if we assume 3mA/lm.

Probably another channel is preferable, maybe just a resistor would do but current varies with the cell’s voltage, a low current PWMable CC linear regulator would be preferable, I see the ones you mentioned in another post but smaller packages would be better.

It would be great to have a BLF reference linear driver based on this design(noctigon, convoy, led4power), it’s more efficient than FET+n*7135 drivers while still not being as complicated/large as switching converters.

Anyway I’m basing my tint adjustable driver on this Noctigon driver, basically by putting two linear CC channel on it.

One question that have is about Timer/Counter D, when it says that there is one, does it means that only one of the 2 pins which can use it at a time, or is that not what it means at all ?

C5 will indeed be a decoupling capacitor, it’s a typical value for one of those. I’m pretty sure C4 in the feedback-loop makes this an op-amp integrator circuit. R6, R7 and R8 might be there to facilitate “DC-gain control”. But I can be wrong about it, haven’t looked at it too closely. Maybe you can find more info in https://www.electronics-tutorials.ws/opamp/opamp_6.html

EDIT: On second thought, V+ is not connected to GND so it is definitely not a “regular” integrator circuit.

EDIT2: It’s also possible that PWM only works on lower frequencies due to gate-capacitance-related factors. Maybe the MCU pin can’t supply/discharge enough current to charge/discharge the gate-capacitor fast enough.

First off, thanks for the great diagram and explanation!

Nope, the one “timer” is one instance of a timer configuration. The different timers can be set up for different clock sources, dividers, etc for different frequency and resolution. Once you set that timer up, any of the waveform-output pins can be set up to have a PWM signal generated on them. Without looking at a datasheet, I think Timer D has 4 outputs? Note that the Timer D setup is a bit different. In that a couple of the outputs can be set to follow each other and such.

You’re welcome and thanks for the answer. So I’ll wire my 2 channels to those TCD pins

Btw, I’ve got some Timer D sample code here:

http://www.ghart.com/blf/firmware/Tests/pwm_tcd_led.c

I’ve seen it described simply as voltage follower, for example here.

Yeah you’re probably right, I’m overthinking this :person_facepalming: . I just saw a capacitor in the feedback-loop and thought hmm, I’ve seen that before in opamp-configurations, but I did not think about the other things on the input/output…


Perhaps it’s possible C4 is there to not “overload” the opamp-output if the gate (capacitance) of the mosfet gets charged? Although R6 already limits this current charging/discharging current.

R7’s function (because of the rather high and pretty common value) might be to make sure the gate get’s pulled low if the OPAMP is disabled (high-impedance output instead of a low/high?), and so to make sure the mosfet is open.

R8 (because of its common value) might be there to limit the current flowing in -V (which is very low but not totally non-existend) and so not mess with the voltage over Rsense (~high-impedance voltage measurement, a multimeter for example has an impedance in the MegaOhm-range).

Capacitor C4 is needed for AC frequency compensation of circuit because we don’t have any negative feedback and we will have open loop amplifier circuit which will oscillate very easy.