You have started by claiming that I have ignored facts, that is not true. In some cases it was a simple oversight, other cases its unknown if there is any excessive damage going on, and dont have a scanning tunnelling microscope or decapping ability to measure stuff, It is entirely possible that there is no excessive damage going on, or that there is significant damage going on, but it may still take a very long time before any noticeable change occurs (dimming or complete failure).
I'm told that Im causing damage to LEDs and microcontroller, but I have no effective way to measure it, and since I can not measure it, you are assuming that I am doing damage. I may or may not be doing excessive damage, but LEDs will wear even when used within manufacturers specifications, exceeding those specifications will accelerate the damage, there is no question about that. This type of damage is like erosion, it may take a very long time to see any results of the damage. Im also being told that the level of damage is in excess of multiple times the rated value, You may expect to run a part over spec for a small amount of time, but not multiple times the spec, for extended periods of time, like I have been lead to believe. The fact that the parts have shown no signs of wear over extended periods of time suggest to me that the theory that I maybe running LEDs well in excess of 100mA (and the microcontroller many times that, since its running many LEDs at once) is inaccurate. It seems unlikely that the microcontroller or LEDs would sustain that level of overstress, and that is why I am sceptical about your assertions that Im am doing inordinate amounts of damage.
The cubes Im working on do not require high reliability, like they would if they were being used in aerospace, or medical type uses, nor are the in large production, or in any mission critical devices, they are toys and learning tools for hobbyists. If I were, then sample size would be important, and with the same parts I have repeated the results 3 times with the exact same results, however with enough different parts, i might start to see different results.
If the situation were running 400mA through a device rated at 200mA, then you likely expect a catastrophic failure in a short period of time. It would not be the slow erosion type of failure, it would likely be the type of failure where a part is not able to dissipate the heat fast enough, causing thermal overload and catastrophic failure.
Im still unclear on what the current spec really is. Is it 200mA, is it 300mA if you use the right ports, is it 400mA under some conditions? In the case of running 20 LEDs at 20mA, you would likely be using the arduinos ground, but the atmegas vcc, so the real bottleneck seems to be the VCC on the atmega chip. Even thought the voltage regulator wont have a problem delivering the 400mA, the CPU will probably have trouble dissipating the heat. At the very least, its right at the max specs, and the worst, its twice the load that the part is rated for.
In the case of the single color cube, where where it uses upto 320mA at a time, it may be that is just over the 300mA limit, and while it exceeds the limit, its not exceeding the limit by many times, and may just increase the likelyhood of failure. I do think that It has been sourcing (or trying to at least) upto 320mA on each of the 4 plane pins (this does make a lot of assumptions that are unverified though), and that seems way too high (almost 10 times the limit for a single i/o pin.) and I dont see how that could be happening without causing catastrophic failure in a very short period of time (like poof, instant burnout). In retrospect, I have no idea why this thing didnt just smoke, Im pretty sure i was sourcing way too much current on 4 pins. It has been down for a long time, I broke the usb connector on it, and its sort of half repaired. I plan on putting some transistors on the plane pins before I run it again.
In the case of the 64 RGB LED cube, where I am running 192 LEDs from a single microcontroller with and without resistors, Im told that im running the LEDs at 5v, and that is causing them to use a lot more than the expected 20mA. The issue with the LEDs is a non-linear current issue, where a tiny amount of voltage, can make a huge current difference, and one or two volt may increase the current as much 10 times (like 200mA), but only for a fraction of a second. If several LEDs are using hundreds of mA, then the microcontroller (in this case it is using i/o ports for both sinking and sourcing) is also taking many hundreds of mA, well exceeding the 200/300/400 specification. The theory you present is that it is definitely causing damage, but it may not the typical thermal overload type situation, rather a slow erosion type situation due to short duration time.
I have a digital volt meter, and it can measure current, but it cant measure it as fast as the microcontoller and change it (and reverse polarity), so its not very effective for measuring peak current, it just displays a sort of average, or truncated current measurement.
Yesterday, i did measure the current through the cube via 6v battery (4AA), and through a 5v(5.25 technically) power supply. They both used about the same amount of current.
I actually have complete 64 RGB LED setups, 2 are in cube form, one in hat form, all use the same parts, but the interconnections are slightly different. The 2 cubes have been running for over 2 months each, and one of them has never had any resistors, but the other one has been modified a couple times using resistors. I measured the current through the hat setup, it has no resistors, and it measures just over 40mA at startup, then fluxuates between 30 and 40mA.
The cube with resistors has had 2 sized resistors, I started with 100 ohm resistors, but have replaced them with 50 ohm resistors. With the 50 ohm resistors seem to run the cube between 25-30mA. Using 2 100 ohm resistors the cube uses between 30 and 35mA. The resistors make a very noticeable difference in brightness.
These measurements are with a very slow device (relatively speaking), so it is unlikely to show very high readings that are a very short duration (like a couple milliseconds), and we cant trust that these measurements are accurate for such small durations, but can give you a good idea of the overall consumption. You can see that the overall consumption between uncontrolled (no resistors), and overcontrolled (200 ohms) is not more than 50% difference, which means that unresistored is likely well under 200% of the specification, since 200 ohms keeps both the LEDs and the microcontroller well under spec. My guess is using no resistors is not too far over spec, and may not even be over spec.
Because the LEDs are charlieplexed, it means that 2 resistors are always being used when lighting a single LED, and it means I have to use one size resistor for 3 different LEDs and as such, I can not light each LED with the same amount of current.
with 100 ohm resistors, the blue and green and red should be well under 20mA, assuming they are getting 5v. With 5v, the red should need 150 ohms and the blue and green need 100 ohm. When using the 100 ohm resistors, no LED should be getting anywhere near the 20mA current limit. Changing to 2 50 ohm resistors should put the blue and green at their limit, but put the red over its limit.
I've measured the voltage at the Vin, and the 5v on the cubes, and they are way below 5v, in some cases, as low as barely over 4volts. If I assume the LEDs are actually getting 4.5v, then 2 50 ohm resistors puts the red at about 25ma, while the blue and green are under 20mA. That isnt very excessive, but it is just over the assumed specification.
In the case of charlieplexing, you always have 2 diodes in circuit, which means that other diode may be having some effect on the circuit, it maybe that is helping prevent overcurrent.
The other thing that the charlieplexed cube has going for it is the lack of parts, its literally, microcontroller, LED, and wire. Here is a quote from the document that linked:
"Reliable circuit design. As a general rule, simpler designs will be more reliable. Thus there should be a push for simplicity throughout all phases of the design process. The necessity of all parts should be questioned and design simplifications should be employed where available. This can be through circuit design simplifications or by simply using fewer parts. Also, the use of standard components and circuits is always recommended (where a component could be as complex as a microprocessor)."
When I say, I havnt ignored you, I really mean that I havnt ignored you, I have said that I am sceptical, and I have good reason to sceptical.
Since you want to bring up hope over expectation, lets examine the difference between resorting to name calling, and calling someone ignorant, I would say that is measurable improvement, so keep up the good work, maybe one day we can have conversation where I dont have to tolerate such nonsense.
It looks like you put a lot of thought, and effort into your post, and with one tiny exception, you kept to the facts. I expect that was difficult, so I am compelled to thank you for your effort and consideration.