Possible damaged IC, replacement without a full kit?

So I recently got myself a blinkstick pro, pre-soldered and a WS2812B 60 led / 1 metre

It was working great, I had programmed patterns in python and set up temperature monitoring of the graphics cards with appropriate colours (To be used as internal case lighting. I’m happy to share the code if anybody wants, still adjusting some things for now)

Unfortunately when moving it from the bench to inside my case a live 5V wire came in contact with the GPU backplate, and the blinkstick ground touched the same plate - aka fried the track.

From the burn marks it looks like a new ATtiny85 should be all I need, but I don’t have a firmware programmer.

(Click for image, hosted on imgur)

Is it possible to just buy the chip, or do I need to order another kit?

Thanks,
Cat

Hey Cat,

if you have an Arduino board you could use this as programmer.

Just a suggestion, maybe you have or you could get one.

Hi Cat,

Oh, what a misfortune! So sorry to hear that. I think that this BlinkStick is a toast. It’s “magic smoke” :smiley: which makes the nifty electronics control the LEDs has evaporated and I think that other components may have been damaged.

Could you drop me an email to info at blinkstick dot com with your order number? Will send you a new one free of charge.

Would love to see your code if you get a chance to post it! :smiley:

Arvy

Apology in advance for wall of text, but here’s the current progress on the code.
I use a program called OpenHardwareMonitor to dump gpu temperature to a log file located in a ramdisk and then read by python.

It’s definitely not the most efficient way of doing things, but for now it’s functional.
And I’m slowly incorporating more things that allow it to be easily customized, with colour and pattern speeds

[PULSE] is a small wave of lights that travel along the led strip

[HEARTBEAT] was originally just the entire strip in sync and brightness changed, but was altered to have multiple starting points and the pulse goes out and back in from each point (try it out to see what I mean, it’s 1.30am here :P)

[MAIN] the temperature recorder
Starts with 2x pulses, then colour fades in and changes live depending on GPU temp (might need to adjust depending on your log files layout if you’re doing it the same way)
If the temp passes critical (set at 80 here) it begins heartbeat, getting faster with each degree until 90C where it’s constant flashing

import time
import math
import colorsys
import os
from datetime import date, timedelta

from random import randint

from blinkstick import blinkstick



class Main(blinkstick.BlinkStickPro):
    def pulse(self,red,green,blue,numtimes):
        self.numtimes = numtimes
        self.red = red
        self.green = green
        self.blue = blue
        print "-Pulse-  x%d" %(numtimes)
        
        startingpoint=-10
        br = 0
        ud = 1
        x = 0
        maxbrightness=255
        brightnessskip=43
        minbrightness=maxbrightness-(29*brightnessskip)
        numofblinks=90
        currentblinks=0
        numled=startingpoint
        curtime=0
        try:
            while curtime<numtimes:
                curtime=curtime+1
                while numled<59-startingpoint:
                    currentblinks = currentblinks + 1
                    x=maxbrightness
                    if numled>=0:
                        if numled <=59:
                            self.set_color(0,numled,red,green,blue)
                    
                    numledleft=numled
                    numledright=numled

                    while x-brightnessskip>=0:
                        if numledleft+1>=0:
                            if numledleft+1<=59:
                                self.set_color(0,numledleft+1,(red*(x-brightnessskip))/255,(green*(x-brightnessskip))/255,(blue*(x-brightnessskip))/255)
                        if numledright-1>=0:
                            if numledright-1<=59:
                                self.set_color(0,numledright-1,(red*(x-brightnessskip))/255,(green*(x-brightnessskip))/255,(blue*(x-brightnessskip))/255)
                        numledleft=numledleft+1
                        numledright=numledright-1
                        x=x-brightnessskip
                    for i in range(0,2):
                        if x-brightnessskip<0:
                            if numledleft+1>=0:
                                if numledleft+1<=59:
                                    self.set_color(0,numledleft+1,0,0,0)
                            if numledright-1>=0:
                                if numledright-1<=59:
                                    self.set_color(0,numledright-1,0,0,0)
                            numledleft=numledleft+1
                            numledright=numledright-1
                            
                    numled = numled + 1
                    self.send_data_all()
                    time.sleep(.01)
                numled=startingpoint

            
        except KeyboardInterrupt:
            self.off()
            return

#################################################################################
        
    def beat(self,speed):
        print "-Heartbeat-"
        self.speed = speed
        if speed < 0:
            speed = 0
        elif speed >10:
            speed = 10
            
        red = 255
        green = 0
        blue = 0
        numled = 29
        x = 0
        maxbrightness=255
        numofsegments=10
        brightnessskip=maxbrightness/(numofsegments)
        beatdist=20
        numofblinks=2
        currentblinks=0
        numofbeats=1
        currentbeats=0
        y = 0
        blinkstate=[]
        try:
            while currentbeats<numofbeats:
                currentbeats=currentbeats+1
                while currentblinks<numofblinks:
                    currentblinks = currentblinks + 1
                    x=maxbrightness
                    self.set_color(0,numled,red,green,blue)
                    self.set_color(0,numled+beatdist,red,green,blue)
                    self.set_color(0,numled-beatdist,red,green,blue)
                    for i in range(2,numofsegments):
                        y=x-brightnessskip
                        self.set_color(0,numled+i,y,0,0)
                        self.set_color(0,numled-i,y,0,0)
                        self.set_color(0,numled+beatdist+i,y,0,0)
                        self.set_color(0,numled+beatdist-i,y,0,0)
                        self.set_color(0,numled-beatdist+i,y,0,0)
                        self.set_color(0,numled-beatdist-i,y,0,0)
                        x=x-brightnessskip
                        self.send_data_all()
                        time.sleep((speed)*.001)
                    for j in range(2,numofsegments):
                        k=numofsegments-j+1
                        self.set_color(0,numled+j,0,0,0)
                        self.set_color(0,numled-j,0,0,0)
                        self.set_color(0,numled+beatdist+j,0,0,0)
                        self.set_color(0,numled+beatdist-j,0,0,0)
                        self.set_color(0,numled-beatdist+j,0,0,0)
                        self.set_color(0,numled-beatdist-j,0,0,0)
                        self.send_data_all()
                        time.sleep((speed)*.001)
                currentblinks=0
                time.sleep((speed)*.1)
            
        except KeyboardInterrupt:
            self.off()
            return
#########################################################################

        
    def run(self):
        print "Starting..."
        self.send_data_all()
        main.pulse(255,0,0,2)

        prevtime = time.time()
        prevtemp = 0
        temperature = 0
        count = 0

        fadetime = 0.0
        r0 = 0
        g0 = 0
        b0 = 0
        try:
            while True:
                    try:
                        with open(time.strftime("OpenHardwareMonitorLog-%Y-%m-%d.csv"), "rb") as f:
                            first = f.readline()     # Read the first line.
                            f.seek(-2, 2)            # Jump to the second last byte.
                            while f.read(1) != "\n": # Until EOL is found...
                                f.seek(-2, 1)        # ...jump back the read byte plus one more.
                            log = f.readline()      # Read last line.
                        
                            temperature = int(log[20] + log[21])
                    except:
                        pass
                    count = count + 1

                    if (time.time() - prevtime) > 600:   # Truncate file down to 1 line to save space
                        f = open(time.strftime("OpenHardwareMonitorLog-%Y-%m-%d.csv"), "r+")
                        f.seek(0)
                        f.truncate()
                        f.write(log)
                        f.close
                        prevtime = time.time()
                        yesterday = date.today() - timedelta(1)
                        print "Current file truncated"
                        try:
                            f = yesterday.strftime("OpenHardwareMonitorLog-%Y-%m-%d.csv") # If previous day's file found, delete
                            os.remove(f)
                            print "Previous file deleted"
                        except:
                            print "Error deleting previous file: File not found"
                            
                        count = 0
                    
                    if temperature < 30:
                        temperature = 30
                        
                        
                    if temperature <= 50:
                        x = (temperature - 30.0)/20.0
                        red = 255 * x
                        green = 0
                        blue = 255


                    elif temperature <= 80:
                        x = 1-((temperature - 50.0)/30.0)
                        red = 255 
                        green = 0
                        blue = 255 * x
                        
                    else:
                        main.beat(90-temperature)

                    if temperature <= 80 and temperature != prevtemp:
                        fadetime = fadetime + 1.0
                        if fadetime>=20.0:
                            fadetime = 0.0
                            r0 = red
                            g0 = green
                            b0 = blue
                            prevtemp = temperature
                            delay = .5
                        else:
                            delay=0.02
                        step=fadetime/20.0
                        for i in range(0,60):
                            self.set_color(0,i,r0+((red-r0)*step),g0+((green-g0)*step),b0+((blue-b0)*step))
                        self.send_data_all()
                        
                        time.sleep(delay)
                        print "R: %3.2f  G: %3.2f  B %3.2f  " % ((r0+((red-r0)*step)), (g0+((green-g0)*step)), (b0+((blue-b0)*step)))
                    else:
                        time.sleep(1)
                        print "sleep"



            
        except KeyboardInterrupt:
            self.off()
            return

#########################################################################
        


        
# Change the number of LEDs for r_led_count
main = Main(r_led_count=60, max_rgb_value=255)
if main.connect():
    main.run()
else:
    print "No BlinkSticks found"
1 Like

So I appear to be having an issue again, in fact the same issue that killed my first blinkstick

I had it set to mode 2 by plugging in the blinkstick alone and setting it via python, it responds correctly with mode 2

Connected the LED strip to 5V and GND via molex
Then connected the GND of the LEDs to the Blinkstick GND, and Data input to ‘R’

It’s how I had it set up while doing all the programming without any problems

Now though, the second I plug it together and into the USB port, the ground wire fries
Upgrading the wire from something tiny to a fan cable, and the ground track on the blinkstick instantly fries…

It’s not running any program on the PC, not even picked up by windows yet either.

I managed to save this one though, it’s a little burned but the track is ok and blinkstick still communicates with windows.

WAIT, Disregard everything… I am a complete moron. :pensive:

I used a molex cable from a different power supply so instead of it being
[ +5 | GND | GND | +12 ] as normal… my molex was jumbled up but we tested with a multimeter and found the correct pin out to use

It now functions nicely, and I feel like an idiot
An idiot with a cool lit up case :stuck_out_tongue:

Glad you got it sorted :smile: Good thing it was just 12V and not 220V burning components which happened to me once when I was messing around with electronics as a teenager. There was lot’s of smoke! Been nervous every time I have to work with high voltage ever since :smiley:

Lol yes ime nervous when messing with high voltage,infact i try stay away from it,as a kid i put a 400v cap from a camara in my mouth to see if it had chargein it,and it threw my head right back,never do that again,another time i put 240v fairy lights in my mouth,to pull the bulb out with my teeth as my fingers just sliped off the bulb when pulling anyway while pulling with my teeth i bit through the bulb and the set being still plugged in i got a thud right threw my boddy,i was shaking after and witching like crazy,i thin it would of killed me if it had been straight from the socket without bulbs taking some of the voltage or amps,so now when i have to mess with 240v i sweat like mad,with is not a good thing,i was verry young when i did these things about 12 but ive grown to respect electricity now lol