AVR microcontrollers

This is an old revision of this page, as edited by Bb3cxv (talk | contribs) at 16:10, 30 July 2005 (Added logo). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Atmel AVR is a family of RISC microcontrollers from Atmel. The AVR architecture was conceived by two students at the Norwegian Institute of Technology (NTH) and further refined and developed at Atmel Norway, the Atmel daughter company founded by the two chip architects.

File:Atmel avr logo.png

The AVR is a Harvard architecture CPU. It has 32 8-bit registers. Some instructions only operate on a subset of these registers. The concatenated register file, input/output file and data memory make up a unified address space accessed through load/store operations. Unlike the PIC, the stack is located in this unified memory space and isn't strictly limited to a fixed size.

The AVR was designed at the outset for efficient execution of compiled C code. Thus some instructions, such as 'add immediate', are strangely missing (you have to 'subtract immediate' the two's complement instead), while others, such as 'compare with carry', are included.

The AVR instruction set is physically implemented and sold on the market as a number of different controllers, sharing the same AVR core but differing on peripheral / RAM / ROM capabilities: from the Tiny AVR controllers with 1KB flash ROM, no RAM, and 8 pins, up to Mega AVR controllers with 128KB flash ROM, 4KB RAM, 4KB EEPROM, 10 bit ADC with 8 channels, timers, comparators, JTAG, etc. Compatibility across models is preserved to a reasonable degree.

Atmel's AVR controllers have a pipeline with 2 stages (fetch and execute) that allows them to execute most instructions in 1 clock, which makes them relatively fast among the 8-bit controllers on the market.

The AVR instruction set is more regular than most other 8-bit microcontrollers (PIC for example). However, it is not completely orthogonal:

  • Pointer registers X, Y, and Z have addressing capabilities that are different from each other.
  • Register file locations 0...15 have different addressing capabilities than register file locations 16...31.
  • IO locations 0 to 31 have different addressing capabilities than IO locations 32 to 63.
  • CLR affects flags, while SER does not, even though they seem to be complementary intructions (set all bits to 0 and respectively to 1).
  • opcodes 0x95C8 and 0x9004 do exactly the same thing (LPM).

Like the PIC, it has a dedicated hobbyist following (exemplified by the AVRFreaks Internet forum), largely due to the existence of inexpensive/free development tools. The microcontrollers are supported by reasonably priced development boards capable of downloading code to the microcontrollers and by a port of the GNU GCC tools.

The acronym AVR has been reported/rumoured to stand for Advanced Virtual RISC and/or the initials of the two company founders—Alf Egil Bogen and Vegard Wollan—who for their part have chosen to let the matter rest unresolved, giving mostly shadowy answers when asked directly.

See also