There's also a "four stage, more resistor, better backside art" version by @Bastiaan - #Mini flux capacitor prop PCB
emancipating this project from my blinking stuff project
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
There's also a "four stage, more resistor, better backside art" version by @Bastiaan - #Mini flux capacitor prop PCB
attiny45.schsch - 289.42 kB - 07/13/2017 at 12:50 |
|
|
attiny45.brdbrd - 73.99 kB - 07/13/2017 at 12:50 |
|
to fix almost all my tiny13a's I had to build this, but it definitely fixed all 10 boards :) for the tinies you don't need any parallel connections, so it's basically SPI + 12V on reset. I've hooked up a boost converter, added a button and "some" LEDs (bicolor), worked them in the code and now basically have a "power on and fix" stand alone fuse resetter for soic Attinies. That's not highly specialised at all. BUT IT WORKS AND THEY WORK! Now I need to clean up my desk.
http://www.engbedded.com/fusecalc/
https://arduinodiy.wordpress.com/2015/05/16/high-voltage-programmingunbricking-for-attiny/
// AVR High-voltage Serial Fuse Reprogrammer
// Adapted from code and design by Paul Willoughby 03/20/2010
// http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
// Fuse Calc:
// http://www.engbedded.com/fusecalc/
// slightly edited by davedarko in 2017
#define RST 13 // Output to level shifter for !RESET from transistor
#define SCI 12 // Target Clock Input
#define SDO 11 // Target Data Output
#define SII 10 // Target Instruction Input
#define SDI 9 // Target Data Input
#define VCC 8 // Target VCC
#define BUTTON 3 // Target VCC
#define LED_RED 7 // Target VCC
#define LED_GRN 5 // Target VCC
#define HFUSE 0x747C
#define LFUSE 0x646C
#define EFUSE 0x666E
// Define ATTiny series signatures
#define ATTINY13 0x9007 // L: 0x6A, H: 0xFF 8 pin
#define ATTINY24 0x910B // L: 0x62, H: 0xDF, E: 0xFF 14 pin
#define ATTINY25 0x9108 // L: 0x62, H: 0xDF, E: 0xFF 8 pin
#define ATTINY44 0x9207 // L: 0x62, H: 0xDF, E: 0xFFF 14 pin
#define ATTINY45 0x9206 // L: 0x62, H: 0xDF, E: 0xFF 8 pin
#define ATTINY84 0x930C // L: 0x62, H: 0xDF, E: 0xFFF 14 pin
#define ATTINY85 0x930B // L: 0x62, H: 0xDF, E: 0xFF 8 pin
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(LED_GRN, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(VCC, OUTPUT);
pinMode(RST, OUTPUT);
pinMode(SDI, OUTPUT);
pinMode(SII, OUTPUT);
pinMode(SCI, OUTPUT);
pinMode(SDO, OUTPUT); // Configured as input when in programming mode
digitalWrite(RST, HIGH); // Level shifter is inverting, this shuts off 12V
Serial.begin(19200);
}
void loop() {
digitalWrite(LED_GRN, HIGH);
digitalWrite(LED_RED, LOW);
if (digitalRead(BUTTON) == LOW)
{
digitalWrite(LED_GRN, LOW);
digitalWrite(LED_RED, HIGH);
pinMode(SDO, OUTPUT); // Set SDO to output
digitalWrite(SDI, LOW);
digitalWrite(SII, LOW);
digitalWrite(SDO, LOW);
digitalWrite(RST, HIGH); // 12v Off
digitalWrite(VCC, HIGH); // Vcc On
delayMicroseconds(20);
digitalWrite(RST, LOW); // 12v On
delayMicroseconds(10);
pinMode(SDO, INPUT); // Set SDO to input
delayMicroseconds(300);
unsigned int sig = readSignature();
Serial.print("Signature is: ");
Serial.println(sig, HEX);
readFuses();
if (sig == ATTINY13) {
writeFuse(LFUSE, 0x6A);
writeFuse(HFUSE, 0xFF);
} else if (sig == ATTINY24 || sig == ATTINY44 || sig == ATTINY84 ||
sig == ATTINY25 || sig == ATTINY45 || sig == ATTINY85) {
writeFuse(LFUSE, 0x62);
writeFuse(HFUSE, 0xDF);
writeFuse(EFUSE, 0xFF);
}
readFuses();
digitalWrite(SCI, LOW);
digitalWrite(VCC, LOW); // Vcc Off
digitalWrite(RST, HIGH); // 12v Off
delay(1000);
}
}
byte shiftOut (byte val1, byte val2) {
int inBits = 0;
//Wait until SDO goes high
while (!digitalRead(SDO))
;
unsigned int dout = (unsigned int) val1 << 2;
unsigned int iout = (unsigned int) val2 << 2;
for (int ii = 10; ii >= 0; ii--) {
digitalWrite(SDI, !!(dout & (1 << ii)));
digitalWrite(SII, !!(iout & (1 << ii)));
inBits <<= 1; inBits |= digitalRead(SDO);
digitalWrite(SCI, HIGH);
digitalWrite(SCI, LOW);
}
return inBits >> 2;
}
void writeFuse (unsigned int fuse, byte val) {
shiftOut(0x40, 0x4C);
shiftOut( val, 0x2C);
shiftOut(0x00, (byte) (fuse >> 8));
shiftOut(0x00, (byte) fuse);
}
void readFuses () {
byte val;
shiftOut(0x04, 0x4C); // LFuse
shiftOut(0x00, 0x68);
val = shiftOut(0x00, 0x6C);
Serial.print("LFuse "); // this line may show up corrupted in some browsers it is a Serial.print("LFuse: ");
Serial.print(val,...
Read more »
Okay, here we go:
Left OSHPark board: attiny13a SSU - working
Right OSHPark board: attiny45 - working
all 10 green boards: attiny13a SU - not working
Red board: attiny13a SSU - not working (but same badge as left OP board - weird)
USB cable tester: attiny13a SSU - working
small OSHPark board: attiny13a SSU - no idea
out of 15 attiny13a boards I know that two are working :( meh. At first I thought The smaller tinies are definitely fake, but the datasheet says they're a possibility.
Create an account to leave a comment. Already have an account? Log In.
Awesome project ;)
At least one of us keeps on creating ;-)
https://hackaday.io/page/1295-projects-coming-soon-or-later
P.S.: Have you got inspired by my Page? ;)
Best regards!
Become a member to follow this project and never miss any updates
By using our website and services, you expressly agree to the placement of our performance, functionality, and advertising cookies. Learn More
Hi,
I was wondering if you could share the code on the attiny as well? I have the board and have soldered most parts on, but then realized that I don't have a program or a way to program the attiny, but I can give digikey the code to load on it if you are ok with sharing that as well.
Thanks!!