1 Einführung, AVR®-Hardware
Dieses Buch behandelt die Entwicklung elektronischer Schaltungen, denen ein Mikrocontroller (MCU) aus der megaAVR®-Familie, einer Reihe von 8bit-MCUs der Firma Atmel®, zugrundeliegt, und zwar der Typ ATmega16. Diese Wahl richtete sich nach folgenden Überlegungen:
– | Der ATmega16 ist ein typischer Vertreter der „mittelgroßen“ 8 bit-AVR-MCUs. |
– | Er ist einfach und günstig zu beschaffen und auch im DIL-Gehäuse erhältlich, sodaß er einfach für Testaufbauten auf Breadboards verwendet werden kann. |
– | Er verfügt über die Hardware-Baugruppen der megaAVR-Reihe, insbesondere über serielle Schnittstellen wie USART, SPI und TWI sowie Analog-Digital- Wandler. |
– | Er ist der kleinste Typ, der eine JTAG-Schnittstelle zum On-Chip-Debugging aufweist. |
– | Er verfügt über so viele Portpins, daß Testschaltungen nur selten komplett umgebaut werden müssen, wenn Sie rasch zwischen Projekten wechseln wollen. Aufgrund der Pinanzahl müssen wir nicht auf komplizierte Weise „übriggebliebene“ Einzelpins zu Pseudo-8 bit-Ports zusammenfügen, um Peripherie anzusteuern, da wir für jedes Beispiel einen oder zwei komplette 8 bit-Ports zur Verfügung haben. |
Das Buch stellt weder eine Einführung in die Programmierung allgemein, noch in die C- oder Assemblerprogrammierung dar, sondern soll erfahrenen Programmierern als kompakter Einstieg in die Welt der AVR-Mikrocontroller dienen. Vorkenntnisse in C und einer Assemblersprache sind daher ebenso wie elektronische Grundlagen und Kenntnisse von Prozessorarchitekturen hilfreich. In diesem Kapitel werden zunächst der innere Aufbau und die elektrischen Eigenschaften des ATmega16 behandelt. Das nächste Kapitel befaßt sich mit der Programmierung der MCU in C und Assembler im allgemeinen. Die einzelnen Baugruppen werden in den nachfolgenden Kapiteln beschrieben.
Atmel®, AVR®, AVR Studio®, megaAVR®, tinyAVR®, XMEGA®sind eingetragene Marken oder Warenzeichen der Atmel Corporation oder ihrer Tochtergesellschaften. SPI™ ist ein Warenzeichen von Motorola. Weitere, evt. nicht gekennzeichnete Marken, Produktnamen, Servicenamen oder Warenzeichen sind Eigentum der jeweiligen Inhaber. Aus dem Fehlen einer Kennzeichnung bei diesen und anderen Begriffen kann keine freie Verwendbarkeit abgeleitet werden.
Einige Abbildungen, speziell die Timingdiagramme, können unter http://www.degruyter.com/view/ product/449202 zur besseren Lesbarkeit als Graphikdateien in hoher Auflösung heruntergeladen werden.
Sie können mit dem hier vermittelten Wissen leicht auf andere megaAVR-Typen umsteigen, die auf Ihr Projekt besser passen. Sie müssen jedoch zuvor das Datenblatt des ins Auge gefaßten Typs konsultieren, um das richtige Pinlayout und die Aufteilung der I/O-Register zu erfahren. Im großen und ganzen sind die Kontrollregister und -bits zwar ähnlich, aber nicht bitgleich.
Der Umstieg auf die kleinen Typen der tinyAVR-Reihe ist nicht so ohne weiteres möglich, da diese nur über eingeschränkte Hardwareunterstützung für Funktionen wie ADC, synchrone serielle Schnittstellen oder TWI verfügen. Meist besitzen sie eine Multifunktions-Baugruppe zur Datenübertragung, mit deren Hilfe Sie softwaregestützt die notwendigen Protokolle implementieren können. Ebenfalls nicht beschrieben sind Funktionen derXMEGA-Typen wie USB- oder CAN-Bus-Unterstützung.
Alle Informationen in diesem Buch wurden mit größter Sorgfalt zusammengetragen und überprüft. Dennoch sind Fehler nicht auszuschliessen, und die Übernahme oder Benutzung von Quellcode und Verfahren erfolgen ohne Gewähr und auf eigene Verantwortung.
1.1 Aufoau der AVR-MCU
Die wichtigste Referenz zur Hardware des ATmega16 ist das Datenblatt [1]. In [9] finden Sie eine ausführliche Beschreibung des Befehlssatzes auf Maschinenspracheebene. Der ATmega16 wird in den Gehäuseformen PDIP-40, TQFP-44 und QFN/MLF-44 geliefert, Abb. 1.1 zeigt das Pinlayout des für Experimente auf einem Breadboard besonders geeigneten PDIP-40-Gehäuses.
Abb. 1.1. Pin-Layout des ATmega16 im PDIP40-Gehäuse.
1.1.1 Prozessorregister
Die ATmega16-MCU verfügt wie alle 8 bit-MCUs von Atmel über 32 allgemein verwendbare 8bit-Register, die R0–R31 genannt werden. Die Registerpaare R27:R26, R29:R28 und R31:R30 (High-Byte/Low-Byte) können zu den drei 16 bit-Registern X, Y und Z kombiniert werden, die als Zeiger ins SRAM dienen, das Z-Register zusätzlich als Zeiger ins Flash-ROM. Zusätzlich zu diesen Registern gibt es den 13 bit-Programmzähler PC und den 10 bit-Stackpointer SP sowie das Statusregister SREG.
Die allgemeinen Register sind in weiten Bereichen gegeneinander austauschbar, eine wichtige Sonderstellung stellt jedoch die Gruppe der Register R16–R31 dar. Diese können im „immediate address mode“ benutzt werden, d. h. Sie können bei den Instruktionen ldi, andi, ori, subi, sbci, cpi, ser, sbr und cbr Konstanten angeben. Weiterhin arbeiten einige Instruktionen wie muls und mulsu nur mit Registern aus diesem Bereich.
1.1.2 Statusregister, Statusbits
Das Statusregister SREG enthält acht Bits oder Flags, die Informationen über die zuletzt ausgeführte Instruktion bzw. das Resultat der letzten arithmetischen oder logischen Operation speichern. Der Einfluß der verschiedenen Instruktionen ist in [9] detailliert dargestellt. Die einzelnen Bits können als Bedingung für Sprungbefehle genutzt werden; da sie bei allen ALU-Operationen aktualisiert werden, können Sie oft ohne explizite Vergleichsoperationen Entscheidungen über Programmverzweigungen aufgrund geeigneter Flags fällen lassen. Im einzelnen stehen folgende Flags zur Verfügung:
– | Das I-Flag ist das globale Interruptflag, mit dem Interrupts grundsätzlich erlaubt werden. Über dieses Flag hinaus müssen Sie jeden gewünschten Interrupt individuell über ein Bit im Kontrollregister der betreffenden Baugruppe aktivieren. Ist das I-Bit 0, werden keine der individuell aktivierte... |