Arduino
Arduino
Arduino
Contents
1
Arduino
1.1
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1
Ocial boards
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2
Shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Software
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1
Sample program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2
Other IDE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4
Development
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6
Recognitions
1.7
Trademark dispute
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.9
Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.10 References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Single-board microcontroller
2.1
Origins
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Internal bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
2.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5
2.6
Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.1
EPROM burning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.2
Keypad monitors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3
Hosted development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7
Single-chip microcontrollers
2.7.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Program memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.9
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.10 References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
11
ii
CONTENTS
2.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Atmel AVR
12
3.1
Brief history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.2
Device overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.2.1
Basic families . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.2.2
Device architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.2.3
Program execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.2.4
Instruction set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.2.5
MCU speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.2.6
Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.2.7
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Programming interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3.1
ISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3.2
PDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3.3
High-voltage serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.4
High-voltage parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.5
Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.6
ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.7
aWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Debugging interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.4.1
debugWIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.4.2
JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
3.5.1
18
3.5.2
18
3.5.3
18
3.5.4
18
3.5.5
AVR Dragon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.6
JTAGICE mkI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.7
JTAGICE mkII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.8
JTAGICE3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.9
AVR ONE! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
3.5.11 AT90USBKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
20
20
3.6
20
3.7
FPGA clones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.8
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.9
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
22
3.3
3.4
3.5
CONTENTS
22
24
4.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.1.1
24
4.1.2
Status bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
Processor registers
4.2
Addressing
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.3
Instruction timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.4
Instruction list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.5
25
4.6
Instruction encoding
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
4.7
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.8
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
27
5.1
Orthogonality in practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.1
The PDP-11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.2
The VAX-11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.3
The MC68000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.1.4
28
5.1.5
RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
5.2
6
iii
Open-source hardware
29
6.1
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
6.2
Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
6.3
Development
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
6.4
Open-source labs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.5
Open-source electronics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.6
Business models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.7
32
6.8
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.9
References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
35
36
7.1
36
7.1.1
Superseded boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Arduino-compatible boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
7.2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
7.2.2
36
7.2.3
Software-compatibility only
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
7.2.4
Non-ATmega boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
7.2
iv
CONTENTS
7.3
Non-Arduino boards
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
7.4
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
7.5
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
7.6
Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
7.7
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
Wiring
44
8.1
Software
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
8.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
8.3
Related projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
8.3.1
Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
8.3.2
45
8.4
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
8.5
Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
8.6
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Processing
46
9.1
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
9.2
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
9.2.1
Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
9.2.2
46
Related projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.1
Design By Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.2
47
9.3.3
Mobile Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.4
Processing.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.5
p5.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.6
iProcessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.7
Spde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.3.8
Quil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.4
Awards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
9.5
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
9.6
Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
9.7
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
9.8
Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
9.9
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
49
50
9.11.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
9.11.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
55
9.3
Chapter 1
Arduino
For other uses, see Arduino (disambiguation).
1.2 Hardware
Arduino boards are available commercially in preassembled form, or as do-it-yourself kits. The hardware design specications are openly available, allowing the Arduino boards to be produced by anyone. Adafruit Industries estimated in mid-2011 that over 300,000 ocial Arduinos had been commercially produced,[2] and in 2013
that 700,000 ocial boards were in users hands.[3]
1.1 History
Colombian student Hernando Barragn created the development platform Wiring as his Masters thesis project
in 2004 at the Interaction Design Institute Ivrea (IDII)
in Ivrea, Italy. Massimo Banzi and Casey Reas (known
for his work on Processing) were supervisors for his thesis. The goal was to create low cost, simple tools for non1
An early Arduino board[8] with an RS-232 serial communication interface (upper left) and an Atmel ATmega8 microcontroller
chip (black, lower right); the 14 digital I/O pins are located at the
top and the six analog input pins at the lower right.
CHAPTER 1. ARDUINO
1.3. SOFTWARE
Arduino Nano
Arduino Due
(ARM Cortex-M3 core)
LilyPad Arduino (rev 2007)
3
as syntax highlighting, brace matching, and automatic
indentation, and provides simple one-click mechanism
to compile and load programs to an Arduino board. A
program written with the IDE for Arduino is called a
sketch.[18]
The Arduino IDE supports the languages C and C++ using special rules to organize code. The Arduino IDE supplies a software library called Wiring from the Wiring
1. ^ Arduino - ArduinoBoardMega2560.
ar- project, which provides many common input and output
duino.cc.
procedures. A typical Arduino C/C++ sketch consist of
two functions that are compiled and linked with a proCite error: There are <ref group=lower-alpha> tags or gram stub main() into an executable cyclic executive pro{{efn}} templates on this page, but the references will not gram:
show without a {{reist|group=lower-alpha}} template or
{{notelist}} template (see the help page).
setup(): a function that runs once at the start of a
program and that can initialize settings.
Arduino Yun
1.2.2
Shields
Arduino and Arduino-compatible boards use printed circuit expansion boards called shields, which plug into the
normally supplied Arduino pin headers. Shields can
provide motor controls for 3D printing and other applications, Global Positioning System (GPS), Ethernet,
liquid crystal display (LCD), or breadboarding (prototyping). Several shields can also be made do it yourself
(DIY).[14][15][16]
Sample program
Dragino Lora Shield allows the user to send data and Most Arduino boards contain an LED and a load resistor
connected between pin 13 and ground which is a convereach extremely long ranges at low data-rates.
nient feature for many tests.[19]
Screw-terminal breakout shield in a wing-type forA typical program for a beginning Arduino programmer
mat
blinks a light-emitting diode (LED) on and o. This pro Adafruit Motor Shield with screw terminals for con- gram is usually loaded in the Arduino board by the manufacturer. In the Arduino environment, a user might write
nection to motors
such a program as shown:[19]
Adafruit Datalogging Shield with a Secure Digital
#dene LED_PIN 13 void setup() { pinMode(LED_PIN,
(SD) card slot and real-time clock (RTC) chip
OUTPUT); // Enable pin 13 for digital output } void
HackARobot Fabric Shield designed for Arduino loop() { digitalWrite(LED_PIN, HIGH); // Turn on the
Nano to hook up motors and sensors such as gyro- LED delay(1000); // Wait one second (1000 millisecscope or GPS, and other breakout boards such as onds) digitalWrite(LED_PIN, LOW); // Turn o the
WiFi, Bluetooth, RF, etc.
LED delay(1000); // Wait one second }
1.3 Software
1.3.2 Other IDE
The Arduino project provides the Arduino integrated development environment (IDE), which is a cross-platform
application written in the programming language Java.
It originated from the IDE for the languages Processing
and Wiring. It is designed to introduce programming to
artists and other newcomers unfamiliar with software development. It includes a code editor with features such
CHAPTER 1. ARDUINO
1.5 Applications
See also: List of open-source hardware projects
Xoscillo, an open-source oscilloscope[25]
Scientic equipment[26] such as the Chemduino[27]
Arduinome, a MIDI controller device that mimics
the Monome
Power LED (red) and integrated LED on Line 13 (green) on Arduino compatible board, made in China
1.4 Development
1.6 Recognitions
The Arduino project received an honorary mention in the
Digital Communities category at the 2006 Prix Ars Electronica.[34]
1.10. REFERENCES
in the Arduino development team. All Arduino boards [12] Redirect.... smartprj.com.
are still available to consumers, and the designs are open
source, so the implications of this are uncertain.[36][37][38] [13] Schmidt, M. ["Arduino: A Quick Start Guide"],
Pragmatic Bookshelf, January 22, 2011, Pg. 201
[17] Arduino Software Release Notes. Arduino Project. Retrieved March 11, 2016.
Intel Edison
[20] Using Atmel Studio for Arduino development. Megunolink.com. Retrieved 2013-01-18.
IOIO
[21] Using AVR Studio for Arduino development. Engblaze.com. Retrieved 2013-01-18.
1.9 Notes
[25] xoscillo A software oscilloscope that acquires data using an arduino or a parallax (more platforms to come).
Google Project Hosting. Code.google.com. Retrieved
2013-01-18.
1.10 References
[1] Arduino - Introduction. arduino.cc.
[2] How many Arduinos are in the wild?" About 300,000.
Adafruit Industries. May 15, 2011. Retrieved 2013-0526.
[3] Arduino FAQ With David Cuartielles. Malm University. April 5, 2013. Retrieved 2014-03-24.
[4] Home. arduinohistory.github.io.
trieved 2016-03-06.
2016-01-01.
Re-
Re-
CHAPTER 1. ARDUINO
Chapter 2
Single-board microcontroller
of RAM, 4 kbytes of user-programmable ROM, and 48
lines of parallel digital I/O with line drivers. The board
also oered expansion through a bus connector, but it
could be used without an expansion card cage where applications didn't require additional hardware. Software
development for this system was hosted on Intels Intellec
MDS microcomputer development system; this provided
assembler and PL/M support, and permitted in-circuit
emulation for debugging.[2]
Processors of this era required a number of support chips
in addition. RAM and EPROM were separate, often
requiring memory management or refresh circuitry for
dynamic memory as well. I/O processing might be carried out by a single chip such as the 8255, but frequently
required several more chips.
A single-board microcontroller diers from a singleboard computer in that it lacks the general purpose
user interface and mass storage interfaces that a more
general-purpose computer would have. Compared to
a microprocessor development board, a microcontroller
board would emphasize digital and analog control interconnections to some controlled system, where a development board might by comparison have only a few or
no discrete or analog input/output devices. The development board exists to showcase or to train on some particular processor family and this internal implementation is
more important than the external function.
2.1 Origins
Single-board microcontrollers appeared in the late 1970s
when the rst generations of microprocessors, such as the
6502 and the Z80,[1] made it practical to build an entire
controller on a single board, and aordable to dedicate a
computer to a relatively minor task.
In March 1976, Intel announced a single-board computer It was common to oer the internal bus through an expanproduct that integrated all the support components re- sion connector, or at least the space for such a connector
quired for their 8080 microprocessor, along with 1 kbyte to be soldered on. This was a low-cost option and oered
7
8
the potential for expansion, even if it was rarely made use
of. Typical expansions would be I/O devices, or memory
expansion. It was unusual to add peripheral devices such
as tape or disk storage, or even a CRT display
When single-chip microcontrollers, such as the 8048, became available later on, the bus no longer needed to be
exposed outside the package as all the necessary memory
could be provided within the chip package. This generation of processors used a Harvard architecture of separate program and data buses, both internal to the chip.
Many of these processors used a modied Harvard architecture, where some write access was possible to the program data space, thus permitting in-circuit programming.
None of these processors required, or supported, a Harvard bus across a single-board microcontroller. Where
they supported a bus for expansion of peripherals, this
used a dedicated I/O bus, such as I2 C, One-wire or various serial buses.
2.6.1
EPROM burning
2.6.2
Keypad monitors
2.6.3
Hosted development
10
2.10 References
[1] Peter Grigson; David Harris (August, September, October
1983). "'Marvin' - Z80 Control Computer. Electronics
Today International. Check date values in: |date= (help)
[2] Intel SBC 80/10 Single Board Computer brochure, 1976
[3] Mike Bedford (August, September 1983). Universal
EPROM Programmer. Electronics Today International:
4551, 3739. Check date values in: |date= (help)
[4] KIM 1. Old Computers.com. External link in |publisher= (help)
[5] Microprofessor Training System. Flite Electronics International.
[6] Arduinos home page
[7] Project homepage. Dwengo. External link in |publisher= (help)
[8] Arduino Users forum
[9] Project homepage. Arduino project. External link in
|publisher= (help)
[10] Wiring.orgs Wiring development platform home page
[11] Wiring: Hardware. Wiring project. External link in
|publisher= (help)
11
Chapter 3
Atmel AVR
block from Nordic VLSI. When the technology was sold
to Atmel from Nordic VLSI, the internal architecture was
further developed by Bogen and Wollan at Atmel Norway, a subsidiary of Atmel. The designers worked closely
with compiler writers at IAR Systems to ensure that the
instruction set provided for more ecient compilation of
high-level languages.[4] Atmel says that the name AVR is
not an acronym and does not stand for anything in particular. The creators of the AVR give no denitive answer
as to what the term AVR stands for.[3] However, it is
commonly accepted that AVR stands for Alf (Egil Bogen) and Vegard (Wollan)'s RISC processor.[5] Note that
the use of AVR in this article generally refers to the
8-bit RISC line of Atmel AVR Microcontrollers.
AVR logo
13
Program memory
Program instructions are stored in non-volatile ash
memory. Although the MCUs are 8-bit, each instruction
takes one or two 16-bit words.
The size of the program memory is usually indicated in
the naming of the device itself (e.g., the ATmega64x line
has 64 KB of ash, while the ATmega32x line has 32
KB).
There is no provision for o-chip program memory; all
code executed by the AVR core must reside in the onchip ash. However, this limitation does not apply to the
AT94 FPSLIC AVR/FPGA chips.
3.2.2
Device architecture
14
The very smallest of the tinyAVR variants use a reduced architecture with only 16 registers (r0 through r15
are omitted) which are not addressable as memory locations. I/O memory begins at address 000016 , followed
by SRAM. In addition, these devices have slight deviations from the standard AVR instruction set. Most notably, the direct load/store instructions (LDS/STS) have
been reduced from 2 words (32 bits) to 1 word (16 bits),
limiting the total direct addressable memory (the sum of
both I/O and SRAM) to 128 bytes. Conversely, the indirect load instructions (LD) 16-bit address space is expanded to also include non-volatile memory such as Flash
and conguration bits; therefore, the LPM instruction is
unnecessary and omitted.
In the XMEGA variant, the working register le is not
mapped into the data address space; as such, it is not possible to treat any of the XMEGAs working registers as
though they were SRAM. Instead, the I/O registers are
mapped into the data address space starting at the very
beginning of the address space. Additionally, the amount
of data address space dedicated to I/O registers has grown
substantially to 4096 bytes (000016 0FFF16 ). As with
previous generations, however, the fast I/O manipulation
instructions can only reach the rst 64 I/O register locations (the rst 32 locations for bitwise instructions). Following the I/O registers, the XMEGA series sets aside a
4096 byte range of the data address space, which can be
used optionally for mapping the internal EEPROM to the
data address space (100016 1FFF16 ). The actual SRAM
is located after these ranges, starting at 200016 .
GPIO ports
Register locations R0 to R15 have dierent addressing capabilities than register locations R16 to R31.
EEPROM
I/O ports 0 to 31 have dierent addressing capabilities than I/O ports 32 to 63.
Pointer registers X, Y, and Z have addressing capabilities that are dierent from each other.
15
bits to zero, and SER sets them to one. (Note that See external links for sites relating to AVR development.
CLR is pseudo-op for EOR R, R; and SER is short
for LDI R,$FF. Math operations such as EOR modify ags, while moves/loads/stores/branches such as 3.2.7 Features
LDI do not.)
Current AVRs oer a wide range of features:
Accessing read-only data stored in the program
memory (ash) requires special LPM instructions;
Multifunction, bi-directional general-purpose I/O
the ash bus is otherwise reserved for instruction
ports with congurable, built-in pull-up resistors
memory.
Multiple internal oscillators, including RC oscillator
without external parts
Additionally, some chip-specic dierences aect code
generation. Code pointers (including return addresses on
Internal, self-programmable instruction ash memthe stack) are two bytes long on chips with up to 128 KB
ory up to 256 KB (384 KB on XMega)
of ash memory, but three bytes long on larger chips;
In-system programmable using serial/parallel
not all chips have hardware multipliers; chips with over 8
low-voltage proprietary interfaces or JTAG
KB of ash have branch and call instructions with longer
ranges; and so forth.
Optional boot code section with independent
lock bits for protection
The mostly regular instruction set makes programming it
using C (or even Ada) compilers fairly straightforward.
GCC has included AVR support for quite some time, and
that support is widely used. In fact, Atmel solicited input
from major developers of compilers for small microcontrollers, to determine the instruction set features that were
most useful in a compiler for high-level languages.
3.2.5
MCU speed
3.2.6
Development
AVRs have a large following due to the free and inexpensive development tools available, including reasonably
priced development boards and free development software. The AVRs are sold under various names that share
the same basic core, but with dierent peripheral and
memory combinations. Compatibility between chips in
each family is fairly good, although I/O controller features
may vary.
16
3.3.1 ISP
MISO
1
1
VCC
MOSI
VCC
SCK
MOSI
NC
GND
RST
GND
RST
GND
SCK
GND
10
GND
ISP
HEADERS
TOP
VIEW
3.3.2 PDI
3.3.3
17
High-voltage serial
particularly useful for lower pin count parts which cannot provide the four spare pins needed for JTAG. The
High-voltage serial programming (HVSP)[17] is mostly JTAGICE mkII, mkIII and the AVR Dragon support dethe backup mode on smaller AVRs. An 8-pin AVR pack- bugWIRE. debugWIRE was developed after the original
age does not leave many unique signal combinations to JTAGICE release, and now clones support it.
place the AVR into a programming mode. A 12-volt
signal, however, is something the AVR should only see
during programming and never during normal operation.
3.4.2 JTAG
The high voltage mode can also be used in some devices
where the reset pin has been disabled by fuses.
The Joint Test Action Group (JTAG) feature provides access to on-chip debugging functionality while the chip
is running in the target system.[23] JTAG allows access3.3.4 High-voltage parallel
ing internal memory and registers, setting breakpoints on
High-voltage parallel programming (HVPP) is consid- code, and single-stepping execution to observe system beered the nal resort and may be the only way to correct haviour.
bad fuse settings on an AVR chip.
3.3.5
Bootloader
3.3.6
ROM
3.3.7
aWire
18
3.5.1
The STK600 starter kit and development system is an update to the STK500.[30] The STK600 uses a base board,
a signal routing board, and a target board.
The base board is similar to the STK500, in that it provides a power supply, clock, in-system programming, an
RS-232 port and a CAN (Controller Area Network, an
automotive standard) port via DE9 connectors, and stake
pins for all of the GPIO signals from the target device.
3.5.2
19
3.5.8 JTAGICE3
AVRISP mkII
3.5.5
AVR Dragon
AVR Dragon with ISP programming cable and attached, blue ZIF
Socket
3.5.6
JTAGICE mkI
20
to show-o the AVR family, especially a then new builtin LCD interface. The board includes the LCD screen,
joystick, speaker, serial port, real time clock (RTC), ash
memory chip, and both temperature and voltage sensors.
Earlier versions of the AVR Buttery also contained a
CdS photoresistor; it is not present on Buttery boards
produced after June 2006 to allow RoHS compliance.[37]
The small board has a shirt pin on its back so it can be
worn as a name badge.
The kit includes two AVR Raven boards, each with a 2.4
GHz transceiver supporting IEEE 802.15.4 (and a freely
licensed ZigBee stack). The radios are driven with ATmega1284p processors, which are supported by a custom
segmented LCD display driven by an ATmega3290p processor. Raven peripherals resemble the Buttery: piezo
speaker, DataFlash (bigger), external EEPROM, sensors,
32 kHz crystal for RTC, and so on. These are intended for
The AVR Buttery demonstrates LCD driving by running
use in developing remote sensor nodes, to control relays,
a 14-segment, six alpha-numeric character display. Howor whatever is needed.
ever, the LCD interface consumes many of the I/O pins.
The USB stick uses an AT90USB1287 for connections to
The Butterys ATmega169 CPU is capable of speeds up
a USB host and to the 2.4 GHz wireless links. These are
to 8 MHz, but it is factory set by software to 2 MHz to preintended to monitor and control the remote nodes, relying
serve the button battery life. A pre-installed bootloader
on host power rather than local batteries.
program allows the board to be re-programmed via a standard RS-232 serial plug with new programs that users can
write with the free Atmel IDE tools.
3.5.13 Third-party programmers
The AVR Buttery comes preloaded with software to
demonstrate the capabilities of the microcontroller. Factory rmware can scroll your name, display the sensor
readings, and show the time. The AVR Buttery also has
a piezoelectric transducer that can be used to reproduce
sounds and music.
3.5.11
AT90USBKey
A wide variety of third-party programming and debugging tools are available for the AVR. These devices use
various interfaces, including RS-232, PC parallel port,
and USB. AVR Freaks has a comprehensive list.
21
AVR clone projects:
pAVR,[46] written in VHDL, is aimed at creating the
fastest and maximally featured AVR processor, by
implementing techniques not found in the original
AVR processor such as deeper pipelining.
avr_core,[47] written in VHDL, is a clone aimed at
being as close as possible to the ATmega103.
Navr,[48] written in Verilog, implements all Classic
Core instructions and is aimed at high performance
and low resource usage. It does not support interrupts.
The opencores project CPU lecture[49] written in
VHDL by Dr. Jrgen Sauermann explains in detail
how to design a complete AVR based System on a
Chip (SoC).
Arduino
AVR32
3.9 References
[1] Since 1996, NTH has become part of the Norwegian University of Science and Technology (NTNU)
[2] alfbogen.com blog
[3] The Story of AVR. youtube.com.
[4] The AVR Microcontroller and C Compiler Co-Design
(PDF). Retrieved 2012-09-19.
Numerous companies produce AVR-based microcontroller boards intended for use by hobbyists, robot
builders, experimenters and small system developers including: Cubloc,[39] gnusb,[40] BasicX,[41] Oak
Micros,[42] ZX Microcontrollers,[43] and myAVR.[44]
There is also a large community of Arduino-compatible
boards supporting similar users.
[5] UNSW School of Computer Science and Engineering General AVR Info. Cse.unsw.edu.au. Retrieved 201209-19.
Schneider Electric produces the M3000 Motor and Motion Control Chip, incorporating an Atmel AVR Core and
an advanced motion controller for use in a variety of motion applications.[45]
[8] http://www.atmel.com/Images/
Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_
AVR-8-bit-Microcontroller-ATtiny25Datasheet.pdf
ATtiny45-ATtiny85_Datasheet.pdf
[10] AVR319: Using the USI module for SPI communication (PDF). Atmel. 2004. Retrieved 10 June 2014.
[11] Atmel AVR310: Using the USI Module as a I2 C Master
22
[14] AVR Hardware Design Considerations (PDF) (application note). Atmel Corporation. Jun 2015. p. 5. Retrieved
14 Jun 2015. The reset line has an internal pull-up resistor, but if the environment is noisy it can be insucient
and reset can therefore occur sporadically.
Support.atmel.no.
Retrieved
Atmel.com.
Re-
Ocial
Atmel AVR
Communities
23
Chapter 4
25
prepended if necessary by RAMPX, RAMPY and There are two types of conditional branches: jumps to
RAMPZ respectively.
address and skips. Conditional branches (BRxx) can test
an ALU ag and jump to specied address. Skips (SBxx)
Program memory (ash) has a separate address test an arbitrary bit in a register or I/O and skip the next
space, addressed as 16-bit words for the purpose of instruction if the test was true.
fetching instructions
In the following:
For the purpose of fetching constant data, program
memory is addressed bytewise through the Z pointer
Rd is a register in the range R0-R31 or R16-R31
register, prepended if necessary by RAMPZ.
(depending on instruction)
The EEPROM is memory-mapped in some devices;
in others, it is not directly addressable and is instead
accessed through address, data and control I/O registers.
The general purpose registers, the status register and
some I/O registers are bit-addressable, with bit 0 being the least signicant and bit 7 the most signicant.
The rst 64 I/O registers are accessible through both the
I/O and the data address space. They have therefore two
dierent addresses. These are usually written as 0x00
(0x20)" through 0x3F (0x5F)", where the rst item is
the I/O address and the second, in parentheses, the data
address.
The special-purpose CPU registers, with the exception
of PC, can be accessed as I/O registers. Some registers (RAMPX, RAMPY) may not be present on machines
with less than 64 KiB of addressable memory.
A typical ATmega memory map may look like:
where RAMEND is the last RAM address. In parts lacking extended I/O the RAM would start at 0x0060.
26
rrr = Source register (R16-R23)
RRRR = Source register pair (R0:R1 ... R30:R31)
4.7 References
[1] Atmel. Application Note AVR201: Using the AVR
Hardware Multiplier. 2002. quote: The megaAVR is
a series of new devices in the AVR RISC Microcontroller
family that includes, among other new enhancements, a
hardware multiplier.
Chapter 5
5.1.1
The PDP-11
28
MC68000 used separate registers to store data and the majority of these orthogonal addressing modes were igaddresses of data in memory.
nored by most programs. Perhaps some of the bits that
At the bit level, the person writing the assembler (or de- were used to express the fully orthogonal instruction set
bugging machine code) would clearly see that symbolic could instead be used to express more virtual address bits
instructions could become any of several dierent op- or select from among more registers.
codes. This compromise gave almost the same convenience as a truly orthogonal machine, and yet also gave
the CPU designers freedom to use the bits in the instructions more eciently than a purely orthogonal approach
might have.
5.1.4
5.1.5
RISC
Designers of RISC architectures strove to achieve a balance that they thought better. In particular, most RISC
computers, while still being highly orthogonal with regard to which instructions can process which data types,
now have reverted to load/store architectures. In these
architectures, only a very few memory reference instructions can access main memory and only for the purpose
of loading data into registers or storing register data back
into main memory; only a few addressing modes may
be available, and these modes may vary depending on
whether the instruction refers to data or involves a transfer
of control (jump). Conversely, data must be in registers
before it can be operated upon by the other instructions in
the computers instruction set. This trade o is made explicitly to enable the use of much larger register sets, extended virtual addresses, and longer immediate data (data
stored directly within the computer instruction).
5.2 References
[1] Null, Linda; Lobur, Julia (2010). The Essentials of Computer Organization and Architecture. Jones & Bartlett
Publishers. pp. 287288. ISBN 1449600069.
Chapter 6
Open-source hardware
ferred to as FOSH (free and open-source hardware). The
term usually means that information about the hardware
is easily discerned so that others can make it - coupling it
closely to the maker movement.[1] Hardware design (i.e.
mechanical drawings, schematics, bills of material, PCB
layout data, HDL source code[2] and integrated circuit
layout data), in addition to the software that drives the
hardware, are all released under free/libre terms. The
original sharer gains feedback and potentially improvements on the design from the FOSH community. There
is now signicant evidence that such sharing can drive a
high return on investment for investors.[3]
Since the rise of recongurable programmable logic devices, sharing of logic designs has been a form of opensource hardware. Instead of the schematics, hardware description language (HDL) code is shared. HDL descriptions are commonly used to set up system-on-a-chip systems either in eld-programmable gate arrays (FPGA) or
directly in application-specic integrated circuit (ASIC)
designs. HDL modules, when distributed, are called
semiconductor intellectual property cores, or IP cores.
6.1 History
First hardware focused "open source" activities were
started around 1997 by Bruce Perens, creator of the Open
Source Denition, co-founder of the Open Source Initiative, and a ham radio operator. He launched the Open
Hardware Certication Program, which had the goal to
allow hardware manufacturers to self-certify their products as open.[4][5]
The RepRap general-purpose 3D printer with the ability to make
copies of most of its own structural parts.
Shortly after the launch of the Open Hardware Certication Program, David Freeman announced the Open Hardware Specication Project (OHSpec), another attempt
at licensing hardware components whose interfaces are
available publicly and of creating an entirely new computing platform as an alternative to proprietary computing
systems.[6] In early 1999, Sepehr Kiani, Ryan Vallance
and Samir Nayfeh joined eorts to apply the open source
philosophy to machine design applications. Together they
established the Open Design Foundation (ODF) as a non-
29
30
OSHWA Logo
Following the 2011 Open Hardware Summit, and after heated debates on licenses and what constitutes open
source hardware, Bruce Perens abandoned the OSHW
Denition and the concerted eorts of those involved
with it.[13] Openhardware.org, led by Bruce Perens, promotes and identies practices that meet all the combined
requirements of the Open Source Hardware Denition,
the Open Source Denition, and the Four Freedoms of
the Free Software Foundation[14] Since 2014 openhardware.org is not online anymore and seems to have ceased
activity.[15]
The Open Source Hardware Association (OSHWA) at
oshwa.org proposes Open source hardware and acts as
hub of open source hardware activity of all genres, while
cooperating with other entities such as TAPR, CERN,
and OSI. The OSHWA was established as an organization
in June 2012 in Delaware and led for tax exemption status in July 2013.[16] After same debates about trademark
interferences with the OSI, in 2012 the OSHWA and the
OSI signed a co-existence agreement.[17][18]
In 2012, after years of skepticism on the relevance of
free hardware designs,[19] the Free Software Foundation
started the "Respects Your Freedom" (RYF) computer
hardware product certication program. It should encourage the creation and sale of hardware that respects
users freedom and privacy, and aims to ensure that users
have control over their devices.[20][21] The FSFs RYF
certicate faced criticism for the requirement to comply with the controversial debated FSF terminology,[22]
which is seen by some as unrelated topic and unneeded
political polarization for a technological certicate.[23]
Also FSFs Replicant project suggested in 2016 an alternative free hardware denition, derived from the FSFs
four freedoms.[24]
6.3. DEVELOPMENT
31
6.3 Development
used by all
32
has been considerable work to produce open-source hard- 6.6 Business models
ware for scientic hardware using a combination of opensource electronics and 3-D printing.[47][48]
Open hardware companies are experimenting with difOne of the major dierences between developing open- ferent business models. In one example, littleBits implesource software and developing open-source hardware ments open-source business models by making the deis that hardware results in tangible outputs, which cost sign les available for the circuit designs in each littleBits
money to prototype and manufacture. As a result, the module, in accordance with the CERN Open Hardware
[56]
phrase free as in speech, not as in beer,[49] more for- License Version 1.2. In another example, Arduino has
mally known as Gratis versus Libre, distinguishes be- registered its name as a trademark. Others may manufactween the idea of zero cost and the freedom to use ture their designs but can't put the Arduino name on them.
and modify information. While open-source hardware Thus they can distinguish their products from others by
[57]
faces challenges in minimizing cost and reducing nan- appellation. There are many applicable business modcial risks for individual project developers, some com- els for implementing some open-source hardware even in
munity members have proposed models to address these traditional rms. For example, to accelerate development
needs.[50] Given this, there are initiatives to develop sus- and technical innovation the photovoltaic industry has extainable community funding mechanisms, such as the perimented with partnerships, franchises, secondary supplier and completely open-source models.[58]
Open Source Hardware Central Bank.[51]
Often vendors of chips and other electronic components Recently, many open source hardware projects were
will sponsor contests with the provision that the partici- funded via crowdfunding on Indiegogo or Kickstarter.
pants and winners must share their designs. Circuit Cellar
magazine organizes some of these contests.
Laboratory,
6.9. REFERENCES
33
with his earlier rejection of the term open source software [10] OSHW
(see also Alternative terms for free software).[60]
Open-source robotics
Rapid prototyping
[19] Richard Stallman -- On Free Hardware on linuxtoday.com I see no social imperative for free hardware designs like the imperative for free software. (Jun 22, 1999)
fab lab
Computer numeric control
Reuse
6.9 References
[1] Alicia Gibb (Ed.) Building Open Source Hardware: DIY
Manufacturing for Hackers and Makers, Addison-Wesley:
New York, pp. 253-277 (2015).
[2] Free Hardware and Free Hardware Designs. Free Software Foundation Inc.
[3] Joshua M. Pearce. (2015) Return on Investment for Open
Source Hardware Development. Science and Public Policy. DOI:10.1093/scipol/scv034 open access
[4] Perens, B. 1997. Annoucing: The Open Hardware Certication Program. Debian Announce List. .
[5] The Open Hardware Certication Program on openhardware.org (November 1998)
[6] Freeman, D. 1998. OHSpec: The Open Hardware Specication Project
[7] McNamara, P. 2007a. Open Hardware. The Open
Source Business Resource (September 2007: Dening
Open Source).
[8] Ars Technica: TAPR introduces open-source hardware license, OSI skeptical.
[9] Freedom Dened. 2011. Open Source Hardware Denition. Freedom Dened.
[22] Criteria on fsf.org The seller must use FSF approved terminology for the FSFs activities and work, in all statements and publications relating to the product. This
includes product packaging, and manuals, web pages,
marketing materials, and interviews about the product.
Specically, the seller must use the term GNU/Linux
for any reference to an entire operating system which includes GNU and Linux, not Linux or Linux-based system or a system with the Linux kernel or any other
term that mentions Linux without GNU. Likewise,
the seller must talk about free software more prominently than open source."]
[23] lets_talk_about_respect_your_freedoms_more
reddit.com
on
[24] Replicant - Freedom and privacy/security issues [online]. (2016). Available from: <http://www.replicant.
us/freedom-privacy-security-issues.php>.
(Accessed
02/22/2016) The freedom to use the hardware, for any
purpose. The freedom to study how the hardware works,
and change it so it works as you wish. Access to the hardware design source is a precondition for this. The freedom
to redistribute copies of the hardware and its design so you
can help your neighbor. The freedom to distribute copies
of your modied versions to others. By doing this you can
give the whole community a chance to benet from your
changes. Access to the hardware design source is a precondition for this.
34
[58] A. J. Buitenhuis and J. M. Pearce, "Open-Source Development of Solar Photovoltaic Technology", Energy for
Sustainable Development, 16, pp. 379-388 (2012). open
access
[59] Stallman, Richard (1999-06-22). Richard Stallman -On Free Hardware"". kernel.org. Retrieved 2016-01-14.
freedom to copy software is social imperative, but freedom
to copy hardware is not so important as hardware is hard
to copy
35
source
hardware,
Chapter 7
Arduino
boards
footprint-compatible
Special purpose Arduino-compatible boards add additional hardware optimised for a specic application. It
is kind of like having an Arduino and a shield on a single
Many versions of the ocial Arduino hardware have been board. Some are Shield compatible, others are not.
commercially produced to date:[1][2]
7.1.1
Superseded boards
7.5. REFERENCES
37
The following boards accept Arduino shield daughter [22] Arduino Blog- Massimo Introduces Arduino Leonardo.
boards. They do not use microcontrollers compatible
Arduino.cc. 2012-07-23. Retrieved 2013-01-18.
with the Arduino IDE,[241] nor do they provide an alternative implementation of the Arduino IDE and software [23] Arduino - ArduinoBoardUno. Arduino.cc. Retrieved
2013-01-23.
libraries.
[24] ArduinoBoardUno. Arduino.cc. Retrieved 2013-0118.
7.5 References
[1] Arduino - Boards. Arduino.cc. 2009-03-01. Retrieved
2013-01-23.
[2] Arduino - HomePage. Arduino.cc. Retrieved 2013-0123.
[3] https://www.arduino.cc/en/Main/ArduinoBoard101
[4] Intel Curie Module: Unleashing Wearable Device
Innovation. intel.com. Retrieved 2015-08-15.
[5] http://arduino.cc/en/Main/ArduinoBoardZero
[6] ATSAMD21G18A;". Atmel.com. Retrieved 2014-0812.
[7] http://blog.arduino.cc/2015/06/15/
arduino-zero-now-available-for-purchase/
[8] http://blog.arduino.cc/2014/05/15/meet-arduino-zero/
Arduino.cc.
Retrieved
[17] http://arduino.cc/en/Main/ArduinoBoardYun
[43] Arduino Blog- LilyPad Arduino and Arduino 0010. Arduino.cc. 2007-10-17. Retrieved 2013-01-18.
[44] arduino.cc
[19] http://blog.arduino.cc/2013/08/21/
updating-about-arduino-yun-and-arduino-robot/
38
[72] http://elecfreaks.com/store/download/Freaduino2560_
Schematic.pdf
Ar-
Arduino.cc.
Retrieved
[53] Arduino Blog- Arduino Diecimila and BT reference designs now available. Arduino.cc. 2007-10-22. Retrieved
2013-01-18.
[54] ArduinoBoardDiecimila. Arduino.cc. Retrieved 201301-18.
[55] Arduino - ArduinoBoardDuemilanove.
Retrieved 2013-01-23.
Arduino.cc.
Arduino.cc.
sainsmart.com.
Retrieved
[73] http://www.elecfreaks.com/
[74] SainSmart UNO R3. sainsmart.com. Retrieved 201301-23.
[75] Tavir-AVR. Tavir-AVR :: Bascom, Arduino, Wiring
- Programozs, Frum, ingyenes mintaalkalmazsok,
knyvek. Avr.tavir.hu. Retrieved 2013-01-23.
[76] TavIR : Mikrokontroller vilg | A gyakorlati tuds
trhza (in Hungarian). Tavir.hu. Retrieved 2013-0123.
[77] Brasuno. Brasuino.holoscopio.com. Retrieved 201301-23.
[78] Holoscpio. Holoscopio.com. 2011-07-18. Retrieved
2013-01-23.
[79] Chibiduino2. tiisai.dip.jp. Retrieved 17 Aug 2013.
[80] Arduino Cosmo Black Star
:: Arduino. Jt5.ru. Retrieved 2013-01-23.
[81] JT5
::
". Jt5.ru. Retrieved 2013-0123.
[82] CraftDuino / RoboCraft.ru / RoboCraft. Robocraft.ru.
Retrieved 2013-01-23.
[83] evilmadscientist.com
[84] Electronics | multiplo Robot Building System. Multiplo.org. Retrieved 2013-01-23.
[85] multiplo Robot Building System |". Multiplo.org. Retrieved 2013-01-23.
[86] "
trieved 2013-01-23.
[66] http://www.linear.com/solutions/linduino
[67] http://www.ventor.co.in/index.php?main_page=
product_info&cPath=16&products_id=86
[68] http://www.ventor.co.in/
[69] SainSmart UNO. sainsmart.com. Retrieved 2013-0123.
7.5. REFERENCES
39
[94] http://www.induino.com/wiki/index.php?title=
[115] YourDuinoRobo1 (Upgraded Arduino Compatible)".
InduinoX. Retrieved August 13, 2011. Missing or
Arduino-direct.com. Retrieved 2014-09-23.
empty |title= (help)
[116] geekstudio.co.za
[95] Simple
Labs
|
Simplifying
Technology.
[117] Zigduino r1 - Logos Electromechanical.
LogosBuild.simplelabs.co.in. Retrieved 2013-01-23.
electro.com. Retrieved 2013-01-23.
[96] Vol.27
(8
+
)
|
[118] Products & Services - Logos Electromechanical.
|
.net.
Otonanokagaku.net.
Logos-electro.com. 1999-02-22. Retrieved 2013-01-23.
Retrieved 2013-01-23.
[119] http://www.freetronics.com/collections/arduino/
[97] 990.110. Droids.it. Retrieved 2013-01-23.
products/etherten
[98] 990.023 Luigino328 - User Manual [EN]". Droids.it. [120] http://www.freetronics.com/
Retrieved 2013-01-23.
collections/arduino/products/
ethermega-arduino-mega-2560-compatible-with-onboard-ethernet
[99] Metaboard Metalab (in German). Metalab.at. Retrieved 2013-01-23.
[121] http://www.freetronics.com/collections/arduino/
products/usbdroid
[100] small computers for art and science. Rascal Micro. Retrieved 2013-01-23.
[122] http://www.freetronics.com/collections/arduino/
products/eleven
[101] https://web.archive.org/20130331012625/http:
[123] http://www.freetronics.com/collections/arduino/
//www.bitwizard.nl:80/wiki/index.php/Raspduino.
products/kitten
Archived from the original on March 31, 2013. Retrieved
January 23, 2013. Missing or empty |title= (help)
[124] CATkit
[102] BitWizard. Bitwizard.nl. Retrieved 2013-01-23.
[125] http://www.freetronics.com/
collections/arduino/products/
[103] DFRduino Romeo-All in one Controller V1.1(SKU:
etherdue-arduino-due-compatible-with-onboard-ethernet
DFR0004) - Robot Wiki. Dfrobot.com. Retrieved
2013-01-23.
[126] http://www.elechouse.com/elechouse/index.php?main_
page=product_info&cPath=72_73&products_id=2212
[104] DFRobot-An Online Opensource Robot and Hardware
Shop. Dfrobot.com. Retrieved 2013-01-23.
[127] "Io:duino". Railstars. Retrieved 2013-01-23.
[105] Tools, Parts, Kits for DIY'ers. Curious Inventor. Re- [128] DFRobotShop Rover V2 - Arduino Compatible Tracked
trieved 2013-01-23.
Robot (Basic Kit)". RobotShop. Retrieved 2013-01-23.
[106] Seeeduino V3.0 (Atmega 328P) [ARD130D2P] - $22.50 [129] Industruino. Retrieved 12 June 2015.
: Seeed Studio Bazaar, Boost ideas, extend the reach.
[130] Mindsets online. Mindsets online. 2007-03-01. ReSeeedstudio.com. Retrieved 9 Nov 2014.
trieved 2013-01-23.
[107] SunDUINO Nowy wymiar elektroniki.
Sun[131] Mindsets online.co.uk. Mindsets online.co.uk. 2007duino.neth.pl. Retrieved 2013-01-23.
03-01. Retrieved 2013-01-23.
[108] TwentyTen (100% Arduino Compatible). Parts & Kits
for Arduino Online, Buy Microcontroller Boards, Elec- [132] mindsetsonline.co.uk
tronic Components for Arduino - TwentyTen (100% Ar- [133] Bump and Reverse Robot Kit (Faraduino) - Faraduino.
duino Compatible)". Freetronics. Retrieved 2013-01-23.
Mindsets online. 2007-03-01. Retrieved 2013-01-23.
[109] Parts & Kits for Arduino Online, Buy Microcontroller [134] Faraconnect Shield (Faraduino) - Faraduino. Mindsets
Boards, Electronic Components for Arduino - Welcome.
online. 2007-03-01. Retrieved 2013-01-23.
Freetronics. Retrieved 2013-01-23.
[135] Motoruino | GUIBOT. Guibot.pt. Retrieved 2013-01[110] Volksduino: complete low-cost Arduino clone. Ap23.
pliedplatonics.com. Retrieved 2013-01-23.
[136] Anderson, Chris (2009-01-21). ArduPilot (Legacy)
main page. DIY Drones. Retrieved 2013-01-23.
[111] Applied Platonics. Applied Platonics. Retrieved 201301-23.
[137] Flyduino Shop - Multirotor, Multicopter Teile & Zubehr fr Quadrocopter, Hexacopter, Octocopter - Motore,
[112] Wise time with Arduino.
TimewithRahmen, FCs & ESCs. Flyduino.net. Retrieved 2013arduino.blogspot.com. Retrieved 2013-01-23.
01-23.
[113] http://www.obdiiworld.com/ obdiiworld.com]] (parts in
[138] Arduino "" RF
Chinese?)
868 Mhz :: Arduino. Jt5.ru.
[114] YourDuino. YourDuino. Retrieved 2013-01-23.
2012-03-30. Retrieved 2013-01-23.
40
[139] JeeNode - JeeLabs Hardware - JeeLabs . net. Jee- [166] Freeduino Serial india. Bhashatech.com. 2009-08-23.
labs.net. Retrieved 2013-01-23.
Retrieved 2013-01-23.
[140] http://www.freetronics.com/collections/arduino/
products/arduphone-arduino-compatible-cellphone
[141] http://wtfduino.co.uk
[167] Femtoduino: an ultrasmall (20.7x15.2 mm) libre Arduino compatible board. Varesano.net. Retrieved 201301-23.
[168] , specications
[142] http://tah.io
[143] http://revealinghour.in
[144] iono.
[155] chip45.com
[156] chip45.com
Bhashatech.com.
7.5. REFERENCES
41
[207] https://learn.adafruit.com/introducing-trinket
42
Re-
[259] rebird32.com
[260] parallax.com
[261]
[262] Breeze Boards Dizzy Enterprises website
[263] Arduino clone with mikroBUS socket mikroElektronika
news article
[264] Goldilocks Dev Board Thin Layer website
[265] Thin Layer website
Evans, Martin; Noble, Joshua; Hochenbaum, Jordan (August 28, 2012). Arduino in Action (1st ed.).
Manning. p. 300. ISBN 978-1617290244.
McComb, Gordon (June 5, 2012). Arduino Robot
Bonanza (1st ed.). McGraw-Hill. p. 40. ISBN 9780-07-178277-7.
Olsson, Tony (May 30, 2012). Arduino Wearables
(1st ed.). Apress. p. 400. ISBN 978-1-4302-43595.
Anderson, Rick; Cervo, Dan (May 16, 2012). Pro
Arduino (1st ed.). Apress. p. 350. ISBN 978-14302-3939-0.
Wilcher, Don (April 30, 2012). Learn Electronics
with Arduino (1st ed.). Apress. p. 350. ISBN 9781-4302-4266-6.
Melgar, Enrique Ramos; Diez, Ciriaco Castro Diez
(March 26, 2012). Arduino and Kinect Projects: Design, Build, Blow Their Minds (1st ed.). Apress. p.
350. ISBN 978-1-4302-4167-6.
[250] unduino.com
[258] MyFreescaleWebPage.
trieved 2013-01-23.
Bhmer, Mario (March 26, 2012). Beginning Android ADK with Arduino (1st ed.). Apress. p. 350.
ISBN 978-1-4302-4197-3.
Jepson, Brian; Igoe, Tom (March 22, 2012). Getting
Started with NFC: Contactless Communication with
Android, Arduino, and Processing (1st ed.). O'Reilly
Media/Make. p. 30. ISBN 978-1-4493-0852-0.
Doukas, Charalampos (March 14, 2012). Arduino,
Sensors, and the Cloud (1st ed.). Apress. p. 350.
ISBN 978-1-4302-4125-6.
Riley, Mike (March 7, 2012). Programming Your
Home: Automate with Arduino, Android, and Your
Computer (1st ed.). Pragmatic Bookshelf. p. 200.
ISBN 978-1-934356-90-6.
Igoe, Tom (February 22, 2012). Getting Started with
RFID: Identify Objects in the Physical World with Arduino (1st ed.). O'Reilly Media. p. 40. ISBN 9781-4493-2418-6.
Borenstein, Greg (February 3, 2012). Making
Things See: 3D vision with Kinect, Processing, Arduino, and MakerBot (1st ed.). O'Reilly Media. p.
440. ISBN 978-1-4493-0707-3.
Noble, Joshua (January 30, 2012). Programming Interactivity (2nd ed.). O'Reilly Media. p. 726. ISBN
978-1-4493-1144-5.
Margolis, Michael (December 30, 2011). Arduino
Cookbook (2nd ed.). O'Reilly Media. p. 724. ISBN
978-1-4493-1387-6.
43
Faludi, Robert (January 4, 2011). Building Wireless
Sensor Networks: with ZigBee, XBee, Arduino, and
Processing (1st ed.). O'Reilly Media. p. 320. ISBN
978-0-596-80774-0.
McRoberts, Michael (December 20, 2010).
Beginning Arduino (1st ed.). Apress. p. 350. ISBN
978-1-4302-3240-7.
Monk, Simon (November 15, 2011). Arduino + Android Projects for the Evil Genius: Control Arduino
with Your Smartphone or Tablet (1st ed.). McGrawHill. p. 224. ISBN 978-0-07-177596-0.
Timmis, Harold (November 9, 2011). Practical Arduino Engineering (1st ed.). Apress. p. 328. ISBN
978-1-4302-3885-0.
Pardue, Joe (January 15, 2010). An Arduino Workshop (1st ed.). Smiley Micros. p. 214. ISBN 9780-9766822-2-6.
Evans, Brian (October 17, 2011). Beginning Arduino Programming (1st ed.). Apress. p. 272. ISBN
978-1-4302-3777-8.
Noble, Joshua (July 15, 2009). Programming Interactivity: A Designers Guide to Processing, Arduino,
and openFrameworks (1st ed.). O'Reilly Media. p.
736. ISBN 978-0-596-15414-1.
Chapter 8
Wiring
Wiring is an open-source electronics prototyping though users only need to dene two functions to make a
platform composed of a programming language, an runnable program:
integrated development environment (IDE), and a
single-board microcontroller. It was developed starting
setup() a function run once at the start of a proin 2003 by Hernando Barragn.
gram which can be used to dene initial environBarragn started the project at the Interaction Design Inment settings
stitute Ivrea. The project is currently developed at the
School of Architecture and Design at the Universidad de
loop() a function called repeatedly until the board
Los Andes in Bogot, Colombia.
is powered o
Wiring builds on Processing, an open project initiated by
Casey Reas and Benjamin Fry, both formerly of the Aesthetics and Computation Group at the MIT Media Lab.
A typical rst program for a microcontroller is to simply
The documentation has been created with designers and blink an LED (light-emitting diode) on and o. In the
artists in mind. There is a community where experts, Wiring environment, the user might write a program like
intermediate developers and beginners from around the this:
world share ideas, knowledge and their collective experi- int ledPin = WLED; // a name for the on-board LED void
ence. Wiring allows writing software to control devices setup () { pinMode(ledPin, OUTPUT); // congure the
attached to the electronics board to create all kinds of in- pin for digital output } void loop () { digitalWrite(ledPin,
teractive objects, spaces or physical experiences feeling HIGH); // turn on the LED delay (1000); // wait one
and responding in the physical world. The idea is to write second (1000 milliseconds) digitalWrite(ledPin, LOW);
a few lines of code, connect a few electronic components // turn o the LED delay (1000); // wait one second }
to the Wiring hardware and observe how a light turns on
when person approaches it, write a few more lines, add
another sensor, and see how this light changes when the When the user clicks the Upload to Wiring hardware
illumination level in a room decreases. This process is button in the IDE, a copy of the code is written to a temcalled sketching with hardware; explore lots of ideas very porary le with an extra include header at the top and a
quickly, select the more interesting ones, rene and pro- very simple main() function at the bottom, to make it a
valid C++ program.
duce prototypes in an iterative process.
The Wiring IDE uses the GNU toolchain and AVR Libc
to compile programs, and uses avrdude to upload programs to the board.
8.1 Software
The Wiring IDE is a cross-platform application written in Java which is derived from the IDE made for the
8.2 Open hardware and open
Processing programming language. It is designed to insource
troduce programming and sketching with electronics to
artists and designers. It includes a code editor with features such as syntax highlighting, brace matching, and au- The Wiring hardware reference designs are distributed
tomatic indentation capable of compiling and uploading under a Creative Commons Attribution Share-Alike 2.5
programs to the board with a single click.
license and are available on the Wiring Web site. LayThe Wiring IDE comes with a C/C++ library called out and production les for the Wiring hardware are also
Wiring, which makes common input/output operations available. The source code for the IDE and the hardware
much easier. Wiring programs are written in C/C++, al- library are available and released under the GPLv2
44
Processing
8.3.2
8.5 Sources
Reas, Casey; Fry, Ben; Maeda, John (September
30, 2007), Processing: A Programming Handbook
for Visual Designers and Artists (1st ed.), The MIT
Press, p. 736, ISBN 0-262-18262-9
Igoe, Tom (September 28, 2007). Making Things
Talk: Practical Methods for Connecting Physical Objects (1st ed.). O'Reilly Media. p. 432. ISBN 0596-51051-9.
Noble, Joshua (July 15, 2009). Programming Interactivity: A Designers Guide to Processing, Arduino,
and openFramework (1st ed.). O'Reilly Media. p.
768. ISBN 0-596-15414-3.
[1] Previous Releases. Wiring.org.co. Retrieved January 5,
2011.
45
Chapter 9
Processing
Processing is an open source programming language and
integrated development environment (IDE) built for the
electronic arts, new media art, and visual design communities with the purpose of teaching the fundamentals of
computer programming in a visual context, and to serve
as the foundation for electronic sketchbooks. The project
was initiated in 2001 by Casey Reas and Benjamin Fry,
both formerly of the Aesthetics and Computation Group
at the MIT Media Lab. One of the stated aims of Processing is to act as a tool to get non-programmers started
with programming through the instant gratication of visual feedback. The language builds on the Java language,
but uses a simplied syntax and graphics programming
model. In 2012, they started the Processing Foundation
along with Daniel Shiman, who formally joined as a
third project lead.
9.1 Features
Processing includes a sketchbook, a minimal alternative
to an integrated development environment (IDE) for organizing projects.
Every Processing sketch is actually a subclass of the
PApplet Java class which implements most of the Processing languages features.
9.2 Examples
46
9.4. AWARDS
AK, GA, AL, TN, WV, KY, SC, WY,
MT, ID, TX, AZ, UT, ND, SD, NE,
MS, MO, AR, OK, KS, LA }; void setup()
{ size(950, 600); // The le Blank US Map (states
only).svg can be found at Wikimedia Commons usa
= loadShape("http://upload.wikimedia.org/wikipedia/
commons/archive/1/1a/20130330152451!Blank_US_
Map_(states_only).svg"); smooth(); // Improves the
drawing quality of the SVG noLoop(); } void draw() {
background(255); // Draw the full map shape(usa, 0,
0); // Blue denotes states won by Obama statesColoring(Obama , color(0, 0, 255)); // Red denotes states
won by McCain statesColoring(McCain, color(255,
0, 0)); // Save the map as image saveFrame(map
output.png); } void statesColoring(String[] states, int
c){ for (int i = 0; i < states.length; ++i) { PShape state
= usa.getChild(states[i]); // Disable the colors found in
the SVG le state.disableStyle(); // Set our own coloring
ll(c); noStroke(); // Draw a single state shape(state, 0,
0); } }
47
In 2008, John Resig ported Processing to JavaScript using
the Canvas element for rendering,[2] allowing Processing
to be used in modern web browsers without the need for
a Java plugin. Since then, the open source community including students at Seneca College in Toronto have taken
over the project.
Processing.js is also used to advocate very basic programming to Students of all ages on Khan Academy by creating drawings and animations. Learners showcase their
creations to other learners and many of the projects are
very fascinating.
9.3.5 p5.js
Lauren McCarthy has created p5.js.[3] an alternative
to Processing.js that has the ocial support of the
Processing Foundation.[4] McCarthy also teaches an introductory course to p5.js on Kadenze.[5]
9.3.6 iProcessing
Design By Numbers
9.3.3
Mobile Processing
9.4 Awards
Another spin-o project, now defunct, is Mobile Processing by Francis Li, which allowed software written using In 2005 Reas and Fry won the prestigious Golden Nica
the Processing language and environment to run on Java award from Ars Electronica in its Net Vision category for
powered mobile devices. Today some of the same func- their work on Processing.
tionality is provided by Processing itself.[1]
Ben Fry won the 2011 National Design Award given
by the Smithsonian Cooper-Hewitt National Design Museum in the category of Interaction Design. The award
9.3.4 Processing.js
statement says:
Main article: Processing.js
Drawing on a background in graphic design and computer science, Ben Fry pursues a long-held fascination
48
with visualizing data. As Principal of Fathom Information Design in Boston, Fry develops software, printed
works, installations, and books that depict and explain
topics from the human genome to baseball salaries to
the evolution of text documents. With Casey Reas, he
founded the Processing Project, an open-source programming environment for teaching computational design and
sketching interactive-media software. It provides artists
and designers with accessible means of working with
code while encouraging engineers and computer scientists to think about design concepts.
9.5 License
Processings core libraries, the code included in exported
applications and applets, is licensed under the GNU
Lesser General Public License, allowing users to release
their original code with a choice of license.
CHAPTER 9. PROCESSING
9.9 References
Bohnacker, Hartmut; Gross, Benedikt; Laub, Julia;
Lazzeroni, Claudius (August 22, 2012), Generative
Design: Visualize, Program, and Create with Processing (1st ed.), Princeton Architectural Press, p.
472, ISBN 978-1616890773
9.6 Name
9.8 Footnotes
[1] Android - Processing. Retrieved 2013-06-03.
[2] John Resig - Processing.js.
[3] p5js: p5js.
[4] Processing Foundation: processingfoundation.
[5] Introduction to Programming for the Visual Arts with
p5.js on Kadenze
Noble, Joshua (July 21, 2009), Programming Interactivity: A Designers Guide to Processing, Arduino,
and Openframeworks (1st ed.), O'Reilly Media, p.
736, ISBN 0-596-15414-3
Terzidis, Kostas (May 11, 2009), Algorithms for Visual Design Using the Processing Language (1st ed.),
Wiley, p. 384, ISBN 0-470-37548-5
Reas, Casey; Fry, Ben; Maeda, John (September
30, 2007), Processing: A Programming Handbook
for Visual Designers and Artists (1st ed.), The MIT
Press, p. 736, ISBN 0-262-18262-9
Fry, Ben (January 11, 2008), Visualizing Data (1st
ed.), O'Reilly Media, p. 382, ISBN 0-596-51455-7
Greenberg, Ira (May 28, 2007), Processing: Creative Coding and Computational Art (Foundation)
(1st ed.), friends of ED, p. 840, ISBN 1-59059-617X
Shiman, Daniel (August 19, 2008), Learning Processing: A Beginners Guide to Programming Images,
Animation, and Interaction (1st ed.), Morgan Kaufmann, p. 450, ISBN 0-12-373602-1
Faludi, Robert (January 4, 2011), Building Wireless
Sensor Networks: with ZigBee, XBee, Arduino, and
Processing (1st ed.), O'Reilly Media, p. 320, ISBN
978-0-596-80774-0
Vantomme, Jan (September 20, 2012), Processing
2, Creative Programming Cookbook (1st ed.), Packt
Publishing, p. 291, ISBN 9781849517942
49
50
CHAPTER 9. PROCESSING
Text
51
Bonnie13J, Roy tate, Qwerty9030, DarafshBot, Ksvitale, Puguhwah, Mahmoodheshmati, Mogism, Amanparkash, Krikkit1, Epicgenius,
Osiixy, Tomitech, Comp.arch, Kevinf28, Tolmeros, Akhilsn, Moshaydi, 0xTJ, Dharmendra Kumar Dangi, GSS-1987, Akashpc2050,
Tcarisland and Anonymous: 310
Atmel AVR instruction set Source: https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set?oldid=713283939 Contributors: Rl,
Wernher, DavidCary, Chinakow, ArnoldReinhold, AshtonBenson, Nazli, Suruena, RJFJR, Koassim, Marudubshinki, Doruuu, Gurch,
Alvin-cs, WriterHound, Bovineone, MidoriKid, Rwwww, CrazyTerabyte, Thumperward, CapitalR, CmdrObot, Pfagerburg~enwiki, Vwollan, Tomasf, KMeyer, Magioladitis, SwiftBot, Wjl2, Svofski, Mortense, Dkinzer, Yobot, AnomieBOT, Cl2k, Who then was a gentleman?,
Boobarkee, SexyGoat, Edgar.bonet, ClueBot NG, Frietjes, Danim, BG19bot, Frosty, Jamesmcmahon0, Tolmeros, Cjfman, Samy1377,
JJMC89, Dalek Supreme X and Anonymous: 22
Orthogonal instruction set Source: https://en.wikipedia.org/wiki/Orthogonal_instruction_set?oldid=713462565 Contributors: SimonP,
Davitf, Edward, PeterBrooks, Furrykef, Murray Langton, Lady Tenar, Ds13, Rchandra, Macrakis, Neilc, Spearhead, Atlant, Wtshymanski,
Blaxthos, Drichards2, SDC, Qwertyus, Kbdank71, Ligulem, Arnero, Voidxor, Ospalh, SmackBot, Arny, Swerdnaneb, Brianski, TimBentley, Jerome Charles Potts, Frap, Kindall, JonHarder, Ghiraddje, Cybercobra, Metta Bubble, CarlosCoppola, HenkeB, Krauss, IanOsgood,
Blacknova, GermanX, Lightmouse, ClueBot, DumZiBoT, Addbot, SpBot, Luckas-bot, AnomieBOT, Arjun G. Menon, Spike-from-NH,
Prari, Barbaraburg45, Anuclanus, ChrisGualtieri and Anonymous: 25
Open-source hardware Source: https://en.wikipedia.org/wiki/Open-source_hardware?oldid=725505580 Contributors: Comte0, Nixdorf,
CesarB, Haakon, Mac, Ronz, Tacvek, David Latapie, Mrand, Omegatron, Gakrivas, Sjorford, KellyCoinGuy, Alan Liefting, DavidCary,
Michael Devore, Frencheigh, Cyberied, Micru, AlistairMcMillan, Khalid hassani, Gadum, Sonjaaa, Popolon, Savuporo, Wikkrockiana, RossPatterson, Psd, ArnoldReinhold, Gronky, Kanzure, Stephane.magnenat, Kjkolb, Anthony Appleyard, Axl, Kocio, Suruena,
Jwinius, FrancisTyers, Mindmatrix, Armando, CharlesC, Toussaint, Marudubshinki, Stromcarlson, Phoenix-forgotten, Jorunn, Miserlou, Fred Bradstadt, Imrehg, Intgr, Jidan, Wavelength, Klingoncowboy4, C777, Gaius Cornelius, Nowa, Panscient, Jona, Tony1, JoeBorn, Erpingham, WAS 4.250, Emijrp, Snaxe920, Bigcheesegs, SmackBot, Chrissi~enwiki, McGeddon, KVDP, Carl.bunderson, Jcarroll,
Thumperward, Letdorf, Chendy, Harumphy, Frap, JonHarder, G716, DMacks, Guyjohnston, JzG, Vincenzo.romano, Dave104, Beetstra,
Dicklyon, Andrwsc, Galadh, Hu12, CyberAran~enwiki, Dan1679, CmdrObot, Raysonho, Shorespirit, Nczempin, Cydebot, AtTheAbyss,
SimenH, Dancter, Kozuch, Neustradamus, Plaasjaapie, KTucker, Electron9, I already forgot, Guy Macon, Steelpillow, Xhienne, Rob Kam,
SteveSims, Magioladitis, VoABot II, Steven Walling, GBYork, Allstarecho, GermanX, NMaia, Gwern, CommonsDelinker, ArcAngel,
Ultrajosh, Jlndrr~enwiki, Trusilver, Warrakkk, Atama, VolkovBot, TXiKiBoT, Noema, Jamelan, Andy Dingley, Altermike, Sikku, Biasoli, HybridBoy, Mcintireallen, SieBot, Lucasbfrbot, Belorn, Nopetro, Lightmouse, Tjteru, Iamreddave, Robvanbasten, Daviding, Sfan00
IMG, Polto~enwiki, Kl4m-AWB, Frmorrison, Regibox, Hauptmech, Alexbot, Vancircuit, Nukeless, Rayofdawn24, DumZiBoT, Addbot,
Ramu50, Ghettoblaster, Jojhutton, SunDragon34, Snowman76, Scientus, LaaknorBot, Robert.Harker, Jarble, Luckas-bot, Yobot, Themfromspace, Lunochod~enwiki, Enviro1, Uze6666, AnomieBOT, Tucoxn, Berntie, L3lackEyedAngels, Bluerasberry, Materialscientist,
Xqbot, Plasmon1248, Dvansickle, Mark Schierbecker, Brunonar, Ultraux2, Raulshc, FrescoBot, Jeremybennett, SebastianPichelhofer,
Bjonnh, Trkiehl, Cannolis, Posta0ldude, Biker Biker, AlexanderChemeris, JNorman704, Bborg96, Cnwilliams, 122589423KM, Acelros,
Woodlot, CubeSpawn, Thiago.correa, Alinke2000, Maxkreusen, EmausBot, East3YrsWest3Yrs, Zollerriia, Oliver Bestwalter, Veikk0.ma,
Worldpuppet, Wayaguo, Nerd bzh, Mjbmrbot, Mikhail Ryazanov, Juliusbaxter, Jmreinhart, Catlemur, Shaddim, BG19bot, Todrobbins,
Gabriel Yuji, Michael Barera, Jdwolin, BazokaJoe, Ajv39, Simone Cicero, IjonTichyIjonTichy, RickHolder, Osat44, Changfang, Luli17,
QatarStarsLeague, Viswanathsai, Csepartha, Imphil2, OHDIY, Batboys, Loic.urbain, Editor-1, Fixuture, Stockwellnow, Lagoset, Stiegenaufgang, Xxzso, Ginadav, Zoomn, Fdm11, Greeny9, Awlsll, Gihiw, 15zulu, Opgh, Stormihu, Yousef338 and Anonymous: 202
List of Arduino compatibles Source:
https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems?oldid=
729176544 Contributors: Jcw~enwiki, Micru, Alexf, Arosa, Imroy, ArnoldReinhold, Bender235, ColBatGuano, BenediktWildenhain, Wtshymanski, RHaworth, Jamesmorrison, Nsayer, Chris the speller, Jamesnewton, Thumperward, Ihatetoregister, Hbachus, Musashiaharon,
TerryKing, Mblumber, Guy Macon, Silver seren, Ryanneve, Videofeedback, Viskr, CommonsDelinker, Zzglenm, Osndok, KylieTastic,
Lexein, Estratos, Andy Dingley, !dea4u, Steven Crossin, Twidmer, Unbuttered Parsnip, Dascyllus, XLinkBot, Dthomsen8, Mimarx,
Mortense, Ronhjones, Yobot, Nishantmodak, AnomieBOT, SaaHc2B, Geek1337~enwiki, Eumolpo, LilHelpa, Todocono, Pdegregorio,
Ahmadexp, Southwolf, Dewritech, Josve05a, Sbmeirow, Bemerit, Frietjes, Danim, BG19bot, Per1234, Rahulmothiya, Euler357, BattyBot,
Cyberbot II, ChrisGualtieri, , Ajv39, Jojo69003, Youdonotknow, Aalbino, Mogism, Howtronics, Tony Mach, Greg75FR, Dfrobot,
Blockthor, Sepiaz, Sharya77, Happyman7, ThongEric, Majenko, Slicmicro, LuwieThong, Felixemman, Daneduplooy, Brentsinger,
CarlosDelno, Tiisaidipjp, Gpanos123, Knivd, Sodaq, Giampiero.baggiani, Wbz cypress, Cakepacket, Lagoset, Filedelinkerbot, Jcamdr,
Bobricius, RoundupResistance, R2d2ricky, Sarr Cat, Danny.umd, JudeBass, Shamikrudra, Clemoteur, Djkill, Grondanelli, Idrisza86,
GreenC bot and Anonymous: 77
Wiring (development platform) Source: https://en.wikipedia.org/wiki/Wiring_(development_platform)?oldid=725553256 Contributors:
Dcoetzee, Bearcat, Tzf, Micru, Woohookitty, Tony1, Cedar101, SmackBot, Thumperward, Cybercobra, Cydebot, Wikilolo, Andy Dingley, Mikebar, Jerryobject, JL-Bot, Ethridgela, EoGuy, SoxBot, Addbot, Mortense, Ben Ben, Yobot, Troyp, Armbrust, Gbruin, Brunonar,
TjBot, Ripchip Bot, ZroBot, ChuispastonBot, Helpful Pixie Bot, Virtualerian, AlexanderBrevig, Roguebhagman, Dexbot, Peetz0r and
Anonymous: 9
Processing (programming language) Source: https://en.wikipedia.org/wiki/Processing_(programming_language)?oldid=725904661
Contributors: Joakim Ziegler, Chuckhomann, SimonP, Dmb~enwiki, Dysprosia, Traroth, Topbanana, Finlay McWalter, JustinHall, Cecropia, Sj, Metlin, Imroy, Oolong, Skanaar, InShaneee, Velella, Ironwolf, Tripodics, Pol098, CharlesC, FlaBot, CBlair1986, JWB, Rainulf,
Morphh, Johnkershaw, Jeresig, Cedar101, HereToHelp, ViperSnake151, SmackBot, Eskimbot, Thumperward, Gracenotes, Frap, Ddon,
Cybercobra, EdC~enwiki, Hu12, Iridescent, George100, CRGreathouse, Zarex, WeggeBot, John259, Cydebot, Hebrides, SimenH, Jerri
Kohl, Thijs!bot, Neko18, Kaini, KuwarOnline, Yaxu, Gwern, VolkovBot, Masaruemoto, Trevor Wennblom, Andy Dingley, Cooperh,
Multikev, Serprex, SieBot, Gerakibot, Jerryobject, ClueBot, SimShanith, TimmmmCam, 718 Bot, Excirial, Carriearchdale, Duanerbailey, SF007, DumZiBoT, Johndci, Addbot, Professor Calculus, Mortense, K-MUS, !Silent, Boomur, SpBot, Lightbot, Yobot, KamikazeBot, VX, Wickorama, Xqbot, Control.valve, Rkyymmt, Crodrigues, Digisage, Rstuvw, FrescoBot, Umawera, Citation bot 1, VisualStory, Jschnur, Carel.jonkhout, Beao, Hazem92, Phlingpong, ThePCKid, Toxmeister, ZroBot, Cfust, Lthornsb, L Kensington, Lorem Ip,
Mikechen, T.kalka, Imapiekindaguy, ChuispastonBot, ClueBot NG, Joosep-Georg, Wornwinter11, Mrgates, WisCheese, Helpful Pixie Bot,
HMSSolent, SanFranArt, FinnFitzsimons, Egydius, GKFX, Compfreak7, Kirananils, SCLu, Bierons1, Dexbot, Cropoilbrush, Mascot6699,
Franois Robere, Serj.by, Janvantomme, Pcatanese, ThatSexyCat, Andersonfreitas, Shaomeng, Stiegenaufgang, JessicaParrisWestbrook,
Qzekrom, Fizzimizzi, Kqb Kushal, Dylan Kriegman, Taher Sa, New Joesey, 44bbbbs and Anonymous: 149
52
CHAPTER 9. PROCESSING
9.11.2
Images
https://upload.wikimedia.org/wikipedia/commons/e/ec/
53
File:Atmega8_Development_Board.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/5/57/Atmega8_Development_
Board.jpg License: CC BY-SA 3.0 Contributors: Robot Platoform, http://www.robotplatform.com/ Original artist: Praveen Kumar
File:Atmel_AVR_(logo).png Source: https://upload.wikimedia.org/wikipedia/en/6/60/Atmel_AVR_%28logo%29.png License: Fair use
Contributors:
The logo is from the http://www.atmel.com/dyn/products/datasheets.asp?family_id=607 website. http://www.atmel.com/dyn/resources/
prod_documents/1006S.pdf Original artist: ?
File:Atmel_STK_500_DSC00557_wp.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/d/d2/Atmel_STK_500_
DSC00557_wp.jpg License: FAL Contributors: Own work Original artist: smial (<a href='//commons.wikimedia.org/wiki/User_talk:
Smial' title='User talk:Smial'>talk</a>)
File:AvrDragon.png Source: https://upload.wikimedia.org/wikipedia/commons/1/1c/AvrDragon.png License: GFDL Contributors: Image taken by Jim1138. Original artist: User:Jim1138
File:Boarduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/8d/Boarduino.jpg License: CC BY 2.0 Contributors:
Flickr: topview Original artist: Limor
File:Commons-logo.svg Source: https://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg License: CC-BY-SA-3.0 Contributors: ? Original artist: ?
File:Digispark.agr.jpg Source: https://upload.wikimedia.org/wikipedia/commons/5/58/Digispark.agr.jpg License: CC BY 3.0 Contributors: Own work Original artist: ArnoldReinhold
File:DwengoBoard.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f0/DwengoBoard.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: WimHeirman
File:Edit-clear.svg Source: https://upload.wikimedia.org/wikipedia/en/f/f2/Edit-clear.svg License: Public domain Contributors: The
Tango! Desktop Project. Original artist:
The people from the Tango! project. And according to the meta-data in the le, specically: Andreas Nilsson, and Jakub Steiner (although
minimally).
File:EmonTx_V2.0.png Source: https://upload.wikimedia.org/wikipedia/commons/7/75/EmonTx_V2.0.png License: CC BY-SA 3.0
Contributors: http://openenergymonitor.org/emon/sites/default/files/emonTx_V2.0%20overview.png Original artist: Rahulmothiya
File:Femtoduino_PCB_vs_Dime.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/89/Femtoduino_PCB_vs_Dime.jpg
License: CC BY-SA 3.0 Contributors: Photo taken using smartphone.
Previously published: www.femtoduino.com Original artist: Aalbino
File:Flamingo_Arduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/4/4b/Flamingo_Arduino.jpg License: CC BYSA 2.0 Contributors: Flickr: Flamingo_Arduino Original artist: Alcohol Wang
File:Flexible_Lilypad_Arduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/9/92/Flexible_Lilypad_Arduino.jpg License: CC BY-SA 2.0 Contributors: http://www.flickr.com/photos/jeanbaptisteparis/2163676671/ Original artist: leah buechley
File:Free_and_open-source_software_logo_(2009).svg Source: https://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_
open-source_software_logo_%282009%29.svg License: Public domain Contributors: FOSS Logo.svg Original artist: Free Software Portal
Logo.svg (FOSS Logo.svg): ViperSnake151
File:Freeduino-nano.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/1a/Freeduino-nano.jpg License: CC BY-SA 3.0
Contributors: Own work Original artist: Sharya77
File:Freeduino-usb-mega-2560.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/fb/Freeduino-usb-mega-2560.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Sharya77
File:Isp_headers.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/9f/Isp_headers.svg License: CC BY 3.0 Contributors:
Own work Original artist: osiixy
File:Jeenode-v6.jpg Source: https://upload.wikimedia.org/wikipedia/commons/7/76/Jeenode-v6.jpg License: CC BY 3.0 Contributors:
Own work Original artist: J.C. Wippler
File:KL_Intel_D8749.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c5/KL_Intel_D8749.jpg License: CC-BY-SA3.0 Contributors: CPU collection Konstantin Lanzet Original artist: Konstantin Lanzet
File:Leaflabs_Maple_OSHW_with_STM32F103RBT6_MCU.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a6/
Leaflabs_Maple_OSHW_with_STM32F103RBT6_MCU.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Viswesr
File:Limited-edition_orange_Arduino_Duemilanove.jpg
Source:
https://upload.wikimedia.org/wikipedia/commons/7/76/
Limited-edition_orange_Arduino_Duemilanove.jpg License: CC BY-SA 2.0 Contributors: Flickr: Limited-edition orange Arduino
Duemilanove Original artist: Matt Biddulph
File:MOS_KIM-1_IMG_4211_cropped_scale.jpg Source: https://upload.wikimedia.org/wikipedia/commons/2/26/MOS_KIM-1_
IMG_4211_cropped_scale.jpg License: CC BY-SA 2.0 fr Contributors: This le has been extracted from another le: MOS KIM-1
IMG 4211.jpg
Original artist: MOS_KIM-1_IMG_4211.jpg: Rama & Muse Bolo
File:Mck_glamor_320.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/19/Mck_glamor_320.jpg License: CC BY 3.0
Contributors: MakeThings website Original artist: MakeThings LLC
File:MoteinoR4.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/18/MoteinoR4.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Felixemman
File:Moteino_types_&_options.jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/eb/Moteino_types_%26_options.jpg
License: CC BY-SA 4.0 Contributors: Own work Original artist: Felixemman
File:Myfreescalewebpage_bigbrother.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/1/10/Myfreescalewebpage_
bigbrother.jpg License: CC0 Contributors: Own work Original artist: Jojo69003
54
CHAPTER 9. PROCESSING
55
9.11.3
Content license