EMBEDDED SYSTEM
DESIGN USING
ARDUINO
Santosh Kumar Verma
Department of Computer Science and Information Technology
Jaypee Institute of Information Technology, Noida
Content
1.
2.
3.
4.
5.
6.
7.
8.
Introduction of p and c
Introduction of 8051 c
Introduction of Arduino
Atmega328 : Basics and internal
Architecture
Atmega328 : Instruction Set
Arduino programming interface
Analog/Digital components and its
application with arduino
References
Do you know computer
organization?
Arithmetic
Logic Unit
Input
Control Unit
Memory
Output
- How does it work?
- Map its units in personal computer
Input
Output
Memory
ALU
Software System software & Application
software
Introduction to
Microprocessor
ARITHMATIC LOGIC
UNIT
INPUT
CONTROL UNIT
MICROPROCESS
OR
OUTPU
T
MEMORY
MICROCOMPUT
ER
Microprocessor Based
System
INPUT
OUTPUT
MEMORY
MEMORY
INPUT
C
MEMORY
OUTPUT
External
addition
memory
desired
memory in
to internal
may
be
Address, Data and Control Bus
Bus - defined pathway for transfer of digital information
between different units.
To write data to memory or output device.
- p needs to send
. Address of memory location or port
address of
device.
. Data
. Write control signal
To read data from memory or Input device
- p needs to send
. Address and
. Read Control Signal
- Memory/device sends data.
Thus three pathways (buses) for 3 types of digital
information.
Address Bus - From p to devices
- Unidirectional.
Data Bus - From p to devices & devices to p
- Bidirectional
Control - From p to devices & from devices to p
[Interrupt, DMA]
- Bidirectional
Now let us redraw the computer organization diagram
Address
Bus
Control
Bus
I/O
Device
I/O
Device
Data Bus
I/O
Device
Memory
Microcontroller
A microcontroller is a complete computer system, including
a CPU, memory, a clock oscillator, and I/O on a single
integrated circuit chip. [1]
ANALOG
INPUTS
http://www.freescale.com/files/microcontrollers/doc/ref_manual/M68HC05TB.pdf, p. 25
8051 MICROCONTROLLER
General Facilities
8 bit CPU
On chip clock oscillator
4 KB of ROM (Program memory)
128 bytes RAM (Data Memory)
21 Special Function Registers(SFR)
32 I/O lines (Ports P0 to P3)
64 KB address space for external data memory
64 KB address space for program memory
8051 MICROCONTROLLER
2- 16 bit timer/counter
5 source interrupt structure
Full duplex serial port
Bit addressability
Bit processing capability
MCS-51 compatible chips
8031 Romless version 4KB ROM not available
8751 EPROM version 4KB EPROM
8052- (8 KB ROM + 256 byte Data memory )
8051 MICROCONTROLLER
8051 MICROCONTROLLER
The 8051 was one of the very early
microcontrollers (~1980).
One of the early Arduino-like project was
based on the 8051, in the form of "8052
Basic" board.
Atmel, Mentor Graphics, Intel, Honeywell,
and Maxim (Dallas Semiconductor), and
may more have a variety of 8051 chips.
WHAT IS ARDUINO?
Introduced in 2005 as a project for students at the Interaction Design
Institute Ivrea in Ivrea, Italy, Arduino is a single board
microcontroller.
An Arduino board consists of an Atmel 8-bit AVR microcontroller with
complementary components to facilitate programming and incorporation
into other circuits [2].
Arduino can sense the environment by receiving input from a variety
of sensors and can affect its surroundings by controlling lights, motors,
and other actuators.
The boards can be assembled or purchased preassembled; the opensource IDE can be downloaded for free.
The Arduino programming language is very simple and follows C
like syntax.
Arduino projects can be stand-alone or they can communicate with
software running on a computer (e.g. Processing).
WHY ARDUINO?
Other similar microcontrollers
platforms are: Parallax Basic Stamp,
Netmedia's BX-24, Phidgets, MIT's
Handyboard, and many more.
All these platforms have an easy-touse package.
Why
Arduino?
Arduino also simplifies the process of
working with
microcontrollers, but it offers some
advantage:
ADVANTAGES OF ARDUINO
1. Inexpensive - Arduino boards are relatively
inexpensive compared to other microcontroller
platforms.
2. Cross-platform - The Arduino software runs on
Windows, Macintosh OSX, and Linux operating
systems. Most microcontroller systems are limited
to Windows.
3. Simple, clear programming environment The Arduino programming environment is easyto-use.
4. Open source and extensible software- The
Arduino software is published as open source
tools. The language can be expanded through C+
Features
8051
Modern
Microcontrollers
Execution Time
12 clock cycles/Instr.
1 clock cycle/Instr.
Architecture
Harvard
Harvard
Memory
Internal + External
(may compromise with
security)
Program memoryInternal Data memory
( Int+Ext)
Instruction Set
Architecture (ISA)
CISC
RISC
Port
With limited
functionality
Fully Functional
Timer
Simple
PWM, Complex
features
Intra Communication
Busses
Few
Master/Slave SPI Serial
Interface
Byte-oriented 2-wire
Serial Interface (I2C)
Operating Mode
Sleep
Sleep, Power Down,
Active
ADC
NIL
At least 6-channel 10bit ADC
THE GOOGLE TRENDS FOR ARDUINO RELATIVE TO OTHER
EMBEDDED TERMS
ATMEGA328 INTERNAL
ARCHITECTURE
ATmega328 data sheet pp.
http://www.adafruit.com/index.php?
ATMEGA328 MICROCONTROLLER
Pin
name
Pin
number
Special
functio
n
Note the
limitations!
p. 316
Source:http://www.atmel.com/dyn/products/product_card.asp?PN=ATmega328P
ATMEGA328 FEATURES
High Performance, Low Power AVR 8-Bit
Microcontroller
Advanced RISC Architecture
131 Powerful Instructions Most Single
Clock Cycle Execution
32 x 8 General Purpose Working Registers
Up to 20 MIPS Throughput at 20 MHz
High Endurance Non-volatile Memory Segments
4/8/16/32K Bytes of In-System
Programmable Flash program memory
(ATmega48PA/88PA/168PA/328P)
256/512/512/1K Bytes EEPROM
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328
ATMEGA328 FEATURES
Peripheral Features
Two 8-bit Timer/Counters
One 16-bit Timer/Counter
Real Time Counter with Separate
Oscillator
Six PWM Channels
6-channel 10-bit ADC
Programmable Serial USART
Master/Slave SPI Serial Interface
Special Microcontroller Features
Internal Calibrated Oscillator
External and Internal Interrupt
Sources
Six Sleep Modes: Idle, ADC Noise
Reduction, Power-save, Power-down,
ATMEGA328 FEATURES
I/O and Packages
23 Programmable I/O Lines
Operating Voltage:
1.8 - 5.5V for
ATmega48PA/88PA/168PA/328P
Temperature Range:
-40C to 85C
Speed Grade:
0 - 20 MHz @ 1.8 - 5.5V
Low Power Consumption at 1 MHz, 1.8V, 25C
for ATmega48PA/88PA/168PA/328P:
Active Mode: 0.2 mA
Power-down Mode: 0.1 A
Power-save Mode: 0.75 A
Instruction Set Summary
Instruction Set Summary
Instruction Set Summary
Instruction Set Summary
Absolute Maximums
ATmega328 data sheet p. 316
Microcontroller Ports and
Pins
The communication
channels through which
information flows into or
out of the microcontroller
Ex. PORTB
Pins PB0 PB7
May not be
contiguous
Often bi-directional
See next slides!
Port Pin Data Directionality
Input
When you want to take information from the
external world (sensors) into the MCU
Output
When you want to change the state of
something outside the MCU (turn a motor on
or off, etc.)
Pins default to input direction on power-up
or reset.
Your program can set or change the
directionality of a pin at any time
ATmega328
Block Diagram
Inpu
t
Outp
ut
Setting the Pin Data
Direction
Arduino
pinMode(pin_no., dir)
Ex. Make Arduino pin 3 (PD3) an output
pinMode(3, OUTPUT);
pinMode(PIN_D3, OUTPUT); // with me106.h
Note: one pin at a time
Suppose you wanted Arduino pins 3, 5, and
7 (PD3, PD5, and PD7) to be outputs?
Is there a way to make them all outputs at
the same time?
Pin Used as an Output
Turn on an LED, which is
connected to pin Arduino
pin 0 (PD0)
What should the data
direction be for pin 0
(PD0)?
pinMode(____, ____);
Turn on the LED
digitalWrite(0,HIGH);
Turn off the LED
digitalWrite(0,LOW);
ATmega328
Ardui
no
pin 0
(PD0)
Pin Used as an Output
Recall the question:
Is there a way change the data direction for a
set of pins all at the same time?
All the work of MCU happens through
registers (special memory locations)
Registers on the Atmega328 are 8-bits wide
The data direction register (DDRx) handles
the data directions for pins in PORTx
Source:http://www.atmel.com/dyn/products/product_card.asp?PN=ATmega328P p. 93
Data Direction Register
If the bit is zero -> pin will be an input
Making a bit to be zero == clearing the bit
If the bit is one -> pin will be an output
Making a bit to be one == setting the bit
To change the data direction for a set of
pins belonging to PORTx at the same time:
1. Determine which bits need to be set and
cleared in DDRx
2. Store the binary number or its equivalent (in
an alternate base, such as hex) into DDRx
Example 1
Make Arduino pins 3, 5, and 7 (PD3, PD5,
and PD7) to be outputs
Arduino approach
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
Or if me106.h is used:
pinMode(PIN_D3, OUTPUT);
pinMode(PIN_D5, OUTPUT);
pinMode(PIN_D7, OUTPUT);
DDRD = 0b10101000;
or
DDRD
Alternate
= 0xA8; approach
Example 2
Make pins Arduino pins 0 and 1 (PD0 and
PD1) inputs, and turn on the LEDs connected to
it.
Arduino approach
pinMode(0, INPUT);
pinMode(1, INPUT);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
Or if me106.h is used:
pinMode(PIN_D0, INPUT);
pinMode(PIN_D1, INPUT);
digitalWrite(PIN_D0, HIGH);
digitalWrite(PIN_D1, HIGH);
DDRD = 0; // all PORTD pins
inputs
PORTD = 0b00000011;
or
= 0x03; approach
PORTD
Alternate
OFFICIAL BOARDS
Arduino Duemilanove
http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove
See the handout:
Arduino_ATmega328_pin_mapping_and_schematic
Pin 13
LED
USB
connect
or
Digital pins
header
Reset
button
ATmega328
MCU
Barrel
jack
Analog pins
header
Power-ground
header
http://arduino.cc/en/uploads/Main/ArduinoDuemilano
ve.jpg
Arduino Uno R3
ATmega16u2 replaces FT232RL for USB-serial comms
http://www.adafruit.com/index.php?
main_page=popup_image&pID=50
See: http://learn.adafruit.com/arduino-tips-tricks-andtechniques/arduino-uno-faq
Arduino
Due
Note: 3.3 V !!
Atmel SAM3X8E processor (32 bit ARM Cortex M3 architecture,
84MHz)
http://www.adafruit.com/index.php?
main_page=popup_image&pID=1076
See:
http://arduino.cc/en/Main/ArduinoBoardDue
Arduino Duemilanove/Uno
Features
Microcontroller
ATmega168/328
Operating Voltage
5V
Input Voltage
(recommended)
7-12V
Input Voltage (limits)
6-20V
Digital I/O Pins
14 (of which 6 provide PWM output)
Analog Input Pins
DC Current per I/O Pin
40 mA
DC Current for 3.3V Pin
50 mA
Flash Memory
16 KB (ATmega168) or 32 KB (ATmega328) of
which 2 KB used by bootloader
SRAM
1 KB (ATmega168) or 2 KB (ATmega328)
EEPROM
512 bytes (ATmega168) or 1 KB (ATmega328)
Clock Speed
16 MHz
http://www.arduino.cc/en/Main/ArduinoBoardDuemilanov
e
About Arduino Programming
The Arduino Duemilanove can be programmed
with the Arduino software.
The
Arduino
integrated
development
environment (IDE) is written in Java, and is
derived from the IDE for the Processing
programming language.
It includes a code editor with features such as
syntax highlighting, brace matching, and
automatic indentation, and is also capable of
compiling and uploading programs to the
board with a single click. A program or code
written for Arduino is called a "sketch".[3]
Getting Started w/ Arduino on Windows
1.
2.
3.
4.
5.
6.
7.
8.
9.
Get an Arduino board and USB cable
Download the Arduino environment
Connect the board with PC
Install the drivers
Launch the Arduino application
Open the blink example
Select your board like UNO etc.
Select your serial port
Upload the program
Arduino Programming Interface
Sample Program of LED BLINK
An arduino program ==
sketch
Must have:
setup()
loop()
setup()
configures pin modes and
registers
loop()
runs the main body of the
program forever
like while(1) {}
Where is main() ?
Arduino simplifies things
Does things for you
/* Blink - turns on an LED for DELAY_ON msec,
then off for DELAY_OFF msec, and repeats
BJ Furman rev. 1.1 Last rev: 22JAN2011
*/
#define LED_PIN 13 // LED on digital pin 13
#define DELAY_ON 1000
#define DELAY_OFF 1000
void setup()
{
// initialize the digital pin as an output:
pinMode(LED_PIN, OUTPUT);
}
// loop() method runs forever,
// as long as the Arduino has power
void loop()
{
digitalWrite(LED_PIN, HIGH); // set the LED on
delay(DELAY_ON); // wait for DELAY_ON msec
digitalWrite(LED_PIN, LOW); // set the LED off
delay(DELAY_OFF); // wait for DELAY_OFF msec
}
Structure of an Arduino Program
in C language
main()
{
init();
setup();
while (1)
loop();
}
/* Blink - turns on an LED for DELAY_ON msec,
then off for DELAY_OFF msec, and repeats
BJ Furman rev. 1.1 Last rev: 22JAN2011
*/
#define LED_PIN 13 // LED on digital pin 13
#define DELAY_ON 1000
#define DELAY_OFF 1000
void setup()
{
// initialize the digital pin as an output:
pinMode(LED_PIN, OUTPUT);
}
// loop() method runs forever,
// as long as the Arduino has power
void loop()
{
digitalWrite(LED_PIN, HIGH); // set the LED on
delay(DELAY_ON); // wait for DELAY_ON msec
digitalWrite(LED_PIN, LOW); // set the LED off
delay(DELAY_OFF); // wait for DELAY_OFF msec
}
Various Components
Projects Using Arduino
1. Line follower/Path follower
2. Obstacles Avoider
3. Automatic car parking
4. Driverless car
5. Quad copter
6. Water-level detection in soil
7. Surveillance System
8. Dancing/ Funny Robot
9. Smart phone Garage Door Opener
10.Intrusion alarm
11.Thermostat
12.Balance multirotor motor using arduino & acceleromter
13.Email notifier
14.LED Matrix Control
15.Maze Solver Robot
REFERENCES
1.
http://www.freescale.com/files/microcontrollers/doc/ref_manual/M68HC0
5TB.pdf
, p. 25
2.
Arduino, Avalable at http://www.arduino.cc, 2010.
3.
"Programming Arduino Getting Started with Sketches :
http://www.amazon.com/Programming-Arduino-Getting-StartedSketches/dp/0071784225/ref=sr_1_1?
s=books&ie=UTF8&qid=1364494138&sr=11&keywords=arduino+sketches). McGraw-Hill. Nov 8, 2011. Retrieved
2013-03-28.
4.
C. L. Dym, A. M. Agogino, D. D. Frey, and L. J. Leifer, Engineering
design thinking, teaching, and learning, Journal of Engineering
Education, vol. 94, pp. 103120, 2005. [Online]. Available:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1593
5.
http://www.atmel.com/dyn/products/product_card.asp?PN=ATmega328
6.
J. Provost, Why the arduino won and why its here to stay, Tech.Rep.
7.
http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-unofaq
Thank
You.