AVR Allgemein

Bei den AVR-Mikrocontrollern von früher Atmel / heute Microchip handelt es sich 8-Bit RISC-Prozessoren, deren Kern speziell für die Programmierung mit Hochsprachen wie C optimiert wurde. Innerhalb der AVR-Familie gibt es drei Serien: die klassischen AVRs (AT90Sxxxx), die ATMega und ATtiny. Die Serien unterscheiden sich untereinander im Befehlsumfang und durch die Peripherieeinheiten.

Bei den “klassischen AVRs” handelt es sich um den ursprünglichen AVR-Kern. Die Controller dieser Gruppe sind inzwischen veraltet und werden nicht weiterentwickelt. Für die meisten Controller gibt es aber Ersatztypen aus den anderen Serien.

Die aktuellen Controllerkerne werden in der ATtiny, ATMega- und ATxmega- Familie verwendet. In der ATtiny-Familie sind Controller mit wenigen IO-Pins und kleinem Speicher zusammengefasst. Die AT(x)Mega-Familie enthält entsprechend die “großen” Controllertypen.

Die folgenden Eigenschaften zeichnen die AVR-Controller aus:

  • 8-Bit Risc-Controllerkern
  • maximaler Takt 16 MHz bzw. 20 MHz, ATxmega bis 32Mhz
  • integrierter Flashspeicher: ATtiny 1kB … 8kB, ATMega 4kB … 256kB, ATxmega … 384
  • integriertes RAM: ATtiny 32Byte … 512Byte, ATMega 512Byte … 8kB, ATxmega … 32kByte
  • Varianten der ATMega-Serie mit externen Bus erhältlich
  • verschiedene Peripherieeinheiten integriert, wie
    USART
    10-Bit AD-Wandler,
    Timereinheiten,
    interner EEPROM,
    CAN-Interface usw.
  • interner Oszillator oder externer Taktgenerator (RC oder Quarz) wählbar
  • weiter Betriebsspannungsbereich von 1.8V/2.6V … 5.5V
  • geringe Stromaufnahme
  • neuere ATMega-Typen über JTAG-Interface programmierbar

Die AVR-Controller sind sehr gute Universalcontroller, die sehr viel leistungsfähiger sind als die meisten Controller der PIC und 8051-Familie. Durch die moderne Architektur der AVRs ist die Arbeit mit diesem Controllern auch sehr viel angenehmer als bei den vorher erwähnten Controller-Famillien, da es keine Segmentierung/Banking des Speichers gibt, außer der bei Harvard-Architekturen üblichen Trennung von Daten- und Programmspeicher.

Ein weiterer Vorteil ist, dass für diese Controller auch eine Version des GCC-Compilers (WinAVR) erhältlich ist. Inzwischen wird der Compiler sogar automatisch in die kostenlose Entwicklungsumgebung “Microchip Studio” (ehemals AVR-Studio) von Microchip eingebunden.

Eine weitere kostengünstige Entwicklungsumgebung ist “BasCOM-AVR”. Bei BasCom handelt es sich um einen sehr leistungsfähigen Basic-Compiler, der sich sehr gut für Anfänger im Bereich Mikrocontrollerprogrammierung eignet, weil für die Peripherie bereits Funktionen für Initialisierung und Zugriff vorhanden sind. Neben der Vollversion, die 79- Euro kostet, gibt es auch eine Demo-Version, die voll Funktionsfähig aber auf 2kB Programmcode beschränkt ist.

Die Programmierung des internen Flashspeichers erfolgt durch ein einfaches drei Draht Interface oder die JTAG-Schnittstelle. Für beide Programmierschnittstellen sind sehr einfache Adapter für die parallele Schnittstelle erhältlich, die auch sehr einfach selbst nachgebaut werden können. Weitere Infos zu den Programmiertools und Inferfaces gibt es im AVR-Tips-Bereich.

Vorteilhaft für den Hobbybereich ist außerdem, dass es fast alle AVR-Controllertypen auch noch im DIL-Gehäuse gibt. Dadurch sind diese Controller natürlich sehr gut für Schaltungen auf Lochrasterplatinen geeignet. Für kommerzielle Anwendungen sind aber auch SMD-Varianten, wie TQFP und CSP, lieferbar.

Für den Hobbybereich sind diese Mikrocontroller ideal. Neben den oben aufgeführten Punkten trägt dabei auch die sehr aktive Internet Community aus Hobbybastlern bei, die jede Menge Projekte, Tutorials, Foren usw. zur Verfügung stellt (Siehe auch AVR-Tips). Dadurch ist der Einstieg in diese Controllerfamilie für Anfänger relativ leicht.

Für Einsteiger in den Bereich der Microkontroller und Elektronik ist besonders das Arduino-Projekt interessant, dass eine günstige Entwicklungsplattform zur Verfügung stellt. Die Hardware-Seite besteht aus verschiedenen einfachen Controllermodulen, die über USB vom PC aus programmiert und angesprochen werden können. Die Softwareentwicklung erfolgt in einer integrierten Open Source Entwicklungumgebung, die bereits viele Bibliotheken für die Ansteuerung der Hardware mitbringt. Außerdem gibt es eine große Community, die dieses System einsetzt und unterstützt.

Nachteilig an der AVR-Familie sind einzig die Peripherieeinheiten, die im Vergleich mit den Peripherieeinheiten des MSP430 oder der Fujitsu-Controller, recht einfach gehalten sind. Einerseits ist das sehr schön, weil die Programmierung dadurch erleichtert wird, andererseits sind die Peripherieeinheiten dadurch bei weitem nicht so flexibel einsetzbar. Dies ist aber nur bei speziellen Aufgabenstellungen ein Nachteil.

Ein weiterer Punkt, der zumindest gewöhnungsbedürftig ist, ist das die Einstellungen z.B. welcher Taktgenerator benutzt werden soll über so genannte Fuses festgelegt wird. Diese Fuses können zwar theoretisch beliebig oft neu programmiert werden, allerdings kommt es in der Praxis leicht mal vor, dass man die Fuses falsch setzt. In diesem Fall läuft der Controller dann nicht mehr an und kann dann auch nicht mehr direkt in der Schaltung neuprogrammiert werden. Ein Beispiel für einen solchen Fall ist z.B. wenn der Controller über die Fuses auf einen externen Quarz eingestellt wird und an den entsprechenden Pins kein Quarz angeschlossen ist.

Als “kleines” Beispielprojekt mit einem AVR-Controller befindet sich hinter dem “[AVR-DCF-CLOCK](/de/electronic/avr/avr-dcf-clock “AVR-DCF-Clock”"-Link die Beschreibung für eine (naja, nenne ich es mal) “Designer”-Funkuhr mit LED-Anzeige auf ATMega-Basis.