You are on page 1of 58

Arduino

Contents
1

Arduino

1.1

History

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.1

Ocial boards

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.2

Shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Software

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Development

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.5

Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6

Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.7

Legal dispute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.8

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.9

Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.10 References

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.11 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.12 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Single-board microcontroller

2.1

Origins

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2

Internal bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3

External bus expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4

Input and output

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5

Communications and user interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

Program memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.8

Single-board microcontrollers today

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.9

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

ii

CONTENTS
2.10 References

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Atmel AVR

12

3.1

Brief history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.2

Device overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.2.1

Basic families . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.2.2

Device architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.2.3

Program execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3.2.4

Instruction set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

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

Development tools and evaluation kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.5.1

STK600 starter kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.5.2

STK500 starter kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.5.3

STK200 starter kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.4

AVRISP and AVRISP mkII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

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

3.5.10 Buttery demonstration board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.11 AT90USBKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

3.5.12 Raven wireless kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

3.5.13 Third-party programmers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

Atmel AVR usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

3.3

3.4

3.5

3.6

CONTENTS

iii

3.7

FPGA clones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

3.8

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

3.9

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

3.10 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

3.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

Atmel AVR instruction set

24

4.1

Processor registers

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.2

Addressing

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.3

Instruction timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

4.4

Instruction list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

4.5

Instruction set inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

4.6

Instruction encoding

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

4.7

External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Orthogonal instruction set

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

5.1.4

The 8080 and follow on designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

5.1.5

RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

5.2
6

Open-source hardware

29

6.1

Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

6.2

Development

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

6.3

Open-source labs and certications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.3.1

RYF certication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.4

Business models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.5

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.6

References

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.7

External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

List of Arduino compatibles

33

7.1

Ocial Arduino boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

7.1.1

Superseded boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

Arduino-compatible boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

7.2.1

Arduino footprint-compatible boards

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

7.2.2

Special purpose Arduino-compatible boards . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

7.2

iv

CONTENTS
7.2.3

Software-compatibility only

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

7.2.4

Non-ATmega boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

7.3

Non-Arduino boards

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

7.4

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

7.5

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

7.6

Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

7.7

External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40

Wiring

41

8.1

Software

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

8.2

Open hardware and open source

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

8.3

Related projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

8.3.1

Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

8.3.2

Arduino and Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

8.4

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

8.5

Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

8.6

External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

Processing

43

9.1

Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

9.2

Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

9.2.1

Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

9.2.2

United States presidential election map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

Related projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.1

Design By Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.2

Wiring, Arduino, and Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.3

Mobile Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.4

Processing.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.5

iProcessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.6

Spde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.3.7

Quil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.4

Awards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

9.5

License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

9.6

Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

9.7

See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

9.8

Footnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

9.9

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

9.10 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

9.11 Text and image sources, contributors, and licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

9.3

CONTENTS

9.11.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

9.11.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

9.11.3 Content license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

Chapter 1

Arduino
For other uses, see Arduino (disambiguation).

time program students used a "BASIC Stamp" at a cost of


$100, considered expensive for students. Massimo Banzi,
one of the founders, taught at Ivrea.[5] The name Arduino
comes from a bar in Ivrea, where some of the founders of
the project used to meet. The bar, in turn, has been named
after Arduin of Ivrea, who was the margrave of Ivrea and
king of Italy from 1002 to 1014.[6]

Arduino is an open-source computer hardware and software company, project and user community that designs
and manufactures microcontroller-based kits for building
digital devices and interactive objects that can sense and
control the physical world.[1]

Colombian student Hernando Barragan created the Wiring


development platform which served as the basis for Arduino. Following the completion of the Wiring platform, its lighter, less expensive versions[7] were created
and made available to the open-source community; associated researchers, including David Cuartielles, promoted the
idea. The Arduinos initial core team consisted of Massimo
Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, and
David Mellis.[5]

The project is based on a family of microcontroller


board designs manufactured primarily by SmartProjects
in Italy,[2] and also by several other vendors, using various 8-bit Atmel AVR microcontrollers or 32-bit Atmel
ARM processors. These systems provide sets of digital
and analog I/O pins that can be interfaced to various expansion boards (shields) and other circuits. The boards
feature serial communications interfaces, including USB on
some models, for loading programs from personal computers. For programming the microcontrollers, the Arduino
platform provides an integrated development environment
(IDE) based on the Processing project, which includes support for C, C++ and Java programming languages.

1.2

Hardware

The rst Arduino was introduced in 2005, aiming to provide


an inexpensive and easy way for novices and professionals
to create devices that interact with their environment using sensors and actuators. Common examples of such devices intended for beginner hobbyists include simple robots,
thermostats, and motion detectors.
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 manufactured by anyone. Adafruit Industries estimated
in mid-2011 that over 300,000 ocial Arduinos had been
commercially produced,[3] and in 2013 that 700,000 ocial
boards were in users hands.[4]
An ocial Arduino Uno with descriptions of the I/O locations

1.1 History

An Arduino board consists of an Atmel 8-, 16- or 32bit AVR microcontroller with complementary components
Arduino started in 2005 as a project for students at the that facilitate programming and incorporation into other
Interaction Design Institute Ivrea in Ivrea, Italy. At that circuits. An important aspect of the Arduino is its stan1

CHAPTER 1. ARDUINO
lanove, and current Uno provide 14 digital I/O pins, six
of which can produce pulse-width modulated signals, and
six analog inputs, which can also be used as six digital
I/O pins. These pins are on the top of the board, via female 0.10-inch (2.5 mm) headers. Several plug-in application shields are also commercially available. The Arduino
Nano, and Arduino-compatible Bare Bones Board[9] and
Boarduino[10] boards may provide male header pins on the
underside of the board that can plug into solderless breadboards.

An early Arduino board[8] with an RS-232 serial 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.

dard connectors, which lets users connect the CPU board


to a variety of interchangeable add-on modules known as
shields. Some shields communicate with the Arduino board
directly over various pins, but many shields are individually addressable via an IC serial busso many shields can
be stacked and used in parallel. Ocial Arduinos have
used the megaAVR series of chips, specically the ATmega8, ATmega168, ATmega328, ATmega1280, and ATmega2560. A handful of other processors have been used
by Arduino compatibles. Most boards include a 5 volt linear
regulator and a 16 MHz crystal oscillator (or ceramic resonator in some variants), although some designs such as the
LilyPad run at 8 MHz and dispense with the onboard voltage regulator due to specic form-factor restrictions. An
Arduinos microcontroller is also pre-programmed with a
boot loader that simplies uploading of programs to the onchip ash memory, compared with other devices that typically need an external programmer. This makes using an
Arduino more straightforward by allowing the use of an ordinary computer as the programmer.
At a conceptual level, when using the Arduino software
stack, all boards are programmed over an RS-232 serial
connection, but the way this is implemented varies by hardware version. Serial Arduino boards contain a level shifter
circuit to convert between RS-232-level and TTL-level signals. Current Arduino boards are programmed via USB,
implemented using USB-to-serial adapter chips such as the
FTDI FT232. Some variants, such as the Arduino Mini and
the unocial Boarduino, use a detachable USB-to-serial
adapter board or cable, Bluetooth or other methods. (When
used with traditional microcontroller tools instead of the
Arduino IDE, standard AVR ISP programming is used.)
The Arduino board exposes most of the microcontrollers
I/O pins for use by other circuits. The Diecimila, Duemi-

There are many Arduino-compatible and Arduino-derived


boards. Some are functionally equivalent to an Arduino and
can be used interchangeably. Many enhance the basic Arduino by adding output drivers, often for use in school-level
education to simplify the construction of buggies and small
robots. Others are electrically equivalent but change the
form factor, sometimes retaining compatibility with shields,
sometimes not. Some variants use completely dierent processors, with varying levels of compatibility.

1.2.1

Ocial boards

Further information: List of Arduino boards and compatible systems


The original Arduino hardware is manufactured by the Italian company Smart Projects.[11] Some Arduino-branded
boards have been designed by the American company
SparkFun Electronics.[12] Sixteen versions of the Arduino
hardware have been commercially produced to date.
Example Arduino boards
Arduino Diecimila in Stoicheia
Arduino Duemilanove (rev 2009b)
Arduino UNO
Arduino Leonardo
Arduino Mega
Arduino MEGA 2560 R3 (front side)[a]
Arduino MEGA 2560 R3 (back side)[a]
Arduino Nano
Arduino Due (ARM-based)
LilyPad Arduino (rev 2007)
1. ^ Arduino - ArduinoBoardMega2560. arduino.cc.

1.4. DEVELOPMENT

Cite error: There are <ref group=lower-alpha> tags or


loop(): a function called repeatedly until the board
{{efn}} templates on this page, but the references will not
powers o
show without a {{reist|group=lower-alpha}} template or
{{notelist}} template (see the help page).
A typical rst program for a microcontroller simply blinks
an LED on and o. In the Arduino environment, the user
might write a program like this:[18]

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, GPS, Ethernet, LCD, or breadboarding
(prototyping). A number of shields can also be made
DIY.[13][14][15]
Example Arduino shields
Multiple shields can be stacked. In this example the
top shield contains a solderless breadboard.
Screw-terminal breakout shield in a wing-type format

Power LED (Red) and Integrated LED on Line 13 (Green) on Arduino Compatible Board (made in China)

Adafruit Motor Shield with screw terminals for con#dene LED_PIN 13 void setup() { pinMode(LED_PIN,
nection to motors
OUTPUT); // Enable pin 13 for digital output } void
Adafruit Datalogging Shield with a Secure Digital loop() { digitalWrite(LED_PIN, HIGH); // Turn on the
LED delay(1000); // Wait one second (1000 milliseconds)
(SD) card slot and real-time clock (RTC) chip
digitalWrite(LED_PIN, LOW); // Turn o the LED
HackARobot Fabric Shield designed for Arduino delay(1000); // Wait one second }
Nano to hook up motors and sensors such as gyroscope
or GPS, and other breakout boards such as WiFi, BlueMost Arduino boards contain an LED and a load resistor
tooth, RF, etc.
connected between the pin 13 and ground, which is a convenient feature for many simple tests.[18] The previous code
would not be seen by a standard C++ compiler as a valid
1.3 Software
program, so when the user clicks the Upload to I/O board
button in the IDE, a copy of the code is written to a tempoThe Arduino integrated development environment (IDE) rary le with an extra include header at the top and a very
is a cross-platform application written in Java, and derives simple main() function at the bottom, to make it a valid C++
from the IDE for the Processing programming language and program.
the Wiring projects. It is designed to introduce programThe Arduino IDE uses the GNU toolchain and AVR Libc
ming to artists and other newcomers unfamiliar with softto compile programs, and uses avrdude to upload programs
ware development. It includes a code editor with features
to the board.
such as syntax highlighting, brace matching, and automatic
indentation, and is also capable of compiling and uploading As the Arduino platform uses Atmel microcontrollers, Atprograms to the board with a single click. A program or mels development environment, AVR Studio or the newer
Atmel Studio, may also be used to develop software for the
code written for Arduino is called a sketch.[17]
Arduino.[19][20]
Arduino programs are written in C or C++. The Arduino
IDE comes with a software library called "Wiring" from
the original Wiring project, which makes many common
input/output operations much easier. The users need only to 1.4 Development
dene two functions to make an executable cyclic executive
program:
Arduino is open-source hardware: the Arduino hardware
reference designs are distributed under a Creative Com setup(): a function run once at the start of a program mons Attribution Share-Alike 2.5 license and are available
that can initialize settings
on the Arduino Web site. Layout and production les for

CHAPTER 1. ARDUINO

some versions of the Arduino hardware are also available.


The source code for the IDE is available and released under
the GNU General Public License, version 2.[21]

ArduinoPhone, a do-it-yourself cellphone[26][27]


GertDuino, an Arduino mate for the Raspberry Pi[28]

Although the hardware and software designs are freely


Water quality testing platform[29]
available under copyleft licenses, the developers have requested that the name Arduino be exclusive to the ocial
product and not be used for derivative works without permission. The ocial policy document on the use of the 1.6 Reception
Arduino name emphasizes that the project is open to incorporating work by others into the ocial product.[22] Sev- The Arduino project received an honorary mention in the
eral Arduino-compatible products commercially released Digital Communities category at the 2006 Prix Ars Elechave avoided the Arduino name by using "-duino name tronica.[30]
variants.[23]

1.7

Legal dispute

When the Arduino project started, the ve co-founders created a company, Arduino LLC, that owned all trademarks
associated with Arduino. The manufacture and sale of the
boards was to be done by external companies, and Arduino
LLC would get a royalty from them. In the founding bylaws of the company, it was specied that each of the ve
founders was to transfer ownership of the Arduino brand to
the newly formed company.
At the end of 2008, Gianluca Martinos company, Smart
Projects, registered the Arduino trademark in Italy and kept
this a secret from the other co-founders for about two years.
This was revealed when the Arduino company tried to register the trademark in other areas of the world (they originally
registered only in the US), and discovered that it was already
registered in Italy. Negotiations with Gianluca and his company to bring the trademark under control of the original
Arduino-compatible R3 UNO board produced in China without the Arduino company were not successful, and in 2014 Smart
Arduino logo, but with identical markings, including the Made in Projects began refusing to pay royalties. Smart Projects apItaly text
pointed a new CEO, Mr. Musto, who renamed the company
to Arduino SRL and created a website named arduino.org,
copying the graphics and layout of the original Arduino.cc.
This resulted in a rift in the Arduino development team, and
1.5 Applications
although all Arduino boards are still available to consumers,
and the designs are open source, the implications of this are
uncertain.[31][32][33]
See also: List of open-source hardware projects

Xoscillo, an open-source oscilloscope[24]


Scientic equipment[25]
Arduinome, a MIDI controller device that mimics the
Monome

In May 2015, Genuino was created around the world as


another trademark, held by Arduino LLC, and is currently
being used as Arduino LLCs brand name outside of the
US.[34]

1.8

See also

OBDuino, a trip computer that uses the on-board diagnostics interface found in most modern cars

Comparison of single-board computers

Ardupilot, drone software / hardware

Intel Edison

1.11. FURTHER READING

List of Arduino boards and compatible systems

[22] Policy. Arduino.cc. Retrieved 2013-01-18.

IOIO

[23] Freeduino Open Designs. Freeduino.org. Retrieved 200803-03.

1.9 Notes

[24] 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

[25] Pearce, Joshua M. 2012. Building Research Equipment


with Free, Open-Source Hardware. Science 337 (6100):
13031304. (open access)

[1] Arduino - Introduction. arduino.cc.


[2] Arduino - FAQ. arduino.cc.

[26] ArduinoPhone. Instructables.com (2013-07-17). Retrieved


on 2013-08-04.

[3] How many Arduinos are in the wild?" About 300,000.


Adafruit Industries. May 15, 2011. Retrieved 2013-05-26.

[27] DIY Cellphone, MIT

[4] Arduino FAQ With David Cuartielles. Malm University. April 5, 2013. Retrieved 2014-03-24.

[28] Raspberry Pi Spy. Introducing The GertDuino Add-on


Board For Raspberry Pi. Retrieved on 2014-11-09.

[5] David Kushner (26 Oct 2011). The Making of Arduino.


IEEE Spectrum.

[29] Bas Wijnen, G. C. Anzalone and Joshua M. Pearce, Opensource mobile water quality testing platform. Journal of Water, Sanitation and Hygiene for Development, 4(3) pp. 532
537 (2014). doi:10.2166/washdev.2014.137 open access

[6] Justin Lahart (27 November 2009). Taking an OpenSource Approach to Hardware. The Wall Street Journal.
Retrieved 7 September 2014.
[7] Rhizome - Interview with Casey Reas and Ben Fry. 200909-23. Retrieved 2014-08-23.
[8] Hardware Index. Arduino Project. Retrieved 2013-12-10.

[30] Ars Electronica Archiv. Retrieved 2015-03-27.


[31] Allan, Alasdair (6 March 2015). Arduino Wars: Group
Splits, Competing Products Revealed?". makezine.com.
Maker Media, Inc. Retrieved 21 April 2015.
[32] Banzi, Massimo (19 March 2015). Massimo Banzi: Fighting for Arduino. makezine.com. Maker Media, Inc. Retrieved 21 April 2015.

[9] Bare Bones Board.


[10] Boarduino.
[11] Redirect.... smartprj.com.
[12] Schmidt, M. ["Arduino: A Quick Start Guide"], Pragmatic
Bookshelf, January 22, 2011, Pg. 201
[13] Arduino breadboard shield: $10 & 10 mins. todbot blog.

[33] Williams, Elliot (28 March 2015). Arduino SRL to Distributors: Were the REAL Arduino". Hackaday.com. Hackaday.com. Retrieved 21 April 2015.
[34] Arduino Announces New Brand, Genuino, Manufacturing
Partnership with Adafruit - Make:". Make:. Retrieved 17
May 2015.

[14] Arduino Shields for Prototyping. tigoe.net.


[15] Jonathan Oxer. Arduino Shield list. Retrieved 5 Nov
2013.
[16] Arduino Software Release Notes. Arduino Project. Retrieved May 31, 2013.
[17] Programming Arduino Getting Started with Sketches.
McGraw-Hill. Nov 8, 2011. Retrieved 2013-03-28.

1.11

Further reading

Getting Started with Arduino; Massimo Banzi, Michael


Shiloh; 262 pages; 2014; ISBN 1-4493-6333-4.
Arduino For Dummies; John Nussey; 446 pages; 2013;
ISBN 978-1118446379.

[18] Blink Tutorial. Arduino.cc.


[19] Using Atmel Studio for Arduino development. Megunolink.com. Retrieved 2013-01-18.
[20] Using AVR Studio for Arduino development.
blaze.com. Retrieved 2013-01-18.
[21] The arduino source code. The arduino source code.

Eng-

Programming Arduino Next Steps: Going Further


with Sketches; Simon Monk; 2013; ISBN 9780071830256.
Exploring Arduino: Tools and Techniques for Engineering Wizardry; Jeremy Blum; 384 pages; 2013;
ISBN 978-1118549360.

CHAPTER 1. ARDUINO
Arduino Workshop: A Hands-On Introduction with 65
Projects; John Boxall; 392 pages; 2013; ISBN 9781593274481.
Beginning C for Arduino: Learn C Programming for
the Arduino and Compatible Microcontrollers; Jack
Purdum; 280 pages; 2012; ISBN 978-1430247760.
Programming Arduino:
Getting Started With
Sketches; Monk Simon; 162 pages; 2011; ISBN
978-0071784221.
Make: Electronics (Learning by Discovery); Charles
Platt; 352 pages; 2009; ISBN 978-0596153748.

1.12 External links


Ocial websites: arduino.cc (Arduino LLC) and
arduino.org (Arduino SRL)
Arduino The Documentary
Database, Vimeo

at the Internet Movie

Documentary about Arduino, Wired Magazine (Italian with English subtitles)


How to install additional Arduino libraries
Arduino cheat sheets
An online platform and collaboration platform for Arduino users
Examples of various Arduino projects
Arduino Board Pinout Diagrams: Due, Esplora,
Leonardo, Mega, Micro, Mini, Nano, Uno
Evolution tree for Arduino
Massimo Banzi interviewed on the TV show Triangulation on the TWiT.tv network
Massimo Banzi interviewed on the TV show FLOSS
weekly on the TWiT.tv network
Arduino Stack Exchange, questions and answers
Arduino, LLC v. Arduino S.R.L. et al; Federal district
court docket from the United States Courts Archive
Intel Edison Kit for Arduino (Hardware Guide), Intel,
February 2015

Chapter 2

Single-board microcontroller
In March 1976, Intel announced a single-board computer
product that integrated all the support components required
for their 8080 microprocessor, along with 1 kbyte 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.

The Make Controller Kit with an Atmel AT91SAM7X256 (ARM)


microcontroller.

A single-board microcontroller diers from a single-board


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
As they are usually low-cost hardware, and have an espe- train on some particular processor family and this internal
cially low capital cost for development, single-board mi- implementation is more important than the external funccrocontrollers have long been popular in education. They tion.
are also a popular means for developers to gain hands-on
experience with a new processor family.
A single-board microcontroller is a microcontroller built
onto a single printed circuit board. This board provides
all of the circuitry necessary for a useful control task:
microprocessor, I/O circuits, clock generator, RAM, stored
program memory and any support ICs necessary. The intention is that the board is immediately useful to an application developer, without them needing to spend time and
eort in developing the controller hardware.

2.2

2.1 Origins

Internal bus

The bus of the early single-board devices, such as the Z80


and 6502, was universally a Von Neumann architecture.
Program and data memory were accessed by the same
shared bus, even though they were stored in fundamentally
dierent types of memory: ROM for programs and RAM
for data. This bus architecture was needed to economise on

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.
7

CHAPTER 2. SINGLE-BOARD MICROCONTROLLER

the number of pins needed from the limited 40 available for


the processors ubiquitous dual-in-line IC package.
It was common to oer the internal bus through an expansion connector, or at least the space for such a connector
to be soldered on. This was a low-cost option and oered
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.

Arduino Diecimila with Atmel ATMEGA168

directly operate such devices as lamps or motors, so solidstate relays are operated by the microcontroller digital outputs, and inputs are isolated by signal conditioning levelshifting and protection circuits.

One or more analog inputs, with an analog multiplexer and


common analog to digital converter, are found on some microcontroller boards. Analog outputs may use a digitalto-analog converter, or on some microcontrollers may be
controlled by pulse-width modulation. As for discrete in2.3 External bus expansion
puts, external circuits may be required to scale inputs, or to
Some microcontroller boards using a general-purpose mi- provide such functions as bridge excitation or cold junction
croprocessor can bring the address and data bus of the compensation.
processor to an expansion connector, allowing additional To control component costs, many boards were designed
memory or peripherals to be added. This would provide with extra hardware interface circuits but the components
resources not already present on the single board system. for these circuits weren't installed and the board was left
Since not all systems require expansion, the connector may bare. The circuit was only added as an option on delivery,
be an option, with a mounting position provided for the con- or could be populated later.
nector for installation by the user if desired.
It is common practice for boards to include prototyping
areas, areas of the board already laid out as a solderable
breadboard area with the bus and power rails available, but
2.4 Input and output
without a dened circuit. Several controllers, particularly
those intended for training, also include a pluggable reMicrocontroller systems provide multiple forms of input usable breadboard for easy prototyping of extra I/O circuits
and output signals to allow application software to control that could be changed or removed for later projects.
an external real-world system. Discrete digital I/O provides a single bit of data (on, or o). Analog signals, representing a continuously variable range such as temperature
2.5 Communications and user interor pressure, can also be inputs and outputs for microcontrollers.
faces
Discrete digital inputs and outputs might only be buered
from the microprocessor data bus by an addressable latch,
or might be operated by a specialized input/output integrated circuit such as an Intel 8255 or Motorola 6821
parallel input/output adapter. Later single-chip micrcontrollers have input and output pins available. The input/output circuits usually do not provide enough current to

Communications interfaces vary depending on the age of


the microcontroller system. Early systems might implement
a serial port to provide RS-232 or current loop. The serial port could be used by the application program, or could
be used, in conjunction with a monitor ROM, to transfer
programs into the microcontroller memory. Current mi-

2.6. PROGRAMMING

crocontrollers may support USB, wireless network (Wi-Fi,


ZigBee, or others) ports, or provide an Ethernet connection,
and may support a TCP/IP protocol stack. Some devices
have rmware available to implement a Web server, allowing an application developer to rapidly build a Web-enabled
instrument or system.

2.6 Programming
Many of the earliest systems had no internal facility for
programming at all, and relied on a separate host system. This programming was typically in assembly language,
sometimes C or even PL/M, and then cross-assembled or
cross-compiled on the host. Some single-board microcontrollers support a BASIC language system, allowing programs to be developed on the target hardware. Hosted development allows all the storage and peripherals of a desktop computer to be used, providing a more powerful development environment.

2.6.1

EPROM burning

Early microcontrollers relied on erasable programmable


read-only memory (EPROM) devices to hold the application program. The completed object code from a host system would be burned onto an EPROM with an EPROM
programmer,[3] this EPROM was then physically plugged
into the board. As the EPROM would be removed and
replaced many times during program development, it was
usual to provide a ZIF socket to avoid wear or damage.
Erasing an EPROM with a UV eraser takes a considerable
time, and so it was also usual for a developer to have several
EPROMs in circulation at any one time.

A single-board computer with a hex keypad and 7-segment display

paper rst. Its arguable as to which process was more timeconsuming and error prone: assembling by hand, or keying
byte-by-byte.

Single-board keypad and calculator display microcontrollers of this type were very similar to some low-end
microcomputers of the time, such as the KIM-1 or the
Microprofessor I.[4] Some of these microprocessor trainer
systems are still in production today, as a very low-cost
introduction to microprocessors at the hardware program[5]
Some microcontroller devices were available with on-board ming level.
EPROM; these, too, would be programmed in a separate
burner, then put into a socket on the target system.

2.6.3

Hosted development

The use of EPROM sockets allowed eld update of the application program, either to x errors or to provide updated
When desktop personal computers appeared, initially
features.
CP/M or Apple II, then later the IBM PC and compatibles, there was a shift to hosted development. Hardware
was now cheaper and RAM capacity had expanded such
2.6.2 Keypad monitors
that it was possible to download the program through the
Where the single-board controller formed the entire de- serial port and hold it in RAM. This massive reduction in
velopment environment (typically in education) the board the cycle time to test a new version of a program gave an
might also be provided with a simple hexadecimal keypad, equally large boost in development speed.
calculator-style LED display and a monitor program set
permanently in ROM. This monitor allowed machine code
programs to be entered directly through the keyboard and
held in RAM. These programs were in machine code, not
even in assembly language, and were assembled by hand on

This program memory was still volatile and would be lost if


power was turned o. Flash memory was not yet available
at a viable price. As a completed controller project usually
required to be non-volatile, the nal step in a project was
often to burn an EPROM again.

10

CHAPTER 2. SINGLE-BOARD MICROCONTROLLER

2.7 Single-chip microcontrollers

transparent erasure window. During program development


it was still necessary to burn EPROMs, this time the entire
controller IC, and so ZIF sockets would be provided.
With the development of aordable EEPROM and eventually ash memory, it became practical to attach the controller permanently to the board and to download program
code to it through a serial connection to a host computer.
This was termed "in-circuit programming". Erasure of
old programs was carried out by either over-writing them
with a new download, or bulk erasing them electrically (for
EEPROM) which was slower, but could be carried out insitu.

A 8048-family microcontroller with on-board UV EPROM, the


8749

The main function of the controller board was now to carry


the support circuits for this serial interface, or USB on later
boards. As a further convenience feature during development, many boards also carried low-cost features like LED
monitors of the I/O lines or reset switches mounted on
board.

2.8

Single-board
today

microcontrollers

A development board for a PIC family device

Single-chip microcontrollers such as the 8748 combined


many of the features of the previous boards into a single
IC package. Single-chip microcontrollers integrate memory (both RAM and ROM) on-package and so do not need
to expose the data and address bus through the IC packages pins. These pins are then available for I/O lines. These
changes reduce the area required on a printed circuit board
and simplify the design of a single-board microcontroller.
Examples of single-chip microcontrollers include:
8748
PIC

Dwengo board

Atmel AVR

2.7.1

Program memory

For production use as embedded systems, the on-board


ROM would be either mask programmed at the chip factory or one-time programmed (OTP) by the developer as
a PROM. PROMs often used the same UV EPROM technology for the chip, but in a cheaper package without the

Microcontrollers are now cheap and simple to design circuit


boards for. Development host systems are also cheap, especially when using open source software. Higher level programming languages abstract details of the hardware, making dierences between specic processors less obvious to
the application programmer. Rewritable ash memory has
replaced slow programming cycles, at least during program
development. Accordingly almost all development now is
based on cross-compilation from personal computers and

2.11. EXTERNAL LINKS


download to the controller board through a serial-like interface, usually appearing to the host as a USB device.
The original market demand of a simplied board implementation is no longer so relevant to microcontrollers.
Single-board microcontrollers are still important, but have
shifted their focus to:

11

[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.
[5] Microprofessor Training System. Flite Electronics International.

Easily accessible platforms aimed at traditionally [6] Arduinos home page


non-programmer groups, such as artists, design- [7] Project homepage. Dwengo.
ers, hobbyists, and others interested in creating interactive objects or environments.[6] Some typical [8] Arduino Users forum
projects in 2011 included; the backup control of DMX
[9] Project homepage. Arduino project.
stage lights and special eects, multi-camera control, autonomous ghting robots, controlling bluetooth [10] Wiring.orgs Wiring development platform home page
projects from a computer or smart phone,[7] LEDs and
multiplexing, displays, audio, motors, mechanics, and [11] Wiring: Hardware. Wiring project.
power control.[8] These controllers may be embedded
to form part of a physical computing project. Popular
choices for this work are the Arduino,[9] Dwengo[7] or 2.11 External links
the Wiring (development platform).[10][11]
Atmega8 Development board - DIY AVR develop Technology demonstrator boards for innovative proment board based on Atmels AVR microcontroller
cessors or peripheral features:
AVR Buttery
Parallax Propeller

2.9 See also


Single-board computer
Microprocessor development board
Embedded system
PLC
Arduino
Make Controller Kit
PICAXE
BASIC Stamp

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

Chapter 3

Atmel AVR

AVR logo.

Atmel ATmega8 in 28-pin narrow DIP

house in Trondheim, Norway, called Nordic VLSI at the


time, now Nordic Semiconductor, where Bogen and Wollan
were working as students. It was known as a RISC (Micro
RISC) and was available as silicon IP/building 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.
Among the rst of the AVR line was the AT90S8515, which
in a 40-pin DIP package has the same pinout as an 8051
microcontroller, including the external multiplexed address
and data bus. The polarity of the RESET line was opposite
(8051s having an active-high RESET, while the AVR has
an active-low RESET), but other than that the pinout was
identical.

The AVR 8-bit microcontroller architecture was introduced


The AVR is a modied Harvard architecture 8-bit RISC in 1997. By 2003, Atmel had shipped 500 million AVR
single-chip microcontroller, which was developed by Atmel ash microcontrollers.[6]
in 1996. The AVR was one of the rst microcontroller
families to use on-chip ash memory for program storage,
as opposed to one-time programmable ROM, EPROM, or
EEPROM used by other microcontrollers at the time.

3.1 Brief history

3.2

Device overview

The AVR is a modied Harvard architecture machine,


The AVR architecture was conceived by two students at where program and data are stored in separate physical
[1]
the Norwegian Institute of Technology (NTH), Alf-Egil memory systems that appear in dierent address spaces, but
Bogen[2] and Vegard Wollan.[3]
having the ability to read data items from program memory
The original AVR MCU was developed at a local ASIC using special instructions.
12

3.2. DEVICE OVERVIEW

3.2.1

Basic families

AVRs are generally classied into following:


tinyAVR the ATtiny series
0.516 kB program memory
632-pin package
Limited peripheral set
megaAVR the ATmega series
4512 kB program memory
28100-pin package
Extended instruction set (multiply instructions
and instructions for handling larger program
memories)
Extensive peripheral set
XMEGA the ATxmega series
16384 kB program memory
4464100-pin package (A4, A3, A1)
Extended performance features, such as DMA,
Event System, and cryptography support.
Extensive peripheral set with ADCs
Application-specic AVR

13

3.2.2

Device architecture

Flash, EEPROM, and SRAM are all integrated onto a single


chip, removing the need for external memory in most applications. Some devices have a parallel external bus option to
allow adding additional data memory or memory-mapped
devices. Almost all devices (except the smallest TinyAVR
chips) have serial interfaces, which can be used to connect
larger serial EEPROMs or ash chips.
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 on-chip
ash. However, this limitation does not apply to the AT94
FPSLIC AVR/FPGA chips.
Internal data memory
The data address space consists of the register le, I/O registers, and SRAM.

megaAVRs with special features not found on


the other members of the AVR family, such
as LCD controller, USB controller, advanced Internal registers
PWM, CAN, etc.
FPSLIC (AVR with FPGA)
FPGA 5K to 40K gates
SRAM for the AVR program code, unlike all
other AVRs
AVR core can run at up to 50 MHz[7]
32-bit AVRs
Main article: AVR32
In 2006 Atmel released microcontrollers based
on the 32-bit AVR32 architecture. They include
SIMD and DSP instructions, along with other
audio- and video-processing features. This 32bit family of devices is intended to compete with
the ARM-based processors. The instruction set
is similar to other RISC cores, but it is not compatible with the original AVR or any of the various ARM cores.

Atmel ATxmega128A1 in 100-pin TQFP package

The AVRs have 32 single-byte registers and are classied


as 8-bit RISC devices.
In the tinyAVR and megaAVR variants of the AVR architecture, the working registers are mapped in as the rst 32

14
memory addresses (000016 001F16 ), followed by 64 I/O
registers (002016 005F16 ). In devices with many peripherals, these registers are followed by 160 extended I/O
registers, only accessible as memory-mapped I/O (006016
00FF16 ).
Actual SRAM starts after these register sections, at address
006016 or, in devices with extended I/O, at 010016 .

CHAPTER 3. ATMEL AVR


pull-up resistor on pins congured as inputs.
PINx: Input register, used to read an input signal.
On some devices (but not all, check the datasheet),
this register can be used for pin toggling: writing a
logic one to a PINx bit toggles the corresponding bit in
PORTx, irrespective of the setting of the DDRx bit.[8]

Even though there are separate addressing schemes and optimized opcodes for accessing the register le and the rst xmegaAVR have additional registers for push/pull, totem64 I/O registers, all can still be addressed and manipulated pole and pullup congurations.
as if they were in SRAM.
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.

EEPROM
Almost all AVR microcontrollers have internal EEPROM
for semi-permanent data storage. Like ash memory, EEPROM can maintain its contents when electrical power is removed.
In most variants of the AVR architecture, this internal EEPROM memory is not mapped into the MCUs addressable
memory space. It can only be accessed the same way an
external peripheral device is, using special pointer registers
and read/write instructions, which makes EEPROM access
much slower than other internal RAM.

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 .

However, some devices in the SecureAVR (AT90SC)


family[9] use a special EEPROM mapping to the data or
program memory, depending on the conguration. The
XMEGA family also allows the EEPROM to be mapped
into the data address space.

GPIO ports

3.2.3

Since the number of writes to EEPROM is not unlimited


Atmel species 100,000 write cycles in their datasheets
a well designed EEPROM write routine should compare
the contents of an EEPROM address with desired contents
and only perform an actual write if the contents need to be
changed.
Note that erase and write can be performed separately in
many cases, byte-by-byte, which may also help prolong life
when bits only need to be set to all 1s (erase) or selectively
cleared to 0s (write).

Program execution

Each GPIO port on a tiny or mega AVR drives up to


eight pins and is controlled by three 8-bit registers: DDRx, Atmels AVRs have a two-stage, single-level pipeline design. This means the next machine instruction is fetched
PORTx and PINx, where x is the port identier.
as the current one is executing. Most instructions take just
one or two clock cycles, making AVRs relatively fast among
DDRx: Data Direction Register, congures the pins as eight-bit microcontrollers.
either inputs or outputs.
The AVR processors were designed with the ecient exe PORTx: Output port register. Sets the output value cution of compiled C code in mind and have several built-in
on pins congured as outputs. Enables or disables the pointers for the task.

3.2. DEVICE OVERVIEW

3.2.4

Instruction set

Main article: Atmel AVR instruction set

15
clock by up to 1024. This prescaler can be recongured by
software during run-time, allowing the clock speed to be
optimized.

Since all operations (excluding multiplication and 16-bit


add/subtract) on registers R0R31 are single-cycle, the
AVR can achieve up to 1 MIPS per MHz, i.e. an 8 MHz
processor can achieve up to 8 MIPS. Loads and stores
to/from memory take two cycles, branching takes two cycles. Branches in the latest 3-byte PC parts such as AT Pointer registers X, Y, and Z have addressing capabil- mega2560 are one cycle slower than on previous devices.
ities that are dierent from each other.

The AVR instruction set is more orthogonal than those


of most eight-bit microcontrollers, in particular the 8051
clones and PIC microcontrollers with which AVR competes
today. However, it is not completely regular:

Register locations R0 to R15 have dierent addressing 3.2.6 Development


capabilities than register locations R16 to R31.
AVRs have a large following due to the free and inexpensive
I/O ports 0 to 31 have dierent addressing capabilities development tools available, including reasonably priced
than I/O ports 32 to 63.
development boards and free development software. The
CLR aects ags, while SER does not, even though AVRs are sold under various names that share the same bathey are complementary instructions. CLR set all bits sic core, but with dierent peripheral and memory comto zero, and SER sets them to one. (Note that CLR binations. Compatibility between chips in each family is
is pseudo-op for EOR R, R; and SER is short for fairly good, although I/O controller features may vary.
LDI R,$FF. Math operations such as EOR modify See external links for sites relating to AVR development.
ags, while moves/loads/stores/branches such as LDI
do not.)

3.2.7

Features

Accessing read-only data stored in the program memory (ash) requires special LPM instructions; the ash Current AVRs oer a wide range of features:
bus is otherwise reserved for instruction memory.
Multifunction, bi-directional general-purpose I/O
Additionally, some chip-specic dierences aect code
ports with congurable, built-in pull-up resistors
generation. Code pointers (including return addresses on
Multiple internal oscillators, including RC oscillator
the stack) are two bytes long on chips with up to 128 kBytes
without external parts
of ash memory, but three bytes long on larger chips; not
all chips have hardware multipliers; chips with over 8 kB of
Internal, self-programmable instruction ash memory
ash have branch and call instructions with longer ranges;
up to 256 kB (384 kB on XMega)
and so forth.
In-system programmable using serial/parallel
The mostly regular instruction set makes programming it
low-voltage proprietary interfaces or JTAG
using C (or even Ada) compilers fairly straightforward.
Optional boot code section with independent
GCC has included AVR support for quite some time, and
lock bits for protection
that support is widely used. In fact, Atmel solicited input
from major developers of compilers for small microcon On-chip debugging (OCD) support through JTAG or
trollers, to determine the instruction set features that were
debugWIRE on most devices
most useful in a compiler for high-level languages.
The JTAG signals (TMS, TDI, TDO, and TCK)
are multiplexed on GPIOs. These pins can be
congured to function as JTAG or GPIO de3.2.5 MCU speed
pending on the setting of a fuse bit, which can
be programmed via ISP or HVSP. By default,
The AVR line can normally support clock speeds from 0
AVRs with JTAG come with the JTAG interface
to 20 MHz, with some devices reaching 32 MHz. Lowerenabled.
powered operation usually requires a reduced clock speed.
debugWIRE uses the /RESET pin as a biAll recent (Tiny, Mega, and Xmega, but not 90S) AVRs
directional communication channel to access onfeature an on-chip oscillator, removing the need for exterchip debug circuitry. It is present on devices with
nal clocks or resonator circuitry. Some AVRs also have
lower pin counts, as it only requires one pin.
a system clock prescaler that can divide down the system

16

CHAPTER 3. ATMEL AVR

Internal data EEPROM up to 4 kB

CAN controller support

Internal SRAM up to 16 kB (32 kB on XMega)

USB controller support

External 64 kB little endian data space on certain models, including the Mega8515 and Mega162.

Proper full-speed (12 Mbit/s) hardware & Hub


controller with embedded AVR.

The external data space is overlaid with the internal data space, such that the full 64 kB address
space does not appear on the external bus and accesses to e.g. address 010016 will access internal
RAM, not the external bus.

Also freely available low-speed (1.5 Mbit/s)


(HID) bitbanging software emulations

In certain members of the XMega series, the external data space has been enhanced to support
both SRAM and SDRAM. As well, the data addressing modes have been expanded to allow up
to 16 MB of data memory to be directly addressed.
AVRs generally do not support executing code
from external memory. Some ASSPs using the
AVR core do support external program memory.
8-bit and 16-bit timers

Ethernet controller support


LCD controller support
Low-voltage devices operating down to 1.8 V (to 0.7
V for parts with built-in DCDC upconverter)
picoPower devices
DMA controllers and event system peripheral communication.
Fast cryptography support for AES and DES

3.3

Programming interfaces

PWM output (some devices have an enhanced


PWM peripheral which includes a dead-time
There are many means to load program code into an AVR
generator)
chip. The methods to program AVR chips varies from AVR
Input capture that record a time stamp triggered family to family. Most of the methods described below use
by a signal edge
the RESET line to enter programming mode. In order to
avoid the chip accidentally entering such mode, it is advised
Analog comparator
to connect a pull-up resistor between the RESET pin and the
10 or 12-bit A/D converters, with multiplex of up to positive power supply.[14]
16 channels
12-bit D/A converters

3.3.1

ISP

A variety of serial interfaces, including


IC compatible Two-Wire Interface (TWI)
Synchronous/asynchronous serial peripherals
(UART/USART) (used with RS-232, RS-485,
and more)
Serial Peripheral Interface Bus (SPI)
Universal Serial Interface (USI): a multi-purpose
hardware communication module that can be
used to implement an SPI,[10] I2 C[11][12] or
UART[13] interface.
Brownout detection
Watchdog timer (WDT)

MISO

1
1

VCC

MOSI

VCC

SCK

MOSI

NC

GND

RST

GND

RST

GND

SCK

GND

MISO

10

GND

ISP
HEADERS
TOP
VIEW

6- and 10-pin ISP header diagrams

The in-system programming (ISP) programming method is


functionally
performed through SPI, plus some twiddling
Multiple power-saving sleep modes
of the Reset line. As long as the SPI pins of the AVR are
Lighting and motor control (PWM-specic) controller not connected to anything disruptive, the AVR chip can stay
models
soldered on a PCB while reprogramming. All that is needed

3.4. DEBUGGING INTERFACES

17

is a 6-pin connector and programming adapter. This is the Ethernet adapter like PXE. Atmel has application notes and
most common way to develop with an AVR.
code pertaining to many bus interfaces.[18][19][20][21]
The Atmel AVRISP mkII device connects to a computers
USB port and performs in-system programming using At3.3.6
mels software.
AVRDUDE (AVR Downloader/UploaDEr) runs on Linux,
FreeBSD, Windows, and Mac OS X, and supports a variety of in-system programming hardware, including Atmel AVRISP mkII, Atmel JTAG ICE, older Atmel serialport based programmers, and various third-party and doit-yourself programmers.[15]

The AT90SC series of AVRs are available with a factory


mask-ROM rather than ash for program memory.[22] Because of the large up-front cost and minimum order quantity, a mask-ROM is only cost-eective for high-production
runs.

3.3.7
3.3.2

aWire

PDI

The Program and Debug Interface (PDI) is an Atmel proprietary interface for external programming and on-chip debugging of XMEGA devices. The PDI supports high-speed
programming of all non-volatile memory (NVM) spaces;
ash, EEPROM, fuses, lock-bits and the User Signature
Row. This is done by accessing the XMEGA NVM controller through the PDI interface, and executing NVM controller commands. The PDI is a 2-pin interface using the
Reset pin for clock input (PDI_CLK) and a dedicated data
pin (PDI_DATA) for input and output.[16]

aWire is a new one-wire debug interface available on the


new UC3L AVR32 devices.

3.4

High-voltage serial

Debugging interfaces

The AVR oers several options for debugging, mostly involving on-chip debugging while the chip is in the target
system.

3.4.1
3.3.3

ROM

debugWIRE

debugWIRETM is Atmels solution for providing on-chip


debug capabilities via a single microcontroller pin. It is particularly useful for lower pin count parts which cannot provide the four spare pins needed for JTAG. The JTAGICE
mkII, mkIII and the AVR Dragon support debugWIRE. debugWIRE was developed after the original JTAGICE release, and now clones support it.

High-voltage serial programming (HVSP)[17] is mostly the


backup mode on smaller AVRs. An 8-pin AVR package
does not leave many unique signal combinations to 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. The high voltage mode
can also be used in some devices where the reset pin has
been disabled by fuses.
3.4.2

JTAG

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 accessing inHigh-voltage parallel programming (HVPP) is considered
ternal memory and registers, setting breakpoints on code,
the nal resort and may be the only way to correct bad
and single-stepping execution to observe system behaviour.
fuse settings on an AVR chip.
Atmel provides a series of JTAG adapters for the AVR:

3.3.4

High-voltage parallel

3.3.5

Bootloader

Most AVR models can reserve a bootloader region, 256 B


to 4 KB, where re-programming code can reside. At reset,
the bootloader runs rst and does some user-programmed
determination whether to re-program or to jump to the main
application. The code can re-program through any interface
available, or it could read an encrypted binary through an

1. The JTAGICE 3[24] is the latest member of the JTAGICE family (JTAGICE mkIII). It supports JTAG,
aWire, SPI, and PDI interfaces.
2. The JTAGICE mkII[25] replaces the JTAGICE and is
similarly priced. The JTAGICE mkII interfaces to the
PC via USB, and supports both JTAG and the newer
debugWIRE interface. Numerous third-party clones

18

CHAPTER 3. ATMEL AVR

of the Atmel JTAGICE mkII device started shipping The base board is similar to the STK500, in that it provides
after Atmel released the communication protocol.[26] a power supply, clock, in-system programming, an RS-232
port and a CAN (Controller Area Network, an automotive
3. The AVR Dragon[27] is a low-cost (approximately $50) standard) port via DE9 connectors, and stake pins for all of
substitute for the JTAGICE mkII for certain target the GPIO signals from the target device.
parts. The AVR Dragon provides in-system serial programming, high-voltage serial programming and par- The target boards have ZIF sockets for DIP, SOIC, QFN,
allel programming, as well as JTAG or debugWIRE or QFP packages, depending on the board.
emulation for parts with 32 KB of program memory or The signal routing board sits between the base board and
less. ATMEL changed the debugging feature of AVR the target board, and routes the signals to the proper pin on
Dragon with the latest rmware of AVR Studio 4 - the device board. There are many dierent signal routing
AVR Studio 5 and now it supports devices over 32 KB boards that could be used with a single target board, deof program memory.
pending on what device is in the ZIF socket.
The STK600 allows in-system programming from the PC
via USB, leaving the RS-232 port available for the target
microcontroller. A 4 pin header on the STK600 labeled
'RS-232 spare' can connect any TTL level USART port on
the chip to an onboard MAX232 chip to translate the signals
JTAG can also be used to perform a boundary scan test,[28] to RS-232 levels. The RS-232 signals are connected to the
which tests the electrical connections between AVRs and RX, TX, CTS, and RTS pins on the DB-9 connector.
other boundary scan capable chips in a system. Boundary
scan is well-suited for a production line, while the hobbyist
3.5.2 STK500 starter kit
is probably better o testing with a multimeter or oscilloscope.
The STK500 starter kit and development system features
ISP and high voltage programming (HVP) for all AVR
devices, either directly or through extension boards. The
3.5 Development tools and evalua- board is tted with DIP sockets for all AVRs available in
DIP packages.
tion kits
4. The JTAGICE adapter interfaces to the PC via a standard serial port. Although the JTAGICE adapter has
been declared "end-of-life" by Atmel, it is still supported in AVR Studio and other tools.

STK500 Expansion Modules: Several expansion modules


are available for the STK500 board:
STK501 - Adds support for microcontrollers in 64-pin
TQFP packages.
STK502 - Adds support for LCD AVRs in 64-pin
TQFP packages.
STK503 - Adds support for microcontrollers in 100pin TQFP packages.
STK504 - Adds support for LCD AVRs in 100-pin
TQFP packages.
Atmel STK500 development board

Ocial Atmel AVR development tools and evaluation kits


contain a number of starter kits and debugging tools with
support for most AVR devices:

3.5.1

STK600 starter kit

The STK600 starter kit and development system is an update to the STK500.[29] The STK600 uses a base board, a
signal routing board, and a target board.

STK505 - Adds support for 14 and 20-pin AVRs.


STK520 - Adds support for 14 and 20, and 32-pin microcontrollers from the AT90PWM and ATmega family.
STK524 - Adds support for the ATmega32M1/C1 32pin CAN/LIN/Motor Control family.
STK525 - Adds support for the AT90USB microcontrollers in 64-pin TQFP packages.
STK526 - Adds support for the AT90USB microcontrollers in 32-pin TQFP packages

3.5. DEVELOPMENT TOOLS AND EVALUATION KITS

3.5.3

STK200 starter kit

The STK200 starter kit and development system has a DIP


socket that can host an AVR chip in a 40, 20, or 8-pin package. The board has a 4 MHz clock source, 8 light-emitting
diode(LED)s, 8 input buttons, an RS-232 port, a socket for
a 32k SRAM and numerous general I/O. The chip can be
programmed with a dongle connected to the parallel port.

19
ory has been removed in AVR Studio 4.18.[32] The Dragon
has a small prototype area which can accommodate an 8,
28, or 40-pin AVR, including connections to power and
programming pins. There is no area for any additional circuitry, although this can be provided by a third-party product called the Dragon Rider.[33]

3.5.6

JTAGICE mkI

The JTAG In Circuit Emulator (JTAGICE) debugging tool


supports on-chip debugging (OCD) of AVRs with a JTAG
The AVRISP and AVRISP mkII are inexpensive tools al- interface. The original JTAGICE mkI uses an RS-232 interface to a PC and can only program AVRs with a JTAG
lowing all AVRs to be programmed via ICSP.
interface. The JTAGICE mkI is no longer in production,
The AVRISP connects to a PC via a serial port and draws
however it has been replaced by the JTAGICE mkII.
power from the target system. The AVRISP allows using
either of the standard ICSP pinouts, either the 10-pin or
6-pin connector. The AVRISP has been discontinued, re- 3.5.7 JTAGICE mkII
placed by the AVRISP mkII.
The AVRISP mkII connects to a PC via USB and draws The JTAGICE mkII debugging tool supports on-chip depower from USB. LEDs visible through the translucent case bugging (OCD) of AVRs with SPI, JTAG, PDI, and debugWIRE interfaces. The debugWire interface enables debugindicate the state of target power.
ging using only one pin (the Reset pin), allowing debugging
As the AVRISP mkII lacks driver/buer ICs,[30] it can have of applications running on low pin-count microcontrollers.
trouble programming target boards with multiple loads on
its SPI lines. In such occurrences, a programmer capable The JTAGICE mkII connects using USB, but there is an
of sourcing greater current is required. Alternatively, the alternate connection via a serial port, which requires using
AVRISP mkII can still be used if low-value (~150 ohm) a separate power supply. In addition to JTAG, the mkII
load-limiting resistors can be placed on the SPI lines before supports ISP programming (using 6-pin or 10-pin adapters).
Both the USB and serial links use a variant of the STK500
each peripheral device.
protocol.

3.5.4

AVRISP and AVRISP mkII

3.5.5

AVR Dragon

3.5.8

JTAGICE3

The JTAGICE3 updates the mkII with more advanced debugging capabilities and faster programming. It connects
via USB and supports the JTAG, aWire, SPI, and PDI
interfaces.[34] The kit includes several adapters for use with
most interface pinouts.

3.5.9

AVR ONE!

The AVR ONE! is a professional development tool for all


Atmel 8-bit and 32-bit AVR devices with On-Chip Debug
capability. It supports SPI, JTAG, PDI, and aWire proAVR Dragon with ISP programming cable and attached, blue ZIF gramming modes and debugging using debugWIRE, JTAG,
Socket.
PDI, and aWire interfaces.[35]
The Atmel Dragon is an inexpensive tool which connects
to a PC via USB. The Dragon can program all AVRs via 3.5.10 Buttery demonstration board
JTAG, HVP, PDI,[31] or ICSP. The Dragon also allows debugging of all AVRs via JTAG, PDI, or debugWire; a previ- Main article: AVR Buttery
ous limitation to devices with 32 kB or less program mem-

20

CHAPTER 3. ATMEL AVR


ature sensor. The board includes software, which lets it act
as a USB mass storage device (its documentation is shipped
on the DataFlash), a USB joystick, and more. To support
the USB host capability, it must be operated from a battery, but when running as a USB peripheral, it only needs
the power provided over USB.
Only the JTAG port uses conventional 2.54 mm pinout. All
the other AVR I/O ports require more compact 1.27 mm
headers.

The AVR Dragon can both program and debug since the
32 KB limitation was removed in AVR Studio 4.18, and
the JTAGICE mkII is capable of both programming and
debugging the processor. The processor can also be programmed through USB from a Windows or Linux host, usAtmel ATmega169 in 64-pad MLF package on the back of an Atmel ing the USB Device Firmware Update protocols. Atmel
AVR Buttery board
ships proprietary (source code included but distribution restricted) example programs and a USB protocol stack with
The very popular AVR Buttery demonstration board is a the device.
self-contained, battery-powered computer running the At- LUFA[37] is a third-party free software (MIT license) USB
mel AVR ATmega169V microcontroller. It was built to protocol stack for the USBKey and other 8-bit USB AVRs.
show-o the AVR family, especially a then new built-in
LCD interface. The board includes the LCD screen, joystick, speaker, serial port, real time clock (RTC), ash 3.5.12 Raven wireless kit
memory chip, and both temperature and voltage sensors.
Earlier versions of the AVR Buttery also contained a CdS The RAVEN kit supports wireless development using Atphotoresistor; it is not present on Buttery boards produced mels IEEE 802.15.4 chipsets, for ZigBee and other wireafter June 2006 to allow RoHS compliance.[36] The small less stacks. It resembles a pair of wireless more-powerful
board has a shirt pin on its back so it can be worn as a name Buttery cards, plus a wireless USBKey; and costing about
badge.
that much (under $US100). All these boards support
The AVR Buttery comes preloaded with software to JTAG-based development.
demonstrate the capabilities of the microcontroller. Fac- The kit includes two AVR Raven boards, each with a 2.4
tory rmware can scroll your name, display the sensor read- GHz transceiver supporting IEEE 802.15.4 (and a freely
ings, and show the time. The AVR Buttery also has licensed ZigBee stack). The radios are driven with ATa piezoelectric transducer that can be used to reproduce mega1284p processors, which are supported by a custom
sounds and music.
segmented LCD display driven by an ATmega3290p proThe AVR Buttery demonstrates LCD driving by running a cessor. Raven peripherals resemble the Buttery: piezo
14-segment, six alpha-numeric character display. However, speaker, DataFlash (bigger), external EEPROM, sensors,
32 kHz crystal for RTC, and so on. These are intended for
the LCD interface consumes many of the I/O pins.
use in developing remote sensor nodes, to control relays, or
The Butterys ATmega169 CPU is capable of speeds up to whatever is needed.
8 MHz, but it is factory set by software to 2 MHz to preserve
the button battery life. A pre-installed bootloader program The USB stick uses an AT90USB1287 for connections to
allows the board to be re-programmed via a standard RS- a USB host and to the 2.4 GHz wireless links. These are
232 serial plug with new programs that users can write with intended to monitor and control the remote nodes, relying
on host power rather than local batteries.
the free Atmel IDE tools.

3.5.11

AT90USBKey

This small board, about half the size of a business card, is


priced at slightly more than an AVR Buttery. It includes
an AT90USB1287 with USB On-The-Go (OTG) support,
16 MB of DataFlash, LEDs, a small joystick, and a temper-

3.5.13

Third-party programmers

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.

3.7. FPGA CLONES

3.6 Atmel AVR usage

21
in board versions older than the Diecimila). The ATmega1280 and ATmega2560, with more pinout and memory capabilities, have also been employed to develop the
Arduino Mega platform. Arduino boards can be used with
its language and IDE, or with more conventional programming environments (C, assembler, etc.) as just standardized
and widely available AVR platforms.
USB-based AVRs have been used in the Microsoft Xbox
hand controllers. The link between the controllers and
Xbox is USB.

Atmel AVR ATmega328 28-pin DIP on an Arduino Duemilanove


board

Numerous companies produce AVR-based microcontroller


boards intended for use by hobbyists, robot builders,
experimenters and small system developers including:
Cubloc,[38] gnusb,[39] BasicX,[40] Oak Micros,[41] ZX
Microcontrollers,[42] and myAVR.[43] There is also a large
community of Arduino-compatible boards supporting similar users.
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.[44]

3.7

FPGA clones

With the growing popularity of FPGAs among the open


source community, people have started developing open
source processors compatible with the AVR instruction
set. The OpenCores website lists the following major AVR
clone projects:
pAVR,[45] 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,[46] written in VHDL, is a clone aimed at being as close as possible to the ATmega103.
Navr[47] written in Verilog, implements all Classic
Core instructions and is aimed at high performance
and low resource usage. It does not support interrupts.
Atmel AVR ATmega8 28-pin DIP on a custom development board

AVRs have been used in various automotive applications


such as security, safety, powertrain and entertainment systems. Atmel has recently launched a new publication Atmel Automotive Compilation to help developers with automotive applications. Some current usages are in BMW,
Daimler-Chrysler and TRW.
The Arduino physical computing platform is based on
an ATmega328 microcontroller (ATmega168 or ATmega8

the opencores project CPU lecture [48] written in


VHDL by Dr. Jrgen Sauermann explains in detail
how to design a complete AVR based System on a
Chip (SoC).

3.8

See also

Arduino
AVR32

22

CHAPTER 3. ATMEL AVR

3.9 References

[22] Atmels Self-Programming Flash Microcontrollers (PDF).


Retrieved 2012-09-19.

[1] Since 1996, NTH has become part of the Norwegian University of Science and Technology (NTNU)

[23] Guide to understanding JTAG and security fuses on the


AVR. Retrieved 2012-09-19.

[2] alfbogen.com blog

[24] JTAGICE 3- Atmel Corporation. Atmel.com. Retrieved


2012-09-19.

[3] The Story of AVR. youtube.com.


[4] The AVR Microcontroller and C Compiler Co-Design
(PDF). Retrieved 2012-09-19.
[5] UNSW School of Computer Science and Engineering General AVR Info. Cse.unsw.edu.au. Retrieved 2012-0919.
[6] Atmel press release. Atmels AVR Microcontroller Ships
500 Million Units.

[25] AVR JTAGICE mkII. Atmel. Retrieved 13 January 2013.


[26] JTAGICE mkII Communication Protocol (PDF). Retrieved 2012-09-19.
[27] AVR Dragon. Atmel. Retrieved 13 January 2013.
[28] JTAGICE Press Release, 2004.
[29] STK600. Atmel. Retrieved 13 January 2013.
[30] AVRISP mkII Disassembled

[7] Field Programmable System Level Integrated Circuit

[31] AVR1005: Getting started with XMEGA, page 7 (PDF).


[8] http://www.atmel.com/Images/
Atmel. Retrieved 7 November 2011.
Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_
Datasheet.pdf
AVR-8-bit-Microcontroller-ATtiny25- [32] AVR Studio v4.18 Release Notes. Retrieved 2012-09-19.
ATtiny45-ATtiny85_Datasheet.pdf
[33] ECROS Technology - Dragon Rider. Ecrostech.com.
[9] Atmel Smart Card ICs
2008-03-02. Retrieved 2012-09-19.
[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
(PDF). Atmel. 2013. Retrieved 10 June 2014.
[12] AVR312: Using the USI module as a I2 C slave (PDF).
Atmel. 2005. Retrieved 10 June 2014.
[13] AVR307: Half Duplex UART Using the USI Module
(PDF). Atmel. 2003. Retrieved 10 June 2014.
[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.
[15] AVRDUDE programmer.
trieved 2012-09-19.

Savannah.nongnu.org.

Re-

[34] JTAGICE3 Product Page


[35] AVR ONE! Product Page
[36] AVR Buttery
[37] LUFA (Formerly MyUSB)". Four Walled Cubicle. Retrieved 2012-09-19.
[38] Comle Technology. Comle Technology, Inc. Retrieved
13 January 2013.
[39] gnusb: Open Source USB Sensor Box. Retrieved 13 January 2013.
[40] BasicX. NetMedia, Inc. Retrieved 13 January 2013.
[41] Welcome to Oak Micros. Oak Micros. Oak Micros. Retrieved 13 January 2013.
[42] ZBasic. Retrieved 13 January 2013.

[16] PDI programming driver (PDF). Retrieved 2012-09-19.

[43] myAVR. Laser & Co. Solutions GmbH. Retrieved 13


January 2013.

[17] HVSP_Description. Support.atmel.no. Retrieved 201209-19.

[44] M3000 Motion controller on a chip.


Schneider Electric Motion USA.

[18] DES-encrypted AVR Bootloader (PDF). Retrieved 201209-19.

[45] pAVR :: Overview. OpenCores. Retrieved 2012-09-19.

[19] AES-encrypted AVR Bootloader (PDF). Retrieved 201209-19.

imshome.com.

[46] AVR Core :: Overview. OpenCores. Retrieved 2012-0919.

[20] XMEGA Bootloader (PDF). Retrieved 2012-09-19.

[47] Navr AVR clone (8-bit RISC) :: Overview. OpenCores.


Retrieved 2012-09-19.

[21] AVR USB Bootloader (PDF). Retrieved 2012-09-19.

[48] CPU lecture. OpenCores. Retrieved 2015-02-16.

3.11. EXTERNAL LINKS

3.10 Further reading


AVR Microcontroller and Embedded Systems: Using
Assembly and C; Muhammad Ali Mazidi, Sarmad
Naimi, Sepehr Naimi; 792 pages; 2010; ISBN 9780138003319.
Embedded C Programming and the Atmel AVR;
Richard H Barnett, Sarah Cox, Larry O'Cull; 560
pages; 2006; ISBN 978-1-4180-3959-2.
C Programming for Microcontrollers Featuring ATMELs AVR Buttery and WinAVR Compiler; Joe Pardue; 300 pages; 2005; ISBN 978-0-9766822-0-2.
Atmel AVR Microcontroller Primer : Programming and
Interfacing; Steven F Barrett, Daniel Pack, Mitchell
Thornton; 194 pages; 2007; ISBN 978-1-59829-5412.
Arduino : A Quick Start Guide; Maik Schmidt; 276
pages; 2011; ISBN 978-1-934356-66-1.

3.11 External links


Ocial
Atmel AVR
Communities
AVR Freaks community
Arduino community
Other
Atmel AVR at DMOZ, numerous AVR links
AVR-Libc
Atmel AVR Serial Port Programmer
Why you need a clock source for the AVR?
AVR Basics - AVR guide for beginners
Simplest AVR programmer Using LPT Port
ATmega8 Breadboard Tutorial
AVR
DIP-Package
Pinout
Diagrams:
ATtiny44/45/84/85, ATmega328P, ATmega644P,
ATmega1284P
AVR TQFP-Package Pinout Diagrams: ATmega328,
ATmega2560, ATmega32U4

23

Chapter 4

Atmel AVR instruction set


Main article: Atmel AVR

The status register bits are:

The Atmel AVR instruction set is the machine language


for the Atmel AVR, a modied Harvard architecture 8-bit
RISC single chip microcontroller which was developed by
Atmel in 1996. The AVR was one of the rst microcontroller families to use on-chip ash memory for program
storage.

1. C Carry ag. This is a borrow ag on subtracts.


2. Z Zero ag. Set to 1 when an arithmetic result is zero.
3. N Negative ag. Set to a copy of the most signicant
bit of an arithmetic result.
4. V Overow ag. Set in case of twos complement
overow.

4.1 Processor registers

5. S Sign ag. Unique to AVR, this is always NV, and


shows the true sign of a comparison.

There are 32 general-purpose 8-bit registers, R0R31. All


arithmetic and logic operations operate on those registers;
only load and store instructions access RAM.

6. H Half carry. This is an internal carry from additions


and is used to support BCD arithmetic.

7. T Bit copy. Special bit load and bit store instructions


A limited number of instructions operate on 16-bit register
use this bit.
pairs. The lower-numbered register of the pair holds the
8. I Interrupt ag. Set when interrupts are enabled.
least signicant bits and must be even-numbered. The last
three register pairs are used as pointer registers for memory
addressing. They are known as X (R27:R26), Y (R29:R28)
and Z (R31:R30). Postincrement and predecrement ad- 4.2 Addressing
dressing modes are supported on all three. Y and Z also
support a six-bit positive displacement.
The following address spaces are available:
Instructions which allow an immediate value are limited
to registers R16R31 (8-bit operations) or to register pairs
R25:R24R31:R30 (16-bit operations ADIW and SBIW).
Some variants of the MUL operation are limited to eight
registers, R16 through R23.

The general purpose registers are addressed by their


numbers (031), although the full 5-bit number is not
stored in instructions that can only operate on a subset
of those registers.
I/O registers have a dedicated 6-bit address space,
the lower half of which is bit-addressable; some parts
have I/O registers outside this address space, which
are called extended I/O and are only accessible as
memory-mapped I/O in the data address space.

In addition to these 32 general-purpose registers, the CPU


has a few special-purpose registers:
PC: 16- or 22-bit program counter
SP: 8- or 16-bit stack pointer
SREG: 8-bit status register
RAMPX, RAMPY, RAMPZ, RAMPD and EIND: 8bit segment registers that are prepended to 16-bit addresses in order to form 24-bit addresses; only available in parts with large address spaces.
24

The data address space maps the 32 general-purpose


registers, all the I/O registers (including those also accessible through the I/O address space), and the RAM;
it can be addressed either directly or indirectly through
the X, Y and Z pointer registers, prepended if necessary by RAMPX, RAMPY and RAMPZ respectively.

4.5. INSTRUCTION SET INHERITANCE

25

Program memory (ash) has a separate address space, There are two types of conditional branches: jumps to adaddressed as 16-bit words for the purpose of fetching dress and skips. Conditional branches (BRxx) can test an
instructions
ALU ag and jump to specied address. Skips (SBxx) test
an arbitrary bit in a register or I/O and skip the next instruc For the purpose of fetching constant data, program tion if the test was true.
memory is addressed bytewise through the Z pointer
In the following:
register, prepended if necessary by RAMPZ.
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.

Rd is a register in the range R0-R31 or R16-R31 (depending on instruction)

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.

s is a bit number in the status register (0 = C, 1 = Z,


etc., see the list above)

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. For example, SREG (0x3F (0x5F)), SP (0x3E:0x3D (0x5E:0x5D)),
EIND (0x3C (0x5C)) or RAMPZ (0x3B (0x5B)).
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.

4.3 Instruction timing


Arithmetic operations work on registers R0-R31 but not directly on RAM and take one clock cycle, except for multiplication and word-wide addition (ADIW and SBIW) which
take two cycles.
RAM and I/O space can be accessed only by copying to or
from registers. Indirect access (including optional postincrement, predecrement or constant displacement) is possible through registers X, Y, and Z. All accesses to RAM
takes two clock cycles. Moving between registers and I/O
is one cycle. Moving eight or sixteen bit data between registers or constant to register is also one cycle. Reading program memory (LPM) takes three cycles.

Rr is a register in the range R0-R31

b is a bit number in a general-purpose or I/O register


(0 = least signicant, 7 = most signicant)
K6 is a 6-bit immediate unsigned constant (range: 0
63)
K8 is an 8-bit immediate constant; since it is used only
in 8-bit operations, its signedness is irrelevant
IO5 is a 5-bit I/O address covering the bit-addressable
part of the I/O address space, i.e. the lower half
(range: 031)
IO6 is a 6-bit I/O address covering the full I/O address
space (range: 063)
D16 is a 16-bit data address covering 64 KiB; in parts
with more than 64 KiB data space, the contents of the
RAMPD segment register is prepended
P22 is a 22-bit program address covering 222 16-bit
words (i.e. 8 MiB)
D6 is a 6-bit unsigned displacement relative to the
data address stored in the Y or Z pointer
P7 and P12 are 7-bit (resp. 12-bit) signed displacements relative to the program address stored in the
program counter

4.5
4.4 Instruction list

Instruction set inheritance

Not all instructions are implemented in all Atmel AVR controllers. This is the case of the instructions performing mulInstructions are one 16-bit word long, save for those includ- tiplications, extended loads/jumps/calls, long jumps, and
ing a 16-bit or 22-bit address, which take two words.
power control.

26

4.6 Instruction encoding


Bit assignments:

CHAPTER 4. ATMEL AVR INSTRUCTION SET

4.7

External links

GNU Development Environment

rrrrr = Source register

Programming the AVR microcontroller with


GCC by Guido Socher

rrrr = Source register (R16-R31)

A GNU Development Environment for the AVR


Microcontroller by Rich Neswold

rrr = Source register (R16-R23)

AVR Options in GCC-AVR

RRRR = Source register pair (R0:R1 ... R30:R31)

Atmel AVR instruction set PDF(149 pages)

ddddd = Destination register

AVR Instruction Set Simulator (ATmega32u4 for


GCC Intel Hex Files)

dddd = Destination register (R16-R31)


ddd = Destination register (R16-R23)
DDDD = Destination register pair (R0:R1 ... R30:
R31)
pp = Register pair, W, X, Y or Z
y = Y/Z register pair bit (0=Z, 1=Y)
u = FMUL(S(U)) signed with 0=signed or 1=unsigned
s = Store/load bit (0=load, 1=store)
c = Call/jump (0=jump, 1=call)
cy = With carry (0=without carry 1=with carry)
e = Extend indirect jump/call address with EIND
(0=0:Z, 1=EIND:Z)
q = Extend program memory address with RAMPZ
(0=0:Z, 1=RAMPZ:Z)
aaaaaa = I/O space address
aaaaa = I/O space address (rst 32 only)
bbb = Bit number
B = Bit value
kkkkkk = 6-bit unsigned constant
KKKKKKKK = 8-bit constant
The Atmel AVR uses many split elds, where bits are not
contiguous in the instruction word. The load/store with oset instructions are the most extreme example where a 6-bit
oset is broken into three pieces.

Google Play

Chapter 5

Orthogonal instruction set


In computer engineering, an orthogonal instruction set
is an instruction set architecture where all instruction types
can use all addressing modes. It is "orthogonal" in the sense
that the instruction type and the addressing mode vary independently. An orthogonal instruction set does not impose a
limitation that requires a certain instruction to use a specic
register.[1]

rection and to autoincrement.

5.1 Orthogonality in practice

5.1.2

In many CISC computers, an instruction could access either


registers or memory, usually in several dierent ways. This
made the CISC machines easier to program, because rather
than being required to remember thousands of individual
instruction opcodes, an orthogonal instruction set allowed a
programmer to instead remember just thirty to a hundred
operation codes (ADD, SUBTRACT, MULTIPLY,
DIVIDE, etc.) and a set of three to ten addressing modes
(FROM REGISTER 0, FROM REGISTER 1, FROM
MEMORY, etc.). The DEC PDP-11 and Motorola 68000
computer architectures are examples of nearly orthogonal
instruction sets, while the ARM11 and VAX are examples
of CPUs with fully orthogonal instruction sets.

5.1.1

The PDP-11

With the exception of its oating point instructions, the


PDP-11 was very strongly orthogonal. Every integer instruction could operate on either 1-byte or 2-byte integers
and could access data stored in registers, stored as part of
the instruction, stored in memory, or stored in memory and
pointed to by addresses in registers. Even the PC and the
stack pointer could be aected by the ordinary instructions
using all of the ordinary data modes. In fact, immediate
mode (hardcoded numbers within an instruction, such as
ADD #4, R1 (R1 = R1 + 4) was implemented as the mode
register indirect, autoincrement and specifying the program counter (R7) as the register to use reference for indi-

Since the PDP-11 was an octal-oriented (3-bit sub-byte)


machine (addressing modes 07, registers R0R7), there
were (electronically) 8 addressing modes. Through the use
of the Stack Pointer (R6) and Program Counter (R7) as referenceable registers, there were 10 conceptual addressing
modes available.

The VAX-11

The VAX-11 extended the PDP-11s orthogonality to all


data types, including oating point numbers (although instructions such as 'ADD' was divided into data-size dependent variants such as ADDB, ADDW, ADDL, ADDP,
ADDF for add byte, word, longword, packed BCD and
single-precision oating point, respectively). Like the PDP11, the Stack Pointer and Program Counter were in the general register le (R14 and R15).
The general form of a VAX-11 instruction would be:
opcode [ operand ] [ operand ] ...
Each component being one byte, the opcode a value in the
range 0255, and each operand consisting of two nibbles,
the upper 4 bits specifying an addressing mode, and the
lower 4 bits (usually) specifying a register number (R0
R15).
Unlike the octal-oriented PDP-11, the VAX-11 was a
hexadecimal-oriented machine (4-bit sub-byte). This resulted in 16 logical addressing modes (015), however, addressing modes 03 were short immediate for immediate data of 6 bits or less (the 2 low-order bits of the addressing mode being the 2 high-order bits of the immediate
data, when prepended to the remaining 4 bits in that dataaddressing byte). Since addressing modes 0-3 were identical, this made 13 (electronic) addressing modes, but as in
the PDP-11, the use of the Stack Pointer (R14) and Program Counter (R15) created a total of over 15 conceptual
addressing modes (with the assembler program translating
the source code into the actual stack-pointer or program-

27

28

CHAPTER 5. ORTHOGONAL INSTRUCTION SET

counter based addressing mode needed).

5.1.3

The MC68000

Motorolas designers attempted to make the assembly language orthogonal while the underlying machine language
was somewhat less so. Unlike PDP-11, the MC68000 used
separate registers to store data and the addresses of data in
memory.

isters on certain types of operations; observations like this


are sometimes exploited for code optimization in both compilers and hand written code.

5.1.5

RISC

A fully orthogonal architecture may not be the most bit


ecient architecture. In the late 1970s research at IBM
(and similar projects elsewhere) demonstrated that the majority of these orthogonal addressing modes were ignored
by most programs. Perhaps some of the bits that were used
to express the fully orthogonal instruction set could instead
be used to express more virtual address bits or select from
among more registers.

At the bit level, the person writing the assembler (or debugging machine code) would clearly see that symbolic instructions could become any of several dierent op-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 Designers of RISC architectures strove to achieve a balance
than a purely orthogonal approach might have.
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
5.1.4 The 8080 and follow on designs
reverted to load/store architectures. In these architectures, only a very few memory reference instructions can
The 8-bit Intel 8080 (as well as the 8085 and 8051) mi- access main memory and only for the purpose of loading
croprocessor was basically a slightly extended accumulator- data into registers or storing register data back into main
based design and therefore not orthogonal. An assembly- memory; only a few addressing modes may be available, and
language programmer or compiler writer had to be mind- these modes may vary depending on whether the instruction
ful of which operations were possible on each register: refers to data or involves a transfer of control (jump). ConMost 8-bit operations could be performed only on the 8-bit versely, data must be in registers before it can be operated
accumulator (the A-register), while 16-bit operations could upon by the other instructions in the computers instruction
be performed only on the 16-bit pointer/accumulator (the set. This trade o is made explicitly to enable the use of
HL-register pair), whereas simple operations, such as incre- much larger register sets, extended virtual addresses, and
ment, were possible on all seven 8-bit registers. This was longer immediate data (data stored directly within the comlargely due to a desire to keep all opcodes one byte long puter instruction).
and to maintain source code compatibility with the original
Intel 8008 (an LSI-implementation of the Datapoint 2200's
CPU).

5.2

The binary-compatible Z80 later added prex-codes to escape from this 1-byte limit and allow for a more powerful instruction set. The same basic idea was employed
for the Intel 8086, although, to allow for more radical extensions, binary-compatibility with the 8080 was not attempted here; instead the 8086 was designed as a more regular and fully 16-bit processor that was source-compatible
with the 8008, 8080, and 8085. It maintained some degree of non-orthogonality for the sake of high code density
(even though this was derided as being "baroque" by some
computer scientists at the time). The 32-bit extension of
this architecture that was introduced with the 80386, was
somewhat more orthogonal despite keeping all the 8086 instructions and their extended counterparts. However, the
encoding-strategy used still shows many traces from the
8008 and 8080 (and Z80); for instance, single-byte encodings remain for certain frequent operations such as push
and pop of registers and constants, and the primary accumulator, eax, employ shorter encodings than the other reg-

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
vices, 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.
One example of open source hardware is Phonebloks.

6.1

Licenses

The open hardware logo

Open-source hardware (OSH) consists of physical artifacts of technology designed and oered by the open design
movement. Both free and open-source software (FOSS) as
well as open-source hardware is created by this open-source
culture movement and applies a like concept to a variety of
components. It is sometimes, thus, referred 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 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
creates enormous economic value.[2]

The RepRap general-purpose 3D printer with the ability to make


copies of most of its own structural parts

Rather than creating a new license, some open-source hardware projects simply use existing, free and open-source
software licenses.[3] These licenses may not accord well
with patent law.[4]

Additionally, several new licenses have been proposed.


These licenses are designed to address issues specic to
hardware designs.[5] In these licenses, many of the fundaSince the rise of recongurable programmable logic de- mental principles expressed in open-source software (OSS)
29

30

CHAPTER 6. OPEN-SOURCE HARDWARE

licenses have been ported to their counterpart hardware


projects. Organizations tend to rally around a shared license. For example, Opencores prefers the LGPL or a
Modied BSD License,[6] FreeCores insists on the GPL,[7]
Open Hardware Foundation promotes "copyleft" or other
permissive licenses,[8] the Open Graphics Project uses a
variety of licenses, including the MIT license, GPL, and a
proprietary license,[9] and the Balloon Project wrote their
own license.[10] New hardware licenses are often explained
as the hardware equivalent of a well-known OSS license,
such as the GPL, LGPL, or BSD license.
Despite supercial similarities to software licenses, most
hardware licenses are fundamentally dierent: by nature,
they typically rely more heavily on patent law than on
The Arduino Diecimila
copyright law. Whereas a copyright license may control
the distribution of the source code or design documents,
a patent license may control the use and manufacturing of
the physical device built from the design documents. This
distinction is explicitly mentioned in the preamble of the
TAPR Open Hardware License:
"... those who benet from an OHL design
may not bring lawsuits claiming that design
infringes their patents or other intellectual
property.
TAPR Open Hardware License, [11]

Noteworthy licenses include:

The OSHW (Open Source Hardware) logo silkscreened on an unpopulated PCB

The TAPR Open Hardware License: drafted by attorney John Ackermann, reviewed by OSS community
6.2 Development
leaders Bruce Perens and Eric S. Raymond, and discussed by hundreds of volunteers in an open commuExtensive discussion has taken place on ways to make opennity discussion[12]
source hardware as accessible as open-source software.
[16]
such as the level
Balloon Open Hardware License: used by all projects Discussions focus on multiple areas,
[17]
at
which
open-source
hardware
is
dened,
ways to colin the Balloon Project
laborate in hardware development, as well as a model for
Although originally a software license, OpenCores en- sustainable development by making open-source appropriate technology.[18][19] In addition there has been considercourages the LGPL
able work to produce open-source hardware for scientic
combination of open-source electronics
Hardware Design Public License: written by Graham hardware using a[20][21]
3-D
printing.
and
Seaman, admin. of Opencollector.org
One of the major dierences between developing open In March 2011 CERN released the CERN Open Hard- source software and developing open-source hardware is
ware License (OHL)[13] intended for use with the that hardware results in tangible outputs, which cost money
Open Hardware Repository[14] and other projects.
to prototype and manufacture. As a result, the phrase free
as in speech, not as in beer,[22] more formally known as
[15]
The Solderpad License
is a version of the Apache Gratis versus Libre, distinguishes between the idea of zero
License version 2.0, amended by lawyer Andrew Katz cost and the freedom to use and modify information. While
to render it more appropriate for hardware use.
open-source hardware faces challenges in minimizing cost

6.5. SEE ALSO

31

and reducing nancial risks for individual project developers, some community members have proposed models to
address these needs.[23] Given this, there are initiatives to
develop sustainable community funding mechanisms, such
as the Open Source Hardware Central Bank.[24]

There are many applicable business models for implementing some open-source hardware even in traditional rms.
For example, to accelerate development and technical innovation the photovoltaic industry has experimented with
partnerships, franchises, secondary supplier and completely
[29]
Often vendors of chips and other electronic components open-source models.
will sponsor contests with the provison that the participants
and winners must share their designs. Circuit Cellar maga6.5 See also
zine organizes some of these contests.
List of open-source hardware projects

6.3 Open-source labs and certications


A guide has been published on using open-source electronics and 3D printing to make open-source labs. Today scientists are creating many such labs, examples include:

3D printing
Computer numeric control
Computer-aided design
Coreboot
Indiegogo

Boston Open Source Science Laboratory, Somerville,


Massachusetts
BYU Open Source Lab, Brigham Young University
Michigan Tech[25]
OSU Open Source Lab, Oregon State University
Open Source Research Lab, University of Texas at El
Paso

Kickstarter
Modular design
Open innovation
Open-source computing hardware
Open Source Ecology
Open Source Initiative
Open Source Lab (book)

6.3.1

RYF certication

See also: Linux-libre


The Free Software Foundation "Respects Your Freedom"
(RYF) computer hardware product certication program
encourages the creation and sale of hardware that respects
users freedom and privacy, and aims to ensure that users
have control over their devices.[26]

6.4 Business models


Open hardware companies are experimenting with dierent business models. In one example, littleBits implements
open-source business models by making the design les
available for the circuit designs in each littleBits module, in
accordance with the CERN Open Hardware License Version 1.2.[27] In another example, Arduino has registered its
name as a trademark. Others may manufacture their designs but can't put the Arduino name on them. Thus they
can distinguish their products from others by appellation.[28]

Open-source robotics
Rapid prototyping
Reuse
Wevolver

6.6

References

[1] Alicia Gibb (Ed.) Building Open Source Hardware: DIY


Manufacturing for Hackers and Makers, Addison-Wesley:
New York, pp. 253-277 (2015).
[2] Pearce, J.M. (2015) Quantifying the Value of Open Source
Hardware Development. Modern Economy, 6, 1-11. doi:
10.4236/me.2015.61001.
[3] From OpenCollectors License Zone: GPL used by Free
Model Foundry and OpenSPARC; other licenses are used by
Free-IP Project, LART (the software is released under the
terms of the GNU General Public License (GPL), and the
Hardware design is released under the MIT License), GNUBook (defunct).

32

CHAPTER 6. OPEN-SOURCE HARDWARE

[4] Thompson, C. (2011). Build it. Share it. Prot. Can open
source hardware work?. Work, 10, 08.
[5] For a nearly comprehensive list of licenses,
OpenCollectors license zone

see

[6] Item What license is used for OpenCores?", from Opencores.org FAQ, retrieved 14 January 2013
[7] FreeCores Main Page, retrieved 25 November 2008
[8] Open Hardware Foundation, main page, retrieved 25
November 2008
[9] See Are we going to get the 'source' for what is on the
FPGA also?" in the Open Graphics Project FAQ, retrieved
25 November 2008

[27] Saddlemire, Katie (14 April 2015). What does Open


Source mean?". littleBits (littleBits). Retrieved 26 May
2015.
[28] Build It. Share It. Prot. Can Open Source Hardware
Work?". WIRED. Retrieved 16 April 2015.
[29] 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

6.7

External links

Open-source hardware in DMOZ

[10] Balloon License, from balloonboard.org

Open Circuits wiki

[11] The TAPR Open Hardware License. Retrieved 16 April


2015.
[12] transcript of all comments, hosted on technocrat.net

http://www.wired.com/2015/03/
need-free-digital-hardware-designs/
Stallman).

[13] CERN Open Hardware Licence. Open Hardware Repository. CERN. 2012-07-05. Retrieved 2012-08-15.

Open Source Semiconductor Core Licensing, 25 Harvard Journal of Law & Technology 131 (2011)

[14] Open Hardware Repository. Retrieved 16 April 2015.


[15] Solderpad licenses. Solderpad.org. Retrieved 2012-0815.

(Richard

Denition of Open source hardware, freedomdened.org


P2P Foundation: Open Hardware Directory

[16] Writings on Open Source Hardware

Writings on Open Source Hardware, Open Collector

[17] MAKE: Blog: Open source hardware, what is it? Heres a


start... April 2007

Open Source Everywhere, Wired

[18] Halfbakery: Open Source Hardware Initiative

Build It. Share It. Prot. Can Open Source Hardware


Work?, Wired

[19] 3-D Printing of Open Source Appropriate Technologies for


Self-Directed Sustainable Development J. M Pearce, C.
Morris Blair, K. J. Laciak, R. Andrews, A. Nosrat and I.
Zelenika-Zovko, Journal of Sustainable Development, pp.
17-29 (2010)
[20] Pearce, Joshua M. 2012. "Building Research Equipment
with Free, Open-Source Hardware." Science 337 (6100):
13031304.open access
[21] Joshua M. Pearce,Open-Source Lab:How to Build Your Own
Hardware and Reduce Research Costs, Elsevier, 2014. ISBN
9780124104624
[22] Free, as in Beer, by Lawrence Lessig, Wired
[23] , Business Models for Open Source Hardware Design
[24] Open Source Hardware Central Bank, from Make: Online
: The Open Source Hardware Bank, retrieved 26 April 2010
[25] Joshua Pearce. Pearce Research Group - Current Projects.
Retrieved 16 April 2015.
[26] Respects Your Freedom hardware product certication.
fsf.org.

Richard Stallman: On Free Hardware, LinuxToday


Open Sesame! (Reports), The Economist
The Worlwide List of Open Hardware Online Stores
Discover your hardware (FSF)
The Future with Open-Source Hardware, Digital
Qatar

Chapter 7

List of Arduino compatibles


This is a non-exhaustive list of Arduino boards and com- name Freeduino is not trademarked and is free to use for
patible systems. It lists boards in these categories:
any purpose.[64]
Several Arduino-compatible products commercially released have avoided the Arduino name by using "-duino
name variants.[64]

Released under the ocial Arduino name


Arduino shield compatible
Development-environment compatible
Based on non-Atmel processors

7.2.1

Arduino footprint-compatible boards

Where dierent from the Arduino base feature set, com- The following boards are fully or almost fully compatible
patibility, features, and licensing details are included.
with both the Arduino hardware and software, including being able to accept shield daughterboards.

7.1 Ocial Arduino boards


Many versions of the ocial Arduino hardware have been 7.2.2
commercially produced to date:[1][2]

Special purpose Arduino-compatible


boards

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 board. Some
The following have been superseded by later and more caare Shield compatible, others are not.
pable versions from Arduino, but some, particularly the
Duemilanove, are still in widespread use.

7.1.1

Superseded boards

7.2.3

7.2 Arduino-compatible boards

Software-compatibility only

These boards are compatible with the Arduino software,


but they do not accept standard shields. They have dierent connectors for power and I/O, such as a series of pins
on the underside of the board for use with breadboards for
prototyping, or more specic connectors. One of the important choices made by Arduino-compatible board designers is whether or not to include USB circuitry in the board.
That circuitry can be placed in the cable between developAs a result of the protected naming conventions of the Ar- ment PC and board, thus making each instance of the board
duino, a group of Arduino users forked the Arduino Diec- less expensive. For many Arduino tasks, the USB circuitry
imila, releasing an equivalent board called Freeduino. The is redundant once the device has been programmed.
Although the hardware and software designs are freely
available under copyleft licenses, the developers have requested that the name Arduino be exclusive to the ocial
product and not be used for derivative works without permission. The ocial policy document on the use of the
Arduino name emphasizes that the project is open to incorporating work by others into the ocial product.[2]

33

34

7.2.4

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

Non-ATmega boards

[16] http://arduino.cc/en/Main/ArduinoBoardYun
[17] ATmega32U4. Atmel.com. Retrieved 2013-01-18.

The following non-ATmega boards accept Arduino shield


daughter boards. The microcontrollers are not compatible [18] http://blog.arduino.cc/2013/08/21/
with the ocial Arduino IDE, but they do provide a version
updating-about-arduino-yun-and-arduino-robot/
of the Arduino IDE and compatible software libraries.
[19] Arduino - ArduinoBoardLeonardo.
trieved 2013-01-23.

7.3 Non-Arduino boards

Arduino.cc.

Re-

[20] ArduinoBoardLeonardo. Arduino.cc. Retrieved 201301-18.

The following boards accept Arduino shield daughter [21] Arduino Blog- Massimo Introduces Arduino Leonardo.
Arduino.cc. 2012-07-23. Retrieved 2013-01-18.
boards. They do not use microcontrollers compatible with
the Arduino IDE,[227] nor do they provide an alternative im[22] Arduino - ArduinoBoardUno. Arduino.cc. Retrieved
plementation of the Arduino IDE and software libraries.
2013-01-23.
[23] ArduinoBoardUno. Arduino.cc. Retrieved 2013-01-18.

7.4 See also


Category 5 cable

[24] ATmega328P. Atmel.com. Retrieved 2013-01-18.


[25] ATmega8U2. Atmel.com. Retrieved 2013-01-18.
[26] Arduino Blog- Dinner is Ready. Arduino.cc. 2010-09-24.
Retrieved 2013-01-18.

7.5 References
[1] Arduino - Boards. Arduino.cc. 2009-03-01. Retrieved
2013-01-23.

[27] Arduino - ArduinoBoardMega2560. Arduino.cc. Retrieved 2013-01-23.


[28] ArduinoBoardMega2560. Arduino.cc. Retrieved 201301-18.

[2] Arduino - HomePage. Arduino.cc. Retrieved 2013-0123.

[29] ATmega2560. Atmel.com. Retrieved 2013-01-18.

[3] http://arduino.cc/en/Main/ArduinoBoardZero

[30] ArduinoBoardEthernet. Arduino.cc. Retrieved 2013-0118.

[4] http://arduino.org/products/arduino-zero-pro
[5] ATSAMD21G18A;". Atmel.com. Retrieved 2014-08-12.
[6] http://blog.arduino.cc/2015/06/15/
arduino-zero-now-available-for-purchase/
[7] http://blog.arduino.cc/2014/05/15/meet-arduino-zero/

[31] ATmega328. Atmel.com. Retrieved 2013-01-18.


[32] Arduino Blog- Arduino Ethernet, ADK Available for purchase. Arduino.cc. 2011-07-13. Retrieved 2013-01-18.
[33] Arduino - ArduinoEthernetShield. Arduino.cc. Retrieved
2013-01-23.

[34] ArduinoBoardFio. Arduino.cc. Retrieved 2013-01-18.


[8] http://blog.arduino.cc/2014/08/01/
20-arduino-zero-dev-edition-available-for-beta-testing-join-us/
[35] Arduino Blog- Arduino FIO presented at Uno Punto Zero.
Arduino.cc. 2010-03-18. Retrieved 2013-01-18.
[9] ArduinoBoardDue. Arduino.cc. Retrieved 2013-01-18.
[36] Arduino - ArduinoBoardFio. Arduino.cc. Retrieved
[10] Chirgwin, Richard (2011-09-20). Arduino to add ARM
2013-01-23.
board this year. The Register. Retrieved September 20,
2011.
[37] ArduinoBoardNano. Arduino.cc. Retrieved 2013-01-18.
[11] AT91SAM3X8E;". Atmel.com. Retrieved 2013-01-18.

[38] ATmega168. Atmel.com. Retrieved 2013-01-18.

[12] ATmega16U2. Atmel.com. Retrieved 2013-01-18.

[39] FT232R. ftdichip.com. Retrieved 2014-08-14.

[13] SAM3U4E. Atmel.com. Retrieved 2013-01-18.


[14] atmel.com. atmel.com. Retrieved 2013-01-18.

[40] Arduino Blog- Arduino Nano: all-in-one design for breadboard use. Arduino.cc. 2008-05-15. Retrieved 2013-0118.

[15] Arduino Blog- Arduino Due is nally here. Arduino.cc.


2012-10-22. Retrieved 2013-01-18.

[41] ArduinoBoardLilyPad. Arduino.cc. Retrieved 2013-0118.

7.5. REFERENCES

35

[42] Arduino Blog- LilyPad Arduino and Arduino 0010. Arduino.cc. 2007-10-17. Retrieved 2013-01-18.

[66] http://www.ventor.co.in/index.php?main_page=product_
info&cPath=16&products_id=86

[43] arduino.cc

[67] http://www.ventor.co.in/

[44] ArduinoBoardADK. Arduino.cc. Retrieved 2013-01-18.

[68] SainSmart UNO. sainsmart.com. Retrieved 2013-01-23.

[45] ArduinoBoardEsplora. Arduino.cc. Retrieved 2013-0118.

[69] SainSmart-Open Hardware Company.


Retrieved 2013-01-23.

[46] ArduinoBoardMicro. Arduino.cc. Retrieved 2013-01-18.

[70] SainSmart Mega 2560. sainsmart.com. Retrieved 201301-23.

[47] Arduino Blog- New Arduino Micro available. Arduino.cc.


2012-11-08. Retrieved 2013-01-18.
[48] ArduinoBoardProMini. Arduino.cc. Retrieved 2013-0118.

sainsmart.com.

[71] http://elecfreaks.com/store/download/Freaduino2560_
Schematic.pdf
[72] http://www.elecfreaks.com/

[49] Arduino Blog- Arduino Pro and Pro Mini. Arduino.cc.


2008-08-23. Retrieved 2013-01-18.

[73] SainSmart UNO R3. sainsmart.com. Retrieved 2013-0123.

[50] Arduino - ArduinoBoardSerial. Arduino.cc. Retrieved


2013-01-23.

[74] Tavir-AVR. Tavir-AVR :: Bascom, Arduino, Wiring - Programozs, Frum, ingyenes mintaalkalmazsok, knyvek.
Avr.tavir.hu. Retrieved 2013-01-23.

[51] ATmega8. Atmel.com. Retrieved 2014-08-14.


Re-

[75] TavIR : Mikrokontroller vilg | A gyakorlati tuds trhza


(in Hungarian). Tavir.hu. Retrieved 2013-01-23.

[53] Arduino Board Bluetooth. Arduino.cc. Retrieved 201301-18.

[76] Brasuno. Brasuino.holoscopio.com. Retrieved 2013-0123.

[54] Arduino Blog- Arduino Diecimila and BT reference designs


now available. Arduino.cc. 2007-10-22. Retrieved 201301-18.

[77] Holoscpio. Holoscopio.com. 2011-07-18. Retrieved


2013-01-23.

[52] Arduino - ArduinoBoardBluetooth.


trieved 2013-01-23.

Arduino.cc.

[55] ArduinoBoardDiecimila. Arduino.cc. Retrieved 201301-18.


[56] Arduino - ArduinoBoardDuemilanove. Arduino.cc. Retrieved 2013-01-23.
[57] Arduino Board Duemilanove.
2013-01-18.

Arduino.cc.

Retrieved

[58] Arduino Blog- Arduino Duemilanove. Arduino.cc. 200810-19. Retrieved 2013-01-18.


[59] Arduino - ArduinoBoardMega. Arduino.cc. Retrieved
2013-01-23.
[60] ArduinoBoardMega. Arduino.cc. Retrieved 2013-01-18.

[78] Chibiduino2. tiisai.dip.jp. Retrieved 17 Aug 2013.


[79] Arduino Cosmo Black Star ::
Arduino. Jt5.ru. Retrieved 2013-01-23.
[80] JT5 ::
".
Jt5.ru. Retrieved 2013-01-23.
[81] CraftDuino / RoboCraft.ru / RoboCraft. Robocraft.ru.
Retrieved 2013-01-23.
[82] evilmadscientist.com
[83] Electronics | multiplo Robot Building System. Multiplo.org. Retrieved 2013-01-23.

[61] ATmega1280. Atmel.com. Retrieved 2013-01-18.

[84] multiplo Robot Building System |". Multiplo.org. Retrieved 2013-01-23.

[62] Arduino Blog- Arduino Mega: bigger, more powerful, still


blue. Arduino.cc. 2009-03-26. Retrieved 2013-01-18.

[85] "
trieved 2013-01-23.

[63] Arduino - ArduinoBoardMega. Arduino.cc. Retrieved


2013-01-23.

[86] MaxSerial : Fundamental Logic WebStore, Electronic Kits


and Components. Store.fundamentallogic.com. 2010-0530. Retrieved 2013-01-23.

[64] Freeduino Open Source Hardware Files. Freeduino.org.


Retrieved 2013-01-23.
[65] http://www.linear.com/solutions/linduino

". Shop.cqpub.co.jp. Re-

[87] SB-Freeduino. Solarbotics. Retrieved 2013-01-23.


[88] Solarbotics. Solarbotics. Retrieved 2013-01-23.

36

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

[89] Freeduino USB complete KIT (Arduino Duemilanove [110] http://www.obdiiworld.com/ obdiiworld.com]] (parts in
Compatible)". Nkcelectronics.com. Retrieved 2013-01-23.
Chinese?)
[90] Illuminato::Genesis. Liquidware. Retrieved 2013-01-23. [111] YourDuino. YourDuino. Retrieved 2013-01-23.
[112] YourDuinoRobo1 (Upgraded Arduino Compatible)".
Arduino-direct.com. Retrieved 2014-09-23.

[91]

[92] Simple
Labs
|
Simplifying
Technology.
[113] geekstudio.co.za
Build.simplelabs.co.in. Retrieved 2013-01-23.
[93] Vol.27
|
Retrieved 2013-01-23.

(8
.net.

+
)
| [114] Zigduino r1 - Logos Electromechanical.
electro.com. Retrieved 2013-01-23.
Otonanokagaku.net.

[94] 990.110. Droids.it. Retrieved 2013-01-23.

Logos-

[115] Products & Services - Logos Electromechanical. Logoselectro.com. 1999-02-22. Retrieved 2013-01-23.

[95] 990.023 Luigino328 - User Manual [EN]". Droids.it. Re- [116] http://www.freetronics.com/collections/arduino/products/
etherten
trieved 2013-01-23.
[96] Metaboard Metalab (in German). Metalab.at. Retrieved [117] http://www.freetronics.com/collections/arduino/products/
ethermega-arduino-mega-2560-compatible-with-onboard-ethernet
2013-01-23.
[97] small computers for art and science. Rascal Micro. Retrieved 2013-01-23.

[118] http://www.freetronics.com/collections/arduino/products/
usbdroid
[119] http://www.freetronics.com/collections/arduino/products/
eleven

[98]
[99] BitWizard. Bitwizard.nl. Retrieved 2013-01-23.
[100]

[101]
[102]
[103]

[120] http://www.freetronics.com/collections/arduino/products/
kitten
DFRduino Romeo-All in one Controller V1.1(SKU:
DFR0004) - Robot Wiki. Dfrobot.com. Retrieved 2013[121] CATkit
01-23.
[122] http://www.freetronics.com/collections/arduino/products/
DFRobot-An Online Opensource Robot and Hardware
etherdue-arduino-due-compatible-with-onboard-ethernet
Shop. Dfrobot.com. Retrieved 2013-01-23.
[123] http://www.elechouse.com/elechouse/index.php?main_
Tools, Parts, Kits for DIY'ers. Curious Inventor. Repage=product_info&cPath=72_73&products_id=2212
trieved 2013-01-23.
[124] "Io:duino". Railstars. Retrieved 2013-01-23.
Seeeduino V3.0 (Atmega 328P) [ARD130D2P] - $22.50 :
Seeed Studio Bazaar, Boost ideas, extend the reach. Seeed- [125] DFRobotShop Rover V2 - Arduino Compatible Tracked
studio.com. Retrieved 9 Nov 2014.
Robot (Basic Kit)". RobotShop. Retrieved 2013-01-23.

[104] SunDUINO Nowy wymiar elektroniki. Sunduino.neth.pl. [126]


Retrieved 2013-01-23.
[127]
[105] TwentyTen (100% Arduino Compatible). Parts & Kits
for Arduino Online, Buy Microcontroller Boards, Electronic Components for Arduino - TwentyTen (100% Ar- [128]
duino Compatible)". Freetronics. Retrieved 2013-01-23.

Industruino. Retrieved 12 June 2015.


Mindsets online. Mindsets online. 2007-03-01. Retrieved
2013-01-23.
Mindsets online.co.uk. Mindsets online.co.uk. 2007-0301. Retrieved 2013-01-23.

[106] Parts & Kits for Arduino Online, Buy Microcontroller [129] mindsetsonline.co.uk
Boards, Electronic Components for Arduino - Welcome. [130] Bump and Reverse Robot Kit (Faraduino) - Faraduino.
Freetronics. Retrieved 2013-01-23.
Mindsets online. 2007-03-01. Retrieved 2013-01-23.
[107] Volksduino: complete low-cost Arduino clone. Applied- [131] Faraconnect Shield (Faraduino) - Faraduino. Mindsets onplatonics.com. Retrieved 2013-01-23.
line. 2007-03-01. Retrieved 2013-01-23.
[108] Applied Platonics. Applied Platonics. Retrieved 2013- [132] toastedcircuits.com
01-23.
[133]
[109] Wise time with Arduino. Timewitharduino.blogspot.com.
Retrieved 2013-01-23.
[134] Motoruino | GUIBOT. Guibot.pt. Retrieved 2013-01-23.

7.5. REFERENCES

37

[135] Anderson, Chris (2009-01-21). ArduPilot (Legacy) main [158] iDuino Complete Kit [iDuino-3-kit] - $21.00 : Fundapage. DIY Drones. Retrieved 2013-01-23.
mental Logic WebStore, Electronic Kits and Components.
Spie.org. 2010-05-30. Retrieved 2013-01-23.
[136] Flyduino Shop - Multirotor, Multicopter Teile & Zubehr
fr Quadrocopter, Hexacopter, Octocopter - Motore, Rah- [159] Albino, Alejandro (2012-04-21). Smallest Arduino.
Femtoduino. Retrieved 2013-01-23.
men, FCs & ESCs. Flyduino.net. Retrieved 2013-01-23.
[137] Arduino "" RF [160] freeduino lite v2. Bhashatech.com. Retrieved 2013-0123.
868 Mhz :: Arduino. Jt5.ru. 201203-30. Retrieved 2013-01-23.
[161] Bhasha Technologies. Bhashatech.com. Retrieved 201301-23.
[138] JeeNode - JeeLabs Hardware - JeeLabs . net. Jeelabs.net.
Retrieved 2013-01-23.
[162] Freeduino Serial india. Bhashatech.com. 2009-08-23.
Retrieved 2013-01-23.
[139] http://www.freetronics.com/collections/arduino/products/
arduphone-arduino-compatible-cellphone
[163] Femtoduino: an ultrasmall (20.7x15.2 mm) libre Arduino
compatible board. Varesano.net. Retrieved 2013-01-23.
[140] http://tah.io
[141] http://revealinghour.in

[164] , specications

[142] Ardweeny. Solarbotics. Retrieved 2013-01-23.

[165] , Femtoduino.com website

[143] Banguino. Dimitech. Retrieved 14 Jun 2014.

[166] JN - JeeLabs Hardware - JeeLabs . net. Jeelabs.net. Retrieved 2013-01-23.

[144] Bare Bones Board (BBB) Kit | Modern Device.


[167] Computing stu tied to the physical world (2013-01-19).
Shop.moderndevice.com. Retrieved 2013-01-23.
JeeLabs. JeeLabs. Retrieved 2013-01-23.
[145] RBBB Kit | Modern Device. Shop.moderndevice.com.
[168] Wiki - JeeLabs Hardware - JeeLabs . net. Jeelabs.net.
Retrieved 2013-01-23.
Retrieved 2013-01-23.
[146] " Arduino, . ;)". Blockduino. Retrieved
[169] , LCDuino blog
2013-01-23.
[147] " BlockDuino. Blockduino.org. Re- [170] Silicon Railway. Small, powerful, and versatile at a reasonable cost. Siliconrailway.com. Retrieved 2013-01-23.
trieved 2013-01-23.
[148] Boarduino - Breadboard-compatible Arduino Clone. La- [171] lowpowerlab.com, All about Moteino
dyada.net. 2011-08-15. Retrieved 2013-01-23.
[172] lowpowerlab.com
[149] Breaduino: the all-breadboard Arduino clone. Applied[173] DualOptiboot
platonics.com. Retrieved 2013-01-23.
[174] NavSpark Community. Retrieved 2014-06-05.
[150] Croduino Basic 5x3cm Arduino Duemilanove compatible
board. e-radionica.com. Retrieved 2013-11-22.
[175] SkyTraq. Retrieved 2014-06-05.
[151] chip45.com
[152] chip45.com

[176] Wiblocks - NB1A - ATmega328 + DAC + RTC.


Wiblocks.luciani.org. Retrieved 2013-01-23.

[177] Wiblocks - NB2 System. Wiblocks.luciani.org. Retrieved


[153] Microcontroller Modules, Boards, Tools and Accessories
2013-01-23.
for Atmel AVR ATmega Xmega Processors. Chip45.com.
Retrieved 2013-01-23.
[178] Electronics for Hobbyists. Circuit Monkey. Retrieved
2013-01-23.
[154] Electronics for Hobbyists. Circuit Monkey. Retrieved
2013-01-23.
[179] om328p. Oak Micros. Retrieved 2013-01-23.
[155] Digispark USB Development Board. Retrieved 2014-06- [180] OpenTag Board. Loggerhead Instruments. Archived from
05.
the original on 9 Nov 2014. Retrieved 9 Nov 2014.
[156] Digistump. Retrieved 2014-06-05.

[181] Guilherme Martins :


PAPERduinos design.
Lab.guilhermemartins.net. Retrieved 2013-01-23.

[157] DragonFly - ATmega1280 Arduino Bundle - Circuit Monkey. Circuitmonkey.com. Retrieved 2014-11-04.
[182] Picoduino. Peter Misenko. Retrieved 4 June 2014.

38

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

[183] Rainbowduino LED driver platform - Atmega 328 [206] http://www.freetronics.com/collections/arduino/products/


Rainbowduino LED driver platform - Plug and Shine!
leostick
[ARD127D2P] - $24.90 : Seeed Studio Bazaar, Boost ideas,
extend the reach. Seeedstudio.com. Retrieved 2013-01- [207] leaabs.com. leaabs.com. Retrieved 2013-01-23.
23.
[208] leaabs.com. leaabs.com. Retrieved 2013-01-23.
[184] What Is Sanguino?". Sanguino.cc. Retrieved 2013-01-23.

[209] st.com

[185] Seeeduino Mega [ARD121D2P] - $43.00 : Seeed Studio


[210] leaabs/maple-ide GitHub.
Bazaar, Boost ideas, extend the reach. Seeedstudio.com.
2013-01-23.
Retrieved 2013-01-23.

Github.com.

Retrieved

[211] Arduino - Reference. Arduino.cc. Retrieved 2013-01-23.


[186] Sippino. SpikenzieLabs. 2011. Archived from the original on 15 Aug 2014. Retrieved 9 Nov 2014.
[212] leaabs/libmaple GitHub. Github.com. Retrieved 201301-23.
[187] SODAQ board. www.sodaq.net. Retrieved 2 Oct 2013.
[188] Sparrow prototyping board. open-homeautomation.com.
Retrieved 2013-05-13.
[189] Red Back Spider robot controller | Lets Make Robots!".
Letsmakerobots.com. Retrieved 2013-01-23.
[190] StickDuino - USB Stick Sized Arduino Clone. Spie.org.
Retrieved 2013-01-23.
[191] Teensy USB Development Board. Pjrc.com. Retrieved
2013-01-23.
[192] PJRC Store. Pjrc.com. Retrieved 2013-01-23.
[193] TinyDuino. TinyCircuits. Retrieved 2013-01-23.

[213] Digital Design Engineers Source. Digilent Inc. Retrieved


2013-01-23.
[214] chipKIT32/chipKIT32-MAX GitHub. Github.com. Retrieved 2013-01-23.
[215] Digital Design Engineers Source. Digilent Inc. Retrieved
2013-01-23.
[216] Digital Design Engineers Source. Digilent Inc. Retrieved
2013-01-23.
[217] May 27, 2011 (2011-05-27). chipKIT Uno32: rst impressions and benchmarks. Hackaday.com. Retrieved 201301-23.

[194] A Maker of Tiny Open Source Circuits. TinyCircuits. Re- [218] Freescale Freedom Development Platform for Kinetis
KL14, KL15, KL24, KL25 MCUs. Archived from the
trieved 2013-01-23.
original on 6 Oct 2014.
[195] TinyLily. TinyCircuits. Retrieved 2013-01-23.
[219] Welcome to Freescale - Freescale Semiconductor.
[196] https://learn.adafruit.com/introducing-trinket
Freescale.com. Retrieved 2013-01-23.
[197] strobit - Strobit Wireless Widget Open Hardware Project [220] KL2 Product Summary Page. Freescale.com. Retrieved
- Google Project Hosting. Code.google.com. Retrieved
2013-01-23.
2013-01-23.
[221] Coridium. Coridiumcorp.com. Retrieved 2013-01-23.
[198] Wiblocks - ZB1 System. Wiblocks.luciani.org. Retrieved
[222] Coridium. Coridiumcorp.com. Retrieved 2013-01-23.
2013-01-23.
[199] OpenEnergyMonitor. emonTx.
Retrieved 2013-01-23.

OpenEnergyMonitor. [223] Use Arduino code on a TI Launchpad MSP430.


Instructables. 14 August 2012.

[200] "Project:Nanode
London
Hackspace. [224]
Wiki.london.hackspace.org.uk. Retrieved 2013-01-23.
[225]
[201] Wireless Arduino-compatible miniatures. panStamp. Retrieved 2013-01-23.
[226]
[202]

Energia. Github.

[203] Microduino Wiki(English)". www.microduino.net. Re- [227]


trieved 10 Oct 2013.
[228]
[204] Microduino Wiki( )". www.microduino.net. Retrieved
10 Oct 2013.
[229]
[205] Versalino-Uno

Arduino - Software. Arduino.cc. Retrieved 2013-01-23.

Sakura board homepage. Gadget Renesas project. Retrieved 2013-10-28.


Feature description of board and web compiler. Renesas.
Retrieved 2013-10-28.

CHIPINO - The Microchip PIC Based Arduino Style Module. Chipino.com. Retrieved 15 November 2014.
CHIPINO-FAQ. Chipino.com. Retrieved 15 November
2014.

7.6. FURTHER READING

39

[230] CHIPINO. Howtronics.com. Howtronics. Retrieved 15


November 2014.

Olsson, Tony (May 30, 2012). Arduino Wearables (1st


ed.). Apress. p. 400. ISBN 978-1-4302-4359-5.

[231] propellerpowered.com
[232] QuickStart 1: Comparison of Programming Tools. Parallax Semiconductor. Retrieved 2013-01-23.

Anderson, Rick; Cervo, Dan (May 16, 2012). Pro Arduino (1st ed.). Apress. p. 350. ISBN 978-1-43023939-0.

[233] Mitchell, Graham (2010-06-09). Introducing The Amicus18 [195] | Amicus18 Beginner Guides | Amicus18.
Digital-diy.com. Retrieved 2013-01-23.

Wilcher, Don (April 30, 2012). Learn Electronics with


Arduino (1st ed.). Apress. p. 350. ISBN 978-1-43024266-6.

[234] Bugblat Cortino. Bugblat.com. 2012-01-04. Retrieved


2013-01-23.

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.

[235] PINGUINO Project. Hackinglab.org. 2010-08-26. Retrieved 2013-01-23.


[236] unduino.com
[237] home. Netduino. Retrieved 2013-01-23.
[238] Overview. Netduino. Retrieved 2013-01-23.
[239] Development Modules. Ftdichip.com. Retrieved 201301-23.
[240] FEZ Domino. GHI Electronics. Retrieved 2013-01-23.
[241] FEZ Panda. GHI Electronics. Retrieved 2013-01-23.
[242] FEZ Cerbuino Bee. FEZ Panda II. GHI Electronics. Retrieved 2013-01-23.
[243]
[244] MyFreescaleWebPage. MyFreescaleWebPage. Retrieved
2013-01-23.
[245] rebird32.com
[246] parallax.com
[247]
[248] Breeze Boards Dizzy Enterprises website
[249] Arduino clone with mikroBUS socket mikroElektronika
news article
[250] Goldilocks Dev Board Thin Layer website
[251] Thin Layer website

7.6 Further reading


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 978-007-178277-7.

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 978-14493-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.
Premeaux, Emery; Evans, Brian (December 7, 2011).
Arduino Projects to Save the World (1st ed.). Apress.
p. 256. ISBN 978-1-4302-3623-8.
Wheat, Dale (November 16, 2011). Arduino Internals
(1st ed.). Apress. p. 392. ISBN 978-1-4302-3882-9.

40
Monk, Simon (November 15, 2011). Arduino + Android Projects for the Evil Genius: Control Arduino with
Your Smartphone or Tablet (1st ed.). McGraw-Hill. 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.

CHAPTER 7. LIST OF ARDUINO COMPATIBLES


McRoberts, Michael (December 20, 2010). Beginning
Arduino (1st ed.). Apress. p. 350. ISBN 978-1-43023240-7.
Monk, Simon (August 23, 2010). 30 Arduino Projects
for the Evil Genius (1st ed.). McGraw-Hill. p. 208.
ISBN 978-0-07-174133-0.

Monk, Simon (November 8, 2011). Programming


Arduino: Getting Started With Sketches (1st ed.).
McGraw-Hill. p. 176. ISBN 978-0-07-178422-1.

F. Barrett, Steven; Thornton, Mitchell (April 30,


2010). Arduino Microcontroller Processing for Everyone! (1st ed.). Morgan and Claypool Publishers. p.
344. ISBN 978-1-60845-437-2.

Evans, Brian (October 17, 2011). Beginning Arduino


Programming (1st ed.). Apress. p. 272. ISBN 978-14302-3777-8.

Pardue, Joe (January 15, 2010). An Arduino Workshop (1st ed.). Smiley Micros. p. 214. ISBN 978-09766822-2-6.

Igoe, Tom (September 26, 2011). Making Things


Talk: Using Sensors, Networks, and Arduino to see,
hear, and feel your world (2nd ed.). O'Reilly Media/Make. p. 496. ISBN 978-1-4493-9243-7.
Allan, Alasdair (September 22, 2011). iOS Sensor
Apps with Arduino: Wiring the iPhone and iPad into
the Internet of Things (1st ed.). O'Reilly Media. p.
126. ISBN 978-1-4493-0848-3.
Banzi, Massimo (September 20, 2011). Getting
Started with Arduino (2nd ed.). O'Reilly Media/Make.
p. 128. ISBN 978-1-4493-0987-9.
Smith, Alan G (August 19, 2011). Introduction to Arduino: A piece of cake (PDF) (1st ed.). CreateSpace.
p. 170. ISBN 978-1-4636-9834-8.
Warren, John-David; Adams, Josh; Molle, Harald
(July 18, 2011). Arduino Robotics (1st ed.). Apress.
p. 450. ISBN 978-1-4302-3183-7.
Karvinen, Tero; Karvinen, Kimmo (April 6, 2011).
Make: Arduino Bots and Gadgets: Six Embedded
Projects with Open Source Hardware and Software (1st
ed.). O'Reilly Media/Make. p. 296. ISBN 978-14493-8971-0.
Margolis, Michael (March 15, 2011). Arduino Cookbook (1st ed.). O'Reilly Media. p. 660. ISBN 978-0596-80247-9.
Schmidt, Maik (March 10, 2011). Arduino: A Quick
Start Guide (1st ed.). The Pragmatic Bookshelf. p.
296. ISBN 978-1-934356-66-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.

Oxer, Jonathan; Blemings, Hugh (December 28,


2009). Practical Arduino: Cool Projects for Open
Source Hardware (1st ed.). Apress. p. 450. ISBN
978-1-4302-2477-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.

7.7

External links

Media related to Arduino compatibles at Wikimedia


Commons

Chapter 8

Wiring
Wiring is an open-source electronics prototyping platform
composed of a programming language, an integrated development environment (IDE), and a single-board microcontroller. It was developed starting in 2003 by Hernando
Barragn.

board with a single click.

The Wiring IDE comes with a C/C++ library called


Wiring, which makes common input/output operations
much easier. Wiring programs are written in C/C++, although users only need to dene two functions to make a
Barragn started the project at the Interaction Design Insti- runnable program:
tute Ivrea. The project is currently developed at the School
of Architecture and Design at the Universidad de Los An setup() a function run once at the start of a program
des in Bogot, Colombia.
which can be used to dene initial environment settings
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.
The documentation has been created thoughtfully, with designers and artists in mind. There is a community where experts, intermediate developers and beginners from around
the world share ideas, knowledge and their collective experience. Wiring allows writing software to control devices
attached to the electronics board to create all kinds of interactive objects, spaces or physical experiences feeling and
responding in the physical world. The idea is to write a few
lines of code, connect a few electronic components 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 illumination
level in a room decreases. This process is called sketching
with hardware; explore lots of ideas very quickly, select the
more interesting ones, rene and produce prototypes in an
iterative process.

8.1 Software

loop() a function called repeatedly until the board is


powered o
A typical rst program for a microcontroller is to simply
blink an LED (light-emitting diode) on and o. In the
Wiring environment, the user might write a program like
this:
int ledPin = WLED; // a name for the on-board LED void
setup () { pinMode(ledPin, OUTPUT); // congure the
pin for digital output } void loop () { digitalWrite(ledPin,
HIGH); // turn on the LED delay (1000); // wait one second
(1000 milliseconds) digitalWrite(ledPin, LOW); // turn o
the LED delay (1000); // wait one second }
When the user clicks the Upload to Wiring hardware button in the IDE, a copy of the code is written to a temporary
le with an extra include header at the top and a very simple main() function at the bottom, to make it a valid C++
program.
The Wiring IDE uses the GNU toolchain and AVR Libc to
compile programs, and uses avrdude to upload programs to
the board.

The Wiring IDE is a cross-platform application written in


Java which is derived from the IDE made for the Processing
programming language. It is designed to introduce programming and sketching with electronics to artists and de- 8.2 Open hardware and open source
signers. It includes a code editor with features such as
syntax highlighting, brace matching, and automatic inden- The Wiring hardware reference designs are distributed untation capable of compiling and uploading programs to the der a Creative Commons Attribution Share-Alike 2.5 li41

42

CHAPTER 8. WIRING

cense and are available on the Wiring Web site. Layout and
production les for the Wiring hardware are also available.
The source code for the IDE and the hardware library are
available and released under the GPLv2

Igoe, Tom (September 28, 2007). Making Things


Talk: Practical Methods for Connecting Physical Objects (1st ed.). O'Reilly Media. p. 432. ISBN 0-59651051-9.

8.3 Related projects

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.

8.3.1

Processing

Wiring was based on the original work done on Processing


project in MIT.

8.3.2

Arduino and Fritzing

Wiring and Processing have spawned another project,


Arduino, which uses the Processing IDE, with a simplied
version of the C++ language, as a way to teach artists and
designers how to program microcontrollers. There are now
two separate hardware projects, Wiring and Arduino, using
the Wiring environment and language.
Fritzing is another software environment within this family,
which supports designers and artists to document their interactive prototypes and to take the step from physical prototyping to actual product.

8.4 See also


Arduino
BASIC Stamp
Fritzing
Gumstix
Make Controller Kit
OOPic
PICAXE
Rabbit Semiconductor
Tinkerforge

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

[1] Previous Releases. Wiring.org.co. Retrieved January 5,


2011.

8.6

External links

Ocial website
Processing.org
Arduino
Fritzing
Wiring on Facebook

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.

9.2.1

9.1 Features

9.2.2

Hello World

The Processing equivalent of a Hello World program is simply to draw a line:[1]


line(15, 25, 70, 90);
The following code is a better example of the look and feel
of the language.
//Hello mouse. void setup() { size(400, 400); stroke(255);
background(192, 64, 0); } void draw() { line(150, 25,
mouseX, mouseY); }

United States presidential election map

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.
When programming in Processing, all additional classes dened will be treated as inner classes when the code is translated into pure Java before compiling. This means that the
use of static variables and methods in classes is prohibited
unless you explicitly tell Processing that you want to code
in pure Java mode.
Processing also allows for users to create their own classes
within the PApplet sketch. This allows for complex data
types that can include any number of arguments and avoids
the limitations of solely using standard data types such as:
int (integer), char (character), oat (real number), and color
(RGB, ARGB, hex).

9.2 Examples

Output of the following example

The next example shows a map of the results of the 2008


USA presidential election. Blue denotes states won by
Barack Obama, and red denotes those won by John McCain. (Note: this map does not show the Nebraska district
in which Obama won an elector.)
PShape usa; PShape state; String [] Obama = { HI,
RI, CT, MA, ME, NH, VT, NY, NJ,
FL, NC, OH, IN, IA, CO, NV, PA, DE,

43

44

CHAPTER 9. PROCESSING

MD, MI, WA, CA, OR, IL, MN, WI,


DC, NM, VA }; String [] McCain = { 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.svg can be found at Wikimedia
Commons usa = loadShape("http://upload.wikimedia.
org/wikipedia/commons/3/32/Blank_US_Map.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); } }

9.3.4

Processing.js

Main article: Processing.js


In 2008, John Resig ported Processing to JavaScript using
the Canvas element for rendering,[3] 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.

9.3.5

iProcessing

iProcessing was built to help people develop native iPhone


applications using the Processing language. It is an integration of the Processing.js library and a Javascript application
framework for iPhone.

9.3.6

Spde

Spde (standing for Scala Processing Development Environment) replaces Processings reduced Java syntax and custom preprocessor with the o-the-shelf Scala programming
language which also runs on the Java platform and enforces
9.3.1 Design By Numbers
some of the same restrictions such as disallowing static
methods, while also allowing more concise code, and supProcessing was based on the original work done on Design porting functional programming.[4][5][6]
By Numbers project in MIT. It shares many of the same
ideas and is a direct child of that experiment.

9.3 Related projects

9.3.7
9.3.2

Wiring, Arduino, and Fritzing

Processing has spawned another project, Wiring, which


uses the Processing IDE with a collection of libraries written in the C++ language as a way to teach artists how to program microcontrollers. There are now two separate hardware projects, Wiring and Arduino, using the Wiring environment and language. Fritzing is another software environment of the same sort, which helps designers and artists
to document their interactive prototypes and to take the step
from physical prototyping to actual product.

9.3.3

Mobile Processing

Another spin-o project, now defunct, is Mobile Processing by Francis Li, which allowed software written using the
Processing language and environment to run on Java powered mobile devices. Today some of the same functionality
is provided by Processing itself.[2]

Quil

Quil (formerly named clj-processing) is a wrapper for Processing in the Clojure language, a Lisp that runs on the Java
platform.[7]

9.4

Awards

In 2005 Reas and Fry won the prestigious Golden Nica


award from Ars Electronica in its Net Vision category for
their work on Processing.
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 statement
says:
Drawing on a background in graphic design and computer
science, Ben Fry pursues a long-held fascination 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

9.9. REFERENCES
text documents. With Casey Reas, he founded the Processing Project, an open-source programming environment for
teaching computational design and sketching interactivemedia 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.
The IDE is licensed under the GNU General Public License.

9.6 Name
Originally, Processing had the URL at proce55ing.net, because the processing domain was taken. Eventually Reas
and Fry acquired the domain. Although the name had a
combination of letters and numbers, it was still pronounced
processing. They do not prefer the environment being referred to as Proce55ing. Despite the domain name change,
Processing still uses the term p5 sometimes as a shortened
name (p5 specically is used not p55).

9.7 See also


Cinder (C++)
OpenFrameworks (C++)
JavaFX
Max (software)
Processing.js

9.8 Footnotes
[1] Hello world! Processing.
[2] Android - Processing. Retrieved 2013-06-03.
[3] John Resig - Processing.js
[4] Spde: Spde. Technically.us. Retrieved on 2013-08-20.

45

[5] Coderspiel / Runaway processing. Technically.us. Retrieved


on 2013-08-20.
[6] Coderspiel / Flocking with Spde. Technically.us. Retrieved
on 2013-08-20.
[7] quil/quil. GitHub. Retrieved 26 January 2015.

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
Glassner, Andrew (August 9, 2010), Processing for Visual Artists: How to Create Expressive Images and Interactive Art (1st ed.), A K Peters/CRC Press, p. 955,
ISBN 1-56881-716-9
Reas, Casey; Fry, Ben (June 17, 2010), Getting Started
with Processing (1st ed.), Make, p. 208, ISBN 1-44937980-X
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-617-X
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

46
Vantomme, Jan (September 20, 2012), Processing 2,
Creative Programming Cookbook (1st ed.), Packt Publishing, p. 291, ISBN 9781849517942
Pearson, Matt (June 1, 2011), Generative Art, A practical guide using Processing (1st ed.), Manning, p. 240,
ISBN 9781935182627
Jan, Vantomme (September 20, 2012), Processing 2:
Creative Programming Cookbook (1st ed.), Packt Publishing, p. 306, ISBN 978-1849517942
Sauter, Daniel (May 2, 2013), Rapid Android Development: Build Rich, Sensor-Based Applications with Processing (1st ed.), Pragmatic Bookshelf, p. 300, ISBN
978-1937785062
Gradwohl, Nikolaus (May 20, 2013), Processing 2:
Creative Coding Hotshot (1st ed.), Packt Publishing, p.
266, ISBN 978-1782166726

9.10 External links


Ocial website
Processing.js ocial website
Ocial wiki
Ocial forum
OpenProcessing - sketches library
Processing.js blog
Processing.js Google group
Working with Processing and Arduino
Website (German) to the book with nice source-codes
and examples
Ruby-Processing, which is a ruby wrapper around the
Processing code art framework, built using JRuby

CHAPTER 9. PROCESSING

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

47

9.11 Text and image sources, contributors, and licenses


9.11.1

Text

Arduino Source: https://en.wikipedia.org/wiki/Arduino?oldid=676493570 Contributors: AxelBoldt, Caltrop, Ceaser, Hikari, Mahjongg, Kku,
Delirium, Darkwind, Kragen, Glenn, Scott, Donio, Mulad, Greglocock, Nv8200pa, Taxman, Val42, Klaus Leiss, Scruss, Raeky, Knobunc,
DocWatson42, BenFrantzDale, Ds13, Mcapdevila, Micru, Jorge Stol, Cmkpl, Halosix, Abdull, Thorwald, Imroy, Discospinster, ArnoldReinhold, Duchamp~enwiki, Bender235, PutzfetzenORG, Jantangring, Bobo192, Smalljim, R. S. Shaw, Giraedata, Trevj, Jdabney, Nasukaren, Radical Mallard, Velella, Marasmusine, Mindmatrix, Danmaz74, Pol098, Ruud Koot, Eyreland, SDC, CharlesC, DustyDingo~enwiki,
Sprague, Royan, Magister Mathematicae, Rjwilmsi, Koavf, Patrick Gill, Salix alba, MZMcBride, Allen Moore, Intgr, Lmatt, Tedder, Chobot,
ATH500, Remmelt, Hydrargyrum, Bovineone, Geertivp, Tkbwik, Wrachelson, Venix, Warrenm, Elkman, Wknight94, Arthur Rubin, Dspradau,
Petri Krohn, Red Jay, Back ache, JLaTondre, Snaxe920, Kingboyk, Mardus, Sbassi, Zlogic, Attilios, Lethalmonk, SmackBot, Gracehoper,
Faisal.akeel, DMellis, InverseHypercube, McGeddon, Misto, Arny, NickGarvey, Amatulic, Adamfeuer, JennyRad, Thumperward, Salvor,
George Church, Deli nk, Randomskk, Chendy, Dro Kulix, Frap, Alphathon, OrphanBot, JonHarder, Grhabyt, Stepho-wrs, Mwtoews, Salamurai, Pfhyper, RickO5, Ian Spackman, Toggio, IronGargoyle, TerryKing, Hu12, Courcelles, Sreeram shankar, Fabrice Florin, Amalas, Pfagerburg~enwiki, Drinibot, Yaris678, Cydebot, Nick Wilson, Gogo Dodo, SimenH, ShadowGuy, Neoforma, ClarkMills, Abqsteve, Surturz, Kozuch,
Waveking, Thijs!bot, Pemboid, Potax, MarshBot, Guy Macon, Jonathan Williams, JonOxer, Chrisjj3, JAnDbot, Viskr, CosineKitty, Khommel,
H3llbringer, Magioladitis, David Oliver, JamesBWatson, Oskay, Cadsuane Melaidhrin, Steven Walling, Jatkins, JMBryant, Gwern, Wimh, CommonsDelinker, Yannick56, Minime72706, Aervanath, Gonzalo M. Garcia, Ajfweb, Lexein, TXiKiBoT, Moumouza, Calwiki, Chuckwolber, Exprice, Nexus501, Sgbirch, Seb az86556, Rajsite, Jamelan, Andy Dingley, Synthebot, Nave.notnilc, Userper, Kbrose, Yngvarr, Anilashanbhag,
Yadoo86, Sav vas, Mikebar, Yintan, Rob Prikanowski, Soler97, Bentogoa, Udawatabhimanyu4, Ali asin, Henryerinjones, Linuxrules1337, Vbscript2, Misiu mp, Tintin192, Treekids, Kookish, ImageRemovalBot, Stephensb42, Shloimeborukh, ColorfulNumbers, GreenSpigot, VQuakr,
Machee, Gbarberi, Blanchardb, TjeerdVerhagen, Craigbic, Crazyburns, Awickert, Alexbot, Vancircuit, A Pirard, Arjayay, Jinlye, Chaosdruid,
Apparition11, DumZiBoT, Darkicebot, XLinkBot, H0dges, NobbiP, Cmr08, Cbenson1, Zodon, Fiskbil, Dsimic, Mortense, Johanroed, Jncraton, Tergenev, Cst17, Harviecz, MrOllie, Download, CUSENZA Mario, 84user, Jarble, Softy, Margin1522, Luckas-bot, Yobot, Wonder,
AnomieBOT, ICSeater, Gtz, Jim1138, JackieBot, Bjepson, Csigabi, Citation bot, Ghstwlf, LilHelpa, Xqbot, IslandMountain, PabloCastellano,
JimVC3, Rvumbaca, GrouchoBot, Xan2, Mort42, SassoBot, Brunonar, Alainr345, Thomas-pluralvonglas, Robertelder, Rstuvw, FrescoBot,
JaadesA, W Nowicki, Angmall, Idyllic press, JackStonePGD, FlyFire, Danhomer, DivineAlpha, Shiki2, Kristianpaul, Edderso, Joebigwheel,
Jonesey95, Skyerise, Tehuglyscientist, Jandalhandler, SimonPStevens, E-Soter, Mibix, ActivExpression, , Cyb3rn0id, Trappist the monk, DixonDBot, Michael9422, MakerShed, ErikvanB, MoreNet, Jluciani, RenaudBedard, Tbhotch, Julian dasilva, Roland Richter,
Obankston, Bernd.Brincken, Migaber, Peapodamus, Mazurov, DASHBot, EmausBot, Rusfuture, Dead Horsey, WikitanvirBot, LordStDennis, Kronick, Bricoman55, RA0808, Sukkin, Scgtrp, Tikitpok, Hscharler, ZroBot, Pbruins84, TLeek, , Ubarro, Lemio, Mowcius,
Sbmeirow, Lorem Ip, Howetimothy, Palosirkka, John Garvin, Tronixstu, JohnBoxall, ChuispastonBot, Gandrewstone, Sudozero, Fargasch,
Luckylarrycouk, Clay Digger, ClueBot NG, 392236a, Phry, Braincricket, Danim, Tuxskar, CasualVisitor, Helpful Pixie Bot, Simonmonk2,
Troy.hester, Se Ra Bu Tan, BG19bot, Virtualerian, Techformeplease, Paradoxiality, Gbulmeruk, Barefoottech, Northamerica1000, PatrickCarbone, Frze, Srcvale, Compfreak7, BKJanzen, Abishai Singh, Sn1per, Nungalpiriggal, Jjolla88, Zedshort, Udoklein, carusdaidalos, Ldsrc2008, Roguebhagman, Mfoulks3200, Shields Arduino, Laure f o, Khazar2, Riktw, Theoduino, Youdonotknow, Imheck, Dexbot, Roweboat14, Olonic, MarkAStephenson, Vinnycordeiro, Luli17, Razvaniycdi, Theskuter37, MaharajaMD, MWikiOrg, Prestja, Edsfocci, Pdecalculus, Onorai, Dairhead, Kirstine Dupont, TobiasAD, Pabhilash, Samyulg, Ales9000, Borg4223, WikiEditingResearcher, RaphaelQS, Htbwmedia,
Ashishbuntybhaiya, Carafriez, Toastcoast, Rajib.hyderabad, ScotXW, Snakomaniac, WAYNELYW, Brad Dyer, Lagoset, Cman21031, Scarlettail, Dsprc, Darkness Fallss, Engr Wasim Khan, 329n8z7TeL, Karlsonx, Sarr Cat, Andhof-mt, Javiterr, Eudorina412, Gondi56, Hemangjoshi37a,
Hackarobot, Petschekr, JeremiahY, B445778, CitrusEllipsis and Anonymous: 453
Single-board microcontroller Source: https://en.wikipedia.org/wiki/Single-board_microcontroller?oldid=671356869 Contributors: Alanl,
Wtshymanski, Jeh, SmackBot, Gizzakk, TerryKing, Pfagerburg~enwiki, Mika1h, Guy Macon, Kuyabribri, Wimh, Andy Dingley, Fsmoura,
Praveen khm, Nepenthes, Mortense, Download, Yobot, J04n, Stidem, RjwilmsiBot, Sbmeirow, Raesak, Snotbot, Danim, Lyktorna, Mandylau,
Debouch, Onorai, Dairhead, SJ Defender, ScotXW and Anonymous: 15
Atmel AVR Source: https://en.wikipedia.org/wiki/Atmel_AVR?oldid=675796990 Contributors: PierreAbbat, Maury Markowitz, Mahjongg,
Egil, Stan Shebs, Glenn, Alf, Saltine, EthanL, Wernher, RedWolf, Pengo, Alan Liefting, DavidCary, DanielHolth, Chowbok, Alexf,
Julien~enwiki, Abdull, Trevor MacInnis, Chappell, Moxfyre, Imroy, Rhobite, Stevenyu~enwiki, Rnsanchez, Bender235, Kms, Phil websurfer@yahoo.com, Dennis Brown, Jevinsweval, Foobaz, Mrbill, Chbarts, AshtonBenson, (aeropagitica), Cburnett, Suruena, Versageek, Unixxx,
Kelly Martin, Toussaint, Doruu, Maxim Razin, FlaBot, Toresbe, Doruuu, Lmatt, Alvin-cs, Toxygen, Homo stannous, Jidan, Chobot, WriterHound, YurikBot, Wavelength, Crotalus horridus, Chungyan5, Hydrargyrum, Gaius Cornelius, Shaddack, Dugosz, Gorie, Robdurbar, Bb3cxv,
Bozoid, Jbattersby, Groink, Sagsaw, Morcheeba, Cbogart2, That Guy, From That Show!, KnightRider~enwiki, SmackBot, Bluelip, Transcendent,
Reedy, Royalguard11, Firstrock, Chris the speller, Bluebot, TimBentley, Thumperward, McNeight, ThePianoMan, Can't sleep, clown will eat
me, Frap, Alphathon, Dorutc, ProtocolOH, Je Wheeler, Derek R Bullamore, Glover, Mojo-chan, Steve1608, 16@r, Ex nihil, Mellery, FtPeter,
CmdrObot, Van helsing, Pfagerburg~enwiki, FlyingToaster, WeggeBot, Vwollan, JLD, Briantw, Thrapper, Thijs!bot, Epbr123, Memty Bot,
Electron9, Jauricchio, Vibhutesh, Guy Macon, Rehnn83, Arsenikk, PhilKnight, Magioladitis, Ljudina, Oskay, SwiftBot, Choppingmall, Mdulcey, Gwern, Tovven, Kiore, Ferling, Glrx, R'n'B, Smial, GrahamDavies, Sbogdanov, Vesa Linja-aho, Mrtangent, Lunakid, Zbaird, VolkovBot,
PGSONIC, Mauiyer, Sarenne, GcSwRhIc, Jcswright2, Andy Dingley, Hmms, Dimitdim, Metalliqaz, Susan714, Mihaigalos, Goosnarrggh, Masgatotkaca, SDiZ, Letter4vishal, Smishek, MenoBot, Martarius, Sfan00 IMG, Mcleanj1, Brooknet, Hossein4737, DragonBot, Jeroen74~enwiki,
Ordoon, DumZiBoT, XLinkBot, Ckgrier2, Stickee, Dthomsen8, C. A. Russell, NobbiP, Mortense, Kevin.kirkup, Ethanpet113, MrOllie, Pmod,
Mitch feaster, Dkinzer, Snaily, Yobot, Amirobot, AnomieBOT, Jim1138, Kingpin13, Kushagraalankar, Akilaa, Xqbot, Brunonar, Ottobonn,
MultiPoly, FrescoBot, Kirchhovl, Gablix, Cannolis, PigFlu Oink, Vrwlv, DrilBot, HRoestBot, Night Ravager, Lotje, Kshdeo, Jfmantis,
V.podzimek, TjBot, DexDor, Identime, AndyHe829, EmausBot, Dead Horsey, Sed par, Ani8051, Mo ainm, Gagarine, Sbmeirow, Atmelfan,
Edgar.bonet, Pun, Nerd bzh, Mikhail Ryazanov, ClueBot NG, Ashoksharmaz87, Widr, Danim, Iswantoumy, Helpful Pixie Bot, Gauravsangwan, BG19bot, Akkazemi, USB1000, Bonnie13J, Roy tate, Qwerty9030, DarafshBot, Ksvitale, Puguhwah, Mahmoodheshmati, Mogism, Amanparkash, Krikkit1, Epicgenius, Osiixy, Tomitech, Tolmeros, Akhilsn, Moshaydi and Anonymous: 303

48

CHAPTER 9. PROCESSING

Atmel AVR instruction set Source: https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set?oldid=663606612 Contributors: Rl, Wernher,


DavidCary, Chinakow, ArnoldReinhold, AshtonBenson, Nazli, Suruena, Koassim, Marudubshinki, Doruuu, Gurch, Alvin-cs, WriterHound,
Bovineone, MidoriKid, Rwwww, CrazyTerabyte, Thumperward, CapitalR, CmdrObot, Pfagerburg~enwiki, Vwollan, Tomasf, Magioladitis,
SwiftBot, Wjl2, Svofski, Mortense, Dkinzer, Yobot, AnomieBOT, Cl2k, Who then was a gentleman?, Boobarkee, SexyGoat, Edgar.bonet,
ClueBot NG, Frietjes, Danim, Frosty, Jamesmcmahon0, Tolmeros, Cjfman, Samy1377 and Anonymous: 22
Orthogonal instruction set Source: https://en.wikipedia.org/wiki/Orthogonal_instruction_set?oldid=647040524 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, 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, 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=673634570 Contributors: Comte0, Nixdorf, CesarB, Haakon, Mac, Ronz, Tacvek, David Latapie, Mrand, Omegatron, Gakrivas, Sjorford, KellyCoinGuy, Alan Liefting, DavidCary, 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, 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, Vincenzo.romano, Dave104, Beetstra, Dicklyon, Andrwsc, Galadh, Hu12, CyberAran~enwiki, AbsolutDan, 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,
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, 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, 122589423KM, Acelros, CubeSpawn, Thiago.correa,
Alinke2000, Maxkreusen, EmausBot, East3YrsWest3Yrs, Zollerriia, Oliver Bestwalter, Veikk0.ma, Worldpuppet, Wayaguo, Nerd bzh, Mjbmrbot, Juliusbaxter, Jmreinhart, Catlemur, Todrobbins, Michael Barera, Jdwolin, BazokaJoe, Ajv39, Simone Cicero, IjonTichyIjonTichy, RickHolder, Osat44, Changfang, Luli17, Viswanathsai, Csepartha, Imphil2, OHDIY, Batboys, Loic.urbain, -1, Fixuture, Stockwellnow,
Lagoset, Stiegenaufgang, Xxzso, Ginadav, Zoomn, Fdm11, Awlsll, Gihiw and Anonymous: 192
List of Arduino compatibles Source: https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems?oldid=669041355
Contributors: Jcw~enwiki, Micru, Alexf, Arosa, Imroy, ArnoldReinhold, Bender235, ColBatGuano, BenediktWildenhain, Wtshymanski, RHaworth, Jamesmorrison, Nsayer, Chris the speller, Jamesnewton, Thumperward, Hbachus, Musashiaharon, TerryKing, Mblumber, Guy Macon, 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, ChrisGualtieri, Ajv39, Jojo69003, Youdonotknow, Aalbino, Mogism,
Howtronics, Tony Mach, Greg75FR, Dfrobot, Blockthor, Sepiaz, Sharya77, Happyman7, ThongEric, Slicmicro, LuwieThong, Felixemman,
Daneduplooy, Brentsinger, Tiisaidipjp, Gpanos123, Knivd, Sodaq, Wbz cypress, Lagoset, Filedelinkerbot, Jcamdr, Bobricius, RoundupResistance, R2d2ricky, Sarr Cat, JudeBass, Shamikrudra and Anonymous: 64
Wiring (development platform) Source: https://en.wikipedia.org/wiki/Wiring_(development_platform)?oldid=664809785 Contributors:
Dcoetzee, Bearcat, Tzf, Micru, Woohookitty, Tony1, SmackBot, Thumperward, Cybercobra, Cydebot, Wikilolo, Andy Dingley, Mikebar, Jerryobject, JL-Bot, Ethridgela, EoGuy, SoxBot, Addbot, Mortense, Ben Ben, Yobot, 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=675005830 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, 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, !Silent, Boomur, SpBot, Lightbot, Yobot, KamikazeBot, VX, Wickorama, Xqbot, 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, Qzekrom, Fizzimizzi, Kqb Kushal and Anonymous: 138

9.11.2

Images

File:ATmega169-MLF.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a7/ATmega169-MLF.jpg License: CC-BY-SA-3.0


Contributors: ? Original artist: ?
File:ATmega8_01_Pengo.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a9/ATmega8_01_Pengo.jpg License: CC BY-SA
3.0 Contributors: Own work Original artist: Pengo

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

49

File:AVR_ATXMEGA_128A1.JPG Source: https://upload.wikimedia.org/wikipedia/commons/d/db/AVR_ATXMEGA_128A1.JPG License: CC BY 3.0 Contributors: Own work Original artist: Springob
File:AVRduinoUplus.jpg Source: https://upload.wikimedia.org/wikipedia/commons/3/33/AVRduinoUplus.jpg License: CC BY-SA 3.0 Contributors: took a photo of the board we developed
Previously published: on own website slicmicro.com Original artist: Slicmicro
File:A_hand-soldered_Arduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/0/07/A_hand-soldered_Arduino.jpg License:
CC BY-SA 2.0 Contributors: Flickr: A hand-soldered Arduino Original artist: Matt Biddulph
File:Ambox_important.svg Source: https://upload.wikimedia.org/wikipedia/commons/b/b4/Ambox_important.svg License: Public domain
Contributors: Own work, based o of Image:Ambox scales.svg Original artist: Dsmurat (talk contribs)
File:Arduino-compatible_R3_UNO_Sku066313-01.jpg
Source:
https://upload.wikimedia.org/wikipedia/commons/6/66/
Arduino-compatible_R3_UNO_Sku066313-01.jpg License: Public domain Contributors: Arduino-Compatible R3 UNO ATmega16U2
AVR USB Board (le) Original artist: banggood.com
File:Arduino-uno-perspective-whitw.jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/ec/Arduino-uno-perspective-whitw.
jpg License: CC BY 2.0 Contributors:
Arduino-uno-perspective.jpg Original artist: Arduino-uno-perspective.jpg: Creative Tools
File:Arduino316.jpg Source: https://upload.wikimedia.org/wikipedia/commons/6/6c/Arduino316.jpg License: CC BY-SA 3.0 Contributors:
http://www.arduino.cc/ Original artist: Nicholas Zambetti
File:Arduino_BT.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f2/Arduino_BT.jpg License: CC BY 2.0 Contributors:
Flickr: Arduino BT Original artist: David Mellis
File:Arduino_Diecimila.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/17/Arduino_Diecimila.jpg License: CC-BY-SA3.0 Contributors: Wikipedia anglophone, article Arduino Original artist: Franky47
File:Arduino_Duemilanove_0509.JPG Source: https://upload.wikimedia.org/wikipedia/commons/f/f7/Arduino_Duemilanove_0509.JPG
License: Public domain Contributors: Own work Original artist: Minime72706
File:Arduino_Ethernet_Board.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/16/Arduino_Ethernet_Board.jpg License:
CC BY-SA 2.0 Contributors: Flickr: Arduino Ethernet Board Original artist: oomlout
File:Arduino_Fio.jpg Source: https://upload.wikimedia.org/wikipedia/commons/6/68/Arduino_Fio.jpg License: CC BY 2.0 Contributors:
Flickr: Arduino Fio Original artist: David Mellis
File:Arduino_Leonardo.jpg Source: https://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Leonardo.jpg License: CC BY-SA 2.0
Contributors: Flickr: Arduino Leonardo! Original artist: Jeremy Blum
File:Arduino_Logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/87/Arduino_Logo.svg License: Public domain Contributors: http://arduino.cc Original artist: Unknown
File:Arduino_Mega2560.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f7/Arduino_Mega2560.jpg License: CC BY-SA
3.0 Contributors: Own work Original artist: Andy Dingley
File:Arduino_Mega_2.jpg Source: https://upload.wikimedia.org/wikipedia/commons/b/b4/Arduino_Mega_2.jpg License: CC BY-SA 2.0
Contributors: Flickr: Arduino Mega Original artist: oomlout
File:Arduino_Micro.jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/e6/Arduino_Micro.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Geek3 (talk)
File:Arduino_Mini.jpg Source: https://upload.wikimedia.org/wikipedia/commons/0/04/Arduino_Mini.jpg License: CC BY 2.0 Contributors:
Flickr: Arduino Mini Original artist: David Mellis
File:Arduino_Nano.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/8d/Arduino_Nano.jpg License: CC BY 2.0 Contributors:
Flickr: Arduino Nano Original artist: David Mellis
File:Arduino_Pro.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/af/Arduino_Pro.jpg License: CC BY 2.0 Contributors:
Flickr: Arduino Pro Original artist: David Mellis
File:Arduino_Uno_-_R3.jpg Source: https://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg License: CC BY 2.0
Contributors: Arduino Uno - R3 Original artist: SparkFun Electronics from Boulder, USA
File:Arduino_top-1.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a5/Arduino_top-1.jpg License: Public domain Contributors: Own work Original artist: DustyDingo
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

50

CHAPTER 9. PROCESSING

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: ? 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 BY-SA 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_Software_Portal_Logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/67/Nuvola_apps_emacs_vector.svg License: LGPL Contributors:
Nuvola_apps_emacs.png Original artist: Nuvola_apps_emacs.png: David Vignoni
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-SA-3.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
Limited-edition_orange_Arduino_Duemilanove.jpg License:
Duemilanove Original artist: Matt Biddulph

Source:
https://upload.wikimedia.org/wikipedia/commons/7/76/
CC BY-SA 2.0 Contributors: Flickr: Limited-edition orange Arduino

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
File:Myfreescalewebpage_bigbrother_usb.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/4/41/Myfreescalewebpage_
bigbrother_usb.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Jojo69003
File:Myfreescalewebpage_theuno.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/1a/Myfreescalewebpage_theuno.jpg License: Public domain Contributors: Own work Original artist: Jojo69003
File:Nuvola_apps_ksim.png Source: https://upload.wikimedia.org/wikipedia/commons/8/8d/Nuvola_apps_ksim.png License: LGPL Contributors: http://icon-king.com Original artist: David Vignoni / ICON KING
File:Open-source-hardware-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/fd/Open-source-hardware-logo.svg License: Public domain Contributors: http://www.oshwa.org/open-source-hardware-logo Original artist: Mateo Zlatar

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

51

File:Open_Source_Hardware_(OSHW)_Logo_on_blank_PCB.jpg Source: https://upload.wikimedia.org/wikipedia/commons/0/0f/Open_


Source_Hardware_%28OSHW%29_Logo_on_blank_PCB.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Altzone
File:PANSTAMP.JPG Source: https://upload.wikimedia.org/wikipedia/en/c/cd/PANSTAMP.JPG License: CC-BY-3.0 Contributors: ? Original artist: ?
File:Pickit1_devboard.jpg Source: https://upload.wikimedia.org/wikipedia/commons/9/97/Pickit1_devboard.jpg License: Copyrighted free
use Contributors: ? Original artist: ?
File:Picoduino_size_demonstration.png Source: https://upload.wikimedia.org/wikipedia/commons/e/e8/Picoduino_size_demonstration.
png License: CC BY-SA 3.0 Contributors: Own work Original artist: Bobricius
File:Power_and_Pin13_LED_on_Arduino_Compatible_Board.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/2/27/
Power_and_Pin13_LED_on_Arduino_Compatible_Board.jpg License: CC BY-SA 4.0 Contributors: Own work Original artist: Rajib Ghosh
File:Processing-sketch_jun11a.png Source: https://upload.wikimedia.org/wikipedia/commons/a/ac/Processing-sketch_jun11a.png License:
CC0 Contributors: Own work Original artist: Joosep-Georg
File:Processing_2.2_Mac_OS_X_Screenshot.png Source: https://upload.wikimedia.org/wikipedia/commons/f/fb/Processing_2.2_Mac_
OS_X_Screenshot.png License: CC0 Contributors: Own work Original artist: Stiegenaufgang
File:Processing_Logo_Clipped.svg Source: https://upload.wikimedia.org/wikipedia/commons/5/59/Processing_Logo_Clipped.svg License:
CC BY 3.0 Contributors: http://www.cc.gatech.edu/grads/w/wmanzoul/portfolio_images/ProcessingLogo.png Original artist: Woodmath
File:Question_book-new.svg Source: https://upload.wikimedia.org/wikipedia/en/9/99/Question_book-new.svg License: Cc-by-sa-3.0 Contributors:
Created from scratch in Adobe Illustrator. Based on Image:Question book.png created by User:Equazcion Original artist:
Tkgd2007
File:RepRap_'Mendel'.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c7/RepRap_%27Mendel%27.jpg License: CC BYSA 3.0 Contributors: http://vimeo.com/6865848 - video from open-source RepRap project Original artist: CharlesC
File:SODAQ.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/19/SODAQ.jpg License: CC BY-SA 3.0 Contributors: Own
work Original artist: Sodaq
File:SainSmart_Mega2560.JPG Source: https://upload.wikimedia.org/wikipedia/commons/4/49/SainSmart_Mega2560.JPG License: CC
BY-SA 3.0 Contributors: Own work Original artist: LuwieThong
File:SainSmart_UNO.JPG Source: https://upload.wikimedia.org/wikipedia/commons/0/0b/SainSmart_UNO.JPG License: CC BY-SA 3.0
Contributors: Own work Original artist: LuwieThong
File:SainSmart_UNO_R3.JPG Source: https://upload.wikimedia.org/wikipedia/commons/6/62/SainSmart_UNO_R3.JPG License: CC BYSA 3.0 Contributors: Own work Original artist: LuwieThong
File:Sanguino_v1.0.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c5/Sanguino_v1.0.jpg License: CC BY-SA 2.0 Contributors: Flickr: Sanguino v1.0 Original artist: Zach Hoeken
File:Symbol_list_class.svg Source: https://upload.wikimedia.org/wikipedia/en/d/db/Symbol_list_class.svg License: Public domain Contributors: ? Original artist: ?
File:Teensy++_2.0_microcontroller.jpg
Source:
https://upload.wikimedia.org/wikipedia/commons/f/fc/Teensy%2B%2B_2.0_
microcontroller.jpg License: CC BY-SA 3.0 Contributors: https://cdn.sparkfun.com//assets/parts/8/0/2/5/11781-01.jpg Original artist:
www.sparkfun.com
File:Teensy_2.0_microcontroller.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c3/Teensy_2.0_microcontroller.jpg License: CC BY-SA 3.0 Contributors: https://cdn.sparkfun.com//assets/parts/9/5/3/5/12765-01.jpg Original artist: www.sparkfun.com
File:Thin_Layer_Breadstick_FPGA_Dev_Board.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/2/20/Thin_Layer_
Breadstick_FPGA_Dev_Board.jpg License: CC BY-SA 3.0 Contributors: With my camera at my workplace.
Previously published: http://www.thin-layer-embedded.com Original artist: Brentsinger
File:Thin_Layer_Embedded_Goldilocks_FPGA_Development_Board.jpg Source: https://upload.wikimedia.org/wikipedia/commons/7/
7f/Thin_Layer_Embedded_Goldilocks_FPGA_Development_Board.jpg License: CC BY-SA 3.0 Contributors: With my camera at my workplace.
Previously published: http://www.thin-layer-embedded.com Original artist: Brentsinger
File:TinyDuinoThumbnail.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a7/TinyDuinoThumbnail.jpg License: CC BYSA 3.0 Contributors: Own work Original artist: Tinycircuits
File:TinyLilyThumbnail.png Source: https://upload.wikimedia.org/wikipedia/commons/9/93/TinyLilyThumbnail.png License: CC BY-SA
3.0 Contributors: Own work Original artist: Tinycircuits
File:Top_view_of_the_Banguino_module.jpg Source:
https://upload.wikimedia.org/wikipedia/en/2/2a/Top_view_of_the_Banguino_
module.jpg License: CC-BY-SA-3.0 Contributors:
http://dimitech.com/products.php Original artist:
Dimitech
File:UnoConnections.jpg Source: https://upload.wikimedia.org/wikipedia/commons/9/9d/UnoConnections.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: 1sfoerster
File:Versalino-Uno-11.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/cc/Versalino-Uno-11.jpg License: CC BY-SA 3.0
Contributors: Own work Original artist: pdegregorio
File:Wikibooks-logo-en-noslogan.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al.
File:XO_Motherboard.png Source: https://upload.wikimedia.org/wikipedia/commons/8/86/XO_Motherboard.png License: CC BY-SA 3.0
Contributors: http://wiki.laptop.org/go/Image:XO_Motherboard.png, uploaded by Kozuch Original artist: John A. Watlington

52

CHAPTER 9. PROCESSING

9.11.3

Content license

Creative Commons Attribution-Share Alike 3.0

You might also like