====== ATtiny Mikrokontroller und Arduino IDE ====== Die ATtiny Mikrokontroller aus der [[http://www.atmel.com/products/microcontrollers/avr/tinyavr.aspx|tinyAVR Modellreihe]] von Atmel bieten für spezialisierte Projekte wo nicht alle Funktionen oder über 8KB Speicher benötigt werden eine stromsparende und kostengünstige Alternative zu den ATmega Mikrokontrollern der [[http://www.atmel.com/products/microcontrollers/avr/megaavr.aspx|megaAVR Modellreihe]] von Atmel wie z.B. 328, 1280, 2560 etc. welche in den Arduino Boards eingesetzt werden. Dank dem Board Manager der seit v1.6.3 in der Arduino IDE eingebaut ist können die etwas kleineren ATtiny Mikroprozessoren auch problemlos mit der Arduino IDE programmiert werden. Leider wird die Originale Implementierung der Arduino-Tiny nicht mehr weiterentwickelt. Es gibt jedoch einen "Fork" welcher die meisten ATtiny Mikroprozessoren direkt in der Arduino IDE unterstützt. - [[https://github.com/SpenceKonde/ATTinyCore]] Die alten Quellen finden immer noch die Arduino IDE < 1.6.3 Verwendung: - [[http://code.google.com/p/arduino-tiny/|Arduino-Tiny]] //((Verzeichnis 'tiny', von Boxtec empfohlen))// (Wenn Du Unterstützung für den ATtiny1634 benötigst, verwende bitte den [[https://code.google.com/r/microtherion-tiny1634-43u/|Clone von microtherion]]) - [[http://hlt.media.mit.edu/?p=1695|ATtiny w/ Arduino]] //((Verzeichnis 'attiny', von Arduino empfohlen))// ===== Übersicht ATtiny Mikrokontroller ===== Im folgenden stellen wir die [[http://shop.boxtec.ch/advanced_search_result.php?keywords=attiny|ATtiny Mikrokontroller]] welche sich für einen Einsatz mit der Arduino IDE eignen kurz vor: ^ MCU ^ Memory ^ Flash Memory ^ EEPROM ^ Pins ^ I/O Pins ^ ADC Pins ^ nutzbare PWM ^ UART ^ SPI ^ TWI (I2C) ^ Max. Frequenz ^ VCC ^ Datenblatt ^ | [[http://shop.boxtec.ch/10mhz-attiny13-p-40607.html|ATtiny13]] | 64Bytes | 1kB | 64Bytes | 8 | 6 | 4 | 2 | 0 | 0 | 0 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/attiny13.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny2313-p-40609.html|ATtiny2313]] | 128Bytes | 2kB | 128Bytes | 20 | 18 | 0 | 4 | 1 | 2 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny2313.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | **ATtiny24** | 128Bytes | 2KB | 128Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny84.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | **ATtiny25** | 128Bytes | 2KB | 128Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny25-45-85.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny4313-p-41278.html|ATtiny4313]] | 256Bytes | 4kB | 256Bytes | 20 | 18 | 0 | 4 | 1 | 2 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny4313.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny44a-p-41313.html|ATtiny44]] | 256Bytes | 4kB | 256Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny44a.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny45-20pu-p-41279.html|ATtiny45]] | 256Bytes | 4kB | 256Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny25-45-85.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny84-20pu-p-41138.html|ATtiny84]] | 512Bytes | 8kB | 512Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny84.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/20mhz-attiny85-p-40608.html|ATtiny85]] | 512Bytes | 8kB | 512Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny25-45-85.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | | [[http://shop.boxtec.ch/avr-pin-12mhz-16k-12ad-attiny1634-soic20-p-41821.html|ATtiny1634]] | 1024Bytes| 16kB | 256Bytes | 20 | 18 | 12 | 2 | 2 | 1 | 1 | 12MHz | 1.8-5.5V | [[http://shop.boxtec.ch/pub/atmega/ATtiny1634.pdf|{{:arduino:datasheet-icon.png|Datenblatt}}]] | Das Muster ist schnell zu erkennen, die erste Zahl nach dem "ATtiny" steht für die Anzahl Kilobytes (1, 2, 4 und 8), die zweite Zahl gibt die Pinzahl an (x4 = 14Pin, x5 = 8Pin). Mit dieser Tabelle sollte es Dir leicht fallen, den für Dein Projekt richtigen ATtiny Mikrokontroller auszuwählen. ===== Vorbereiten der Arduino IDE ===== ==== Arduino IDE ab 1.6.3 ==== Dank dem Board Manager ist es sehr einfach die Arduino IDE für die Attiny Programmierung zu nutzen. Dazu einfach unter den Einstellungen die "Zusätzliche Board Manager URL" angeben von der SpenceKonde Implementierung: http://drazzy.com/package_drazzy.com_index.json {{:arduino:arduino_ide_board_manager_setup.png?300|}} Danach einfach den Board Manager unter "Tools-Boards" starten und die gewünschte Attiny Bibliothek installieren. {{:arduino:arduino_ide_board_manager.png?300|}} Danach stehen alle installierten Attiny Boards zur Auswahl zur Verfügung. {{:arduino:arduino_ide_board_manager1.png?300|}} Der "Programmer" muss auch noch ausgewählt werden. Da ich über deinen Arduino ISP programmier habe ich "Arduino/Leo as ISP (Attiny Modern)" ausgewählt. {{:arduino:arduino_ide_board_manager2.png?300|}} ==== Arduino IDE kleiner 1.6.3 ==== Es ist kein Problem beide der genannten ATtiny Erweiterungen gleichzeitig installiert zu haben, wie in der Fussnote erwähnt heisst das Verzeichnis der MIT Implmentation //attiny// und das der Googlecode //tiny//. Wir installieren in folgendem Beispiel beide, wenn Du sicher bist, dass Du nur eine benötigst/willst, kannst Du den jeweils anderen Teil natürlich überspringen. ==== Windows und Linux ==== - Beende die Arduino IDE wenn sie gestartet ist - Finde Deinen Sketchbook Ordner und erstelle darin einen Ordner namens **hardware**. (Unter Menu Datei Einstellungen) __**Für tiny:**__ - Lade das zugehörige [[http://code.google.com/p/arduino-tiny/]] Archiv für //tiny// herunter. - Entpacke nun das Archiv für //tiny// in den neu erstellten Ordner **hardware**. - Datei "Prospective Boards.txt" in Boards.txt umbenennen - **Nur für Arduino IDE < 1.0: **Wenn Du **nicht** einen Arduino mit ArduinoISP (siehe weiter unten) zum Upload verwendest, passe in der Datei **hardware/tiny/boards.txt** für die gewünschten Boards den Paramter //ATTINY-NAME.upload.using=// an (ATTINY-NAME ist z.B. //attiny84at8// für einen ATtiny84 @ 8MHz) __**Für attiny:**__ - Lade nun das [[https://github.com/damellis/attiny/archive/master.zip|Archiv]] für //attiny// herunter. - Entpacke nun das Archiv für //attiny// in den neu erstellten Ordner **hardware**. Wenn Du das gewünschte Archiv oder beide entpackt hast, kannst Du die Arduino IDE wieder starten, unter **Tools | Boards** finden sich dann die folgenden Boards oder ein Teil davon (in diesem Fall wurden beide Archive entpackt): {{:arduino:attiny_boards_available.png?391x280|Arduino IDE Screenshot}} Die Board-Definitionen mit einem **@** stammen von der //tiny// Implementation, die ohne von der //attiny// Implementation. === Verwendbare Funktionen auf dem ATtiny === Für die Verwendung mit dem ATtiny stehen Ihnen nun folgende Funktionen zur Verfügung (und natürlich auch alle Libraries die mit diesen Funktionen auskommen **und** deren Verwendung die Speichergrösse des verwendeten ATtiny Chips nicht überschreitet): *[[http://arduino.cc/en/Reference/PinMode|pinMode()]] *[[http://arduino.cc/en/Reference/DigitalWrite|digitalWrite()]] *[[http://arduino.cc/en/Reference/DigitalRead|digitalRead()]] *[[http://arduino.cc/en/Reference/AnalogRead|analogRead()]] *[[http://arduino.cc/en/Reference/AnalogWrite|analogWrite()]] *[[http://arduino.cc/en/Reference/ShiftOut|shiftOut()]] *[[http://arduino.cc/en/Reference/PulseIn|pulseIn()]] *[[http://arduino.cc/en/Reference/Millis|millis()]] *[[http://arduino.cc/en/Reference/Micros|micros()]] *[[http://arduino.cc/en/Reference/Delay|delay()]] *[[http://arduino.cc/en/Reference/DelayMicroseconds|delayMicroseconds()]] *[[http://arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial]] **Hinweis:** Nicht alle zeitabhängigen Funktionen wie z.B. //delayMicroseconds()// arbeiten mit allen Taktfrequenzen korrekt. //((http://forum.boxtec.ch/index.php/topic,2003.msg2307.html#msg2307))// ===== ATtiny mit Arduino IDE programmieren ===== Mit einem geeigneten Programmierer können nun bereits Sketche auf den ATtiny Chip geladen werden. Am einfachsten geht dies mit einem Arduino Board als ISP mit dem [[http://arduino.cc/en/Tutorial/ArduinoISP|ArduinoISP Sketch]], aber auch jeder andere Programmierer wie z.B. [[http://shop.boxtec.ch/usbtiny-arduino-programmer-p-40910.html|USBtiny]] oder einem [[http://shop.boxtec.ch/pocket-programmer-p-40948.html|Pocket AVR Programmer]]. ==== ATtiny mit ArduinoISP programmieren ==== === Verbindung ATtiny mit Arduino ISP === == Kondensator zur Verzögerung == Der Kondensator am Reset Pin des Arduino sorgt dafür, dass der Arduino nicht resettet wenn der Upload startet. Dies äussert sich durch die folgende Fehlermeldung in der Arduino IDE: avrdude: stk500_getsync(): not in sync: resp=0x15 **Hinweis:** Der Kondensator wird offenbar nur mit Arduino UNO immer benötigt. Wird ein Duemilanove eingesetzt gehen die Meinungen weit auseinander... :-P In Kürze: Wenns Probleme gibt unbedingt mit Kondensator - //nützts nix, schads nix//! //((http://forum.boxtec.ch/index.php/topic,2003.msg2307.html#msg2307))// **Hinweis:** Der Arduino Leonardo eignet sich erst ab Arduino IDE 1.0.3 für die Verwendung als ISP! == Für ATtiny X4 (24, 44, 84): == ^ ^ Arduino Pin ^ ATtiny Pin ^ | MOSI | D11 | 7 | | MISO | D12 | 8 | | SCK | D13 | 9 | | Reset | D10 | 4 | {{:arduino:attiny-ispx4_bb.png?600x393|Arduino als ISP für den ATtinyX4}} == Für ATtiny X5 (25, 45, 85): == ^ ^ Arduino Pin ^ ATtiny Pin ^ | MOSI | D11 | 5 | | MISO | D12 | 6 | | SCK | D13 | 7 | | Reset | D10 | 1 | {{:arduino:attiny-ispx5_bb.png?600x389|Arduino als ISP für den ATtinyX5}} Wähle den folgenden Programmierer unter **Tools | Programmer** > **Arduino as ISP**. ==== ATtiny mit USB ISP programmieren ==== === Verbindung ATtiny mit USB ISP === Verwende die obengenannten Anschlussbelegungen um die MOSI, MISO, SCK und Reset-Leitungen mit Deinem Programmierer zu verbinden. Wähle den eingesetzten Programmierer unter **Tools | Programmer**. ==== Spezielle Libraries für ATtiny ==== Es existieren einige I2C Libraries für ATtiny (die Standard Wire Library kann nicht verwendet werden!), jedoch mit Einschränkungen: ^ Library ^ I2C Master ^ I2C Slave ^ unterstützte ATtiny ^ unterstütze Taktfrequenz ^ | [[http://playground.arduino.cc/Code/USIi2c|I2C (master and slave)]] | X | X | ATtiny85 | 1MHz, 8MHz | | [[https://github.com/rambo/TinyWire/tree/master/TinyWireS|TinyWireS]] | -- | X | ATtiny2313\\ ATtiny25/45/85\\ ATtiny44/84\\ und weitere | 8MHz | | [[https://github.com/jscrane/SPI|SPI]] ||| ATtiny84/? | 8/16MHz | | [[https://github.com/jscrane/RF24|RF24]] (nRF24L01+ modules) ||| ATtiny84/? | 8/16MHz | | [[https://github.com/jscrane/RF24Network|RF24Network]](nRF24L01+ modules) ||| ATtiny84/? | 8/16MHz | ==== ATtiny Serial Debugging ==== Die //tiny// Implementation bietet ein spezielles Debugging mit einer seriellen Einwegschnittstelle - der ATtiny kann nur Daten senden, aber nicht empfangen. Dazu einfach das FTDI Modul mit dem ATtiny verbinden und in der Arduino IDE den Serial Monitor starten. Bei den ATtinyX4 Modellen befindet sich der TinyDebug Port für die Ausgabe auf Pin 2 (PB0), bei den ATtinyX5 Modellen auf Pin 2 (PB3). Dieser Port wird dann mit dem RX Port vom FTDI Modul verbunden. {{ :arduino:attiny-sdbgx4_bb.png?320x274 |ATtinyX4 TinyDebug Anschluss}} Die Verwendung von TinyDebug ist dabei identisch mit der ganz normalen Syntax der [[http://arduino.cc/en/Reference/Serial|Serial]]-Klasse - ausgenommen natürlich die Funktionen zum Empfangen von Daten: void setup() { Serial.begin(9600); Serial.println("Gestartet"); } void loop() { Serial.print("Laufzeit: "); Serial.print(millis()/1000); Serial.print("s"); delay(1000); } ==== Hinweise & Tipps ==== === Taktfrequenz einstellen / Bootloader brennen === Alle der vorgestellten ATtiny Mikrokontroller können mit 1MHz oder 8MHz mit dem internen Oszillator getaktet werden oder aber mit einer anderen Frequenz wie z.B. 20MHz mit einem externen Oszillator. Um dem ATtiny Chip mitzuteilen welche Taktfrequenz gewünscht ist müssen einmalig gewissen Fuses gesetzt werden. Dies wird erreicht indem man das entsprechende getaktete Board unter **Tools | Board** anwählt und dann mit dem Menupunkt **Tools | Burn Bootloader** die Fuses auf dem ATtiny einmalig setzt. Defaultmässig werden die meisten ATtiny auf 1MHz gesetzt ausgeliefert, so dass bei der Verwendung auf 1MHz dieser Vorgang beim erstmaligen Gebrauch des Chips ausfallen kann. == Bootloader ?? == Man darf sich hier aber nicht täuschen lassen, die ATtiny enthalten auch nach diesem Vorgang **keinen** Bootloader wie z.B. der ATmega328 auf einem Arduino Board. Die Programmierung des Boards wird also immer über einen ISP-Programmer erfolgen (z.B. ein Arduino Board mit dem [[http://arduino.cc/en/Tutorial/ArduinoISP|ArduinoISP Sketch]], oder ein Programmierer wie [[http://shop.boxtec.ch/usbtiny-arduino-programmer-p-40910.html|USBtiny]] oder dem [[http://shop.boxtec.ch/pocket-programmer-p-40948.html|Pocket AVR Programmer]]). === Tunen/Kalibrieren des internen Oszillators === Für viele Anwendungen reicht die Genauigkeit des internen Oszillators vollständig aus die bei rund 10% liegt. Dies hat vor allem auch einen Einfluss auf die serielle Kommunikation. So liegt die maximale Baudrate bei einer Abweichung von 4.5% bei 19200 //(([[http://arduino.cc/forum/index.php/topic,8553.0.html]]))// und reduziert sich bei steigender Abweichung natürlich. Mit dem Tiny Tuner besteht nun die Möglichkeit diese Abweichung zu messen und mit einer Korrektur/Drift im Sketch anzugleichen. Dies geschieht unter der Annahme, dass ein sendendes Terminal wie z.B. ein Computer eine hohe Taktgenauigkeit aufweist. Der TinyTuner Sketch misst also ob ein durch 8 Bits definiertes Zeichen zu schnell oder zu langsam oder genau richtig ankommt. == Verwendung des Tiny Tuner == Nach dem Herunterladen des [[http://arduino-tiny.googlecode.com/files/TinyTuner-0003.zip|Tiny Tuners]] wird das Archiv wie eine Arduino Library in das Verzeichnis **libraries** entpackt und die Arduino IDE neugestartet. Unter **File | Examples | TinyTuner** stehen nun verschiedene Sketches bereit mit welchen die internen Oszillatoren gemessen und demensprechend später im eigenen Programm angepasst werden können. Die Beispiele enthalten alle komplette Instruktionen wie die Messung auszuführen ist und welche Anpassung im eigenen Programm nötig sind um die gemessene Abweichung zu korrigieren. === Hinweis zum Betrieb mehrere Arduino IDE Versionen parallel === Wenn Du mehrere Versionen der Arduino IDE installiert hast und verwendest, empfiehlt es sich die Dateien statt unterhalb des sketchbook Verzeichnis die Dateien im **hardware** Verzeichnis der Installation zu entpacken. Damit wird erreicht, dass die ATtiny Boards Definition nur der Arduino IDE Version zur Verfügung stehen in deren Verzeichnis sie installiert wurden. Im Normallfall bei der eingangs beschriebenen Installation im Sketchbook Verzeichnis stehen die Board Definitionen allen installierten Arduino IDE Versionen zur Verfügung. === Fehler beim Upload auf den ATtiny Chip === == avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny84 == Diese Meldung erscheint immer zweimal auch bei erfolgreichen Uploads. Wenn es die einzige Fehlermeldung ist kann sie getrost ignoriert werden. == avrdude: stk500_getsync(): not in sync: resp=0x15 == Dieser Fehler deutet darauf hin, dass das Arduino Board welches als ISP benützt wird nicht bereit war, resp. noch der Bootloader lief nach einem Reset. Um den Reset zu vermeiden reicht ein min. 10uF Kondensator zwischen Reset und GND der den Reset Puls auffängt.//((http://forum.boxtec.ch/index.php/topic,2003.msg2299.html#msg2299))// ==== Pin Mapping zum Arduino ==== Leider wirds hier ohne entsprechende Dokumentation zur Hand schon sehr spannend, so kann sich ohne Wissen der Pin Mappings, der Versuch eine LED zu blinken in die Tage ziehen.. Zuerst einmal das Wichtigste: Je nachdem welches Board man im Menu **//Tools | Board//** wählt, wird die eine oder andere ATtiny Implementation aktiv und somit komplett verschiedene Pin Mappings. Also z.B. wo D2 bei einem ATtiny84 bei //tiny// auf Pin 5 liegt ist dieser bei der //attiny// Implementation auf Pin 11. ^ Arduino Pin ^ //tiny// Pin (ATtinyX4)\\ //ATtiny24,44,84// ^ //tiny// Pin (ATtinyX5)\\ //ATtiny25,45,85// ^ //attiny// Pin (ATtinyX4)\\ //ATtiny44,84// ^ //attiny// Pin (ATtinyX5)\\ //ATtiny45,85// ^ //tiny// Pin\\ //ATtiny2313// ^ | D0 | 2 | 5 | 13 | 5 | 2 | | D1 | 3 | 6 | 12 | 6 | 3 | | D2 | 5 | 7 | 11 | 7 | 4 | | D3 | 6 | 2 | 10 | 2 | 5 | | D4 | 7 | 3 | 9 | 3 | 6 | | D5 | 8 | - | 8 | - | 7 | | D6 | 9 | - | 7 | - | 8 | | D7 | 10 | - | 6 | - | 9 | | D8 | 11 | - | 5 | - | 11 | | D9 | 12 | - | 3 | - | 12 | | D10 | 13 | - | 2 | - | 13 | | D11 | - | - | - | - | 14 | | D12 | - | - | - | - | 15 | | D13 | - | - | - | - | 16 | | D14 | - | - | - | - | 17 | | D15 | - | - | - | - | 18 | | D16 | - | - | - | - | 19 | | A0 | 13 | 1 | 13 | 1 | - | | A1 | 12 | 7 | 12 | 7 | - | | A2 | 11 | 3 | 11 | 3 | - | | A3 | 10 | 2 | 10 | 2 | - | | A4 | 9 | - | 9 | - | - | | A5 | 8 | - | 8 | - | - | | A6 | 7 | - | 7 | - | - | | A7 | 6 | - | 6 | - | - | | Serial-Debug Pin | 2 (PB0) | 2 (PB3) | ? | ? | 4 (PA1) | ===== Feedback / Korrekturen / Fragen ===== Wir sind für jede Anregung, Korrektur, Frage und/oder Rückmeldung dankbar. Bitte poste entweder in unser [[http://forum.boxtec.ch/index.php/board,25.0.html|ATtiny Forum]] oder verwende unser [[http://shop.boxtec.ch/contact_us.php|Kontaktform]]. Danke für die Unterstützung, wir hoffen diese Informationen sind für Deine ersten Gehversuche mit ATtiny Mikrokontrollern hilfreich. ===== Links ===== * [[arduino:attinyusb:helvetiny85|Helvetiny85 from dinoi]] * [[https://learn.sparkfun.com/tutorials/how-to-install-an-attiny-bootloader-with-virtual-usb|Sparkfun Learn: How to Install an ATtiny Bootloader With Virtual USB]] ===== Referenzen ===== - [[http://www.atmel.com/products/microcontrollers/avr/tinyavr.aspx|Atmel ATtiny Dokumentation]] - [[http://www.mikrocontroller.net/articles/AVR_Typen#ATtiny_3|Mikrokontroller.net: AVR Typen : ATtiny]] - [[https://github.com/SpenceKonde/ATTinyCore|Weiterentwickelte Attiny Bibliothek für x313, x4, x5, x61, x7 und x8]] - [[https://github.com/SpenceKonde/arduino-tiny-841|Zusätzliche Unterstützung für 441, 841, 828 und 1634. - [[http://hlt.media.mit.edu/?p=1695|Programming an ATtiny w/ Arduino 1.0]] - [[http://code.google.com/p/arduino-tiny/|Arduino-Tiny]] - [[http://www.akafugu.jp/images/microcontroller-reference-sheet.png|Microcontroller Reference Sheet]] - [[http://arduino.cc/forum/index.php?topic=91125.0|TinyDebug Discussion Arduino Forum]] - [[http://arduino.cc/forum/index.php/topic,8553.0.html|Tiny Tuner Arduino Forum]] - [[http://www.instructables.com/id/How-to-program-attiny-using-arduino-uno|ATtiny Progammer Shield]] - [[https://arduinodiy.wordpress.com/2015/05/16/high-voltage-programmingunbricking-for-attiny/|High Voltage programming/Unbricking for Attiny]]