8371A–AVR–08/12
Features
zHigh Performance, Low Power Atmel® AVR® 8-bit Microcontroller
zAdvanced RISC Architecture
z123 Powerful Instructions – Most Single Clock Cycle Execution
z32 x 8 General Purpose Working Registers
zFully Static Operation
zUp to 20 MIPS Throughput at 20 MHz
zNon-volatile Program and Data Memories
z8K Bytes of In-System Programmable Flash Program Memory
zEndurance: 10,000 Write/Erase Cycles
z256 Bytes of In-System Programmable EEPROM
zEndurance: 100,000 Write/Erase Cycles
z512 Bytes Internal SRAM
zOptional Boot Code Section with Independ ent Lock Bits
zData Retention: 20 Years at 85oC / 100 Years at 25oC
zPeripheral Features
zOne 8-bit and one 16-bit Timer/Counter with Two PWM Channels, Each
zProgrammable Ultra Low Power Watchdog Timer
zOn-chip Analog Comparator
z10-bit Analog to Digital Converter
z28 External and 4 Internal, Single-ended Input Channels
zFull Duplex USART with Start Frame Dete ction
zMaster/Slave SPI Serial Interface
zSlave I2C Serial Interface
zSpecial Microcontroller Features
zLow Power Idle, ADC Noise Reduction, and Power-down Modes
zEnhanced Power-on Reset Circuit
zProgrammable Brown-out Detection Circuit with Supply Volt age Sampling
zExternal and Internal Inte rrupt Sources
zPin Change Interrupt on 28 Pins
zCalibrated 8MHz Oscillator with Temperature Calibration Option
zCalibrated 32kHz Ultra Low Power Oscillator
zHigh-Current Drive Capability on 8 I/O Pins
zI/O and Packages
z32-lead TQFP, and 32-pad QFN/MLF: 28 Programmable I/O Lines
zSpeed Grade
z0 – 2 MHz @ 1.7 – 1.8V
z0 – 4 MHz @ 1.8 – 5.5V
z0 – 10 MHz @ 2.7 – 5.5V
z0 – 20 MHz @ 4.5 – 5.5V
ATtiny828
8-bit AVR Microcontroller with 8K Bytes In-System
Programmable Flash
DATASHEET
2
ATtiny828 [DATASHEET]
8371A–AVR–08/12
zLow Power Consumption
zActive Mode: 0.2 mA at 1.8V and 1MHz
zIdle Mode: 30 µA at 1.8V and 1MHz
zPower-Down Mode (WDT Enabled): 1 µA at 1.8V
zPower-Down Mode (WDT Disabled): 100 nA at 1.8V
1. Pin Configurations
Figure 1. ATtiny828 Pinout in MLF32 .
Figure 2. ATtiny828 Pinout in TQFP32.
1
2
3
4
5
6
7
8
24
23
22
21
20
19
18
17
32
31
30
29
28
27
26
25
9
10
11
12
13
14
15
16
(
P CINT 18/ADC 18/T OCC2/RXD/INT 1) PC 2
(P CINT 19/ADC 19/T OCC 3/TX D) PC 3
(P CINT 20/ADC 20/T OCC 4) PC 4
VCC
GND
(P CINT 21/ADC 21/T OCC5/IC P 1/T 0) P C5
(PCINT22/ ADC22/ CLKI/TOCC6) PC6
(P CINT 23/ADC 23/T OCC 7/T 1) P C7
P B 5 (PC INT13/ADC 1
3)
P B 4 (PC INT12/ADC 1
2)
P B 3 (PC INT11/ADC 1
1)
GND
P B 2 (PC INT10/ADC 1
0)
P B 1 (PC INT9/ADC 9)
AVCC
P B 0 (PC INT8/ADC 8)
(PCINT0/ ADC0) P A0
(
PCINT1/ADC1/AIN0) PA1
(
PCINT2/ADC2/AIN1) PA2
(PCINT3/ ADC3) P A3
(PCINT4/ ADC4) P A4
(PCINT5/ ADC5) P A5
(PCINT6/ ADC6) P A6
(PCINT7/ ADC7) P A7
P C1 (P C IN T 17/ADC 17/T OCC 1/INT 0/C LK
O)
P C0 (P C IN T 16/ADC16/T O CC 0/S S/X CK)
P D3 (PC INT 27/ADC 27/SC L /SC K )
P D2 (PC INT 26/ADC 26/RES ET /DW)
P D1 (PC INT 25/ADC 25/MIS O )
P D0 (PC INT 24/ADC 24/SDA/MOSI)
P B 7 (PC INT15/ADC 15)
P B 6 (PC INT14/ADC 14)
N O TE: Bottom pad s hould be
soldered to ground
1
2
3
4
5
6
7
8
24
23
22
21
20
19
18
17
32
31
30
29
28
27
26
25
9
10
11
12
13
14
15
16
P C1 (P C IN T 17/ADC 17/T OCC 1/INT 0/C LKO)
P C0 (P C IN T 16/ADC16/T O CC 0/S S/X CK)
P D3 (PC INT 27/ADC 27/SC L /SC K )
P D2 (PC INT 26/ADC 26/RES ET /DW)
P D1 (PC INT 25/ADC 25/MIS O )
P D0 (PC INT 24/ADC 24/SDA/MOSI)
P B 7 (PC INT15/ADC 15)
P B 6 (PC INT14/ADC 14)
P B 5 (PC INT13/ADC 13)
P B 4 (PC INT12/ADC 12)
P B 3 (PC INT11/ADC 11)
GND
P B 2 (PC INT10/ADC 10)
P B 1 (PC INT9/ADC 9)
AVCC
P B 0 (PC INT8/ADC 8)
(PCINT0/ ADC0) P A0
(PCINT1/ ADC1/ AIN0) P A1
(PCINT2/ ADC2/ AIN1) P A2
(PCINT3/ ADC3) P A3
(PCINT4/ ADC4) P A4
(PCINT5/ ADC5) P A5
(PCINT6/ ADC6) P A6
(PCINT7/ ADC7) P A7
(P CINT 18/ADC 18/T OCC2/RXD/INT 1) P C2
(P CINT 19/ADC 19/T OCC 3/TX D) PC 3
(P CINT 20/ADC 20/T OCC 4) PC 4
VCC
GND
(P CINT 21/ADC 21/T OCC5/IC P 1/T 0) P C5
(PCINT22/ ADC22/ CLKI/TOCC6) PC6
(P CINT 23/ADC 23/T OCC 7/T 1) P C7
3
ATtiny828 [DATASHEET]
8371A–AVR–08/12
1.1 Pin Description
1.1.1 VCC
Supply voltage.
1.1.2 AVCC
AVCC is the supply voltage pin for the A/D converter and a selection of I/O pins. This pin should be externally connected
to VCC even if the ADC is not used. If the ADC is used, it is recommended this pin is connected to VCC through a low-pass
filter, as described in “Noise Canceling Techniques” on page 145.
All pins of Port A and Port B are powered by AVCC. All other I/O pins take their supply voltage from VCC.
1.1.3 GND
Ground.
1.1.4 RESET
Reset input. A low level on this pin for longer than the minimum pulse length will generate a reset, even if the clock is not
running and provided the reset pin has not been disabled. The minimum pulse length is given in Table 107 on page 250.
Shorter pulses are not guaranteed to generate a reset.
The reset pin can also be used as a (weak) I/O pin.
1.1.5 Port A (PA7:PA0)
This is an 8-bit, bi-directional I/O port with internal pull-up resistors (selected for each bit). Output buffers have high sink
and standard source capability. See Table 107 on page 250 for port drive strength.
As inputs, port pins that are externally pulled low will source current provided that pull-up resistors are activated. Port
pins are tri-stated when a reset condition becomes active, even if the clock is not running.
This port has alternative pin functions for pin change interrupts, the analog comparator, and ADC. See “Alternative Port
Functions” on page 63.
1.1.6 Port B (PB7:PB0)
This is an 8-bit, bi-directional I/O port with internal pull-up resistors (selected for each bit). Output buffers have high sink
and standard source capability. See Table 103 on page 247 for port drive strength.
As inputs, port pins that are externally pulled low will source current provided that pull-up resistors are activated. Port
pins are tri-stated when a reset condition becomes active, even if the clock is not running.
This port has alternative pin functions for pin change interrupts, and ADC. See “Alternative Port Functions” on page 63.
1.1.7 Port C (PC7:PC0)
This is an 8-bit, bi-directional I/O port with internal pull-up resistors (selected for each bit). Output buffers have high sink
and standard source capability. Optionally, extra high sink capability can be enabled. See Table 103 on page 247 for port
drive strength.
As inputs, port pins that are externally pulled low will source current provided that pull-up resistors are activated. Port
pins are tri-stated when a reset condition becomes active, even if the clock is not running.
This port has alternative pin functions for pin change interrupts, ADC, timer/counter, external interrupts, and serial
interfaces. See “Alternative Port Functions” on page 63.
1.1.8 Port D (PD3:PD0)
This is a 4-bit, bi-directional I/O port with internal pull-up resistors (selected for each bit). Output buffers of PD0 and PD3
have symmetrical drive characteristics, with both sink and source capability. Output buffer PD1 has high sink and
4
ATtiny828 [DATASHEET]
8371A–AVR–08/12
standard source capability, while PD2 only has weak drive characteristics due to its use as a reset pin. See Table 103 on
page 247 for port drive strength.
As inputs, port pins that are externally pulled low will source current provided that pull-up resistors are activated. Port
pins are tri-stated when a reset condition becomes active, even if the clock is not running.
This port has alternative pin functions for pin change interrupts, ADC, serial interfaces, and debugWire. See “Alternative
Port Functions” on page 63.
5
ATtiny828 [DATASHEET]
8371A–AVR–08/12
2. Overview
ATtiny828 is a low-power CMOS 8-bit microcontrollers based on the AVR enhanced RISC architecture. By executing
powerful instructions in a single clock cycle, the ATtiny828 achieves throughputs approaching 1 MIPS per MHz allowing
the system designer to optimize power consumption versus processing speed.
Figure 3. Block Diagram
The AVR core combines a rich instruction set with 32 general purpose working registers. All 32 registers are directly
connected to the Arithmetic Logic Unit (ALU), allowing two independent registers to be accessed in a single instruction,
executed in one clock cycle. The resulting architecture is compact and code efficient while achieving throughputs up to
ten times faster than conventional CISC microcontrollers.
DEBUG
INTERFACE
CALIBRATED ULP
OSCILLATOR
WATCHDOG
TIMER
CALIBRATED
OSCILLATOR
TIMING AND
CONTROL
VCC RESET GND
8-BIT DATA BUS
PD[3:0]
CPU CORE
PROGRAM
MEMORY
(FLASH)
DATA
MEMORY
(SRAM)
POWER
SUPERVISION:
POR
BOD
RESET
ISP
INTERFACE
PORT A PORT B PORT C PORT D
VOLTAGE
REFERENCE
MULTIPLEXER
ANALOG
COMPARATOR
ADC
TEMPERATURE
SENSOR
8-BIT
TIMER/COUNTER
16-BIT
TIMER/COUNTER
TWO-WIRE
INTERFACE USART
EEPROM
ON-CHIP
DEBUGGER
PC[7:0]PB[7:0]
PA[7:0]
6
ATtiny828 [DATASHEET]
8371A–AVR–08/12
ATtiny828 provides the following features:
z8K bytes of in-system programmable Flash
z512 bytes of SRAM data memory
z256 bytes of EEPROM data memory
z28 general purpose I/O lines
z32 general purpose working registers
zAn 8-bit timer/counter with two PWM channels
zA16-bit timer/counter with two PWM channels
zInternal and external interrupts
zA 10-bit ADC with 4 internal and 28 external chanels
zAn ultra-low power, programmable watchdog timer with internal oscillator
zA programmable USART with start frame detection
zA slave, I2C compliant Two-Wire Interface (TWI)
zA master/slave Serial Peripheral Interface (SPI)
zA calibrated 8MHz oscillator
zA calibrated 32kHz, ultra low power oscillator
zThree software selectable power saving modes.
The device includes the following modes for saving power:
zIdle mode: stops the CPU while allowing the timer/counter, ADC, analog comparator, SPI, TWI, and interrupt
system to continue functioning
zADC Noise Reduction mode: minimizes switching noise during ADC conversions by stopping the CPU and all I/O
modules except the ADC
zPower-down mode: registers keep their contents and all chip functions are disabled until the next interrupt or
hardware reset
The device is manufactured using Atmel’s high density non-volatile memory technology. The Flash program memory can
be re-programmed in-system through a serial interface, by a conventional non-volatile memory programmer or by an on-
chip boot code, running on the AVR core. The boot program can use any interface to download the application program
to the Flash memory. Software in the boot section of the Flash executes while the application section of the Flash is
updated, providing true read-while-write operation.
The ATtiny828 AVR is supported by a full suite of pro gram and system development tools including: C compilers, macro
assemblers, program debugger/simulators and evaluation kits.
7
ATtiny828 [DATASHEET]
8371A–AVR–08/12
3. General Information
3.1 Resources
A comprehensive set of drivers, application notes, data sheets and descriptions on development tools are available for
download at http://www.atmel.com/avr.
3.2 Code Examples
This documentation contains simple code examples that briefly show how to use various parts of the device. These code
examples assume that the part specific header file is included before compilation. Be aware that not all C compiler
vendors include bit definitions in the header files and interrupt handling in C is compiler dependent. Please confirm with
the C compiler documentation for more details.
3.3 Data Retention
Reliability Qualification results show that the projected data retention failure rate is much less than 1 PPM over 20 years
at 85°C or 100 years at 25°C.
8
ATtiny828 [DATASHEET]
8371A–AVR–08/12
4. CPU Core
This section discusses the AVR core architecture in general. The main function of the CPU core is to ensure correct
program execution. The CPU must therefore be able to access memories, perform calculations, control peripherals, and
handle interrupts.
4.1 Architectural Overview
Figure 4. Block Diagram of the AVR Architecture
In order to maximize performance and parallelism, the AVR uses a Harvard architecture – with separate memories and
buses for program and data. Instructions in the Program memory are executed with a single level pipelining. While one
instruction is being executed, the next instruction is pre-fetched from the Program memory. This concept enables
instructions to be executed in every clock cycle. The Program memory is In-System Reprogrammable Flash memory.
The fast-access Register File contains 32 x 8-bit general purpose working registers with a single clock cycle access time.
This allows single-cycle Arithmetic Logic Unit (ALU) operation. In a typical ALU operation, two operands are output from
the Register File, the operation is executed, and the result is stored back in the Register File – in one clock cycle.
Six of the 32 registers can be used as three 16-bit indirect address register pointers for Data Space addressing –
enabling efficient address calculations. One of the these address pointers can also be used as an address pointer for
look up tables in Flash Program memory. These added function registers are the 16-bit X-, Y-, and Z-register, described
later in this section.
The ALU supports arithmetic and logic operations between registers or between a constant and a register. Single register
operations can also be executed in the ALU. After an arithmetic operation, the Status Register is updated to reflect
information about the result of the operation.
INTERRUPT
UNIT
STATUS AND
CONTROL
PROGRAM
MEMORY
(FLASH)
DATA
MEMORY
(SRAM)
PROGRAM
COUNTER
INSTRUCTION
REGISTER
INSTRUCTION
DECODER
CONTROL
LINES
GENERAL
PURPOSE
REGISTERS
X
Y
Z
ALU
DIRECT ADDRESSING
INDIRECT ADDRESSING
8-BIT DATA BUS
9
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Program flow is provided by conditional and unconditional jump and call instructions, capable of directly addressing the
whole address space. Most AVR instructions have a single 16-bit word format but 32-bit wide instructions also exist. The
actual instruction set varies, as some devices only implement a part of the instruction set.
Program Flash memory is divided in two sections; the boot program section and the application program section. Both
sections have dedicated lock bits for write and read/write protection. The SPM instruction, which is used to write the
application memory section, must reside in the boot program section.
During interrupts and subroutine calls, the return address Program Counter (PC) is stored on the Stack. The Stack is
effectively allocated in the general data SRAM, and consequently the Stack size is only limited by the total SRAM size
and the usage of the SRAM. All user programs must initialize the SP in the Reset routine (before subroutines or
interrupts are executed). The Stack Pointer (SP) is read/write accessible in the I/O space. The data SRAM can easily be
accessed through the five different addressing modes supported in the AVR architecture.
The memory spaces in the AVR architecture are all linear and regular memory maps.
A flexible interrupt module has its control registers in the I/O space with an additional Global Interrupt Enable bit in the
Status Register. All interrupts have a separate Interrupt Vector in the Interrupt Vector table. The interrupts have priority in
accordance with their Interrupt Vector position. The lower the Interrupt Vector address, the higher the priority.
The I/O memory space contains 64 addresses for CPU peripheral functions as Control Registers, SPI, and other I/O
functions. The I/O memory can be accessed directly, or as the Data Space locations following those of the Register File,
0x20 - 0x5F. In addition, the ATtiny828 has Extended I/O Space from 0x60 - 0xFF in SRAM where only the ST/STS/STD
and LD/LDS/LDD instructions can be used.
4.2 ALU – Arithmetic Logic Unit
The high-performance AVR ALU operates in direct connection with all the 32 general purpose working registers. Within a
single clock cycle, arithmetic operations between general purpose registers or between a register and an immediate are
executed. The ALU operations are divided into three main categories – arithmetic, logical, and bit-functions. Some
implementations of the architecture also provide a powerful multiplier supporting both signed/unsigned multiplication and
fractional format. See external document “AVR Instruction Set” and “Instruction Set Summary” on page 301 section for
more information.
4.3 Status Register
The Status Register contains information about the result of the most recently executed arithmetic instruction. This
information can be used for altering program flow in order to perform conditional operations. Note that the Status
Register is updated after all ALU operations. This will in many cases remove the need for using the dedicated compare
instructions, resulting in faster and more compact code. See external document “AVR Instruction Set” and “Instruction
Set Summary” on page 301 section for more information.
The Status Register is neither automatically stored when entering an interrupt routine, nor restored when returning from
an interrupt. This must be handled by software.
4.4 General Purpose Register File
The Register File is optimized for the AVR Enhanced RISC instruction set. In order to achieve the required performance
and flexibility, the following input/output schemes are supported by the Register File:
zOne 8-bit output operand and one 8-bit result input
zTwo 8-bit output operands and one 8-bit result input
zTwo 8-bit output operands and one 16-bit result input
zOne 16-bit output operand and one 16-bit result input
Figure 5 below shows the structure of the 32 general purpose working registers in the CPU.
10
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Figure 5. General Purpose Working Registers
Most of the instructions operating on the Register File are single cycle instructions with direct access to all registers.
As shown in Figure 5, each register is also assigned a Data memory address, mapping them directly into the first 32
locations of the user Data Space. Although not being physically implemented as SRAM locations, this memory
organization provides great flexibility in access of the registers, as the X-, Y- and Z-pointer registers can be set to index
any register in the file.
4.4.1 The X-register, Y-register, and Z-register
The registers R26..R31 have added functions to their general purpose usage. These registers are 16-bit address
pointers for indirect addressing of the data space. The three indirect address registers X, Y, and Z are defined as
described in Figure 6 below.
Figure 6. The X-, Y-, and Z-registers
70Addr. Special Function
R0 0x00
R1 0x01
R2 0x02
R3 0x03
…...
R12 0x0C
R13 0x0D
R14 0x0E
R15 0x0F
R16 0x10
R17 0x11
…...
R26 0x1A X-register Low Byte
R27 0x1B X-register High Byte
R28 0x1C Y-register Low Byte
R29 0x1D Y-register High Byte
R30 0x1E Z-register Low Byte
R31 0x1F Z-register High Byte
15 0
X-register 7XH 07 XL 0
R27 R26
15 0
Y-register 7YH 07 YL 0
R29 R28
15 0
Z-register 7ZH 07 ZL 0
R31 R30
11
ATtiny828 [DATASHEET]
8371A–AVR–08/12
In the different addressing modes these address registers have functions as fixed displacement, automatic increment,
and automatic decrement (see the instruction set reference for details).
4.5 Stack Pointer
The stack is mainly used for storing temporary data, local variables and return addresses after interrupts and subroutine
calls. The Stack Pointer registers (SPH and SPL) always point to the top of the stack. Note that the stack grows from
higher memory locations to lower memory locations. This means that the PUSH instructions decreases and the POP
instruction increases the stack pointer value.
The stack pointer points to the area of data memory where subroutine and interrupt stacks are located. This stack space
must be defined by the program before any subroutine calls are executed or interrupts are enabled.
The pointer is decremented by one when data is put on the stack with the PUSH instruction, and incremented by one
when data is fetched with the POP instruction. It is decremented by two when the return address is put on the stack by a
subroutine call or a jump to an interrupt service routine, and incremented by two when data is fetched by a return from
subroutine (the RET instruction) or a return from interrupt service routine (the RETI instruction).
The AVR stack pointer is typically implemented as two 8-bit registers in the I/O register file. The width of the stack pointer
and the number of bits implemented is device dependent. In some AVR devices all data memory can be addressed using
SPL, only. In this case, the SPH register is not implemented.
The stack pointer must be set to point above the I/O register areas, the minimum value being the lowest address of
SRAM. See Table 3 on page 17.
4.6 Instruction Execution Timing
This section describes the general access timing concepts for instruction execution. The AVR CPU is driven by the CPU
clock clkCPU, directly generated from the selected clock source for the chip. No internal clock division is used.
Figure 7 shows the parallel instruction fetches and instruction executions enabled by the Harvard architecture and the
fast access Register File concept. This is the basic pipelining concept to obtain up to 1 MIPS per MHz with the
corresponding unique results for functions per cost, functions per clocks, and functions per power-unit.
Figure 7. The Parallel Instruction Fetches and Instruction Executions
Figure 8 shows the internal timing concept for the Register File. In a single clock cycle an ALU operation using two
register operands is executed, and the result is stored back to the destination register.
clk
1st Instruction Fetch
1st Instruction Execute
2nd Instruction Fetch
2nd Instruction Execute
3rd Instruction Fetch
3rd Instruction Execute
4th Instruction Fetch
T1 T2 T3 T4
CPU
12
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Figure 8. Single Cycle ALU Operation
4.7 Reset and Interrupt Handling
The AVR provides several different interrupt sources. These interrupts and the separate Reset Vector each have a
separate Program Vector in the Program memory space. All interrupts are assigned individual enable bits which must be
written logic one together with the Global Interrupt Enable bit in the Status Register in order to enable the interrupt.
Depending on the value of the program counter, interrupts may be automatically disabled when Boot Lock Bits (BLB02 or
BLB12) are programmed. This feature improves software security. See section “Lock Bits” on page 225 for details.
The lowest addresses in the Program memory space are by default defined as the Reset and Interrupt Vectors. The
complete list of vectors is shown in “Interrupts” on page 48. The list also determines the priority levels of the different
interrupts. The lower the address the higher is the priority level. RESET has the highest priority, and next is INT0 – the
External Interrupt Request 0.
The interrupt vector table can be moved to the start of Flash boot section by setting the IVSEL bit. For more information,
see “MCUCR – MCU Control Register” on page 53 and “Interrupts” on page 48. The reset vector can also be moved to
the start of Flash boot section by programming the BOOTRST fuse. See “Entering the Boot Loader Program” on page
216.
When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled. The user software
can write logic one to the I-bit to enable nested interrupts. All enabled interrupts can then interrupt the current interrupt
routine. The I-bit is automatically set when a Return from Interrupt instruction – RETI – is executed.
There are basically two types of interrupts. The first type is triggered by an event that sets the Interrupt Flag. For these
interrupts, the Program Counter is vectored to the actual Interrupt Vector in order to execute the interrupt handling
routine, and hardware clears the corresponding Interrupt Flag. Interrupt Flags can also be cleared by writing a logic one
to the flag bit position(s) to be cleared. If an interrupt condition occurs while the corresponding interrupt enable bit is
cleared, the Interrupt Flag will be set and remembered until the interrupt is enabled, or the flag is cleared by software.
Similarly, if one or more interrupt conditions occur while the Global Interrupt Enable bit is cleared, the corresponding
Interrupt Flag(s) will be set and remembered until the Global Interrupt Enable bit is set, and will then be executed by
order of priority.
The second type of interrupts will trigger as long as the interrupt condition is present. These interrupts do not necessarily
have Interrupt Flags. If the interrupt condition disappears before the interrupt is enabled, the interrupt will not be
triggered.
When the AVR exits from an interrupt, it will always return to the main program and execute one more instruction before
any pending interrupt is served.
Note that the Status Register is not automatically stored when entering an interrupt routine, nor restored when returning
from an interrupt routine. This must be handled by software.
Total Execution Time
Register Operands Fetch
ALU Operation Execute
Result Write Back
T1 T2 T3 T4
clkCPU
13
ATtiny828 [DATASHEET]
8371A–AVR–08/12
When using the CLI instruction to disable interrupts, the interrupts will be immediately disabled. No interrupt will be
executed after the CLI instruction, even if it occurs simultaneously with the CLI instruction. The following example shows
how this can be used to avoid interrupts during the timed EEPROM write sequence.
Note: See “Code Examples” on page 7.
When using the SEI instruction to enable interrupts, the instruction following SEI will be executed before any pending
interrupts, as shown in the following example.
Note: See “Code Examples” on page 7.
4.7.1 Interrupt Response Time
The interrupt execution response for all the enabled AVR interrupts is four clock cycles minimum. After four clock cycles
the Program Vector address for the actual interrupt handling routine is executed. During this four clock cycle period, the
Program Counter is pushed onto the Stack. The vector is normally a jump to the interrupt routine, and this jump takes
three clock cycles. If an interrupt occurs during execution of a multi-cycle instruction, this instruction is completed before
the interrupt is served. If an interrupt occurs when the MCU is in sleep mode, the interrupt execution response time is
increased by four clock cycles. This increase comes in addition to the start-up time from the selected sleep mode.
Assembly Code Example
in r16, SREG ; store SREG value
cli ; disable interrupts during timed sequence
sbi EECR, EEMPE ; start EEPROM write
sbi EECR, EEPE
out SREG, r16 ; restore SREG value (I-bit)
C Code Example
char cSREG;
cSREG = SREG; /* store SREG value */
_CLI(); /* disable interrupts during timed sequence */
EECR |= (1<<EEMPE); /* start EEPROM write */
EECR |= (1<<EEPE);
SREG = cSREG; /* restore SREG value (I-bit) */
Assembly Code Example
sei ; set Global Interrupt Enable
sleep ; enter sleep, waiting for interrupt
; note: will enter sleep before any pending interrupt(s)
C Code Example
_SEI(); /* set Global Interrupt Enable */
_SLEEP(); /* enter sleep, waiting for interrupt */
/* note: will enter sleep before any pending interrupt */
14
ATtiny828 [DATASHEET]
8371A–AVR–08/12
A return from an interrupt handling routine takes four clock cycles. During these four clock cycles, the Program Counter
(two bytes) is popped back from the Stack, the Stack Pointer is incremented by two, and the I-bit in SREG is set.
4.8 Register Description
4.8.1 CCP – Configuration Change Protection Register
zBits 7:0 – CCP[7:0]: Configuration Change Protection
In order to change the contents of a protected I/O register the CCP register must first be written with the correct
signature. After CCP is written the protected I/O registers may be written to during the next four CPU instruction cycles.
All interrupts are ignored during these cycles. After these cycles interrupts are automatically handled again by the CPU,
and any pending interrupts will be executed according to their priority.
When the protected I/O register signature is written, CCP0 will read as one as long as the protected feature is enabled,
while CCP[7:1] will always read as zero.
Table 1 shows the signatures that are recognised.
Table 1. Signatures Recognised by the Configuration Change Protection Register
Notes: 1. Only WDE and WDP[3:0] bits are protected in WDTCSR.
4.8.2 SPH and SPL — Stack Pointer Registers
zBits 9:0 – SP[9:0]: Stack Pointer
The Stack Pointer register points to the top of the stack, which is implemented growing from higher memory locations to
lower memory locations. Hence, a stack PUSH command decreases the Stack Pointer.
The stack space in the data SRAM must be defined by the program before any subroutine calls are executed or
interrupts are enabled.
Bit 76543210
0x36 (0x56) CCP[7:0] CCP
Read/WriteWWWWWWWR/W
Initial Value00000000
Signature Registers Description
0xD8 CLKPR, MCUCR, WDTCSR(1) Protected I/O register
Initial Value 000000RAMENDRAMEND
Read/Write RRRRRRR/WR/W
Bit 151413121110 9 8
0x3E (0x5E) ––––––SP9
SP8 SPH
0x3D (0x5D) SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
Bit 76543210
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
15
ATtiny828 [DATASHEET]
8371A–AVR–08/12
4.8.3 SREG – Status Register
zBit 7 – I: Global Interrupt Enable
The Global Interrupt Enable bit must be set for the interrupts to be enabled. The individual interrupt enable control is then
performed in separate control registers. If the Global Interrupt Enable Register is cleared, none of the interrupts are
enabled independent of the individual interrupt enable settings. The I-bit is cleared by hardware after an interrupt has
occurred, and is set by the RETI instruction to enable subsequent interru pts. The I-bit can also be set and cleared by the
application with the SEI and CLI instructions, as described in the instruction set reference.
zBit 6 – T: Bit Copy Storage
The Bit Copy instructions BLD (Bit LoaD) and BST (Bit STore) use the T-bit as source or destination for the operated bit.
A bit from a register in the Register File can be copied into T by the BST instruction, and a bit in T can be copied into a bit
in a register in the Register File by the BLD instruction.
zBit 5 – H: Half Carry Flag
The Half Carry Flag H indicates a Half Carry in some arithmetic operations. Half Carry is useful in BCD arithmetic. See
the “Instruction Set Description” for detailed information.
zBit 4 – S: Sign Bit, S = N V
The S-bit is always an exclusive or between the Negative Flag N and the Two’s Complement Overflow Flag V. See the
“Instruction Set Description” for detailed information.
zBit 3 – V: Two’s Complement Overflow Flag
The Two’s Complement Overflow Fla g V supports two’s complement arithmetics. See the “Instruction Set Description” for
detailed information.
zBit 2 – N: Negative Flag
The Negative Flag N indicates a negative result in an arithmetic or logic operation. See the “Instruction Set Description”
for detailed information.
zBit 1 – Z: Zero Flag
The Zero Flag Z indicates a zero result in an arithmetic or logic operation. See the “Instruction Set Description” for
detailed information.
zBit 0 – C: Carry Flag
The Carry Flag C indicates a carry in an arithmetic or logic operation. See the “Instruction Set Description” for detailed
information.
Bit 76543210
0x3F (0x5F) I T H S V N Z C SREG
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value00000000
16
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5. Memories
The AVR architecture makes a distinction between program memory and data memory, locating each memory type in a
separate address space. Executable code is located in non-volatile program memory (Flash), whereas data can be
placed in either volatile (SRAM) or non-volatile memory (EEPROM). See Figure 9, below.
Figure 9. Memory Overview.
All memory spaces are linear and regular.
5.1 Program Memory (Flash)
ATtiny828 contains 8K byte of on-chip, in-system reprogrammable Flash memory for program storage. Flash memories
are non-volatile, i.e. they retain stored information even when not powered.
Since all AVR instructions are 16 or 32 bits wide, the Fla sh is organized as 4096 x 16 bits. The Program Counter (PC) is
12 bits wide, thus capable of addressing all 4096 locations of program memory, as illustrated in Table 1, below.
Table 2. Size of Program Memory (Flash)
For reasons of software security, the Flash program memory has been divided into two sections; the boot loader section
and the application program section. For more information, see “Self-Programming the Flash” on page 218, and
“Application and Boot Loader Flash Sections” on page 214.
Constant tables can be allocated within the entire address space of program memory. See instructions LPM (Load
Program Memory), and SPM (Store Program Memory) in “Instruction Set Summary” on page 301. Flash program
memory can also be programmed from an external device, as described in “External Programming” on page 232.
Timing diagrams for instruction fetch and execution are presented in “Instruction Execution Timing” on page 11.
The Flash memory has a minimum endurance of 10,000 write/erase cycles.
GENERAL PURPOSE
REGISTER FILE
I/O REGISTER FILE
EXTENDED
I/O REGISTER FILE
DATA MEMORY
DATA MEMORY
PROGRAM MEMORY
FLASH SRAM EEPROM
Device Flash Size Address Range
ATtiny828 8KB 4096 words 0x0000 – 0x0FFF
17
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.2 Data Memory (SRAM) and Register Files
Table 3 shows how the data memory and register files of ATtiny828 are organized. These memory areas are volatile, i.e.
they do not retain information when power is removed.
Table 3. Layout of Data Memory and Register Area
Note: 1. Also known as data address. This mode of addressing covers the entire data memory and register area. The
address is contained in a 16-bit area of two-word instructions.
2. Also known as direct I/O address. This mode of addressing covers part of the register area, only. It is used
by instructions where the address is embedded in the instruction word.
The 768 memory locations include the general purpose register file, I/O register file, extended I/O register file, and the
internal data memory.
For compatibility with future devices, reserved bits should be written to zero, if accessed. Reserved I/O memory
addresses should never be written.
5.2.1 General Purpose Register File
The first 32 locations are reserved for the general purpose register file. These registers are describe d in detail in “General
Purpose Register File” on page 9.
5.2.2 I/O Register File
Following the general purpose register file, the next 64 locations are reserved for I/O registers. Registers in this area are
used mainly for communicating with I/O and peripheral units of the device. Data can be transferred between I/O space
and the general purpose register file using instructions such as IN, OUT, LD, ST, and derivatives.
All I/O registers in this area can be accessed with the instructions IN and OUT. These I/O specific instructions address
the first location in the I/O register area as 0x00 and the last as 0x3F.
The low 32 registers (address range 0x00...0x1F) are accessible by some bit-specific instructions. In these registers, bits
are easily set and cleared using SBI and CBI, while bit-conditional branches are readily constructed using instructions
SBIC, SBIS, SBRC, and SBRS.
Registers in this area may also be accessed with instructions LD/LDD/LDI/LDS and ST/STD/STS. These instructions
treat the entire volatile memory as one data space and, therefore, address I/O registers starting at 0x20.
See “Instruction Set Summary” on page 301.
ATtiny828 also contains three general purpose I/O registers that can be used for storing any information. See GPIOR0,
GPIOR1 and GPIOR2 in “Register Summary” on page 297. These general purpose I/O registers are particularly useful
for storing global variables and status flags, since they are accessible to bit-specific instructions such as SBI, CBI, SBIC,
SBIS, SBRC, and SBRS.
Device Memory Area Size Long Address (1) Short Address (2)
ATtiny828
General purpose register file 32B 0x0000 – 0x001F n/a
I/O register file 64B 0x0020 – 0x005F 0x00 – 0x3F
Extended I/O register file 160B 0x0060 – 0x00FF n/a
Data SRAM 512B 0x0100 – 0x02FF n/a
18
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.2.3 Extended I/O Register File
Following the standard I/O register file, the next 160 locations are reserved for extended I/O registers. ATtiny828 is a
complex microcontroller with more peripheral units than can be addressed with the IN and OUT instructions. Registers in
the extended I/O area must be accessed using instructions LD/LDD/LDI/LDS and ST/STD/STS. See “Instruction Set
Summary” on page 301.
See “Register Summary” on page 297 for a list of I/O registers.
5.2.4 Data Memory (SRAM)
Following the general purpose register file and the I/O register files, the remaining 512 locations are reserved for the
internal data SRAM.
There are five addressing modes available:
zDirect. This mode of addressing reaches the entire data space.
zIndirect.
zIndirect with Displacement. This mode of addressing reaches 63 address locations from the base address given by
the Y- or Z-register.
zIndirect with Pre-decrement. In this mode the address register is automatically decremented before access.
Address pointer registers (X, Y, and Z) are located in the general purpose register file, in registers R26 to R31. See
“General Purpose Register File” on page 9.
zIndirect with Post-increment. In this mode the address register is automatically incremented after access. Address
pointer registers (X, Y, and Z) are located in the general purpose register file, in registers R26 to R31. See
“General Purpose Register File” on page 9.
All addressing modes can be used on the entire volatile memory, including the general purpose register file, the I/O
register files and the data memory.
Internal SRAM is accessed in two clkCPU cycles, as illustrated in Figure 10, below.
Figure 10. On-chip Data SRAM Access Cycles
clk
WR
RD
Data
Data
Address Address valid
T1 T2 T3
Compute Address
Read Write
CPU
Memory Access Instruction Next Instruction
19
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.3 Data Memory (EEPROM)
ATtiny828 contains 256 bytes of non-volatile data memory. This EEPROM is organized as a separate data space, in
which single bytes can be read and written. All access registers are located in the I/O space.
The EEPROM memory layout is summarised in Table 4, below.
Table 4. Size of Non-Volatile Data Memory (EEPROM)
The internal 8MHz oscillator is used to time EEPROM operations. The frequency of the oscillator must be within the
requirements described in “OSCCAL0 – Oscillator Calibration Register” on page 32.
When powered by heavily filtered supplies, the supply voltage, VCC, is likely to rise or fall slowly on power-up and power-
down. Slow rise and fall times may put the device in a state where it is running at supply voltages lower than specified. To
avoid problems in situations like this, see “Preventing EEPROM Corruption” on page 20.
The EEPROM has a minimum endurance of 100,000 write/erase cycles.
5.3.1 Programming Methods
There are two methods for EEPROM programming:
zAtomic byte programming. This is the simple mode of programming, where target locations are erased and written
in a single operation. In this mode of operation the target is guaranteed to always be erased before writing but
programmin times are longer.
zSplit byte programming. It is possible to split the erase and write cycle in two different operations. This is useful
when short access times are required, for example when supply voltage is falling. In order to t ake advantage of this
method target locations must be erased befo re writing to them. This can be done at times when the system allows
time-critical operations, typically at start-up and initialisation.
The programming method is selected using the EEPROM Programming Mode bits (EEPM1 and EEPM0) in EEPROM
Control Register (EECR). See Table 5 on page 24. Write and erase times are given in the same table.
Since EEPROM programming takes some time the application must wait for one operation to complete before starting
the next. This can be done by either polling the EEPROM Program Enable bit (EEPE) in EEPROM Control Register
(EECR), or via the EEPROM Ready Interrupt. The EEPROM interrupt is controlled by the EEPROM Ready Interrupt
Enable (EERIE) bit in EECR.
5.3.2 Read
To read an EEPROM memory location follow the procedure below:
zPoll the EEPROM Program Enable bit (EEPE) in EEPROM Control Register (EECR) to make sure no other
EEPROM operations are in process. If set, wait to clear.
zWrite target address to EEPROM Address Registers (EEARH/EEARL).
zStart the read operation by setting the EEPROM Read Enable bit (EERE) in the EEPROM Control Register
(EECR). During the read operation, the CPU is halted for four clock cycles before executing the next instruction.
zRead data from the EEPROM Data Register (EEDR).
Device EEPROM Size Address Range
ATtiny828 256B 0x00 – 0xFF
20
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.3.3 Erase
In order to prevent unintentional EEPROM writes, a specific procedure must be followed to erase memory locations. To
erase an EEPROM memory location follow the procedure below:
zPoll the EEPROM Program Enable bit (EEPE) in EEPROM Control Register (EECR) to make sure no other
EEPROM operations are in process. If set, wait to clear.
zPoll the SPMEN bit in Store Program Memory Control and Status Register (SPMCSR) to make sure no self-
programming opertaions are in process. If set, wait to clear. This step is relevant only if the application contains a
boot loader that programs the Flash memory. If not, this step can be omitted.
zSet mode of programming to erase by writing EEPROM Programming Mode bits (EEPM0 and EEPM1) in
EEPROM Control Register (EECR).
zWrite target address to EEPROM Address Registers (EEARH/EEARL).
zEnable erase by setting EEPROM Master Program Enable (EEMPE) in EEPROM Control Register (EECR). Within
four clock cycles, start the erase operation by setting the EEPROM Program Enable bit (EEPE) in the EEPROM
Control Register (EECR). During the erase operation, the CPU is halted for two clock cycles before executing the
next instruction.
The EEPE bit remains set until the erase operation has completed. While the device is busy programming, it is not
possible to perform any other EEPROM operations.
5.3.4 Write
In order to prevent unintentional EEPROM writes, a specific procedure must be followed to write to memory locations.
Before writing data to EEPROM the target location must be erased. This can be done either in the same operation or as
part of a split operation. Writing to an unerased EEPROM location will result in corrupted data.
To write an EEPROM memory location follow the procedure below:
zPoll the EEPROM Program Enable bit (EEPE) in EEPROM Control Register (EECR) to make sure no other
EEPROM operations are in process. If set, wait to clear.
zPoll the SPMEN bit in Store Program Memory Control and Status Register (SPMCSR) to make sure no self-
programming opertaions are in process. If set, wait to clear. This step is relevant only if the application contains a
boot loader that programs the Flash memory. If not, this step can be omitted.
zSet mode of programming by writing EEPROM Programming Mode bits (EEPM0 and EEPM1) in EEPROM Control
Register (EECR). Alternatively, data can be written in one operation or the write procedure can be split up in erase,
only, and write, only.
zWrite target address to EEPROM Address Registers (EEARH/EEARL).
zWrite target data to EEPROM Data Register (EEDR).
zEnable write by setting EEPROM Master Program Enable (EEMPE) in EEPROM Control Register (EECR). Within
four clock cycles, start the write operation by setting the EEPROM Program Enable bit (EEPE) in the EEPROM
Control Register (EECR). During the write operation, the CPU is halted for two clock cycles before executing the
next instruction.
The EEPE bit remains set until the write operation has completed. While the device is busy with programming, it is not
possible to do any other EEPROM operations.
5.3.5 Preventing EEPROM Corruption
During periods of low VCC, the EEPROM data can be corrupted because the supply voltage is too low for the CPU and
the EEPROM to operate properly. These issues are the same as for board level systems using EEPROM, and the same
design solutions should be applied.
21
ATtiny828 [DATASHEET]
8371A–AVR–08/12
At low supply voltages data in EEPROM can be corrupted in two ways:
zThe supply voltage is too low to maintain proper operation of an otherwise legitimate EEPROM program
sequence.
zThe supply voltage is too low for the CPU and instructions may be executed incorrectly.
EEPROM data corruption is avoided by keeping the device in reset during periods of insufficient power supply voltage.
This is easily done by enabling the internal Brown-Out Detector (BOD). If BOD detection levels are not sufficient for the
design, an external reset circuit for low VCC can be used.
Provided that supply voltage is sufficient, an EEPROM write operation will be completed even when a reset occurs.
5.3.6 Program Examples
The following code examples show one assembly and one C function for erase, write, or atomic write of the EEPROM.
The examples assume that interrupts are controlled (e.g., by disabling interrupts globally) so that no interrupts occur
during execution of these functions.
The examples also assume that a boot loader is not used. If a boot loader is present, the EEPROM write function must
be expanded to wait for any ongoing SPM operations to finish.
Note: See “Code Examples” on page 7.
Assembly Code Example
EEPROM_write:
sbic EECR, EEPE
rjmp EEPROM_write; Wait for completion of previous write
ldi r16, (0<<EEPM1)|(0<<EEPM0)
out EECR, r16 ; Set Programming mode
out EEARH, r18
out EEARL, r17 ; Set up address (r18:r17) in address registers
out EEDR, r19 ; Write data (r19) to data register
sbi EECR, EEMPE ; Write logical one to EEMPE
sbi EECR, EEPE ; Start eeprom write by setting EEPE
ret
22
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Note: See “Code Examples” on page 7.
The next code examples show assembly and C functions for reading the EEPROM. The examples assume that
interrupts are controlled so that no interrupts will occur during execution of these functions.
Note: See “Code Examples” on page 7.
C Code Example
void EEPROM_write(unsigned int ucAddress, unsigned char ucData)
{/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set Programming mode */
EECR = (0<<EEPM1)|(0<<EEPM0)
/* Set up address and data registers */
EEAR = ucAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}
Assembly Code Example
EEPROM_read:
sbic EECR, EEPE
rjmp EEPROM_read ; Wait for completion of previous write
out EEARH,r18
out EEARL,r17 ; Set up address (r18:r17) in address registers
sbi EECR, EERE ; Start eeprom read by writing EERE
in r16, EEDR ; Read data from data register
ret
23
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Note: See “Code Examples” on page 7.
5.4 Register Description
5.4.1 EEARL – EEPROM Address Register Low
zBits 7:0 – EEAR[7:0]: EEPROM Address
The EEPROM address register is required by the read and write operations to indicate the memory location that is being
accessed.
EEPROM data bytes are addressed linearly over the entire memory range (0...[256-1]). The initial value of these bits is
undefined and a legitimate value must therefore be written to the register before EEPROM is accessed.
Devices with 256 bytes of EEPROM, or less, do not require a high address registers (EEARH). In such devices the high
address register is therefore left out but, for compatibility issues, the remaining register is still referred to as the low byte
of the EEPROM address register (EEARL).
Devices that to do not fill an entire address byte, i.e. devices with an EEPROM size not equal to 256, implement read-
only bits in the unused locations. Unused bits are located in the most significant end of the address register and they
always read zero.
C Code Example
unsigned char EEPROM_read(unsigned int ucAddress)
{/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address register */
EEAR = ucAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
Bit 76543210
0x21 (0x41) EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value X X X X X X X X
24
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.4.2 EEDR – EEPROM Data Register
zBits 7:0 – EEDR[7:0]: EEPROM Data
For EEPROM write operations, EEDR contains the data to be written to the EEPROM address given in the EEAR
Register. For EEPROM read operations, EEDR contains the data read out from the EEPROM address given by EEAR.
5.4.3 EECR – EEPROM Control Register
zBits 7, 6 – Res: Reserved Bits
These bits are reserved and will always read zero.
zBits 5, 4 – EEPM1 and EEPM0: EEPROM Programming Mode Bits
EEPROM programming mode bits define the action that will be triggered when EEPE is written. Data can be
programmed in a single atomic operation, where the previous value is automatically erased before the new value is
programmed, or Erase and Write can be split in two different operations. The programming times for the different modes
are shown in Table 5.
Table 5. EEPROM Programming Mode Bits and Programming Times
When EEPE is set any write to EEPMn will be ignored.
During reset, the EEPMn bits will be reset to 0b00 unless the EEPROM is busy programming.
zBit 3 – EERIE: EEPROM Ready Interrupt Enable
Writing this bit to one enables the EEPROM Ready Interrupt. Provided the I-bit in SREG is set, the EEPROM Ready
Interrupt is triggered when non-volatile memory is ready for programming.
Writing this bit to zero disables the EEPROM Ready Interrupt.
Bit 76543210
0x20 (0x40) EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value 0 0 0 0 0 0 0 0
Bit 76543210
0x1F (0x3F) EEPM1 EEPM0 EERIE EEMPE EEPE EERE EECR
Read/Write R R R/WR/WR/WR/WR/WR/W
Initial Value 0 0 X X 0 0 X 0
EEPM1 EEPM0 Programming T ime Operation
0 0 3.4 ms Atomic (erase and write in one operation)
0 1 1.8 ms Erase, only
1 0 1.8 ms Write, only
1 1 Reserved
25
ATtiny828 [DATASHEET]
8371A–AVR–08/12
zBit 2 – EEMPE: EEPROM Master Program Enable
The EEMPE bit determines whether writing EEPE to one will have effect or not.
When EEMPE is set and EEPE written within four clock cycles the EEPROM at the selected address will be
programmed. Hardware clears the EEMPE bit to zero after four clock cycles.
If EEMPE is zero the EEPE bit will have no effect.
zBit 1 – EEPE: EEPROM Program Enable
This is the programming enable signal of the EEPROM. The EEMPE bit must be set before EEPE is written, or EEPROM
will not be programmed.
When EEPE is written, the EEPROM will be programmed according to the EEPMn bit settings. When EEPE has been
set, the CPU is halted for two cycles before the next instruction is executed. After the write access time has elapsed, the
EEPE bit is cleared by hardware.
Note that an EEPROM write operation blocks all software programming of Flash, fuse bits, and lock bits.
zBit 0 – EERE: EEPROM Read Enable
This is the read strobe of the EEPROM. When the target address has been set up in the EEAR, the EERE bit must be
written to one to trigger the EEPROM read operation.
EEPROM read access takes one instruction, and the requested data is available immediately. When the EEPROM is
read, the CPU is halted for four cycles before the next instruction is executed.
The user should poll the EEPE bit before starting the read operation. If a write operation is in progress, it not possible to
read the EEPROM, or to change the address register (EEAR).
5.4.4 GPIOR2 – General Purpo se I/O Regi st er 2
This register may be used freely for storing any kind of data.
5.4.5 GPIOR1 – General Purpo se I/O Regi st er 1
This register may be used freely for storing any kind of data.
Bit 76543210
0x2B (0x4B) MSB LSB GPIOR2
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value 0 0 0 0 0 0 0 0
Bit 76543210
0x2A (0x4A) MSB LSB GPIOR1
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value 0 0 0 0 0 0 0 0
26
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5.4.6 GPIOR0 – General Purpo se I/O Regi st er 0
This register may be used freely for storing any kind of data.
Bit 76543210
0x1E (0x3E) MSB LSB GPIOR0
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value 0 0 0 0 0 0 0 0
27
ATtiny828 [DATASHEET]
8371A–AVR–08/12
6. Clock System
Figure 11 presents the principal clock systems and their distribution in ATtiny828. All of the clocks need not be active at
a given time. In order to reduce power consumption, the clocks to modules not being used can be halted by using
different sleep modes and power reduction register bits, as described in “Power Management and Sleep Modes” on page
34. The clock systems is detailed below.
Figure 11. Clock Distribution
6.1 Clock Subsystems
The clock subsystems are detailed in the sections below.
6.1.1 CPU Clock – clkCPU
The CPU clock is routed to parts of the system concerned with operation of the AVR Core. Examples of such modules
are the General Purpose Register File, the System Register s and the SRAM data memory. Halting the CPU clock inhibits
the core from performing general operations and calculations.
6.1.2 I/O Clock – clkI/O
The I/O clock is used by the majority of the I/O modules, like Timer/Counter. The I/O clock is also used by the External
Interrupt module, but note that some external interrupts are detected by asynchronous logic, allowing such interrupts to
be detected even if the I/O clock is halted.
6.1.3 NVM clock - clkNVM
The NVM clock controls operation of the Non-Volatile Memory Controller. The NVM clock is usually active simultaneously
with the CPU clock.
CLOCK CONTROL UNIT
GENERAL
I/O MODULES
ANALOG-TO-DIGITAL
CONVERTER
CPU
CORE
WATCHDOG
TIMER
RESET
LOGIC
CLOCK
PRESCALER
RAM
CLOCK
SWITCH
NVM
CALIBRATED
OSCILLATOR
clk
ADC
SOURCE CLOCK
clk
I/O
clk
CPU
clk
NVM
WATCHDOG
CLOCK
ULTRA LOW POWER
OSCILLATOR
EXTERNAL
CLOCK
28
ATtiny828 [DATASHEET]
8371A–AVR–08/12
6.1.4 ADC Clock – clkADC
The ADC is provided with a dedicated clock domain. This allows halting th e CPU a nd I/O clocks in order to reduce noise
generated by digital circuitry. This gives more accurate ADC conversion results.
6.2 Clock Sources
The device can use any of the following sources for the system clock:
zExternal Clock (see page 28)
zCalibrated Internal 8MHz Oscillator (see page 29)
zInternal 32kHz Ultra Low Power (ULP) Oscillator (see page 29)
The clock source is selected using CKSEL fuses, as shown in Table 6 below.
Table 6. CKSEL Fuse Bits and Device Clocking Options
Note: 1. For all fuses “1” means unprogrammed and “0” means programmed.
2. This is the default setting. The device is shipped with this fuse combination.
.
CKSEL fuse bits can be read by firmware (see “Reading Lock, Fuse and Signature Data from Software” on page 229),
but firmware can not write to fuse bits.
When the device wakes up from power-down the selected clock source is used to time the start-up, ensuring stable
oscillator operation before instruction execution starts. When the CPU starts from reset, the internal 32kHz oscillator is
used for generating an additional delay, allowing supply voltage to reach a stable level before normal device operation is
started.
System clock alternatives are discussed in the following sections.
6.2.1 External Clock
To drive the device from an external clock source, CLKI should be connected as shown in Figure 12, below.
Figure 12. External Clock Drive Configuration
Start-up time for this clock source is determined by the SUT fuse bit, as shown in Table 7 on page 30.
CKSEL[1:0] (1) Frequency Device Clocking Option
0X Any External Clock (see page 28)
10 8MHz Calibrated Internal 8MHz Oscillator (see page 29) (2)
11 32kHz Internal 32kHz Ultra Lo w Power (ULP) Oscillator (see page 29)
29
ATtiny828 [DATASHEET]
8371A–AVR–08/12
To ensure stable operation of the MCU it is required to avoid sudden changes in the external clock frequency . A
variation in frequency of more than 2% from one clock cycle to the next can lead to unpredictable behavior. It is required
to ensure that the MCU is kept in Reset during such changes in the clock frequency.
Stable operation for large step changes in system clock frequency is guaranteed when using t he system clock prescaler.
See “System Clock Prescaler” on page 30.
6.2.2 Calibrated Internal 8MHz Oscillator
The internal 8MHz oscillator operates with no external components and, by default, provides a clock source with an
approximate frequency of 8MHz. Though voltage and temperature dependent, this clock can be very accurately
calibrated by the user. See Table 104 on page 249 and “Internal Oscillator Speed” on page 293 for more details.
During reset, hardware loads the pre-programmed calibration value into the OSCCAL0 register and thereby
automatically calibrates the oscillator. The accuracy of this calibration is referred to as “Fact ory Calibration” in Table 104
on page 249. For more information on automatic loading of pre-programmed calibration value, see section “Calibration
Bytes” on page 229.
It is possible to reach higher accuracies than factory defaults, especially when the application allows temperature and
voltage ranges to be narrowed. The firmware can reprogram the calibration data in OSCCAL0 either at start-up or during
run-time. The continuous, run-time calibration method allows firmware to monitor voltage and temperature and
compensate for any detected variations. See “OSCCAL0 – Oscillator Calibration Register” on page 32, “Temperature
Measurement” on page 148, and Table 52 on page 150. The accuracy of this calibration is referred to as “User
Calibration” in Table 104 on page 249.
The oscillator temperature calibration registers, OSCTCAL0A and OSCTCAL0B, can be used for one-time temperature
calibration of oscillator frequency. See “OSCTCAL0A – Oscillator Temperature Calibration Register A” on page 33 and
“OSCTCAL0B – Oscillator Temperature Calibration Register B” on page 33.
When this oscillator is used as the chip clock, it will still be used for the Watchdog Timer and for the Reset Time-out.
Start-up time for this clock source is determined by the SUT fuse bit, as shown in Table 7 on page 30.
6.2.3 Internal 32kHz Ultra Low Power (ULP) Oscillator
The internal 32kHz oscillator is a low power oscillator that operates with no external components. It provides a clock
source with an approximate frequency of 32kHz. The frequency depends on supply voltage, temperature and batch
variations. See Table 105 on page 250 for accuracy details.
During reset, hardware loads the pre-programmed calibration value into the OSCCAL1 register and thereby
automatically calibrates the oscillator. The accuracy of this calibration is referred to as “Fact ory Calibration” in Table 105
on page 250. For more information on automatic loading of pre-programmed calibration value, see section “Calibration
Bytes” on page 229.
Start-up time for this clock source is determined by the SUT fuse bit, as shown in Table 7 on page 30.
6.2.4 Default Clock Settings
The device is shipped with following fuse settings:
zCalibrated Internal 8MHz Oscillator (see CKSEL fuse bits in Table 6 on page 28)
zLongest possible start-up time (see SUT fuse bits in Table 7 on page 30)
zSystem clock prescaler set to 8 (see CKDIV8 fuse bit on page 32)
The default setting gives a 1MHz system clock and ensures all users can make their desired clock source setting using
an in-system or high-voltage programmer.
30
ATtiny828 [DATASHEET]
8371A–AVR–08/12
6.3 System Clock Prescaler
The ATtiny828 system clock can be divided by setting the “CLKPR – Clock Prescale Register” on page 31. This feature
can be used to decrease power consumption when the requirement for processing power is low. This can be used with
all clock source options, and it will affect the clock frequency of the CPU and all synchronous peripherals. clkI/O, clkADC,
clkCPU, and clkFLASH are divided by a factor as shown in Table 8 on page 31.
6.3.1 Switching Prescaler Setting
When switching between prescaler settings, the System Clock Prescaler ensures that no glitch occurs in the clock
system and that no intermediate frequency is higher than neither the clock frequency corresponding to the previous
setting, nor the clock frequency corresponding to the new setting.
The ripple counter that implements the prescaler runs at the frequency of the undivided clock, which may be faster than
the CPU's clock frequency. Hence, it is not possible to determine the state of the prescaler - even if it were readable, and
the exact time it takes to switch from one clock division to another cannot be exactly predicted.
From the time the CLKPS values are written, it takes between T1 + T2 and T1 + 2*T2 before the new clock frequency is
active. In this interval, 2 active clock edges are produced. Here, T1 is the previous clock period, and T2 is the period
corresponding to the new prescaler setting.
6.4 Clock Output Buffer
The device can output the system clock on the CLKO pin. To enable the output, the CKOUT fuse has to be programmed.
This mode is suitable when the chip clock is used to drive other circuits on the system. Note that the clock will not be
output during reset and that the normal operation of the I/O pin will be overridden when the fuse is programmed. Any
clock source, including the internal oscillators, can be selected when the clock is output on CLKO. If the System Clock
Prescaler is used, it is the divided system clock that is output.
6.5 Start-Up Time
The CKSEL and SUT fuse bits define the start-up time of the device, as shown in Table 7 on page 30, below.
Table 7. CKSEL and SUT Fuse Bits vs. Device Start-up Time
Note: 1. Device start-up time from power-down sleep mode.
2. When BOD has been disabled by sof tware, the wake-up time from sleep mode will be approximately 60µs to
ensure the BOD is working correctly before MCU continues executing code.
3. Device start-up time after reset.
4. The device is shipped with this option selected.
CKSEL SUT Clock From Power-Down (1)(2) From Reset (3)
0X
00
External 6 CK
20 CK
01 20 CK + 4ms
1X 20 CK + 64ms
10 (4)
00
Internal 8MHz
6 CK (5)
20 CK (5)
01 20 CK + 4ms
1X (4) 20 CK + 64ms
11
00
Internal 32kHz
20 CK (5)
01 20 CK + 4ms
1X 20 CK + 64ms
31
ATtiny828 [DATASHEET]
8371A–AVR–08/12
5. At least 4ms when reset is disabled.
6.6 Register Description
6.6.1 CLKPR – Clock Prescale Register
zBits 7:4 – Res: Reserved Bits
These bits are reserved and will always read zero.
zBits 3:0 – CLKPS[3:0]: Clock Prescaler Select Bits 3 - 0
These bits define the division factor between the selected clock source and the internal system clock. These bits can be
written run-time to vary the clock frequency to suit the application requirements. As the divider divides the master clock
input to the MCU, the speed of all synchronous peripherals is reduced when a division factor is used. The division factors
are given in Table 8.
Interrupts must be disabled when changing prescaler setting to make sure the write procedure is not interrupted.
Table 8. Clock Prescaler Select
Bit 76543210
(0x61) CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Read/Write R R R R R/W R/W R/W R/W
Initial Value 0 0 0 0 See Bit Description
CLKPS3 CLKPS2 CLKPS1 CLKPS0 Clock Division Factor
0 0 0 0 1 (1)
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8 (2)
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 Reserved
1 0 1 0 Reserved
1 0 1 1 Reserved
1 1 0 0 Reserved
1 1 0 1 Reserved
1 1 1 0 Reserved
1 1 1 1 Reserved
32
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Note: 1. This is the initial value when CKDIV8 fuse has been unprogrammed.
2. This is the initial value when CKDIV8 fuse has been programmed. The device is shipped with the CKDIV8
Fuse programmed.
The initial value of clock prescaler bits is determined by the CKDIV8 fuse (see Table 91 on page 227). When CKDIV8 is
unprogrammed, the system clock prescaler is set to one and, when programmed, to eight. Any value can be written to
the CLKPS bits regardless of the CKDIV8 fuse bit setting.
When CKDIV8 is programmed the initial value of CLKPS bits give a clock division factor of eight at start up. This is useful
when the selected clock source has a higher frequency than allowed under present operating conditions. See “Speed” on
page 249.
To avoid unintentional changes to clock frequency, the following sequence must be followed:
1. Write the required signature to the CCP register. See page 14.
2. Within four instruction cycles, write the desired value to CLKPS bits.
6.6.2 OSCCAL0 – Oscillator Calibration Register
zBits 7:0 – CAL0[7:0]: Oscillator Calibration Value
The oscillator calibration register is used to trim the internal 8MHz oscillator and to remove process variations from the
oscillator frequency. A pre-programmed calibration value is automatically written to this register during chip reset, giving
the factory calibrated frequency specified in Table 104 on page 249.
The application software can write this register to change the oscillator frequency. The oscillator can be calibrated to
frequencies specified in Table 104 on page 249. Calibration outside that range is not guaranteed.
The lowest oscillator frequency is reached by programming these bits to zero. Increasing the register value increases the
oscillator frequency. A typical frequency response curve is shown in “Calibrated Oscillator Frequency vs. OSCCAL0
Value” on page 295.
Note that this oscillator is used to time EEPROM and Flash write accesses, and write times will be affected accordingly.
Do not calibrate to more than 8.8MHz if EEPROM or Flash is to be written. Otherwise, the EEPROM or Flash write may
fail.
To ensure stable operation of the MCU the calibration value should be changed in small steps. A step change in
frequency of more than 2% from one cycle to the next can lead to unpredictable behavior. Also, the difference between
two consecutive register values should not exceed 0x20. If these limits are exceeded the MCU must be kept in reset
during changes to clock frequency.
Bit 76543210
(0x66) CAL07 CAL06 CAL05 CAL04 CAL03 CAL02 CAL01 CAL00 OSCCAL0
Read/Write R/WR/WR/WR/WR/WR/WR/WR/W
Initial Value Device Specific Calibration Value
33
ATtiny828 [DATASHEET]
8371A–AVR–08/12
6.6.3 OSCTCAL0A – Oscillator Temperature Calibration Register A
zBits 7:0 – Oscillator Temperature Calibration Value
The temperature calibration value can be used to trim the calibrated 8MHz oscillator and remove temperature variations
from the oscillator frequency.
6.6.4 OSCTCAL0B – Oscillator Temperature Calibration Register B
zBits 7:0 – Oscillator Temperature Calibration Value
The temperature calibration value can be used to trim the calibrated 8MHz oscillator and remove temperature variations
from the oscillator frequency.
6.6.5 OSCCAL1 – Oscillator Calibration Register
zBits 7:0 – CAL[11:10]: Oscillator Calibration Value
The oscillator calibration register is used to trim the internal 32kHz oscillator and to remove process variations from the
oscillator frequency. A pre-programmed calibration value is automatically written to this register during chip reset, giving
the factory calibrated frequency as specified in Table 105 on page 250.
The application software can write this register to change the oscillator frequency. The oscillator can be calibrated to
frequencies as specified in Table 105 on page 250. Calibration outside that range is not guaranteed.
The lowest oscillator frequency is reached by programming these bits to zero. Increasing the register value increases the
oscillator frequency. A typical frequency response curve is shown in “ULP Oscillator Frequency vs. OSCCAL1 Value” on
page 296.
To ensure stable operation of the MCU the calibration value should be changed in small steps. A step change in
frequency of more than 2% from one cycle to the next can lead to unpredictable behavior. Also, the difference between
two consecutive register values should not exceed 0x20. If these limits are exceeded the MCU must be kept in reset
during changes to clock frequency.
Bit 76543210
(0xF0) Oscillator Temperature Calibration Data OSCTCAL0A
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value Device Specific Calibration Value
Bit 76543210
(0xF1) Oscillator Temperature Calibration Data OSCTCAL0B
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value Device Specific Calibration Value
Bit 76543210
(0x67) CAL11 CAL10 OSCCAL1
Read/Write RRRRRRR/WR/W
Initial Value 0 0 0 0 0 0 Calibration Value
34
ATtiny828 [DATASHEET]
8371A–AVR–08/12
7. Power Management and Sleep Modes
The high performance and industry leading code efficiency makes the AVR microcontrollers an ideal choise for low
power applications. In addition, sleep modes enable the application to shut down unused modules in the MCU, thereby
saving power. The AVR provides various sleep modes allowing the user to tailor the power consumption to the
application’s requirements.
7.1 Sleep Modes
Figure 11 on page 27 presents the different clock systems and their distribution in ATtiny828. The figure is helpful in
selecting an appropriate sleep mode. Table 9 shows the different sleep modes and the sources that may be used for
wake up.
Table 9. Active Clock Domains and Wake-up Sources in Different Sleep Modes
Note: 1. Start frame detection, only.
2. Address match interrupt, only.
3. For INT0 level interrupt, only.
To enter a sleep mode, the SE bit in MCUCR must be set and a SLEEP instruction must be executed. The SMn bits in
MCUCR select which sleep mode will be activated by the SLEEP instruction. See Table 10 on page 37 for a summary.
If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up. The MCU is then halted for four
cycles in addition to the start-up time, executes the interrupt routine, and resumes execution from the instruction
following SLEEP. The contents of the Register File and SRAM are unaltered when the device wakes up from sleep. If a
reset occurs during sleep mode, the MCU wakes up and executes from the Reset Vector.
Note that if a level triggered interrupt is used for wake-up the changed level must be held for some time to wake up the
MCU (and for the MCU to enter the interrupt service routine). See “External Interrupts” on page 51 for details.
7.1.1 Idle Mode
This sleep mode basically halts clkCPU and clkFLASH, while allowing other clocks to run. In Idle Mode, the CPU is stopped
but the following peripherals continue to operate:
zWatchdog and interrupt system
zAnalog comparator, and ADC
zUSART, TWI, and timer/counters
Idle mode allows the MCU to wake up from external triggered interrupts as well as internal ones, such as Timer Overflow.
If wake-up from the analog comparator interrupt is not required, the analog comparator can be powered down by setting
Sleep Mode
Oscillators Active Clock Domains Wake-up Sources
Main Clock
Source Enabled
clkCPU
clkFLASH
clkIO
clkADC
Watchdog
Interrupt
INT0 and
Pin Change
SPM/EEPROM
Ready Inter r u p t
ADC Interrupt
USART (1)
TWI Slave
Other I/O
Idle X XXXXXXXXX
ADC Noise Reduction X X X X(3) X X X X(2)
Power-down X X(3) X X(2)
35
ATtiny828 [DATASHEET]
8371A–AVR–08/12
the ACD bit in ACSRA. See “ACSRA – Analog Comparator Control and Status Register” on page 134. This will reduce
power consumption in Idle mode.
If the ADC is enabled, a conversion starts automatically when this mode is entered.
7.1.2 ADC Noise Reduction Mode
This sleep mode halts clkI/O, clkCPU, and clkFLASH, while allowing other clocks to run. In ADC Noise Reduction mode, the
CPU is stopped but the following peripherals continue to operate:
zWatchdog (if enabled), and external interrupts
zADC
zUSART start frame detector, and TWI
This improves the noise environment for the ADC, enabling higher resolution measurements. If the ADC is enabled, a
conversion starts automatically when this mode is entered.
The following events can wake up the MCU:
zWatchdog reset, external reset, and brown-out reset
zExternal level interrupt on INT0, and pin change interrupt
zADC conversion complete interrupt, and SPM/EEPROM ready interrupt
zUSART start frame detection, and TWI slave address match
7.1.3 Power-Down Mode
This sleep mode halts all generated clocks, allowing operation of asynchronous modules, only. In Power-down Mode the
oscillator is stopped, while the following peripherals continue to operate:
zWatchdog (if enabled), external interrupts
The following events can wake up the MCU:
zWatchdog reset, external reset, and brown-out reset
zExternal level interrupt on INT0, and pin change interrupt
zUSART start frame detection, and TWI slave address match
7.2 Power Reduction Register
The Power Reduction Register (PRR), see “PRR – Power Reduction Register” on page 37, provides a method to reduce
power consumption by stopping the clock to individual peripherals. When the clock for a peripheral is stopped then:
zThe current state of the peripheral is frozen.
zThe associated registers can not be read or written.
zResources used by the peripheral will remain occupied.
The peripheral should in most cases be disabled before stopping the clock. Clearing the PRR bit wakes up the peripheral
and puts it in the same state as before shutdown.
Peripheral shutdown can be used in Idle mode and Active mode to significantly reduce the overall power consumption.
See “Current Consumption of Peripheral Units” on page 266 for examples. In all other sleep modes, the clock is already
stopped.
7.3 Minimizing Power Consumption
There are several issues to consider when trying to minimize the power consumption in an AVR controlled system. In
general, sleep modes should be used as much as possible, and the sleep mode should be selected so that as few as
36
ATtiny828 [DATASHEET]
8371A–AVR–08/12
possible of the device’s functions are operating. All functions not needed should be disabled. In particular, the following
modules may need special consideration when trying to achieve the lowest possible power consumption.
7.3.1 Analog to Digital Converter
If enabled, the ADC will be enabled in all sleep modes. To save power, the ADC should be disabled before entering any
sleep mode. When the ADC is turned off and on again, the next conversion will be an extended conversion. See “Analog
to Digital Converter” on page 137 for details on ADC operation.
7.3.2 Analog Comparator
When entering Idle mode, the Analog Comparator should be disabled if not used. When entering ADC Noise Reduction
mode, the Analog Comparator should be disabled. In the other sleep modes, the Analog Comparator is automatically
disabled. However, if the Analog Comparator is set up to use the Internal Voltage Reference as input, the Analog
Comparator should be disabled in all sleep modes. Otherwise, the Internal Voltage Reference will be enabled,
independent of sleep mode. See “Analog Comparator” on page 133 for details on how to configure the Analog
Comparator.
7.3.3 Brown-out Detector
If the Brown-out Detector is not needed in the application, this module should be turned off. If the Brown-out Detector is
enabled by the BODPD Fuses, it will be enabled in all sleep modes, and hence, always consume power. In the deeper
sleep modes, this will contribute significantly to the total current consumption. If the Brown-out Detector is needed in the
application, this module can also be set to Sampled BOD mode to save power. See “Brown-out Detection” on page 41 for
details on how to configure the Brown-out Detector.
7.3.4 Internal Voltage Reference
The Internal Voltage Reference will be enabled when needed by the Brown-out Detection, the Analog Comparator or the
ADC. If these modules are disabled as described in the sections above, the internal voltage reference will be disabled
and it will not be consuming power. When turned on again, the user must allow the reference to start up before the output
is used. If the reference is kept on in sleep mode, the output can be used immediately. See Internal Bandgap Reference
in Table 107 on page 250 for details on the start-up time.
7.3.5 W atchdog Timer
If the Watchdog Timer is not needed in the application, this module should be turned off. If the Watchdog Timer is
enabled, it will be enabled in all sleep modes, and hence, always consume power. In the deeper sleep modes, this will
contribute to the total current consumption. See “Brown-out Detection” on page 41 for details on how to configure the
Watchdog Timer.
7.3.6 Port Pins
When entering a sleep mode, all port pins should be configured to use minimum power. The most important thing is then
to ensure that no pins drive resistive loads. In sleep modes where both the I/O clock (clkI/O) and the ADC clock (clkADC)
are stopped, the input buffers of the device will be disabled. This ensures that no power is consumed by the input logic
when not needed. In some cases, the input logic is needed for detecting wake-up conditions, and it will then be enabled.
See the section “Digital Input Enable and Sleep Modes” on page 62 for details on which pins are enabled. If the input
buffer is enabled and the input signal is left floating or has an analog signal level close to VCC/2, the input buffer will use
excessive power.
For analog input pins, the digital input buffer should be disabled at all times. An analog signal level close to VCC/2 on an
input pin can cause significant current even in active mode. Digital input buffers can be disabled by writing to the Digital
Input Disable Register (DIDR0). See “DIDR3 – Digital Input Disable Register 3” on page 154 for details.
37
ATtiny828 [DATASHEET]
8371A–AVR–08/12
7.4 Register Description
7.4.1 SMCR – Sleep Mode Control Register
The Sleep Mode Control Register contains control bits for power management.
zBits 7:3 – Res: Reserved Bits
These bits are reserved and will always read zero.
zBits 2:1 – SM[1:0]: Sleep Mode Select Bits 1 and 0
These bits select the sleep mode, as shown in Table 10.
Table 10. Sleep Mode Select
zBit 0 – SE: Sleep Enable
This bit must be written to logic one to make the MCU enter the sleep mode when the SLEEP instruction is executed. To
avoid the MCU entering sleep mode unintentionally, it is recommended to write the Sleep Enable (SE) bit to one just
before the execution of the SLEEP instruction and to clear it immediately after waking up.
7.4.2 PRR – Power Reduction Register
The Power Reduction Register provides a method to reduce power consumption by allowing peripheral clock signals to
be disabled.
zBit 7 – PRTWI: Power Reduction Two-Wire Interface
Writing a logic one to this bit shuts down the Two-Wire Interface module.
zBits 6, 4 – Res: Reserved Bits
These bits are reserved and will always read zero.
zBit 5 – PRTIM0: Power Reduction Timer/Counter0
Bit 76543210
0x33 (0x53) –––––SM1SM0SESMCR
Read/Write RRRRRR/WR/WR/W
Initial Value 0 0 0 0 0 0 0 0
SM1 SM0 Sleep Mode
0 0 Idle
0 1 ADC Noise Reduction
1 0 Power-down
1 1 Reserved
Bit 76543 2 1 0
(0x64) PRTWI PRTIM0 PRTIM1 PRSPI PRUSART0 PRADC PRR
Read/Write R/W R R/W R R/W R/W R/W R/W
Initial Value00000 0 0 0
38
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Writing a logic one to this bit shuts down the Timer/Counter0 module. When the Timer/Counter0 is enabled, operation will
continue like before the shutdown.
zBit 3 – PRTIM1: Power Reduction Timer/Counter1
Writing a logic one to this bit shuts down the Timer/Counter1 module. When the Timer/Counter1 is enabled, operation will
continue like before the shutdown.
zBit 2 – PRSPI: Power Reduction SPI
Writing a logic one to this bit shuts down the SPI by stopping the clock to the module. When waking up the SPI again, the
SPI should be re-initialized to ensure proper operation.
zBit 1 – PRUSART0: Power Reduction USART0
Writing a logic one to this bit shuts down the USART0 module. When t he USART0 is enabled, operation will continue like
before the shutdown.
zBit 0 – PRADC: Power Reduction ADC
Writing a logic one to this bit shuts down the ADC. The ADC must be disabled before shut down. The analog comparator
cannot be used when the ADC is shut down.
39
ATtiny828 [DATASHEET]
8371A–AVR–08/12
8. System Control and Reset
8.1 Resetting the AVR
During reset, all I/O registers are set to their initial values, and the program starts execution from the Reset Vector. The
instruction placed at the Reset Vector must be a RJMP – Relative Jump – instruction to the reset handling routine. If the
program never enables an interrupt source, the interrupt vectors are not used, and regular program code can be placed
at these locations. This is also the case if the reset vector is in the application section while the interrupt vectors are in the
boot section, or vice versa.
The circuit diagram in Figure 13 shows the reset logic. Electrical parameters of the reset circuitry are defined in section
“System and Reset Characteristics” on page 250.
Figure 13. Reset Logic
The I/O ports of the AVR are immediately reset to their initial state when a reset source goes active. This does not require
any clock source to be running.
After all reset sources have gone inactive, a delay counter is invoked, stretching the internal reset. This allows the power
to reach a stable level before normal operation starts.
8.2 Reset Sources
The ATtiny828 has four sources of reset:
zPower-on Reset. The MCU is reset when the supply voltage is below the Power-on Reset threshold (VPOT)
zExternal Reset. The MCU is reset when a low level is present on the RESET pin for longer than the minimum pulse
length
zWatchdog Reset. The MCU is reset when the Watchdog Timer period expires and the Watchdog is enabled
zBrown Out Reset. The MCU is reset when the Brown-Out Detector is enabled and supply voltage is below the
brown-out threshold (VBOT)
8.2.1 Power-on Reset
A Power-on Reset (POR) pulse is generated by an on-chip detection circuit. The detection level is defined in section
“System and Reset Characteristics” on page 250. The POR is activated whenever VCC is below the detection level. The
POR circuit can be used to trigger the Start-up Reset, as well as to detect a failure in supply voltage.
A Power-on Reset (POR) circuit ensures that the device is reset from Power-on. Reaching the Power-on Reset threshold
voltage invokes the delay counter, which determines how long the device is kept in reset after VCC rise. The reset signal
is activated again, without any delay, when VCC decreases below the detection level.
DATA BU S
RESET FLAG REGISTERRESET FLAG REGISTER
(RSTFLR)(RSTFLR)
POWER-ONPOWER-ON
RESET CIRCUITRESET CIRCUIT
PULL-UPPULL-UP
RESISTORRESISTOR
BODLEVEL2...0BODLEVEL2...0
VCCCC
SPIKESPIKE
FILTERFILTER
RESETRESET
EXTERNALEXTERNAL
RESET CIRCUITRESET CIRCUIT
BROWN OUTBROWN OUT
RESET CIRCUITRESET CIRCUIT
RSTDISBLRSTDISBL
WATCHDOGWATCHDOG
TIMERTIMER
DELAYDELAY
COUNTERSCOUNTERS
S
R
Q
WATCHDOGWATCHDOG
OSCILLATOROSCILLATOR
CLOCKCLOCK
GENERATORGENERATOR
BORF
PORF
EXTRF
WDRF
INTERNALINTERNAL
RESETRESET
CKCK
TIMEOUTTIMEOUT
COUNTER RESETCOUNTER RESET
40
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Figure 14. MCU Start-up, RESET Tied to VCC
Figure 15. MCU Start-up, RESET Extended Externally
8.2.2 External Reset
An External Reset is generated by a low level on the RESET pin if enabled. Reset pulses longer than the min imum pulse
width (see section “System and Reset Characteristics” on page 250) will generate a reset, even if the clock is not
running. Shorter pulses are not guaranteed to generate a reset. When the applied signal reaches the Reset Threshold
Voltage – VRST – on its positive edge, the delay counter starts the MCU after the time-out period – tTOUT has expired.
V
T
IME-OUT
RESET
RESET
TOUT
INTERNAL
t
VPOT
VRST
CC
V
TIME-OUT
TOUT
TOUT
INTERNAL
CC
t
VPOT
VRST
> t
RESET
RESET
41
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Figure 16. External Reset During Operation
8.2.3 W atchdog Reset
When the Watchdog times out, it will generate a short reset pulse. On the falling edge of this pulse, the delay timer starts
counting the time-out period tTOUT. See page 41 for details on operation of the Watchdog Timer.
Figure 17. Watchdog Reset During Operation
8.2.4 Brown-out Detection
The Brown-Out Detection (BOD) circuit monitors that the VCC level is kept above a configurable trigger level, VBOT. When
the BOD is enabled, a BOD reset will be given when VCC falls and remains below the trigger level for the length of the
detection time, tBOD. The reset is kept active until VCC again rises above the trigger level.
CC
CK
CC
42
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Figure 18. Brown-out Reset During Operation
The BOD circuit will not detect a drop in VCC unless the voltage stays below the trigger level for the detection time, tBOD
(see “System and Reset Characteristics” on page 250).
The BOD circuit has three modes of operation:
zDisabled: In this mode of operation VCC is not monitored and, hence, it is recommended only for applications
where the power supply remains stable.
zEnabled: In this mode the VCC level is continuously monitored. If VCC drops below VBOT for at least tBOD a brown-
out reset will be generated.
zSampled: In this mode the VCC level is sampled on each negative edge of a 1kHz clock that has been derived
from the 32kHz ULP oscillator. Between each sample the BOD is turned off. Compared to the mode where BOD is
constantly enabled this mode of operation reduces power consumption but fails to detect drops in VCC between
two positive edges of the 1kHz clock. When a brown-out is detected in t his mode, the BOD circuit is set to enabled
mode to ensure that the device is kept in reset until VCC has risen above VBOT . The BOD will return to sampled
mode after reset has been released and the fuses have been read in.
The BOD mode of operation is selected using BODACT and BODPD fuse bits. The BODACT fuse bits determine how
the BOD operates in active and idle mode, as shown in Table 11.
Table 11. Setting BOD Mode of Operation in Active and Id le Modes
The BODPD fuse bits determine the mode of operation in all sleep modes except idle mode, as shown in Table 12.
BODACT1 BODACT0 Mode of Operation
0 0 Reserved
0 1 Sampled
1 0 Enabled
1 1 Disabled
VCC
RESET
TIME-OUT
INTERNAL
RESET
VBOT- VBOT+
tTOUT
43
ATtiny828 [DATASHEET]
8371A–AVR–08/12
Table 12. Setting BOD Mode of Operation in Sleep Modes Other Than Idle
See “Fuse Bits” on page 226.
8.3 Internal Voltage Reference
ATtiny828 features an internal bandgap reference. This reference is used for Brown-out Detection, and it can be used as
an input to the Analog Comparator or the ADC. The bandgap voltage varies with supply voltage and temperature.
8.3.1 Voltage Reference Enable Signals and Start-up Time
The voltage reference has a start-up time that may influence the way it should be used. The start-up time is given in
“System and Reset Characteristics” on page 250. To save power, the reference is not always turned on. The reference is
on during the following situations:
zWhen the BOD is enabled.
zWhen the internal reference is connected to the Analog Comparator.
zWhen the ADC is enabled.
Thus, when the BOD is not enabled, after setting the ACBG bit or enabling the ADC, the user must always allow the
reference to start up before the output from the Analog Comparator or ADC is used. To reduce power consumption in
Power-down mode, the user can avoid the three conditions above to ensure that the reference is turned off before
entering Power-down mode.
8.4 Watchdog Timer
The Watchdog Timer is clocked from the internal 32kHz ultra low power oscillator (see page 29). By controlling the
Watchdog Timer prescaler, the Watchdog Reset interval can be adjusted as shown in Table 15 on page 4 7. The WDR
Watchdog Reset – instruction resets the Watchdog Timer. The Watchdog Timer is also reset when it is disabled and
when a Chip Reset occurs. Ten different clock cycle periods can be selected to determine the reset period. If the reset
period expires without another Watchdog Reset, the ATtiny828 resets and executes from the Reset Vector.
The Wathdog Timer can also be configured to generate an interrupt instead of a reset. This can be very helpful when
using the Watchdog to wake-up from Power-down.
To prevent unintentional disabling of the Watchdog or unintentional change of time-out period, two different safety levels
are selected by the fuse WDTON as shown in Table 13 See “Timed Sequences for Changing the Configuration of the
Watchdog Timer” on page 44 for details.
Table 13. WDT Configuration as a Function of the Fuse Settings of WDTON
BODPD1 BODPD0 Mode of Operation
0 0 Reserved
0 1 Sampled
1 0 Enabled
1 1 Disabled
WDTON Safety
Level WDT Init ial State How to Disable the WDT How to Change Time-out
Unprogrammed 1Disabled Timed sequence No limitations
Programmed 2Enabled Always enabled Timed sequence