Introduction to the ATmega 16 Microcontroller

Similar documents
DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING Question Bank Subject Name: EC Microprocessor & Microcontroller Year/Sem : II/IV

8051 MICROCONTROLLER COURSE

MICROPROCESSOR. Exclusive for IACE Students iacehyd.blogspot.in Ph: /422 Page 1

2.0 Command and Data Handling Subsystem

MICROPROCESSOR AND MICROCOMPUTER BASICS

Microprocessor & Assembly Language

Memory Basics. SRAM/DRAM Basics

A+ Guide to Managing and Maintaining Your PC, 7e. Chapter 1 Introducing Hardware

Microcontroller Basics A microcontroller is a small, low-cost computer-on-a-chip which usually includes:

Module 2. Embedded Processors and Memory. Version 2 EE IIT, Kharagpur 1

Chapter 13. PIC Family Microcontroller

The Programming Interface

Logical Operations. Control Unit. Contents. Arithmetic Operations. Objectives. The Central Processing Unit: Arithmetic / Logic Unit.

ETEC Digital Controls PIC Lab 10 Pulse Width Modulation

CHAPTER 7: The CPU and Memory

8-Bit Flash Microcontroller for Smart Cards. AT89SCXXXXA Summary. Features. Description. Complete datasheet available under NDA

Microtronics technologies Mobile:

AVR Timer/Counter. Prof Prabhat Ranjan DA-IICT, Gandhinagar

Lab Experiment 1: The LPC 2148 Education Board

8-bit Microcontroller with 1K Bytes In-System Programmable Flash. ATtiny13V ATtiny13

CHAPTER 11: Flip Flops

Atmel Norway XMEGA Introduction

RAM & ROM Based Digital Design. ECE 152A Winter 2012

ET-BASE AVR ATmega64/128

Handout 17. by Dr Sheikh Sharif Iqbal. Memory Unit and Read Only Memories

A 5 Degree Feedback Control Robotic Arm (Haptic Arm)

AVR Butterfly Training. Atmel Norway, AVR Applications Group

Chapter 2 Logic Gates and Introduction to Computer Architecture

PART B QUESTIONS AND ANSWERS UNIT I

MACHINE ARCHITECTURE & LANGUAGE

Lecture N -1- PHYS Microcontrollers

PHYS 2P32 Project: MIDI for Arduino/ 8 Note Keyboard

Building A RISC Microcontroller in an FPGA

ADVANCED PROCESSOR ARCHITECTURES AND MEMORY ORGANISATION Lesson-17: Memory organisation, and types of memory

MODULE BOUSSOLE ÉLECTRONIQUE CMPS03 Référence :

Computers. Hardware. The Central Processing Unit (CPU) CMPT 125: Lecture 1: Understanding the Computer

Memory. The memory types currently in common usage are:

C8051F020 Utilization in an Embedded Digital Design Project Course. Daren R. Wilcox Southern Polytechnic State University Marietta, Georgia

Serial Communications

AUTOMATIC NIGHT LAMP WITH MORNING ALARM USING MICROPROCESSOR

Timer A (0 and 1) and PWM EE3376

PACKAGE OUTLINE DALLAS DS2434 DS2434 GND. PR 35 PACKAGE See Mech. Drawings Section

Chapter 6. Inside the System Unit. What You Will Learn... Computers Are Your Future. What You Will Learn... Describing Hardware Performance

================================================================

Computer Architecture

The components. E3: Digital electronics. Goals:

Experiment # 9. Clock generator circuits & Counters. Eng. Waleed Y. Mousa

8-bit Microcontroller. Application Note. AVR134: Real-Time Clock (RTC) using the Asynchronous Timer. Features. Theory of Operation.

MICROPROCESSOR BCA IV Sem MULTIPLE CHOICE QUESTIONS

AVR131: Using the AVR s High-speed PWM. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

GETTING STARTED WITH PROGRAMMABLE LOGIC DEVICES, THE 16V8 AND 20V8

Keil C51 Cross Compiler

Digital Systems Based on Principles and Applications of Electrical Engineering/Rizzoni (McGraw Hill

APPLICATION NOTE. Atmel AVR134: Real Time Clock (RTC) Using the Asynchronous Timer. Atmel AVR 8-bit Microcontroller. Introduction.

Accurate Measurement of the Mains Electricity Frequency

AVR151: Setup and Use of the SPI. Introduction. Features. Atmel AVR 8-bit Microcontroller APPLICATION NOTE

Serial port interface for microcontroller embedded into integrated power meter

Advanced Computer Architecture-CS501. Computer Systems Design and Architecture 2.1, 2.2, 3.2

Chapter 4 System Unit Components. Discovering Computers Your Interactive Guide to the Digital World

DS1307ZN. 64 x 8 Serial Real-Time Clock

Display Board Pulse Width Modulation (PWM) Power/Speed Controller Module

Freescale Semiconductor, Inc. Product Brief Integrated Portable System Processor DragonBall ΤΜ

Controller for AD9850 DDS Modules Andy Talbot G4JNT

Am186ER/Am188ER AMD Continues 16-bit Innovation

Computer Systems Structure Main Memory Organization

Pulse Width Modulation

Microcontrollers in Practice

The Central Processing Unit:

Technical Note. Micron NAND Flash Controller via Xilinx Spartan -3 FPGA. Overview. TN-29-06: NAND Flash Controller on Spartan-3 Overview

Display Message on Notice Board using GSM

1/22/16. You Tube Video. Definitions. Duty Cycle: on-time per period (specified in per cent)

NTE2053 Integrated Circuit 8 Bit MPU Compatible A/D Converter

Small Hardware Development and Prototyping Board for the SX28

(Refer Slide Time: 00:01:16 min)

BIOS and CMOS. Overview. The Function of BIOS. The Bus

Data Acquisition Module with I2C interface «I2C-FLEXEL» User s Guide

Decimal Number (base 10) Binary Number (base 2)

Palaparthi.Jagadeesh Chand. Associate Professor in ECE Department, Nimra Institute of Science & Technology, Vijayawada, A.P.

Chapter 6: From Digital-to-Analog and Back Again

The Motherboard Chapter #5

Introduction the Serial Communications Huang Sections 9.2, 10.2 SCI Block User Guide SPI Block User Guide

Interfacing Of PIC 18F252 Microcontroller with Real Time Clock via I2C Protocol

Hello and welcome to this training module for the STM32L4 Liquid Crystal Display (LCD) controller. This controller can be used in a wide range of

Implementing a Digital Answering Machine with a High-Speed 8-Bit Microcontroller

Central Processing Unit (CPU)

AVR134: Real Time Clock (RTC) using the Asynchronous Timer. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

Using Arduino Microcontrollers to Sense DC Motor Speed and Position

Interrupts and the Timer Overflow Interrupts Huang Sections What Happens When You Reset the HCS12?

[F/T] [5] [KHz] [AMP] [3] [V] 4 ) To set DC offset to -2.5V press the following keys [OFS] [+/-] [2] [.] [5] [V]

Hello, and welcome to this presentation of the STM32L4 reset and clock controller.

AVR1321: Using the Atmel AVR XMEGA 32-bit Real Time Counter and Battery Backup System. 8-bit Microcontrollers. Application Note.

DS1621 Digital Thermometer and Thermostat

Introduction to Microcontrollers

AN3252 Application note

Discovering Computers Living in a Digital World

ATtiny4 / ATtiny5 / ATtiny9 / ATtiny10. Introduction. Feature. Atmel 8-bit AVR Microcontroller with 512/1024 Bytes In-System Programmable Flash

Modeling Sequential Elements with Verilog. Prof. Chien-Nan Liu TEL: ext: Sequential Circuit

Microcontroller Based Low Cost Portable PC Mouse and Keyboard Tester

Computer Performance. Topic 3. Contents. Prerequisite knowledge Before studying this topic you should be able to:

The modular concept of the MPA-3 system is designed to enable easy accommodation to a huge variety of experimental requirements.

Transcription:

Introduction to the ATmega 16 Microcontroller

STK500 Development Board

Description of STK500 A row of eight 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. 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 green area at the top contains the programming 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 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 retention: ti 20 years at 85 C/100 years at 25 C(1) Optional Boot Code Section with Independent Lock Bits In-System Programming by On-chip Boot Program True Read-While-Write Operation Programming Lock for Software Security

complementary metal oxide semiconductor (CMOS)

Memory ROM=Read Only Memory Called nonvolatile because it does not require power to retain memory RAM=Random Access memory Read and write Volatile=loses 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 Use a special box that t shines UV light into window on chip to erase contents. Can take up to 30 minutes. Removing too early results in only partially erased memory No need to ever use this, a relic of the past. EEPROM=electrically erasable programmable ROM Uses a special programming pin (usually uses higher voltage) to erase then write new program. 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 program resides SRAM-this is your scratch pad for intermediate results or anything that you want to save during operation (remember you lose it when power goes). It s also the stack (discussed later). EEPROM permanent storage of data like constants something gyou save during gprogram execution you want to be used during the next run.

Registers Register-a generic term with many meanings. At the top level, it s a group of bits (like a byte). I/O registers are set to configure the microcontroller 1 =Output 0=Input General Purpose Registers are used to perform calculations

Internal Memory Map

Flash and EEPROM Map Line 0 1 byte EEPROM Line 4095 In programming g world, 4K does not equal 4000, it equals 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) 16 bits=2^16=65,536 (0-65,535) =refer to Line 0 1 byte Remember, everything starts with zero. So we have 65,536 elements that range from 0 to 65,535 SRAM 4Kbytes x 8 4095=0xFFF Line 4095

Program Flow A special register called the program counter keeps track of the address in the Flash RAM to be executed. On each clock cycle, that address is decoded and the appropriate values are taken from memory and passed into the Arithmetic Logic Unit (ALU) to be processed. The value to be processed (operands) must come from a special set of 32 registers called the General Purpose Registers. To access SRAM or I/O, they must be brought in/out of the registers.

Atmega 16 Core ( The Brain ) General Purpose Register ( The Interface ) Everything going in/out must touch the registers Program Memory: ( The Planning Center ) ALU: Arithmetic and Logic Unit ( The Calculator ) Input/Output: Eyes, ears, and other senses

Program Counter What element holds the address of the next line to be executed in program memory? The program counter When an interrupt or subroutine occurs, the current address in the program counter is copied into SRAM. The program counter then jumps to the address of the subroutine. When completed, the address in SRAM can be restored to the program counter so that it can jump back. The stack pointer is a special register that contains the address (points to) the location in SRAM where the Program counter address is located. Note: Some microcontrollers use EEPROM for program memory.

Program Counter/Stack Pointer Program Counter (16 bit) 01 00 BD BE 00 01 02 03 04 Program Memory (Flash RAM) Restore Program counter using SP as address to retrieve value from stack Stack Point (16 bit) 10 FE FF Internal Memory (Gen. Purpose Registers, I/O registers, SRAM) 0x0000 0x0001 0x0002 0x0003 0x0004 0x01BD 0x01BE rjmp Main ldi R9, 0xFF ; (main label) ldi R10, 0x34 call MySubroutine;.more code MySubroutine:.subroutine code here Call Subroutine jumps Program counter and stores return address in stack ret ; jump back to Main loop 0x0100 0x0101 00 00 00 00 00 0x10FD 0x10FE 00 04 0x10FF Stack Pointer Initialized

Why the stack pointer? We want to restore a value to the program counter that we stored in SRAM, but where did we put it? The stack pointer gives us the address in SRAM where the Program counter value is saved. If we had a subroutine or interrupt occur within another subroutine, we would shove another program counter value onto the stack (SRAM). The stack pointer allows us to retrace our steps, and exit out of each subroutine in the proper order. The stack pointer can also be written to at any time and allows us to track address in the stack (SRAM) to do other fancy things. 0007 Current Program Counter 0100 About to jump here e 1 byte SRAM 4Kbytes x 8 10FF Stack Pointer 0007 Store Copy here

Timing (the heartbeat) Microprocessors uses oscillator (a quartz crystal) which can produce a constant t square wave to provide the synchronization of everything on the chip. Each rising edge of the square wave allows an operation to take place such as loading instructions, executing instructions, and saving results. Different operations take a different amount of cycles (one period of the square wave). See Instruction set summary for cycles. The oscillator source can be external or internal (on some 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 in a microcontroller happens on the rising or falling edge of a signal. Most components with in the microcontroller allow you to choose which h edge but default is 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) Prescale=8, Divides Timer clock to 125 khz Each Rising (or falling) edge of timer clock increments the timer count If I had only a 3 bit timer (2^3=8 positions), I would overflow at 7 (starts at 0) and wrap back to zero

Why the prescale is so important! For timers, the prescale allows me to set how fast the timer counts and thus the resolution of time that t can be measured For the fastest count, set prescale to 1 (default). The timer will count at the same rate as main clock and have a resolution equal to the period (1/frequency) of the main clock What if I were using an eight bit timer (max count=255, 2^8-1). The counter would quickly fill up and overflow. I may decide to either: Increase prescale so that it counts slower Switch over to a 16 bit timer (max count=65,535) Remember: Timers actually hold a count, but knowing the prescale and main clock, we know what that count means in time. Actual Time= Counts*TimerPeriod TimerPeriod TimerPeriod=MainclockPeriod*prescale

More prescale For devices like the A/D, the prescale will determine how fast you sample (if in freerunning mode). You want to sample fast enough so that you do not alias (refer to Alias lecture). But you may want to not set the prescale too small (too fast sampling) because it wastes power For small systems running on battery power, reduction of power is critical.

Timing Most items have prescalers that divide the frequency of the clock down

I/O ports Input and Output ports are the way the uc interfaces with other components. Each port contains 8 pins. Ports can be input only, output only, or bi-directional. The ATmega has all bi-directional ports. Bi-directional ports means they have the capability to be both, but you must choose one or the other at any given time. The direction of each pin is set through a special register for each port. Several ports have dual functionality. With the proper register setting, they can be used for special operations such as A/D, external interrupts, SPI, etc.

I/O ports Inputs External connections determine pin voltage Outputs Microcontroller sets pin voltage Controlled by three corresponding registers(memory locations) Direction set by Data Direction Register (DDRx) bi-dir. 1 =Output 0=Input Pins are set to be inputs on reset Data Register (PORTx) As an output, write signal here Writing to PORTxwhen a pin is configured as an input turns on internal pull up resistor (will read as logic 1 until pulled low) Port input pins (PINx) Note: read only

Serial communication USART=Universal Synchronous and Asynchronous serial Receiver and Transmitter Serial communication Communicate serially back to a PC SPI=Serial Peripheral Interface Allows us to communicate to other devices using serial data. The SPI controls allow us to enable certain devices, send and receive serial data. Examples of things you might control with SPI: Other microprocessors, external memory, A/D, LCD display, other specialized chips. Advantage of using SPI is that you can control a device with a single pin as opposed to connecting in parallel (using 8 pins to send8bits) bits).

A/D and D/A Analog to Digital Converter Converts analog input signals (typically 0 to 5 volts) to a digital it (binary) representation that the mp can use. The Atmega128 has a 10 bit A/D. That means it can represent our analog voltage with a 10 bit number. So what is our resolution? Resolution=5 volts/2^10=0.0049 0 0049 volts Digital to Analog Converter Allows the mp to specify a voltage with a binary number and then output that analog voltage (like 3.25 volts) Atmega 128 doesn t have one and most mp don t. Most often, we create an analog voltage by using pulse width modulation (PWM). We ll 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. The effective voltage seen by the device is equal to the peak value * the duty cycle (0-1) V effective =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 steady 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 hz 100 Hz (minimum)

PWM

Atmega 16 Circuit Diagram

Status Register Bit 7 I: Global Interrupt Enable Bit 6 T: Bit Copy Storage Bit 5 H: Half Carry Flag Bit 4 S: Sign Bit, S = N V Bit 3 V: Two s Complement Overflow Flag Bit 2 N: Negative Flag Bit 1 Z: Zero Flag Bit 0 C: Carry Flag Must set this to enable interrupts

Interrupts Interrupts are similar to subroutines except that you don t call interrupts, they happen whenever a particular event 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 and the interrupt t routine would be executed. After completion, the reti command (return from interrupt) would load our return location into the program counter where it was stored from the stack. External interrupts have a similar operation except 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. This is easily done with the sei command. Further, you usually will need to clear the GIE when executing an interrupt. Why? Because you don t want another interrupt to interrupt you while executing the first interupt s code. Clearing GIE is done with the cli.