www.blafusel.de

  Home  |   Privat  |   Impressum  |   Bücher  |   Computer  |   Misc  |   OBD  |   Forum

ISP für µC mit AVR ATmega8

Inhalt

Einführung
yaap
PonyProg
Security und Configuration Bits

Einführung

Um einen ATmegaX programmieren zu können, benötigt man einen Adapter, der entweder über die serielle Schnittstelle (COMx) oder den Druckerport (LPTx) mit dem Prozesor auf der µC-Schaltung verbunden wird. Außerdem wird noch eine Software benötigt, welche die von der Programmiersprache erzeugte HEX-Datei in den Flash-Speicher der CPU überträgt.

Im Web kursiert mindestens ein halbes Dutzend verschiedener Schaltungsvorschläge, die vermutlich alle funktionieren und ihre Vor- und Nachteile haben. Ärgerlich nur, wenn die eine Schaltung mit dem anderen Programm nicht zusammenarbeitet und man dann auf Fehlersuche gehen muß. Außerdem sind einige Schaltungen mindestens als merkwürdig zu bezeichnen. Ich habe zwei Versionen und zwei kostenlose Programme für den Parallelport erfolgreich getestet. Beide können über ein ca. 1,5m langes 1:1 Datenkabel für die Druckerschnittstelle angeschlossen werden.

Die folgende Abbildung zeigt die beiden gängigen Pfostensteckerbelegungen für den ISP Anschluß auf einem µC-Board:

ISP Pinout

yaap

Jespers minimalistische Schaltung verdient fast nicht den Namen "Schaltung". Nur vier Widerstände sind nötig (der fünfte im Schaltplan von Jesper ist irgendwie unnötig):

Jespers ISP

Ich bin kein Fan davon, zwei Baugruppen direkt ohne irgendeine Trennung miteinander zu verbinden, doch es klappt. Zusammen mit Jespers yaap (yet another AVR programmer - was für ein einfallsreicher Name nach YaST & Co. ;-) ) kommt die Verbindung schnell zustande (unbedingt die bei Jesper verfügbare DLPortIO.dll installieren) und die Schaltfläche Detect Device erkennt den angeschlossenen Prozessor. yaap kann auch mit dem folgenden Interface für PonyProg zusammenarbeiten. Neuere Prozessoren kennt yaap diese noch nicht, was sich aber ändern läßt.

Um eine HEX-Datei in den µC zu laden, muß ein neues Projekt mit Project/New Project angelegt werden. Dann das Fenster "Flash" aktivieren und mit File/Load File die zuvor in der Programmierentwicklung erzeugte HEX-Datei laden und mit Program/AutoProgram in den Prozessor schreiben.

PonyProg

Die meisten anderen Schaltungen nutzen einen 74HC(T)244 als Leitungstreiberbaustein. Die HCT-Variante sollte wohl besser genutzt werden, da der ATmega8 mit 5V-Pegeln arbeitet. Zahlreiche Variationen der Schaltung existieren, bis hin zu einigen, die eine doch eher selten benötigte Schottky-Diode nutzen. Die folgende ist meine favorisierte für LancOS' PonyProg und ist als quasi Standard kompatibel zu den STK200/300 Modulen, obwohl bei mir eine Datenleitung reduziert wurde und keine LED angesteurt werden kann, was sowieso nirgends unterstützt wird. Scott-Falk Hühn zeigt auch einen seriellen Adapter, der den Vorteil hat, daß der Parallelport für den Drucker frei bleibt.

PonyProg ISP

Mit ein wenig Fummelarbeit habe ich ein Layout (Viewer zum Ausdrucken des Layouts für Sprint-Datei) für eine Platine entworfen, die dann vollständig in ein 25-poliges Standard-Sub-D-Gehäuse paßt. Von dem Gehäuse müssen lediglich die vier halbkreisförmigen Aufnahmen für die Zugentlastung mit einem Seitenschneider abgeknabbert werden. Die Zuleitungen werden auf der einen Seite (µC) mit einer 10-poligen Pfostenbuchse für Flachbandkabel in Schneidetechnik versehen und auf der anderen Seite in der Platine eingelötet.

ISP Layout    ISP im Gehäuse

Mehr als Eigenwillig ist die Konfiguration von PonyProg. Das Dialogfeld Setup/Interface Setup merkt sich die Einstellungen irgendwie nicht richtig. Nur beim Aufruf über das Menü und nicht über die Schaltfläche in der Symbolleiste geht es. Folgende Abbildung zeigt die Einstellungen für einen ATmege8 mit der obigen Schaltung unter Windows XP. Über das Menü Device kann man den Prozessor automatisch erkennen lassen. Besser ist aber, den richtigen Typ manuell auszuwählen, zumal PonyProg für den ATmega8 sonst keine Security und Configuration Bits setzen kann. Weitere Tips stehen im PonyProg Tutorial.

PonyProg Config

Security und Configuration Bits

Über diese (auch als Fuse-Bits bezeichneten) Bits werden einige Parameter des ATmega8 eingestellt. Zu den wichtigsten gehört wohl, ob der interne Taktgeber mit 1Mhz, ein externer Oszillator oder ein Quarz-Schwingkreis benutzt werden soll. Ein Oszillator besteht aus einem einzelnen Bauteil (silberner Metallklotz). Ein Quarz-Schwinkreis besteht aus einem Quarz in einem länglichen, silbernen Metallgehäuse mit abgerundeten kurzen Seiten und zwei Kondensatoren. Diese Unterscheidung ist für das Einschwingverhalten des Taktgebers von Bedeutung.

Sehr zum Ärgernis sind die Fuse-Bits nicht risikolos zu setzen. Die Angaben im Datenblatt des ATmega8 sind wohl invertiert zu den Schaltern, die in den Programmen gesetzt werden. Einige gute Hinweise sind auch bei Scott-Falk Hühn zu finden. Bei falscher Programmierung kann es sein, daß man gar nicht mehr mit dem Prozessor kommunizieren kann und er ausgetauscht werden muß. In den Foren findet man aber manchmal ein paar Rettungshinweise. Auf jeden Fall sollten immer zuerst die aktuellen Einstellungen ausgelesen werden, bevor man Bits ändert. Das macht PonyProg leider nicht von sich aus, sondern erst, wenn man auf die Schaltfläche Read im Dialog-Fenster Command/Security und Configuration Bits klickt. yaap liest die Werte selbständig aus. Dazu muß zuerst mit Project/New Project ein neues Projekt angelegt werden, bevor man Program/LockBits & Fuses aufrufen kann.

Folgende Einstellungen habe ich in yaap vorgenommen, um einen 8Mhz Quarz-Schwingkreis zu nutzen. Die linke Seite zeigt den Default-Zustand bei Auslieferung, rechts die neuen Optionen.

Fuse-Bits Default    Fuse-Bits 8Mhz

Zusätzlich kann es sinnvoll sein, die Brown-out Detection zu aktivieren. Fällt die Versorgungsspannung ab, wird dadurch die CPU auf Reset gesetzt. Wird dies nicht gemacht, kann es zu Datenverlust im Programmspeicher kommen. Da meine folgende Schaltung keine externen Reset-Logik verwendet, wie ich es beim LCD-Modul der C-Control gemacht habe, programmiere ich noch das Bit BODEN (diesmal in PonyProg: vor OK zuerst auf Write klicken):

Fuse-Bits BODEN





Nutze das Diskussionsforum!