Attiny25/45/85 FW Development Thread

By the time you click 25 million times, we'll be getting 5000 lumens in a keychain light with no heat Smile - time for an upgrade has long past.

Hi Rick,
i don’t discard a hardware failure.

I thought also i have been sold wrong capacitors as, if i am not wrong, too big cap could explaing “next mode” memory; right?.

As for dry joints, i am planning to do a second driver, this should shed some light on the subject.

Tom, could you confirm your mode memory doesn’t work properly?

I got no modes at this point, so can't test mode memory - all I get is config mode - that's it.

Ahem, it is 25.6 million. Failing at 25 million will be a premature failure. Like I said, I am an optimist…

re: “I thought also i have been sold wrong capacitors as, if i am not wrong, too big cap could explaing ”next mode” memory; right?”

I have not peeked inside the Bistro firmware code, so I would not be able to definitely answer that. I have read JonnyC’s OffTime capacitor code. If Bistro is like JonnyC’s work:

- an oversize capacitor will length the bleed-off time. It should have the effect of lengthening the duration of what it calls quick-click. So a longer wait between click is accepted as the “quick”.

- an undersize capacitor will shorten the bleed-off time. It should have the effect of speeding up time. If it is too-awful-small (too far below 1uF), you would not have quick click at-all. the fastest on/off would still be seen as power-off-too-long.

Do you have a DMM with capacitor measurement?

As for me, I did not use an off-timer capacitor. During my testing, I found my capacitors to be varying too much. With multiple flashlights, I do not want to individually calibrate each capacitor for the “off timer count.

So, in my code, I set a flag at power on and increment the mode and save. After a delay, I cleared the flag before I restore/store the mode memory. So I know with the flag whether it was turned off quickly last time (before the delay expired), or not.

ToyKeeper has a code repository. :bigsmile: In addition to her own code, she has also archived lots of other peoples open source code. http://bazaar.launchpad.net/~toykeeper/flashlight-firmware/trunk/files All of her code would be in “bin” and “ToyKeeper”. Other people’s code is under their respective BLF usernames.

Bistro in her normal repository: trunk/files/head:/ToyKeeper/bistro/
Bistro in her testing repository: tiny25/files/head:/ToyKeeper/bistro/

Thanks for the link! There is a lot I can learn from in there.

Given what Tom E said, I no longer think the eeProm routine is possible the source of the issue. I think Pablo E’s issue perhaps lies in the capacitor as he suspected, and perhaps other hardware issue.

I am going to dig into those source code and see what trick I can learn.

As far as I can tell rev.165 from her firmware trunk, worked for me. X6SE XM-L2, wight’s A17DD-L with ATtiny25, bistro rev 165, command line to flash:

Those are the fuses TK wrote she uses in this revision. So that’s BOD@1.8V enabled, 8MHz +4ms

Now with that revision 208 from her testing trunk, there are no significant differences as far as fuses should be concerned, right? Diffchecker

Fuses mentioned in bistro are just in the comments. Fuses in /bin/flash-25.sh is active code. I’d go with those as the newest. But the different fuses are located in the repository branch that she said was for “testing”. So only try code in that branch if you want to test out new code. Be aware that it might not have been tested much, if at all. No complaints if it doesn’t work, bricks your chip or eats your cat. :smiley:

EDIT-see additional info also.

The difference in the high fuse settings of 0xD2 vs 0xDF is enabling two BOD.

If memory serves (from reading the datasheet a couple of weeks ago), BOD should trigger interrupt, but in quick scan of the code with the repository link given earlier, I didn’t find BOD interrupt handler. It may be there and I missed it.

If I am right (again, from memory of what I read two weeks ago of the datasheet, and did not do a detail read of the code, just a quick scan), it will, during power out, trigger interrupt. If interrupt handler is in the code and I missed it, it will do what the code is designed to do. Without interrupt handler, the jump table should jump to a clear-interrupt and return. So it will either do a job, or do nothing if nothing is implemented.

So there should be no harm done.

EDIT: I reviewed the datasheet. The BOD generates a RESET interrupt.
After rereading how the BOD works, I would go with BOD disable instead of enabled unless I have a plan of what should happen when brown out occurs. The datasheet (Section 7.4.3) recommends BOD turned off if not needed.

That’s what i was afraid of, that even the longest click acts as a quick -clik, it would explain next mode memory; but after being the flashlight off all the night, it still starts in next mode, so i think i may discard this possibility as there is no so big 0805 cap.

That’s is the problem, i have no one.
I have tried to have access to one with no luck for now.

Interesting, but too advanced for me :open_mouth: software is something i have started to study this year, maybe at the end of the grade i could follow you :bigsmile:

Thanks, i’ll test it.

Actually, overnight may not fully discharge a capacitor because the bleeding off slows down a lot as the charge get lower and lower. Before trying what is below, give your cap 24-48 hours to discharge. See if it makes a difference. When I was testing (10uF), I certainly did not bleed it dry at 4 hours.

Also during my testing, I was continually reading my capacitor. It never discharge to below a certain point. Just the spikes was able to refill the capacitor enough to prevent it from dropping further. A large percent of charge remaining on a 1uF is a much much smaller percentage of (perhaps spike-refilled) charge on a 22uF. Since you don’t program yet, you can’t change the trigger point and test.

If 24-48hr discharge doesn’t work, pursuit other avenues first. Go try your fuse settings (I made some comment about that near the end of this reply), if that makes no difference, try this:

You may also be shorted to V+ or another voltage source like the PWM pin or the ADC pin. So, once you turn it on, it immediately see a lot of voltage where the off-time cap is.

The short could be at the capacitor or at your chip. Visually check with a loupe or any kind of magnifier you can get a hold of. It may be visible. At times, it is very hard to see.

To confirm, best would be with a DMM, but since you don’t have one:

Do you have an SMD resistor around 10K that you could “borrow” from another board? If not and you have another NANJG105c, borrow the 19.1K or the 4.7K, whichever is easier to remove. Replace your capacitor with this borrowed resister.

- If you have a short at the chip’s legs, your MCU would still “see the world” as if your capacitor is full.

  • If your short was at the (now removed) capacitor, with the resistor only, your MCU would “see the world” as a capacitor that is always empty.
    That would tell you if you need to desolder the chip and re-do.

If you can’t even get a hold of a resistor to do the test above…See if you can find #6 pencil. Draw a thick line across the two ends of the capacitor - thick as in 0.5mm thick, thick enough to be visible. The carbon from the pencil would serve as a crude resistor, but you really have no control of the resistance beyond the thickness of the line. Make it thick line, and report the result. It should discharge your capacitor sooner. If only you have a DMM, you can test if your home-made capacitor is making good contact and what is the resistance. Now we have to do it blind…. Try that and report the results. (If you do try this, clean up afterward. The bits of carbon left could shake loose and could mess you up else where.)

You can also skip the pencil and just to assume your have a short somewhere and try again. De-solder the chip and the capacitor and try again.

Well, if you are not 3000 miles from New Jersey USA, I’d say come-on by and use mine. If you can, get a cheap one. Get one with capacitor measurement would help. I don’t know if you guys can order stuff from China cheap. A $10USD meter would do nicely since –1% or even–2% is adequate for this kinds of stuff.

Next to the screw driver, DMM is just about the most important tool whenever you start digging around with things like this.

Software is important if you are interested in playing with electronics and the kinds of things like a driver. The knowledge of one software-language is very transferable to another. So, you may actually start with picking up some concepts using something like JAVA (not JAVA script) with tons of resources so you can do things like declare large arrays with disregard. Freed from most resource constrains, you may learn quicker than always having to squeeze the last byte to the last bit.

After JAVA, Arduino is a good stepping stone to the ATTINY. An AVR based Arduino like the UNO is cheap. It has more tools and resources to learn than trying to learn with the TINY right off the bat.

Good luck with that…

Good luck, it is unlikely BOD has anything to do with the problem, but you never know. If there is a dry-joint or some hardware problem, it could be that it does a double start: crash first time, then start again. That would advance to the nest mode.

Hi Rick,
thanks for all you effort.

I’ll leave the light off 48h to see what happens.

I meant i have no DMM with capacitor measurement, of course i have a DMM :bigsmile: , but without this feature.
Sorry i’ve made you write all that.
I thought only the most expensive ones had this option, now i am looking for my credit card :money_mouth_face:

Ha ha i haven’t used a pencil for that since my computer overclocking era, I have good memories of that time.

JAVA is the main subject in the grade i am studing, i hope in 6 month i can help in this kind of threads, if C is not much different.

I’ll try all the possibilities, i hope to back only with satisfactory results.

Your flashlight can read out the raw value it’s getting from your OTC. So you can see how far your cap is discharging (or not discharging).
ToyKeeper wrote firmware for flashing out the raw OTC reading. “offtime-cap.c” located in her /ToyKeeper/battcheck/ folder.

What OTC are you using? Capacitors come in many different specs. Different specs will discharge at different rates. For example the OTC RMM sells is 1 uF 16v X7R (0805 size). And different driver boards can also effect the discharge rate. When you are building your own boards you really need to get the OTC readings from your board.
Offtime-cap.c takes an OTC reading at power up then flashes it out for you. So you would do a quick click, write down the reading, repeat 5 times to get an average. Then do the same for a long click, say a 1.0 second click, or whatever time you want to use for your long click.

The offtime-cap.c Halo pointed out which should help you a lot…

Since you do have a DMM, you can skip the 48 hour discharge. With a DMM, is worth reopening up the flashlight and do some measurements. And while opened, you can discharge the capacitor manually.

- First, turn the power on for a few seconds (charge the capacitor up)

- Remove power supply (or battery)

- Now measure the voltage across your capacitor. It should have some voltage and should be falling. With a 4 digit DMM, you should actually be able to see the last digit change (within seconds). Note the voltage and time on paper.

- Measure again a couple of seconds later and see what it reads. Note that on paper. It should be less voltage than before.

- Repeat after 5 seconds wait, again voltage should have fell a bit more.

- Repeat after 10 seconds, again voltage should have fell a bit more.

  • Measure again this time across MCU Pin2 and ground, you should read about the same voltage as across the capacitor.

- With that confirmed, you know PIN2 is probably connected right. Now check again by first discharging the cap. Use a bare wire or a screw driver and touch both ends of the capacitor. It should now be discharged. Use DMM and measure for 0-volt.

- Continue with the NANJG not powered, and switch DMM now in OHM mode (this should be done twice, see below)

- First do a test, probe Pin7 and ground, you should read 4.7K

- Probe Pin7 and Pin 8, you should read 19.1K

- Now you can test and see if PIN2 is connected to any other MCU pin. None of them should have a near zero ohm reading. In fact, I see all 0L (infinity/out of range) on my TINY85V. Note for possible funny behavior between Pin2 and Pin4. Pin2 is your capacitor top, and pin 4 is your capacitor ground. So if your capacitor is not fully discharged, you may have funny reading.

  • Do pin2 to Battery+ (the spring), this too should be 0L (infinity) see if it is so. (You already did pin2 to ground by now).

You may find your short very quickly this way.

(Why you need to do again) Bare in mind, if you have a bad joint, the pressure of the DMM probe may just change a connection - you pressed the pin down enough to make/break connection during the measure. So if the measurement seem to change depending on pressure, you got a bad joint right there. If you find no shorts so far, since probe pressure may break/make the connection, try retest one more time. If retest give you different results, you either made a mistake or there is a bad joint.

- If you already found the short by now. Celebration time. After up to 6 beers or 6 shots of martini depending on body weight, time to re-solder time… (For me, a smoke will claim me down and hand steadied.)

- If you get this far without finding a short, re-discharge the capacitor, put it back in. This time it should definitely be considered NOT-QUICK-CLICK ie LONG_OFF. The cap was fully discharged.
Note if it acted like or acted dislike LONG_OFF. Since we know the cap is manually discharged, it should act like LONG_OFF.

Tell us what you find. We will figure out what to do from there. If you don’t want to wait, I would suggest resolder both the chip and the cap. It is more likely to be a bad joint we didn’t find, than a bad ADC (since you didn’t change a working program).

Tell us either way. Now that I have typed as much as typing a novel, I feel I am enlisted in this bug fight…

I think totally unrelated to Pablo's problem - using bistro on a ATtiny25 on a wight FET+1 (v009) with a SIR800DP FET, rest of parts should be standard, it would come in on low mode, then next mode or 2nd next would flake out - blink brightly, go back to lowest mode. I duplicated it on a 2nd driver configured the same way. Then I ported a version of STAROfftime to the 25, tried that - turns out that modes that are just on the 7135 worked fine, as soon as I switched to a FET based mode, wham - it would go into a low amp strobe - but I don't have a strobe mode in this firmware??

So, basically the same problem is reproducible across two versions of firmware, two separate driver boards but of the same design... Gotta be something in the hardware, or compatibility with this hardware.

  • tried a 0.1 uF cap across the MCU (grnd to Vc) -- no good (worked for my Tiny85 problems with the Narsil firmware)
  • tried a 12K resistor over the FET gate -- no good (recommended by a couple guys before)
  • tried doubling the 10 uF cap (added a stacked one) -- It Worked!!

So, there's something funny goin on. When I was discussing this before with the 85 on FET+1 drivers, everyone suspected the spike occurring on Vc to the MCU that was always there with the 13A's is now causing problems on the 85, and apparently also on the 25 since they are basically the same, just some added memory. There also may be other bad side effects of this larger cap before the diode - forgot details... Something about extra voltage not being able to be cleared quickly from the MCU, eliminating backdriving which at times may be necessary with spikes, etc.

Maybe with a different FET, it won't be a problem?

How is working ok on the BLF X6/X5 SE v2's? Sample pieces are apparently working. Did someone tweak the circuit? Was anything needed?

Us curious DIYers want to know... Smile

Glad it lives! :beer:
Luckly we can get 22uf in 0805.
Mouser link 22uF 25volts X5R 20% 0805 Qty 1:$0.55, 10:$0.292

Got it in my Convoy L2 with a dedomed XPL V6 1A, and only getting bout 3.9A at the tail with 22 AWG Teflon wires. Cell is a EFEST 4200 but at 4.15v or so. The tint came out great though - gas dedomed, it looks like a pure neutral - no yellow, nice soft white. I got my custom STAROfftime in it with 5 modes including moon, where mode switching goes to 1st mode, like luxdrv.

Not sure why the amps took a beating though.

Throw is 221 kcd measured at 5m, but no tail bypass yet - might bump a little.

Problem spotted!!!

I have OTC cap and R1 turned 90º, connecting B+ and ground with 19k resistor, and PIN 2 and 7 with OTC cap :person_facepalming:

I can’t test repositioning them now as i am with family celebrating new year, but it is pretty evident that it is the problem.

This morning, measuring resistance as Rick told me, i got really odd data, but i thought in bad joints; but now i’ve read Tom having the same problem in tow boards with only the desing in common (and the same board as me), i’ve decided to visualy examine the board and bingo!.

Thanks all of you for the help and happy new year!!!

Well, 2 of us will have a Happy New Year Laughing.