AVR Internas - Dem AVR ins Innerstes geschaut
Speicherstruktur des ATmega 8
Will man Mikrokontroller programmieren, so benötigt dieser Mikrokontroller diverse Möglichkeiten der Datenspeicherung. Die einfachste Form des Mikroprozessors besitzt einen Programmspeicher, in dem steht was dieser tun soll, und ein oder mehrere Register um Daten zu verknüpfen, berechnen und zu vergleichen.
Natürlich hat dieser AVR auch Programmspeicher welcher hier komfortabel als Flash-Speicher ausgeführt ist, welches man bequem mit ISP programmieren kann. Der Programmspeicher beim ATmega 8 besitzt eine Größe von 8 kByte und ist ausreichend um schon recht komplexe Anwendungen zu erstellen. Neben dem Flash besitzt der ATmega auch noch 1 kByte internes RAM. Dies ist schon eine Besonderheit. Bei vielen anderen Prozessoren muss der Arbeitsspeicher noch mit externen ICs zugerüstet werden. 1 kByte mag sich nicht viel anhören, aber für viele Anwendungen, z.B. kleinere Steuerungen, ist dies vollkommen ausreichend. Hat man einige Daten, welche selten geändert werden, wie z.B. bestimmte Programmeinstellungen, so bietet der AVR auch gleich ein eingebautes EEPROM, beim ATmega 8 mit 512 Byte, an. Zu guter letzt, findet man bei den AVR den IO-Bereich. Hier findet man sämtliche Ports, Hardware-Funktionen, die Steuerung fürs EEPROM etc. pp. Je nachdem auf welche Speicheradresse man hier zugreift, kann man z.B. die einzelnen Ports setzen, Daten an die serielle Schnittstelle senden oder Parameter aus dem EEPROM lesen. Die Grafik zeigt nur den Aufbau des, hier verwendeten, ATmega 8. Die anderen Mitglieder der AVR-Familie haben meist etwas Speichergrößen. Von der Struktur sind sie aber ziemlich gleich. |
Die Register des AVR
Damit der Prozessor überhaupt arbeiten kann, wird, neben dem Speicher, auch noch Register benötigt, mit denen der Prozessor Berechnungen usw. durchführen kann. Bei vielen Prozessoren ist es der so genannte Akkumulator. Beim PC nennt sich der Akku z.B. AH-Register, einfach nur A heißt der Akku bei der Z80-Familie. Dies ist nicht eindeutig festgelegt.
Die Register r0-r15 sind als Akku weniger geeignet, da diese nur indirekt beschrieben werden können. Was dies genau bedeutet, wird in späteren Lehrgängen noch geklärt. Diese Register kann man aber sehr gut dazu nutzen, um z.B. Zähler, Statuswerte etc. aufzunehmen. Hierdurch spart man unter Umständen wieder einige Bytes an RAM-Speicherplatz. Den Registern r26-r31 kommen noch eine besondere Funktion zu. Obwohl diese wie normale Register verwendet werden können, stellen sie auch gleichzeitig die so genannten Indexregister dar. Diese Indexregister werden benötigt um z.B. auf SRAM zuzugreifen, größere 16 Bit-Zähler zu implementieren oder einfache 16 Bit Operationen auszuführen. Man kann auf die Indexregister einzeln zugreifen und hat dann je 8 Bit. Einige Assemblerbefehle nutzen die Indexregister mit den kompletten 16 Bit. Dem Indexregister Z kommt noch eine spezielle Aufgabe zu. Dieses wird benötigt, wenn Daten aus dem Flash ausgelesen werden soll, oder man in eine Sprungtabelle springen möchte. |