Dieses Gerät dient zur Programmierung von parallelen EPROMs, EEPROMs und Flash-EPROMs. Natürlich gibt es schon jede Menge ähnliche Geräte, dieses unterscheidet sich jedoch von den meisten anderen: Es
wird über eine serielle Schnittstelle an einen Computer angeschlossen, wobei auf diesem Computer keine spezielle Software erforderlich ist - ein einfaches Terminalprogramm ist völlig ausreichend. Die
"Intelligenz" befindet sich hier auf dem Programmiergerät in Form eines AT90S8515 oder ATmega8515.
Letzte Bearbeitung: 30.07.2005
Important notice for foreign users: The software for this project can be switched into english language.
Beschreibung
| Größe | EPROM-Typ |
|---|---|
| 2 kB | 2716 |
| 4 kB | 2732A |
| 8 kB | 2764, 27C64 |
| 16 kB | 27128, 27C128 |
| 32 kB | 27256, 27C256 |
| 64 kB | 27512, 27C512 |
| 128 kB | 27C1001, 27C010, 28F010, 29F010B |
| 256 kB | 27C2001, 27C020, 28F020 |
| 512 kB | 27C4001, 27C040, 29F040B |
| 1 MB | 27C8001, 27C080 |
Natürlich können mit dem Gerät auch EPROMs ausgelesen oder mit dem Inhalt einer Datei verglichen werden (Verify). Weiterhin gibt es noch eine Leertest-Funktion und für Flash-EPROMs eine Funktion zum Löschen.
Das Besondere an diesem Gerät ist, dass der angeschlossene Computer (welcher nicht unbedingt ein PC sein muss) keine spezielle Software benötigt - ein Terminalprogramm und eine freie serielle Schnittstelle,
die mit 19200, 38400, 57600 oder 115200 Baud arbeiten kann, ist völlig ausreichend. Die Bedienung erfolgt durch eine Menüführung, die vom µC auf dem Programmiergerät gesteuert wird. Die
Übertragung der EPROM-Daten vom und zum Programmiergerät erfolgt mit Intel-HEX-Files, die normalerweise mit allen Terminalprogrammen als Textdatei gesendet und empfangen werden können.
Folgender Screenshot zeigt das Bild nach dem Einschalten des Programmiergerätes:
Auf dem Programmiergerät befinden sich 10 Jumper, welche entsprechend der Auswahl des EPROM-Typs gesteckt werden müssen, damit die EPROM-Anschlüsse mit den richtigen Adress- und Steuerleitungen verbunden werden. Ein Jumper dient dabei zur Einstellung der Programmierspannung in 6 Stufen: 12V, 12.5V, 12.75V, 13V, 21V und 25V. Die erforderliche Jumperstellung wird übrigens immer im Hauptmenü angezeigt. Weiterhin sind noch 2 LEDs zur Status-Anzeige vorhanden. LED 1 (grün) zeigt an, dass das Gerät eingeschaltet ist und LED 2 (rot) leuchtet bei Zugriffen auf das EPROM auf.
Für die Programmierung der EPROMs werden schnelle Algorithmen verwendet: Alle NMOS-Typen (2716-27512) bekommen Programmierimpulse mit einer Länge von 1ms, bis der einprogrammierte Wert wieder ausgelesen werden kann, danach wird noch eine festgelegte Anzahl Sicherheitsimpulse von ebenfalls 1ms Länge ausgegeben. Bei den CMOS-Typen (27C64-27C8001) kommt ein Express-Algorithmus zum Einsatz. Bei erhöhter Betriebsspannung von 6,4V werden Programmierimpulse von 100µs Länge verwendet, bis der einprogrammierte Wert wieder ausgelesen werden kann. Zusätzliche Sicherheitsimpulse sind in diesem Fall nicht notwendig. Flash-EPROMs werden mit dem vom Hersteller empfohlenen Algorithmus (laut Datenblatt) programmiert und gelöscht.
Folgende Features sind noch erwähnenswert:
Schaltung
Die Schaltung des Programmiergerätes gliedert sich in 2 Teile. Teil 1 besteht aus der zentralen Steuerung mit dem AT90S8515 (oder ATmega8515), 2 Stück 4042 als Latch und einem MAX232 als Treiber für die serielle Schnittstelle:
Als zentrales Element arbeitet hier ein Mikrocontroller vom Typ AT90S8515 bzw. ATmega8515. Er besitzt 32 I/O-Anschlüsse und da diese für das Programmiergerät nicht ausreichen, wurde noch ein Latch ergänzt, um weitere 8 Ausgänge zu gewinnen. Für das Latch habe ich 2 Stück 4042 verwendet, die gerade in der Bastelkiste verfügbar waren. Diese können natürlich auch durch ein besser passendes einzelnes IC in CMOS-Technik ersetzt werden, z.B. 74HC374. In diesem Fall wird der Eingang /OE des 374 fest auf Massepotenzial gelegt.
Die µC-Anschlüsse haben folgende Funktionen: Port A dient als Datenport für die EPROM-Daten und ist über 8 Schutzwiderstände mit den Datenleitungen des EPROMs verbunden. Er wird je nach Bedarf als Ausgang (beim Programmieren) oder als Eingang (beim Lesen, Vergleichen und Leertest) geschaltet. Die Widerstände dienen zum Schutz bei Kollisionen, falls µC-Port A und EPROM gleichzeitig auf Ausgang gesetzt sind. Außerdem schützen sie die µC-Ports vor Überspannung, wenn die Programmierspannung auf 6.4V erhöht wurde und entsprechend höhere Pegel an den EPROM-Datenleitungen beim Lesen anliegen.
An Port B befinden sich verschiedene Steuerleitungen: PB0 steuert direkt die rote Aktivitäts-LED an. Über PB1 wird die Betriebsspannung für das EPROM ein- bzw. ausgeschaltet und PB2 schaltet diese Spannung zwischen 5V und 6.4V um, damit CMOS-EPROMs im Express-Mode programmiert werden können. PB3 dient zum Ein- bzw. Ausschalten der Programmierspannung. PB4-PB6 stellen die EPROM-Steuersignale /CE, /OE und /PR bereit, wobei /PR bei EEPROMs und Flash-EPROMs die Funktion von /WE übernimmt. PB7 steuert die Datenübernahme des Latches. PB5-PB7 haben noch eine Doppelfunktion: sie werden zum Programmieren des µC verwendet und sind für diesen Zweck an den 5-poligen Steckverbinder K101 geführt.
Port C dient zur Ausgabe der Adressleitungen A0-A15 an das EPROM und das funktioniert folgendermaßen: Zunächst gibt der µC die Daten für die Adressleitungen A8-A15 an Port C aus. Diese Daten werden durch einen kurzen H-Impuls auf PB7 in den Latches gespeichert und sind an deren Ausgängen verfügbar. Danach werden die Daten für die Adressleitungen A0-A7 ausgegeben. Dadurch "wackeln" die Daten auf A0-A7 am EPROM kurzzeitig, aber das stört in der Praxis nicht, da während der Adresseinstellung keine Zugriffe auf das EPROM stattfinden.
Port D hat 2 Funktionen zu erfüllen. Zunächst dienen die Anschlüsse PD4-PD7 zur Ausgabe der Adressleitungen A16-A19 an das EPROM. Der Rest ist für die serielle Kommunikation zuständig. Dazu werden PD0-PD3 an den RS232-Treiber MAX232 geführt, welcher 2 Sende- und 2 Empfangstreiber bereitstellt sowie die notwendigen Spannungen von +/-10V erzeugt. Das Programmiergerät verwendet alle 4 Treiber für die Leitungen TXD, RXD, CTS und RTS. Die letzten beiden steuern den Datenfluss und sorgen für eine sichere Datenübertragung. Der RS232-Anschluss wurde mit der 9-poligen Sub-D-Buchse K102 realisiert, die so beschaltet wurde, dass ein Standard-Modem-Kabel (alle Verbindungen 1:1 durchgeschaltet) zur Verbindung mit dem Computer benutzt werden kann.
Es ist auch möglich, das EPROM Programmiergerät über USB zu betreiben. Dazu kann man entweder ein fertiges USB-RS232 Interface verwenden oder auch ein USB-Modul direkt einbauen. Wenn man sich für letzteres entscheidet, dann kann z.B. das USB-Modul UM-100 von ELV verwendet werden, welches auch als Basis für mein USB-RS232 Interface dient:
Bei dieser Schaltung wird das USB-Modul direkt mit dem Controller verbunden. Da eine zusätzliche Wandlung in RS-232-Pegel nicht notwendig ist, können die Bauelemente IC102, K102 sowie C104-C108 entfallen.
Stattdessen benötigt man nur das UM-100 Modul und eine 2x8 polige Pfostenbuchse.
Wichtig: Der Jumper 1 auf dem UM-100 Modul muss sich in Stellung "ext." befinden, so dass das UM-100 vom EPROM Programmiergerät mit Strom versorgt wird. Anderenfalls wird
über den USB Anschluss eine Verbindung zwischen den +5V des PC und den +5V des EPROM Programmiergerätes hergestellt und das könnte gefährlich für beide Geräte werden.
Teil 2 des Schaltplans zeigt die Stromversorgung, die Schaltstufen für die EPROM-Spannungen, das Jumperfeld und den Programmiersockel:
Das Programmiergerät benötigt zur Stromversorgung eine Wechselspannung von 12-14V, die mit max. 200mA belastet wird. Es muss unbedingt Wechselspannung verwendet werden, weil sonst die Spannungsverdopplerschaltung zur Erzeugung der Programmierspannung nicht funktionieren würde. Bei korrekter Eingangsspannung sollte an C203 eine Spannung von 35-40V zu messen sein. Diese wird mit IC201 und den Widerständen R201-R207 je nach Stellung von Jumper 202 auf die benötigte Programmierspannung stabilisiert und mit der Schaltstufe (Tr201, Tr202) bei Bedarf an das EPROM geschaltet.
Wichtig: Die in der Schaltung angegebenen Werte für R201-R206 sind Richtwerte und müssen genau abgeglichen werden. Ich habe mit der nachfolgend beschriebenen Prozedur zunächst die genauen Werte ermittelt und diese dann durch 1 oder 2 passende Festwiderstände ersetzt. Man kann aber auch entsprechende Trimmpotentiometer benutzen bzw. eine Kombination von Festwiderstand und Potentiometer um eine feinere Einstellung zu ermöglichen, z.B. 4,7k fest und 1k Poti für R206.
Zur Ermittlung der Werte für R201-R206 gehe man wie folgt vor: Der Mikrocontroller IC101 wird zunächst noch nicht in die Fassung eingesetzt, stattdessen wird in die µC-Fassung eine Drahtverbindung von Pin 40 auf Pin 4 gesteckt. Damit wird die Programmierspannung dauerhaft eingeschaltet. Zum Messen der Spannung wird ein Messgerät an die Kathode von D207 angeschaltet (Leitung Vpp in Schaltungsteil 2). Der Jumper 202 wird entfernt oder auf die Stellung 6 gesteckt. Nun wird R206 so eingestellt, dass an Vpp 25.1V zu messen sind. Die etwas höhere Spannung liegt innerhalb der Toleranz und bringt eine kleine Reserve, da mit gestecktem EPROM die Spannung etwas zurückgeht. Danach wird JP202 auf Stellung 5 gesteckt und R205 so eingestellt, dass Vpp 21.1V beträgt. Der gleiche Vorgang wird mit R204-R201 mit den entsprechenden Spannungen wiederholt.
Die Betriebsspannung für das EPROM muss ebenfalls genau abgeglichen werden: Dazu wird an der µC-Fassung eine Drahtverbindung von Pin 40 auf Pin 2 gesteckt und das Messgerät an den Kollektor von Tr204 angeschaltet (Leitung Vcc in Schaltungsteil 2). Jetzt wird R213 so eingestellt, dass 6.45V an Vcc messbar sind. Danach wird noch eine zweite Drahtverbindung von Pin 40 auf Pin 3 gesteckt und mit R211 eine Spannung von 5.05V an Vcc eingestellt. Mit einem gesteckten EPROM werden sich später die Spannungen dann auf ca. 5.0V bzw. 6.4V einstellen.
Experten werden sich fragen, wieso hier 6.4V verwendet werden. Der Grund ist folgender: je nach Hersteller werden 6.5V oder 6.25V gefordert, deshalb habe ich 6.4V gewählt und liege damit im Toleranzbereich aller Hersteller.
Der Rest der Schaltung besteht aus einem Drahtverhau zwischen dem µC, den Jumpern und dem Programmiersockel. Die Umsteckerei der Jumper ist zwar in der Praxis etwas lästig, aber so war die Schaltung wesentlich einfacher zu realisieren als eine Matrix aus Gattern oder Analogschaltern. Zur Vereinfachung der Bedienung können an Stelle der Jumper auch kleine Schiebeschalter verwendet werden.
Diese Stückliste enthält alle Bauelemente, die ich für dieses Projekt verwendet habe.
Die Datei epromprog-pl.zip enthält ein komplettes Platinenlayout im Eagle-Format. Dieses wurde von Hermann Schoenbauer erstellt und freundlicherweise zur Verfügung gestellt. Hinweis: die Nummerierung der Bauelemente stimmt nicht mit meinen Schaltplänen überein, die Schaltung ist aber ansonsten weitgehend identisch.
Die gesamte Steuerung des Programmiergerätes übernimmt ein AT90S8515 oder ATmega8515 Mikrocontroller. Er kommuniziert über die RS232-Schnittstelle mit dem angeschlossenen Computer, steuert die Menüführung, bedient alle EPROM-Steuersignale (A0-A19, D0-D7, /CE, /OE, /PR) sowie die EPROM-Spannungen und sorgt für das korrekte Timing beim Programmieren und Lesen des EPROMs.
Die Datei epromprog-v104.zip enthält die aktuelle Software für den AT90S8515 bzw. ATmega8515. Dazu gehört ein kommentiertes Assemblerlisting sowie der fertige Code als HEX- und EEP-File. Eine weitere Datei enthält eine Liste über alle Veränderungen und Erweiterungen, die bei jeder neuen Version vorgenommen wurden.
Anstatt des AT90S8515 kann auch ein ATmega8515 verwendet werden. Hier muss aber die richtige Einstellung der Fuse-Bits beachtet werden:
So sieht die Einstellung im AVR-Studio für den ATmega8515 aus.
So sieht die Einstellung in PonyProg für den ATmega8515 aus.
Die Software wurde so geschrieben, dass man mit relativ wenig Aufwand weitere EPROM-Typen ergänzen kann. Dazu befindet sich am Ende des Assembler-Listings eine EPROM-Liste, die man um weitere Einträge ergänzen kann. Hier kann man einen kurzen Namen, die nötige Jumper-Stellung, die Speicher-Größe des EPROMs und die Adressen der Schreib- und Lösch-Routinen (bzw. das entsprechende Label) eintragen. Weiterhin müssen die erforderlichen Routinen zum Aktivieren des Programmierens, zum Programmieren eines Bytes, zum Vergleich eines Bytes nach dem Programmieren und zum Deaktivieren des Programmierens ergänzt werden. Bei Flash-EPROMs ist außerdem noch eine Routine zum Löschen erforderlich. Um andere Funktionen wie Datenempfang, Hex-File-Decodierung usw. braucht man sich dabei nicht zu kümmern, das erledigt die vorhandene Software des Programmiergerätes. Erst beim Programmier- und Löschvorgang werden die speziellen Routinen aus der EPROM-Liste ausgeführt. Im Listing finden sich weitere Erklärungen zu diesem Thema, zum besseren Verständnis schaut man sich am besten die bereits vorhandenen Einträge an.
Hier noch ein Download-Tipp: Oft liegen die zu programmierenden Daten nicht im Intel Hex Format vor, sondern im binären Format. Aber das ist kein Problem, denn es gibt geeignete Software zum Konvertieren der Daten vom Binär ins Hex Format und auch umgekehrt. Auf der Links-Seite kann man ein kleines Tool für diesen Zweck downloaden.
Bedienung
Zur Inbetriebnahme des Programmiergerätes muss zuerst das Terminalprogramm gestartet und richtig eingestellt werden. Die verwendete serielle Schnittstelle ist auf 115200 Baud (8N1) und auf Hardware-Protokoll
(CTS/RTS) einzustellen. Einige Terminals bieten eine Option ASCII-Konfiguration, hier sollte man eventuelle Verzögerungen auf 0 setzen, sonst kann das Programmieren ewig dauern. Die genannten Einstellungen gelten
auch für den Betrieb über USB. Der einzige Unterschied ist: Es wird hier die virtuelle Schnittstelle des USB Interface ausgewählt.
Jetzt wird das Programmiergerät eingeschaltet und ca. eine Sekunde später sollte das Hauptmenü auf dem Bildschirm zu sehen sein. Falls das nicht passiert und stattdessen
die rote LED mit ca. 5Hz blinkt, liegt ein Fehler bei der RS232-Verbindung vor. In diesem Fall muss das Problem beseitigt und dann das Programmiergerät aus- und wieder eingeschaltet werden.
Das Hauptmenü bietet folgende Möglichkeiten:
| Option | Beschreibung |
|---|---|
| 1 | IC-Typ wählen: Es wird ein Untermenü mit den verfügbaren EPROM-Typen angezeigt. Die Auswahl erfolgt durch Eingabe der entsprechenden 2-stelligen Nummer. Bei
einer unsinnigen Eingabe wird die Liste nochmals angezeigt, erst eine sinnvolle Eingabe führt zurück ins Hauptmenü. Mit ESC kann man jederzeit ohne Änderung ins Hauptmenü zurück
springen. Danach sollte man die im Hauptmenü angezeigten Jumperstellungen setzen. Ein "x" hinter der Jumpernummer bedeutet, dass dieser Jumper für den gewählten EPROM-Typ nicht relevant ist und beliebig gesetzt sein kann. Gegebenenfalls muss der Jumper 2 korrigiert werden, falls der verwendete Typ eine andere Programmierspannung benötigt. Alle EPROM-Typen ab 2764 können normalerweise mit den vorgegebenen 12.5V programmiert werden, es gibt aber Ausnahmen, die 12.75V, 13V oder sogar 21V benötigen. Hier sollte im Zweifelsfall das entsprechende Datenblatt konsultiert werden. Die getroffene Auswahl wird übrigens im EEPROM des µC gespeichert, so dass beim nächsten Gebrauch des Gerätes wieder der zuletzt eingestellte Typ ausgewählt wird. Das ist sinnvoll, weil ja normalerweise auch die Jumperstellung vom zuletzt gewählten Typ erhalten bleibt. Hinweis: Mit Speicherschutz versehene Flash-EPROMs können nicht programmiert werden. Dies lässt die Hardware des Programmiergerätes leider nicht zu, außerdem wird die erforderliche Prozedur meist nicht in den Datenblättern beschrieben. |
| 2 | Programmieren: Spätestens nach Auswahl dieser Option sollte sich das EPROM im Programmiersockel befinden. Das Gerät wartet nun auf die zu programmierenden Daten im
Intel Hex Format. Dazu benutzt man am Terminalprogramm die Funktion "Textdatei senden" oder "ASCII senden" und wählt die gewünschte Datei aus. Das Programmiergerät liest die
Daten ein und arbeitet sie zeilenweise ab, d.h. nach dem fehlerfreien Empfang einer Hex-Zeile wird das EPROM eingeschaltet und die in der Zeile enthaltenen Daten werden programmiert. Danach wird das EPROM wieder
abgeschaltet und auf die nächste Zeile gewartet. Bei erfolgreicher Programmierung wird die Anfangsadresse des Blockes und ein "OK" auf dem Bildschirm ausgegeben, anderenfalls die Adresse und
"Fehler". Übrigens, der Datenempfang über die RS232-Schnittstelle erfolgt interruptgesteuert, so dass während der Programmierung bereits neue Daten im Hintergrund in einem 64 Byte großen Pufferspeicher empfangen werden können. Wird in den empfangenen Daten ein Fehler erkannt, so erscheint eine Fehlermeldung und der Programmiervorgang wird beendet. Am Terminalprogramm sollte dann das Senden abgebrochen werden und mit der Escape-Taste gelangt man wieder ins Hauptmenü. Wichtig: Bitte nicht versuchen, Binärdateien per XModem, YModem oder ZModem Protokoll zu übertragen - das funktioniert nicht! |
| 3 | Vergleichen: Der Handlungsablauf beim Vergleichen ist praktisch identisch zum Programmieren: Das EPROM wird in den Sockel eingesetzt und am Terminal die Hex-Datei abgesendet. In diesem Fall wird das EPROM aber nicht programmiert, sondern gelesen und mit den empfangenen Daten verglichen. Bei Übereinstimmung einer empfangenen Hex-Zeile mit dem entsprechenden EPROM-Inhalt wird auf dem Bildschirm die Anfangsadresse des Blockes und ein "OK" ausgegeben, bei Ungleichheiten die Adresse und "Fehler". Auch hier gelten die gleichen Hinweise und Warnungen betreffs Fehlermeldungen und Binärdateien. |
| 4 | Lesen: Hier ist vielleicht etwas Übung erforderlich, damit die Aufzeichnung einer Hex-Datei gelingt :-) Aber so schlimm ist es nicht. Nach dem Stecken des EPROMs
und der Auswahl der Lesen-Funktion mit der Taste 4 muss am Terminalprogramm die Funktion "Text empfangen", "ASCII empfangen" oder "Text aufzeichnen" ausgewählt werden. Falls so
eine Möglichkeit nicht existiert, dann startet man stattdessen die Log-Funktion. Ein Druck auf die Enter-Taste im Terminalfenster startet das Lesen - das EPROM wird eingeschaltet und der Inhalt im Intel Hex
Format mit 32 Bytes/Zeile ausgegeben. Je nach Einstellung des Lese-Modus (siehe Option 7) werden dabei entweder alle Bytes ausgeben oder zur Reduzierung der Datenmenge leere Speicherbereiche weggelassen (Zeilen,
die 32 aufeinanderfolgende Bytes mit dem Inhalt 0xFF haben). Am Ende des Datentransfers muss zuerst die Aufzeichnungsfunktion wieder deaktiviert werden und erst dann wird mit einem Druck auf die Enter-Taste ins
Hauptmenü zurückgekehrt. Diese Reihenfolge ist wichtig, damit eine "saubere" Hex-Datei aufgezeichnet wird. Eine Kurzbeschreibung der obenstehenden Prozedur wird bei jeder Lesen-Aktion auf dem Bildschirm ausgegeben. Der Lesevorgang kann jederzeit mit der Escape-Taste abgebrochen werden. |
| 5 | Leertest: Hier werden einfach nacheinander alle Speicherzellen des EPROM ausgelesen und auf den Wert 0xFF geprüft, welcher einer leeren Speicherzelle entspricht. Sind alle Zellen leer, dann wird eine entsprechende Meldung ausgegeben, anderenfalls auch :-) Bei größeren EPROMs kann der Test einige Sekunden dauern. |
| 6 | Löschen: Diese Funktion ist natürlich nur bei Flash-EPROMs anwendbar und bewirkt das Löschen des gesamten Speicherbereiches mit der Funktion "Chip
Erase". Das Löschen beginnt sofort nach Auswahl dieser Option, eine Sicherheitsabfrage erfolgt nicht. Das Löschen kann je nach IC-Typ bis zu einer Minute dauern.
Hinweis: Mit Speicherschutz versehene Flash-EPROMs können nicht gelöscht werden. Dies lässt die Hardware des Programmiergerätes leider nicht zu, außerdem wird die erforderliche Prozedur meist nicht in den Datenblättern beschrieben. |
| 7 | Lese-Modus: Mit dieser Option wird der Lese-Modus umgeschaltet. Es stehen zwei Möglichkeiten zur Auswahl: alle Bytes - Es werden alle Bytes des EPROMs gelesen und zum Terminal gesendet. ohne 0xFF - Zur Bescheunigung des Lesens werden leere Speicherblöcke nicht zum Terminal übertragen. Das ist der Fall, wenn mindestens 32 aufeinander folgende Bytes den Inhalt 0xFF haben. Die aktuelle Einstellung des Lese-Modus wird im EEPROM des Controllers gespeichert und bleibt auch beim Abschalten des Gerätes erhalten. |
| 8 | Sprache: Mit dieser Option wird die Sprache für die Menüführung umgeschaltet. Es stehen zwei Möglichkeiten zur Auswahl: deutsch - Menütexte sind in deutscher Sprache. english - Menütexte sind in englischer Sprache. Die aktuelle Einstellung der Sprache wird im EEPROM des Controllers gespeichert und bleibt auch beim Abschalten des Gerätes erhalten. |
| 9 | RS232 Baudrate: Hiermit kann man die Baudrate der seriellen Schnittstelle ändern. Im folgenden Menü werden die möglichen Raten von 115200, 57600, 38400 und
19200 Baud angeboten. Wird die bereits verwendete Baudrate ausgewählt, dann erscheint sofort wieder das Hauptmenü. Bei Auswahl einer abweichenden Rate erscheint ein kurzer Hinweis auf die folgende
Prozedur und die rote LED blinkt im Sekunden-Takt. An dieser Stelle muss zunächst das Terminal auf die neue Baudrate umgestellt werden. Danach ist es erforderlich, das Programmiergerät aus- und wieder
einzuschalten. Nun sollte wieder das Hauptmenü auf dem Bildschirm zu sehen sein. Falls nicht, dann muss eventuell das Terminalprogramm neu gestartet werden. Mit ESC kann man übrigens ohne Änderung
ins Hauptmenü zurückkehren.
Auch die aktuelle Einstellung der Baudrate wird natürlich im EEPROM des Controllers gespeichert und bleibt beim Abschalten des Gerätes erhalten. |
Noch ein paar Praxis-Tipps: Es empfiehlt sich, die Default-Einstellung von 115200 Baud zu verwenden, denn niedrigere Raten verlangsamen den Programmier- und Lesevorgang enorm. Eine Reduzierung ist nur erforderlich, wenn es Probleme bei der Datenübertragung gibt. Ich habe hier hauptsächlich mit dem Hyperterminal von Windows 98 und XP gearbeitet, dabei sind auch bei hoher Systemauslastung nie Fehler beim Transfer zum Programmiergerät (Programmieren und Vergleichen) aufgetreten. In der Gegenrichtung sind beim EPROM-Lesen mit 115200 Baud unter Windows 98 gelegentlich ein paar Zeichen verlorengegangen, was aber eher eine Schwäche von Windows ist. Ich habe daraufhin nach jeder Hex-Zeile eine kurze Verzögerung von 500µs eingefügt und seitdem klappt es fehlerfrei. Unter DOS gab es grundsätzlich keine Übertragungsfehler, auch ohne die zusätzliche Pause.
Sollten viele Übertragungsfehler beim Programmieren oder Vergleichen auftreten, dann sollte man auf jeden Fall kontrollieren, ob das CTS/RTS (Hardware) Protokoll aktiviert ist. Andere Einstellungen wie XON/XOFF oder kein Protokoll führen mit Sicherheit zu Problemen!
Insgesamt 6 Terminalprogramme habe ich zusammen mit dem Programmiergerät getestet: unter DOS die Klassiker Telix und Telemate sowie das Terminal des Norton Commanders, unter Windows 98 das Hyperterminal und ZOC und
unter Windows XP das Hyperterminal. Probleme gab es nur mit dem Norton Terminal und leider auch mit dem Hyperteminal von Windows XP. Alle anderen Programme sind bestens zum Programmieren geeignet. Die beiden genannten
Ausnahmen funktionieren natürlich auch, allerdings werden beim Senden von ASCII-Dateien lange Pausen zwischen den Zeilen bzw. Zeichen eingefügt, so dass die Programmierung und der Vergleich im Schneckentempo
ablaufen.
Für das XP-Hyperterminal habe ich leider keine Möglichkeit gefunden, den Transfer beim Senden zu beschleunigen, so dass ich einfach das Hyperterminal von Windows 98 (bestehend aus den Dateien "Hypertrm.exe",
"hypertrm.dll" und "hticons.dll") in Windows XP kopiert habe. Damit funktioniert alles perfekt. Falls ich eine bessere Lösung finden sollte, dann werde ich diese selbstverständlich hier kundtun.
Beim Ein- und Ausschalten des Programmiergerätes sollte zur Sicherheit kein EPROM im Sockel stecken, da hier undefinierte Zustände auftreten können. Ansonsten kann man bei ausgeschalteter roter LED jederzeit das EPROM stecken oder entfernen. In diesem Fall ist der Sockel spannungsfrei geschaltet, d.h. Vcc und Vpp sind abgeschaltet, alle Adress- und Steuerleitungen liegen auf Low-Pegel und die Datenleitungen sind auf Eingang (hochohmig) geschaltet.
Noch etwas zur roten LED: Diese zeigt verschiedene Zustände an. Zunächst leuchtet sie beim Einschalten für etwa 1s auf und verlischt dann wieder. Beim normalen Betrieb des Programmiergerätes zeigt sie durch Dauerleuchten einen Zugriff auf das EPROM an, eventuell kann die LED beim Programmieren oder Vergleichen flackern, wenn die Daten nur "tröpfelnd" das Programmiergerät erreichen. Das ist aber normal. Nicht normal ist, wenn die LED im 5Hz-Rhythmus blinkt. Dann ist nämlich ein Fehler beim Senden aufgetreten. Normalerweise versucht das Gerät, alle auftretenden Fehler zwecks Bildschirmanzeige an den PC zu senden. Wenn aber kein Senden möglich ist, dann wird durch Blinken der LED auf diesen Fehler hingewiesen. Ein Sendefehler tritt auf, wenn die Handshakeleitung RTS vom angeschlossenen Computer länger als 1.1s deaktiviert ist. Das passiert aber erfahrungsgemäß nur, wenn man das Programmiergerät einschaltet ohne vorher das Terminalprogramm zu starten, bei laufender Datenübertragung dürfte dieser Fehler normalerweise nicht auftreten.
Ich habe mal im praktischen Betrieb einige Zeiten gemessen, an denen man sich orientieren kann:
| EPROM-Typ | Programmieren über RS-232 | Lesen über RS-232 |
Programmieren über USB | Lesen über USB |
| 27C256 | 0:09 min | 0:09 min | 1:08 min | 0:09 min |
| 29F010 | 0:32 min | 0:33 min | 4:40 min | 0:33 min |
| 29F040 | 2:11 min | 2:09 min | 18:41 min | 2:09 min |
Dabei fällt auf, dass das Programmieren über USB nur sehr langsam läuft. Ich denke aber, dass man hier durch eine Vergrößerung des Empfangspuffers beim Programmiergerät die Zeiten noch etwas verbessern kann. Das werde ich mir bei der nächsten Gelegenheit mal anschauen.
Aufbau
Wie bei allen Projekten auf dieser Seite so gibt es auch hier keine fertige Platine. Das hat verschiedene Gründe, die ich auf der Seite Allgemeines beschrieben habe. Das Programmiergerät wurde auf einer Punktrasterplatine im Euroformat mit den Standardmaßen 160 mm x 100 mm aufgebaut. Lange Zeit habe ich die Platine ohne Gehäuse verwendet, weil ich nichts geeignetes fand. Inzwischen konnte ich aber ein passendes Gehäuse (TEKO KL11) auftreiben.
In den folgenden Bildern ist die Platine von beiden Seiten zu sehen. Im oberen Teil der Platine befinden sich die Stromversorgung und die Transistoren zum Schalten der EPROM-Spannungen. Die Spannungsregler IC201 und IC203 müssen nicht unbedingt mit so großen Kühlkörpern ausgestattet werden, ein kleines Kühlblech ist völlig ausreichend. IC202 benötigt gar keine zusätzliche Kühlung. Im unteren Teil ist der AT90S8515 zu sehen, umgeben vom MAX232 und der seriellen Schnittstelle links, dem Latch oben und dem Programmieranschluss für den µC unten. Der Quarz ist unter dem µC versteckt. Rechts daneben befinden sich die Jumper und der 32-polige Programmiersockel. In der Mitte sind die beiden LEDs angeordnet, wobei die obere eigentlich grün sein sollte :-)
Ein Blick auf die Bestückungsseite der Platine.
Die Jumper sind hier in folgender Reihenfolge angeordnet:
JP201, JP202
JP203, JP204
JP205, JP206
JP207, JP208
JP209, JP210
Dieses Bild zeigt die Rückseite der Platine. Kurze direkte Verbindungen wurden mit verzinntem Kupferdraht hergestellt. Für längere Verbindungen habe ich 0,3 mm Kupferlackdraht
("Fädeldraht") verwendet.
Hier ist das fertig aufgebaute Gerät zu sehen. Als Gehäuse habe ich ein TEKO KL11 (erhältlich z.B. bei Reichelt Elektronik) verwendet, welches relativ preiswert und fast optimal für diesen Zweck
geeignet ist. Für den Programmiersockel und die Jumper habe ich einen großen Ausschnitt ausgesägt, damit man gut an alles herankommt. Auf der linken Seite (nicht sichtbar) befinden sich noch zwei
Aussparungen für den Stromanschluss und die serielle Schnittstelle.