Pfad:
Home =>
cq-dl-Beiträge => Teil 3
cq-dl-Beiträge zu ATMEL-AVR-Mikrocontrollern
Teil III: Programmieren von ATMEL-AVR-Prozessoren
Nach dem Entwurf der Schaltung und nach dem Schreiben und Testen der Software
im Simulator muss nun der binäre Code in den AVR chip. Jeder AVR verfügt als
Programmspeicher über eine gewisse Menge Flash Memory, das sich programmieren
und jederzeit wieder elektrisch löschen und wiederbeschreiben lässt. Es gibt
grundsätzlich zwei Möglichkeiten zur Programmübertragung in den Flash-Speicher:
serielles oder paralleles Programmieren.
Für professionelle Herstellung ist paralleles Programmieren von Vorteil. Die
einfachste Form des Programmierens, und damit die erste Wahl des Amateurs, ist
das serielle Übertragen in den Programmspeicher. Serielles Programmieren
bedeutet, dass die Programmbits nacheinander, gesteuert durch einen von außen
angelegten Takt am Pin SCK, über den Pin MOSI in ein internes Schiebregister
eingeschoben und von dort in das Flash Memory kopiert werden. Damit der
Programmiervorgang beobachtet, nach Abschluss verifiziert und der Inhalt des
Flash gelesen werden kann, ist ein Datenausgang MISO vorhanden. Beim
Programmieren werden also drei Signalleitungen benötigt: der Takt SCK, die
Eingabedaten MOSI und die Ausgabedaten MISO. Damit dafür nicht extra drei Pins
verloren gehen, wechseln drei Pins beim Reset ihre Funktion. Ist Reset aktiv,
werden sie mit dem seriellen Programmier-Interface verbunden. Der
Programmiermodus wird aber erst dann aktiv, wenn ein entsprechendes Befehlswort
eingeschoben wird.
Bemerkenswert ist dabei, dass das serielle Programmieren weder für das Löschen
noch für den Programmiervorgang erhöhte Spannungen benötigt. Man kann daher das
Programmieren in der Schaltung selbst durchführen. Allerdings ist dabei zu
beachten, dass die dafür drei benötigten Pins entweder
- nur für diesen Zweck vorbehalten sind,
- über Widerstände von mindestens 1 k von der Restschaltung abgetrennt werden,
oder
- über eine Multiplexschaltung nur bei aktivem Reset mit dem Programmiersignal
verbunden werden.
Diese Beschaltung wird als ISP (In-System-Programming) bezeichnet. Die zwei
Möglichkeiten b) ohne Multiplexer und c) mit Multiplexer werden im Schaltbild
dargestellt (PDF-Version des Schaltbildes).
Die Möglichkeit b. ist einfach zu verstehen: die Programmierimpulse liegen
parallel zur Schaltungselektrik an. Das geht natürlich nur, wenn über die
Schutzwiderstände nicht allzu hohe Ströme angefordert werden und wenn die
Schaltung selbst auf die wilden Programmierimpulse nicht allergisch reagiert.
Bei der dargestellten Möglichkeit c) ist der AVR mit den auch zur
Programmierung verwendeten Pins mit der Schaltung verbunden, wenn /Reset auf
High liegt. Aktiviert das Programmiergerät den /Reset-Eingang, werden die
Programmierpins mit dem Programmierstecker verbunden und die Programmierung
kann erfolgen. Hierbei sind die Ströme auf die entsprechenden Grenzbelastungen
des Multiplexers begrenzt. Die Programmierpulse können hier nicht stören.
Der dargestellte ISP-Header ist identisch mit der Beschaltung des 10-poligen
ISP-Headers am STK200 und am STK500 von ATMEL. Der vom STK200 bekannte Stecker
vom Parallelport des Rechners kann hier direkt aufgesetzt werden, vom STK500
gibt es eine ähnliche Verbindung.
Für den Anfänger ist es am einfachsten, sich ein solches Programmierboard zu
besorgen und damit zu beginnen. Man braucht sich dann nicht erst mit Hardware
herum zu beißen und kann sofort mit dem Programmieren und Testen loslegen. Die
Boards STK500 und STK200 haben eine LED-Reihe und Taster, die eine einfache
Ausgabe von Zwischenergebnissen oder eine Eingabe von den Tastern ermöglichen.
Beim STK200, das nicht mehr im Handel zu bekommen ist, erfolgte der Anschluss
an den Rechner über einen freien Parallelport. Das stößt in der Regel auf
Probleme, weil da schon der Drucker dranhängt. Echte Freaks besorgten sich für
ein paar Mark eine Zusatzkarte mit einem Parallelport für den PC, aber die
kostete auch wieder einen wertvollen Interrupt.
Das ist beim STK500 anders, weil das Board einen intelligenten Prozessor mit
Speicher und seriellem Interface hat. Dieses Interface wird mit einem freien
seriellen Anschluss am PC verbunden. Die Software zum Übertragen des Programmes
zum Board ist in den neueren Studio-Versionen enthalten. Auch die
Programmierung erfolgt über das Studio.
( => Screenshot: Das Programmierinterface im Studio bedient ein STK500
board)
Mit dem STK500 ist es neben dem seriellen Programmieren auch möglich, die Chips
parallel und mit einer erhöhten Spannung (12 Volt) zu programmieren. Dadurch
kommt man an speziellere Einstellungen in den Chips heran. die beim seriellen
Programmieren nicht zugänglich sind. Bei bestimmten AVR-Typen lassen sich
Oszillator-Optionen oder Schutzeinstellungen auf diese Art brennen. Wir legen
das erst mal in die Ecke für Fortgeschrittene ab.
Die Software zum Programmieren über die ISP-Verbindung bzw. des STK200- und
STK500-Boards gibt es kostenlos auf der Webseite von ATMEL.
Wer kein STK500 kaufen will, muss sich die Hardware selbst bauen. Am
einfachsten und günstigsten kommt der Eigenbau eines Parallelport-Headers, wie
er beim STK200 mitgeliefert wurde. Die Schaltung ist sehr einfach, außer einem
leicht erhältlichen Treiber-IC braucht es nur Verbindungen und Stecker. Dieses
und andere Programmiergeräte finden sich bei
(
http://www.lug-kiel.de/links/details/f_avr.html#microp)
Es gibt zahlreiche mehr oder weniger komplizierte Programmiergeräte für den
Eigenbau. Die komplizierteren haben allerdings das typische Henne/Ei-Problem:
sie erfordern schon ein Programmiergerät, damit man den Prozessor des
Programmiergeräts mit der Programmier-Software programmieren kann.
Viel Erfolg beim Selberstricken.
©2002 by Gerhard Schmidt, DG4FAC
Webseite mit den Beiträgen:
http://www.avr-asm-tutorial.net/cq-dl/index.html
Benutzung, Kopie und Weiterverbreitung der Seiten zulässig, solange die Copyright-Angaben im Text bleiben.