STAR Firmware by JonnyC - Source Code and Explanation

I did something similar but took values under load and wrote them to memory every 5 seconds. A long press reads out the latest stored value in a similar blinking fashion. Useful for checking voltage state under load.

Happy new year to you all! :party:

This is amazing. I’m busy for some weeks - heavy workload and some truly desired holiday - and everything’s different.

I feel like a toddler who is trying to keep up with a bunch of 5y-olds… he doesn’t stand a chance, but he truly has fun. :smiley:

On Nov 14th I downloaded what was supposed to be Star Offtime 1.3 (dont remember the source) but that one hadn’t the DualPWM parts.
Now I downloaded StarOfftime from JonnyC’s GitHub page (titled version 1.2 but changelog to 1.3) and #wham# major change.

I very much like the idea to use at least two different outputs, but there are some code changes coming with it, that I don’t understand. I hadn’t fathomed all of the previous code - only the parts I needed to adapt - but now I’m lost at some crucial parts. I already see that what I want to do (using one 7135 at 255-PWM as medium mode) will come into conflict with the DualPWMStart threshold, as I need full PWM in the ALT_PWM_LVL signal path. It seems the Voltage Monitor, who uses the ALT_PWM_LVL, might get a hickup too…

But before I start asking questions that are already answered:
Are the software changes to dualPWM discussed anywhere? I just scanned the last 400 posts of this thread - as well as some of wight’s driver threads - but the FAST_PWM_START / DUAL_PWM_START / ALT_PWM_LVL changes to the code either came completely out of the blue, or I missed it, or they are discussed elsewhere.

I’d be very happy if you could give me a heads up - or if I may ask one or the other question about the code in this thread, when I’m stuck…
Thanks a lot.

There was a version numbering reset when Dual-PWM was forked from the main code for development. Later when Dual-PWM became fit to replace the mainline firmware the version numbering was kept.

IIRC there was never an in-depth public discussion of the new firmware and it’s features. Of course it’s actually at least two firmwares: momentary and offtime. The two major features added to offtime are: A. the ability to change from FastPWM to Phase Correct below a certain threshold. B. the ability to use two PWM outputs simultaneously and revert to only one of them below a certain threshold.

As you may now imagine, those features are aimed squarely at moon mode performance. It would be simple to make small but heavy-handed changes to the current offtime firmware to allow for turning off the main PWM and putting the alt PWM at 255/255 for medium. Unfortunately I haven’t envisioned a simple way to implement these changes so that they interface nicely with STAR_off_time’s other features (like low voltage stepdown).

Ah, I see. All went on behind closed doors :slight_smile:
But I like the result for sure, so thanks nevertheless.

If I only look at the Offtime branch: all started with the nice, configurable and documented STAR firmware which was the first that included low voltage shutdown, then came the off time cap, turbo ramp down, dual threshold for the reverse clicky, now dual PWM modes (fast/PhC) and ALT PWM output channels (PB1/PB0)… this makes a great deal of options for a Nanjg and all the custom driver boards.

I know the STAR firmwares are great just because they are highly configurable with little knowledge. This is what makes them so good and everyone else is writing own code anyway…

I just try to get a grip on the changes. H)

Does this have a benefit only for the FET drivers, or for 7135 drivers as well? Like getting even lower moon or getting rid of the dreaded losing-moon-when-the-driver-is-hot problem?
Thx again

That’s thanks to RMM and JonnyC, they cooked this up. RMM posts about the motivation over here: (#1447) Oshpark Projects

I haven’t played around with it. I don’t think that it will help at all with that problem. That’s really part of what the dual PWM output is intended to help with I think.

I should have at least one driver soon with dual PWM, and am planning to add the ability to control PWM for each channel for each mode. This should enable things like 1x7135 at full power for a more efficient medium mode, and stable moon/low/med on 7135 while still keeping high/turbo on a more-powerful FET.

For drivers with 8x7135 (one split off for moon), it could still use all 8 for the highest mode, but should be able to use just 1 for the lowest few modes.

Richard flew only a select few of us out to his compound to have a discussion, complete with cigars and strippers. Actually Richard came up with this idea, asked if I could do it, so I just added it.

I haven't done any testing to see if you can get lower lows on 7135's with phase correct and if they are consistent across variations of 7135's, but I do know you can use lower values to get the same output compared to fast PWM. To be honest I don't do any tweaking of moonlight modes though, as it's not a feature I ever add to my lights.

Yes, you can. At least, on the very small few I’ve tried it on.

In general, it’s not necessarily lower, but just different. Like, on one 7135-based driver, I found the following available modes:

  • fast PWM=5, phase PWM=3: zero output
  • fast PWM=6: 0.07 lm
  • phase PWM=4: 0.5 lm
  • fast PWM=7: 1.1 lm

So, I went with phase PWM=4 for moon mode. The 0.1lm mode was just a little too dim, and the 1.1lm mode was too bright.

This is something which needs calibration for each individual light though, or at least each driver+LED combination. The lowest and most ideal level for moon varies with the hardware.

ToyKeeper, can you elaborate on how many 7135s the driver in your example had?

My favourite Med mode gradually went down from 750mA until I’m at 350 now… It’s PWM 6/11/40/255 which (at 18kHz/fastPWM) gives me measured 1/36/342/2830 mA. A very nice mode spacing. This screams for
1x7135 pwm255 + 7x7135 pwm255
1x7135 pwm255
1x7135 pwm~low
1x7135 pwm~very-low

Imagine how looking at the new STAR firmware with ALT_PWM made me smile. I thought about how this might work (using mode_idx for voltage stepdown) but I’m sure you’ll be quicker and your results are more reliable.

By the way, I still love the bi-directional mode change with short and medium press. I’ll never ever use anything else anymore. It’s fantastic to change direction without having to go through all modes, especially the high ones.

I should have guessed…

Moon has truly grown on me. It’s nice for a very dark environment and I use it all the time to look after the kids when they’re asleep or woke up at night.

I’m very sure her results are for 8x7135.
-This pretty much is the same that I measured (and saw) in my little writeup about PWM values at different frequencies

Especially the values where the lights start to light up.
But I’m not sure whether this is a matter of fastPWM vs PhaseCorrect, I believe this is a matter of the resulting frequency, as the comparison with 150 Hz suggests.

EDIT: Skip my answer. Any 7135 driver would light up at these PWM values, regardless how many of them are on it. Arghhhh. Just the lumens are different.

EDIT 2:
I just flashed a stock nanjg 105c with most recent STAR Offtime.

- Moon can’t (and does not) light up as it defaults to PWM-3 at the moment.

  • Moon at PWM-4 with dual PWM (phase-correct-PWM (~9kHz) for Moon) does light up, but turns off when the driver gets hot (took less than a minute). So the issue of losing a low Moon is persistent. ALT_PWM with a single (or maybe two) 7135 is hopefully the way to go.

Oh, that one was the 4x7135 driver in the CNQG brass 18650 light. It uses 350mA chips.

I have one with 5x380mA chips, and its best moon mode is fast PWM=6, for about 0.25 lm.

So, I just check a few settings on each light and pick whichever one I like the best.

I finally got around to trying out STAR offtime. I like it. Feels pretty intuitive.

What kind of behavior could be achieved with offtime “no memory”? I think Ideally the driver would always be next mode when the light is on, but from off it would always start on LOW.

That's correct. Or it can always start on high, if the mode order is reversed .

Offtime-no-memory is my favorite configuration. :slight_smile:

Basically, I set it up so that a short press goes to the next mode, a medium press goes to the previous mode, and a long press goes back to the first mode. It thus always starts in the first mode, and can navigate in two directions. If the user goes backward from the first mode, it enters some semi-hidden “negative” modes like turbo and battery check.

Just tried offtime-no-memory. It is exactly what I am after. The general public would probably appreciate that simplicity, I figure.
I’m using a low of “6” with fast pwm. Seems to work pretty good. Is there a limit to how low I can make low before there is some kind of issue?

The lower limit depends on hardware. Driver, LED, and [potentially] input voltage.

In general, for a nanjg driver with current-gen LED the lowest is about 6 (fast) or 4 (phase). For a FET driver the lowest is generally about 1 (phase) or 0 (fast, with some caveats).

It also depends greatly on the number of 7135s (the higher the number, the higher the stable PWM value), the batch of 7135s (they vary from batch to batch, and even within batches), and whether the 7135 is a 350mA or 380mA (350mA can generally run at a lower stable value).