Blinkstick on breadboard

Today I got the ATTiny85 so nothing to change in the code. Will get a IKEA Dioder and play with it at the weekend. With a single NeoPixel it is currently working very well. ;-D

Thanks for your support!

Thanks for letting me know it works for you. Have fun! :smiley:

I got one of these tiny85 dev boards and I thought it would be nice to use it as a blinkstick.

I In the Makefile the first line says:
SHELL=C:/Windows/System32/cmd.exe
I removed it since I’m working on a Mac and it was giving me an error.
I tried to upload the firmware with
```make deploy``
and there wasn’t any error.
When I connect this board with a microusb cable it cannot be recognized.
I think it’s the same circuit with blinkstick except the resistor values.
What could be the problem? Is it possible to use it as blinkstick? Has anyone tried a board like this with blinkstick firmware?

Do you have the schematics for the board? The firmware will probably have to be adjusted and I need to know how the USB signals are connected to ATTIny85.

I don’t have the schematic but I checked it with my multimeter and it has the same connections with blinkstick.
The only differences are the values of the resistors. The resistor between ATTiny pin2 and D- is 220 Ohms. The same for the resistor between pin 3 and D+. The resistor between 5V and D- is 1K.
There are also 2 leds with resistors and a 78l05 voltage regulator but I don’t think they are relevant.

I think this board is a Digispark clone. As I have read, depending on the fuses settings, the reset pin might or might not be disabled. If it was disabled would I be able to upload the blinkstick firmware?

How did you try to upload the BlinkStick firmware to the device? Did you use the provided USB connection and uploaded it that way or did you use “crocodile” clip on the ATTiny85 chip and external ISP programmer like USBTinyISP?

I upload it using an Arduino Uno as ISP programmer by connecting MOSI,MISO,SCK,RESET, VCC and GND.
This is what I got:

avrdude -c arduino -P /dev/tty.usbmodemfd141 -b 19200 -p attiny85  -U flash:w:main.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930b
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: writing flash (4210 bytes):

Writing | ################################################## | 100% 7.03s

avrdude: 4210 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 4210 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.35s

avrdude: verifying ...
avrdude: 4210 bytes of flash verified

avrdude: safemode: Fuses OK (H:FE, E:DD, L:E1)

avrdude done.  Thank you.

avrdude -c arduino -P /dev/tty.usbmodemfd141 -b 19200 -p attiny85  -U hfuse:w:0xdd:m -U lfuse:w:0xe1:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930b
avrdude: reading input file "0xdd"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xdd:
avrdude: load data hfuse data from input file 0xdd:
avrdude: input file 0xdd contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xe1"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe1:
avrdude: load data lfuse data from input file 0xe1:
avrdude: input file 0xe1 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK (H:FE, E:DD, L:E1)

avrdude done.  Thank you.

ruby increment.rb
/Library/Ruby/Gems/2.0.0/gems/hex-0.2.0/lib/wo_oo/electronics/intel_hex_grammar.rb:101: warning: assigned but unused variable - line_data
BS000002-2.2
avrdude -c arduino -P /dev/tty.usbmodemfd141 -b 19200 -p attiny85  -B 3 -U eeprom:w:eeprom.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930b
avrdude: reading input file "eeprom.hex"
avrdude: writing eeprom (512 bytes):

Writing | ################################################## | 100% 28.35s

avrdude: 512 bytes of eeprom written
avrdude: verifying eeprom memory against eeprom.hex:
avrdude: load data eeprom data from input file eeprom.hex:
avrdude: input file eeprom.hex contains 512 bytes
avrdude: reading on-chip eeprom data:

Reading | ################################################## | 100% 5.29s

avrdude: verifying ...
avrdude: 512 bytes of eeprom verified

avrdude: safemode: Fuses OK (H:FE, E:DD, L:E1)

avrdude done.  Thank you.

The programming section looks good, but I’m afraid there is not much I can help you with in regards to why it’s not working for you. My only suggestion is to double check that the D+ and D- lines are identically connected as in BlinkStick, but other than that without the schematics it’s difficult to give any suggestions :confused:

The schematic is the same with this

With R1=R2=220 and R3=1K.
Could different R values require modification on firmware?

The D+ connection to ATTiny85 is different. You need to update this lines with correct value:

It should be 4 according to the schematic.

I tried this with no success. I desolder the resistor between D+ and PB4 (pin3) and I added one betwwen D+ and PB2 (pin 7) just like on blinkstick. Now it’s recognized and working as a blinkstick.


Also I noticed that the green LED on the board (connected on PB1) doesn’t light up since I reflashed it (with the unmodified firmware). Probably there should be made more changes. I found the declarations of the RGB channels in main.cpp and I think I had to replace the PB4 for the R channel but there wasn’t other available PWM on my board so I didn’t try it.

Looks great! Well done :smiley:

I made another blinkstick. This time I used a cheap usb hub which had 2 awful blue leds inside. I unsoldered them and used one of the usb ports to connect a homemade blinkstick pcb. I used two rgb leds with the blinkstick and this usb port is now used only for power.

I have a problem with this setup. Each time I connect a particular usb flash stick and the blinkstick is lighted up, the blinkstick is turned off and sometimes is disconnected from the usb hub. I think the flash stick draws a lot of current making the other usb ports unusable. Do you experience any issues like mine if you connect your blinkstick on a usb hub?

Which are the latest firmwares for blinkstick? I have 1.0, 1.1 and 1.0 pro. Are there any newer?

@ioakar0 ioakar0 Hi,ive firmware for a digispark like the one in pic above,send me your email and ile send it to you if you want,its allready setup,cant remember where i got it from or i would of included a link.Let me know or if any one wants it.
I have it ready to go.It runs on the board in the picture ready to go.

Also the firmwares you may have 1.0, 1.1 and 1.0 pro.
1.0 is for the blinkstick with the pirana led.
1.1 is for ws2811 or ws2812b the blinkstick with one led on it the newer one.
1.0.pro is the pro version of blinkstick with the pins on the end.

Ime pretty sure ive got it right,and the other firmwares havnt been published yet.

Hi ioakar0,

How have you programmed the EEPROM with blickstick serial number on you Digispark ? Is yours with RST pin disabled ?

I´ve been thinking about remove the eeprom_read_block function at main.cpp and hard code a serial number at SetSerial the function, like this:

static void SetSerial(void)
{
serialNumberDescriptor[0] = USB_STRING_DESCRIPTOR_HEADER(SERIAL_NUMBER_LENGTH);

uchar serialNumber[SERIAL_NUMBER_LENGTH];
//eeprom_read_block(serialNumber, (uchar *)0 + 1, SERIAL_NUMBER_LENGTH);

serialNumberDescriptor[1]=0x00;
serialNumberDescriptor[2]=0X42;
serialNumberDescriptor[3]=0X53;
serialNumberDescriptor[4]=0X30;
serialNumberDescriptor[5]=0X30;
serialNumberDescriptor[6]=0X30;
serialNumberDescriptor[7]=0x30;
serialNumberDescriptor[8]=0x30;
serialNumberDescriptor[9]=0x37;
serialNumberDescriptor[10]=0x2D;
serialNumberDescriptor[11]=0x31;
serialNumberDescriptor[12]=0x2E;
serialNumberDescriptor[13]=0x30;

}

Thanks,
CVLo

Hi dunkyoung25, i’m looking for a working source to connect short ws2812 stripe to the digispark. The source i’ve testet is not working correctly. Can you send me a copy of your code? Here is my mail: blinkstick2812(at)xwilli.de
Many thanks
xwilli

Please take a look at this:

If it does not help maybe @pablo_blinkstick_com read this and can help with more details.

My board didn’t have RST disabled so I could program it normally. The only modification I made in the code was to match D+ and D- on my board.

@dunkyoung25 I would like to try running pro firmware on the Digispark like boards. I tried compiling one myself but could not get the client to see it as the pro version. I know its been a long time since this post but it would be great if you could help me get this working.