Das nebenstehende Bild zeigt die Schaltungsversion für den parallelen Port. Hier werden neben den erforderlichen Steckverbindern nur 2 Widerstände benötigt. Diese
sind notwendig, um die Ausgänge des LPT-Port sowie die Programmieranschlüsse des angeschlossenen Controllers zu schützen. Der Vorteil dieser Version ist die einfache Schaltung. Nachteilig ist allerdings,
dass LPT-Ports beim PC nicht besonders gut geschützt sind und man sehr vorsichtig arbeiten muss.
Diese Stückliste enthält die benötigten Bauteile für die parallele Version.
Beim seriellen Programmieradapter ist der Material-Aufwand etwas größer. Der Vorteil ist aber, dass COM-Schnittstellen am PC etwas robuster sind
und auch mal einen Kurzschluss vertragen. Diese Schaltung ist übrigens eine etwas vereinfachte Version des SI-Prog-Interfaces, welches auf der PonyProg-Homepage vorgestellt wird. Hier wurden alle Komponenten
entfernt, die nicht für die AVR-Programmierung benötigt werden. Aber es wurden auch Bauteile hinzugefügt: R4 und R6 ermöglichen den Anschluss an Schaltungen mit 3,3V Betriebsspannung und C1 kann ein
einigen Fällen Kommunikationsprobleme beseitigen. Im Test funktionierte die Schaltung mit Werten von 220p bis 1n einwandfrei.
Diese Stückliste enthält die benötigten Bauteile für die serielle Version. Es ist auch ein Platinenlayout für
Standard-Bauteile und ein Platinenlayout für SMD-Bauteile verfügbar.
Bei allen AVR-Projekten habe ich für den ISP-Anschluss einen Platz sparenden 5-poligen Steckverbinder verwendet. Dieser besteht aus einer Buchsenleiste im 2,54mm Raster
(einreihige IC-Fassung). Diese Buchsen lassen sich ineinander stecken, so dass sowohl für den Teil auf der Platine als auch für den Stecker die gleichen Komponenten zum Einsatz kommen.
Der Standard von ATMEL sieht jedoch ganz anders aus. Hier gibt es 2 Varianten: Weit verbreitet ist der Anschluss über einen 10-poligen Wannenstecker, weniger häufig ist der 6-polige Anschluss (ebenfalls als
Wannenstecker) anzutreffen.
Die beiden nebenstehenden Schaltungen zeigen, wie man die Programmieradapter auch für die originalen 6- oder 10-poligen ISP-Anschlüsse verwenden kann.
Die wenigen Bauteile der Programmieradapter lassen sich mit etwas Geschick im Steckergehäuse unterbringen. Recht problemlos geht das bei der Version für den parallelen Anschluss, hier haben die beiden
Widerstände genügend Platz im großen Gehäuse.
Etwas schwieriger ist es beim seriellen Adapter. Ich habe hier eine kleine Lochraster-Platine passend zurechtgesägt und dort alle Bauteile aufgelötet. Da sich bei so einem engen Aufbau schnell Fehler
einschleichen können, sollte man vor der Inbetriebnahme unbedingt nochmals alle Verbindungen kontrollieren und vor allem prüfen, dass keine Kurzschlüsse vorhanden sind.
Und so sieht der Programmieranschluss aus. Ich habe hier (wie schon erwähnt) einreihige IC-Sockelleisten verwendet, die sehr preiswert sind und sich einfach auf die benötigte Länge kürzen lassen. Auf
der Seite, wo normalerweise die ICs eingesteckt werden, habe ich die 5 Leitungen eingelötet und die Stifte, die sonst in die Platine kommen, dienen hier als Stecker. Die Lötstellen habe ich später mit
Zweikomponentenkleber vergossen.
Unter der Menüzeile sind zwei Symbolleisten angeordnet, hier kann man praktisch alle wichtigen Funktionen direkt aufrufen. Im Hauptfenster (welches jetzt noch leer ist) werden später die Daten angezeigt, die
in den Controller geschrieben werden sollen. Zunächst muss aber der verwendete Programmieradapter eingestellt werden: Dazu wird im Menü Setup die Option
Interface Setup aufgerufen. Alternativ kann man auch auf dieses Symbol
klicken.
Das linke Bild zeigt die empfohlenen Einstellungen für den parallelen Adapter, bei Windows 95 oder 98 kann man auch die Option Avr ISP API verwenden. Im rechten Bild sind die
Einstellungen für den seriellen Adapter zu sehen. Mit dem Button Probe lässt sich prüfen, ob der angeschlossene Programmieradapter erkannt wird. Kommt hier die Meldung
Test Ok, dann hat PonyProg Zugriff auf den Adapter. Dies ist zwar noch keine Garantie, dass der Programmieradapter auch wirklich funktioniert, aber es ist schon ein gutes Zeichen. Falls hier
Test Failed gemeldet wird, dann sollten nochmals alle Einstellungen und gegebenenfalls auch die Hardware überprüft werden.
Kurz zur Schaltung: Ein ATmega8 wird in einer Minimalkonfiguration betrieben. C1 dient als Stützkondensator und sollte sich möglichst nah am Controller befinden. X1 sowie C2 und C3 sorgen für einen
stabilen Takt von 4 MHz und auch diese Bauteile sollten in der Nähe des Controllers angeordnet werden. Am Controlleranschluss PD0 ist über den Vorwiderstand R1 die LED D1 angeschlossen, die später zum
Blinken gebracht werden soll. Interessant ist der 5-polige mit ISP bezeichnete Steckverbinder, hier wird der Programmieradapter angeschlossen.
Zur Versorgung der Schaltung wird eine stabilisierte Spannung von 5V benötigt. Ein Labornetzgerät ist für diesen Zweck am besten geeignet. Es kann aber auch ein Steckernetzteil verwendet werden, aber man
sollte darauf achten, dass dieses Netzteil wirklich eine geregelte Spannung liefert. Für die meisten modernen Schaltnetzteile trifft dies zu, nicht jedoch für viele ältere Trafo-Netzteile.
Diese Stückliste enthält alle Bauteile, die für das Test-Projekt benötigt werden.
Falls nur ein ungeregeltes Steckernetzteil zur Verfügung steht, dann ist das auch kein Problem. Mit der nebenstehenden Schaltung kann daraus eine Spannung von +5V erzeugt werden. Zur Not lässt sich auch eine
9V Batterie als Spannungsquelle verwenden.
Hier wurde das Test-Projekt auf einem Steckbrett aufgebaut. Der Vorteil dieses Systems ist, dass man sehr einfach Änderungen an der Schaltung durchführen kann. Außerdem lässt sich der
Programmierstecker direkt aufstecken. Es ist aber auch möglich, die Schaltung auf einer kleinen Lochrasterplatine unterzubringen. Wichtig: die Kondensatoren C1-C3 und der Quarz X1 sollten sich in der Nähe des
Controllers befinden und über möglichst kurze Kabel angeschlossen werden.
Auf dem Bild wurde der Programmieradapter bereits angeschlossen. Allgemein wird empfohlen, beim Verbinden und Trennen des Programmieradapters alle Geräte auszuschalten. Die Praxis hat aber gezeigt, dass es nicht
notwendig ist, den PC deswegen herunterzufahren. Die Stromversorgung für das AVR-Projekt sollte aber ausgeschaltet werden, wenn die ISP-Verbindung hergestellt oder getrennt wird. Ich habe mir außerdem
angewöhnt, beim Verbinden den ISP-Stecker etwas schräg anzusetzen, so dass beim Einstecken zuerst die Masseleitung verbunden wird und stecke erst dann komplett ein.
| testprojekt.asm | Diese Datei enthält den Quelltext des Programms in Assemblersprache. Hier sind alle Befehle zum Blinken einer LED für den ATmega8 im Klartext aufgelistet, so dass sie für den Programmierer gut lesbar sind. In dieser Form kann die Datei jedoch nicht vom Mikrocontroller verarbeitet werden, deshalb muss der Quelltext in eine vom Controller lesbare Form umgewandelt werden. |
| testprojekt.hex | In dieser Datei befinden sich die Befehle aus dem Assembler-Quelltext in einer vom Controller lesbaren Form. Diese Datei muss in den FLASH-Speicher des ATmega8 unseres Test-Projektes programmiert werden, damit der Controller das Programm ausführen kann. |
| testprojekt.eep | Diese Datei enthält einige Daten für den EEPROM des ATmega8. Für die Funktion des Test-Projektes ist diese Datei nicht erforderlich, sie wird hier nur verwendet, um die Programmierung des EEPROM-Speichers zu demonstrieren. |
| Device [AVR micro] [ATmega8] | Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt. |
Open Program Memory (FLASH) File |
Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.hex ausgewählt. PonyProg lädt den Inhalt dieser Datei in einen Puffer und zeigt dessen Inhalt anschließend im Hauptfenster an (hexadezimal und als Text). |
Write Device |
Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird der Inhalt des Puffers komplett in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die gesamte Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful. |
| Device [AVR micro] [ATmega8] | Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt. |
Open Program Memory (FLASH) File |
Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.hex ausgewählt. PonyProg lädt den Inhalt dieser Datei in einen Puffer und zeigt dessen Inhalt anschließend im Hauptfenster an (hexadezimal und als Text). |
Open Data Memory (EEPROM) File |
Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.eep ausgewählt. Gegebenenfalls muss der Dateityp erst auf *.eep oder * geändert werden, damit die richtige Datei im Auswahlfenster angezeigt wird. PonyProg lädt den Inhalt dieser Datei ebenfalls in den Puffer und zeigt dessen Inhalt im Hauptfenster an, wobei die EEPROM-Daten ganz am Ende zu finden sind. |
Write Device |
Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird der Inhalt des Puffers komplett in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die gesamte Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful. |
| Device [AVR micro] [ATmega8] | Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt. |
Open Data Memory (EEPROM) File |
Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.eep ausgewählt. Gegebenenfalls muss der Dateityp erst auf *.eep oder * geändert werden, damit die richtige Datei im Auswahlfenster angezeigt wird. PonyProg lädt den Inhalt dieser Datei in den Puffer und zeigt dessen Inhalt im Hauptfenster an, wobei die EEPROM-Daten ganz am Ende zu finden sind. |
Write Data Memory (EEPROM) |
Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird nur der Inhalt des EEPROM-Puffers in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful. |
Zur Einstellung der Fuse-Bits wird auf das Schloss-Symbol
geklickt. Danach liest PonyProg die aktuelle Einstellung aus dem Controller und zeigt diese in einem
Fenster an. Falls PonyProg bereits mit dem Controller kommuniziert hat, z.B. beim Programmieren der Speicher, dann hat es die Einstellungen bereits gelesen und zeigt sie direkt an. Bei einem fabrikneuen ATmega8 ergibt
sich das nebenstehende Bild.
Die Fuse-Bits werden nun so wie in diesem Bild eingestellt. Ich möchte an dieser Stelle nicht auf die Bedeutung aller Fuse-Bits eingehen, nur soviel: Um den Quarz-Oszillator für das Test-Projekt zu aktivieren,
müssen die Bits CKSELx und SUTx geändert werden. CKSEL bedeutet Clock Selection, hier wird jetzt als Taktquelle der Quarzoszillator ausgewählt. SUT steht für Start-up Time und legt eine Wartezeit
beim Starten des Controllers fest. Mit der neuen Einstellung wartet der Controller beim Einschalten eine gewisse Zeit, damit sich der Quarz-Oszillator einschwingen kann.
Mit einem Klick auf Write wird die neue Einstellung in den Controller geschrieben und das Fenster wieder geschlossen. Ein Blick auf das Test-Projekt zeigt: die LED blinkt jetzt ungefähr
im Sekundentakt.
![]() | Fuse-Bit nicht programmiert | entspricht dem logischen Wert 1 |
![]() | Fuse-Bit programmiert | entspricht dem logischen Wert 0 |