You are on page 1of 60

Arduino

Contents
1

Arduino

1.1

History

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

1.2

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

1.2.1

Ocial boards

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

1.2.2

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

1.3

Software

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

1.3.1

Sample program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3.2

Other IDE

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

1.4

Development

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

1.5

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

1.6

Recognitions

1.7

Trademark dispute

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

1.8

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

1.9

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

1.10 References

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

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

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

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

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

10

2.8

Single-board microcontrollers today

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

10

2.9

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

11

2.10 References

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i

11

ii

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

11

Atmel AVR

12

3.1

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

12

3.2

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

12

3.2.1

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

12

3.2.2

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

13

3.2.3

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

14

3.2.4

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

14

3.2.5

MCU speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

3.2.6

Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

3.2.7

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

15

Programming interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.3.1

ISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.3.2

PDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.3.3

High-voltage serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.3.4

High-voltage parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.3.5

Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.3.6

ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.3.7

aWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

Debugging interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.4.1

debugWIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.4.2

JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

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

18

3.5.4

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

18

3.5.5

AVR Dragon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.6

JTAGICE mkI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.7

JTAGICE mkII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.8

JTAGICE3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.9

AVR ONE! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

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

3.6

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

20

3.7

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

21

3.8

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

21

3.9

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

21

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

22

3.3

3.4

3.5

CONTENTS

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

22

Atmel AVR instruction set

24

4.1

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

24

4.1.1

Special purpose registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.1.2

Status bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

Processor registers

4.2

Addressing

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

24

4.3

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

25

4.4

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

25

4.5

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

25

4.6

Instruction encoding

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

25

4.7

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

26

4.8

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

27

5.1.4

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

28

5.1.5

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

28

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

28

5.2
6

iii

Open-source hardware

29

6.1

History

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

29

6.2

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

30

6.3

Development

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

31

6.4

Open-source labs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

6.5

Open-source electronics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

6.6

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

32

6.7

Reception and impact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

6.8

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

33

6.9

References

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

33

6.10 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

List of Arduino compatibles

36

7.1

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

36

7.1.1

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

36

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

36

7.2.1

Arduino footprint-compatible boards

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

36

7.2.2

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

36

7.2.3

Software-compatibility only

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

36

7.2.4

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

36

7.2

iv

CONTENTS
7.3

Non-Arduino boards

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

37

7.4

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

37

7.5

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

37

7.6

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

42

7.7

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

43

Wiring

44

8.1

Software

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

44

8.2

Open hardware and open source

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

44

8.3

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

45

8.3.1

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

45

8.3.2

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

45

8.4

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

45

8.5

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

45

8.6

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

45

Processing

46

9.1

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

46

9.2

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

46

9.2.1

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

46

9.2.2

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

46

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

47

9.3.1

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

47

9.3.2

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

47

9.3.3

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

47

9.3.4

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

47

9.3.5

p5.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

9.3.6

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

47

9.3.7

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

47

9.3.8

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

47

9.4

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

47

9.5

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

48

9.6

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

48

9.7

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

48

9.8

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

48

9.9

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

48

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

49

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

50

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

50

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

52

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

55

9.3

Chapter 1

Arduino
For other uses, see Arduino (disambiguation).

engineers to create digital projects. The Wiring platform


consisted of a hardware PCB with an ATmega128 microcontroller, an integrated development environment (IDE)
Arduino is a hardware and software company, project,
library functions to easily proand user community that designs and manufactures com- based on Processing and [4]
gram
the
microcontroller.
puter open-source hardware, open-source software, and
microcontroller-based kits for building digital devices In 2005, Massimo Banzi, with David Mellis (then an
and interactive objects that can sense and control phys- IDII student) and David Cuartielles, added support for
ical devices.[1]
the cheaper ATmega8 microcontroller to Wiring. But inThe project is based on microcontroller board designs, stead of continuing the work on Wiring, they forked (or
started running it as
produced by several vendors, using various microcon- copied) the Wiring source code and
[4]
a
separate
project,
called
Arduino.
trollers. These systems provide sets of digital and analog
I/O pins that can interface to various expansion boards
(termed shields) and other circuits. The boards feature serial communication interfaces, including Universal Serial
Bus (USB) on some models, for loading programs from
personal computers. For programming the microcontrollers, the Arduino project provides an integrated development environment (IDE) based on a programming
language named Processing, which also supports the languages C and C++.

The Arduinos initial core team consisted of Massimo


Banzi, David Cuartielles, Tom Igoe, Gianluca Martino,
and David Mellis.[5]
The name Arduino comes from a bar in Ivrea, where some
of the founders of the project used to meet. The bar was
named after Arduin of Ivrea, who was the margrave of the
March of Ivrea and King of Italy from 1002 to 1014.[6]

Following the completion of the Wiring platform, its


lighter, lower cost versions[7] were created and made
The rst Arduino was introduced in 2005, aiming to pro- available to the open-source community. Associated
vide a low cost, easy way for novices and professionals researchers, including David Cuartielles, promoted the
to create devices that interact with their environment us- idea.[5]
ing sensors and actuators. Common examples of such
devices intended for beginner hobbyists include simple
robots, thermostats, and motion detectors.

1.2 Hardware

Arduino boards are available commercially in preassembled form, or as do-it-yourself kits. The hardware design specications are openly available, allowing the Arduino boards to be produced by anyone. Adafruit Industries estimated in mid-2011 that over 300,000 ocial Arduinos had been commercially produced,[2] and in 2013
that 700,000 ocial boards were in users hands.[3]

An Arduino board historically consists of an Atmel 8-,


16- or 32-bit AVR microcontroller (although since 2015
other makers microcontrollers have been used) with
complementary components that facilitate programming
and incorporation into other circuits. An important aspect of the Arduino is its standard connectors, which
let users connect the CPU board to a variety of interchangeable add-on modules termed 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. Before 2015, Ocial Arduinos had
used the Atmel megaAVR series of chips, specically the
ATmega8, ATmega168, ATmega328, ATmega1280, and
ATmega2560. In 2015, units by other producers were
added. A handful of other processors have also been used

1.1 History
Colombian student Hernando Barragn created the development platform Wiring as his Masters thesis project
in 2004 at the Interaction Design Institute Ivrea (IDII)
in Ivrea, Italy. Massimo Banzi and Casey Reas (known
for his work on Processing) were supervisors for his thesis. The goal was to create low cost, simple tools for non1

An early Arduino board[8] with an RS-232 serial communication interface (upper left) and an Atmel ATmega8 microcontroller
chip (black, lower right); the 14 digital I/O pins are located at the
top and the six analog input pins at the lower right.

CHAPTER 1. ARDUINO

An ocial Arduino Uno Revision 2 with descriptions of the I/O


locations

tion shields are also commercially available. The Arduino


Nano, and Arduino-compatible Bare Bones Board[10] and
by Arduino compatible devices. Most boards include a Boarduino[11] boards may provide male header pins on
5 V linear regulator and a 16 MHz crystal oscillator (or the underside of the board that can plug into solderless
ceramic resonator in some variants), although some de- breadboards.
signs such as the LilyPad run at 8 MHz and dispense with
Many Arduino-compatible and Arduino-derived boards
the onboard voltage regulator due to specic form-factor
exist. Some are functionally equivalent to an Arduino and
restrictions. An Arduinos microcontroller is also precan be used interchangeably. Many enhance the basic Arprogrammed with a boot loader that simplies uploading
duino by adding output drivers, often for use in schoolof programs to the on-chip ash memory, compared with
level education, to simplify making buggies and small
other devices that typically need an external programmer.
robots. Others are electrically equivalent but change
This makes using an Arduino more straightforward by althe form factor, sometimes retaining compatibility with
lowing the use of an ordinary computer as the programshields, sometimes not. Some variants use dierent promer. Currently, optiboot bootloader is the default bootcessors, of varying compatibility.
loader installed on Arduino UNO.[9]
At a conceptual level, when using the Arduino integrated
development environment, all boards are programmed
over a serial connection. Its implementation varies with
the hardware version. Some serial Arduino boards contain a level shifter circuit to convert between RS-232
logic levels and transistortransistor logic (TTL) level
signals. Current Arduino boards are programmed via
Universal Serial Bus (USB), implemented using USBto-serial adapter chips such as the FTDI FT232. Some
boards, such as later-model Uno boards, substitute the
FTDI chip with a separate AVR chip containing USBto-serial rmware, which is reprogrammable via its own
ICSP header. Other variants, such as the Arduino Mini
and the unocial Boarduino, use a detachable USB-toserial adapter board or cable, Bluetooth or other methods,
when used with traditional microcontroller tools instead
of the Arduino IDE, standard AVR in-system programming (ISP) programming is used.
The Arduino board exposes most of the microcontrollers I/O pins for use by other circuits.
The
Diecimila[lower-alpha 1] , Duemilanove[lower-alpha 2] , and current Uno[lower-alpha 3] 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.1-inch (2.54 mm) headers. Several plug-in applica-

1.2.1 Ocial boards


Further information: List of Arduino boards and compatible systems
The original Arduino hardware was produced by the Italian company Smart Projects.[12] Some Arduino-branded
boards have been designed by the American companies
SparkFun Electronics and Adafruit Industries.[13] As of
2016, 17 versions of the Arduino hardware had been
commercially produced.
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]

1.3. SOFTWARE
Arduino Nano
Arduino Due
(ARM Cortex-M3 core)
LilyPad Arduino (rev 2007)

3
as syntax highlighting, brace matching, and automatic
indentation, and provides simple one-click mechanism
to compile and load programs to an Arduino board. A
program written with the IDE for Arduino is called a
sketch.[18]

The Arduino IDE supports the languages C and C++ using special rules to organize code. The Arduino IDE supplies a software library called Wiring from the Wiring
1. ^ Arduino - ArduinoBoardMega2560.
ar- project, which provides many common input and output
duino.cc.
procedures. A typical Arduino C/C++ sketch consist of
two functions that are compiled and linked with a proCite error: There are <ref group=lower-alpha> tags or gram stub main() into an executable cyclic executive pro{{efn}} templates on this page, but the references will not gram:
show without a {{reist|group=lower-alpha}} template or
{{notelist}} template (see the help page).
setup(): a function that runs once at the start of a
program and that can initialize settings.
Arduino Yun

1.2.2

Shields

Arduino and Arduino-compatible boards use printed circuit expansion boards called shields, which plug into the
normally supplied Arduino pin headers. Shields can
provide motor controls for 3D printing and other applications, Global Positioning System (GPS), Ethernet,
liquid crystal display (LCD), or breadboarding (prototyping). Several shields can also be made do it yourself
(DIY).[14][15][16]

loop(): a function called repeatedly until the board


powers o.
After compiling and linking with the GNU toolchain, also
included with the IDE distribution, the Arduino IDE employs the program avrdude to convert the executable code
into a text le in hexadecimal coding that is loaded into
the Arduino board by a loader program in the boards
rmware.

Example Arduino shields


Multiple shields can be stacked. In this example the 1.3.1
top shield contains a solderless breadboard.

Sample program

Dragino Lora Shield allows the user to send data and Most Arduino boards contain an LED and a load resistor
connected between pin 13 and ground which is a convereach extremely long ranges at low data-rates.
nient feature for many tests.[19]
Screw-terminal breakout shield in a wing-type forA typical program for a beginning Arduino programmer
mat
blinks a light-emitting diode (LED) on and o. This pro Adafruit Motor Shield with screw terminals for con- gram is usually loaded in the Arduino board by the manufacturer. In the Arduino environment, a user might write
nection to motors
such a program as shown:[19]
Adafruit Datalogging Shield with a Secure Digital
#dene LED_PIN 13 void setup() { pinMode(LED_PIN,
(SD) card slot and real-time clock (RTC) chip
OUTPUT); // Enable pin 13 for digital output } void
HackARobot Fabric Shield designed for Arduino loop() { digitalWrite(LED_PIN, HIGH); // Turn on the
Nano to hook up motors and sensors such as gyro- LED delay(1000); // Wait one second (1000 millisecscope or GPS, and other breakout boards such as onds) digitalWrite(LED_PIN, LOW); // Turn o the
WiFi, Bluetooth, RF, etc.
LED delay(1000); // Wait one second }

1.3 Software
1.3.2 Other IDE
The Arduino project provides the Arduino integrated development environment (IDE), which is a cross-platform
application written in the programming language Java.
It originated from the IDE for the languages Processing
and Wiring. It is designed to introduce programming to
artists and other newcomers unfamiliar with software development. It includes a code editor with features such

Arduino programs may be written in any programming


language with a compiler that produces binary machine code. Atmel provides a development environment for their microcontrollers, AVR Studio and the
newer Atmel Studio, which can be used for programming
Arduino.[20][21]

CHAPTER 1. ARDUINO

1.5 Applications
See also: List of open-source hardware projects
Xoscillo, an open-source oscilloscope[25]
Scientic equipment[26] such as the Chemduino[27]
Arduinome, a MIDI controller device that mimics
the Monome
Power LED (red) and integrated LED on Line 13 (green) on Arduino compatible board, made in China

1.4 Development

OBDuino, a trip computer that uses the on-board


diagnostics interface found in most modern cars
Ardupilot, drone software and hardware
ArduinoPhone, a do-it-yourself cellphone[28][29]
GertDuino, an Arduino mate for the Raspberry Pi[30]
Water quality testing platform[31]
Homemade CNC using Arduino and DC motors
with close loop control by Homofaciens[32]
DC motor control using Arduino and H-Bridge[33]

1.6 Recognitions
The Arduino project received an honorary mention in the
Digital Communities category at the 2006 Prix Ars Electronica.[34]

1.7 Trademark dispute


In early 2008, the ve cofounders of the Arduino project
created a company, Arduino LLC,[35] to hold the 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. The
Arduino is an open-source hardware. The hardware ref- founding bylaws of Arduino LLC specied that each of
erence designs are distributed under a Creative Commons the ve founders transfer ownership of the Arduino brand
Attribution Share-Alike 2.5 license and are available on to the newly formed company.
the Arduino website. Layout and production les for At the end of 2008, Gianluca Martinos company, Smart
some versions of the hardware are also available. The Projects, along with Microsoft, registered the Arduino
source code for the IDE is released under the GNU Gen- trademark in Italy and kept this a secret from the other
eral Public License, version 2.[22]
cofounders for about two years. This was revealed when
Arduino-compatible R3 UNO board made in China with no Arduino logo, but with identical markings, including "Made in Italy"
text

Although the hardware and software designs are freely


available under copyleft licenses, the developers have requested that the name Arduino be exclusive to the ofcial product and not be used for derived works without
permission. The ocial policy document on use of the
Arduino name emphasizes that the project is open to incorporating work by others into the ocial product.[23]
Several Arduino-compatible products commercially released have avoided the Arduino name by using -duino
name variants.[24]

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 rm to bring the
trademark under control of the original Arduino company
failed. In 2014, Smart Projects began refusing to pay
royalties. They then appointed 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

1.10. REFERENCES

in the Arduino development team. All Arduino boards [12] Redirect.... smartprj.com.
are still available to consumers, and the designs are open
source, so the implications of this are uncertain.[36][37][38] [13] Schmidt, M. ["Arduino: A Quick Start Guide"],
Pragmatic Bookshelf, January 22, 2011, Pg. 201

In May 2015, Genuino was created around the world as


another trademark, held by Arduino LLC, and is currently [14] Arduino breadboard shield: $10 & 10 mins. todbot blog.
being used as Arduino LLCs brand name outside of the [15] Arduino Shields for Prototyping. tigoe.net.
US.[39]
[16] Jonathan Oxer. Arduino Shield list. Retrieved 5 Nov
2013.

1.8 See also

[17] Arduino Software Release Notes. Arduino Project. Retrieved March 11, 2016.

Comparison of single-board computers

[18] Programming Arduino Getting Started with Sketches.


McGraw-Hill. Nov 8, 2011. Retrieved 2013-03-28.

Intel Edison

[19] Blink Tutorial. Arduino.cc.

List of Arduino boards and compatible systems

[20] Using Atmel Studio for Arduino development. Megunolink.com. Retrieved 2013-01-18.

IOIO

[21] Using AVR Studio for Arduino development. Engblaze.com. Retrieved 2013-01-18.

1.9 Notes

[22] The arduino source code. The arduino source code.


[1] Diecimila means ten thousands in Italian language

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

[2] Duemilanove means two thousands nine in Italian language


[3] Uno means one in Italian language

[25] xoscillo A software oscilloscope that acquires data using an arduino or a parallax (more platforms to come).
Google Project Hosting. Code.google.com. Retrieved
2013-01-18.

1.10 References
[1] Arduino - Introduction. arduino.cc.
[2] How many Arduinos are in the wild?" About 300,000.
Adafruit Industries. May 15, 2011. Retrieved 2013-0526.
[3] Arduino FAQ With David Cuartielles. Malm University. April 5, 2013. Retrieved 2014-03-24.
[4] Home. arduinohistory.github.io.
trieved 2016-03-06.

[24] Freeduino Open Designs. Freeduino.org. Retrieved


2008-03-03.

2016-01-01.

Re-

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


IEEE Spectrum.
[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.
2009-09-23. Retrieved 2014-08-23.
[8] Hardware Index. Arduino Project. Retrieved 2013-1210.
[9] Optiboot Bootloader for Arduino and Atmel AVR. Retrieved 2015-10-01.

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


with Free, Open-Source Hardware. Science 337 (6100):
13031304. (open access)
[27] Kubnov, S. and lgr, J., 2015. ChemDuino: Adapting
Arduino for Low-Cost Chemical Measurements in Lecture and Laboratory. Journal of Chemical Education,
92(10), pp.1751-1753.
[28] ArduinoPhone. Instructables.com (2013-07-17).
trieved on 2013-08-04.

Re-

[29] DIY Cellphone, MIT


[30] Raspberry Pi Spy. Introducing the GertDuino Add-on
Board for Raspberry Pi. Retrieved on 2014-11-09.
[31] 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.
532537 (2014). doi:10.2166/washdev.2014.137 open
access
[32] CNC V2.0. Homofaciens.de . Retrieved on 2016-02-24
[33] Arduino Robot Motor Control. DarkBlueBit.com. Retrieved on 2016-04-16
[34] Ars Electronica Archiv. Retrieved 2015-03-27.

[10] Bare Bones Board.


[11] Boarduino.

[35] Business Entity Summary for Arduino LLC. Mass.gov.


State of Massachusetts.

CHAPTER 1. ARDUINO

[36] Allan, Alasdair (6 March 2015). Arduino Wars: Group


Splits, Competing Products Revealed?". makezine.com.
Maker Media, Inc. Retrieved 21 April 2015.
[37] Banzi, Massimo (19 March 2015). Massimo Banzi:
Fighting for Arduino. makezine.com. Maker Media, Inc.
Retrieved 21 April 2015.
[38] Williams, Elliot (28 March 2015). Arduino SRL to Distributors: Were the Real Arduino"". Hackaday.com.
Hackaday.com. Retrieved 21 April 2015.
[39] Arduino Announces New Brand, Genuino, Manufacturing Partnership with Adafruit. Make:. 16 May 2015. Retrieved 17 May 2015.

1.11 Further reading


Getting Started with Arduino; Massimo Banzi,
Michael Shiloh; 262 pages; 2014; ISBN 1-44936333-4.
Make: Sensors; Tero Karvinen, Kimmo Karvinen,
Ville Valtokari; 400 pages; 2014; ISBN 978-14493-6810-4.
Arduino For Dummies; John Nussey; 446 pages;
2013; ISBN 978-1118446379.
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.
Arduino Workshop: A Hands-On Introduction with
65 Projects; John Boxall; 392 pages; 2013; ISBN
978-1593274481.
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 website, Arduino LLC
Arduino The Documentary at the Internet Movie
Database, Vimeo
Installing additional Arduino libraries

Arduino cheat sheets


An online platform and collaboration platform for
Arduino users
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, 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
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 singleboard computer in that it lacks the general purpose
user interface and mass storage interfaces that a more
general-purpose computer would have. Compared to
a microprocessor development board, a microcontroller
board would emphasize digital and analog control interconnections to some controlled system, where a development board might by comparison have only a few or
no discrete or analog input/output devices. The development board exists to showcase or to train on some particular processor family and this internal implementation is
more important than the external function.

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.
As they are usually low-cost hardware, and have an especially low capital cost for development, single-board microcontrollers have long been popular in education. They
are also a popular means for developers to gain hands-on
experience with a new processor family.

2.2 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 the number of pins needed from the limited
40 available for the processors ubiquitous dual-in-line IC
package.

2.1 Origins
Single-board microcontrollers appeared in the late 1970s
when the rst generations of microprocessors, such as the
6502 and the Z80,[1] made it practical to build an entire
controller on a single board, and aordable to dedicate a
computer to a relatively minor task.

In March 1976, Intel announced a single-board computer It was common to oer the internal bus through an expanproduct that integrated all the support components re- sion connector, or at least the space for such a connector
quired for their 8080 microprocessor, along with 1 kbyte to be soldered on. This was a low-cost option and oered
7

8
the potential for expansion, even if it was rarely made use
of. Typical expansions would be I/O devices, or memory
expansion. It was unusual to add peripheral devices such
as tape or disk storage, or even a CRT display
When single-chip microcontrollers, such as the 8048, became available later on, the bus no longer needed to be
exposed outside the package as all the necessary memory
could be provided within the chip package. This generation of processors used a Harvard architecture of separate program and data buses, both internal to the chip.
Many of these processors used a modied Harvard architecture, where some write access was possible to the program data space, thus permitting in-circuit programming.
None of these processors required, or supported, a Harvard bus across a single-board microcontroller. Where
they supported a bus for expansion of peripherals, this
used a dedicated I/O bus, such as I2 C, One-wire or various serial buses.

CHAPTER 2. SINGLE-BOARD MICROCONTROLLER


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 directly operate such devices as lamps or motors, so
solid-state relays are operated by the microcontroller digital outputs, and inputs are isolated by signal conditioning
level-shifting 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
digital-to-analog converter, or on some microcontrollers
may be controlled by pulse-width modulation. As for discrete inputs, external circuits may be required to scale inputs, or to provide such functions as bridge excitation or
cold junction compensation.

To control component costs, many boards were designed


with extra hardware interface circuits but the components
for these circuits weren't installed and the board was left
Some microcontroller boards using a general-purpose mi- bare. The circuit was only added as an option on delivery,
croprocessor can bring the address and data bus of the or could be populated later.
processor to an expansion connector, allowing additional It is common practice for boards to include prototyping
memory or peripherals to be added. This would provide areas, areas of the board already laid out as a solderable
resources not already present on the single board system. breadboard area with the bus and power rails available,
Since not all systems require expansion, the connector but without a dened circuit. Several controllers, parmay be an option, with a mounting position provided for ticularly those intended for training, also include a plugthe connector for installation by the user if desired.
gable re-usable breadboard for easy prototyping of extra
I/O circuits that could be changed or removed for later
projects.

2.3 External bus expansion

2.4 Input and output

2.5 Communications and user interfaces

Arduino Diecimila with Atmel ATMEGA168

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

Microcontroller systems provide multiple forms of input


and output signals to allow application software to control an external real-world system. Discrete digital I/O
provides a single bit of data (on, or o). Analog signals, 2.6 Programming
representing a continuously variable range such as temperature or pressure, can also be inputs and outputs for Many of the earliest systems had no internal facility
for programming at all, and relied on a separate host
microcontrollers.

2.7. SINGLE-CHIP MICROCONTROLLERS

system. This programming was typically in assembly


language, sometimes C or even PL/M, and then crossassembled or cross-compiled on the host. Some singleboard 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 dis-

Some microcontroller devices were available with on- play


board EPROM; these, too, would be programmed in a
separate burner, then put into a socket on the target sysibles, there was a shift to hosted development. Hardware
tem.
was now cheaper and RAM capacity had expanded such
The use of EPROM sockets allowed eld update of the
that it was possible to download the program through the
application program, either to x errors or to provide upserial port and hold it in RAM. This massive reduction in
dated features.
the cycle time to test a new version of a program gave an
equally large boost in development speed.

2.6.2

Keypad monitors

This program memory was still volatile and would be lost


if power was turned o. Flash memory was not yet availWhere the single-board controller formed the entire de- able at a viable price. As a completed controller project
velopment environment (typically in education) the board usually required to be non-volatile, the nal step in a
might also be provided with a simple hexadecimal key- project was often to burn an EPROM again.
pad, calculator-style LED display and a monitor program set permanently in ROM. This monitor allowed
machine code programs to be entered directly through the
2.7 Single-chip microcontrollers
keyboard and held in RAM. These programs were in machine code, not even in assembly language, and were assembled by hand on paper rst. Its arguable as to which
process was more time-consuming 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 lowend 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
programming level.[5]

2.6.3

Hosted development

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


8749

Single-chip microcontrollers such as the 8748 combined


When desktop personal computers appeared, initially many of the features of the previous boards into a sinCP/M or Apple II, then later the IBM PC and compat- gle IC package. Single-chip microcontrollers integrate

10

CHAPTER 2. SINGLE-BOARD MICROCONTROLLER

2.8 Single-board microcontrollers


today

A development board for a PIC family device

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:
Dwengo board
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,
PIC
making dierences between specic processors less obvious to the application programmer. Rewritable ash
Atmel AVR
memory has replaced slow programming cycles, at least
during program development. Accordingly, almost all
development now is based on cross-compilation from
2.7.1 Program memory
personal computers and download to the controller board
through a serial-like interface, usually appearing to the
For production use as embedded systems, the on-board host as a USB device.
ROM would be either mask programmed at the chip facThe original market demand of a simplied board imtory or one-time programmed (OTP) by the developer
plementation is no longer so relevant to microcontrollers.
as a PROM. PROMs often used the same UV EPROM
Single-board microcontrollers are still important, but
technology for the chip, but in a cheaper package without
have shifted their focus to:
the transparent erasure window. During program development it was still necessary to burn EPROMs, this time
Easily accessible platforms aimed at traditionally
the entire controller IC, and so ZIF sockets would be pronon-programmer groups, such as artists, designvided.
ers, hobbyists, and others interested in creating
With the development of aordable EEPROM and eveninteractive objects or environments.[6] Some typtually ash memory, it became practical to attach the conical projects in 2011 included; the backup controller permanently to the board and to download protrol of DMX stage lights and special eects, multigram code to it through a serial connection to a host
camera control, autonomous ghting robots, concomputer. This was termed "in-circuit programming".
trolling bluetooth projects from a computer or smart
Erasure of old programs was carried out by either overphone,[7] LEDs and multiplexing, displays, audio,
writing them with a new download, or bulk erasing them
motors, mechanics, and power control.[8] These conelectrically (for EEPROM) which was slower, but could
trollers may be embedded to form part of a physical
be carried out in-situ.
computing project. Popular choices for this work
are the Arduino,[9] Dwengo[7] or Wiring.[10][11]
The main function of the controller board was now to
8748

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.

Technology demonstrator boards for innovative processors or peripheral features:


AVR Buttery
Parallax Propeller

2.11. EXTERNAL LINKS

2.9 See also


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

2.10 References
[1] Peter Grigson; David Harris (August, September, October
1983). "'Marvin' - Z80 Control Computer. Electronics
Today International. Check date values in: |date= (help)
[2] Intel SBC 80/10 Single Board Computer brochure, 1976
[3] Mike Bedford (August, September 1983). Universal
EPROM Programmer. Electronics Today International:
4551, 3739. Check date values in: |date= (help)
[4] KIM 1. Old Computers.com. External link in |publisher= (help)
[5] Microprofessor Training System. Flite Electronics International.
[6] Arduinos home page
[7] Project homepage. Dwengo. External link in |publisher= (help)
[8] Arduino Users forum
[9] Project homepage. Arduino project. External link in
|publisher= (help)
[10] Wiring.orgs Wiring development platform home page
[11] Wiring: Hardware. Wiring project. External link in
|publisher= (help)

2.11 External links


Atmega8 Development board - DIY AVR development board based on Atmels AVR microcontroller

11

Chapter 3

Atmel AVR
block from Nordic VLSI. When the technology was sold
to Atmel from Nordic VLSI, the internal architecture was
further developed by Bogen and Wollan at Atmel Norway, a subsidiary of Atmel. The designers worked closely
with compiler writers at IAR Systems to ensure that the
instruction set provided for more ecient compilation of
high-level languages.[4] Atmel says that the name AVR is
not an acronym and does not stand for anything in particular. The creators of the AVR give no denitive answer
as to what the term AVR stands for.[3] However, it is
commonly accepted that AVR stands for Alf (Egil Bogen) and Vegard (Wollan)'s RISC processor.[5] Note that
the use of AVR in this article generally refers to the
8-bit RISC line of Atmel AVR Microcontrollers.

AVR logo

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 in 1997. By 2003, Atmel had shipped 500 million
AVR ash microcontrollers.[6]

Atmel ATmega8 in 28-pin narrow DIP

The AVR is a modied Harvard architecture 8-bit RISC


single-chip microcontroller, which was developed by
3.2 Device overview
Atmel 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, The AVR is a modied Harvard architecture machine,
EPROM, or EEPROM used by other microcontrollers at where program and data are stored in separate physical
memory systems that appear in dierent address spaces,
the time.
but having the ability to read data items from program
memory using special instructions.

3.1 Brief history


3.2.1 Basic families

The AVR architecture was conceived by two students at


the Norwegian Institute of Technology (NTH),[1] Alf- AVRs are generally classied into following:
Egil Bogen[2] and Vegard Wollan.[3]
The original AVR MCU was developed at a local ASIC
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
12

tinyAVR the ATtiny series


Main article: Atmel AVR ATtiny comparison chart
0.516 KB program memory

3.2. DEVICE OVERVIEW


632-pin package
Limited peripheral set
megaAVR the ATmega series
4256 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

13
Program memory
Program instructions are stored in non-volatile ash
memory. Although the MCUs are 8-bit, each instruction
takes one or two 16-bit words.
The size of the program memory is usually indicated in
the naming of the device itself (e.g., the ATmega64x line
has 64 KB of ash, while the ATmega32x line has 32
KB).
There is no provision for o-chip program memory; all
code executed by the AVR core must reside in the onchip ash. However, this limitation does not apply to the
AT94 FPSLIC AVR/FPGA chips.

16384 KB program memory


4464100-pin package (A4, A3, A1)
32-pin package: XMEGA-E (XMEGA8E5)
Extended performance features, such as Internal data memory
DMA, Event System, and cryptography
The data address space consists of the register le, I/O
support
registers, and SRAM.
Extensive peripheral set with ADCs
Application-specic AVR
megaAVRs with special features not found on Internal registers
the other members of the AVR family, such
as LCD controller, USB controller, advanced
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 32-bit 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.

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.

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

14
The very smallest of the tinyAVR variants use a reduced architecture with only 16 registers (r0 through r15
are omitted) which are not addressable as memory locations. I/O memory begins at address 000016 , followed
by SRAM. In addition, these devices have slight deviations from the standard AVR instruction set. Most notably, the direct load/store instructions (LDS/STS) have
been reduced from 2 words (32 bits) to 1 word (16 bits),
limiting the total direct addressable memory (the sum of
both I/O and SRAM) to 128 bytes. Conversely, the indirect load instructions (LD) 16-bit address space is expanded to also include non-volatile memory such as Flash
and conguration bits; therefore, the LPM instruction is
unnecessary and omitted.
In the XMEGA variant, the working register le is not
mapped into the data address space; as such, it is not possible to treat any of the XMEGAs working registers as
though they were SRAM. Instead, the I/O registers are
mapped into the data address space starting at the very
beginning of the address space. Additionally, the amount
of data address space dedicated to I/O registers has grown
substantially to 4096 bytes (000016 0FFF16 ). As with
previous generations, however, the fast I/O manipulation
instructions can only reach the rst 64 I/O register locations (the rst 32 locations for bitwise instructions). Following the I/O registers, the XMEGA series sets aside a
4096 byte range of the data address space, which can be
used optionally for mapping the internal EEPROM to the
data address space (100016 1FFF16 ). The actual SRAM
is located after these ranges, starting at 200016 .
GPIO ports

CHAPTER 3. ATMEL AVR


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.
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.
Since the number of writes to EEPROM is limited 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).

3.2.3 Program execution


Atmels AVRs have a two-stage, single-level pipeline design. This means the next machine instruction is fetched
as the current one is executing. Most instructions take
just one or two clock cycles, making AVRs relatively fast
among eight-bit microcontrollers.

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


pins and is controlled by three 8-bit registers: DDRx, The AVR processors were designed with the ecient execution of compiled C code in mind and have several builtPORTx and PINx, where x is the port identier.
in pointers for the task.
DDRx: Data Direction Register, congures the pins
as either inputs or outputs.

3.2.4 Instruction set

PORTx: Output port register. Sets the output value


on pins congured as outputs. Enables or disables Main article: Atmel AVR instruction set
the 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]

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:

xmegaAVR have additional registers for push/pull,


totem-pole and pullup congurations.

Register locations R0 to R15 have dierent addressing capabilities than register locations R16 to R31.

EEPROM

I/O ports 0 to 31 have dierent addressing capabilities than I/O ports 32 to 63.

Almost all AVR microcontrollers have internal


EEPROM for semi-permanent data storage.
Like

CLR aects ags, while SER does not, even though


they are complementary instructions. CLR set all

Pointer registers X, Y, and Z have addressing capabilities that are dierent from each other.

3.2. DEVICE OVERVIEW

15

bits to zero, and SER sets them to one. (Note that See external links for sites relating to AVR development.
CLR is pseudo-op for EOR R, R; and SER is short
for LDI R,$FF. Math operations such as EOR modify ags, while moves/loads/stores/branches such as 3.2.7 Features
LDI do not.)
Current AVRs oer a wide range of features:
Accessing read-only data stored in the program
memory (ash) requires special LPM instructions;
Multifunction, bi-directional general-purpose I/O
the ash bus is otherwise reserved for instruction
ports with congurable, built-in pull-up resistors
memory.
Multiple internal oscillators, including RC oscillator
without external parts
Additionally, some chip-specic dierences aect code
generation. Code pointers (including return addresses on
Internal, self-programmable instruction ash memthe stack) are two bytes long on chips with up to 128 KB
ory up to 256 KB (384 KB on XMega)
of ash memory, but three bytes long on larger chips;
In-system programmable using serial/parallel
not all chips have hardware multipliers; chips with over 8
low-voltage proprietary interfaces or JTAG
KB of ash have branch and call instructions with longer
ranges; and so forth.
Optional boot code section with independent
lock bits for protection
The mostly regular instruction set makes programming it
using C (or even Ada) compilers fairly straightforward.
GCC has included AVR support for quite some time, and
that support is widely used. In fact, Atmel solicited input
from major developers of compilers for small microcontrollers, to determine the instruction set features that were
most useful in a compiler for high-level languages.

3.2.5

MCU speed

The AVR line can normally support clock speeds from


0 to 20 MHz, with some devices reaching 32 MHz.
Lower-powered operation usually requires a reduced
clock speed. All recent (Tiny, Mega, and Xmega, but
not 90S) AVRs feature an on-chip oscillator, removing
the need for external clocks or resonator circuitry. Some
AVRs also have a system clock prescaler that can divide
down the system 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 ATmega2560 are one cycle slower than on previous devices.

3.2.6

Development

AVRs have a large following due to the free and inexpensive development tools available, including reasonably
priced development boards and free development software. The AVRs are sold under various names that share
the same basic core, but with dierent peripheral and
memory combinations. Compatibility between chips in
each family is fairly good, although I/O controller features
may vary.

On-chip debugging (OCD) support through JTAG


or debugWIRE on most devices
The JTAG signals (TMS, TDI, TDO, and
TCK) are multiplexed on GPIOs. These pins
can be congured to function as JTAG or
GPIO depending on the setting of a fuse bit,
which can be programmed via ISP or HVSP.
By default, AVRs with JTAG come with the
JTAG interface enabled.
debugWIRE uses the /RESET pin as a bidirectional communication channel to access
on-chip debug circuitry. It is present on devices with lower pin counts, as it only requires
one pin.
Internal data EEPROM up to 4 KB
Internal SRAM up to 16 KB (32 KB on XMega)
External 64 KB little endian data space on certain
models, including the Mega8515 and Mega162.
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.
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

16

CHAPTER 3. ATMEL AVR

PWM output (some devices have an enhanced 3.3 Programming interfaces


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

3.3.1 ISP
MISO

1
1

VCC

MOSI

VCC

SCK

MOSI

NC

GND

RST

GND

RST

GND

SCK

GND

Universal Serial Interface (USI): a multiMISO


purpose hardware communication module that
can be used to implement an SPI,[10] I2 C[11][12]
6- and 10-pin ISP header diagrams
or UART[13] interface.

10

GND

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)

ISP
HEADERS
TOP
VIEW

The in-system programming (ISP) programming method


is functionally performed through SPI, plus some twiddling of the Reset line. As long as the SPI pins of the
Watchdog timer (WDT)
AVR are not connected to anything disruptive, the AVR
chip can stay soldered on a PCB while reprogramming.
Multiple power-saving sleep modes
All that is needed is a 6-pin connector and programming
Lighting and motor control (PWM-specic) con- adapter. This is the most common way to develop with
an AVR.
troller models
Brownout detection

CAN controller support


USB controller support

The Atmel AVRISP mkII device connects to a computers


USB port and performs in-system programming using Atmels software.

AVRDUDE (AVR Downloader/UploaDEr) runs on


Linux, FreeBSD, Windows, and Mac OS X, and sup Proper full-speed (12 Mbit/s) hardware & Hub
ports a variety of in-system programming hardware, incontroller with embedded AVR.
cluding Atmel AVRISP mkII, Atmel JTAG ICE, older
Also freely available low-speed (1.5 Mbit/s) Atmel serial-port based programmers, and various third(HID) bitbanging software emulations
party and do-it-yourself programmers.[15]

Ethernet controller support

3.3.2 PDI

LCD controller support


The Program and Debug Interface (PDI) is an Atmel proprietary interface for external programming and on-chip
debugging of XMEGA devices. The PDI supports highspeed programming of all non-volatile memory (NVM)
picoPower devices
spaces; ash, EEPROM, fuses, lock-bits and the User
Signature Row. This is done by accessing the XMEGA
DMA controllers and event system peripheral NVM controller through the PDI interface, and executing
communication.
NVM controller commands. The PDI is a 2-pin interface
using the Reset pin for clock input (PDI_CLK) and a ded Fast cryptography support for AES and DES
icated data pin (PDI_DATA) for input and output.[16]
Low-voltage devices operating down to 1.8 V (to 0.7
V for parts with built-in DCDC upconverter)

3.5. DEVELOPMENT TOOLS AND EVALUATION KITS

3.3.3

17

High-voltage serial

particularly useful for lower pin count parts which cannot provide the four spare pins needed for JTAG. The
High-voltage serial programming (HVSP)[17] is mostly JTAGICE mkII, mkIII and the AVR Dragon support dethe backup mode on smaller AVRs. An 8-pin AVR pack- bugWIRE. debugWIRE was developed after the original
age does not leave many unique signal combinations to JTAGICE release, and now clones support it.
place the AVR into a programming mode. A 12-volt
signal, however, is something the AVR should only see
during programming and never during normal operation.
3.4.2 JTAG
The high voltage mode can also be used in some devices
where the reset pin has been disabled by fuses.
The Joint Test Action Group (JTAG) feature provides access to on-chip debugging functionality while the chip
is running in the target system.[23] JTAG allows access3.3.4 High-voltage parallel
ing internal memory and registers, setting breakpoints on
High-voltage parallel programming (HVPP) is consid- code, and single-stepping execution to observe system beered the nal resort and may be the only way to correct haviour.
bad fuse settings on an AVR chip.

3.3.5

Bootloader

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 userprogrammed 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 Ethernet adapter like PXE. Atmel has application notes and code pertaining to many bus
interfaces.[18][19][20][21]

3.3.6

ROM

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

3.3.7

aWire

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


new UC3L AVR32 devices.

3.4 Debugging interfaces


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

Atmel provides a series of JTAG adapters for the AVR:


1. The Atmel-ICE[24] is the latest adapter. It supports
JTAG, debugWire, aWire, SPI, TPI, and PDI interfaces.
2. The JTAGICE 3[25] is a midrange debugger in the
JTAGICE family (JTAGICE mkIII). It supports
JTAG, aWire, SPI, and PDI interfaces.
3. The JTAGICE mkII[26] 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 thirdparty clones of the Atmel JTAGICE mkII device
started shipping after Atmel released the communication protocol.[27]
4. The AVR Dragon[28] is a low-cost (approximately
$50) substitute for the JTAGICE mkII for certain
target parts. The AVR Dragon provides in-system
serial programming, high-voltage serial programming and parallel programming, as well as JTAG or
debugWIRE emulation for parts with 32 KB of program memory or less. ATMEL changed the debugging feature of AVR Dragon with the latest rmware
of AVR Studio 4 - AVR Studio 5 and now it supports
devices over 32 KB of program memory.
5. 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.

JTAG can also be used to perform a boundary scan


test,[29] which tests the electrical connections between
3.4.1 debugWIRE
AVRs and other boundary scan capable chips in a system. Boundary scan is well-suited for a production line,
debugWIRETM is Atmels solution for providing on-chip while the hobbyist is probably better o testing with a
debug capabilities via a single microcontroller pin. It is multimeter or oscilloscope.

18

CHAPTER 3. ATMEL AVR


STK500 Expansion Modules: Several expansion modules
are available for the STK500 board:
STK501 Adds support for microcontrollers in 64pin TQFP packages.
STK502 Adds support for LCD AVRs in 64-pin
TQFP packages.
STK503 Adds support for microcontrollers in
100-pin TQFP packages.

Atmel STK500 development board

3.5 Development tools and evaluation kits


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.[30] The STK600 uses a base board,
a signal routing board, and a target board.
The base board is similar to the STK500, in that it provides a power supply, clock, in-system programming, an
RS-232 port and a CAN (Controller Area Network, an
automotive standard) port via DE9 connectors, and stake
pins for all of the GPIO signals from the target device.

STK504 Adds support for LCD AVRs in 100-pin


TQFP packages.
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
32-pin 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.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
The target boards have ZIF sockets for DIP, SOIC, QFN, port, a socket for a 32k SRAM and numerous general I/O.
The chip can be programmed with a dongle connected to
or QFP packages, depending on the board.
the parallel port.
The signal routing board sits between the base board and
the target board, and routes the signals to the proper pin
on the device board. There are many dierent signal rout- 3.5.4 AVRISP and AVRISP mkII
ing boards that could be used with a single target board,
depending on what device is in the ZIF socket.
The AVRISP and AVRISP mkII are inexpensive tools alThe STK600 allows in-system programming from the PC lowing all AVRs to be programmed via ICSP.
via USB, leaving the RS-232 port available for the target The AVRISP connects to a PC via a serial port and draws
microcontroller. A 4 pin header on the STK600 labeled power from the target system. The AVRISP allows using
'RS-232 spare' can connect any TTL level USART port either of the standard ICSP pinouts, either the 10-pin
on the chip to an onboard MAX232 chip to translate the or 6-pin connector. The AVRISP has been discontinued,
signals to RS-232 levels. The RS-232 signals are con- replaced by the AVRISP mkII.
nected to the RX, TX, CTS, and RTS pins on the DB-9
The AVRISP mkII connects to a PC via USB and draws
connector.
power from USB. LEDs visible through the translucent
case indicate the state of target power.

3.5.2

STK500 starter kit

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
board is tted with DIP sockets for all AVRs available in
DIP packages.

As the AVRISP mkII lacks driver/buer ICs,[31] it can


have trouble programming target boards with multiple
loads on its SPI lines. In such occurrences, a programmer
capable of sourcing greater current is required. Alternatively, the AVRISP mkII can still be used if low-value
(~150 ohm) load-limiting resistors can be placed on the
SPI lines before each peripheral device.

3.5. DEVELOPMENT TOOLS AND EVALUATION KITS

19

3.5.7 JTAGICE mkII


The JTAGICE mkII debugging tool supports on-chip debugging (OCD) of AVRs with SPI, JTAG, PDI, and debugWIRE interfaces. The debugWire interface enables
debugging using only one pin (the Reset pin), allowing
debugging of applications running on low pin-count microcontrollers.
The JTAGICE mkII connects using USB, but there is an
alternate connection via a serial port, which requires using a separate power supply. In addition to JTAG, the
mkII supports ISP programming (using 6-pin or 10-pin
adapters). Both the USB and serial links use a variant of
the STK500 protocol.

3.5.8 JTAGICE3
AVRISP mkII

3.5.5

AVR Dragon

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.[35] 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
programming modes and debugging using debugWIRE,
JTAG, PDI, and aWire interfaces.[36]

AVR Dragon with ISP programming cable and attached, blue ZIF
Socket

3.5.10 Buttery demonstration board

The Atmel Dragon is an inexpensive tool which connects


to a PC via USB. The Dragon can program all AVRs via
JTAG, HVP, PDI,[32] or ICSP. The Dragon also allows
debugging of all AVRs via JTAG, PDI, or debugWire; a
previous limitation to devices with 32 KB or less program
memory has been removed in AVR Studio 4.18.[33] 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.[34]

3.5.6

JTAGICE mkI

The JTAG In Circuit Emulator (JTAGICE) debugging


tool supports on-chip debugging (OCD) of AVRs with a
JTAG interface. The original JTAGICE mkI uses an RS232 interface to a PC and can only program AVRs with a
JTAG interface. The JTAGICE mkI is no longer in production, however it has been replaced by the JTAGICE
mkII.

Atmel ATmega169 in 64-pad MLF package on the back of an


Atmel AVR Buttery board

Main article: AVR Buttery


The very popular AVR Buttery demonstration board is
a self-contained, battery-powered computer running the
Atmel AVR ATmega169V microcontroller. It was built

20

CHAPTER 3. ATMEL AVR

to show-o the AVR family, especially a then new builtin LCD interface. The board includes the LCD screen,
joystick, speaker, serial port, real time clock (RTC), ash
memory chip, and both temperature and voltage sensors.
Earlier versions of the AVR Buttery also contained a
CdS photoresistor; it is not present on Buttery boards
produced after June 2006 to allow RoHS compliance.[37]
The small board has a shirt pin on its back so it can be
worn as a name badge.

3.5.12 Raven wireless kit


The RAVEN kit supports wireless development using Atmels IEEE 802.15.4 chipsets, for ZigBee and other wireless stacks. It resembles a pair of wireless more-powerful
Buttery cards, plus a wireless USBKey; and costing
about that much (under $US100). All these boards support JTAG-based development.

The kit includes two AVR Raven boards, each with a 2.4
GHz transceiver supporting IEEE 802.15.4 (and a freely
licensed ZigBee stack). The radios are driven with ATmega1284p processors, which are supported by a custom
segmented LCD display driven by an ATmega3290p processor. Raven peripherals resemble the Buttery: piezo
speaker, DataFlash (bigger), external EEPROM, sensors,
32 kHz crystal for RTC, and so on. These are intended for
The AVR Buttery demonstrates LCD driving by running
use in developing remote sensor nodes, to control relays,
a 14-segment, six alpha-numeric character display. Howor whatever is needed.
ever, the LCD interface consumes many of the I/O pins.
The USB stick uses an AT90USB1287 for connections to
The Butterys ATmega169 CPU is capable of speeds up
a USB host and to the 2.4 GHz wireless links. These are
to 8 MHz, but it is factory set by software to 2 MHz to preintended to monitor and control the remote nodes, relying
serve the button battery life. A pre-installed bootloader
on host power rather than local batteries.
program allows the board to be re-programmed via a standard RS-232 serial plug with new programs that users can
write with the free Atmel IDE tools.
3.5.13 Third-party programmers
The AVR Buttery comes preloaded with software to
demonstrate the capabilities of the microcontroller. Factory rmware can scroll your name, display the sensor
readings, and show the time. The AVR Buttery also has
a piezoelectric transducer that can be used to reproduce
sounds and music.

3.5.11

AT90USBKey

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

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.6 Atmel AVR usage

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,
using the USB Device Firmware Update protocols. Atmel ships proprietary (source code included but distribution restricted) example programs and a USB protocol
stack with the device.

Atmel AVR ATmega328 28-pin DIP on an Arduino Duemilanove


board

AVRs have been used in various automotive applications


such as security, safety, powertrain and entertainment
systems. Atmel has recently launched a new publicaLUFA[38] is a third-party free software (MIT license) tion Atmel Automotive Compilation to help developers
USB protocol stack for the USBKey and other 8-bit USB with automotive applications. Some current usages are in
AVRs.
BMW, Daimler-Chrysler and TRW.

3.8. SEE ALSO

21
AVR clone projects:
pAVR,[46] written in VHDL, is aimed at creating the
fastest and maximally featured AVR processor, by
implementing techniques not found in the original
AVR processor such as deeper pipelining.
avr_core,[47] written in VHDL, is a clone aimed at
being as close as possible to the ATmega103.
Navr,[48] written in Verilog, implements all Classic
Core instructions and is aimed at high performance
and low resource usage. It does not support interrupts.
The opencores project CPU lecture[49] written in
VHDL by Dr. Jrgen Sauermann explains in detail
how to design a complete AVR based System on a
Chip (SoC).

3.8 See also


Atmel AVR ATmega8 28-pin DIP on a custom development board

The Arduino physical computing platform is based on


an ATmega328 microcontroller (ATmega168 or ATmega8 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.

Arduino
AVR32

3.9 References
[1] Since 1996, NTH has become part of the Norwegian University of Science and Technology (NTNU)
[2] alfbogen.com blog
[3] The Story of AVR. youtube.com.
[4] The AVR Microcontroller and C Compiler Co-Design
(PDF). Retrieved 2012-09-19.

Numerous companies produce AVR-based microcontroller boards intended for use by hobbyists, robot
builders, experimenters and small system developers including: Cubloc,[39] gnusb,[40] BasicX,[41] Oak
Micros,[42] ZX Microcontrollers,[43] and myAVR.[44]
There is also a large community of Arduino-compatible
boards supporting similar users.

[5] UNSW School of Computer Science and Engineering General AVR Info. Cse.unsw.edu.au. Retrieved 201209-19.

Schneider Electric produces the M3000 Motor and Motion Control Chip, incorporating an Atmel AVR Core and
an advanced motion controller for use in a variety of motion applications.[45]

[8] http://www.atmel.com/Images/
Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_
AVR-8-bit-Microcontroller-ATtiny25Datasheet.pdf
ATtiny45-ATtiny85_Datasheet.pdf

[6] Atmel press release. Atmels AVR Microcontroller Ships


500 Million Units.
[7] Field Programmable System Level Integrated Circuit

[9] Atmel Smart Card ICs

3.7 FPGA clones

[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

With the growing popularity of FPGAs among the open


(PDF). Atmel. 2013. Retrieved 10 June 2014.
source community, people have started developing open
source processors compatible with the AVR instruction [12] AVR312: Using the USI module as a I2 C slave (PDF).
Atmel. 2005. Retrieved 10 June 2014.
set. The OpenCores website lists the following major

22

CHAPTER 3. ATMEL AVR

[13] AVR307: Half Duplex UART Using the USI Module


(PDF). Atmel. 2003. Retrieved 10 June 2014.

[39] Comle Technology. Comle Technology, Inc. Retrieved 13 January 2013.

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

[40] gnusb: Open Source USB Sensor Box. Retrieved 13


January 2013.

[15] AVRDUDE programmer. Savannah.nongnu.org. Retrieved 2012-09-19.


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

Support.atmel.no.

Retrieved

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


2012-09-19.
[19] AES-encrypted AVR Bootloader (PDF). Retrieved
2012-09-19.
[20] XMEGA Bootloader (PDF). Retrieved 2012-09-19.
[21] AVR USB Bootloader (PDF). Retrieved 2012-09-19.
[22] Atmels Self-Programming Flash Microcontrollers
(PDF). Retrieved 2012-09-19.
[23] Guide to understanding JTAG and security fuses on the
AVR. Retrieved 2012-09-19.
[24] Atmel-ICE - Atmel Corporation.
trieved 2015-09-11.

Atmel.com.

Re-

[25] JTAGICE 3- Atmel Corporation. Atmel.com. Retrieved 2012-09-19.


[26] AVR JTAGICE mkII. Atmel. Retrieved 13 January
2013.
[27] JTAGICE mkII Communication Protocol (PDF). Retrieved 2012-09-19.
[28] AVR Dragon. Atmel. Retrieved 13 January 2013.
[29] JTAGICE Press Release, 2004.
[30] STK600. Atmel. Retrieved 13 January 2013.
[31] AVRISP mkII Disassembled
[32] AVR1005: Getting started with XMEGA, page 7
(PDF). Atmel. Retrieved 7 November 2011.
[33] AVR Studio v4.18 Release Notes. Retrieved 2012-0919.
[34] ECROS Technology - Dragon Rider. Ecrostech.com.
2008-03-02. Retrieved 2012-09-19.

[41] BasicX. NetMedia, Inc. Retrieved 13 January 2013.


[42] Welcome to Oak Micros. Oak Micros. Oak Micros.
Retrieved 13 January 2013.
[43] ZBasic. Retrieved 13 January 2013.
[44] myAVR. Laser & Co. Solutions GmbH. Retrieved 13
January 2013.
[45] M3000 Motion controller on a chip. imshome.com.
Schneider Electric Motion USA.
[46] pAVR :: Overview. OpenCores. Retrieved 2012-0919.
[47] AVR Core :: Overview. OpenCores. Retrieved 201209-19.
[48] Navr AVR clone (8-bit RISC) :: Overview. OpenCores. Retrieved 2012-09-19.
[49] CPU lecture. OpenCores. Retrieved 2015-02-16.

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-02.
Atmel AVR Microcontroller Primer: Programming
and Interfacing; Steven F Barrett, Daniel Pack,
Mitchell Thornton; 194 pages; 2007; ISBN 978-159829-541-2.
Arduino: A Quick Start Guide; Maik Schmidt; 276
pages; 2011; ISBN 978-1-934356-66-1.

3.11 External links

[35] JTAGICE3 Product Page


[36] AVR ONE! Product Page
[37] AVR Buttery
[38] LUFA (Formerly MyUSB)". Four Walled Cubicle. Retrieved 2012-09-19.

Ocial
Atmel AVR
Communities

3.11. EXTERNAL LINKS


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


4.1.2 Status bits

Main article: Atmel AVR


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.

The status register bits are:


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.1 Processor registers


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.
A limited number of instructions operate on 16-bit register pairs. The lower-numbered register of the pair holds
the 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 addressing modes are supported on all three.
Y and Z also support a six-bit positive displacement.

4. V Overow ag. Set in case of twos complement


overow.
5. S Sign ag. Unique to AVR, this is always NV, and
shows the true sign of a comparison.
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
use this bit.
8. I Interrupt ag. Set when interrupts are enabled.

Instructions which allow an immediate value are limited 4.2 Addressing


to registers R16R31 (8-bit operations) or to register
pairs R25:R24R31:R30 (16-bit operations ADIW and
The following address spaces are available:
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
4.1.1 Special purpose registers
subset of those registers.
In addition to these 32 general-purpose registers, the
I/O registers have a dedicated 6-bit address space,
CPU has a few special-purpose registers:
the lower half of which is bit-addressable; some
parts have I/O registers outside this address space,
PC: 16- or 22-bit program counter
which are called extended I/O and are only accessible as memory-mapped I/O in the data address
SP: 8- or 16-bit stack pointer
space.
SREG: 8-bit status register
The data address space maps the 32 general-purpose
RAMPX, RAMPY, RAMPZ, RAMPD and EIND:
registers, all the I/O registers (including those also
8-bit segment registers that are prepended to 16-bit
accessible through the I/O address space), and the
addresses in order to form 24-bit addresses; only
RAM; it can be addressed either directly or indiavailable in parts with large address spaces.
rectly through the X, Y and Z pointer registers,
24

4.5. INSTRUCTION SET INHERITANCE

25

prepended if necessary by RAMPX, RAMPY and There are two types of conditional branches: jumps to
RAMPZ respectively.
address and skips. Conditional branches (BRxx) can test
an ALU ag and jump to specied address. Skips (SBxx)
Program memory (ash) has a separate address test an arbitrary bit in a register or I/O and skip the next
space, addressed as 16-bit words for the purpose of instruction if the test was true.
fetching instructions
In the following:
For the purpose of fetching constant data, program
memory is addressed bytewise through the Z pointer
Rd is a register in the range R0-R31 or R16-R31
register, prepended if necessary by RAMPZ.
(depending on instruction)
The EEPROM is memory-mapped in some devices;
in others, it is not directly addressable and is instead
accessed through address, data and control I/O registers.
The general purpose registers, the status register and
some I/O registers are bit-addressable, with bit 0 being the least signicant and bit 7 the most signicant.
The rst 64 I/O registers are accessible through both the
I/O and the data address space. They have therefore two
dierent addresses. These are usually written as 0x00
(0x20)" through 0x3F (0x5F)", where the rst item is
the I/O address and the second, in parentheses, the data
address.
The special-purpose CPU registers, with the exception
of PC, can be accessed as I/O registers. Some registers (RAMPX, RAMPY) may not be present on machines
with less than 64 KiB of addressable memory.
A typical ATmega memory map may look like:
where RAMEND is the last RAM address. In parts lacking extended I/O the RAM would start at 0x0060.

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.

4.4 Instruction list


Instructions are one 16-bit word long, save for those including a 16-bit or 22-bit address, which take two words.

Rr is a register in the range R0-R31


s is a bit number in the status register (0 = C, 1 = Z,
etc., see the list above)
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:
063)
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 bitaddressable 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 Instruction set inheritance


Not all instructions are implemented in all Atmel AVR
controllers. This is the case of the instructions performing
multiplications, extended loads/jumps/calls, long jumps,
and power control.

4.6 Instruction encoding


Bit assignments:
rrrrr = Source register
rrrr = Source register (R16-R31)

26
rrr = Source register (R16-R23)
RRRR = Source register pair (R0:R1 ... R30:R31)

CHAPTER 4. ATMEL AVR INSTRUCTION SET

4.8 External links


GNU Development Environment

ddddd = Destination register

Programming the AVR microcontroller with


GCC by Guido Socher

dddd = Destination register (R16-R31)

A GNU Development Environment for the


AVR Microcontroller by Rich Neswold

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.

4.7 References
[1] Atmel. Application Note AVR201: Using the AVR
Hardware Multiplier. 2002. quote: The megaAVR is
a series of new devices in the AVR RISC Microcontroller
family that includes, among other new enhancements, a
hardware multiplier.

AVR Options in GCC-AVR


Atmel AVR instruction set PDF(149 pages)
AVR Instruction Set Simulator (ATmega32u4 for
GCC Intel Hex Files)
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]

5.1 Orthogonality in practice


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

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.

5.1.2 The VAX-11


The VAX-11 extended the PDP-11s orthogonality to all
data types, including oating point numbers (although
instructions such as 'ADD' were 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 PDP-11, 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
data-addressing 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-counter based addressing mode needed).

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
5.1.3 The MC68000
and specifying the program counter (R7) as the register
to use reference for indirection and to autoincrement.
Motorolas designers attempted to make the assembly
Since the PDP-11 was an octal-oriented (3-bit sub-byte) language orthogonal while the underlying machine lanmachine (addressing modes 07, registers R0R7), there guage was somewhat less so. Unlike PDP-11, the
27

28

CHAPTER 5. ORTHOGONAL INSTRUCTION SET

MC68000 used separate registers to store data and the majority of these orthogonal addressing modes were igaddresses of data in memory.
nored by most programs. Perhaps some of the bits that
At the bit level, the person writing the assembler (or de- were used to express the fully orthogonal instruction set
bugging machine code) would clearly see that symbolic could instead be used to express more virtual address bits
instructions could become any of several dierent op- or select from among more registers.
codes. This compromise gave almost the same convenience as a truly orthogonal machine, and yet also gave
the CPU designers freedom to use the bits in the instructions more eciently than a purely orthogonal approach
might have.

5.1.4

The 8080 and follow on designs

The 8-bit Intel 8080 (as well as the 8085 and


8051) microprocessor was basically a slightly extended
accumulator-based design and therefore not orthogonal.
An assembly-language programmer or compiler writer
had to be mindful of which operations were possible on
each register: Most 8-bit operations could be performed
only on the 8-bit accumulator (the A-register), while 16bit operations could be performed only on the 16-bit
pointer/accumulator (the HL-register pair), whereas simple operations, such as increment, were possible on all
seven 8-bit registers. This was largely due to a desire to
keep all opcodes one byte long and to maintain source
code compatibility with the original Intel 8008 (an LSIimplementation of the Datapoint 2200's CPU).
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 sourcecompatible 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 registers 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

Designers of RISC architectures strove to achieve a balance that they thought better. In particular, most RISC
computers, while still being highly orthogonal with regard to which instructions can process which data types,
now have reverted to load/store architectures. In these
architectures, only a very few memory reference instructions can access main memory and only for the purpose
of loading data into registers or storing register data back
into main memory; only a few addressing modes may
be available, and these modes may vary depending on
whether the instruction refers to data or involves a transfer
of control (jump). Conversely, data must be in registers
before it can be operated upon by the other instructions in
the computers instruction set. This trade o is made explicitly to enable the use of much larger register sets, extended virtual addresses, and longer immediate data (data
stored directly within the computer instruction).

5.2 References
[1] Null, Linda; Lobur, Julia (2010). The Essentials of Computer Organization and Architecture. Jones & Bartlett
Publishers. pp. 287288. ISBN 1449600069.

Chapter 6

Open-source hardware
ferred to as FOSH (free and open-source hardware). The
term usually means that information about the hardware
is easily discerned so that others can make it - coupling it
closely to the maker movement.[1] Hardware design (i.e.
mechanical drawings, schematics, bills of material, PCB
layout data, HDL source code[2] and integrated circuit
layout data), in addition to the software that drives the
hardware, are all released under free/libre terms. The
original sharer gains feedback and potentially improvements on the design from the FOSH community. There
is now signicant evidence that such sharing can drive a
high return on investment for investors.[3]
Since the rise of recongurable programmable logic devices, sharing of logic designs has been a form of opensource hardware. Instead of the schematics, hardware description language (HDL) code is shared. HDL descriptions are commonly used to set up system-on-a-chip systems either in eld-programmable gate arrays (FPGA) or
directly in application-specic integrated circuit (ASIC)
designs. HDL modules, when distributed, are called
semiconductor intellectual property cores, or IP cores.

The open hardware logo from the OSHWA

One example of open-source hardware is Phonebloks.

6.1 History
First hardware focused "open source" activities were
started around 1997 by Bruce Perens, creator of the Open
Source Denition, co-founder of the Open Source Initiative, and a ham radio operator. He launched the Open
Hardware Certication Program, which had the goal to
allow hardware manufacturers to self-certify their products as open.[4][5]
The RepRap general-purpose 3D printer with the ability to make
copies of most of its own structural parts.

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, re-

Shortly after the launch of the Open Hardware Certication Program, David Freeman announced the Open Hardware Specication Project (OHSpec), another attempt
at licensing hardware components whose interfaces are
available publicly and of creating an entirely new computing platform as an alternative to proprietary computing
systems.[6] In early 1999, Sepehr Kiani, Ryan Vallance
and Samir Nayfeh joined eorts to apply the open source
philosophy to machine design applications. Together they
established the Open Design Foundation (ODF) as a non-

29

30

CHAPTER 6. OPEN-SOURCE HARDWARE


tive work of many[9] and is accepted as of 2016 by dozens
of organizations and companies.[10]
In July 2011, CERN (European Organization for Nuclear
Research) released an open source hardware license,
CERN OHL. Javier Serrano, an engineer at CERNs
Beams Department and the founder of the Open Hardware Repository, explained: By sharing designs openly,
CERN expects to improve the quality of designs through
peer review and to guarantee their users including commercial companies the freedom to study, modify and
manufacture them, leading to better hardware and less duplication of eorts.[11] While initially drafted to address
CERN-specic concerns, such as tracing the impact of
the organizations research, in its current form it can be
used by anyone developing open source hardware.[12]

openhardware.org logo (2013)

OSHWA Logo

prot corporation, and set out to develop an Open Design


Denition. But, most of these activities faded out after
some years.
By the mid 2000s open source hardware again became
a hub of activity due to the emergence of several major open source hardware projects and companies, such
as OpenCores, RepRap (3D printing), Arduino, Adafruit
and SparkFun. In 2007, Perens reactivated the openhardware.org website.
Following the Open Graphics Project, an eort to design,
implement, and manufacture a free and open 3D graphics chip set and reference graphics card, Timothy Miller
suggested the creation of an organization to safeguard the
interests of the Open Graphics Project community. Thus,
Patrick McNamara founded the Open Hardware Foundation (OHF) in 2007.[7]

Following the 2011 Open Hardware Summit, and after heated debates on licenses and what constitutes open
source hardware, Bruce Perens abandoned the OSHW
Denition and the concerted eorts of those involved
with it.[13] Openhardware.org, led by Bruce Perens, promotes and identies practices that meet all the combined
requirements of the Open Source Hardware Denition,
the Open Source Denition, and the Four Freedoms of
the Free Software Foundation[14] Since 2014 openhardware.org is not online anymore and seems to have ceased
activity.[15]
The Open Source Hardware Association (OSHWA) at
oshwa.org proposes Open source hardware and acts as
hub of open source hardware activity of all genres, while
cooperating with other entities such as TAPR, CERN,
and OSI. The OSHWA was established as an organization
in June 2012 in Delaware and led for tax exemption status in July 2013.[16] After same debates about trademark
interferences with the OSI, in 2012 the OSHWA and the
OSI signed a co-existence agreement.[17][18]
In 2012, after years of skepticism on the relevance of
free hardware designs,[19] the Free Software Foundation
started the "Respects Your Freedom" (RYF) computer
hardware product certication program. It should encourage the creation and sale of hardware that respects
users freedom and privacy, and aims to ensure that users
have control over their devices.[20][21] The FSFs RYF
certicate faced criticism for the requirement to comply with the controversial debated FSF terminology,[22]
which is seen by some as unrelated topic and unneeded
political polarization for a technological certicate.[23]
Also FSFs Replicant project suggested in 2016 an alternative free hardware denition, derived from the FSFs
four freedoms.[24]

The Tucson Amateur Packet Radio Corporation (TAPR),


founded in 1982 as a non-prot organization of amateur
radio operators with the goals of supporting R&D efforts in the area of amateur digital communications, created in 2007 the rst open hardware license, the TAPR
Open Hardware License. The OSI president Eric S. Ray- 6.2 Licenses
mond expressed some concerns about certain aspects of
the OHL and decided to not review the license.[8]
Rather than creating a new license, some open-source
Around 2010 in context of the Freedom Dened project, hardware projects simply use existing, free and openthe Open Hardware Denition was created as collabora- source software licenses.[25] These licenses may not ac-

6.3. DEVELOPMENT

31

cord well with patent law.[26]


Later, several new licenses have been proposed, designed
to address issues specic to hardware designs.[27] In these
licenses, many of the fundamental principles expressed in
open-source software (OSS) licenses have been ported
to their counterpart hardware projects. 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 copyright law, as many hardware designs are not
coprightable.[28] 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:

and from the permissive licenses the FreeBSD license,


the MIT license, and the Creative Commons Attribution
license.[36] Openhardware.org recommended in 2012 the
TAPR Open Hardware License, Creative Commons BYSA 3.0 and GPL 3.0 license.[37]
Organizations tend to rally around a shared license. For
example, Opencores prefers the LGPL or a Modied
BSD License,[38] FreeCores insists on the GPL,[39] Open
Hardware Foundation promotes "copyleft" or other permissive licenses,[40] the Open Graphics Project uses a
variety of licenses, including the MIT license, GPL, and
a proprietary license,[41] and the Balloon Project wrote
their own license.[42]

6.3 Development

"... 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[29]

Noteworthy licenses include:


The TAPR Open Hardware License: drafted by attorney John Ackermann, reviewed by OSS community leaders Bruce Perens and Eric S. Raymond, and The OSHW (Open Source Hardware) logo silkscreened on an undiscussed by hundreds of volunteers in an open com- populated PCB
munity discussion[30][31]
Balloon Open Hardware License:
projects in the Balloon Project

used by all

Although originally a software license, OpenCores


encourages the LGPL
Hardware Design Public License: written by
Graham Seaman, admin. of Opencollector.org
In March 2011 CERN released the CERN Open
Hardware License (OHL)[32] intended for use
with the Open Hardware Repository[33] and other
projects.
The Solderpad License[34] is a version of the Apache
License version 2.0, amended by lawyer Andrew The Arduino Diecimila, another popular and early open source
Katz to render it more appropriate for hardware use. hardware design.
The Open Source Hardware Association recommends
seven licenses which follow their open-source hardware
denition.[35] From the general copyleft licenses the
GNU General Public License (GPL) and Creative Commons Attribution-ShareAlike license, from the HW specic copyleft licenses the CERN Open Hardware License (OHL) and TAPR Open Hardware License (OHL)

Extensive discussion has taken place on ways to make


open-source hardware as accessible as open-source software. Discussions focus on multiple areas,[43] such as
the level at which open-source hardware is dened,[44]
ways to collaborate in hardware development, as well as
a model for sustainable development by making opensource appropriate technology.[45][46] In addition there

32

CHAPTER 6. OPEN-SOURCE HARDWARE

has been considerable work to produce open-source hard- 6.6 Business models
ware for scientic hardware using a combination of opensource electronics and 3-D printing.[47][48]
Open hardware companies are experimenting with difOne of the major dierences between developing open- ferent business models. In one example, littleBits implesource software and developing open-source hardware ments open-source business models by making the deis that hardware results in tangible outputs, which cost sign les available for the circuit designs in each littleBits
money to prototype and manufacture. As a result, the module, in accordance with the CERN Open Hardware
[56]
phrase free as in speech, not as in beer,[49] more for- License Version 1.2. In another example, Arduino has
mally known as Gratis versus Libre, distinguishes be- registered its name as a trademark. Others may manufactween the idea of zero cost and the freedom to use ture their designs but can't put the Arduino name on them.
and modify information. While open-source hardware Thus they can distinguish their products from others by
[57]
faces challenges in minimizing cost and reducing nan- appellation. There are many applicable business modcial risks for individual project developers, some com- els for implementing some open-source hardware even in
munity members have proposed models to address these traditional rms. For example, to accelerate development
needs.[50] Given this, there are initiatives to develop sus- and technical innovation the photovoltaic industry has extainable community funding mechanisms, such as the perimented with partnerships, franchises, secondary supplier and completely open-source models.[58]
Open Source Hardware Central Bank.[51]
Often vendors of chips and other electronic components Recently, many open source hardware projects were
will sponsor contests with the provision that the partici- funded via crowdfunding on Indiegogo or Kickstarter.
pants and winners must share their designs. Circuit Cellar
magazine organizes some of these contests.

6.7 Reception and impact

6.4 Open-source labs


A guide has been published (Open-Source Lab (book) by
Joshua Pearce) on using open-source electronics and 3D
printing to make open-source labs. Today scientists are
creating many such labs, examples include:
Boston Open Source Science
Somerville, Massachusetts

Laboratory,

BYU Open Source Lab, Brigham Young University


Michigan Tech[52]
OSU Open Source Lab, Oregon State University
Open Source Research Lab, University of Texas at
El Paso

6.5 Open-source electronics


One of the most popular types of open-source hardware
is electronics. There are numerous companies that provide large varieties of open-source electronics such as
Sparkfun and Adafruit. In addition, there are NPOs and
companies that provide a specic open-source electronic
component such as the Arduino electronics prototyping
platform and the Raspberry Pi. There are numerous examples of speciality open-source electronics such as lowcost voltage and current GMAW open-source 3-D printer
monitor[53][54] and a robotics-assisted mass spectrometry
assay platform.[55]

Cover for "Open-Source Lab" by Joshua M. Pearce (2014).

Richard Stallman, the founder of the Free Software


movement, was in 1999 skeptical on the idea and relevance of Free hardware (his terminology what is now
known as open-source hardware).[59] In a 2015 Wired
article he adapted his point of view slightly; while he
still sees no ethical parallel between free software and
free hardware, he acknowledges the importance.[60] Also,
Stallman uses and suggest the term free hardware design
over open source hardware, a request which is consistent

6.9. REFERENCES

33

with his earlier rejection of the term open source software [10] OSHW
(see also Alternative terms for free software).[60]

[11] CERN. 2011. CERN launches Open Hardware initiative.

Other authors, such as Joshua Pearce have argued there is


CERN
an ethical imperative for open-source hardware specically with respect open-source appropriate technology for [12] Ayass, M. 2011. CERNs Open Hardware License
sustainable development.[61] In 2014, he also wrote the
[13] Bruce Perens, 2011a. Promoting Open Hardware.
book Open-Source Lab: How to Build Your Own Hardhttp://lists.openhardwaresummit.org/pipermail/
ware and Reduce Research Costs, which details the develupdates-openhardwaresummit.org/2011-September/
opment of free and open-source hardware primarily for
000565.html.
scientists and university faculty.[62][63]

6.8 See also


List of open-source hardware projects
Open innovation
Open-source computing hardware

[14] Bruce Perens. 2011b. Open Hardware Constitution.


Open Hardware. http://wiki.openhardware.org/Project:
Constitution.
[15] You've reached a web site owned by Perens LLC on openhardware.org
[16] brief-history-of-open-source-hardware-organizationsand-denitions on OSHWA.org

Open Source Ecology

[17] An Important Question on the Open Source Hardware


Mark on oshwa.org (August 2012)

Open-source robotics

[18] co-existence on oshwa.org (October 2012)

Rapid prototyping

[19] Richard Stallman -- On Free Hardware on linuxtoday.com I see no social imperative for free hardware designs like the imperative for free software. (Jun 22, 1999)

fab lab
Computer numeric control
Reuse

[20] Respects Your Freedom hardware product certication.


fsf.org.
[21] The Free Software Foundation loves this laptop, but you
won't on PC World by Chris Homan (on Feb 5, 2015)

6.9 References
[1] Alicia Gibb (Ed.) Building Open Source Hardware: DIY
Manufacturing for Hackers and Makers, Addison-Wesley:
New York, pp. 253-277 (2015).
[2] Free Hardware and Free Hardware Designs. Free Software Foundation Inc.
[3] Joshua M. Pearce. (2015) Return on Investment for Open
Source Hardware Development. Science and Public Policy. DOI:10.1093/scipol/scv034 open access
[4] Perens, B. 1997. Annoucing: The Open Hardware Certication Program. Debian Announce List. .
[5] The Open Hardware Certication Program on openhardware.org (November 1998)
[6] Freeman, D. 1998. OHSpec: The Open Hardware Specication Project
[7] McNamara, P. 2007a. Open Hardware. The Open
Source Business Resource (September 2007: Dening
Open Source).
[8] Ars Technica: TAPR introduces open-source hardware license, OSI skeptical.
[9] Freedom Dened. 2011. Open Source Hardware Denition. Freedom Dened.

[22] Criteria on fsf.org The seller must use FSF approved terminology for the FSFs activities and work, in all statements and publications relating to the product. This
includes product packaging, and manuals, web pages,
marketing materials, and interviews about the product.
Specically, the seller must use the term GNU/Linux
for any reference to an entire operating system which includes GNU and Linux, not Linux or Linux-based system or a system with the Linux kernel or any other
term that mentions Linux without GNU. Likewise,
the seller must talk about free software more prominently than open source."]
[23] lets_talk_about_respect_your_freedoms_more
reddit.com

on

[24] Replicant - Freedom and privacy/security issues [online]. (2016). Available from: <http://www.replicant.
us/freedom-privacy-security-issues.php>.
(Accessed
02/22/2016) The freedom to use the hardware, for any
purpose. The freedom to study how the hardware works,
and change it so it works as you wish. Access to the hardware design source is a precondition for this. The freedom
to redistribute copies of the hardware and its design so you
can help your neighbor. The freedom to distribute copies
of your modied versions to others. By doing this you can
give the whole community a chance to benet from your
changes. Access to the hardware design source is a precondition for this.

34

[25] 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).
[26] Thompson, C. (2011). Build it. Share it. Prot. Can open
source hardware work?. Work, 10, 08.
[27] For a nearly comprehensive list of licenses, see
OpenCollectors license zone
[28] Hardware_Isn't_Generally_Copyrightable on openhardware.org
[29] The TAPR Open Hardware License. Retrieved 16 April
2015.
[30] transcript of all comments, hosted on technocrat.net
[31] Ars Technica: TAPR introduces open-source hardware license, OSI skeptical.
[32] CERN Open Hardware Licence. Open Hardware
Repository. CERN. 2012-07-05. Retrieved 2012-08-15.
[33] Open Hardware Repository. Retrieved 16 April 2015.
[34] Solderpad licenses. Solderpad.org. Retrieved 2012-0815.
[35] Denition on oshwa.org
[36] FAQ on oshwa.org What license should I use? In general, there are two broad classes of open-source licenses:
copyleft and permissive. Copyleft licenses (also referred
to as share-alike or viral) are those which require
derivative works to be released under the same license as
the original; common copyleft licenses include the GNU
General Public License (GPL) and the Creative Commons
Attribution-ShareAlike license. Other copyleft licenses have
been specically designed for hardware; they include the
CERN Open Hardware License (OHL) and the TAPR Open
Hardware License (OHL). Permissive licenses are those
which allow for proprietary (closed) derivatives; they include the FreeBSD license, the MIT license, and the Creative Commons Attribution license. Licenses that prevent
commercial use are not compatible with open-source; see
this question for more.
[37] http://web.archive.org/web/20120328013824/http:
//wiki.openhardware.org/Recommended_Licenses
[38] Item What license is used for OpenCores?", from Opencores.org FAQ, retrieved 14 January 2013

CHAPTER 6. OPEN-SOURCE HARDWARE

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


a start... April 2007
[45] Halfbakery: Open Source Hardware Initiative
[46] 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)
[47] Pearce, Joshua M. 2012. "Building Research Equipment
with Free, Open-Source Hardware." Science 337 (6100):
13031304.open access
[48] Joshua M. Pearce,Open-Source Lab:How to Build Your
Own Hardware and Reduce Research Costs, Elsevier,
2014. ISBN 9780124104624
[49] Free, as in Beer, by Lawrence Lessig, on Wired
[50] bmfosh-1.0, Business Models for Open Source Hardware
Design
[51] Open Source Hardware Central Bank, from Make: Online : The Open Source Hardware Bank, retrieved 26
April 2010.
[52] Joshua Pearce. Pearce Research Group - Current
Projects. Retrieved 16 April 2015.
[53] A. Pinar, B. Wijnen, G. C. Anzalone, T. C. Havens, P.
G. Sanders, J. M. Pearce. Low-cost Open-Source Voltage
and Current Monitor for Gas Metal Arc Weld 3-D Printing. Journal of Sensors Vol. 2015, Article ID 876714, 8
pages, 2015. doi:10.1155/2015/876714
[54] Yuenyong Nilsiam, Amberlee Haselhuhn, Bas Wijnen,
Paul Sanders, & Joshua M. Pearce. Integrated Voltage - Current Monitoring and Control of Gas Metal
Arc Weld Magnetic Ball-Jointed Open Source 3-D
Printer. Machines 3(4), 339351 (2015). doi:10.3390/
machines3040339
[55] Chiu, S. H. and Urban, P. L., 2015. Robotics-assisted
mass spectrometry assay platform enabled by open-source
electronics. Biosensors and Bioelectronics, 64, p. 260
268.
[56] Saddlemire, Katie (14 April 2015). What does Open
Source mean?". littleBits (littleBits). Retrieved 26 May
2015.
[57] Build It. Share It. Prot. Can Open Source Hardware
Work?". WIRED. Retrieved 16 April 2015.

[39] FreeCores Main Page, retrieved 25 November 2008


[40] Open Hardware Foundation, main page, retrieved 25
November 2008
[41] 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
[42] Balloon License, from balloonboard.org
[43] Writings on Open Source Hardware

[58] A. J. Buitenhuis and J. M. Pearce, "Open-Source Development of Solar Photovoltaic Technology", Energy for
Sustainable Development, 16, pp. 379-388 (2012). open
access
[59] Stallman, Richard (1999-06-22). Richard Stallman -On Free Hardware"". kernel.org. Retrieved 2016-01-14.
freedom to copy software is social imperative, but freedom
to copy hardware is not so important as hardware is hard
to copy

6.10. EXTERNAL LINKS

35

[60] Richard Stallman (2015-03-11). Why We Need Free


Digital Hardware Designs. Wired. Retrieved 2016-0114.
[61] Joshua M. Pearce, "The Case for Open Source Appropriate Technology", Environment, Development and Sustainability, 14, p. 425431 (2012).
[62] Book of the Day: How to Build Your Own Hardware and
Reduce Research Costs, Michel Bauwens, P2P Foundation 12/28/2013
[63] 3D printing could oer developing world savings on
replica lab kit - The Guardian, Friday 21 February 2014
01.59 EST

6.10 External links


Denition
of
Open
freedomdened.org

source

hardware,

OpenHardware.io Open Hardware Sharing Community


P2P Foundation: Open Hardware Directory
Writings on Open Source Hardware, Open Collector
Articles
Open Source Semiconductor Core Licensing, 25
Harvard Journal of Law & Technology 131 (2011)
Open Source Everywhere, Wired
Build It. Share It. Prot. Can Open Source Hardware Work?, Wired (2008)
Richard Stallman: On Free Hardware, LinuxToday (1999)
Open Sesame! (Reports), The Economist (2008)
The Worldwide List of Open Hardware Online
Stores (2013)
The Future with Open-Source Hardware, Digital
Qatar (2015)

Chapter 7

List of Arduino compatibles


This is a non-exhaustive list of Arduino boards and 7.2.1
compatible systems. It lists boards in these categories:
Released under the ocial Arduino name
Arduino shield compatible
Development-environment compatible

Arduino
boards

footprint-compatible

The following boards are fully or almost fully compatible


with both the Arduino hardware and software, including
being able to accept shield daughterboards.

Based on non-Atmel processors


Where dierent from the Arduino base feature set, com- 7.2.2
patibility, features, and licensing details are included.

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
Many versions of the ocial Arduino hardware have been board. Some are Shield compatible, others are not.
commercially produced to date:[1][2]

7.1 Ocial Arduino boards

7.1.1

Superseded boards

7.2.3 Software-compatibility only

The following have been superseded by later and more


capable versions from Arduino, but some, particularly the These boards are compatible with the Arduino software,
but they do not accept standard shields. They have dierDuemilanove, are still in widespread use.
ent 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 im7.2 Arduino-compatible boards
portant choices made by Arduino-compatible board designers is whether or not to include USB circuitry in the
Although the hardware and software designs are freely board. That circuitry can be placed in the cable between
available under copyleft licenses, the developers have re- development PC and board, thus making each instance
quested that the name Arduino be exclusive to the o- of the board less expensive. For many Arduino tasks, the
cial product and not be used for derivative works without USB circuitry is redundant once the device has been propermission. The ocial policy document on the use of grammed.
the Arduino name emphasizes that the project is open to
incorporating work by others into the ocial product.[2]
As a result of the protected naming conventions of the Arduino, a group of Arduino users forked the Arduino Diec- 7.2.4 Non-ATmega boards
imila, releasing an equivalent board called Freeduino.
The name Freeduino is not trademarked and is free to The following non-ATmega boards accept Arduino shield
use for any purpose.[65]
daughter boards. The microcontrollers are not compatiSeveral Arduino-compatible products commercially re- ble with the ocial Arduino IDE, but they do provide a
leased have avoided the Arduino name by using "- version of the Arduino IDE and compatible software liduino name variants.[65]
braries.
36

7.5. REFERENCES

7.3 Non-Arduino boards

37

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

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

7.4 See also


Category 5 cable

7.5 References
[1] Arduino - Boards. Arduino.cc. 2009-03-01. Retrieved
2013-01-23.
[2] Arduino - HomePage. Arduino.cc. Retrieved 2013-0123.
[3] https://www.arduino.cc/en/Main/ArduinoBoard101
[4] Intel Curie Module: Unleashing Wearable Device
Innovation. intel.com. Retrieved 2015-08-15.
[5] http://arduino.cc/en/Main/ArduinoBoardZero
[6] ATSAMD21G18A;". Atmel.com. Retrieved 2014-0812.
[7] http://blog.arduino.cc/2015/06/15/
arduino-zero-now-available-for-purchase/
[8] http://blog.arduino.cc/2014/05/15/meet-arduino-zero/

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


[26] ATmega8U2. Atmel.com. Retrieved 2013-01-18.
[27] Arduino Blog- Dinner is Ready. Arduino.cc. 2010-0924. Retrieved 2013-01-18.
[28] Arduino - ArduinoBoardMega2560. Arduino.cc. Retrieved 2013-01-23.
[29] ArduinoBoardMega2560.
2013-01-18.

Arduino.cc.

Retrieved

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


[31] ArduinoBoardEthernet. Arduino.cc. Retrieved 201301-18.
[32] ATmega328. Atmel.com. Retrieved 2013-01-18.
[33] Arduino Blog- Arduino Ethernet, ADK Available for
purchase. Arduino.cc. 2011-07-13. Retrieved 2013-0118.
[34] Arduino - ArduinoEthernetShield. Arduino.cc. Retrieved 2013-01-23.
[35] ArduinoBoardFio. Arduino.cc. Retrieved 2013-01-18.

[36] Arduino Blog- Arduino FIO presented at Uno Punto


[9] http://blog.arduino.cc/2014/08/01/
Zero. Arduino.cc. 2010-03-18. Retrieved 2013-01-18.
20-arduino-zero-dev-edition-available-for-beta-testing-join-us/
[10] ArduinoBoardDue. Arduino.cc. Retrieved 2013-0118.
[11] Chirgwin, Richard (2011-09-20). Arduino to add ARM
board this year. The Register. Retrieved September 20,
2011.

[37] Arduino - ArduinoBoardFio. Arduino.cc. Retrieved


2013-01-23.
[38] ArduinoBoardNano. Arduino.cc. Retrieved 2013-0118.
[39] ATmega168. Atmel.com. Retrieved 2013-01-18.

[12] AT91SAM3X8E;". Atmel.com. Retrieved 2013-01-18.

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

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

[41] Arduino Blog- Arduino Nano: all-in-one design for


breadboard use. Arduino.cc. 2008-05-15. Retrieved
2013-01-18.

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


[15] atmel.com. atmel.com. Retrieved 2013-01-18.
[16] Arduino Blog- Arduino Due is nally here. Arduino.cc.
2012-10-22. Retrieved 2013-01-18.

[42] ArduinoBoardLilyPad. Arduino.cc. Retrieved 201301-18.

[17] http://arduino.cc/en/Main/ArduinoBoardYun

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

[18] ATmega32U4. Atmel.com. Retrieved 2013-01-18.

[44] arduino.cc

[19] http://blog.arduino.cc/2013/08/21/
updating-about-arduino-yun-and-arduino-robot/

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

[20] Arduino - ArduinoBoardLeonardo. Arduino.cc. Retrieved 2013-01-23.

[46] ArduinoBoardEsplora. Arduino.cc. Retrieved 201301-18.

38

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

[47] ArduinoBoardMicro. Arduino.cc. Retrieved 2013-0118.

[71] SainSmart Mega 2560.


2013-01-23.

[48] Arduino Blog- New Arduino Micro available.


duino.cc. 2012-11-08. Retrieved 2013-01-18.

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

Ar-

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


2013-01-23.
[50] ATmega8. Atmel.com. Retrieved 2014-08-14.
[51] Arduino - ArduinoBoardBluetooth. Arduino.cc. Retrieved 2013-01-23.
[52] Arduino Board Bluetooth.
2013-01-18.

Arduino.cc.

Retrieved

[53] Arduino Blog- Arduino Diecimila and BT reference designs now available. Arduino.cc. 2007-10-22. Retrieved
2013-01-18.
[54] ArduinoBoardDiecimila. Arduino.cc. Retrieved 201301-18.
[55] Arduino - ArduinoBoardDuemilanove.
Retrieved 2013-01-23.

Arduino.cc.

[56] Arduino Board Duemilanove. Arduino.cc. Retrieved


2013-01-18.
[57] Arduino Blog- Arduino Duemilanove.
2008-10-19. Retrieved 2013-01-18.

Arduino.cc.

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


2013-01-23.
[59] ArduinoBoardMega. Arduino.cc. Retrieved 2013-0118.
[60] ATmega1280. Atmel.com. Retrieved 2013-01-18.
[61] Arduino Blog- Arduino Mega: bigger, more powerful,
still blue. Arduino.cc. 2009-03-26. Retrieved 2013-0118.

sainsmart.com.

Retrieved

[73] http://www.elecfreaks.com/
[74] SainSmart UNO R3. sainsmart.com. Retrieved 201301-23.
[75] Tavir-AVR. Tavir-AVR :: Bascom, Arduino, Wiring
- Programozs, Frum, ingyenes mintaalkalmazsok,
knyvek. Avr.tavir.hu. Retrieved 2013-01-23.
[76] TavIR : Mikrokontroller vilg | A gyakorlati tuds
trhza (in Hungarian). Tavir.hu. Retrieved 2013-0123.
[77] Brasuno. Brasuino.holoscopio.com. Retrieved 201301-23.
[78] Holoscpio. Holoscopio.com. 2011-07-18. Retrieved
2013-01-23.
[79] Chibiduino2. tiisai.dip.jp. Retrieved 17 Aug 2013.
[80] Arduino Cosmo Black Star
:: Arduino. Jt5.ru. Retrieved 2013-01-23.
[81] JT5
::


". Jt5.ru. Retrieved 2013-0123.
[82] CraftDuino / RoboCraft.ru / RoboCraft. Robocraft.ru.
Retrieved 2013-01-23.
[83] evilmadscientist.com
[84] Electronics | multiplo Robot Building System. Multiplo.org. Retrieved 2013-01-23.
[85] multiplo Robot Building System |". Multiplo.org. Retrieved 2013-01-23.

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


2013-01-23.

[86] "
trieved 2013-01-23.

[63] ArduinoBoardProMini. Arduino.cc. Retrieved 201301-18.

[87] Platino - Versatile Board for AVR Microcontrollers


[100892 & 150555] | Elektor Labs. www.elektor-labs.
com. Retrieved 2015-11-04.

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


2008-08-23. Retrieved 2013-01-18.
[65] Freeduino Open Source Hardware Files. Freeduino.org.
Retrieved 2013-01-23.

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

[88] MaxSerial : Fundamental Logic WebStore, Electronic


Kits and Components. Store.fundamentallogic.com.
2010-05-30. Retrieved 2013-01-23.

[66] http://www.linear.com/solutions/linduino

[89] fayalab inc. | fayalab inc. www.fayalab.com. Retrieved


2016-02-18.

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

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


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

[68] http://www.ventor.co.in/
[69] SainSmart UNO. sainsmart.com. Retrieved 2013-0123.

[92] Freeduino USB complete KIT (Arduino Duemilanove


Compatible)". Nkcelectronics.com. Retrieved 2013-0123.

[70] SainSmart-Open Hardware Company. sainsmart.com.


Retrieved 2013-01-23.

[93] Illuminato::Genesis. Liquidware. Retrieved 2013-0123.

7.5. REFERENCES

39

[94] http://www.induino.com/wiki/index.php?title=
[115] YourDuinoRobo1 (Upgraded Arduino Compatible)".
InduinoX. Retrieved August 13, 2011. Missing or
Arduino-direct.com. Retrieved 2014-09-23.
empty |title= (help)
[116] geekstudio.co.za
[95] Simple
Labs
|
Simplifying
Technology.
[117] Zigduino r1 - Logos Electromechanical.
LogosBuild.simplelabs.co.in. Retrieved 2013-01-23.
electro.com. Retrieved 2013-01-23.
[96] Vol.27
(8
+
)
|
[118] Products & Services - Logos Electromechanical.
|
.net.
Otonanokagaku.net.
Logos-electro.com. 1999-02-22. Retrieved 2013-01-23.
Retrieved 2013-01-23.
[119] http://www.freetronics.com/collections/arduino/
[97] 990.110. Droids.it. Retrieved 2013-01-23.
products/etherten
[98] 990.023 Luigino328 - User Manual [EN]". Droids.it. [120] http://www.freetronics.com/
Retrieved 2013-01-23.
collections/arduino/products/
ethermega-arduino-mega-2560-compatible-with-onboard-ethernet
[99] Metaboard Metalab (in German). Metalab.at. Retrieved 2013-01-23.
[121] http://www.freetronics.com/collections/arduino/
products/usbdroid
[100] small computers for art and science. Rascal Micro. Retrieved 2013-01-23.
[122] http://www.freetronics.com/collections/arduino/
products/eleven
[101] https://web.archive.org/20130331012625/http:
[123] http://www.freetronics.com/collections/arduino/
//www.bitwizard.nl:80/wiki/index.php/Raspduino.
products/kitten
Archived from the original on March 31, 2013. Retrieved
January 23, 2013. Missing or empty |title= (help)
[124] CATkit
[102] BitWizard. Bitwizard.nl. Retrieved 2013-01-23.
[125] http://www.freetronics.com/
collections/arduino/products/
[103] DFRduino Romeo-All in one Controller V1.1(SKU:
etherdue-arduino-due-compatible-with-onboard-ethernet
DFR0004) - Robot Wiki. Dfrobot.com. Retrieved
2013-01-23.

[126] http://www.elechouse.com/elechouse/index.php?main_
page=product_info&cPath=72_73&products_id=2212
[104] DFRobot-An Online Opensource Robot and Hardware
Shop. Dfrobot.com. Retrieved 2013-01-23.
[127] "Io:duino". Railstars. Retrieved 2013-01-23.
[105] Tools, Parts, Kits for DIY'ers. Curious Inventor. Re- [128] DFRobotShop Rover V2 - Arduino Compatible Tracked
trieved 2013-01-23.
Robot (Basic Kit)". RobotShop. Retrieved 2013-01-23.
[106] Seeeduino V3.0 (Atmega 328P) [ARD130D2P] - $22.50 [129] Industruino. Retrieved 12 June 2015.
: Seeed Studio Bazaar, Boost ideas, extend the reach.
[130] Mindsets online. Mindsets online. 2007-03-01. ReSeeedstudio.com. Retrieved 9 Nov 2014.
trieved 2013-01-23.
[107] SunDUINO Nowy wymiar elektroniki.
Sun[131] Mindsets online.co.uk. Mindsets online.co.uk. 2007duino.neth.pl. Retrieved 2013-01-23.
03-01. Retrieved 2013-01-23.
[108] TwentyTen (100% Arduino Compatible). Parts & Kits
for Arduino Online, Buy Microcontroller Boards, Elec- [132] mindsetsonline.co.uk
tronic Components for Arduino - TwentyTen (100% Ar- [133] Bump and Reverse Robot Kit (Faraduino) - Faraduino.
duino Compatible)". Freetronics. Retrieved 2013-01-23.
Mindsets online. 2007-03-01. Retrieved 2013-01-23.
[109] Parts & Kits for Arduino Online, Buy Microcontroller [134] Faraconnect Shield (Faraduino) - Faraduino. Mindsets
Boards, Electronic Components for Arduino - Welcome.
online. 2007-03-01. Retrieved 2013-01-23.
Freetronics. Retrieved 2013-01-23.
[135] Motoruino | GUIBOT. Guibot.pt. Retrieved 2013-01[110] Volksduino: complete low-cost Arduino clone. Ap23.
pliedplatonics.com. Retrieved 2013-01-23.
[136] Anderson, Chris (2009-01-21). ArduPilot (Legacy)
main page. DIY Drones. Retrieved 2013-01-23.
[111] Applied Platonics. Applied Platonics. Retrieved 201301-23.
[137] Flyduino Shop - Multirotor, Multicopter Teile & Zubehr fr Quadrocopter, Hexacopter, Octocopter - Motore,
[112] Wise time with Arduino.
TimewithRahmen, FCs & ESCs. Flyduino.net. Retrieved 2013arduino.blogspot.com. Retrieved 2013-01-23.
01-23.
[113] http://www.obdiiworld.com/ obdiiworld.com]] (parts in
[138] Arduino "" RF
Chinese?)
868 Mhz :: Arduino. Jt5.ru.
[114] YourDuino. YourDuino. Retrieved 2013-01-23.
2012-03-30. Retrieved 2013-01-23.

40

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

[139] JeeNode - JeeLabs Hardware - JeeLabs . net. Jee- [166] Freeduino Serial india. Bhashatech.com. 2009-08-23.
labs.net. Retrieved 2013-01-23.
Retrieved 2013-01-23.
[140] http://www.freetronics.com/collections/arduino/
products/arduphone-arduino-compatible-cellphone
[141] http://wtfduino.co.uk

[167] Femtoduino: an ultrasmall (20.7x15.2 mm) libre Arduino compatible board. Varesano.net. Retrieved 201301-23.
[168] , specications

[142] http://tah.io
[143] http://revealinghour.in

[169] , Femtoduino.com website

[144] iono.

[170] JN - JeeLabs Hardware - JeeLabs . net. Jeelabs.net.


Retrieved 2013-01-23.

[145] Sfera Labs.


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

[171] Computing stu tied to the physical world (2013-01-19).


JeeLabs. JeeLabs. Retrieved 2013-01-23.

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

[172] Wiki - JeeLabs Hardware - JeeLabs . net. Jeelabs.net.


Retrieved 2013-01-23.
[148] Bare Bones Board (BBB) Kit | Modern Device.
Shop.moderndevice.com. Retrieved 2013-01-23.
[173] , LCDuino blog
[149] RBBB Kit | Modern Device. Shop.moderndevice.com.
[174] Silicon Railway. Small, powerful, and versatile at a reaRetrieved 2013-01-23.
sonable cost. Siliconrailway.com. Retrieved 2013-0123.
[150] " Arduino, . ;)". Blockduino. Retrieved
2013-01-23.
[175] lowpowerlab.com, All about Moteino
[151] " BlockDuino. Blockduino.org. Re[176] lowpowerlab.com
trieved 2013-01-23.
[152] Boarduino - Breadboard-compatible Arduino Clone. [177] DualOptiboot
Ladyada.net. 2011-08-15. Retrieved 2013-01-23.
[178] NavSpark Community. Retrieved 2014-06-05.
[153] Breaduino: the all-breadboard Arduino clone. Applied[179] SkyTraq. Retrieved 2014-06-05.
platonics.com. Retrieved 2013-01-23.
[154] Croduino Basic 5x3cm Arduino Duemilanove compati- [180] Wiblocks - NB1A - ATmega328 + DAC + RTC.
Wiblocks.luciani.org. Retrieved 2013-01-23.
ble board. e-radionica.com. Retrieved 2016-01-15.
[181] Wiblocks - NB2 System. Wiblocks.luciani.org. Retrieved 2013-01-23.

[155] chip45.com
[156] chip45.com

[182] Electronics for Hobbyists. Circuit Monkey. Retrieved


[157] Microcontroller Modules, Boards, Tools and Acces2013-01-23.
sories for Atmel AVR ATmega Xmega Processors.
Chip45.com. Retrieved 2013-01-23.
[183] om328p. Oak Micros. Retrieved 2013-01-23.
[158] Electronics for Hobbyists. Circuit Monkey. Retrieved [184] OpenTag Board. Loggerhead Instruments. Archived
2013-01-23.
from the original on 9 Nov 2014. Retrieved 9 Nov 2014.
[159] Digispark USB Development Board. Retrieved 2014- [185] Guilherme Martins :
PAPERduinos design.
06-05.
Lab.guilhermemartins.net. Retrieved 2013-01-23.
[160] Digistump. Retrieved 2014-06-05.

[186] Particle Store. Particle. Retrieved 2015-09-28.


[161] DragonFly - ATmega1280 Arduino Bundle - Circuit
[187] STM32F2x5. st.com. Retrieved 2015-09-28.
Monkey. Circuitmonkey.com. Retrieved 2014-11-04.
[162] iDuino Complete Kit [iDuino-3-kit] - $21.00 : Fun- [188] Picoduino. Peter Misenko. Retrieved 4 June 2014.
damental Logic WebStore, Electronic Kits and Compo[189] https://www.sparkfun.com/products/12640
nents. Spie.org. 2010-05-30. Retrieved 2013-01-23.
[190] Rainbowduino LED driver platform - Atmega 328
Rainbowduino LED driver platform - Plug and Shine!
[ARD127D2P] - $24.90 : Seeed Studio Bazaar, Boost
ideas, extend the reach. Seeedstudio.com. Retrieved
[164] freeduino lite v2. Bhashatech.com. Retrieved 2013-012013-01-23.
23.
[163] Albino, Alejandro (2012-04-21). Smallest Arduino.
Femtoduino. Retrieved 2013-01-23.

[165] Bhasha Technologies.


2013-01-23.

Bhashatech.com.

Retrieved [191] What Is Sanguino?". Sanguino.cc. Retrieved 2013-0123.

7.5. REFERENCES

41

[192] Seeeduino Mega [ARD121D2P] - $43.00 : Seeed Studio [218] https://github.com/watterott/wattuino#


Bazaar, Boost ideas, extend the reach. Seeedstudio.com.
wattuino-nanite-85
Retrieved 2013-01-23.
[219] https://github.com/watterott/wattuino#
[193] Sippino. SpikenzieLabs. 2011. Archived from the origwattuino-nanite-841
inal on 15 Aug 2014. Retrieved 9 Nov 2014.
[220] https://github.com/watterott/wattuino#
[194] SODAQ board. www.sodaq.net. Retrieved 2 Oct 2013.
wattuino-pro-mini-pb
[195] Sparrow
prototyping
board.
homeautomation.com. Retrieved 2013-05-13.

open- [221] leaabs.com. leaabs.com. Retrieved 2013-01-23.

[222] leaabs.com. leaabs.com. Retrieved 2013-01-23.


[196] Red Back Spider robot controller | Lets Make Robots!".
Letsmakerobots.com. Retrieved 2013-01-23.
[223] st.com
[197] StickDuino - USB Stick Sized Arduino Clone. [224] leaabs/maple-ide GitHub. Github.com. Retrieved
Spie.org. Retrieved 2013-01-23.
2013-01-23.
[198] PJRC Teensy 2.0
[199] PJRC teensy variants
[200] PJRC Teensy 2.0++
[201] ,PRJC Teensy 3.0
[202] PJRC Teensy 3.1/3.2
[203] TeensyLC
[204] TinyDuino. TinyCircuits. Retrieved 2013-01-23.
[205] A Maker of Tiny Open Source Circuits. TinyCircuits.
Retrieved 2013-01-23.
[206] TinyLily. TinyCircuits. Retrieved 2013-01-23.

[225] Arduino - Reference. Arduino.cc. Retrieved 2013-0123.


[226] leaabs/libmaple GitHub. Github.com. Retrieved
2013-01-23.
[227] Digital Design Engineers Source. Digilent Inc. Retrieved 2013-01-23.
[228] chipKIT32/chipKIT32-MAX GitHub. Github.com.
Retrieved 2013-01-23.
[229] Digital Design Engineers Source. Digilent Inc. Retrieved 2013-01-23.
[230] Digital Design Engineers Source. Digilent Inc. Retrieved 2013-01-23.

[207] https://learn.adafruit.com/introducing-trinket

[231] chipKIT Uno32: rst impressions and benchmarks.


Hackaday.com. 2011-05-27. Retrieved 2013-01-23.
[208] strobit - Strobit Wireless Widget Open Hardware Project
- Google Project Hosting. Code.google.com. Retrieved
[232] Freescale Freedom Development Platform for Kinetis
2013-01-23.
KL14, KL15, KL24, KL25 MCUs. Archived from the
original on 6 Oct 2014.
[209] Wiblocks - ZB1 System. Wiblocks.luciani.org. Retrieved 2013-01-23.
[233] Welcome to Freescale - Freescale Semiconductor.
Freescale.com. Retrieved 2013-01-23.
[210] OpenEnergyMonitor. emonTx. OpenEnergyMonitor.
Retrieved 2013-01-23.
[234] KL2 Product Summary Page. Freescale.com. Re[211] "Project:Nanode
London
Hackspace.
trieved 2013-01-23.
Wiki.london.hackspace.org.uk.
Retrieved 2013-01[235] Coridium. Coridiumcorp.com. Retrieved 2013-01-23.
23.
[212] Wireless Arduino-compatible miniatures. panStamp. [236]
Retrieved 2013-01-23.
[237]
[213] https://web.archive.org/20131218102254/http:
//code.google.com/p/panstamp/wiki/lagarto. Archived
from the original on December 18, 2013. Retrieved [238]
March 17, 2015. Missing or empty |title= (help)
[239]
[214] Microduino Wiki(English)". www.microduino.net. Retrieved 10 Oct 2013.
[240]
[215] Microduino Wiki( )". www.microduino.net. Retrieved 10 Oct 2013.
[241]
[216] Versalino-Uno
[217] http://www.freetronics.com/collections/arduino/
products/leostick

Coridium. Coridiumcorp.com. Retrieved 2013-01-23.


Use Arduino code on a TI Launchpad MSP430.
Instructables. 14 August 2012.
Energia. Github.
Sakura board homepage. Gadget Renesas project. Retrieved 2013-10-28.
Feature description of board and web compiler. Renesas. Retrieved 2013-10-28.
Arduino - Software. Arduino.cc. Retrieved 2013-0123.

[242] CHIPINO - The Microchip PIC Based Arduino Style


Module. Chipino.com. Retrieved 15 November 2014.

42

CHAPTER 7. LIST OF ARDUINO COMPATIBLES

[243] CHIPINO-FAQ. Chipino.com. Retrieved 15 November


2014.
[244] CHIPINO. Howtronics.com. Howtronics. Retrieved 15
November 2014.
[245] propellerpowered.com
[246] QuickStart 1: Comparison of Programming Tools. Parallax Semiconductor. Retrieved 2013-01-23.
[247] Mitchell, Graham (2010-06-09). Introducing The Amicus18 [195] | Amicus18 Beginner Guides | Amicus18.
Digital-diy.com. Retrieved 2013-01-23.
[248] Bugblat Cortino. Bugblat.com. 2012-01-04. Retrieved
2013-01-23.
[249] PINGUINO Project. Hackinglab.org. 2010-08-26. Retrieved 2013-01-23.

[251] home. Netduino. Retrieved 2013-01-23.


[252] Overview. Netduino. Retrieved 2013-01-23.
[253] Development Modules. Ftdichip.com. Retrieved 201301-23.
[254] FEZ Domino. GHI Electronics. Retrieved 2013-01-23.
[255] FEZ Panda. GHI Electronics. Retrieved 2013-01-23.
[256] FEZ Cerbuino Bee. FEZ Panda II. GHI Electronics.
Retrieved 2013-01-23.
[257] https://web.archive.org/20110311091334/http:
//www.tinyclr.com:80/compare/.
Archived from
the original on March 11, 2011. Retrieved August 13,
2011. Missing or empty |title= (help)
MyFreescaleWebPage.

Re-

[259] rebird32.com
[260] parallax.com
[261]
[262] Breeze Boards Dizzy Enterprises website
[263] Arduino clone with mikroBUS socket mikroElektronika
news article
[264] Goldilocks Dev Board Thin Layer website
[265] Thin Layer website

Evans, Martin; Noble, Joshua; Hochenbaum, Jordan (August 28, 2012). Arduino in Action (1st ed.).
Manning. p. 300. ISBN 978-1617290244.
McComb, Gordon (June 5, 2012). Arduino Robot
Bonanza (1st ed.). McGraw-Hill. p. 40. ISBN 9780-07-178277-7.
Olsson, Tony (May 30, 2012). Arduino Wearables
(1st ed.). Apress. p. 400. ISBN 978-1-4302-43595.
Anderson, Rick; Cervo, Dan (May 16, 2012). Pro
Arduino (1st ed.). Apress. p. 350. ISBN 978-14302-3939-0.
Wilcher, Don (April 30, 2012). Learn Electronics
with Arduino (1st ed.). Apress. p. 350. ISBN 9781-4302-4266-6.
Melgar, Enrique Ramos; Diez, Ciriaco Castro Diez
(March 26, 2012). Arduino and Kinect Projects: Design, Build, Blow Their Minds (1st ed.). Apress. p.
350. ISBN 978-1-4302-4167-6.

[250] unduino.com

[258] MyFreescaleWebPage.
trieved 2013-01-23.

7.6 Further reading

Bhmer, Mario (March 26, 2012). Beginning Android ADK with Arduino (1st ed.). Apress. p. 350.
ISBN 978-1-4302-4197-3.
Jepson, Brian; Igoe, Tom (March 22, 2012). Getting
Started with NFC: Contactless Communication with
Android, Arduino, and Processing (1st ed.). O'Reilly
Media/Make. p. 30. ISBN 978-1-4493-0852-0.
Doukas, Charalampos (March 14, 2012). Arduino,
Sensors, and the Cloud (1st ed.). Apress. p. 350.
ISBN 978-1-4302-4125-6.
Riley, Mike (March 7, 2012). Programming Your
Home: Automate with Arduino, Android, and Your
Computer (1st ed.). Pragmatic Bookshelf. p. 200.
ISBN 978-1-934356-90-6.
Igoe, Tom (February 22, 2012). Getting Started with
RFID: Identify Objects in the Physical World with Arduino (1st ed.). O'Reilly Media. p. 40. ISBN 9781-4493-2418-6.
Borenstein, Greg (February 3, 2012). Making
Things See: 3D vision with Kinect, Processing, Arduino, and MakerBot (1st ed.). O'Reilly Media. p.
440. ISBN 978-1-4493-0707-3.
Noble, Joshua (January 30, 2012). Programming Interactivity (2nd ed.). O'Reilly Media. p. 726. ISBN
978-1-4493-1144-5.
Margolis, Michael (December 30, 2011). Arduino
Cookbook (2nd ed.). O'Reilly Media. p. 724. ISBN
978-1-4493-1387-6.

7.7. EXTERNAL LINKS


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

43
Faludi, Robert (January 4, 2011). Building Wireless
Sensor Networks: with ZigBee, XBee, Arduino, and
Processing (1st ed.). O'Reilly Media. p. 320. ISBN
978-0-596-80774-0.
McRoberts, Michael (December 20, 2010).
Beginning Arduino (1st ed.). Apress. p. 350. ISBN
978-1-4302-3240-7.

Monk, Simon (November 15, 2011). Arduino + Android Projects for the Evil Genius: Control Arduino
with Your Smartphone or Tablet (1st ed.). McGrawHill. p. 224. ISBN 978-0-07-177596-0.

Monk, Simon (August 23, 2010). 30 Arduino


Projects for the Evil Genius (1st ed.). McGraw-Hill.
p. 208. ISBN 978-0-07-174133-0.

Timmis, Harold (November 9, 2011). Practical Arduino Engineering (1st ed.). Apress. p. 328. ISBN
978-1-4302-3885-0.

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.

Monk, Simon (November 8, 2011). Programming


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

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

Evans, Brian (October 17, 2011). Beginning Arduino Programming (1st ed.). Apress. p. 272. ISBN
978-1-4302-3777-8.

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.

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 9781-4493-8971-0.
Margolis, Michael (March 15, 2011). Arduino
Cookbook (1st ed.). O'Reilly Media. p. 660. ISBN
978-0-596-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.

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 though users only need to dene two functions to make a
platform composed of a programming language, an runnable program:
integrated development environment (IDE), and a
single-board microcontroller. It was developed starting
setup() a function run once at the start of a proin 2003 by Hernando Barragn.
gram which can be used to dene initial environBarragn started the project at the Interaction Design Inment settings
stitute Ivrea. The project is currently developed at the
School of Architecture and Design at the Universidad de
loop() a function called repeatedly until the board
Los Andes in Bogot, Colombia.
is powered o
Wiring builds on Processing, an open project initiated by
Casey Reas and Benjamin Fry, both formerly of the Aesthetics and Computation Group at the MIT Media Lab.
A typical rst program for a microcontroller is to simply
The documentation has been created with designers and blink an LED (light-emitting diode) on and o. In the
artists in mind. There is a community where experts, Wiring environment, the user might write a program like
intermediate developers and beginners from around the this:
world share ideas, knowledge and their collective experi- int ledPin = WLED; // a name for the on-board LED void
ence. Wiring allows writing software to control devices setup () { pinMode(ledPin, OUTPUT); // congure the
attached to the electronics board to create all kinds of in- pin for digital output } void loop () { digitalWrite(ledPin,
teractive objects, spaces or physical experiences feeling HIGH); // turn on the LED delay (1000); // wait one
and responding in the physical world. The idea is to write second (1000 milliseconds) digitalWrite(ledPin, LOW);
a few lines of code, connect a few electronic components // turn o the LED delay (1000); // wait one second }
to the Wiring hardware and observe how a light turns on
when person approaches it, write a few more lines, add
another sensor, and see how this light changes when the When the user clicks the Upload to Wiring hardware
illumination level in a room decreases. This process is button in the IDE, a copy of the code is written to a temcalled sketching with hardware; explore lots of ideas very porary le with an extra include header at the top and a
quickly, select the more interesting ones, rene and pro- very simple main() function at the bottom, to make it a
valid C++ program.
duce prototypes in an iterative process.
The Wiring IDE uses the GNU toolchain and AVR Libc
to compile programs, and uses avrdude to upload programs to the board.
8.1 Software
The Wiring IDE is a cross-platform application written in Java which is derived from the IDE made for the
8.2 Open hardware and open
Processing programming language. It is designed to insource
troduce programming and sketching with electronics to
artists and designers. It includes a code editor with features such as syntax highlighting, brace matching, and au- The Wiring hardware reference designs are distributed
tomatic indentation capable of compiling and uploading under a Creative Commons Attribution Share-Alike 2.5
programs to the board with a single click.
license and are available on the Wiring Web site. LayThe Wiring IDE comes with a C/C++ library called out and production les for the Wiring hardware are also
Wiring, which makes common input/output operations available. The source code for the IDE and the hardware
much easier. Wiring programs are written in C/C++, al- library are available and released under the GPLv2
44

8.6. EXTERNAL LINKS

8.3 Related projects


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
Igoe, Tom (September 28, 2007). Making Things
Talk: Practical Methods for Connecting Physical Objects (1st ed.). O'Reilly Media. p. 432. ISBN 0596-51051-9.
Noble, Joshua (July 15, 2009). Programming Interactivity: A Designers Guide to Processing, Arduino,
and openFramework (1st ed.). O'Reilly Media. p.
768. ISBN 0-596-15414-3.
[1] Previous Releases. Wiring.org.co. Retrieved January 5,
2011.

45

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. In 2012, they started the Processing Foundation
along with Daniel Shiman, who formally joined as a
third project lead.

9.2.1 Hello World


The simplest possible version of a Hello World program
in Processing is:
//This prints Hello World. to the IDE console. void
setup() { println(Hello world.); }
However, due to the more visually-oriented nature of Processing, 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); }

9.2.2 United States presidential election


map

9.1 Features
Processing includes a sketchbook, a minimal alternative
to an integrated development environment (IDE) for organizing projects.
Every Processing sketch is actually a subclass of the
PApplet Java class which implements most of the Processing languages features.

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.
Output of the following example
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

The next example creates 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, MD, MI, WA, CA, OR, IL, MN,
WI, DC, NM, VA }; String [] McCain = {

46

9.4. AWARDS
AK, GA, AL, TN, WV, KY, SC, WY,
MT, ID, TX, AZ, UT, ND, SD, NE,
MS, MO, AR, OK, KS, LA }; void setup()
{ size(950, 600); // The le Blank US Map (states
only).svg can be found at Wikimedia Commons usa
= loadShape("http://upload.wikimedia.org/wikipedia/
commons/archive/1/1a/20130330152451!Blank_US_
Map_(states_only).svg"); smooth(); // Improves the
drawing quality of the SVG noLoop(); } void draw() {
background(255); // Draw the full map shape(usa, 0,
0); // Blue denotes states won by Obama statesColoring(Obama , color(0, 0, 255)); // Red denotes states
won by McCain statesColoring(McCain, color(255,
0, 0)); // Save the map as image saveFrame(map
output.png); } void statesColoring(String[] states, int
c){ for (int i = 0; i < states.length; ++i) { PShape state
= usa.getChild(states[i]); // Disable the colors found in
the SVG le state.disableStyle(); // Set our own coloring
ll(c); noStroke(); // Draw a single state shape(state, 0,
0); } }

47
In 2008, John Resig ported Processing to JavaScript using
the Canvas element for rendering,[2] allowing Processing
to be used in modern web browsers without the need for
a Java plugin. Since then, the open source community including students at Seneca College in Toronto have taken
over the project.
Processing.js is also used to advocate very basic programming to Students of all ages on Khan Academy by creating drawings and animations. Learners showcase their
creations to other learners and many of the projects are
very fascinating.

9.3.5 p5.js
Lauren McCarthy has created p5.js.[3] an alternative
to Processing.js that has the ocial support of the
Processing Foundation.[4] McCarthy also teaches an introductory course to p5.js on Kadenze.[5]

9.3.6 iProcessing

9.3 Related projects


9.3.1

Design By Numbers

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.

Processing was based on the original work done on Design


By Numbers project at MIT. It shares many of the same 9.3.7 Spde
ideas and is a direct child of that experiment.
Spde (standing for Scala Processing Development Environment) replaces Processings reduced Java syntax and
custom preprocessor with the o-the-shelf Scala pro9.3.2 Wiring, Arduino, and Fritzing
gramming language which also runs on the Java platform
Processing has spawned another project, Wiring, which and enforces some of the same restrictions such as disaluses the Processing IDE with a collection of libraries lowing static methods, while also allowing more concise
[6][7][8]
written in the C++ language as a way to teach artists how code, and supporting functional programming.
to program microcontrollers. There are now two separate
hardware projects, Wiring and Arduino, using the Wiring
9.3.8 Quil
environment and language. Fritzing is another software
environment of the same sort, which helps designers and
Quil (formerly named clj-processing) is a wrapper for Proartists to document their interactive prototypes and to
cessing in the Clojure language, a Lisp that runs on the
take the step from physical prototyping to actual product.
Java platform.[9]

9.3.3

Mobile Processing

9.4 Awards

Another spin-o project, now defunct, is Mobile Processing by Francis Li, which allowed software written using In 2005 Reas and Fry won the prestigious Golden Nica
the Processing language and environment to run on Java award from Ars Electronica in its Net Vision category for
powered mobile devices. Today some of the same func- their work on Processing.
tionality is provided by Processing itself.[1]
Ben Fry won the 2011 National Design Award given
by the Smithsonian Cooper-Hewitt National Design Museum in the category of Interaction Design. The award
9.3.4 Processing.js
statement says:
Main article: Processing.js

Drawing on a background in graphic design and computer science, Ben Fry pursues a long-held fascination

48
with visualizing data. As Principal of Fathom Information Design in Boston, Fry develops software, printed
works, installations, and books that depict and explain
topics from the human genome to baseball salaries to
the evolution of text documents. With Casey Reas, he
founded the Processing Project, an open-source programming environment for teaching computational design and
sketching interactive-media software. It provides artists
and designers with accessible means of working with
code while encouraging engineers and computer scientists to think about design concepts.

9.5 License
Processings core libraries, the code included in exported
applications and applets, is licensed under the GNU
Lesser General Public License, allowing users to release
their original code with a choice of license.

CHAPTER 9. PROCESSING

[6] Spde: Spde. Technically.us. Retrieved 2013-08-20.


[7] Coderspiel / Runaway processing. Technically.us. Retrieved 2013-08-20.
[8] Coderspiel / Flocking with Spde. Technically.us. Retrieved 2013-08-20.
[9] 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

The IDE is licensed under the GNU General Public License.

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

9.6 Name

Reas, Casey; Fry, Ben (June 17, 2010), Getting


Started with Processing (1st ed.), Make, p. 208,
ISBN 1-4493-7980-X

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] Android - Processing. Retrieved 2013-06-03.
[2] John Resig - Processing.js.
[3] p5js: p5js.
[4] Processing Foundation: processingfoundation.
[5] Introduction to Programming for the Visual Arts with
p5.js on Kadenze

Noble, Joshua (July 21, 2009), Programming Interactivity: A Designers Guide to Processing, Arduino,
and Openframeworks (1st ed.), O'Reilly Media, p.
736, ISBN 0-596-15414-3
Terzidis, Kostas (May 11, 2009), Algorithms for Visual Design Using the Processing Language (1st ed.),
Wiley, p. 384, ISBN 0-470-37548-5
Reas, Casey; Fry, Ben; Maeda, John (September
30, 2007), Processing: A Programming Handbook
for Visual Designers and Artists (1st ed.), The MIT
Press, p. 736, ISBN 0-262-18262-9
Fry, Ben (January 11, 2008), Visualizing Data (1st
ed.), O'Reilly Media, p. 382, ISBN 0-596-51455-7
Greenberg, Ira (May 28, 2007), Processing: Creative Coding and Computational Art (Foundation)
(1st ed.), friends of ED, p. 840, ISBN 1-59059-617X
Shiman, Daniel (August 19, 2008), Learning Processing: A Beginners Guide to Programming Images,
Animation, and Interaction (1st ed.), Morgan Kaufmann, p. 450, ISBN 0-12-373602-1
Faludi, Robert (January 4, 2011), Building Wireless
Sensor Networks: with ZigBee, XBee, Arduino, and
Processing (1st ed.), O'Reilly Media, p. 320, ISBN
978-0-596-80774-0
Vantomme, Jan (September 20, 2012), Processing
2, Creative Programming Cookbook (1st ed.), Packt
Publishing, p. 291, ISBN 9781849517942

9.10. EXTERNAL LINKS


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 sourcecodes and examples
Ruby-Processing, which is a ruby wrapper around
the Processing code art framework, built using
JRuby

49

50

CHAPTER 9. PROCESSING

9.11 Text and image sources, contributors, and licenses


9.11.1

Text

Arduino Source: https://en.wikipedia.org/wiki/Arduino?oldid=729150946 Contributors: AxelBoldt, Caltrop, Ceaser, Hikari, Mahjongg,


Kku, Delirium, Darkwind, Kragen, Glenn, Scott, Donio, Mulad, Greglocock, Nv8200pa, Taxman, Val42, Klaus Leiss, Dumbledad,
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, Cedar101, 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, Ihatetoregister, Salamurai, Pfhyper, RickO5, Ian Spackman, Dejudicibus, Toggio, IronGargoyle, TerryKing, Hu12, Courcelles, Sreeram shankar, Fabrice Florin, Amalas, Pfagerburg~enwiki,
Drinibot, Yaris678, Cydebot, Mike65535, Meno25, Nick Wilson, Gogo Dodo, SimenH, ShadowGuy, Neoforma, ClarkMills, Abqsteve,
Surturz, Kozuch, Waveking, Cinderblock63, 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, Philg88, Gwern, Wimh, CommonsDelinker, Yannick56, Buhadram, Silas S. Brown, Minime72706, Aervanath, Gonzalo M. Garcia, Ajfweb, ICE77, Lexein, TXiKiBoT, Moumouza, Calwiki, Chuckwolber, Exprice, Nexus501, Sgbirch, Seb
az86556, Rajsite, Jamelan, Andy Dingley, Synthebot, Nave.notnilc, Biasoli, Userper, Kbrose, Yngvarr, Anilashanbhag, Yadoo86, Sav
vas, Mikebar, Yintan, Rob Prikanowski, Soler97, Jerryobject, Bentogoa, Udawatabhimanyu4, Ali asin, Henryerinjones, Linuxrules1337,
Vbscript2, Misiu mp, Tintin192, Treekids, Denisarona, Kookish, ImageRemovalBot, Stephensb42, TerribleTadpole, Shloimeborukh, ColorfulNumbers, GreenSpigot, VQuakr, Machee, Gbarberi, Niceguyedc, Blanchardb, TjeerdVerhagen, Lessogg, Craigbic, Crazyburns, Awickert, Alexbot, Vancircuit, A Pirard, Arjayay, Jinlye, Chaosdruid, Apparition11, DumZiBoT, Darkicebot, XLinkBot, H0dges, NobbiP,
Cmr08, Cbenson1, Zodon, Fiskbil, Dsimic, Mortense, Non-dropframe, 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, Lonaowna, 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, Dewritech, RA0808, Sukkin, Scgtrp, Tikitpok, Hscharler, AvicBot, ZroBot, Pbruins84, TLeek, , Ubarro,
Lemio, Mowcius, Sbmeirow, Lorem Ip, Howetimothy, Palosirkka, John Garvin, Davidch12, 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,
Mycosys, 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, Andreafermi,
ScotXW, Snakomaniac, WAYNELYW, 32RB17, Bad Dryer, Timofteandrei, Lagoset, Cman21031, Scarlettail, Dsprc, Darkness Fallss,
Engr Wasim Khan, 329n8z7TeL, Karlsonx, Bonomont, Sarr Cat, Andhof-mt, Morszeck, Javiterr, Eudorina412, Gondi56, Hemangjoshi37a,
Hackarobot, Petschekr, JeremiahY, B445778, CitrusEllipsis, 40ozCorona, Massimilianoarceri, TristanRobitaille, Cattus Fluus, Holenthedevil, Coresnoble, Darkbluebit, Zakmylastname, Iran dokht, Hammertime56, David Dragino and Anonymous: 492
Single-board microcontroller Source: https://en.wikipedia.org/wiki/Single-board_microcontroller?oldid=722184532 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, Dewritech, Sbmeirow, Raesak, Snotbot,
Danim, BG19bot, Lyktorna, Cup o' Java, Mandylau, Debouch, Onorai, Dairhead, YiFeiBot, SJ Defender, ScotXW, Fmadd and Anonymous: 16
Atmel AVR Source: https://en.wikipedia.org/wiki/Atmel_AVR?oldid=724519737 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, Goffrie, 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,
,
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, Laserlicht, Akkazemi, USB1000,

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

51

Bonnie13J, Roy tate, Qwerty9030, DarafshBot, Ksvitale, Puguhwah, Mahmoodheshmati, Mogism, Amanparkash, Krikkit1, Epicgenius,
Osiixy, Tomitech, Comp.arch, Kevinf28, Tolmeros, Akhilsn, Moshaydi, 0xTJ, Dharmendra Kumar Dangi, GSS-1987, Akashpc2050,
Tcarisland and Anonymous: 310
Atmel AVR instruction set Source: https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set?oldid=713283939 Contributors: Rl,
Wernher, DavidCary, Chinakow, ArnoldReinhold, AshtonBenson, Nazli, Suruena, RJFJR, Koassim, Marudubshinki, Doruuu, Gurch,
Alvin-cs, WriterHound, Bovineone, MidoriKid, Rwwww, CrazyTerabyte, Thumperward, CapitalR, CmdrObot, Pfagerburg~enwiki, Vwollan, Tomasf, KMeyer, Magioladitis, SwiftBot, Wjl2, Svofski, Mortense, Dkinzer, Yobot, AnomieBOT, Cl2k, Who then was a gentleman?,
Boobarkee, SexyGoat, Edgar.bonet, ClueBot NG, Frietjes, Danim, BG19bot, Frosty, Jamesmcmahon0, Tolmeros, Cjfman, Samy1377,
JJMC89, Dalek Supreme X and Anonymous: 22
Orthogonal instruction set Source: https://en.wikipedia.org/wiki/Orthogonal_instruction_set?oldid=713462565 Contributors: SimonP,
Davitf, Edward, PeterBrooks, Furrykef, Murray Langton, Lady Tenar, Ds13, Rchandra, Macrakis, Neilc, Spearhead, Atlant, Wtshymanski,
Blaxthos, Drichards2, SDC, Qwertyus, Kbdank71, Ligulem, Arnero, Voidxor, Ospalh, SmackBot, Arny, Swerdnaneb, Brianski, TimBentley, Jerome Charles Potts, Frap, Kindall, JonHarder, Ghiraddje, Cybercobra, Metta Bubble, CarlosCoppola, HenkeB, Krauss, IanOsgood,
Blacknova, GermanX, Lightmouse, ClueBot, DumZiBoT, Addbot, SpBot, Luckas-bot, AnomieBOT, Arjun G. Menon, Spike-from-NH,
Prari, Barbaraburg45, Anuclanus, ChrisGualtieri and Anonymous: 25
Open-source hardware Source: https://en.wikipedia.org/wiki/Open-source_hardware?oldid=725505580 Contributors: Comte0, Nixdorf,
CesarB, Haakon, Mac, Ronz, Tacvek, David Latapie, Mrand, Omegatron, Gakrivas, Sjorford, KellyCoinGuy, Alan Liefting, DavidCary,
Michael Devore, Frencheigh, Cyberied, Micru, AlistairMcMillan, Khalid hassani, Gadum, Sonjaaa, Popolon, Savuporo, Wikkrockiana, RossPatterson, Psd, ArnoldReinhold, Gronky, Kanzure, Stephane.magnenat, Kjkolb, Anthony Appleyard, Axl, Kocio, Suruena,
Jwinius, FrancisTyers, Mindmatrix, Armando, CharlesC, Toussaint, Marudubshinki, Stromcarlson, Phoenix-forgotten, Jorunn, Miserlou, Fred Bradstadt, Imrehg, Intgr, Jidan, Wavelength, Klingoncowboy4, C777, Gaius Cornelius, Nowa, Panscient, Jona, Tony1, JoeBorn, Erpingham, WAS 4.250, Emijrp, Snaxe920, Bigcheesegs, SmackBot, Chrissi~enwiki, McGeddon, KVDP, Carl.bunderson, Jcarroll,
Thumperward, Letdorf, Chendy, Harumphy, Frap, JonHarder, G716, DMacks, Guyjohnston, JzG, Vincenzo.romano, Dave104, Beetstra,
Dicklyon, Andrwsc, Galadh, Hu12, CyberAran~enwiki, Dan1679, CmdrObot, Raysonho, Shorespirit, Nczempin, Cydebot, AtTheAbyss,
SimenH, Dancter, Kozuch, Neustradamus, Plaasjaapie, KTucker, Electron9, I already forgot, Guy Macon, Steelpillow, Xhienne, Rob Kam,
SteveSims, Magioladitis, VoABot II, Steven Walling, GBYork, Allstarecho, GermanX, NMaia, Gwern, CommonsDelinker, ArcAngel,
Ultrajosh, Jlndrr~enwiki, Trusilver, Warrakkk, Atama, VolkovBot, TXiKiBoT, Noema, Jamelan, Andy Dingley, Altermike, Sikku, Biasoli, HybridBoy, Mcintireallen, SieBot, Lucasbfrbot, Belorn, Nopetro, Lightmouse, Tjteru, Iamreddave, Robvanbasten, Daviding, Sfan00
IMG, Polto~enwiki, Kl4m-AWB, Frmorrison, Regibox, Hauptmech, Alexbot, Vancircuit, Nukeless, Rayofdawn24, DumZiBoT, Addbot,
Ramu50, Ghettoblaster, Jojhutton, SunDragon34, Snowman76, Scientus, LaaknorBot, Robert.Harker, Jarble, Luckas-bot, Yobot, Themfromspace, Lunochod~enwiki, Enviro1, Uze6666, AnomieBOT, Tucoxn, Berntie, L3lackEyedAngels, Bluerasberry, Materialscientist,
Xqbot, Plasmon1248, Dvansickle, Mark Schierbecker, Brunonar, Ultraux2, Raulshc, FrescoBot, Jeremybennett, SebastianPichelhofer,
Bjonnh, Trkiehl, Cannolis, Posta0ldude, Biker Biker, AlexanderChemeris, JNorman704, Bborg96, Cnwilliams, 122589423KM, Acelros,
Woodlot, CubeSpawn, Thiago.correa, Alinke2000, Maxkreusen, EmausBot, East3YrsWest3Yrs, Zollerriia, Oliver Bestwalter, Veikk0.ma,
Worldpuppet, Wayaguo, Nerd bzh, Mjbmrbot, Mikhail Ryazanov, Juliusbaxter, Jmreinhart, Catlemur, Shaddim, BG19bot, Todrobbins,
Gabriel Yuji, Michael Barera, Jdwolin, BazokaJoe, Ajv39, Simone Cicero, IjonTichyIjonTichy, RickHolder, Osat44, Changfang, Luli17,
QatarStarsLeague, Viswanathsai, Csepartha, Imphil2, OHDIY, Batboys, Loic.urbain, Editor-1, Fixuture, Stockwellnow, Lagoset, Stiegenaufgang, Xxzso, Ginadav, Zoomn, Fdm11, Greeny9, Awlsll, Gihiw, 15zulu, Opgh, Stormihu, Yousef338 and Anonymous: 202
List of Arduino compatibles Source:
https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems?oldid=
729176544 Contributors: Jcw~enwiki, Micru, Alexf, Arosa, Imroy, ArnoldReinhold, Bender235, ColBatGuano, BenediktWildenhain, Wtshymanski, RHaworth, Jamesmorrison, Nsayer, Chris the speller, Jamesnewton, Thumperward, Ihatetoregister, Hbachus, Musashiaharon,
TerryKing, Mblumber, Guy Macon, Silver seren, Ryanneve, Videofeedback, Viskr, CommonsDelinker, Zzglenm, Osndok, KylieTastic,
Lexein, Estratos, Andy Dingley, !dea4u, Steven Crossin, Twidmer, Unbuttered Parsnip, Dascyllus, XLinkBot, Dthomsen8, Mimarx,
Mortense, Ronhjones, Yobot, Nishantmodak, AnomieBOT, SaaHc2B, Geek1337~enwiki, Eumolpo, LilHelpa, Todocono, Pdegregorio,
Ahmadexp, Southwolf, Dewritech, Josve05a, Sbmeirow, Bemerit, Frietjes, Danim, BG19bot, Per1234, Rahulmothiya, Euler357, BattyBot,
Cyberbot II, ChrisGualtieri, , Ajv39, Jojo69003, Youdonotknow, Aalbino, Mogism, Howtronics, Tony Mach, Greg75FR, Dfrobot,
Blockthor, Sepiaz, Sharya77, Happyman7, ThongEric, Majenko, Slicmicro, LuwieThong, Felixemman, Daneduplooy, Brentsinger,
CarlosDelno, Tiisaidipjp, Gpanos123, Knivd, Sodaq, Giampiero.baggiani, Wbz cypress, Cakepacket, Lagoset, Filedelinkerbot, Jcamdr,
Bobricius, RoundupResistance, R2d2ricky, Sarr Cat, Danny.umd, JudeBass, Shamikrudra, Clemoteur, Djkill, Grondanelli, Idrisza86,
GreenC bot and Anonymous: 77
Wiring (development platform) Source: https://en.wikipedia.org/wiki/Wiring_(development_platform)?oldid=725553256 Contributors:
Dcoetzee, Bearcat, Tzf, Micru, Woohookitty, Tony1, Cedar101, SmackBot, Thumperward, Cybercobra, Cydebot, Wikilolo, Andy Dingley, Mikebar, Jerryobject, JL-Bot, Ethridgela, EoGuy, SoxBot, Addbot, Mortense, Ben Ben, Yobot, Troyp, Armbrust, Gbruin, Brunonar,
TjBot, Ripchip Bot, ZroBot, ChuispastonBot, Helpful Pixie Bot, Virtualerian, AlexanderBrevig, Roguebhagman, Dexbot, Peetz0r and
Anonymous: 9
Processing (programming language) Source: https://en.wikipedia.org/wiki/Processing_(programming_language)?oldid=725904661
Contributors: Joakim Ziegler, Chuckhomann, SimonP, Dmb~enwiki, Dysprosia, Traroth, Topbanana, Finlay McWalter, JustinHall, Cecropia, Sj, Metlin, Imroy, Oolong, Skanaar, InShaneee, Velella, Ironwolf, Tripodics, Pol098, CharlesC, FlaBot, CBlair1986, JWB, Rainulf,
Morphh, Johnkershaw, Jeresig, Cedar101, HereToHelp, ViperSnake151, SmackBot, Eskimbot, Thumperward, Gracenotes, Frap, Ddon,
Cybercobra, EdC~enwiki, Hu12, Iridescent, George100, CRGreathouse, Zarex, WeggeBot, John259, Cydebot, Hebrides, SimenH, Jerri
Kohl, Thijs!bot, Neko18, Kaini, KuwarOnline, Yaxu, Gwern, VolkovBot, Masaruemoto, Trevor Wennblom, Andy Dingley, Cooperh,
Multikev, Serprex, SieBot, Gerakibot, Jerryobject, ClueBot, SimShanith, TimmmmCam, 718 Bot, Excirial, Carriearchdale, Duanerbailey, SF007, DumZiBoT, Johndci, Addbot, Professor Calculus, Mortense, K-MUS, !Silent, Boomur, SpBot, Lightbot, Yobot, KamikazeBot, VX, Wickorama, Xqbot, Control.valve, Rkyymmt, Crodrigues, Digisage, Rstuvw, FrescoBot, Umawera, Citation bot 1, VisualStory, Jschnur, Carel.jonkhout, Beao, Hazem92, Phlingpong, ThePCKid, Toxmeister, ZroBot, Cfust, Lthornsb, L Kensington, Lorem Ip,
Mikechen, T.kalka, Imapiekindaguy, ChuispastonBot, ClueBot NG, Joosep-Georg, Wornwinter11, Mrgates, WisCheese, Helpful Pixie Bot,
HMSSolent, SanFranArt, FinnFitzsimons, Egydius, GKFX, Compfreak7, Kirananils, SCLu, Bierons1, Dexbot, Cropoilbrush, Mascot6699,
Franois Robere, Serj.by, Janvantomme, Pcatanese, ThatSexyCat, Andersonfreitas, Shaomeng, Stiegenaufgang, JessicaParrisWestbrook,
Qzekrom, Fizzimizzi, Kqb Kushal, Dylan Kriegman, Taher Sa, New Joesey, 44bbbbs and Anonymous: 149

52

CHAPTER 9. PROCESSING

9.11.2

Images

File:ATmega169-MLF.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a7/ATmega169-MLF.jpg License: CC-BYSA-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
File:AVRISP_mkII.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/cd/AVRISP_mkII.jpg License: CC BY-SA 3.0
Contributors: Own work Original artist: Michael Hzl
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_current_red.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/98/Ambox_current_red.svg License: CC0
Contributors: self-made, inspired by Gnome globe current event.svg, using Information icon3.svg and Earth clip art.svg Original artist:
Vipersnake151, penubag, Tkgd2007 (clock)
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:
Arduino-uno-perspective-whitw.jpg License: CC BY 2.0 Contributors:

https://upload.wikimedia.org/wikipedia/commons/e/ec/

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-BYSA-3.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 BYSA 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<a href='//www.wikidata.org/wiki/Q4233718' title='wikidata:
Q4233718'><img
alt='wikidata:Q4233718'
src='https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.
svg/20px-Wikidata-logo.svg.png'
width='20'
height='11'
srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/
Wikidata-logo.svg/30px-Wikidata-logo.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/
40px-Wikidata-logo.svg.png 2x' data-le-width='1050' data-le-height='590' /></a>
File:Arduino_Mega2560.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f7/Arduino_Mega2560.jpg License: CC BYSA 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

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

53

File:Atmega8_Development_Board.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/5/57/Atmega8_Development_
Board.jpg License: CC BY-SA 3.0 Contributors: Robot Platoform, http://www.robotplatform.com/ Original artist: Praveen Kumar
File:Atmel_AVR_(logo).png Source: https://upload.wikimedia.org/wikipedia/en/6/60/Atmel_AVR_%28logo%29.png License: Fair use
Contributors:
The logo is from the http://www.atmel.com/dyn/products/datasheets.asp?family_id=607 website. http://www.atmel.com/dyn/resources/
prod_documents/1006S.pdf Original artist: ?
File:Atmel_STK_500_DSC00557_wp.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/d/d2/Atmel_STK_500_
DSC00557_wp.jpg License: FAL Contributors: Own work Original artist: smial (<a href='//commons.wikimedia.org/wiki/User_talk:
Smial' title='User talk:Smial'>talk</a>)
File:AvrDragon.png Source: https://upload.wikimedia.org/wikipedia/commons/1/1c/AvrDragon.png License: GFDL Contributors: Image taken by Jim1138. Original artist: User:Jim1138
File:Boarduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/8d/Boarduino.jpg License: CC BY 2.0 Contributors:
Flickr: topview Original artist: Limor
File:Commons-logo.svg Source: https://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg License: CC-BY-SA-3.0 Contributors: ? Original artist: ?
File:Digispark.agr.jpg Source: https://upload.wikimedia.org/wikipedia/commons/5/58/Digispark.agr.jpg License: CC BY 3.0 Contributors: Own work Original artist: ArnoldReinhold
File:DwengoBoard.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f0/DwengoBoard.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: WimHeirman
File:Edit-clear.svg Source: https://upload.wikimedia.org/wikipedia/en/f/f2/Edit-clear.svg License: Public domain Contributors: The
Tango! Desktop Project. Original artist:
The people from the Tango! project. And according to the meta-data in the le, specically: Andreas Nilsson, and Jakub Steiner (although
minimally).
File:EmonTx_V2.0.png Source: https://upload.wikimedia.org/wikipedia/commons/7/75/EmonTx_V2.0.png License: CC BY-SA 3.0
Contributors: http://openenergymonitor.org/emon/sites/default/files/emonTx_V2.0%20overview.png Original artist: Rahulmothiya
File:Femtoduino_PCB_vs_Dime.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/89/Femtoduino_PCB_vs_Dime.jpg
License: CC BY-SA 3.0 Contributors: Photo taken using smartphone.
Previously published: www.femtoduino.com Original artist: Aalbino
File:Flamingo_Arduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/4/4b/Flamingo_Arduino.jpg License: CC BYSA 2.0 Contributors: Flickr: Flamingo_Arduino Original artist: Alcohol Wang
File:Flexible_Lilypad_Arduino.jpg Source: https://upload.wikimedia.org/wikipedia/commons/9/92/Flexible_Lilypad_Arduino.jpg License: CC BY-SA 2.0 Contributors: http://www.flickr.com/photos/jeanbaptisteparis/2163676671/ Original artist: leah buechley
File:Free_and_open-source_software_logo_(2009).svg Source: https://upload.wikimedia.org/wikipedia/commons/3/31/Free_and_
open-source_software_logo_%282009%29.svg License: Public domain Contributors: FOSS Logo.svg Original artist: Free Software Portal
Logo.svg (FOSS Logo.svg): ViperSnake151
File:Freeduino-nano.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/1a/Freeduino-nano.jpg License: CC BY-SA 3.0
Contributors: Own work Original artist: Sharya77
File:Freeduino-usb-mega-2560.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/fb/Freeduino-usb-mega-2560.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Sharya77
File:Isp_headers.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/9f/Isp_headers.svg License: CC BY 3.0 Contributors:
Own work Original artist: osiixy
File:Jeenode-v6.jpg Source: https://upload.wikimedia.org/wikipedia/commons/7/76/Jeenode-v6.jpg License: CC BY 3.0 Contributors:
Own work Original artist: J.C. Wippler
File:KL_Intel_D8749.jpg Source: https://upload.wikimedia.org/wikipedia/commons/c/c5/KL_Intel_D8749.jpg License: CC-BY-SA3.0 Contributors: CPU collection Konstantin Lanzet Original artist: Konstantin Lanzet
File:Leaflabs_Maple_OSHW_with_STM32F103RBT6_MCU.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a6/
Leaflabs_Maple_OSHW_with_STM32F103RBT6_MCU.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Viswesr
File:Limited-edition_orange_Arduino_Duemilanove.jpg
Source:
https://upload.wikimedia.org/wikipedia/commons/7/76/
Limited-edition_orange_Arduino_Duemilanove.jpg License: CC BY-SA 2.0 Contributors: Flickr: Limited-edition orange Arduino
Duemilanove Original artist: Matt Biddulph
File:MOS_KIM-1_IMG_4211_cropped_scale.jpg Source: https://upload.wikimedia.org/wikipedia/commons/2/26/MOS_KIM-1_
IMG_4211_cropped_scale.jpg License: CC BY-SA 2.0 fr Contributors: This le has been extracted from another le: MOS KIM-1
IMG 4211.jpg
Original artist: MOS_KIM-1_IMG_4211.jpg: Rama & Muse Bolo
File:Mck_glamor_320.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/19/Mck_glamor_320.jpg License: CC BY 3.0
Contributors: MakeThings website Original artist: MakeThings LLC
File:MoteinoR4.jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/18/MoteinoR4.jpg License: CC BY-SA 3.0 Contributors: Own work Original artist: Felixemman
File:Moteino_types_&_options.jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/eb/Moteino_types_%26_options.jpg
License: CC BY-SA 4.0 Contributors: Own work Original artist: Felixemman
File:Myfreescalewebpage_bigbrother.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/1/10/Myfreescalewebpage_
bigbrother.jpg License: CC0 Contributors: Own work Original artist: Jojo69003

54

CHAPTER 9. PROCESSING

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
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:Open_Source_Lab_(book_cover).jpg Source:
https://upload.wikimedia.org/wikipedia/commons/9/9a/Open_Source_Lab_
%28book_cover%29.jpg License: CC BY 3.0 Contributors: https://www.thingiverse.com/thing:182640 Original artist: jpearce
File:Openhardware.org-logo.png Source: https://upload.wikimedia.org/wikipedia/commons/5/57/Openhardware.org-logo.png License:
Public domain Contributors: http://web.archive.org/web/20130802004508/http://www.openhardware.org/images/ControlledUseLogo.png
Original artist: openhardware.org (2013) / Bruce Perens
File:Oshwalogo.png Source: https://upload.wikimedia.org/wikipedia/commons/0/01/Oshwalogo.png License: Public domain Contributors: http://www.oshwa.org/wp-content/uploads/2015/06/oshwalogo1000x288.png Original artist: OSHWA.org
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
BY-SA 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
BY-SA 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

9.11. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES

55

File:TinyDuinoThumbnail.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a7/TinyDuinoThumbnail.jpg License: CC


BY-SA 3.0 Contributors: Own work Original artist: Tinycircuits
File:TinyLilyThumbnail.png Source: https://upload.wikimedia.org/wikipedia/commons/9/93/TinyLilyThumbnail.png License: CC BYSA 3.0 Contributors: Own work Original artist: Tinycircuits
File:Top_view_of_the_Banguino_module.jpg Source:
https://upload.wikimedia.org/wikipedia/commons/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

9.11.3

Content license

Creative Commons Attribution-Share Alike 3.0

You might also like