Pfad: Home => cq-dl-Beiträge => Teil 3
MAX232

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.

Serielles 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.

Programmieren in der Schaltung

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
  1. nur für diesen Zweck vorbehalten sind,
  2. über Widerstände von mindestens 1 k von der Restschaltung abgetrennt werden, oder
  3. ü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).

ISP ohne und mit Multiplex

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.

Programmieren auf Boards

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.

Programmieren ohne Boards

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.