STAR Firmware by JonnyC - Source Code and Explanation

I’m not terribly picky about the license used, but I was figuring the current version of the GPL by default, unless there was reason to use something else. Depending on details, it might be more appropriate to go with an older GPL or LGPL or AGPL, or a BSD license, or Apache license, or … etc.

I’m open to suggestions, if the default isn’t agreeable.

Otherwise, I figured I’d probably host sources and binaries on Launchpad.net, with release files available to deliver builds to people who don’t want to use a DVCS to access the files. Github would work too, though I’m not as familiar with it and it isn’t quite as full-featured. However, git is quite a bit more popular so it might be a good choice even though I don’t like it as much. I could go for either one.

This explains some differences between the two DVCS tools involved:
http://toykeeper.net/tutorials/bzr-vs-git/

Their associated project management sites are far more different though, and it would take a much more in-depth article to compare them.

I think GPL v2 is the more widely accepted license. GPL v3 is the political/controversial one IIRC. I’m not sure that there is anything wrong w/ v2.

If we were voting (which clearly wouldn’t make a difference since it’s the original author(s)’s call) I’d suggest considering a more permissive license. Copyleft licences such as GPL are useful for encouraging folks to share their changes, but sometimes that turns into squabbles which don’t do anyone any good. Mud slinging & etc.

There is a lot of code which was licensed under “v2” instead of “v2 or later”, with copyrights owned by lots of different people (some of which aren’t alive any more), which means the project is stuck with that license forever. People can avoid the version lock-in with the “or later” clause, or avoid all re-licensing issues by assigning all copyrights to a trusted third party such as the FSF (and requiring contributors to do the same).

Otherwise, it’s a question of what people consider to be most free (is it okay to take without giving back?) and what kinds of legal trickery they want to protect against — for example, should we allow “tivo-ization”, which prevents users from running modified code? Like, if Blackshadow were to start using a version of the STAR firmware on their products, would it be okay for them to also make it refuse to run user-flashed firmware?

I don’t mind if different people decide on different licenses for their code; I’m mostly hoping that they’ll all allow republishing and derived works, so that we can all join in the fun. And if someone wants to share but doesn’t want to have to care about all the licensing details, I think GPL v2 with “or later” clause is a good default.

I don’t understand why anyone would want to use the “or later” part. I have only the most basic layman’s understanding of the reason people dislike v3. My understanding is that RMS added an anti-DRM skew. That is the only reason I’m aware of to avoid v3.

If anyone decided to license under v2 at this point in time I can only assume it would be specifically because they did not want v3. It seems that licensing under “v2 or later” would be opening the door to getting relicensed under v3 as others contribute.

Can you help me understand?

The “or later” clause means it’s legally compatible with both v2 and v3, and can be linked with source code from either version. The reason to include the “or later” clause is to maximize compatibility (and minimize drama) when you don’t specifically need the extra stuff in v3. It also helps that v3 is compatible with more non-GPL licenses, so the “or later” means it can be linked with Apache-licensed software too (for example).

Ah, shows what I know. I didn’t realize, or forgot (same thing), that just using / linking against a library required that you be licensed under GPL. Looking at the GNU licenses FAQ I see that now.

intellectual license and giving credit where credit is due, more or less leaving the writers name in the original source code is good enough for me

open source, community development copyleft

I’ve updated the zip file in the link ( http://www.mikec.se/Stuff/MikeC01.zip ) with a new C file that includes the same “Free to use, modify, and share for private use” as STAR v1.1. Is that OK? Otherwise feel free to write what I need to add to make it free for anyone to do as they please with it for private use and I’ll update the file on the link.

Any comments on what I’ve done with it? Any obvious blunders?

Also, does anyone know how to change the WDT interrupt time? It’s about 0.5 seconds default. I can’t see any obvious way of adjusting it. Not that it’s really needed but I would very much like to know how.

Works for me. On my site I say "use these programs however you wish".

Look at..

WDTCR = (1<<WDTIE) | (1<<WDP2) | (1<<WDP0); // Enable interrupt every 500ms

Download the datasheet for the Attiny13A from Atmel and just search for WDTCR and you'll see the different timing options.

Thanks, I’ll look into it.

Nice firmware, thanks for sharing it.
Just had a short look into the momentary firmware and found something which might be useful.
You only enter sleep mode if the light is switched off, I always try to use a sleepmode also in the other modes especially in the moonlight mode because if you use only some mA another some mA consumed by the controller arent perfect.

This could probably easy be added with a else in the main loop. This is what I use to make sure the idle mode is the standard.

In luxdrv it shows

#define SLEEP asm volatile (“SLEEP”)

Then where you want SLEEP you just add SLEEP;

I believe…I really don’t know anything about C

I like to write it like in the link, I set the sleep mode and then start the sleep mode. Its easy to read and i know which mode i used.
The controllers have different sleepmodes with different pro and contras so this is a specific ucontroller thing.
If that is wrong please correct me.

You are the coding master…always best to pay attention to those who know better :wink:

I just tried the offtime memory. Awesome stuff. not tested it in a light but on a power supply it works perfect.
I used a 10uF cap and a CAP_TRESHHOLD value of 200.
The batteryprotection kicked in abit to low for my feeling so I bumped the criticallevel a bit.
I like it very much that you have added a level were the power is totally down. THUMBS UP!
I just added a line to disable the ADC, you already have a procedure in the code. This helps to reduce the current a lot. You even use the idle mode as a standard.
No memory works like a champ too. Fantastic.

I have a question because there is something which confuses me
What does this line: while (!low_voltage(ADC_CRIT));
its in the main routine.

It (busy)loops until voltage is critically low.

I would put the semicolon to separate line to improve readability. :)

Yup, _the_ has it right. Glad it's working for you!

I posted up a dual switch program on my site (for rear clicky + side switch), but I haven't fully tested it out yet and RMM hasn't given it his normal runthrough either. Once it's tested I will post up and we can see what additions can be added if needed.

I flashed the momentary firmware last night on a nanjg, it works quite well.
Never played with the turbo timer but thought for a small light it might be usefull.
I can read the code quite well and it is a simple but very nice code.
I changed it a bit so that it slowly dims down to previous mode and not so harsh and I also dim down on the two highest modes because the half power mode is on 3rd place. But because I thought that dimming is just for pussies I dim down after 5minutes but this is to long to prevent finger burning….5minutes on 4.4A and again 5 with 3A are to much…maybe I will shorten that a bit after a few days of playing with it.

I used a sipik ck12 clone and a 4.4A nanjg.

I've started work on putting an ATtiny13A on a LD29 driver board. Thread link: here is the LD-29 MCU pinout (eg how to put your ATtiny13A in there...). An adapter PCB is pictured in post #27 which will allow the ATtiny to pickup the right pins for power, ground, ADC inputs, etc.

I've also started work on the changes to get STAR_offtime working with this, see post #34. As I posted the code I noticed one glaring mistake (STAR2_PIN should have been removed), but I welcome any review to find additional mistakes.

FWIW, I’ve started a firmware repository and I added a new STAR flavor designed for use as a bike tail light.

The repository currently only contains STAR and a couple derivatives, but I’ll be adding anything and everything I can get permission to share.

The biking tail light code will go into a little 1x16340 light with red XP-E2 as soon as I get the host. It has the following modes: moon, low, med, high, moon-low flasher, low-med flasher, med-high flasher, and heartbeat. It’s my first attiny firmware and I only spent a couple hours on it so far, so it’s a work in progress. However, it does at least work if anyone is interested.

The firmware repository is on Launchpad: Flashlight Firmware Repository in Launchpad
Here’s the link if you’d like to browse the code online.

The tail light .hex file is also pre-built for easy flashing: here.