Attiny25/45/85 FW Development Thread

Yeah, phase-correct mode on tiny25/45/85 is pretty awesome. It runs at precisely 15.6 kHz with nearly zero variation between units, it has none of the side effects of “fast” PWM, it’s fast enough to be invisible during use, and only a tiny slice of the population can hear it.

The main downsides are that it’s not quite beyond human hearing range, and it requires running the MCU at 8 MHz instead of under-clocking for lower power. I’d prefer 10 MHz / 19.5 kHz instead, but that’s not really an option with current hardware.

The common nanjg 4.5 kHz PWM is both audible and visible during normal use. :frowning:

I’ve already done experiments on FET-driven moon modes with extra-fine pulse time adjustment. It didn’t work very well, and varied quite a bit with cell voltage even after voltage-adjusting the pulse timings as much as the attiny allows.

In contrast, a 7135 chip pretty much “just works” with no fancy algorithms. “Boring” can be a good thing.

If moon is the only non-FET mode desired, it’d probably work to simply replace the 7135 with a resistor and drive the LED directly from the attiny pin in moon mode. It would only work for moon mode though, not any of the other low/med modes in the 1 lm to 150 lm range. So, those would have to use the FET and would have their efficiency reduced.

I would suggest putting the driver back to stock and make sure it malfunctions. Keep in mind the ringing is much worse with a fresh hi-drain cell. Although not shown above, I did confirm this with different types and state-of-charge cells.
You can leave the 12 k though, it should not come into play.

Then you have two options.

The easier option is to add the snubber. Dead-bug style across the FET. This option does not affect the switching frequency, if you have any reserves about the PWM frequency limitations.

Second option is the gate resistor. Only one component to add, but more difficult. It is more efficient at lowering the turn-off spiking/ringing. Do not be too much concerned about the lower turn-on speed. For reference, with a 100 ohm resistor, my FET still switched about 15 times faster than a 7135. Of course you can always use a smaller resistor. Smaller resistor = faster FET, at the expense of more ringing.

How does one leave a FET gate drive floating? Since it must be 0-255, what value would be floating? Moon mode only uses the 7135, so the FET PWM output is set to 0, and typically the 7135 PWM output value I use for moon mode is 3. The MCU's have internal pull-downs on I/O pins as I understand it. These MCU's are quite advanced.

Section 10.1 of the Data Sheet on the 24/45/85 (http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf) says:

All AVR ports have true Read-Modify-Write functionality when used as general digital I/O ports. This means that

the direction of one port pin can be changed without unintentionally changing the direction of any other pin with the

SBI and CBI instructions. The same applies when changing drive value (if configured as output) or enabling/disabling

of pull-up resistors (if configured as input). Each output buffer has symmetrical drive characteristics with

both high sink and source capability. The pin driver is strong enough to drive LED displays directly. All port pins

have individually selectable pull-up resistors with a supply-voltage invariant resistance. All I/O pins have protection

diodes to both VCC and Ground as indicated in Figure 10-1. Refer to “Electrical Characteristics” on page 161 for a complete list of parameters.

I can't make all that much sense from all those posts, sorry.

About the flash going into moon mode, the 10K or 12K FET gate resistor solves it - been using it for months. Going back to PWM rates even under 1K is going backwards. Hope the high PWM rates don't have to be sacrificed to get clean pulses.

Decided to button up the JM07 now rather than experimenting with it. Started on a BLF SD10 (Lumintop) upgrade and thought I'd use it's new driver for the R&D. I had it populated, added the 12K FET gate resistor, programmed the 85 (Narsil), and wired it up, sandwich style on the stripped stock driver. Well, the darn thing works perfectly now - didn't need a cap or anything. Think this is the first one that didn't need a cap to change modes reliably... Only difference is that I'm supporting a green indicator SMD LED on pin #3 of the MCU. The SD10 light has a white/transparent button and had the green LED already there, so I "air wired" a 470 ohm resistor between the LED and pin #3, and it works great! In Narsil, I added the support of the LED, just ON or OFF. It's used as a locator light when the light is OFF (OFF by e-switch, not power), and will also blink for LVP, and blinks when blinking of the main LED is done for various reasons.

Yeah, I did that like a year and a half ago. It ramped between 16 kHz and 2 MHz depending on voltage. It was kind of neat, but it didn’t work anywhere near as well as a 7135 chip.

Agreed; it’s a bit hard to follow stream of consciousness text with one sentence per paragraph.

About the moon flash (the turbo-to-moon flash on clicky lights), it appears to be outside the attiny’s ability to control and can only be addressed in hardware. Even just changing to a different model of FET seems to help. Is that the one you were talking about, or is there another?

“A bit different” is one way to describe it. The code is dramatically different depending on switch type.

There are currently 13 e-switch firmwares in the repository, including three I made. Tom E’s Narsil is the most full-featured one though.

The ringing at the end of a full-power pulse still applies to these, and some firmwares take steps to de-bounce the e-switch signal when the wires are extra-long or thin, but at the moment I can’t think of any other stability issues encountered during actual usage. I’ve left a variety of them running for months at a time with no issues, as have other people around here. Dale has some running at 10,000+ lumens. It’s kind of amazing that a 17mm driver can handle ~40 amps.

I have been fighting with my first 25 driver and it all went to hell when battcheck25 did not work, now I have to removed the MCU and program it and put it back on just to run battcheck. Then do it all over to flash Bisto. I would love to see a built in programmable LVP. Maybe run a battery down to 2.9 volts, pop it into the light and enter config mode and tell it that it is now the shutdown point… Anyone considered this option?

I’ve been doing a lot of work on the 85s but I can’t help you here because I do not PWM the FET. My 17mm FET driver has, besides the FET, 8 x AMC 7135s which I find plenty enough for all modes under “full blast”.

Mike - ahh, always forget bout you… Of course! Are your designs (boards and firmware) open/available? The board design may be so different, there’s not much in common. I don’t use PWM’s on the FET much - for typical 5 modes, only mode #4 uses PWM on the FET. I can cause hickups going from full FET mode, to OFF, to moon mode on the 7135 for example, so PWM’s on the FET is never used in this sequence.
The bank of 7135’s typically means the 2nd highest mode is off the 7135’s, while ours is PWM on the FET — that’s about the only difference, but still, a big difference. Going to 7 modes or more would be more PWM FET modes.

I’d like to see this design from you. We need all the help we can get. :wink:

Wouldn’t it overheat at some point? I think that somewhere in the middle range it would need to get rid of close to 1W. Hardware is not my field but I expect that would require some reasonably good heatsink or a different package (or both). And if I’m not completely lost, this could be avoided by switching to PWM above perhaps 300mA or so.

No, not all - negates advantages e-switch firmware has, plus I've seen these glitch's happening with clicky lights/firmware as well. The BLF X5/X6 v2 problems were apparently solved by changing the cap from 10 uF to 12 uF. On clicky switch lights w/25 I've built, I usually go with 2 stacked 10 uF caps to fix the issues.

You have to be very careful operating FETs in their linear region. Most FETs are only specified for pulse/saturated operation. When running them in the “linear” region you can run into all sorts of issues. Hot spots can develop and kill the device, etc. Check the safe-operating-area specs/curves carefully… I know a lot of people were unpleasantly surprised when they tried to use the wrong FETs in adjustable power supply load testers.

I’ll have to take your word for it. My worry was that you’ll take the power being dissipated by eight 7135 and now have it all in a single FET. It seems like a lot to me but I’ll admit it’s just a very rough guess, I haven’t looked up any specs. I might try it and come back with pictures if I burn something :slight_smile:

Granted, but it’s convenient because you already have a heat sink for the LED anyway. Also, it’s not obvious to me that running the LED at very high current is much worse for efficiency than wasting power in the FET or 7135s. This probably depends a lot on the LED involved.

Anyway, how would you go about it? All I can think of for good control over the whole range is to build a crude 1bit DAC for the FET gate. I think it could be really poor if feedback from one of the ADCs is used to hold the output steady instead of having to rely on precalibration.

Hardly… the FETs designed 25+ years ago tend to be quite different from more modern FETs (e.g. smaller process geometry, cell sizes) You have to look closely at the spec sheets to see how they will work in DC/linear operation. Assuming your shiny new FET will work the same as your 25 year old beastie is not a good idea. Now a flashlight running at 5 amps may not be an issue, but if you are using a tiny SOT23 fet, it may be. The only way to be sure is to check the datasheets… and often the relevant info can is very well hidden / non-obvious.

I have designed power controllers for up to 7.5 megawatts. My CD spot welder does 500+ kW pulses. At those power levels the devil is in the details. Magic smoke / silicon plasma wants nothing more than to be free.

Led4power made some drivers which work this way. He has a whole family of drivers available for purchase.

Efficiency was better and there was no pulsing in the output, but the driver itself has overheating issues in the medium-to-high modes. It’s fine on low and on maximum output, but in-between it tends to cook itself. Moon (~4 lumens, not 0.2) operates separately due to problems doing moon from the FET. I recall some issues with “low” mode too, like it was a little unstable and it’s ~60 lumens instead of a single digit and it can’t really go any lower (probably for the same reason the moon mode operates separately).

Unfortunately, led4power hasn’t released any designs or code and the MCU isn’t a type which can be reflashed on-board. It’s a nice product, unsurpassed in several ways, but it hasn’t been very widely used.

Based on led4power’s drivers and the test results for it, I think a linear FET would be a nice way to increase efficiency on modes between ~80 lumens and maximum output, if the driver has good heat sinking. A separate power channel would still probably be required for modes between 0.1 lm and 80 lm though.

Some common code has already been exported into shared headers to avoid duplication. Other parts tend to be different per project, and very different for different types of switches. There is still more de-duplication to be done, but this is very limited due to the “tiny” nature of the attiny.

Nothing available yet. I know a lot of people advocate releasing often but I have had enough talks with people that prefer to wait for a version that is tried, tested and approved. I have a whole pile of old obsolete versions of driver boards that are of no use to anyone. I would hate to have had people waste time and money on those versions, only to hear me say that I don’t support them anymore because I have a new design. Also, I have the FET on the dreaded reset pin (all other pins occupied). It took me a lot of swearing and hair pulling before I managed to build a device for high voltage fuse resetting and get it working. Updating the firmware is by no means an easy task if you do not have a working HVSP fuse resetter, because then you have to make/get one and figure all that crap out.

There are two major differences. First, I have E-switch, voltage monitoring and off time cap all on the same pin. This requires a whole different approach to the firmware. For example I have to have delays on the voltage monitoring because of the off time cap charging and E-switch presses. I have to run the watchdog interrupt at full speed in order to detect E-switch presses instantly, and disable all voltage monitoring until a moment after releasing it. The voltage divider resistors are much higher than “regular” ones as R2 on the divider becomes a bleed/pull-down resistor for the off time cap.
The second difference is that I run any number between one and eight AMC7135s fully on (constant current) and use a single PWM dedicated AMC7135 for all brightness levels between. So all of my mode values consist of two bytes, a PWM value for the PWM decicated AMC7135, and then the amount of AMC7135s I want fully on. It’s a constant current/PWM hybrid.

I have had no such issues. I don’t have any gate resistors or capacitors on the FET, and can happily switch between moonlight low PWM values on the PWM AMC7135 and full blast on the FET without hickups, using both off time mode switching and E-switch mode switching. I’ve been following these discussions with interest (where to put the input cap and so on) but as I have not had any of these issues myself I have nothing to contribute towards solving them. The FET I use is the NXP PSMN3R0-30YLD if that matters.

Except awesomeness, and possibly some of the answers. :slight_smile:

Seeing the differences in board design might make it clear why one design has issues while another does not.

Plus, the things you built by yourself are some of the most fascinating and exciting projects on BLF. You may think of your old boards as obsolete junk, but the ideas within, and the details, could potentially be the basis or inspiration for all sorts of other projects. It’s not just the final revision which matters; the things you learned during development would also be beneficial for other people to know. And you’ve downplayed the value of your code by saying it requires different hardware and different approaches, but variety is exactly what BLF needs to grow and move forward.