Wer sich ernsthafter mit Mikrocontrollern befassen möchte und bereits Erfahrung mit der BASIC STAMP, dem Propeller Controller oder Arduino UNO, vielleicht auch dem Raspberry Pi gesammelt hat, sollte hier einsteigen.
Man erfährt hier mehr über ihre innere Struktur, warum sie so arbeiten, wie sie es tun und ist nicht mehr auf fremde Bibliotheken angewiesen, wenn es um die Steuerung bestimmter Bauteile geht.
Programmiert wird vorrangig in ASSEMBLER. Die Möglichkeiten von AVR Studio, quasi hinter die Kulissen eines Programmes zu schauen, werden genutzt und gezeigt. Dazu wird auch ein AVR-Simulator (kostenpflichtig) der Fa. OShonSoft eingesetzt.
Als Energiequelle eignet sich auch - falls vorhanden - jedes Controller-Board mit herausgeführten Buchsen über +5V bzw. +3,3V und Masse.
In diesem Kapitel wird ausschließlich mit einem STK200 Board und AVR Studio 4.19 gearbeitet. Das Board besticht durch seinen günstigen Preis und die auf der Platine vorinstallierten Elemente (Taster, LEDs, Potentiometer, ADC etc.). Darüberhinaus lassen sich alle hier eingesetzten AVR-Controller über das Board ansprechen. Zusätzlich wird ein Schaltnetzteil von 9V DC, 800 mA benutzt.
AVR Studio in der Version 4.19 wurde deshalb gewählt, weil es schnell und nicht so überfrachtet ist, wie die neueste Studioversion aus dem Hause ATMEL. Es ist kostenfrei aus dem Internet herunterladbar und muss für die Durchführung der Übungen auf einem PC oder Laptop installiert sein. Gleiches gilt für den ISP2-Programmer.
In einer ersten Übung wird ein sehr einfaches Assemblerprogramm geschrieben, das nur eine bestimmte LED auf der Bargraf-Anzeige des STK200 einschaltet. Das kurze Programm dient dazu, sich mit der Oberfläche von AVR Studio vertraut zu machen, den Workflow kennenzulernen und mit Begriffen wie OP-Code, Fetch und Execute Zyklus sowie Stromsenke und Stromquelle etwas mehr anfangen zu können.
Die IDE des AVR Simulators zeigt Abb. 1.
Grundausstattung für alle Übungen | |
Hardware |
|
Software |
|
4A - Was man wissen sollte - Schreibweise von Zahlen
Bei der Darstellung von Zahlen muss das zugrunde liegende Zahlsystem (binär, hexadezimal, dezimal, ...) angegeben werden. Durchgesetzt haben sich verschiedene Schreibweisen:
Zahlsystem | Schreibweisen | Präfix/Suffix |
Binärsystem (2-er System) |
0b00011010 %00011010 00011010b |
Präfix Präfix Suffix |
Hexadezimalsystem (16-er System) |
0x0A $0A 0Ah |
Präfix Präfix Suffix |
Dezimalsystem (10-er System) | 10010 | - |
4B - Was man wissen sollte - Speicher in einem AVR-Controller
AVR Controller verfügen über drei verschiedene Arten von Speicher:
Die tatsächlichen Größenordnungen jedes Speichers kann man dem jeweiligen Datenblatt des eingesetzten Controllers entnehmen.
Die Grundform aller hier vorgestellten Assemblerprogramme zeigt Abb. 5 (hier in der Fassung für einen ATtiny13 Mikrocontroller). Es hat sich bewährt dieses Programmgerüst zu verwenden. Im Laufe der Sitzungen wird es sich stetig erweitern bzw. verändern und so den gestiegenen Anforderungen anpassen.
Direktiven in Assembler beginnen immer mit einem Punkt (.) In diesem kurzen Programm finden sich davon gleich sechs.
Die Assemblerdirektive
liest die typenspezifischen Definitionen eines Controllers ein. In diesem Fall eines ATtiny13x. Damit diese lange Liste an Definitionen nicht in einem Programmlisting auftaucht, wird vorher die Assemblerdirektive
eingegeben und nach der Include-Direktive mit
wieder eingeschaltet.
setzt ein Symbol mit einem Wert oder Ausdruck gleich.
Der Programmierer ist dafür verantwortlich zu entscheiden, wo die Programminstruktionen und Datenbytes im Speicher abgelegt werden sollen.
sorgt dafür, daß der Programmcode im FLASH abgelegt wird (Programmcode (.CSEG) -> FLASH, Daten (.DSEG) -> SRAM oder EEPROM (.ESEG).
Setzt den Speicherplatzzähler des aktuellen Speichersegments auf einen bestimmten Wert.