# Download: 8-bit Microcontroller Application Note AVR201: Using the AVR® Hardware Multiplier

8-bit Microcontroller Application Note Rev. 1631C–AVR–06/02 AVR201: Using the AVR® Hardware Multiplier Features • 8- and 16-bit Implementations • Signed and Unsigned Routines • Fractional Signed and Unsigned Multiply • Executable Example Programs Introduction The megaAVR is a series of new devices in the AVR RISC Microcontroller family that includes, among other new enhancements, a hardware multiplier. This multiplier is capable of multiplying two 8-bit numbers, giving a 16-bit result using only two clock cycles. The multiplier can handle both signed and unsigned integer and fractional numbers...

Author:
Walway Shared: 8/19/19

Downloads: 53 Views: 708

## Content

8-bit

## Microcontroller Application Note

Rev. 1631C–AVR–06/02## AVR201: Using the AVR® Hardware Multiplier Features

• 8- and 16-bit Implementations • Signed and Unsigned Routines • Fractional Signed and Unsigned Multiply • Executable Example Programs## Introduction

The megaAVR is a series of new devices in the AVR RISC Microcontroller family that includes, among other new enhancements, a hardware multiplier. This multiplier is capable of multiplying two 8-bit numbers, giving a 16-bit result using only two clock cycles. The multiplier can handle both signed and unsigned integer and fractional numbers without speed or code size penalty. The first section of this document will give some examples of using the multiplier for 8-bit arithmetic. To be able to use the multiplier, six new instructions are added to the AVR instruction set. These are: • MUL, multiplication of unsigned integers. • MULS, multiplication of signed integers. • MULSU, multiplication of a signed integer with an unsigned integer. • FMUL, multiplication of unsigned fractional numbers. • FMULS, multiplication of signed fractional numbers. • FMULSU, multiplication of a signed fractional number and with an unsigned fractional number. The MULSU and FMULSU instructions are included to improve the speed and code density for multiplication of 16-bit operands. The second section will show examples of how to efficiently use the multiplier for 16-bit arithmetic. The component that makes a dedicated digital signal processor (DSP) specially suit- able for signal processing is the Multiply-Accumulate (MAC) unit. This unit is functionally equivalent to a multiplier directly connected to an Arithmetic Logic Unit (ALU). The megaAVR microcontrollers are designed to give the AVR family the ability to effectively perform the same multiply-accumulate operation. This application note will therefore include examples of implementing the MAC operation. The Multiply-Accumulate operation (sometimes referred to as multiply-add operation) has one critical drawback. When adding multiple values to one result variable, even when adding positive and negative values to some extent cancel each other, the risk of the result variable to OverRun its limits becomes evident, i.e., if adding one to a signed byte variable that contains the value +127, the result will be -128 instead of +128. One solution often used to solve this problem is to introduce fractional numbers, i.e., numbers that are less than 1 and greater than or equal to -1. The final section pre- sents some issues regarding the use of fractional numbers., In addition to the new multiplication instruction, a few other additions and improvements are made to the megaAVR processor core. One improvement that is particularly useful is the new instruction MOVW - Copy Register Word, which makes a copy of one register pair into another register pair. The file “AVR201.asm” contains the application note source code of the 16-bit multiply routines. A listing of all implementations with key performance specifications is given in Table 1. Table 1. Performance Summary 8-bit x 8-bit Routines Word (Cycles) Unsigned multiply8x8= 16 bits 1 (2) Signed multiply8x8= 16 bits 1 (2) Fractional signed/unsigned multiply8x8= 16 bits 1 (2) Fractional signed multiply-accumulate8x8+= 16 bits 3 (4) 16-bit x 16-bit Routines Signed/unsigned multiply 16 x 16 = 16 bits 6 (9) Unsigned multiply 16 x 16 = 32 bits 13 (17) Signed multiply 16 x 16 = 32 bits 15 (19) Signed multiply-accumulate 16 x 16 += 32 bits 19 (23) Fractional signed multiply 16 x 16 = 32 bits 16 (20) Fractional signed multiply-accumulate 16 x 16 += 32 bits 21 (25) Unsigned multiply 16 x 16 = 24 bits 10 (14) Signed multiply 16 x 16 = 24 bits 10 (14) Signed multiply-accumulate 16 x 16 += 24 bits 12 (16) 8-bit Multiplication Doing an 8-bit multiply using the hardware multiplier is simple, as the examples in this section will clearly show. Just load the operands into two registers (or only one for square multiply) and execute one of the multiply instructions. The result will be placed in register pair R0:R1. However, note that only the MUL instruction does not have register usage restrictions. Figure 1 shows the valid (operand) register usage for each of the multiply instructions. Example 1 – Basic Usage The first example shows an assembly code that reads the port B input value and multi- plies this value with a constant (5) before storing the result in register pair R17:R16. in r16,PINB ; Read pin values ldi r17,5 ; Load 5 into r17 mul r16,r17 ; r1:r0 = r17 * r16 movw r17:r16,r1:r0 ; Move the result to the r17:r16 register pair Note the use of the new MOVW instruction. This example is valid for all of the multiply instructions. 2 AVR201,## AVR201

Figure 1. Valid Register Usage## MUL MULS MULSU FMUL

R0 R1 FMULS R2 R3 FMULSU R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R16 R16 R17 R17 R17 R18 R18 R18 R19 R19 R19 R20 R20 R20 R21 R21 R21 R22 R22 R22 R23 R23 R23 R24 R24 R25 R25 R26 R26 R27 R27 R28 R28 R29 R29 R30 R30 R31 R31 Example 2 – Special Cases This example shows some special cases of the MUL instruction that are valid. lds r0,variableA ; Load r0 with SRAM variable A lds r1,variableB ; Load r1 with SRAM variable B mul r1,r0 ; r1:r0 = variable A * variable B lds r0,variableA ; Load r0 with SRAM variable A mul r0,r0 ; r1:r0 = square(variable A) Even though the operand is put in the result register pair R1:R0, the operation gives the correct result since R1 and R0 are fetched in the first clock cycle and the result is stored back in the second clock cycle. Example 3 – Multiply- The final example of 8-bit multiplication shows a multiply-accumulate operation. The accumulate Operation general formula can be written as: c(n) = a(n) × b + c(n – 1) ; r17:r16 = r18 * r19 + r17:r16 in r18,PINB ; Get the current pin value on port B ldi r19,b ; Load constant b into r19 muls r19,r18 ; r1:r0 = variable A * variable B add r16,r0 ; r17:r16 += r1:r0 adc r17,r1 Typical applications for the multiply-accumulate operation are FIR (Finite Impulse Response) and IIR (Infinite Impulse Response) filters, PID regulators and FFT (Fast Fourier Transform). For these applications the FMULS instruction is particularly useful., The main advantage of using the FMULS instruction instead of the MULS instruction is that the 16-bit result of the FMULS operation always may be approximated to a (well- defined) 8-bit format. This is discussed further in the “Using Fractional Numbers” section. 16-bit Multiplication The new multiply instructions are specifically designed to improve 16-bit multiplication. This section presents solutions for using the hardware multiplier to do multiplication with 16-bit operands. Figure 2 schematically illustrates the general algorithm for multiplying two 16-bit num- bers with a 32-bit result (C = A • B). AH denotes the high byte and AL the low byte of the A operand. CMH denotes the middle high byte and CML the middle low byte of the result C. Equal notations are used for the remaining bytes. The algorithm is basic for all multiplication. All of the partial 16-bit results are shifted and added together. The sign extension is necessary for signed numbers only, but note that the carry propagation must still be done for unsigned numbers. Figure 2. 16-bit Multiplication, General Algorithm## AH AL X BH BL

(sign ext) AL * BL + (signext) AL * BH + (signext) AH * BL + AH * BH = CH CMH CML CL 16-bit x 16-bit = 16-bit This operation is valid for both unsigned and signed numbers, even though only the## Operation unsigned multiply instruction (MUL) is needed. This is illustrated in Figure 3. A mathe-

matical explanation is given: When A and B are positive numbers, or at least one of them is zero, the algorithm is clearly correct, provided that the product C = A • B is less than 216 if the product is to be used as an unsigned number, or less than 215 if the product is to be used as a signed number. When both factors are negative, the two’s complement notation is used; A = 216 - |A| and B = 216 - |B|: C = A • B = (216 - |A|) • (216 - |B|) = |A • B| + 232 - 216 • (|A| + |B|) 4 AVR201,## AVR201

Here we are only concerned with the 16 LSBs; the last part of this sum will be discarded and we will get the (correct) result C = |A • B|. Figure 3. 16-bit Multiplication, 16-bit Result## AH AL X BH BL AL * BL 1

+ AL * BH 2 + AH * BL 3 = CH CL When one factor is negative and one factor is positive, for example, A is negative and B is positive: C = A • B = (216 - |A|) • |B| = (216 • |B|) - |A • B| = (216 - |A • B|) + 216 • (|B| - 1) The MSBs will be discarded and the correct two’s complement notation result will be C = 216 - |A • B|. The product must be in the range 0 ≤ C ≤ 216 - 1 if unsigned numbers are used, and in the range -215 ≤ C ≤ 215 - 1 if signed numbers are used. When doing integer multiplication in C language, this is how it is done. The algorithm can be expanded to do 32-bit multiplication with 32-bit result., 16-bit x 16-bit = 24-bit The routine’s functionality is illustrated in Figure 4. For the 24-bit version of the multipli-## Operation cation routines, the result is present in registers r18:r17:r16. The algorithm gives correct

results provided that the product C = A • B is less than 224 when using unsigned multipli- cation, and less than ±223 when using signed multiplication. Figure 4. 16-bit Multiplication, 24-bit Result## AH AL X BH BL AH * BH 1 AL * BL 2

+ AH*BL 3 + BH*AL 4 = CH CM CL 16-bit x 16-bit = 32-bit## Operation

Example 4 – Basic Usage 16- Below is an example of how to call the 16 x 16 = 32 multiply subroutine. This is also bit x 16-bit = 32-bit Integer illustrated in Figure 5. Multiply ldi R23,HIGH(672) ldi R22,LOW(672) ; Load the number 672 into r23:r22 ldi R21,HIGH(1844) ldi R20,LOW(184) ; Load the number 1844 into r21:r20 call mul16x16_32 ; Call 16bits x 16bits = 32bits multiply routine Figure 5. 16-bit Multiplication, 32-bit Result## AH AL X BH BL

(sign ext) AL * BH 3 + (signext) AH * BL 4 + AH * BH AL * BL 1 + 2 = CH CMH CML CL 6 AVR201,## AVR201

The 32-bit result of the unsigned multiplication of 672 and 1844 will now be in the regis- ters R19:R18:R17:R16. If “muls16x16_32” is called instead of “mul16x16_32”, a signed multiplication will be executed. If “mul16x16_16” is called, the result will only be 16 bits long and will be stored in the register pair R17:R16. In this example, the 16-bit result will not be correct. 16-bit Multiply- Figure 6. 16-bit Multiplication, 32-bit Accumulated Result accumulate Operation## AH AL X BH BL

(sign ext) AL * BL + (signext) AL * BH + (signext) AH * BL + AH * BH + CH CMH CML CL ( Old ) = CH CMH CML CL ( New ),## Using Fractional Unsigned 8-bit fractional numbers use a format where numbers in the range [0, 2> are Numbers allowed. Bits 6 - 0 represent the fraction and bit 7 represents the integer part (0 or 1),

i.e., a 1.7 format. The FMUL instruction performs the same operation as the MUL instruction, except that the result is left-shifted 1-bit so that the high byte of the 2-byte result will have the same 1.7 format as the operands (instead of a 2.6 format). Note that if the product is equal to or higher than 2, the result will not be correct. To fully understand the format of the fractional numbers, a comparison with the integer number format is useful: Table 2 illustrates the two 8-bit unsigned numbers formats. Signed fractional numbers, like signed integers, use the familiar two’s complement for- mat. Numbers in the range [-1, 1> may be represented using this format. If the byte “1011 0010” is interpreted as an unsigned integer, it will be interpreted as 128 + 32 + 16 + 2 = 178. On the other hand, if it is interpreted as an unsigned fractional number, it will be interpreted as 1 + 0.25 + 0.125 + 0.015625 = 1.390625. If the byte is assumed to be a signed number, it will be interpreted as 178 - 256 = -122 (integer) or as 1.390625 - 2 = -0.609375 (fractional number). Table 2. Comparison of Integer and Fractional Formats Bit Number7654Unsigned integer bit 27 = 128 26 = 64 25 = 32 24 = 16 significance Unsigned fractional 20 = 1 2-1 = 0.5 2-2 = 0.25 2-3 = 0.125 number bit significance Bit Number3210Unsigned integer bit 23 = 8 22 = 4 21 = 2 20 = 1 significance Unsigned fractional 2-4 = 0.0625 2-5 = 0.3125 2-6 = 0.015625 2-7 = 0.0078125 number bit significance Using the FMUL, FMULS, and FMULSU instructions should not be more complex than the MUL, MULS and MULSU instructions. However, one potential problem is to assign fractional variables right values in a simple way. The fraction 0.75 (= 0.5 + 0.25) will, for example, be “0110 0000” if eight bits are used. To convert a positive fractional number in the range [0, 2> (for example 1.8125) to the format used in the AVR, the following algorithm, illustrated by an example, should be used: Is there a “1” in the number? Yes, 1.8125 is higher than or equal to 1. Byte is now “1xxx xxxx” Is there a “0.5” in the rest? 0.8125/0.5 = 1.625 Yes, 1.625 is higher than or equal to 1. Byte is now “11xx xxxx” Is there a “0.25” in the rest? 0.625/0.5 = 1.25 Yes, 1.25 is higher than or equal to 1. Byte is now “111x xxxx” 8 AVR201,## AVR201

Is there a “0.125” in the rest? 0.25/0.5 = 0.5 No, 0.5 is lower than 1. Byte is now “1110 xxxx” Is there a “0.0625” in the rest? 0.5/0.5 = 1 Yes, 1 is higher than or equal to 1. Byte is now “1110 1xxx” Since we do not have a rest, the remaining three bits will be zero, and the final result is “1110 1000”, which is 1 + 0.5 + 0.25 + 0.0625 = 1.8125. To convert a negative fractional number, first add two to the number and then use the same algorithm as already shown. 16-bit fractional numbers use a format similar to that of 8-bit fractional numbers; the high eight bits have the same format as the 8-bit format. The low eight bits are only an increase of accuracy of the 8-bit format; While the 8-bit format has an accuracy of ±2-8, the16-bit format has an accuracy of ±2-16. Then again, the 32-bit fractional numbers are an increase of accuracy to the 16-bit fractional numbers. Note the important difference between integers and fractional numbers when extra byte(s) are used to store the num- ber: while the accuracy of the numbers is increased when fractional numbers are used, the range of numbers that may be represented is extended when integers are used. As mentioned earlier, using signed fractional numbers in the range [-1, 1> has one main advantage to integers: when multiplying two numbers in the range [-1, 1>, the result will be in the range [-1, 1], and an approximation (the highest byte(s)) of the result may be stored in the same number of bytes as the factors, with one exception: when both fac- tors are -1, the product should be 1, but since the number 1 cannot be represented using this number format, the FMULS instruction will instead place the number -1 in R1:R0. The user should therefore assure that at least one of the operands is not -1 when using the FMULS instruction. The 16-bit x 16-bit fractional multiply also has this restriction. Example 5 – Basic Usage 8-bit This example shows an assembly code that reads the port B input value and multiplies x 8-bit = 16-bit Signed this value with a fractional constant (-0.625) before storing the result in register pair Fractional Multiply R17:R16. in r16,PINB ; Read pin values ldi r17,$B0 ; Load -0.625 into r17 fmuls r16,r17 ; r1:r0 = r17 * r16 movw r17:r16,r1:r0 ; Move the result to the r17:r16 register pair Note that the usage of the FMULS (and FMUL) instructions is very similar to the usage of the MULS and MUL instructions., Example 6 – Multiply- The example below uses data from the ADC. The ADC should be configured so that the accumulate Operation format of the ADC result is compatible with the fractional two’s complement format. For the ATmega83/163, this means that the ADLAR bit in the ADMUX I/O register is set and a differential channel is used. (The ADC result is normalized to one.) ldi r23,$62 ; Load highbyte of fraction 0.771484375 ldi r22,$C0 ; Load lowbyte of fraction 0.771484375 in r20,ADCL ; Get lowbyte of ADC conversion in r21,ADCH ; Get highbyte of ADC conversion call fmac16x16_32 ;Call routine for signed fractional multiply accumulate The registers R19:R18:R17:R16 will be incremented with the result of the multiplication of 0.771484375 with the ADC conversion result. In this example, the ADC result is treated as a signed fraction number. We could also treat it as a signed integer and call it “mac16x16_32” instead of “fmac16x16_32”. In this case, the 0.771484375 should be replaced with an integer.## Comment on All 16-bit x 16-bit = 32-bit functions implemented here start by clearing the R2 register, Implementations which is just used as a “dummy” register with the “add with carry” (ADC) and “subtract

with carry” (SBC) operations. These operations do not alter the contents of the R2 regis- ter. If the R2 register is not used elsewhere in the code, it is not necessary to clear the R2 register each time these functions are called, but only once prior to the first call to one of the functions. 10 AVR201,## Atmel Headquarters Atmel Operations Corporate Headquarters Memory RF/Automotive

2325 Orchard Parkway 2325 Orchard Parkway Theresienstrasse 2 San Jose, CA 95131 San Jose, CA 95131 Postfach 3535 TEL 1(408) 441-0311 TEL 1(408) 441-0311 74025 Heilbronn, Germany FAX 1(408) 487-2600 FAX 1(408) 436-4314 TEL (49) 71-31-67-0 FAX (49) 71-31-67-2340## Europe Microcontrollers

Atmel Sarl 2325 Orchard Parkway 1150 East Cheyenne Mtn. Blvd. Route des Arsenaux 41 San Jose, CA 95131 Colorado Springs, CO 80906 Case Postale 80 TEL 1(408) 441-0311 TEL 1(719) 576-3300 CH-1705 Fribourg FAX 1(408) 436-4314 FAX 1(719) 540-1759 Switzerland TEL (41) 26-426-5555 La Chantrerie Biometrics/Imaging/Hi-Rel MPU/ FAX (41) 26-426-5500 BP 70602 High Speed Converters/RF Datacom 44306 Nantes Cedex 3, France Avenue de Rochepleine## Asia TEL (33) 2-40-18-18-18 BP 123

Room 1219 FAX (33) 2-40-18-19-60 38521 Saint-Egreve Cedex, France Chinachem Golden Plaza TEL (33) 4-76-58-30-00 77 Mody Road Tsimhatsui ASIC/ASSP/Smart Cards FAX (33) 4-76-58-34-80 East Kowloon Zone Industrielle Hong Kong 13106 Rousset Cedex, France TEL (852) 2721-9778 TEL (33) 4-42-53-60-00 FAX (852) 2722-1369 FAX (33) 4-42-53-60-01## Japan 1150 East Cheyenne Mtn. Blvd.

9F, Tonetsu Shinkawa Bldg. Colorado Springs, CO 80906 1-24-8 Shinkawa TEL 1(719) 576-3300 Chuo-ku, Tokyo 104-0033 FAX 1(719) 540-1759 Japan TEL (81) 3-3523-3551 Scottish Enterprise Technology Park FAX (81) 3-3523-7581 Maxwell Building East Kilbride G75 0QR, Scotland TEL (44) 1355-803-000 FAX (44) 1355-242-743 e-mail email is hidden## Web Site

http://www.atmel.com © Atmel Corporation 2002. Atmel Corporation makes no warranty for the use of its products, other than those expressly contained in the Company’s standard warranty which is detailed in Atmel’s Terms and Conditions located on the Company’s web site. The Company assumes no responsibility for any errors which may appear in this document, reserves the right to change devices or specifications detailed herein at any time without notice, and does not make any commitment to update the information contained herein. No licenses to patents or other intellectual property of Atmel are granted by the Company in connection with the sale of Atmel products, expressly or by implication. Atmel’s products are not authorized for use as critical components in life support devices or systems. ATMEL® and AVR® are the registered trademarks of Atmel. Other terms and product names may be the trademarks of others. Printed on recycled paper. 1631C–AVR–06/02 0M]15

## Similar documents

8-bit Microcontroller Application Note Rev. 2546A–AVR–09/03 AVR105: Power Efficient High Endurance Parameter Storage in Flash Memory Features • Fast Storage of Parameters • High Endurance Flash Storage – 350K Write Cycles • Power Efficient Parameter Storage • Arbitrary Size of Parameters • Semi-redu

8-bit RISC Microcontoller Application Note Rev. 2505A–AVR–02/02 AVR130: Setup and Use the AVR® Timers Features • Description of Timer/Counter Events • Timer/Counter Event Notification • Clock Options • Example Code for Timer0 – Overflow Interrupt • Example Code for Timer1 – Input Capture Interrupt •

8-bit RISC Microcontroller Application Note Rev. 2585A–AVR–11/04 AVR151: Setup And Use of The SPI Features • SPI Pin Functionality • Multi Slave Systems • SPI Timing • SPI Transmission Conflicts • Emulating the SPI • Code examples for Polled operation • Code examples for Interrupt Controlled operati

AVR241: Direct driving of LCD display using general IO Features • Software driver for displays with one common line • Suitable for parts without on-chip hardware for LCD driving • Control up to 15 segments using 16 IO lines • Fully interrupt driven operation Introduction As a low power alternative t

8-bit Microcontroller Application Note Rev. 0938B–AVR–01/03 AVR204: BCD Arithmetics Features • Conversion 16 Bits ↔ 5 Digits, 8 Bits ↔ 2 Digits • 2-digit Addition and Subtraction • Superb Speed and Code Density • Runable Example Program Introduction This application note lists routines for BCD arith

8-bit Microcontroller Application Note Rev. 2530B–AVR–01/04 AVR065: LCD Driver for the STK502 and AVR Butterfly Features • Software Driver for Alphanumeric Characters • Liquid Crystal Display (LCD) Contrast Control • Interrupt Controlled Updating • Conversion of ASCII to LCD Segment Control Codes (S

8-bit Instruction Set Rev. 0856D–AVR–08/02 Instruction Set Nomenclature Status Register (SREG) SREG: Status Register C: Carry Flag Z: Zero Flag N: Negative Flag V: Two’s complement overflow indicator S: N ⊕ V, For signed tests H: Half Carry Flag T: Transfer bit used by BLD and BST instructions I: Gl

AVR079: STK600 Communication Protocol Features 8-bit • Supported Commands and Command options • Command and Answer package formats Microcontrollers 1 Introduction Application Note This document describes the STK®600 protocol. The firmware is distributed with AVR Studio® 4.14 or later. The definition

8-bit Instruction Set Rev. 0856G–AVR–07/08 Instruction Set Nomenclature Status Register (SREG) SREG: Status Register C: Carry Flag Z: Zero Flag N: Negative Flag V: Two’s complement overflow indicator S: N ⊕ V, For signed tests H: Half Carry Flag T: Transfer bit used by BLD and BST instructions I: Gl

Designer’s Designing for Efficient Production Corner with In-System Re-programmable Flash µCs By: OJ Svendlsi always the component where the majority of the engi- neering hours are spent. Thus, making sure the micro- For products where time-to-market and efficient pro- controller has what it takes t

AVR069: AVRISP mkII Communication Protocol Features • General commands • ISP commands • Return values • Parameters 1 Introduction This document describes the AVRISP mkII protocol. The firmware is distributed with AVR Studio 4.12 or later. Download the latest AVR Studio from the Atmel web site, http:

MICROCONTROLLERSStudio® Integrated Development A COMPLETE SOFTWARE ENVIRONMENT TO Environment DEVELOP AVR® APPLICATIONS. IT’S FREE! AVR Studio® is an Integrated Development Environment for writing and debugging AVR applications in Windows® 98/XP/ME/2000 and Windows NT® environments. AVR Studio provi

Hexadecimal Object File Format Specification Revision A January 6, 1988 This specification is provided "as is" with no warranties whatsoever, including any warranty of merchantability, noninfringement, fitness for any particular purpose, or any warranty otherwise arising out of any proposal, specifi

AVR914: CAN & UART based Bootloader for AT90CAN32, AT90CAN64, & AT90CAN128 1. Features • UART Protocol 8-bit – UART used as Physical Layer – Based on the Intel Hex-type records Microcontrollers – Auto-baud • CAN Protocol – CAN used as Physical Layer Application Note – 7 re-programmable ISP CAN ident

AVR Microcontrollers Application Note AVR495: AC Induction Motor Control Using the Constant V/f Principle and a Space-vector PWM Algorithm 1. Features • Cost-effective and energy efficient 3-phase induction motor drive • Interrupt driven • Low memory and computing requirements 2. Introduction In a p

AVR Microcontrollers Application Note AVR494: AC Induction Motor Control Using the constant V/f Principle and a Natural PWM Algorithm 1. Features • Cost-effective and flexible 3-phase induction motor drive • Interrupt driven • Low memory and computing requirements 2. Introduction Electrical power ha

AVR465: Single-Phase Power/Energy Meter with Tamper Detection Features • Cost-Effective and Flexible Single-Phase Energy Meter • Fulfills IEC 61036 Accuracy Requirements for Class 1 Meters • Detects, Signals and Continues to Measure Accurately Under At Least 20 Different Tamper Conditions • Design E

AVR453: Smart Battery Reference Design Features • Support for up to 4 Li-Ion series-connected battery cells • Battery protection by dedicated Hardware - Deep under voltage protection - Over-current protection during charging - Over-current protection during discharging - Short circuit protection • C

8-bit Microcontroller Application Note Rev. 1659B–AVR–11/02 AVR450: Battery Charger for SLA, NiCd, NiMH and Li-Ion Batteries Features • Complete Battery Charger Design • Modular “C” Source Code and Extremely Compact Assembly Code • Low Cost • Supports Most Common Battery Types • Fast Charging Algori

Getting started with the AVR battery charger reference design. The AVR battery charger reference design is designed for use with several types of batteries and various number of battery cells. The AVR battery charger reference design is supplied with resistor values for scaling down the charge volta

8-bit Microcontroller Application Note Rev. 2534A–AVR–05/03 AVR415: RC5 IR Remote Control Transmitter Features • Utilizes ATtiny28 Special HW Modulator and High Current Drive Pin • Size Efficient Code, Leaves Room for Large User Code • Low Power Consumption through Intensive Use of Sleep Modes • Cos

AVR336: ADPCM Decoder Features • AVR Application Decodes ADPCM Signal in Real-Time • Supports Bit Rates of 16, 24, 32 and 40 kbit/s • More Than One Minute Playback Time on ATmega128 (at 16 kbit/s) • Decoded Signal Played Using Timer/Counter in PWM Mode 1 Introduction Adaptive Differential Pulse Code

8-bit Microcontroller Application Note Rev. 1181B–AVR–04/03 AVR360: Step Motor Controller Features • High-speed Step Motor Controller • Interrupt Driven • Compact Code (Only 10 Bytes Interrupt Routine) • Very High Speed • Low Computing Requirement • Supports all AVR Devices Introduction This applica

8-bit RISC Microcontroller Application Note Rev. 1456B–01/04 AVR335: Digital Sound Recorder with AVR and Serial DataFlash Features • Digital Voice Recorder • 8-bit Sound Recording • 8 KHz Sampling Rate • Sound Frequency up to 4000 Hz • Maximum Recording Time 2 1/4 Minutes • Very Small Board Size • O

USB in a Nutshell. Making Sense of the USB Standard. Starting out new with USB can be quite daunting. With the USB 2.0 specification at 650 pages one could easily be put off just by the sheer size of the standard. This is only the beginning of a long list of associated standards for USB. There are U

What is USB Enumeration? Enumeration is the process by which a USB device is attached to a system and is assigned a specific numerical address that will be used to access that particular device. It is also the time at which the USB host controller queries the device in order to decide what type of d

CYCLIC REDUNDANCY CHECKS IN USB Introduction The USB specification calls for the use of Cyclic Redundancy Checksums (CRC) to protect all non-PID fields in token and data packets from errors during transmission. This paper describes the mathematical basis behind CRC in an intuitive fashion and then e