Arduino Lecture 3 - Interactive Media CS4062 Semester 2 2009
-
Upload
eoin-brazil -
Category
Technology
-
view
4.597 -
download
8
description
Transcript of Arduino Lecture 3 - Interactive Media CS4062 Semester 2 2009
Making Things Move, Lighting Things Up and
AVR ProgrammingCS4062 - Eoin Brazil - Semester 2 - 2009
Motion linear or
rotary
conversion issues
Types DC
Servo
Stepper
Gearhead
Servos and Motors
Servo
DC Motor
Stepper
Gearhead
2 Connections Continual spin, given current & voltage
Reversing current, reverses the direction
Increasing the voltage, spins faster, decreasing the voltage, slows the spin
High speed but low torque
Gearbox can add torque but at the expense of speed
DC Motor
DC Motor Example
DC Motor Example
DC Motor Example
Three Pieces
DC Motor with gearbox Not fast but provide more torque
Servo Motor Gearhead motor with position feedback
Feedback is often from potentiometer
Pulsing the motor moves it to particular position within 180 degree range
Can’t move 360 degrees but can be positioned precisely within the 180 degree range
Gearhead Motor
Servo
Gearhead
Precise positioning & 360 degrees range
Move in discrete steps around a circle
A 200 step motor would move 1.8 degrees per step around the full 360 degrees
Continuous rotation in either direction
Good torque
Complex to connect
Stepper Motor
Linear Motion
Pull or Push
Types Solenoid
Actuator
Microactuator
Solenoids and Actuators
Microactuators
Actuator
Solenoid
Motor Characteristics gears or direct
rated voltage
current (efficiency) - stall / running
speed - spin / rpm, rps, Hz
torque
size, shaft diameter, shaft length
position resolution (Servos & Steppers)
Advanced Mediation Lisa McElligott, 2000 interactive confessional box
used real confessional box
confessor was computer program
interacted using a voice interface.
scripted interactions with random noises to add to immersion
suspension of disbelief
realism
Weave Mirror
Side and back views
Mechanical mirror
Any person standing in front of one of these pieces is instantly reflected on its surface.
Uses video cameras, motors and computers to achieve mirroring
Sound aspect - soothing sound
Daniel Rozin, Weave Mirror, 2007
Weave Mirror Daniel Rozin,
Weave Mirror, 2007
Organic Energy Cloud
Motorised Cloud
PWM Analog input / output
Duration of the digital pulse of voltage
Microcontroller - HIGH 5V or LOW 0V
``Fake’’ it using PWM
Duty cycle, ratio from low to high to low cycle
LED dimming, DC Motor speed control, Piezo speakers, RC Servo positioning
Pulse Width Modulation
Wiring Diagram
Schematic Diagram
Servo Motor Connections on Arduino
Black wire would go to Grd pin
Red wire would go to 5V power pin
White wire would go to one of the digital pins on the board
Colours can vary, Ground (black or brown), Power (red), Control (orange, yellow or white)
RC Servo Motor
/* * NewSerialServo * -------------- * Servo control from the Serial port * * Alteration of the control interface to use < and > keys * to slew the servo horn left and right. Works best with * the Linux/Mac terminal "screen" program. * * Created 10 December 2007 * copyleft 2007 Brian D. Wendt * http://principialabs.com/ * * Adapted from code by Tom Igoe, http://itp.nyu.edu/physcomp/Labs/Servo */
/** Adjust these values for your servo and setup, if necessary **/ int servoPin = 2; // control pin for servo motor int minPulse = 600; // minimum servo position int maxPulse = 2400; // maximum servo position int turnRate = 100; // servo turn rate increment (larger value, faster rate) int refreshTime = 20; // time (ms) between pulses (50Hz) /** The Arduino will calculate these values for you **/ int centerServo; // center servo position int pulseWidth; // servo pulse width int moveServo; // raw user input long lastPulse = 0; // recorded time (ms) of the last pulse
continuedon next
slide
/* * NewSerialServo * -------------- * Servo control from the Serial port * * Alteration of the control interface to use < and > keys * to slew the servo horn left and right. Works best with * the Linux/Mac terminal "screen" program. * * Created 10 December 2007 * copyleft 2007 Brian D. Wendt * http://principialabs.com/ * * Adapted from code by Tom Igoe, http://itp.nyu.edu/physcomp/Labs/Servo */
/** Adjust these values for your servo and setup, if necessary **/ int servoPin = 2; // control pin for servo motor int minPulse = 600; // minimum servo position int maxPulse = 2400; // maximum servo position int turnRate = 100; // servo turn rate increment (larger value, faster rate) int refreshTime = 20; // time (ms) between pulses (50Hz) /** The Arduino will calculate these values for you **/ int centerServo; // center servo position int pulseWidth; // servo pulse width int moveServo; // raw user input long lastPulse = 0; // recorded time (ms) of the last pulse
continuedon next
slide
Setup the necessary control values and variables to store
information
// Main program setupvoid setup() { pinMode(servoPin, OUTPUT); // Set servo pin as an output pin centerServo = maxPulse - ((maxPulse - minPulse)/2); pulseWidth = centerServo; // Give the servo a starting point (or it floats) Serial.begin(9600); Serial.println(" Arduino Serial Servo Control"); Serial.println("Press < or > to move, spacebar to center"); Serial.println(); }
void loop() { // wait for serial input if (Serial.available() > 0) { // read the incoming byte: moveServo = Serial.read(); // ASCII '<' is 44, ASCII '>' is 46 (comma and period, really) if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; } if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; } if (moveServo == 32) { pulseWidth = centerServo; } // stop servo pulse at min and max if (pulseWidth > maxPulse) { pulseWidth = maxPulse; } if (pulseWidth < minPulse) { pulseWidth = minPulse; } }
continuedon next
slide
// Main program setupvoid setup() { pinMode(servoPin, OUTPUT); // Set servo pin as an output pin centerServo = maxPulse - ((maxPulse - minPulse)/2); pulseWidth = centerServo; // Give the servo a starting point (or it floats) Serial.begin(9600); Serial.println(" Arduino Serial Servo Control"); Serial.println("Press < or > to move, spacebar to center"); Serial.println(); }
void loop() { // wait for serial input if (Serial.available() > 0) { // read the incoming byte: moveServo = Serial.read(); // ASCII '<' is 44, ASCII '>' is 46 (comma and period, really) if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; } if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; } if (moveServo == 32) { pulseWidth = centerServo; } // stop servo pulse at min and max if (pulseWidth > maxPulse) { pulseWidth = maxPulse; } if (pulseWidth < minPulse) { pulseWidth = minPulse; } }
continuedon next
slide
Setup servo its pin, its pulse, and its position. Setup serial connection
for control
// Main program setupvoid setup() { pinMode(servoPin, OUTPUT); // Set servo pin as an output pin centerServo = maxPulse - ((maxPulse - minPulse)/2); pulseWidth = centerServo; // Give the servo a starting point (or it floats) Serial.begin(9600); Serial.println(" Arduino Serial Servo Control"); Serial.println("Press < or > to move, spacebar to center"); Serial.println(); }
void loop() { // wait for serial input if (Serial.available() > 0) { // read the incoming byte: moveServo = Serial.read(); // ASCII '<' is 44, ASCII '>' is 46 (comma and period, really) if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; } if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; } if (moveServo == 32) { pulseWidth = centerServo; } // stop servo pulse at min and max if (pulseWidth > maxPulse) { pulseWidth = maxPulse; } if (pulseWidth < minPulse) { pulseWidth = minPulse; } }
continuedon next
slide
The serial input controls the servo by the ‘<‘ or ‘>’ and keep its speed within the safe range
// pulse the servo every 20 ms (refreshTime) with current pulseWidth // this will hold the servo's position if unchanged, or move it if changed if (millis() - lastPulse >= refreshTime) { digitalWrite(servoPin, HIGH); // start the pulse delayMicroseconds(pulseWidth); // pulse width digitalWrite(servoPin, LOW); // stop the pulse lastPulse = millis(); // save the time of the last pulse } }// END of Main program
// pulse the servo every 20 ms (refreshTime) with current pulseWidth // this will hold the servo's position if unchanged, or move it if changed if (millis() - lastPulse >= refreshTime) { digitalWrite(servoPin, HIGH); // start the pulse delayMicroseconds(pulseWidth); // pulse width digitalWrite(servoPin, LOW); // stop the pulse lastPulse = millis(); // save the time of the last pulse } }// END of Main program
Pulse the servo every 20ms, this is where the desired change actually happens and its based
on the previous serial input
Types and contacts Knives and toggles Single pole = control of one circuit
Double pole = two circuits controlled at once
Single throw = one path for circuit
Double throw = two paths for circuit
Foot, tape / mat, roller, hair trigger, tilt, magnetic / reed
Switches
Knive (SPST)
Toggle (SPDT)
Practical switching Arduino looks for 0V (low) to 5V (high)
Digital inputs float between these values
Resistor “pulls” input to ground (0 volts)
Pressing switch “pushes” input to 5 volts
Switch pressed = HIGH, not pressed = LOW
setup(): pinMode(myPin,INPUT) loop(): digitalRead(myPin)
High and Low
Sketching your work
Bill Verplank Interaction Design
Sketchbook
Bill Buxton
Embodiment using Animatronics
Stefan Marti 2005, Autonomous
Interactive Intermediaries
2005, Physical Embodiments for Mobile Communication Agents
Kinematics Gears and mechanical
models Geometry of pure motion without
reference to force or mass
Cornell University Library, Kinematic Models for Design Digital Library (KMODDL)
Tutorials, models, e-books, e.g. Linkages
Chapter 3 in Building Robot Drive Trains
Examples from www.flying-pig.co.uk
PWM Tutorials
ITP Servo tutorial
Principial Labs Arduino Servo
Driving a Unipolar Stepper Motor
Driving a Bipolar Stepper Motor
Making an RC Servo wall following car
ITP Servo lab, uses a potentiometer to control the servo.
Arduino Library Software Servo Library
attach(int) Turn a pin into a servo driver.
detach() Release a pin from servo driving.
write(int) Set the angle of the servo in degrees, 0 to 180.
read() return that value set with the last write().
attached() return 1 if the servo is currently attached.
refresh() must call once every 50ms to keep servos updated, won't call more than every 20ms
setMinimumPulse(uint16_t) set the duration of the 0 degree pulse in microseconds. (default minimum value is 544 microseconds)
setMaximumPulse(uint16_t) set the duration of the 180 degree pulse in microseconds. (default maximum pluse value is 2400 microsconds)
Need to first send position with write() before you can receive any control signals
Projects and Prototyping Trade-offs
Projects and Prototyping Trade-offs
Re-programmable
Projects and Prototyping Trade-offs
Size matters
Stores charge I = C * dV/dt
removal of electrical noise
With resistors RC Circuit, parallel or series
low-pass or high-pass filtering
Capacitors
BLK-0BRN-1RED-2ORN-3YEL-4GRN-5BLU-6VIO-7GRY-8WHT-9
BLK-0BRN-1RED-2ORN-3YEL-4GRN-5BLU-6VIO-7GRY-8WHT-9
BLK-0BRN-1RED-2ORN-3YEL-4GRN-5BLU-6VIO-7GRY-8WHT-9
GLD 0.1SLV 0.01
BLK-1BRN-10RED-100ORN-1KYEL-10K
GRN-100KBLU-1MVIO-10M
GLD ±±±± 5%SLV ±±±± 10%
RED ±±±± 2%BRN ±±±± 1%
GRN ±±±± 0.5%BLU- ±±±± 0.25%VIO ±±±± 0.1%
BRN-100ppmRED-50ppmORN-15ppmYEL-25ppm
1st Digit 2nd Digit 3rd Digit
Multiplier Tolerance
TemperatureCoefficient
276 !!!! ±±±± 5%
47.5 K !!!! ±±±± 1%
10K !!!! ±±±± 5%
Resistor Color Code
6 - band Color Code
5 - band Color Code
4-band Color Code
GRY-8
Measuring Resistance
Measuring Voltage
Diodes LEDs, Zener, Schottky, Photo Pass current in one direction
only Forward voltage drop
e.g. forward voltage drop of 0.7 V in circuit where input is 5V will have voltage of 4.3V on its far side
Rectification Removal of negative voltages from signal, i.e. a
bridge rectifier
LED, 1.6V forward voltage drop, current limit 36mA, circuit total voltage 5V.
VR = 5 - 1.6 = 3.4V
R = V / I = 3.4 / 0.036 = 94.44 Ohm (at least 100 Ohm)
P = V * I = 3.4 * 0.036 = 0.1224 W (at least 0.125W)
RGB LEDs
RGB LEDs
RGB LEDs Ambient orb Cube of LEDS
RGB LEDs TiniTinct, Arduino-based monome compatible
AVR Programmer
AVR ATTiny13 Blinky
AVR ATTiny13 Blinky
/* Two LEDs, tied to pin b0 and to b1 which correspond to physical pins 5 and 6 on ATTINY13 are turned on for 100ms and then off for 200ms*/
#include <avr/io.h> #define F_CPU 1000000 // set to 1 MHz as delay.h needs F_CPU#include <util/delay.h>#include "pin_macros.h" // Leah Buechley's pin macros for AVRs - very useful
int main(void){ // Set Port B pins for 3 and 4 as outputs
b0_output; //initialize LED pinb1_output; //initialize LED pinb0_high; //LED is offb1_high; //LED is off
DDRB = 0x18; // In binary this is 0001 1000 (note that is bit 3 and 4)
for ( ; 1==1 ; ) // loop while 1 equals 1 - forever - C style loop{
// Set Port B pins for 3 and 4 as HIGH (i.e. turn the LEDs on) b0_low; //LED is on b1_low; //LED is on _delay_loop_2(65535); b0_high; //LED is off b1_high; //LED is off _delay_loop_2(65535);
}return 1;
}
/* Two LEDs, tied to pin b0 and to b1 which correspond to physical pins 5 and 6 on ATTINY13 are turned on for 100ms and then off for 200ms*/
#include <avr/io.h> #define F_CPU 1000000 // set to 1 MHz as delay.h needs F_CPU#include <util/delay.h>#include "pin_macros.h" // Leah Buechley's pin macros for AVRs - very useful
int main(void){ // Set Port B pins for 3 and 4 as outputs
b0_output; //initialize LED pinb1_output; //initialize LED pinb0_high; //LED is offb1_high; //LED is off
DDRB = 0x18; // In binary this is 0001 1000 (note that is bit 3 and 4)
for ( ; 1==1 ; ) // loop while 1 equals 1 - forever - C style loop{
// Set Port B pins for 3 and 4 as HIGH (i.e. turn the LEDs on) b0_low; //LED is on b1_low; //LED is on _delay_loop_2(65535); b0_high; //LED is off b1_high; //LED is off _delay_loop_2(65535);
}return 1;
}
Include the libraries and set the speed of chip
/* Two LEDs, tied to pin b0 and to b1 which correspond to physical pins 5 and 6 on ATTINY13 are turned on for 100ms and then off for 200ms*/
#include <avr/io.h> #define F_CPU 1000000 // set to 1 MHz as delay.h needs F_CPU#include <util/delay.h>#include "pin_macros.h" // Leah Buechley's pin macros for AVRs - very useful
int main(void){ // Set Port B pins for 3 and 4 as outputs
b0_output; //initialize LED pinb1_output; //initialize LED pinb0_high; //LED is offb1_high; //LED is off
DDRB = 0x18; // In binary this is 0001 1000 (note that is bit 3 and 4)
for ( ; 1==1 ; ) // loop while 1 equals 1 - forever - C style loop{
// Set Port B pins for 3 and 4 as HIGH (i.e. turn the LEDs on) b0_low; //LED is on b1_low; //LED is on _delay_loop_2(65535); b0_high; //LED is off b1_high; //LED is off _delay_loop_2(65535);
}return 1;
}
Setup LED pins, Data Direction Register and
turn LEDS off.
/* Two LEDs, tied to pin b0 and to b1 which correspond to physical pins 5 and 6 on ATTINY13 are turned on for 100ms and then off for 200ms*/
#include <avr/io.h> #define F_CPU 1000000 // set to 1 MHz as delay.h needs F_CPU#include <util/delay.h>#include "pin_macros.h" // Leah Buechley's pin macros for AVRs - very useful
int main(void){ // Set Port B pins for 3 and 4 as outputs
b0_output; //initialize LED pinb1_output; //initialize LED pinb0_high; //LED is offb1_high; //LED is off
DDRB = 0x18; // In binary this is 0001 1000 (note that is bit 3 and 4)
for ( ; 1==1 ; ) // loop while 1 equals 1 - forever - C style loop{
// Set Port B pins for 3 and 4 as HIGH (i.e. turn the LEDs on) b0_low; //LED is on b1_low; //LED is on _delay_loop_2(65535); b0_high; //LED is off b1_high; //LED is off _delay_loop_2(65535);
}return 1;
}
Loop - Turn the pins on, wait for 262ms, and
turn off. Repeat.
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
When Make is run, needs a target
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
Use avr-gcc to compile ‘c’ program
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
Use avr-gcc on `o’ obj file to create `elf ’ file
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
Use avr-objcopy to create rom from elf file
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
Use avrdube and a usbtiny to copy to the
ATtiny13 chip
# Makefile for sample_led_program for ATtiny13 chip# Note: to use makefile with a different chip change all# mmcu statements (-mmcu=attiny13) to reflect new chip # also change the part option (-p t13) for the avrdude install command
# default target when "make" is run w/o argumentsall: sample_led_program.rom
# compile sample_led_program.c into sample_led_program.osample_led_program.o: sample_led_program.c avr-gcc -c -g -O0 -Wall -mmcu=attiny13 sample_led_program.c -o sample_led_program.o
# link up sample_led_program.o into sample_led_program.elfsample_led_program.elf: sample_led_program.o avr-gcc sample_led_program.o -Wall,-nm,-Map=sample_led_program.map,--cref -mmcu=attiny13 -o sample_led_program.elf
# copy ROM (FLASH) object out of sample_led_program.elf into sample_led_program.romsample_led_program.rom: sample_led_program.elf avr-objcopy -O ihex sample_led_program.elf sample_led_program.rom
# command to program chip (invoked by running "make install")install: avrdude -c usbtiny -p t13 -e -U flash:w:sample_led_program.rom
# command to clean up junk (no source files) (invoked by "make clean")clean: rm -f *.o *.rom *.elf *.map *~
Clean up the files created
Call the Makefile
Call the Install part of Makefile which calls avrdude
Run avrdude, it reads the rom, writes it to the chip and verifies
this process
Things To Remember Safety first, last, and always
do not take another person’s work about the state of a piece of equipment, always check yourself and make sure its safe for you to work
use the right tool for the job
treat each tool with respect and rack them back in their correct place when they are not in use, don’t leave a dangerous tool loose when it can harm somebody else
don’t leave your safety glasses on the bench or in your pocket
don’t work on a live circuit, turn the power off first
don’t solder in an enclosed area without proper ventilation
read the datasheet first and double check it to be sure
get twice or three times the number of parts that you need for your circuit, you will make mistakes and sometimes you will have to throw an almost finished piece away
Data Sheets
Manufacturer’s details for particular electronic product typical device performance
minimum and maximum requirements and characteristics
device tolerances, what you can do without harming it
suggestions for applications, uses, or just hints
You don’t need to understand everything only need to focus on the parts that are of interest to your current problem
2535HS–AVR–10/07
Features• High Performance, Low Power AVR® 8-Bit Microcontroller
• Advanced RISC Architecture
– 120 Powerful Instructions – Most Single Clock Cycle Execution
– 32 x 8 General Purpose Working Registers
– Fully Static Operation
– Up to 20 MIPS Througput at 20 MHz
• High Endurance Non-volatile Memory segments
– 1K Bytes of In-System Self-programmable Flash program memory
– 64 Bytes EEPROM
– 64K Bytes Internal SRAM
– Write/Erase cyles: 10,000 Flash/100,000 EEPROM
– Data retention: 20 years at 85°C/100 years at 25°C(1)
– Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
– Programming Lock for Software Security
• Peripheral Features
– One 8-bit Timer/Counter with Prescaler and Two PWM Channels
– 4-channel, 10-bit ADC with Internal Voltage Reference
– Programmable Watchdog Timer with Separate On-chip Oscillator
– On-chip Analog Comparator
• Special Microcontroller Features
– debugWIRE On-chip Debug System
– In-System Programmable via SPI Port
– External and Internal Interrupt Sources
– Low Power Idle, ADC Noise Reduction, and Power-down Modes
– Enhanced Power-on Reset Circuit
– Programmable Brown-out Detection Circuit
– Internal Calibrated Oscillator
• I/O and Packages
– 8-pin PDIP/SOIC: Six Programmable I/O Lines
– 20-pad MLF: Six Programmable I/O Lines
• Operating Voltage:
– 1.8 - 5.5V for ATtiny13V
– 2.7 - 5.5V for ATtiny13
• Speed Grade
– ATtiny13V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
– ATtiny13: 0 - 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V
• Industrial Temperature Range
• Low Power Consumption
– Active Mode:
1 MHz, 1.8V: 240µA
– Power-down Mode:
< 0.1µA at 1.8V
8-bit
Microcontroller
with 1K Bytes
In-System
Programmable
Flash
ATtiny13V
ATtiny13
Summary
Rev. 2535HS–AVR–10/07
One page overview of models and capabilities
Date
Models
If it is the short summaryor longer full datasheet
Example: ATtiny13
Example: ATtiny13
2 ATtiny132535HS–AVR–10/07
Pin Configurations Figure 1. Pinout ATtiny13
Overview The ATtiny13 is a low-power CMOS 8-bit microcontroller based on the AVR enhanced
RISC architecture. By executing powerful instructions in a single clock cycle, the
ATtiny13 achieves throughputs approaching 1 MIPS per MHz allowing the system
designer to optimize power consumption versus processing speed.
1234
8765
(PCINT5/RESET/ADC0/dW) PB5(PCINT3/CLKI/ADC3) PB3
(PCINT4/ADC2) PB4GND
VCCPB2 (SCK/ADC1/T0/PCINT2)PB1 (MISO/AIN1/OC0B/INT0/PCINT1)PB0 (MOSI/AIN0/OC0A/PCINT0)
8-PDIP/SOIC
12345
20-QFN/MLF
1514131211
20 19 18 17 16
6 7 8 9 10
(PCINT5/RESET/ADC0/dW) PB5(PCINT3/CLKI/ADC3) PB3
NCNC
(PCINT4/ADC2) PB4
NC
NC
GN
DN
CN
C
VCCPB2 (SCK/ADC1/T0/PCINT2)NCPB1 (MISO/AIN1/OC0B/INT0/PCINT1)PB0 (MOSI/AIN0/OC0A/PCINT0)
NC
NC
NC
NC
NC
NOTE: Bottom pad should be soldered to ground.NC: Not Connect
12345
10-QFN/MLF
10 9 8 7 6
(PCINT5/RESET/ADC0/dW) PB5(PCINT3/CLKI/ADC3) PB3
NC(PCINT4/ADC2) PB4
GND
VCCPB2 (SCK/ADC1/T0/PCINT2)NCPB1 (MISO/AIN1/OC0B/INT0/PCINT1)PB0 (MOSI/AIN0/OC0A/PCINT0)
NOTE: Bottom pad should be soldered to ground.NC: Not Connect
PDIP or SOIC are the only two
package types we'll use. The
other types require SMD soldering.
Date
Example: ATtiny13
4 ATtiny132535HS–AVR–10/07
Interrupt system to continue functioning. The Power-down mode saves the register con-
tents, disabling all chip functions until the next Interrupt or Hardware Reset. The ADC
Noise Reduction mode stops the CPU and all I/O modules except ADC, to minimize
switching noise during ADC conversions.
The device is manufactured using Atmel’s high density non-volatile memory technology.
The On-chip ISP Flash allows the Program memory to be re-programmed In-System
through an SPI serial interface, by a conventional non-volatile memory programmer or
by an On-chip boot code running on the AVR core.
The ATtiny13 AVR is supported with a full suite of program and system development
tools including: C Compilers, Macro Assemblers, Program Debugger/Simulators, In-Cir-
cuit Emulators, and Evaluation kits.
Pin Descriptions
VCC Digital supply voltage.
GND Ground.
Port B (PB5..PB0) Port B is a 6-bit bi-directional I/O port with internal pull-up resistors (selected for each
bit). The Port B output buffers have symmetrical drive characteristics with both high sink
and source capability. As inputs, Port B pins that are externally pulled low will source
current if the pull-up resistors are activated. The Port B pins are tri-stated when a reset
condition becomes active, even if the clock is not running.
Port B also serves the functions of various special features of the ATtiny13 as listed on
page 51.
RESET Reset input. A low level on this pin for longer than the minimum pulse length will gener-
ate a reset, even if the clock is not running. The minimum pulse length is given in Table
12 on page 31. Shorter pulses are not guaranteed to generate a reset.Note: 1.
Data Retention Reliability Qualification results show that the projected data retention failure rate is much
less than 1 PPM over 20 years at 85°C or 100 years at 25!C.
About Code
Examples
This documentation contains simple code examples that briefly show how to use various
parts of the device. These code examples assume that the part specific header file is
included before compilation. Be aware that not all C compiler vendors include bit defini-
tions in the header files and interrupt handling in C is compiler dependent. Please
confirm with the C compiler documentation for more details.
Descriptions of the pins shown in the previous
diagram with comments
Example: ATtiny13
120 ATtiny132535H–AVR–10/07
Electrical Characteristics
Absolute Maximum Ratings*
DC Characteristics
Operating Temperature.................................. -55!C to +125!C *NOTICE: Stresses beyond those listed under “Absolute
Maximum Ratings” may cause permanent dam-
age to the device. This is a stress rating only and
functional operation of the device at these or
other conditions beyond those indicated in the
operational sections of this specification is not
implied. Exposure to absolute maximum rating
conditions for extended periods may affect
device reliability.
Storage Temperature ..................................... -65°C to +150°C
Voltage on any Pin except RESET
with respect to Ground ................................-0.5V to VCC+0.5V
Voltage on RESET with respect to Ground......-0.5V to +13.0V
Maximum Operating Voltage ............................................ 6.0V
DC Current per I/O Pin ............................................... 40.0 mA
DC Current VCC and GND Pins................................ 200.0 mA
TA = -40!C to 85!C, VCC = 1.8V to 5.5V (unless otherwise noted)(1)
Symbol Parameter Condition Min. Typ. Max. Units
VILInput Low Voltage except
RESET pin
VCC = 1.8V - 2.4V
VCC = 2.4V - 5.5V-0.5
0.2VCC
0.3VCC
V
VIHInput High-voltage except
RESET pin
VCC = 1.8V - 2.4V
VCC = 2.4V - 5.5V
0.7VCC(3)
0.6VCC(3) VCC +0.5 V
VIL1
Input Low-voltage
CLKI pinVCC = 1.8V - 5.5 -0.5 0.1VCC V
VIH1
Input High-voltage
CLKI pin
VCC = 1.8V - 2.4V
VCC = 2.4V - 5.5V
0.8VCC(3)
0.7VCC(3) VCC +0.5 V
VIL2
Input Low-voltage
RESET pinVCC = 1.8V - 5.5 -0.5 0.2VCC V
VIH2
Input High-voltage
RESET pinVCC = 1.8V - 5.5 0.9VCC
(3) VCC +0.5 V
VIL3
Input Low-voltage
RESET pin
VCC = 1.8V - 2.4V
VCC = 2.4V - 5.5V-0.5 0.2VCC V
VIH3
Input High-voltage
RESET pin
VCC = 1.8V - 2.4V
VCC = 2.4V - 5.5V
0.7VCC(3)
0.6VCC(3) VCC +0.5 V
VOLOutput Low Voltage(4)
(PB1 and PB0)
IOL = 20 mA, VCC = 5V
IOL = 10 mA, VCC = 3V
0.7
0.5
V
V
VOL1Output Low Voltage(4)
(PB5, PB4, PB3 and PB2)
IOL = 10 mA, VCC = 5V
IOL = 5 mA, VCC = 3V
0.7
0.5
V
V
VOL2
Output Low Voltage(4)
(PB5, Reset used as I/O)
IOL =TBD mA, VCC =
TBDV
IOL =TBD mA, VCC =
TBDV
V
V
VOHOutput High-voltage(5)
( PB1 and PB0)
IOH = -20 mA, VCC = 5V
IOH = -10 mA, VCC = 3V
4.2
2.5
V
V
Descriptions of the what maximum ratings for device are. Running at these or beyond will
damage the device
Example: ATtiny13
121
ATtiny13
2535H–AVR–10/07
Notes: 1. All DC Characteristics contained in this data sheet are based on simulation and characterization of other AVR microcontrol-
lers manufactured in the same process technology. These values are representing design targets, and will be updated after
characterization of actual silicon.
2. “Max” means the highest value where the pin is guaranteed to be read as low.
3. “Min” means the lowest value where the pin is guaranteed to be read as high.
4. Although each I/O port can sink more than the test conditions (20 mA at VCC = 5V, 10 mA at VCC = 3V for PB5, PB1:0, 10 mA
at VCC = 5V, 5 mA at VCC = 3V for PB4:2) under steady state conditions (non-transient), the following must be observed:
1] The sum of all IOL, for all ports, should not exceed 60 mA.
If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater
than the listed test condition.
5. Although each I/O port can source more than the test conditions (20 mA at VCC = 5V, 10 mA at VCC = 3V for PB5, PB1:0, 10
mA at VCC = 5V, 5 mA at VCC = 3V for PB4:2) under steady state conditions (non-transient), the following must be observed:
1] The sum of all IOH, for all ports, should not exceed 60 mA.
If IOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current
greater than the listed test condition.
VOH1Output High-voltage(5)
(PB4, PB3 and PB2)
IOH = -10 mA, VCC = 5V
IOH = -5 mA, VCC = 3V
4.2
2.5
V
V
VOH2Output High-voltage(5)
(PB5, Reset used as I/O)
IOH = - TBD mA, VCC =
TBDV
IOH = - TBD mA, VCC =
TBDV
V
V
IILInput Leakage
Current I/O Pin
Vcc = 5.5V, pin low
(absolute value)1 µA
IIHInput Leakage
Current I/O Pin
Vcc = 5.5V, pin high
(absolute value)1 µA
RRST Reset Pull-up Resistor 30 80 k!
Rpu I/O Pin Pull-up Resistor 20 50 k!
ICC
Power Supply Current
Active 1MHz, VCC = 2V 0.35 mA
Active 4MHz, VCC = 3V 1.8 mA
Active 8MHz, VCC = 5V 6 mA
Idle 1MHz, VCC = 2V 0.08 0.2 mA
Idle 4MHz, VCC = 3V 0.41 1 mA
Idle 8MHz, VCC = 5V 1.6 3 mA
Power-down modeWDT enabled, VCC = 3V < 5 10 µA
WDT disabled, VCC = 3V < 0.5 2 µA
VACIOAnalog Comparator Input
Offset Voltage
VCC = 5V
Vin = VCC/2< 10 40 mV
IACLKAnalog Comparator Input
Leakage Current
VCC = 5V
Vin = VCC/2-50 50 nA
tACPDAnalog Comparator
Propagation Delay
VCC = 2.7V
VCC = 4.0V
750
500ns
TA = -40"C to 85"C, VCC = 1.8V to 5.5V (unless otherwise noted)(1) (Continued)
Symbol Parameter Condition Min. Typ. Max. Units
Some chips have internal resistors which you can use for inputs, here is where you can find their value