Welcome to Workshop 88’s Tiny85 Class Please download Tiny core libs from: http://code.google.com/p/arduino-tiny/ (for Arduino 1.0, not 1.5!) Unzip and stash the ‘tiny’ folder for later. ver 1.1 2/1/14 Objective of class You walk out with a Tiny85 with code that you wrote and that you burned into the chip. What we’ll cover • • • • • • • • • • • • • Why use a Tiny85 (or friends)? Why not? How Arduino IDE works with Tinys Putting new core libs on your IDE Put a Tiny blinkie on your breadboard Write your own blinkie Porting code to Tiny85 Mapping Tiny85 pins to Arduino pins How to burn code to a Tiny: programming, programmers, programs… Burn your blinkie! Fuses and avrdude Using RESET as a 6th I/O pin Commercial Tiny85s Other Tinys: 84, 4313 Atmel 8 bit AVR familes AVR stands for Alf (Egil Bogen) and Vegard (Wollan)'s RISC processor • Mega family – AtMega328P (Arduino!) – AtMega2560 (Mega) – more • Tiny family – AtTiny25/45/85 – AtTiny24/44/84 – AtTiny2313/4313 – more (There’s also an Xmega family, as well as a 32 bit family.) • • • • • • • • • • • • • 32K program flash 2K RAM 1K EEPROM Two 8-bit counters One 16-bit counter Six PWM channels Serial USART I2C/TWI interface 8 channel A/D converter 23 I/O lines SPI interface Analog comparator Watchdog timer What’s inside Mega328P • • • • • • • • • • • • • 32K 8K program flash 2K 512B RAM 1K 512 B EEPROM Two 8-bit counters One 16-bit counter Six Two PWM channels Serial USART I2C/TWI USI interface 8 4 channel A/D converter 23 6 I/O lines SPI interface Analog comparator Watchdog timer What’s inside Mega328P Tiny85 From code to flash From code to flash From code to flash libraries compiler /linker Binary executable Usually as a Hex File From code to flash: ascii hex file From code to flash Hex File on host Chip From code to flash Hex File Hardware programmer Chip From code to flash Hex File programming software (avrdude) Hardware programmer usually serial Chip From code to flash Hex File programming software (avrdude) usually serial Hardware programmer programming interface Chip From code to flash Hex File programming software (avrdude) usually serial Hardware programmer programming interface Chip From code to flash Hex File programming software (avrdude) usually serial We’ll do it this way for Tiny85! Hardware programmer programming interface Chip From code to flash Hex File We’ll do it this way for Tiny85! programming software (avrdude) programming interface USB serial! Hardware programmer Chip From code to flash Hex File We’ll do it this way for Tiny85! programming software (avrdude) programming interface USB serial! running “ArduinoISP” sketch Chip From code to flash: Arduino Hex File programming software (avrdude) programming interface serial! Chip From code to flash: Arduino Hex File programming software (avrdude) programming interface serial! Chip From code to flash: Arduino Hex File programming software (avrdude) USB serial driver serial programming interface USB-serial chip on Arduino USB Chip Arduino bootloader burner From code to flash From code to flash Get your Tiny on! • Refer to pinout and connect +5V and ground • The Tiny is preprogrammed with a blink sketch on pin 5 • Put an LED on pin 5 and verify that it works! Installing Tiny core libs • Unzip if needed • Copy “tiny” directory to the “hardware” directory either: • In main Arduino installation Win: Program Files/arduino-1.0.5/hardware linux: /usr/share/arduino/hardware • In your Arduino directory (make dir “hardware” if needed) Win: My Documents/Arduino/hardware linux: $HOME/sketchbook/hardware boards.txt • Contains definitions for all available boards • In top “tiny” directory, copy “Prospective Boards.txt” to “boards.txt” • I suggest cleaning up your new “boards.txt”, leaving only stanzas for – ATtiny85 @ 8 MHz – ATtiny85 @ 1 MHz Write your blinkie! • Recognizable pattern • 1-3 LEDs (5 max) • Use variables or #defines for pins Porting Tiny has: • • • • Digital pins 0-5 Analog pins A0-A3 Change your pin numbers to ones Tiny has Find the mapping in the Tiny core libs at hardware/tiny/cores/tiny/pins_arduino.c • Figure out which physical pins you’re using! Connecting Arduino as ISP to your Tiny85 You need 6 wires: • Power and ground • SPI lines MISO, MOSI, SCK • Reset Line names are marked on the mini-shield Using Arduino as ISP • • • • • • • • • Plug in your Arduino Select the board type of your Arduino Load ArduinoISP from Examples Upload to your Arduino Plug in mini-shield (must be AFTER loading ArduinoISP!) Select Tiny85 board Select Arduino as ISP as Programmer Load your code Click Upload! avrdude: path • Windows: try \Program Files\arduino1.0.x\hardware \tools\avr\bin • Linux: try <arduino-root>/hardware/tools (mine was /usr/share/arduino/hardware/tools) avrdude: command line $ avrdude –P –P –b –p –c –t /dev/ttyUSB0 (/dev/ttyACM0) COM4 (or whatever) 19200 t85 <path to avrdude.conf> avrdude: stop complaining! part id desc has_debugwire flash_instr eeprom_instr = = = = = "t85"; "ATtiny85"; yes; 0xB4, 0x02, 0xBB, 0xFF, 0xBC, 0x02, 0x99, 0xE1, 0x12; 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, 0xBB, 0xAC; ## next 2 are fakes so avrdude won't complain pagel = 1; bs2 = 1; ## no STK500 devcode in XML file, use the ATtiny45 one stk500_devcode = 0x14; Fuses • (Not what it sounds like) • Nonvolatile configuration bits • There are 3: – FUSE LOW BYTE – FUSE HIGH BYTE – FUSE EXTENDED BYTE • Logic values confusing: 1 (not programmed) = FALSE FUSE LOW BYTE FUSE HIGH BYTE FUSE EXTENDED BYTE HV programmer/fuse resetter HV programmer/fuse resetter https://sites.google.com/site/wayneholder/attiny-fuse-reset Other Tiny85s: Babygnusbuino Other Tiny85s: DigiSpark Other Tiny85s: Gemma Other Tiny85s: Trinket Other Tiny85s: EezeeTiny Other Tiny85s: PicoDuino Other Tiny85s: my dollhouse nodes Other Tinys Pins USART PWM A/D Flash/RAM chans inputs /EEPROM Tiny85 8 No 2 4 8K/512/512 Tiny84 14 No 4 8 8K/512/512 Tiny4313 20 Yes 4 0 4K/256/256 Tiny13(a) 8 No 2 4 1K/64/64 There are lots more, but these are a fine starting place. Architectures