{"id":155,"date":"2026-07-11T17:14:34","date_gmt":"2026-07-11T17:14:34","guid":{"rendered":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/?post_type=project&#038;p=155"},"modified":"2026-07-13T07:01:12","modified_gmt":"2026-07-13T07:01:12","slug":"attiny85-powered-high-voltage-avr-programmer","status":"publish","type":"project","link":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/projects\/attiny85-powered-high-voltage-avr-programmer\/","title":{"rendered":"ATtiny85 Powered High Voltage AVR Programmer"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This very simple and inexpensive circuit will reset the fuses on a bricked ATtiny chip. Once programmed, no Arduino is required!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Story<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This simple and inexpensive high voltage AVR programmer for ATtiny chips requires only an ATtiny85 and a few components to build. Using Wayne Holder\u2019s excellent&nbsp;<a href=\"https:\/\/sites.google.com\/site\/wayneholder\/attiny-fuse-reset\">ATtiny Fuse Reset<\/a>&nbsp;posts as a starting point, this little device is able to reset the fuses on many ATtiny devices. With the correct (8-pin or 14-pin) wiring, it should be able to reset ATtiny13, 24, 25, 44, 45, 84, and 85 chips.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The fuse reset process requires a 12v reset signal and 5v to power the chip being reset. Wayne\u2019s projects use a 5v power source, and either a separate 12v battery or an Arduino powered&nbsp;<a href=\"https:\/\/sites.google.com\/site\/wayneholder\/attiny-fuse-reset-with-12-volt-charge-pump\">charge pump<\/a>&nbsp;as the 12v source. To keep things simple, this project starts with a 12v power source and uses a 5v voltage regulator to provide 5v to power the ATtiny chips.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using the Programmer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hold the momentary switch down for a second or so. In most cases, the LED will light up very briefly (programming mode) and then turn off to indicate the reset has completed successfully.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Error Indications<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the LED stays on or begins flashing slowly, this indicates that the programmer could not read the signature of the target chip. Check the connections, and make sure both chips are plugged in completely and in the correct orientation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the LED flashes quickly, this indicates that the fuse reset failed \u2013 the programmer recognized the device signature and attempted to reset the fuses, but the fuse values read from the device after the reset were not as expected. In my experience, this is pretty rare.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to Make<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The circuit is so simple that it can be breadboarded in a matter of minutes. You\u2019ll need to use an Arduino (Arduino as AVR) to load the sketch into the master ATtiny85. This must be done only once; the master chip can then be used to reset the fuses on an unlimited number of target devices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Connections<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>8-pin<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code ml-code-block\"><code>\/\/ pasMaster\tTarget (8-pin)\n2\t2\n4 GND\t4 GND\n5\t5\n6\t6\n7\t7\n8 5v\t8 5vte your code here<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">14-pin<\/p>\n\n\n\n<pre class=\"wp-block-code ml-code-block\"><code>\/\/ paste your code hereMaster\tTarget (14-pin)\n2\t2\n4 GND\t11, 12, 13, 14 GND\n5\t7\n6\t8\n7\t9\n8 5v\t1 5v<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In both cases, Master pin 3 goes to the base of the NPN transistor. The emitter goes to ground, and the collector goes to pin 1 of the target chip. The collector is also connected to 12v through the 1K\u03a9 resistor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Master pin 2 is also connected (through a 330\u03a9 resistor) to the status LED.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Note:<\/strong><\/em>\u00a0To keep the circuit simple, the capacitors normally surrounding the voltage regulator have been omitted. In most cases, the circuit will work fine (especially with the 7805 regulator). If you experience stability problems, a 10\u00b5F and 0.1\u00b5F capacitor connecting the input and output (respectively) to ground might be necessary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schematics<\/h2>\n\n\n\n<p class=\"ml-photo-subtitle wp-block-paragraph\"><a href=\"https:\/\/hacksterio.s3.amazonaws.com\/uploads\/attachments\/898918\/fusereset85_bb_iu3Hl4pTa1.png\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fuse Resetter for 8-pin chips<\/h2>\n\n\n\n<p class=\"ml-photo-subtitle wp-block-paragraph\">This circuit resets the 8-pin ATTiny chips. Schematic for the 14-pin version is below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large ml-content-photo\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"475\" src=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/fusereset85_BreadBoard-1536x712-1-1024x475.png\" alt=\"\" class=\"wp-image-151\" srcset=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/fusereset85_BreadBoard-1536x712-1-1024x475.png 1024w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/fusereset85_BreadBoard-1536x712-1-300x139.png 300w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/fusereset85_BreadBoard-1536x712-1-768x356.png 768w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/fusereset85_BreadBoard-1536x712-1.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">8-pin Schematic<\/h2>\n\n\n\n<p class=\"ml-photo-subtitle wp-block-paragraph\">This circuit is for the 8-pin ATTiny chips. Schematic for the 14-pin chips is below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full ml-content-photo\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"839\" src=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/8-pin-Schematic-1024x839-1.png\" alt=\"\" class=\"wp-image-145\" srcset=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/8-pin-Schematic-1024x839-1.png 1024w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/8-pin-Schematic-1024x839-1-300x246.png 300w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/8-pin-Schematic-1024x839-1-768x629.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">14-pin Schematic<\/h2>\n\n\n\n<p class=\"ml-photo-subtitle wp-block-paragraph\">This circuit is for resetting the 14-pin ATTiny chips.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full ml-content-photo\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"829\" src=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/14-pin-Schematic-1024x829-1.png\" alt=\"\" class=\"wp-image-147\" srcset=\"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/14-pin-Schematic-1024x829-1.png 1024w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/14-pin-Schematic-1024x829-1-300x243.png 300w, https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-content\/uploads\/2026\/07\/14-pin-Schematic-1024x829-1-768x622.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Code<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">ATTiny85 Powered High Voltage AVR Programmer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C\/C++<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Load this sketch onto the &#8220;Master&#8221; ATTiny85. It can then be used to reset the fuses on many ATTiny chips.<\/p>\n\n\n\n<pre class=\"wp-block-code ml-code-block\"><code>\/\/ AVR High-voltage Serial Fuse Reprogrammer\n\/\/ Adapted from code and design by Paul Willoughby 03\/20\/2010\n\/\/   http:\/\/www.rickety.us\/2010\/03\/arduino-avr-high-voltage-serial-programmer\/\n\/\/ and Wayne Holder \n\/\/   https:\/\/sites.google.com\/site\/wayneholder\/attiny-fuse-reset\n\/\/\n\/\/ Fuse Calc:\n\/\/   http:\/\/www.engbedded.com\/fusecalc\/\n\n#define  LED      3    \/\/ Status indicator LED\n#define  RST      4    \/\/ (13) Output to level shifter for !RESET from transistor\n#define  SCI      3    \/\/ (12) Target Clock Input\n#define  SDO      2    \/\/ (11) Target Data Output\n#define  SII      1    \/\/ (10) Target Instruction Input\n#define  SDI      0    \/\/ ( 9) Target Data Input\n\n#define  HFUSE  0x747C\n#define  LFUSE  0x646C\n#define  EFUSE  0x666E\n\n\/\/ ATTiny series signatures\n#define  ATTINY13   0x9007  \/\/ L: 0x6A, H: 0xFF             8 pin\n#define  ATTINY24   0x910B  \/\/ L: 0x62, H: 0xDF, E: 0xFF   14 pin\n#define  ATTINY25   0x9108  \/\/ L: 0x62, H: 0xDF, E: 0xFF    8 pin\n#define  ATTINY44   0x9207  \/\/ L: 0x62, H: 0xDF, E: 0xFFF  14 pin\n#define  ATTINY45   0x9206  \/\/ L: 0x62, H: 0xDF, E: 0xFF    8 pin\n#define  ATTINY84   0x930C  \/\/ L: 0x62, H: 0xDF, E: 0xFFF  14 pin\n#define  ATTINY85   0x930B  \/\/ L: 0x62, H: 0xDF, E: 0xFF    8 pin\n\nint error = 0;\nbyte FuseH = 0;\nbyte FuseL = 0; \nbyte FuseX = 0;\n\nvoid setup() {\n  pinMode(RST, OUTPUT);\n  digitalWrite(RST, HIGH);  \/\/ Level shifter is inverting, this shuts off 12V\n  pinMode(SDI, OUTPUT);\n  pinMode(SII, OUTPUT);\n  pinMode(SCI, OUTPUT);\n  pinMode(SDO, OUTPUT);     \/\/ Configured as input when in programming mode\n\n  digitalWrite(SDI, LOW);\n  digitalWrite(SII, LOW);\n  digitalWrite(SDO, LOW);\n\n  delayMicroseconds(30);  \/\/ wait long enough for target chip to see rising edge\n  digitalWrite(RST, LOW);  \/\/ 12v On\n  delayMicroseconds(10);\n  pinMode(SDO, INPUT);      \/\/ Set SDO to input\n  delayMicroseconds(300);\n  unsigned int sig = readSignature();\n\n  if (sig == ATTINY13) {\n    writeFuse(LFUSE, 0x6A);\n    writeFuse(HFUSE, 0xFF);\n    readFuses();    \/\/ check to make sure fuses were set properly\n    if (FuseL != 0x6A || FuseH != 0xFF) {\n      error = 5;    \/\/ fast flash if fuses don't match expected\n    }\n  } else if (sig == ATTINY24 || sig == ATTINY44 || sig == ATTINY84 ||\n             sig == ATTINY25 || sig == ATTINY45 || sig == ATTINY85) {\n    writeFuse(LFUSE, 0x62);\n    writeFuse(HFUSE, 0xDF);\n    writeFuse(EFUSE, 0xFF);\n    readFuses();    \/\/ check to make sure fuses were set properly    \n    if (FuseL != 0x62 || FuseH != 0xDF || FuseX != 0xFF) {\n      error = 5;    \/\/ fast flash if fuses don't match expected\n    }\n  } else {    \n    error = 1;      \/\/ slow flash if device signature is invalid\n  }\n\n  digitalWrite(SCI, LOW);\n  digitalWrite(RST, HIGH);   \/\/ 12v Off\n  digitalWrite(LED, LOW);    \/\/ LED off for succerss\n}\n\nvoid loop() {\n  \/\/ Flash LED if there was an error\n  while (error > 0) {\n    int d = 500 \/ error;\n    digitalWrite(LED, HIGH);\n    delay(d);\n    digitalWrite(LED, LOW);\n    delay(d);\n  }\n}\n\nbyte shiftOut (byte val1, byte val2) {\n  int inBits = 0;\n  \/\/Wait until SDO goes high\n  while (!digitalRead(SDO))\n    ;\n  unsigned int dout = (unsigned int) val1 &lt;&lt; 2;\n  unsigned int iout = (unsigned int) val2 &lt;&lt; 2;\n  for (int ii = 10; ii >= 0; ii--)  {\n    digitalWrite(SDI, !!(dout &amp; (1 &lt;&lt; ii)));\n    digitalWrite(SII, !!(iout &amp; (1 &lt;&lt; ii)));\n    inBits &lt;&lt;= 1;\n    inBits |= digitalRead(SDO);\n    digitalWrite(SCI, HIGH);\n    digitalWrite(SCI, LOW);\n  }\n  return inBits >> 2;\n}\n\nvoid writeFuse (unsigned int fuse, byte val) {\n  shiftOut(0x40, 0x4C);\n  shiftOut( val, 0x2C);\n  shiftOut(0x00, (byte) (fuse >> 8));\n  shiftOut(0x00, (byte) fuse);\n}\n\nvoid readFuses () {\n  shiftOut(0x04, 0x4C);  \/\/ LFuse\n  shiftOut(0x00, 0x68);\n  FuseL = shiftOut(0x00, 0x6C);\n\n  shiftOut(0x04, 0x4C);  \/\/ HFuse\n  shiftOut(0x00, 0x7A);\n  FuseH = shiftOut(0x00, 0x7E);\n\n  shiftOut(0x04, 0x4C);  \/\/ EFuse\n  shiftOut(0x00, 0x6A);\n  FuseX = shiftOut(0x00, 0x6E);\n}\n\nunsigned int readSignature () {\n  unsigned int sig = 0;\n  byte val;\n  for (int ii = 1; ii &lt; 3; ii++) {\n    shiftOut(0x08, 0x4C);\n    shiftOut(  ii, 0x0C);\n    shiftOut(0x00, 0x68);\n    val = shiftOut(0x00, 0x6C);\n    sig = (sig &lt;&lt; 8) + val;\n  }\n  return sig;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Credits<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.hackster.io\/sbinder\"><img decoding=\"async\" src=\"https:\/\/gravatar.com\/avatar\/04dd636a6ac7776352fd5fc50eaab025.png?d=retro&amp;s=60\" alt=\"sbinder\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.hackster.io\/sbinder\">sbinder<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.hackster.io\/sbinder\/attiny85-powered-high-voltage-avr-programmer-3324e1\">https:\/\/www.hackster.io\/sbinder\/attiny85-powered-high-voltage-avr-programmer-3324e1<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This very simple and inexpensive circuit will reset the fuses on a bricked ATtiny chip. Once programmed, no Arduino is required! Story This simple and inexpensive high voltage AVR programmer for ATtiny chips requires only an ATtiny85 and a few components to build. Using Wayne Holder\u2019s excellent&nbsp;ATtiny Fuse Reset&nbsp;posts as a starting point, this little [&hellip;]<\/p>\n","protected":false},"featured_media":152,"template":"","project_category":[88,139,86],"part_type":[69,64,67,68,63,62,65,66],"class_list":["post-155","project","type-project","status-publish","has-post-thumbnail","hentry","project_category-arduino","project_category-attiny","project_category-e-projects","part_type-12v-dc-power-supply","part_type-2n2222","part_type-breadboard","part_type-breadboard-wires","part_type-linear-regulator-7805","part_type-microchip-attiny85","part_type-resistor-1k-ohm","part_type-resistor-330-ohm"],"_links":{"self":[{"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/project\/155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/project"}],"about":[{"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/types\/project"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/media\/152"}],"wp:attachment":[{"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/media?parent=155"}],"wp:term":[{"taxonomy":"project_category","embeddable":true,"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/project_category?post=155"},{"taxonomy":"part_type","embeddable":true,"href":"https:\/\/ahaddad-wp.duckdns.org\/my\/mylogbook\/wp-json\/wp\/v2\/part_type?post=155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}