MicrocontrollerLectureNotes PDF
MicrocontrollerLectureNotes PDF
Microcontroller
STK500
Development
Board
Description of STK500
A row of eight
g p pushbutton switches,, each of which has a
small LED lamp above it. These can be connected to the
microcontrollers using the array of connectors just
above.
above
There is then a large white area, which is where the AVR
chips to be programmed are inserted.
Usually, a STK500 comes with a Atmega 16L chip
mounted in the large socket on the right.
The
Th green area att the
th top
t contains
t i the
th programmingi
electronics, and the connectors for power and
communications.
Atmega 16 bit Microcontroller
ATmega 16
Micro
Controller
ATmega 16
Atmega16 Features
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
Fully Static Operation
Up to 16 MIPS Throughput at 16 MHz
On-chip
O 2-cycle Multiplier
High Endurance Non-volatile Memory segments
16K Bytes of In-System Self-programmable Flash program
memory
512 Bytes EEPROM
1K Byte Internal SRAM
Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
Data
D t retention:
t ti 20 years att 85C/100 years att 25C(1)
Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
p
True Read-While-Write Operation
Programming Lock for Software Security
complementary metaloxidesemiconductor (CMOS)
Memory
ROM=Read Only Memory
Called
C ll d nonvolatile
l til bbecause it d
does nott require
i power tto retain
t i memory
RAM=Random Access memory
Read and write
Volatile=loses
Volatile loses memory when power removed
SRAM=Static RAM: retains data in flip flops
DRAM=Dynamic RAM: data has to be refreshed because capacitors
hold charge (i.e. values)
Many other variations on RAM
Battery backed up RAM
Use a small battery (calculator size) to maintain charge to RAM after
power is removed.
The power required to maintain data in a RAM chip is incredibly small
so that this little battery can easily maintain data for years (maybe 5
under optimal conditions).
Memory
EPROM=erasable programmable ROM
U
Use a special
i lb
box th
thatt shines
hi UV lilight
ht iinto
t window
i d on chip
hi tto erase
contents.
Can take up to 30 minutes. Removing too early results in only partially
erased memory
No
N need d to ever use this,
hi a relic
li off the
h past.
EEPROM=electrically erasable programmable ROM
Uses a special programming pin (usually uses higher voltage) to erase
then write new program.
p g
Development boards often setup so EEPROM does not have to be
removed (like EPROM does)
Flash ROM
Like EEPROM but faster and cheaper
Limited write cycles (but in the several thousands)
How to use Memory
RAM-this is where the p program
g resides
SRAM-this is your scratch pad for intermediate
results or anything that you want to save during
operation
i ((rememberb you llose iit when
h power
goes). Its also the stack (discussed later).
EEPROM
permanent storage of data like constants
somethingg you
y save during gpprogram
g execution yyou
want to be used during the next run.
Registers
Register-a
Register a generic term with many meanings. At
the top level, its a group of bits (like a byte).
I/O registers are set to configure the microcontroller
1 =Output
0=Input
EEPROM
Line 4095
In p
programming
g g world, 4K does not equal
q 4000, it equals
q 4096=2^12. And we
would address 4096 bytes starting from zero and going up to 4095
The Atmega16 is called so because it has 16 kB of Flash RAM,
Addressing
How many bytes can I address with an 8
or 16 bit register?
8 bits=2^8=256 (0-255) =refer to
16 bits=2^16=65,536 (0-65,535)
Line 0 1 byte
SRAM
Remember, everything starts with zero. So 4Kbytes x 8
we have 65,536 elements that range from 0
to 65,535
Line
4095=0xFFF 4095
Program Flow
A special
p register
g called the p
program
g counter
keeps track of the address in the Flash RAM to
be executed.
On each clock cycle,
cycle that address is decoded
and the appropriate values are taken from
memory and passed into the Arithmetic Logic
Unit (ALU) to be processed.
processed
The value to be processed (operands) must
come from a special set of 32 registers called
the
h GGenerall PPurpose R Registers.
i T
To access
SRAM or I/O, they must be brought in/out of the
registers.
g
Atmega 16 Core (The Brain)
Generall Purpose
G P Register
R i t
(The Interface)
Everything going in/out
must touch the registers
Program Memory:
(The Planning Center)
10FF 0007
Stack Pointer
Store Copy here
Timing (the heartbeat)
Microprocessors uses oscillator (a quartz crystal) which
can produce
d a constant
t t square wave to t provide
id the
th
synchronization of everything on the chip. Each rising
edge of the square wave allows an operation to take
place such as loading instructions
instructions, executing
instructions, and saving results.
Different operations take a different amount of cycles
(one period of the square wave)
wave). See Instruction set
summary for cycles.
The oscillator source can be external or internal (on
some chips).
chips)
The Atmega16 can be set to have a clock frequency of
8MHz. With many of the operations taking only 1 cycle,
that is approaching 8 million operations per second! You
could add the numbers from 1 to a million in .125
seconds!
Rising/Falling Edge
Everything
y g in a microcontroller happens
pp on the
rising or falling edge of a signal.
Most components with in the microcontroller
allow
ll you to choose
h which
hi h edge
d b but d
default
f l iis
rising .
The edge is the signal for a component to take in
new information and output the just processed
information.
It also allows for registers, components, etc. to
be synchronized.
Prescale for a Timer
Main Clock (1 MHz)
Well learn more about the specific operation of A/D and D/A later in
the course
Timers
Timers are really just counters
A register that counts (up or down depending on
settings)
The time runs using the main system clock and a
prescaler. A prescaler divides the main system clock.
Each of the four timers in the Atmega128 has its own
prescaler.
So, if the system clock runs at 1 MHz, and I set the
prescaler to 1024, then my clock frequency will be ~1
kHz. In other words, I get 1 count every ~.001
seconds.
Pulse Width Modulation
Pulse Width Modulation
A method by which devices can be sent a voltage that is
equivalent to an analog voltage
If I have a device that I want to give 2.5 volts, I could use and
D/A or I could use a 5 volt PWM signal with a 50% duty cycle.
cycle
The effective voltage seen by the device is equal to the peak
value * the duty cycle (0-1)
Veffective=5 volts*.5=2.5 volts
The key is that the frequency of the PWM wave must be faster
than the device can respond too.
If I have a small motor, and I suddenly step the voltage to 5 volts
and record the time it takes to come to steadyy state speed. And I
find that it takes .1 seconds to reach 63% of the steady state value,
this is called one time constant (1-e-1). Then, following a good rule
of thumb, I should make my PWM frequency at least 10 time faster
than it can react. .1 second=10 hz100 Hz (minimum)
PWM
Atmega 16 Circuit Diagram
Status Register
Must set this to enable interrupts
Bit 7 I: Global Interrupt
p Enable
Bit 6 T: Bit Copy Storage
Bit 5 H: Half Carry Flag
Bit 4 S: Sign Bit, S = N V
Bit 3 V: Twos Complement Overflow Flag
Bit 2 N: Negative Flag
Bit 1 Z: Zero Flag
Bit 0 C: Carry Flag
Interrupts
Interrupts are similar to subroutines except that you dont call
interrupts they happen whenever a particular event happens
interrupts, happens.
Internal interrupts are generated from several sources like
timer/counters. I could set up a counter to interrupt when it reaches
a certain value. When it interrupts, the main program would stop
andd th
the iinterrupt
t t routine
ti would ld be
b executed.
t d After
Aft completion,
l ti th
the
reti command (return from interrupt) would load our return location
into the program counter where it was stored from the stack.
External interruptsp have a similar operation
p except
p that their source
is from pins on the mP. I could set an interrupt to occur when a
certain pin on the chip went high.
You must set the Global Interrupt Enable in the SREG register to
allow interrupts
interrupts. This is easily done with the sei command
command. Further
Further,
you usually will need to clear the GIE when executing an interrupt.
Why? Because you dont want another interrupt to interrupt you
while executing the first interupts code. Clearing GIE is done with
the cli
cli.