Für diesen Kurs werden keine besonderen Kenntnisse vorausgesetzt. Dennoch ist es nicht verkehrt, wenn man nicht gerade zwei linke Hände hat, was das Löten angeht. Eine Einführung für richtiges Weichlöten gibt es ganz detailliert hier. Zum Programmieren braucht man einen einfachen Editor, der jedoch in der Regel in den Entwicklungsumgebungen integriert ist.
Neben diversen Compilern (Übersetzer von einer Hochsprache in Maschinencode), die für meinen Geschmack viel zu schwabbligen und auf Maschinenebene schlecht zu pfegenden Code ergeben gibt es die kostenlose Entwicklungsumgebung AVR-Studio von ATMEL. Integriert sind ein Editor, ein Assembler und ein Simulator. Nach einer kostenlosen Registrierung kann man die ca. 89 MB große Datei von ATMEL herunterladen. Ein Doppelklick auf die Datei startet die Installation, die ohne Probleme abläuft. Aktuell ist zur Zeit (Okt. 2008) die Version 4.14.
Ist das Programm geschrieben, werden die Mnemonics (Assemblerbefehle) in die Befehlsworte übersetzt, die der Controller versteht und von denen er pro Sekunde bis zu 20 Millionen abarbeiten kann. Damit er das kann, muss man jedoch das Programm im PC an den Controller übertragen. Diesen Job erledigen eine kleine Schaltung, die in das Steckergehäuse des Verbindungssteckers passt und die Software PONYPROG. Auch dieses Programm ist Freeware. Nach dem Download der 550 kB kleinen zip-Datei wird entpackt und installiert.
Ein Terminalprogramm wird verwendet, um sich eventuell später mit dem AVR unterhalten zu können. Das geschieht, ebenso wie die Programmierung, über eine serielle Schnittstelle. Man sollte sich also irgendwie einen Rechner bunkern, der so was noch hat. Als Terminalprogramm kann das Windows-eigene Hyperterminal verwendet werden.
Programme installieren Auf den Schulrechnern ist die nötige Software bereits installiert. Zu Hause muss das noch erledigt werden. Du kannst die Pakete in der Schule auf deinen Stick laden, falls das Herunterladen daheim zu lang dauert.
Mikrocontroller verstehen wie auch die Prozessoren im PC keinen Klartext. Ihre Wörter bestehen aus gleich langen Folgen von Nullen und Einsen. Bei den ATMEL-CPUs sind diese Speicherwörter 16 Bit (2 Byte) breit. Ein Teil dieses Codes stellt den eigentlichen Befehl dar, der Rest vertritt die Daten, mit denen gearbeitet wird.
1110101000000010
ist so eine Folge, die den Befehl darstellt, das Arbeitsregister R16 mit dem konstanten Bytewert 0xA2 = 162 zu laden. Diese Ziffernfolgen sind nicht besonders anschaulich, deshalb können sie Menschen auch schlecht im Gedächtnis behalten.
Einfacher ist es, wenn man für die Ziffernfolge schreibt:
LDI R16, 0xA2
LDI steht für: LOAD IMMEDIATE = Lade eine Konstante.
Das Komma trennt das Ziel von der Quelle der Operation.
Das 0x vor dem eigentlichen Bytewert sagt, dass danach ein Bytewert in hexadezimaler
Schreibweise kommt.
So entstanden die ersten Programme, welche die Klartextzeile (Mnemonics) LDI R16, 0xA2 in den maschinenlesbaren Code 1110101000000010 übersetzen konnten. Diese Programme nennt man ASSEMBLER. Sie arbeiten absolut maschinennah und übersetzen ohne Füllmaterial genau das, was der Programmierer vorgibt. Somit erhält man schlanke Programme, die auch gut zu pflegen sind, falls der Programmierer nicht mit erklärenden Kommentaren gespart hat.
Verwandt damit sind die sogenannten Compiler, die den in einer Hochsprache wie C, Java, Delphi, Basic, ... geschriebenen Code in Maschinencode übersetzen. Die hier eingebauten Algorithmen erzeugen aber meistens sehr schwammigen und aufgeblähten Maschinencode, weshalb sie von Puristen nicht gern eingesetzt werden.
Mit unseren 10 Ziffern können wir bis 9 zählen, dann wäre Schluss, gäbe es nicht auch noch das Stellenwertsystem. Nachdem die 9 erreicht ist machen wir einen Übertrag von den Einern auf die Zehner und setzen die Einer auf Null zurück. Ist die Zehnerstelle bis 9 hochgezählt kommt der erste Übertrag auf die Hunderterstelle usw.
Computer haben mit diesem Dezimalsystem ihre Probleme, weil sie nur 2 Ziffern statt zehn haben, die 0 und die 1. Im Dualsystem kann man deshalb zunächst auch nur bis 1 zählen. Aber auch hier gibt es ein Stellenwertsystem. Das basiert aber nicht auf der 10 sondern auf der 2.
Im Zweiersystem wird also folgendermaßen gezählt:
8er |
4er |
2er |
1er |
dez. |
0 |
0 |
|||
1 |
1 |
|||
1 |
0 |
2 |
||
1 |
1 |
3 |
||
1 |
0 |
0 |
4 |
|
1 |
0 |
1 |
5 |
|
... |
||||
1 |
1 |
1 |
7 |
|
1 |
0 |
0 |
0 |
8 |
1 |
0 |
0 |
0 |
9 |
1 |
0 |
1 |
0 |
10 |
... |
||||
1 |
1 |
1 |
1 |
15 |
Wo im Dezimalsystem der erste Übertrag passiert, zählt man im Zweiersystem einfach innerhalb der ersten 4 Stellen (Bit) weiter bis 15. Dann sind alle Bits besetzt. Jetzt muss der Übertrag auf die nächste Stelle die 16er erfolgen.
Mit 4 Bit lassen sich also Zahlen bis 15 darstellen. Zusammen mit der Null sind das 16 Zustände, die, wollte man in diesem 16er-System zählen, somit außer der Null 15 weitere Ziffern erfordern würde. 9 Stück hat man ja bereits vom Dezimalsystem und die 6 fehlenden ersetzt man durch die Buchstaben A bis F. Damit kann man computergerecht bis 15 mit einer Stelle zählen und rechnen. Und weil bekanntlich ein Byte aus 8 Bits zusammengesetzt ist, bringt man in einem Byte zwei mal 4 Bit und somit zwei Ziffern des 16er-Systems oder wie es auch genannt wird des Hexadezimalsystems unter.
Wir zählen mal im Hexadezimalsystem und vergleichen das wieder mit dem Dezimalsystem:
16er |
1er |
dez. |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
2 |
2 |
0 |
3 |
3 |
0 |
... |
|
0 |
9 |
9 |
0 |
A |
10 |
0 |
B |
11 |
0 |
C |
12 |
0 |
D |
13 |
0 |
E |
14 |
0 |
F |
15 |
1 |
0 |
16 |
1 |
1 |
17 |
Die Hälfte eines Bytes wird als Nibble bezeichnet. Ein Nibble kann mit einer Stelle einer zweiziffrigen Hexadezimalzahl gleichgesetzt werden. Das rechte Nibble vertritt die Einer, das linke die 16er.
Natürlich kann auch das zweite, das linke Nibble bis F (=15) hochgezählt werden. Die Zahl FF im 16er-System hat den dezimalen Wert von 16 x 15 + 15 = 255. Das ist der Wert, bis zu dem man mit einem Byte im Zehnersystem zählen kann, dann sind alle 8 Bit auf eins.
Um nun 16er-Zahlen, die ja auch einmal nur aus normalen Ziffern zusammengesetzt sein können, von Zahlen im Dezimalsystem unterscheiden zu können, braucht man eine besondere Schreibweise als Kennzeichnung.
Zahlen im Hexadezimalsystem schreiben wird mit dem Vorsatz 0x.
0x34 = 3 x 16 + 4 = 48 + 4 = 52 dezimal
0xB9 = 11 x 16 + 9 = 176 + 9 = 185 dezimal
0xEC = 14 x 16 + 12 = 224 + 12 = 236 dezimal
Den Zusatz "dezimal" kann man sich sparen, wenn man vereinbart, dass eine Zahl ohne Zusatz grundsätzlich eine Dezimalzahl darstellen soll.
147 = 9 x 16 + 3 = 0x93
219 = 13 x 16 + 11 = 0xDB
Hinweise:
Die RGB-Werte bei der Farbverwaltung zur Webseiten-Erstellung arbeiten mit 3 Bytes. Dadurch ergibt sich ein 6-stelliger Hexadezimalcode, in dem die ersten beiden Ziffern für den Rotanteil stehen, die mittleren beiden für Grün und die rechten beiden für Blau. Der Kombination wird ein "#" vorangestellt.
Zahlen im Zweiersystem stellt man zur Unterscheidung ein "0b"
voran.
0b11010011
= 0xD3
= 13 x 16 + 3
= 211
Aufgabe:
Kennzeichne hier die Stellen genauso.
107 = 6 x 16 + 11 = 0x6B = 0b01101011
Aufgabe:
Übersetze den Farbcode #84D3BC in dezimale Werte