STAR Firmware by JonnyC - Source Code and Explanation

1335 posts / 0 new
Last post
garrybunk
garrybunk's picture
Offline
Last seen: 2 hours 7 min ago
Joined: 10/31/2011 - 09:25
Posts: 6068
Location: Johnstown, PA

What would happen if I flash STAR off-time but didn’t have a capacitor in place? I’m looking for “off-time” memory during mode selection, but “no memory” once the light is powered off. Wondering if I can accomplish this without the cap.

-Garry

My Bike Lights Thread, Optics (TIR) Comparison Beamshots, Diffusion Techniques


NOTE: Moving my photos from PhotoBucket to Flickr. PM me or post in the thread if you can’t see my images and need me to fix or send a gallery link. PhotoBucket images should remain visible until November 2018.
RMM
RMM's picture
Offline
Last seen: 2 months 2 weeks ago
Joined: 07/23/2013 - 13:47
Posts: 4006
Location: USA

garrybunk wrote:
What would happen if I flash STAR off-time but didn't have a capacitor in place? I'm looking for "off-time" memory during mode selection, but "no memory" once the light is powered off. Wondering if I can accomplish this without the cap. -Garry

Usually, the result ends up being that every click is registered basically as a "short click", where the driver would advance to the next mode (not what you want).


Doesn't selecting "no memory" accomplish what you want, anyways?  The off-time STAR with capacitor in place functions like you are describing.  

Mountain Electronics : batteries, Noctigon, and much more! What's new? 

garrybunk
garrybunk's picture
Offline
Last seen: 2 hours 7 min ago
Joined: 10/31/2011 - 09:25
Posts: 6068
Location: Johnstown, PA

But that IS what I want. When the light is on I always want a short click to advance modes. When the light is off & turned on I want it to always turn on in the first mode.

I found that regular “STAR” (on-time) even when set to “no memory” would require two clicks to advance modes because “memory” had set it. That was annoying.

Anyway, I just tried flashing STAR off-time to a 105D without capacitor and it IS working just as I wanted! Single-click always advances mode & always starts in first mode! (EDIT-see next post.)

My problem now is that I need reverse mode order which I originally planned to get by soldering star #3 on a 105C. Can I change mode order in the code simply by reversing the line entries to put high first? (I’m referring to the lines where I enter my desired PWM values – the only lines I ever edit.) Or are there other lines in the code to edit also?

Thanks,
-Garry

My Bike Lights Thread, Optics (TIR) Comparison Beamshots, Diffusion Techniques


NOTE: Moving my photos from PhotoBucket to Flickr. PM me or post in the thread if you can’t see my images and need me to fix or send a gallery link. PhotoBucket images should remain visible until November 2018.
garrybunk
garrybunk's picture
Offline
Last seen: 2 hours 7 min ago
Joined: 10/31/2011 - 09:25
Posts: 6068
Location: Johnstown, PA

WAIT! My bad! You’re right RMM! Upon closer inspection it’s acting like a driver with “next mode memory” which is not what I want! Doh! So I guess I’m back to switching the 105D out for a 105C.

I would still like to hear an answer to switching mode order in the code though.

-Garry

My Bike Lights Thread, Optics (TIR) Comparison Beamshots, Diffusion Techniques


NOTE: Moving my photos from PhotoBucket to Flickr. PM me or post in the thread if you can’t see my images and need me to fix or send a gallery link. PhotoBucket images should remain visible until November 2018.
RMM
RMM's picture
Offline
Last seen: 2 months 2 weeks ago
Joined: 07/23/2013 - 13:47
Posts: 4006
Location: USA

garrybunk wrote:
WAIT! My bad! You're right RMM! Upon closer inspection it's acting like a driver with "next mode memory" which is not what I want! Doh! So I guess I'm back to switching the 105D out for a 105C. I would still like to hear an answer to switching mode order in the code though. -Garry

You can use ToyKeeper's "NOINIT" modification to the code that will give you off-time without the capacitor, so you can use it on the 105D without adding any extra parts (for best timing, also change the fuses to those listed in the initial code description). (it's in ToyKeeper's repository).

To switch the default mode order in the code, find this:

if ((PINB & (1 << STAR3_PIN)) == 0) {
		// High to Low
		mode_dir = -1;
	} else {
		mode_dir = 1;
	}
}

Then change to this (or just solder Pin 3 to ground with the default code...):

if ((PINB & (1 << STAR3_PIN)) == 0) {
		// High to Low
		mode_dir = 1;
	} else {
		mode_dir = -1;
	}
}

Mountain Electronics : batteries, Noctigon, and much more! What's new? 

garrybunk
garrybunk's picture
Offline
Last seen: 2 hours 7 min ago
Joined: 10/31/2011 - 09:25
Posts: 6068
Location: Johnstown, PA
RMM wrote:

garrybunk wrote:
WAIT! My bad! You’re right RMM! Upon closer inspection it’s acting like a driver with “next mode memory” which is not what I want! Doh! So I guess I’m back to switching the 105D out for a 105C. I would still like to hear an answer to switching mode order in the code though. -Garry

You can use ToyKeeper’s “NOINIT” modification to the code that will give you off-time without the capacitor, so you can use it on the 105D without adding any extra parts (for best timing, also change the fuses to those listed in the initial code description). (it’s in ToyKeeper’s repository).


To switch the default mode order in the code, find this:

<span class="pyg-k">if</span> <span class="pyg-p">((</span><span class="pyg-n">PINB</span> <span class="pyg-o">&amp;</span> <span class="pyg-p">(</span><span class="pyg-mi">1</span> <span class="pyg-o">&lt;&lt;</span> <span class="pyg-n">STAR3_PIN</span><span class="pyg-p">))</span> <span class="pyg-o"> 0) {
		// High to Low
		mode_dir = -1;
	} else {
		mode_dir = 1;
	}
}

Then change to this (or just solder Pin 3 to ground with the default code...):

if ((PINB & (1 << STAR3_PIN)) </span> <span class="pyg-mi">0</span><span class="pyg-p">)</span> <span class="pyg-p">{</span>
		<span class="pyg-c1">// High to Low</span>
		<span class="pyg-n">mode_dir</span> <span class="pyg-o">=</span> <span class="pyg-mi">1</span><span class="pyg-p">;</span>
	<span class="pyg-p">}</span> <span class="pyg-k">else</span> <span class="pyg-p">{</span>
		<span class="pyg-n">mode_dir</span> <span class="pyg-o">=</span> -<span class="pyg-mi">1</span><span class="pyg-p">;</span>
	<span class="pyg-p">}</span>
<span class="pyg-p">}</span>

Thanks RMM! Perfect solution for me! Others previously pointed me toward “Bistro” with brown out detection and I didn’t realize ToyKeeper had a version of STAR modified with brown out detection as well.

Thanks,
-Garry

My Bike Lights Thread, Optics (TIR) Comparison Beamshots, Diffusion Techniques


NOTE: Moving my photos from PhotoBucket to Flickr. PM me or post in the thread if you can’t see my images and need me to fix or send a gallery link. PhotoBucket images should remain visible until November 2018.
Lexel
Lexel's picture
Offline
Last seen: 1 hour 24 min ago
Joined: 11/01/2016 - 08:00
Posts: 5587
Location: Germany

this one is for the 13A Attiny?
does 25 44 ones work too?

HighEfficiency
HighEfficiency's picture
Offline
Last seen: 2 years 6 months ago
Joined: 02/05/2014 - 11:33
Posts: 74
Location: USA

Lexel – Yes this works for ATTiny 13A.

On another note:

Would there be a way to configure the LVT in STAR so that it would require a duration of low voltage before going into ADC_Low or ADC_Crit?

I’ve made a couple of lights that are temperamental with the LVT. A casual knock, or bump will trigger the LVT.

Any help here?

ToyKeeper
ToyKeeper's picture
Offline
Last seen: 46 min ago
Joined: 01/12/2013 - 14:40
Posts: 10147
Location: (469219) 2016 HO3

HighEfficiency wrote:
Would there be a way to configure the LVT in STAR so that it would require a duration of low voltage before going into ADC_Low or ADC_Crit?

I’ve made a couple of lights that are temperamental with the LVT. A casual knock, or bump will trigger the LVT.

Any help here?


Doesn’t it already do that? In STAR it has a “lowbatt_cnt” thing so that it won’t step down unless the value is low several times in a row. You could slow it down just by increasing the number of readings required to trigger it.
HighEfficiency
HighEfficiency's picture
Offline
Last seen: 2 years 6 months ago
Joined: 02/05/2014 - 11:33
Posts: 74
Location: USA

Toy – as always, you’re a big help. Many thanks.

I’m assuming this is the line of code I would change:

“if (++lowbatt_cnt > 8)”

A setting of 8 (default) would be 4 seconds and in this case definitely shouldn’t be tripping it. A brief bump is really only a fraction of a second.

I’ll try increasing the value to 8, 16, etc and see if that has any effect. Is there a max length of time that this program will accept ( say one or two minutes)?

Big thanks.

ToyKeeper
ToyKeeper's picture
Offline
Last seen: 46 min ago
Joined: 01/12/2013 - 14:40
Posts: 10147
Location: (469219) 2016 HO3

I would assume it’s probably fine up to 254.

If a quick bump trips it, maybe it’s not LVP causing the problems. Maybe it’s actually losing power and rebooting? Loose springs barely making contact? Firmware won’t be able to fix that.

HighEfficiency
HighEfficiency's picture
Offline
Last seen: 2 years 6 months ago
Joined: 02/05/2014 - 11:33
Posts: 74
Location: USA

That was my thought as well but one thing stands out. I have removed ADC_Low and only use ADC_Crit in my program. When it senses LVT it flashes 10 times then turns off.

The 10 flashes then turnoff is exactly what it is doing when bumped.

That wouldn’t be a sign of a reboot would it?

ToyKeeper
ToyKeeper's picture
Offline
Last seen: 46 min ago
Joined: 01/12/2013 - 14:40
Posts: 10147
Location: (469219) 2016 HO3

No, doesn’t sound like a reboot. Could easily be a poor connection though. I’ve had false LVP warnings when something wasn’t connected well, and it was bump-sensitive.

HighEfficiency
HighEfficiency's picture
Offline
Last seen: 2 years 6 months ago
Joined: 02/05/2014 - 11:33
Posts: 74
Location: USA

Thanks for the help. I’m going to tinker with “if (++lowbatt_cnt > 8)” and just see if that makes for a quick fix.

Pages