Mega Fried??

So I think I fried my mega today..well one of them..?

I have a 12vdc source (wallwart now, car battery later) which goes to the anode of 3 rgb leds (a strip of 3 actually with built in resistors, designed for 12v usage) which each ground thru a tip120's collector whose base is connected to pwm pins on the duino.

I didn't realize the collector was common with the heatsink and two were touching (wrapped in heatshrink for install) ... I'm not exactly sure how this could have fried anything..also one of the ground wires (blue led) broke off the strip around this time.. happens to be the one beside the 12v too.. so I guess 12v could have hit the ground of blue..not sure how it could have taken out the duino tho?

The tip120s got really hot, all 3 leds were lit at first, I hadn't redefined the ports in my code since changing some config but all i have wired in is 3 digis to the bases on the tip120s and a digi input from a button which just pulls a pulled up input to gnd.

I tested after, separating the tip120s, running just one of the leds for a while (and I had tested this before) and got no heat. I thought maybe it was getting hot because I didn't have a resistor on the base but I also digured the arduinos built in resistor would do, I actually measured 0mA triggering it at this point so I'm not sure an extra resistor is needed.

The tip120s still seem to work fine..

But now the arduino wont take sketches. Its a genuine mega 2560. I have a 2nd mega which I just tested and I can upload fine. The programmer times out.

Initially, trying to program it, I was still getting output from my serial monitor from my program, essentially prints a debug message every 200msec (not using delay() anywhere, using now() and checking elapsed ms) showing the state of my button input, so it seems like it was still running my code although I wasnt seeing the pwm fade on 4,5,6 that I had configured (and worked before) when hooking just one led up to test but I can't 100% verify the code on there since I cant change it but I do know it was still outputting serial data..

I have read that programs in a tight loop can block the bootloader and I thought maybe I had an issue programming it before, since I'm notnusing any delays or anything I thought maybe this was it and tried resetting it while trting to upload, as well as just trting to upload a bunch of times.

When I tried to upload, I could see the one LED blink everytime it printed the stk500 timeout message, and I could see the kther led blink every 200ms with my serial print but it just seemed to not want to go into the bootloader

So i pulled my other mega out and hooked it up, it loaded code fine. So I grabbed a sketch that allows you to update the boot loader from another arduino (nick gammon's) via the ICSP header which initially read the code there and said it did not verify (wasnt expecting it to as likely the bootloader on there was a diff version but shows it could read) so I uploaded and that verified fine..

Tried uploading a sketch again and still times out. My original sketch had no !!!'s anywhere BTW, just in case somehow I ended up with an older bootloader with that issue.

The chip itself seems a bit warmer than usual (not too hot to touch or anythingp, I thought maybe it was due to it running full cycles maybe but maybe I kinda killed it..?

Now that I changrd the bootloader, my original sketch doesn't appear to be running on it anymore.

Any ideas if its fixable (sw) or if I fried it (hw)? I mean it still seems to respond in some ways, I can program the BL over thr ICSP..

Help please! Genuine Mega's aren't cheap!

Your description is a bit rambling and hard to follow what exactly happened, but there are a few points I picked up.

but I also digured the arduinos built in resistor would do,

The Arduino does not have any built in resistors on the digital outputs.

I have read that programs in a tight loop can block the bootloader

No you have that wrong. The program only starts once the bootloader has finished. You might be confusing the situation where you use the watch dog timer with a very short time out. This can kick in while the Arduino is still in the bootloader code.

I thought maybe it was due to it running full cycles maybe

Not sure what you mean here but you can't kill a Mega by running it too fast from software.

An over voltage of 12V to any of the pins can kill an Arduino. The other thing it can kill is the USB / serial converter chip.

If you do not see the Arduino when you plug it in on the list of serial ports then you have killed at least the USB to TTL converter chip.

If you can program the Arduino through an external programmer and the program runs the simple blink LED sketch then the Arduino is probably OK and it is the blown USB to TTL converter chip that is stopping you seeing any output from serial print.

If it appears you can program the Arduino through an external programmer and the blink LED sketch will not run then you have fried your Arduino as well.

The USB to TTL converter chip can be changed but it is a surface mount chip of the type with the pads underneath the chip, so it is very difficult to remove it with a soldering iron, you need a hot air gun.

Hope that helps.