ATtiny85 och Arduino

OBS: Sidan är under konstruktion och uppdateras kontinuerligt!

Här följer lite information om hur du kan använda ATtiny85 tillsammans med Arduino IDE. ATtiny85 är en liten (endast 8 pinnars MCU från Atmel) och den finns i både DIP8 (hålmonterad) eller SOIC8 (ytmonterad). Dessa finns i en hel del färdiga produkter såsom Adafruit Gemma, Adafruit Trinket samt LilyPad. Det finns många andra kort på marknaden, men låt oss börja från början.

ATtiny85 har 8Kbytes Flash (programminne), 512bytes EEPROM, 512bytes RAM och endast 8 pinnar, hela databladet kan laddas hem här. 2 pinnar behövs för matning, så blir det endast 6 I/O kvar (PB0-PB5), dock vill man ofta ha den ena I/O-pinnen som extern RESET (PB5) så kvar blir det 5 I/O (se de gröna 0-4 på bilden nedan). Varför vill man då använda en sådan här liten rackare?

ATtiny85-Lawicel

I vissa fall kan detta vara tillräckligt om man har en enkel sak att utföra, utrymmesbrist, energisnål eller en kostnadskritisk applikation. Man kör med intern oscillator (även om man kan köra med extern på PB3 och PB4, men då försvinner ytterligare 2 I/O pinnar). Den interna oscillatorn är som standard 8Mhz men ATtiny85 kan köras upp till 10MHz eller ända upp till 20MHz om matningsspänningen är över 4.5V. Så med Arduino kan man använda 5 I/O, dessa 5 I/O har även alternativa funktioner utöver digitala, det finns 3st analoga till digitala omvandlare (ADC) som blåmarkerade A1-A3, 2st kan användas som PWM. Denna lilla rackare har även en riktig I2C (SCL/SDA) samt en SPI (MOSI, MISO och SCK) och det är även dessa som används tillsammans med RESET om man programmerar via ISP gränssnittet. Dock saknas en seriell UART (RX/TX).

Vill man komma igång snabbt är det enklast att köpa en av de färdiga korten från Adafruit som heter Trinket eller Gemma, men även här måste man ladda hem ett extra stöd för dessa och drivrutiner.

Vill man starta helt från scratch och testa själv så finns det stöd i Arduino IDE för ATtiny85 om man installerar ett tillägg och drivrutin för att ladda ner koden via USB. Först måste man dock programmera in en bootloader via ISP i varje ATtiny85, detta kan ske med olika verktyg, vi kommer visa några här. När detta är gjort, kan man via Arduino IDE utveckla kod och ladda ner via USB.

Eftersom ATtiny85 inte har en dedikerad bootloader area som kan skyddas (såsom i ATmega328P, ATmega32U4 och ATmega2560 etc.), så måste hela flashminnet raderas när ny kod laddas ner och bootloadern tillsammans med applikation programmeras in. Skulle något hända under denna process (spänningen försvinna eller man rycker ut USB innan det är klar osv.) är det lätt att flashminnet blir förstört och man måste programmera in bootloadern igen via ISP, så man får vara medveten om dessa fallgropar. Likaså har inte ATtiny85 någon inbyggd USB, så USB emuleras i mjukvaran/bootloadern och är bara aktiv under själva uppstarten (RESET) och några sekunder. Under denna process används 2 I/O som D+ och D- på USB som på bilden nedan (detta schema är inte komplett utan visar endast hur USB kopplas in, det krävs även en pullup på 1.5Kohm på D- till VCC samt 10uF/16V och 100nF över VCC och GND, likaså är det lämpligt med 2 dioder från USB-VCC för att få ner spänningen till ca 3.6V). Fullständigt schema finns inom kort längre ner på sidan. Man bör tänka på vad man ansluter på I/O 3 och 4 för att inte störa nedladdningen av kod.

ATtiny85-Lawicel-USB

Själva bootloadern i ATtiny85 går under namnet Micronucleus och är öppen källkod under GPLv2 licens och finns att hämta hem här på GitHub. Stödet för Arduino IDE (version 1.6.5 eller senare) är från Digistump/Digispark och här finns mycket bra instruktioner på hur man installerar detta och mer om själva projektet.

Här är en förenklad installationsanvisning på Svenska, för fullständig information, se länkarna ovan. Vi förutsätter att Arduino IDE version 1.6.5 (eller senare) redan är installerat. Välj “File->Preferences” från huvudmenyn (kortkommando: CTRL+Kommatecken) och skriv in: http://digistump.com/package_digistump_index.json i “Additional Board Manager URLs” och klicka på OK.

digistump-package1

Starta sedan om Arduino IDE (ibland kan detta behövas för att Contributed skall synas), gå sedan till Tools->Boards->Boards Manager… och välj där Contributed i Type listan som bilden nedan visar. Tryck på översta alternativet som bilden visar och klicka på Install. Stödet för ATtiny85 laddas hem och installeras, när det är klart tryck på Close. Innan man pluggar i sin ATtiny85 med Micronucleus bootloader skall USB drivrutinen installeras. Den skall enligt Digistump startas själv när man installerar stödet för Digispark i Arduino IDE, men den gör inte alltid detta så man får köra USB drivrutinerna själv. De kan laddas hem här (i tools katalogen finns USB drivrutiner, välj den som passar ditt OS, packa upp och kör den exekverbara filen, i Windows är det ZIP-filen och kör sedan install.exe). Men bäst är att läsa noggrant på Digistumps hemsida om man får problem, vi kan inte ge support på detta.

digistump-package2

Nu när detta är avklarat och USB drivrutiner är installerade behöver en ATtiny85 prepareras med Micronucleus bootloadern.

Första gången man skall preparera en blank/tom ATtiny85 måste detta ske via ISP (eller om flashminnet blir korrupt), det kan man göra med billiga/enkla programmerare såsom Tiny AVR Programmeraren (eller kompatibel) eller med mer avancerade såsom Atmel ICE Basic eller Atmel ICE Full via Atmel Studio.

Om man kör med Tiny AVR Programmeraren från SparkFun (eller kompatibel) så får man installera USB drivrutinerna (behövs inte på MacOS eller Linux) och har man installerat USB drivrutinen för Digistump redan är det den samma. Ladda sedan hem Micronucleus och packa upp filerna och lokalisera hexfilen t85_default.hex, det är själva bootloadern. Man behöver AVRdude med (och conf-filen) och dessa kommer med Arduino. Vi brukar ha dessa filer i en egen katalog så det blir lätt att programmera upp dem tillsammans med en bat-fil. Se bilden nedan vad som behövs.

ATtiny85-AVRdude

För att programmera en ny färsk ATtiny85 så har vi skapat en bat-fil för att göra det enkelt för oss och i denna finns en kommandorad:
avrdude -c usbtiny -p t85 -U flash:w:t85_default.hex -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m

ATtiny85an kommer nu att raderas, programmeras, verifieras och ställa in de olika fuse-bitarna rätt. För att underlätta finns här en zip-fil för Windows med de väsentliga filerna (obs i zipfilen finns endast AVRdude, HEX-filen för ATtiny85 samt de 2 BAT-filerna). Nedan visar slutet av alla kommandon om allt gått rätt. Det går givetvis att göra detta i MacOS och Linux med.

ATtiny85-AVRdude2

Då var allt klart och ATtiny85an kan nu programmeras via USB via Arduino IDE. Ett enkelt schema kommer inom kort och vi kommer även att visa hur man programmerar upp den med hjälp utav Atmel Studio och Atmel ICE.

Vi kommer inom kort även att sälja enkla starterkit med en förprogrammerad ATtiny85, men vi (som alla andra) kan inte garantera att man inte behöver någon gång programmera in bootloadern igen.

Text och bilder får inte kopieras och läggas på andra sidor utan skriftligt tillstånd från LAWICEL AB, men länka gärna hit.

Senast uppdaterad den 18 februari 2016

Mer info kommer inom kort