Introducing Trinket
Introducing Trinket
Guide Contents
Guide Contents
Introduction
Guided Tour
Pinouts
Power Pins
10
GPIO Pins
11
12
13
13
13
14
14
15
15
Mac OSX
15
Linux
16
16
16
17
18
20
Blink!
21
24
If you get the error message avrdude: Error: Could not find USBtiny device
(0x1781/0xc9f)
25
If you get a lot of red text, errors and also a warning about Verification Failed
25
On Linux if you get the error message "usbtiny_receive: error sending control message:
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 2 of 51
26
28
28
analogRead()
29
analogWrite()
29
More...
30
32
32
33
39
40
43
Power Tradeoffs
43
43
...on AVR-GCC
43
...Arduino IDE
43
Repairing bootloader
45
Downloads
47
Datasheets
47
Windows Driver
47
Source code
47
Schematics
47
FAQ
50
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 3 of 51
Introduction
Trinket may be small, but do not be fooled by its size! It's a tiny microcontroller board, built
around the Atmel ATtiny85, a little chip with a lot of power. We wanted to design a
microcontroller board that was small enough to fit into any project, and low cost enough to
use without hesitation. Perfect for when you don't want to give up your expensive dev-board
and you aren't willing to take apart the project you worked so hard to design. It's our lowestcost arduino-IDE programmable board!
The Attiny85 is a fun processor because despite being so small, it has 8K of flash, and 5 I/O
pins, including analog inputs and PWM 'analog' outputs. We designed a USB bootloader so
you can plug it into any computer and reprogram it over a USB port just like an Arduino. In
fact we even made some simple modifications to the Arduino IDE so that it works like a miniArduino board. You can't stack a big shield on it but for many small & simple projects the
Trinket will be your go-to platform.
Even though you can program Trinket using the Arduino IDE, it's not a fully 100% Arduinocompatible. There are some things you trade off for such a small and low cost
microcontroller!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 4 of 51
Trinket does not have a Serial port connection for debugging so the serial port monitor
will not be able to send/receive data
Some computers' USB v3 ports don't recognize the Trinket's bootloader. Simply use a
USB v2 port or a USB hub in between
There are two versions of the Trinket. One is 3V and one is 5V. Both work the same, but
have different operating logic voltages. Use the 3V one to interface with sensors and
devices that need 3V logic, or when you want to power it off of a LiPo battery. The 3V
version should only run at 8 MHz. Use the 5V one for sensors and components that can use
or require 5V logic. The 5V version can run at 8 MHz or at 16MHz by setting the software-set
clock frequency.
Here are some useful specifications!
ATtiny85 on-board, 8K of flash, 512 byte of SRAM, 512 bytes of EEPROM
Internal oscillator runs at 8MHz, but can be doubled in software for 16MHz
USB bo o tlo ader with a nice LED indicato r lo o ks just like a USBtinyISP
so yo u can pro gram it with AVRdude (with a simple config modification) and/o r
the Arduino IDE (with a few simple config modifications)
Mini-USB jack for power and/or USB uploading, you can put it in a box or tape it up and
use any USB cable for when you want to reprogram.
We really worked hard on the bootloader process to make it rugged and foolproof,
this board wont up and die on you in the middle of a project!
~5.25K bytes available for use (2.75K taken for the bootloader)
Available in bo th 3V and 5V flavo rs
On-board 3.3V or 5.0V power regulator with 150mA output capability and ultra-low
dropout. Up to 16V input, reverse-polarity protection, thermal and current-limit
protection.
Power with either USB or external output (such as a battery) - it'll automatically switch
over
On-board green power LED and red pin #1 LED
Reset butto n fo r entering the bo o tlo ader o r restarting the pro gram. No
need to unplug/replug the bo ard every time yo u want to reset o r
update!
5 GPIO - 2 shared with the USB interface. The 3 independent IO pins have 1 analog
input and 2 PWM output as well. The 2 shared IO pins have 2 more analog inputs and
one more PWM output.
Hardware I2C / SPI capability for breakout & sensor interfacing.
Mo unting ho les! Yeah!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 5 of 51
Guided Tour
Let me take you on a tour of your Trinket! Each trinket is assembled here at Adafruit and
comes chock-full of good design to make it a joy to use.
Mini-B USB co nnecto r - We went with the tried and true mini-B USB connector for
power and/or USB bootloading. In our experience, Micro-B connectors can rip off the
PCB easily, but we have not had that problem with mini B, its much more rugged for DIY
electronics. It's also a proper USB connector, so you can use any length cable. Some
Attiny85 boards use a PCB that slides into a USB port to cut costs, but that makes it
hard to re-program and annoying to power with an external battery pack
Green Po wer LED - you'll know that the board is powered up when this bright LED is
lit
Red #1 LED - this LED does double duty. Its connected with a series resistor to the
digital #1 GPIO pin. It pulses nicely when the Trinket is in bootloader mode, and its also
handy for when you want an indicator LED.
Battery + Input - take your Trinket anywhere and power it from an external battery.
This pin can take up 16V DC input, and has reverse-polarity, over-curent and thermal
protections. The circuitry inside will use either the battery or USB power, safely
switching from one to the other. If both are connected, it will use whichever has the
higher voltage
USB Po wer Output - You can also snag the 5V power from the USB jack in case you
need 500mA+ current from your computer or portable USB power pack.
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 6 of 51
Breadbo ard friendly pins - You can easily plug this into a little breadboard and
have plenty of space for working and plugging stuff in
GPIO! - 5 GPIO pins, at 3 or 5V logic, check the next section for a detailed pinout
guide
3 o r 5V o utput - an onboard regulator provides 3.3V or 5V output for powering
LEDs, sensors, small motors, etc.
Reset Butto n - an onboard reset button will launch the bootloader when pressed
and the Trinket is plugged into a computer. If it is not connected to a computer, it's
smart enough to go straight to the program.
External Reset Pin - we bring out the reset pin so you can reset or restart your
Trinket on the road. If the Trinket is in a box or otherwise hard to get to, you can wire
up a button to this pin for an external reset button.
Fo ur mo unting ho les make it easy to attach with 2mm screws or even tiny zipties, string, etc.
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 7 of 51
Pinouts
The following shows measurements in mm, both version of the Trinket have the exact same
dimensions for hole placement & outline
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 8 of 51
There are two versions of the Trinket: 3V and 5V. They are almost identical but there
are slight differences in the pinouts: one has a 3V output pin in the bottom right, the
other has a 5V output pin instead
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 9 of 51
Thanks to Adafruit Forums member ardunaut for developing this handy diagram!
Power Pins
We'll start with the top pins BAT+ and USB+ and GND
BAT+ is the Battery + Input pin. If you want to power the trinket from a battery or
power adapter or solar panel or any other kind of power source, connect the +
(positive) pin here! You can connect up to 16V DC. If you have a 3V Trinket, you'll want
at least 3.5V input to get a good 3.3V output. If you have a 5V trinket, 5.5V or higher is
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 10 of 51
GPIO Pins
Next we will cover the 5 GPIO (General Purpose Input Ouput) pins! For reference you may
want to also check out the datasheet-reference above for the core ATtiny85 pin
All the GPIO pins can be used as digital inputs, digital outputs, for LEDs, buttons and switches
etc. They can provide up to 20mA of current. Don't connect a motor or other high-power
component directly to the pins! Instead, use a transistor to power the DC motor
on/off (http://adafru.it/aUD)
On a 3V Trinket, the GPIO are 3.3V output level, and should not be used with 5V inputs. On a
5V Trinket, the GPIO are 5V output level, and can be used with 3V inputs but may damage
electronic devices that are 3V input only!
The first 3 pins are completely 'free' pins, they are not used by the USB connection so you
never have to worry about the USB interface interfering with them when programming
GPIO #0 - this is connected to PB0 on the ATtiny85. This pin can be used as a PWM
output, and is also used for I2C data, and SPI data input.
GPIO #1 - this is connected to PB1 on the ATtiny85. This pin can be used as a PWM
output, and is also used for SPI data output. This pin is also connected to the onboard
LED (like pin 13 on a regular Arduino).
GPIO #2 - this is connected to PB2 on the ATtiny85. This pin can be used as an
analog input (known as Analo g A1), and is also used for I2C clock and SPI clock.
The next 2 pins are also used for USB programming. That means that when the Trinket is
connected to a computer and in bootloader mode or in the middle of uploading a new
program, they are used for sending data to/from the computer! It's possible to share these
pins if you are careful. The best use of these pins is as o utputs to things like LEDs , or
inputs to things like buttons and just make sure not to press the buttons while connected
to USB. We didn't want to keep these pins off the board but we strongly recommend not
using them unless you're sure you need them since you might have to disconnect any
connections to reprogram the Trinket!
GPIO #3 - this is connected to PB3 on the Attiny85. This pin is used for USB
programming, but its also an analog input known as Analo g A3
GPIO #4 - this is connected to PB4 on the Attiny85. this pin is used for USB
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 11 of 51
programming, but it can also be used as a PWM analog output and an analog input
known as Analo g A2
Note the numbering of analog pins: Pin 2 is Analog 1, Pin 3 is Analog 3, Pin 4 is Analog 2.
For the Uno, the terms A1, A2, and A3 are mapped for you. For ATtiny85's, they are not.
So for the pinMode calls, use the Pin number (stenciled on Trinket), for analogRead, use
the analog number.
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 12 of 51
Please note: you cannot use the Adafruit USB VID/PID for your own non-Trinket
products or projects. Purchase a USB VID for yourself at
http://www.usb.org/developers/vendor/
https://learn.adafruit.com/introducing-trinket
Page 13 of 51
http://adafru.it/djr
Don't forget to plug in the Trinket via a known-good USB cable to start the process. You
should see the green power LED lit and the red bootloading LED pulse indicating that the
Trinket is ready to start bootloading. If you've programmed the Trinket since getting it, you
can always get it back to the bootloader state by pressing the small onboard reset button.
Linux is fairly picky about who can poke and prod at the USB port. You can always run
avrdude or Arduino IDE as root, which will make sure you have the proper permissions. If
you want to be super-cool you can add a udev rule which will let any user (who is not root)
connect to the USBtiny driver. That way you don't have to be root all the time!
Check http://learn.adafruit.com/usbtinyisp/avrdude#for-linux (http://adafru.it/cf3) for what to
add to your udev file.
When the Trinket is in bootloader mode, the red LED will be pulsing. Once the red LED
stops pulsing, you must press the reset button to re-enter bootloader mode
The Trinket must be connected to a computer via a USB cable to enter bootloader mode.
You can enter the bootloader mode by pressing the little button on the board with your
fingernail. The bootloader will 'time out' after 10 seconds, so to re-enter the bootloader
mode just re-press the button!
Don't press-and-hold the reset button, be sure to press-and-release!
See the video below for what it looks like to plug it in, have the LED pulse in bootloader
mode, time out and then press reset to restart the bootloader
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 14 of 51
Even though Trinket has a USB connector, it does not have a "Serial Console"
capability, so you cannot use Serial to send and receive data to/from a computer!
On Windows machines, be sure to extract the contents of the zip file. The IDE will not
execute properly from a compressed folder.
Mac OSX
If you're using Mac OS Mavericks you will need to update the setting to permit running
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 15 of 51
Arduino IDE
1.
2.
3.
4.
Linux
When installing the Linux version of the modified Arduino IDE you will want to add a udev rule
so the IDE can be run as a non-root user and access the USB ports. If you're using Ubuntu
you can follow these steps to install an updated udev rule:
wget https://github.com/adafruit/Trinket_Arduino_Linux/raw/master/adafruit-trinket.rules
sudo cp adafruit-trinket.rules /etc/udev/rules.d/
sudo reload udev
If you're not using Ubuntu, you might need to modify the udev rule to change the group to
something other than "dialout". Check out this page (http://adafru.it/dXc) for more tips on
udev configuration rules.
NOTE: When using Trinket in the Linux Arduino IDE make sure to change the
pro grammer to "USBtinyISP" under the To o ls -> Pro grammer menu!
Arduino v1.5+ has a different way of handling add-ons like this, please stick to v1.0.x
until we can determine what's different about v1.5! Thanks!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 16 of 51
If you'd like to be cutting edge, check this forum post which has some (untested!)
instructions on using w/1.5 (http://adafru.it/d6D)
Now you can start (or restart the the IDE) and check the To o ls->Bo ard menu, you should
see the three new entries for Trinket and Gemma:
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 17 of 51
OK you are half done! Next is updating the avrdude configuration file.
https://learn.adafruit.com/introducing-trinket
Page 18 of 51
may be a folder on the Desktop or possibly in C: \Pro gram Files if you used the installer.
Likewise in Linux it is where-ever you uncompressed the folder.
Now find the hardware\to o ls\avr\etc folder, and inside you should see the
avrdude.co nf file. You can also use your operating system's find tool to locate it.
Rename the old avrdude.co nf to avrdude.bak and copy over the new avrdude.co nf
to the same folder
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 19 of 51
Be sure you rename the old file before replacing it with the new one so you are sure to make
the swap!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 20 of 51
Download the ld for your operating system and replace the one you have now (thanks to
TCWorld for this fix! (http://adafru.it/cGP))
Blink!
OK let's practice uploading a sketch by uploading the classic Blink sketch. This program with
blink the onboard red LED that is connected to pin #1. Create a new sketch and copy&paste
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 21 of 51
the following into it, you can then save it as trinketblink or something similar, so you have
it handy
If you are using Linux you will have to be "root" running the Arduino program to have
access to the USB port
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
To upload to your Gemma or Trinket:
1) Select the proper board from the Tools->Board Menu
2) Select USBtinyISP from the Tools->Programmer
3) Plug in the Gemma/Trinket, make sure you see the green LED lit
4) For windows, install the USBtiny drivers
5) Press the button on the Gemma/Trinket - verify you see
the red LED pulse. This means it is ready to receive data
6) Click the upload button above within 10 seconds
*/
int led = 1; // blink 'digital' pin 1 - AKA the built in red LED
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Select the Trinket 8MHz board from the To o ls->Bo ard menu
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 22 of 51
Plug in the Trinket, make sure you see the green LED lit (power good) and the red LED
pulsing. Press the button if the red LED is not pulsing, to get into bootloader mode.
Click the Uplo ad button (or select File->Uplo ad)
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 23 of 51
If everything goes smoothly you should see the following (no red error messages) and of
course, the red LED on the trinket will blink on/off once a second
https://learn.adafruit.com/introducing-trinket
Page 24 of 51
If you get the error message avrdude: Error: Could not find
USBtiny device (0x1781/0xc9f)
That means the bootloader wasn't active. Make sure to press the button on the Trinket to
activate the bootloader before clicking the Upload button.
If you get a lot of red text, errors and also a warning about
Verification Failed
Check that you updated the avrdude.conf file above - if you don't update the description of
the Attiny85 in the configure file by replacing it, the IDE wont know to be patient with the
Trinket bootloader and will have many upload errors
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 25 of 51
https://learn.adafruit.com/introducing-trinket
Page 26 of 51
These can generally be ignored and should not interfere with the program upload.
Unfortunately Linux's USB core is a little flakey communicating with the ATtiny85 processor
on the Trinket/Gemma and can cause these errors. If an upload does fail, try it again as it is
likely an intermittent issue.
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 27 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 28 of 51
void loop() {
if (! digitalRead(SWITCH)) { // if the button is pressed
digitalWrite(LED, HIGH); // light up the LED
} else {
digitalWrite(LED, LOW); // otherwise, turn it off
}
}
analogRead()
You can read an analog voltage from digital #2 (called Analo g 1), digital #3 (called Analo g
3) and digital #4 (called Analo g 2)
For example, to read an analog voltage on pin #2, you would call analo gRead(1) to read
an analog voltage on pin #4 call analo gRead(2)
This is a bit confusing because the analog pins are numbered differently than the digital pins!
analogWrite()
There are a few PWM outputs on the Trinket, you can call analogWrite() on digital #0, #1 and
#4.
For example, to pulse the built-in LED slowly, upload this code:
/*
Pulse
Pulses the internal LED to demonstrate the analogWrite function
This example code is in the public domain.
To upload to your Gemma or Trinket:
1) Select the proper board from the Tools->Board Menu
2) Select USBtinyISP from the Tools->Programmer
3) Plug in the Gemma/Trinket, make sure you see the green LED lit
4) For windows, install the USBtiny drivers
5) Press the button on the Gemma/Trinket - verify you see
the red LED pulse. This means it is ready to receive data
6) Click the upload button above within 10 seconds
*/
int led = 1; // pulse 'digital' pin 1 - AKA the built in red LED
// the setup routine runs once when you press reset:
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 29 of 51
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
for (int i=0; i<256; i++) {
analogWrite(led, i); // PWM the LED from 0 to 255 (max)
delay(5);
}
for (int i=255; i>=0; i--) {
analogWrite(led, i); // PWM the LED from 255 (max) to 0
delay(5);
}
}
Make sure you're using the latest Trinket IDE so you can access pin #4's PWM capabilities. If
you aren't using the latest IDE you need to manually add functions like the following to init
and write analog values to pin #4. However if you have the latest IDE it includes fixes to
make pin #4 usable with Arduino's analogWrite function!
void PWM4_init() {
// Set up PWM on Trinket GPIO #4 (PB4, pin 3) using Timer 1
TCCR1 = _BV (CS10); // no prescaler
GTCCR = _BV (COM1B1) | _BV (PWM1B); // clear OC1B on compare
OCR1B = 127; // duty cycle initialize to 50%
OCR1C = 255; // frequency
}
// Function to allow analogWrite on Trinket GPIO #4
void analogWrite4(uint8_t duty_value) {
OCR1B = duty_value; // duty may be 0 to 255 (0 to 100%)
}
More...
We also know the following libraries work:
Adafruit NeoPixel (http://adafru.it/aZU) - control up to ~150 Neopixels via a Trinket!
SoftwareSerial - the built in SoftSerial library can (at least) transmit data on any digital
pin.
More as we do more testing and verification!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 30 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 31 of 51
Look for the line System wide co nfiguratio n file is ..... thats where avrdude.co nf is.
Because the USB bootloader is a little different than an off-the-shelf programmer, we have
to update the configuration file to have a longer erase delay. This does not affect
programming bare Attiny85 chips, so you can use this configuration file with Trinkets or raw
chips without any problems.
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 32 of 51
#----------------------------------------------------------- Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 33 of 51
# ATtiny85
#------------------------------------------------------------
Delete the text after the Attiny85 header text starting with part and onto until the next
header (in ours, that was ATmega640
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 34 of 51
Then paste in the following in the spot where you just deleted!
part
id
= "t85";
desc
= "ATtiny85";
has_debugwire = yes;
flash_instr = 0xB4, 0x02, 0x12;
eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
0x99, 0xE1, 0xBB, 0xAC;
## no STK500 devcode in XML file, use the ATtiny45 one
stk500_devcode = 0x14;
## avr910_devcode = ?;
## Try the AT90S2313 devcode:
avr910_devcode = 0x20;
signature
= 0x1e 0x93 0x0b;
reset
= io;
chip_erase_delay = 900000;
pgm_enable
Adafruit
Industries
= "1 0 1 0 1 1 0 0
0 1 0 1 0 0 1 1",
https://learn.adafruit.com/introducing-trinket
Page 35 of 51
"x x x x x x x x
chip_erase
x x x x x x x x";
= "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
hvsp_controlstack =
0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
hventerstabdelay = 100;
hvspcmdexedelay
= 0;
synchcycles
= 6;
latchcycles
= 1;
togglevtg
= 1;
poweroffdelay
= 25;
resetdelayms
= 1;
resetdelayus
= 0;
hvleavestabdelay = 100;
resetdelay
= 25;
chiperasepolltimeout = 40;
chiperasetime
= 900000;
programfusepolltimeout = 25;
programlockpolltimeout = 25;
memory "eeprom"
size
= 512;
paged
= no;
page_size
= 4;
min_write_delay = 4000;
max_write_delay = 4500;
readback_p1
= 0xff;
readback_p2
= 0xff;
read
= "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
"a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 36 of 51
write
= "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
"a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1
" 0 0 0 0
0
" 0 0 0 0
0
" i i i i
i i i
0 0
0 0 0 1",
0 0 0",
0 a1 a0",
i";
writepage = " 1 1 0
" 0 0 x x
x x
" a7 a6 a5 a4
a3
" x x x x
x x
0
x
a2
x
0 0 1 0",
a8",
0 0",
x";
mode = 0x41;
delay = 12;
blocksize = 4;
readsize = 256;
;
memory "flash"
paged
= yes;
size
= 8192;
page_size
= 64;
num_pages
= 128;
min_write_delay = 30000;
max_write_delay = 30000;
readback_p1
= 0xff;
readback_p2
= 0xff;
read_lo
= " 0 0 1 0 0 0 0 0",
" 0 0 0 0 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi
= " 0 0 1 0 1 0 0 0",
" 0 0 0 0 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo
="
" 0 0
" x x
" i i i
0 1 0 0 0 0 0 0",
0 x x x x x",
x a4 a3 a2 a1 a0",
i i i i i";
loadpage_hi = "
" 0 0
" x x
" i i i
0 1 0 0 1 0 0 0",
0 x x x x x",
x a4 a3 a2 a1 a0",
i i i i i";
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 37 of 51
writepage
= " 0 1 0 0 1 1 0 0",
" 0 0 0 0 a11 a10 a9 a8",
" a7 a6 a5 x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 32;
readsize = 256;
;
# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08.
memory "signature"
size
= 3;
read
= "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
memory "lock"
size
= 1;
write
= "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lfuse"
size
= 1;
write
= "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
read
= "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size
= 1;
write
= "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
read
= "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 38 of 51
memory "efuse"
size
= 1;
write
= "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x x x i";
read
= "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "calibration"
size
= 2;
read
= "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
If editing manually, Mac users should delete all references to parallel port programmers
("type = par;").
Now plug in the Trinket into the computer's USB port and/or press the reset button to enter
the bootloader. You should see the red LED pulsing. Now press return, you should get the
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 39 of 51
trinketblink.hex
http://adafru.it/cF1
And uploading it with the command avrdude -c usbtiny -p attiny85 -U
flash: w: trinketblink.hex
or, if that's giving errors, avrdude -c usbtiny -p attiny85 -D -U
flash: w: trinketblink.hex (note the extra -D)
As before, type out the command, then press the reset button to start the bootloader and
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 40 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 41 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 42 of 51
Power Tradeoffs
Doubling the speed will increase the power usage just a bit. At 8 MHz the current draw it
about 9 milliamps. That number includes the green power LED which draws about 3mA so
thats 6mA for the microcontroller itself.
At 16 MHz the draw is 12mA total. Subtracting the green LED current draw, that means 9mA
for the microcontroller itself.
...Arduino IDE
Using 16 MHz mode is very similar when using the Arduino IDE. Add the following line to the
very top of your Arduino sketch (as the first line)
#include <avr/power.h>
Then, in setup() - add this as the first line in the function:
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
Then select Trinket 16MHz from the Tools->Board menu. Your code will compile and run at
16 MHz!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 43 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 44 of 51
Repairing bootloader
The ATtiny85 does not have a protected-bootloader section. This means its possible to
accidentally overwrite the bootloader (or even if you unplug the Trinket while uploading it
might have difficulties from then on)
You can use an Arduino UNO to re-program the bootloader onto your Trinket (or Gemma).
This loader isn't tested to work with any other kind of Arduino.
Connect:
Trinket VBAT+ pin to Arduino 5V (or just power it via a battery or USB cable)
Trinket GND pin to Arduino GND
Trinket RST to Arduino #10
Trinket #0 pin to Arduino #11
Trinket #1 pin to Arduino #12
Trinket #2 pin to Arduino #13
On a Gemma, alligator clips work well. the Reset pin is underneath the MiniUSB Jack. You
may have to solder a wire temporarily. Alternatively, sometimes you can just hold the reset
button down while running the sketch (type 'G' to start) and it might work. Soldering a wire
works best.
Then download, uncompress and run the Trinketloader sketch, pick the one that matches
your Arduino version!
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 45 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 46 of 51
Downloads
Datasheets
Datasheet for the onboard regulator used (MIC5225 3.3V and 5.0V) (http://adafru.it/dQO)
Webpage for the ATtiny85, the microcontroller used in the Trinket (http://adafru.it/cE5)
Windows Driver
Please note a driver is not required for Mac or Linux. And the driver does not appear as a
'COM' port! It will show up as a 'USBtinyISP' device
Source code
Original code for the Trinket/Gemma bootloader on github (http://adafru.it/cE6)
We do not offer any support for this code, it is released as-is!
Please note: you cannot use the Adafruit USB VID/PID for your own non-Trinket/Gemma
products or projects. Purchase a USB VID for yourself at
http://www.usb.org/developers/vendor/
Schematics
Trinket 3.3V Schematic:
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 47 of 51
Trinket 5V schematic
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 48 of 51
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 49 of 51
FAQ
I'd like to use Trinket with Linux....
We don't guarantee Linux support since Linux varies from distro to distro, but here's a
very nice tutorial about Trinket with Ubuntu 14) (http://adafru.it/dML)
I can't seem to upload to my Trinket when it's plugged into a USB 3.0 port (newer
Macbooks have USB 3 ports)
Trinket's bootloader is finicky about USB 3 ports, and might not work on them. Try
connecting to any USB 2 ports you have or go through a USB 1 or USB 2 hub (nearly all
hubs are v2 or v1 instead of v3)
When uploading with the Arduino IDE, I get a lot of "(expected 4, got -5)" warnings and
then "avrdude: verification error; content mismatch"
Check that you followed the instructions for updating the Arduino IDE, including replacing
the old avrdude.conf (http://adafru.it/cEY)- this step is not optional!
Hmm I'm still having problems with Arduino/Avrdude - and I definitely did the required
updates
One fix that works for some people is to edit avrdude.co nf and set the
chip_erase_delay = 900000;
under the ATtiny85 heading to
chip_erase_delay = 400000;
That is, a shorter delay.
Can Trinket driver Neopixels (strips, squares, etc)? How many?
Yes! Trinket was designed to drive short segments of NeoPixels. There is enough RAM
on the attiny85 to drive 100 pixels, but depending on program RAM usage you may have
to scale back to 60 or 40.
Yo u can use EITHER the 3V o r 5V Trinket, at EITHER 8 o r 16MHz!
To use with neopixels:
1. Connect the + power line of the strip to VBUS (5V from USB), to VBAT if you are
powering the Trinket with 4-7VDC, or to a separate 4-7VDC power source such as a
3 or 4 pack of AA batteries.
2. Connect the - common ground to the battery pack (if being used) and also to the
Trinket GND pin
3. Connect the data in line to Trinket #1 - this will let you also see when data is being
sent because the #1 red LED will flicker. You can use other pins but start with #1
since its easiest to debug and use
4. Install the NeoPixel library as detailed in our Uber Guide (http://adafru.it/cEz), and
Adafruit
Industries
https://learn.adafruit.com/introducing-trinket
Page 50 of 51
Adafruit Industries
Page 51 of 51