Projekt: EPROM-Programmiergerät

Programmiergerät-Bild 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: 21.04.2013

Symbol Downloads

Schaltplanepromprog-sch.zip
Stückliste mit Empfehlungen zur Bauteilbestellungepromprog-stkl.htm
Software für das EPROM-Programmiergerät mit Quelltext in Assemblerepromprog-v106.zip vom 20.04.2013
Platinen-Layout von Hermann Schönbauer im Eagle-Formatepromprog-pl.zip

Symbol Inhaltsverzeichnis

BeschreibungAllgemeine Informationen über das EPROM-Programmiergerät
SchaltungBeschreibung der Schaltung
HardwareBilder und Hinweise zum Aufbau des EPROM-Programmiergerätes
SoftwareInbetriebnahme und Installation der Software
BedienungBedienung des EPROM-Programmiergerätes

Symbol Beschreibung

Größe EPROM-Typ
2 kB2716
4 kB2732A
8 kB2764, 27C64, 28C64B
16 kB27128, 27C128
32 kB27256, 27C256, 28C256
64 kB27512, 27C512
128 kB27C1001, 27C010, 28F010, 29F010B
256 kB27C2001, 27C020, 28F020
512 kB27C4001, 27C040, 29F040B
1 MB27C8001, 27C080
Dieses Programmiergerät dient (wie schon erwähnt) zum Programmieren von EPROMs, EEPROMs und Flash-EPROMs. Alle EPROM-Typen, die damit zurzeit programmiert werden können, findet man in der nebenstehenden Tabelle.

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 speziell für EEPROMs und 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 9600, 19200, 38400, 57600 oder 115200 Baud arbeiten kann, ist völlig ausreichend. Die Bedienung erfolgt durch eine Menüführung, die vom Mikrocontroller 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:

Hauptmenü

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. Einer der 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. Eine grüne LED zeigt an, dass das Gerät eingeschaltet ist und eine rote LED 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 und EEPROMs werden mit dem vom Hersteller empfohlenen Algorithmus (laut Datenblatt) programmiert und gelöscht.

Folgende Features sind noch erwähnenswert:

Symbol 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:

Schaltung 1

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 74HC374 fest auf Massepotenzial gelegt.

Die Controller-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 der Controller-Port A und das EPROM gleichzeitig als Ausgang arbeiten. Außerdem schützen sie die Controller-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 Mikrocontrollers 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 Mikrocontroller die Daten für die Adressleitungen A8-A15 an Port C aus. Diese Daten werden durch einen kurzen High-Impuls auf PB7 in den Latches IC103 und IC104 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 D-Sub-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:

Schaltung 3 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 und eine 2x8-polige Pfostenbuchse.

Wichtig: Der Jumper 1 auf dem UM-100 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.

Hinweis: Leider ist das UM-100 bei ELV nicht mehr lieferbar, kann aber durch das neue Modul UM2102 ersetzt werden. Auch andere Händler bieten inzwischen ähnliche Module an.

Teil 2 des Schaltplans zeigt die Stromversorgung, die Schaltstufen für die EPROM-Spannungen, das Jumperfeld und den Programmiersockel:

Schaltung 2

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 geht man wie folgt vor: Die Fassung für den Mikrocontroller IC101 bleibt zunächst leer, stattdessen wird hier eine Drahtverbindung von Pin 40 auf Pin 4 gesteckt. Damit liegt ein High-Potenzial auf der Leitung „Vpp ein“ und die Programmierspannung ist dauerhaft eingeschaltet. Zum Messen der Spannung wird ein Messgerät an die Kathode von D207 angeschaltet (Leitung Vpp in Schaltungsteil 2). Der Jumper 202 muss ich dabei in Stellung 6 befinden. 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 Mikrocontroller-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 ist noch eine weitere Drahtverbindung von Pin 40 auf Pin 3 erforderlich und mit R211 wird eine Spannung von 5.05V an Vcc eingestellt. Mit einem gesteckten EPROM werden sich später die Spannungen auf ca. 5.0V bzw. 6.4V einstellen.

Einige 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 Mikrocontroller, 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 Schönbauer 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.

Symbol Hardware

Wie bei allen Projekten auf dieser Seite gibt es auch hier keine fertige Platine. Das Programmiergerät wurde auf einer Lochrasterplatine im Euroformat mit den Standardmaßen 160 mm x 100 mm aufgebaut.

Auf 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 bzw. ATmega8515 zu sehen, umgeben vom MAX232 und der seriellen Schnittstelle links, dem Latch oben und dem Programmieranschluss unten. Der Quarz ist unter dem Controller 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 (wurde später geändert).

Platine vorn 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

Platine hinten

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

Programmiergerät fertig

Hier ist das fertig aufgebaute Gerät zu sehen. Als Gehäuse habe ich ein TEKO KL11 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.

Symbol Software

Die gesamte Steuerung des Programmiergerätes übernimmt ein Mikrocontroller AT90S8515 oder ATmega8515. 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-v106.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.

Wird in diesem Projekt ein ATmega8515 verwendet, dann muss die richtige Einstellung der Fuse-Bits beachtet werden:

Fuse-Bits 1 So sieht die Einstellung im AVR-Studio für den ATmega8515 aus. Wird eine Programmiersoftware verwendet, die die Angabe der Fuse-Bits in hexadezimaler Form benötigt, dann gilt:

High = 0xD1
Low = 0x3F

Fuse-Bits 2 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/Deaktivieren des Programmiermodus, zum Programmieren eines Bytes und zum Vergleich eines Bytes nach dem Programmieren 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 Software des Programmiergerätes selbstständig. 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 Seite Links, Software kann man ein kleines Tool für diesen Zweck downloaden.

Symbol Bedienung

Zur Inbetriebnahme des Programmiergerätes ist es erforderlich, eine Verbindung zu einem PC herzustellen. Weiterhin muss auf dem PC ein Terminalprogramm gestartet und richtig eingestellt werden. Die verwendete serielle Schnittstelle ist auf 115200 Baud (8N1) und auf Hardware-Flusssteuerung (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 erneut eingeschaltet werden. Sollten anstatt des Hauptmenüs keine oder nur wirre Zeichen im Terminalfenster erscheinen, dann ist vermutlich eine falsche Baudrate eingestellt.

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ückspringen.
Nach der Auswahl 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. Unter Umständen 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 Controllers 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 Blocks 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 ESC-Taste gelangt man wieder ins Hauptmenü.
Wichtig: Bitte nicht versuchen, Binärdateien per XModem-, YModem-, ZModem- oder Kermit-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. Nach dem Stecken des EPROMs und der Auswahl der Lesen-Funktion 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 aufeinander folgende 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 nur bei Flash-EPROMs und gegebenenfalls bei EEPROMs 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 gewählt. Nach Auswahl dieser Funktion wird direkt zwischen deutsch und english umgeschaltet.
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, 19200 und 9600 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 nun 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 der Baudrate ins Hauptmenü zurückkehren.
Auch die aktuelle Einstellung der Baudrate wird 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 verloren gegangen, was aber eher eine Schwäche von Windows ist. Ich habe daraufhin die Software des Programmiergerätes so geändert, dass nach jeder Hex-Zeile eine kurze Verzögerung von 500µs eingefügt wird und seitdem klappt es fehlerfrei. Unter MS-DOS (ja, das gab es einmal) traten grundsätzlich nie Übertragungsfehler auf, auch ohne die zusätzliche Pause.

Sollten viele Übertragungsfehler beim Programmieren oder Vergleichen auftreten, dann sollte man auf jeden Fall kontrollieren, ob die Flusssteuerung mit CTS/RTS (Hardware) aktiviert ist. Andere Einstellungen wie XON/XOFF oder eine ausgeschaltete Flusssteuerung führen mit Sicherheit zu Problemen!

Ich habe mehrere Terminalprogramme 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 Hyperterminal 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) nach Windows XP kopiert habe. Inzwischen arbeite ich mit Windows 7 und auch hier funktioniert das Hyperterminal von Windows 98 immer noch am besten. Das eigentlich recht gute TeraTerm arbeitet hier leider nicht perfekt. Einige Probleme konnten mit dem Update der Software des EPROM-Programmiergerätes auf die Version 1.06 gelöst werden. Für eine fehlerfreie Kommunikation ist es außerdem erforderlich, in den Einstellungen des seriellen Ports eine Verzögerung von 10ms/Zeile einzustellen (ausprobieren).

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. Beim Programmieren oder Vergleichen kann die LED etwas flackern, auch das ist vollkommen normal. Nicht normal ist jedoch, 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-TypProgrammieren
über RS-232
Lesen
über RS-232
Programmieren
über USB
Lesen
über USB
27C2560:09 min0:09 min1:08 min0:09 min
29F0100:32 min0:33 min4:40 min0:33 min
29F0402:11 min2:09 min18:41 min2:09 min

Diese Messungen liegen allerdings schon einige Zeit zurück und wurden unter Windows XP durchgeführt. Unter Windows 7 sind die Programmierzeiten bei Verwendung eines USB-Interfaces wesentlich kürzer.


Startseite - Seitenanfang

Allgemeines - Projekt-Überblick - Links, Software - Neuigkeiten - „Klassiker“ - Galerie - Impressum

AVR-Programmierung - Multifunktionsuhr - Matrixuhr - Tischuhr - Wohnraumuhr - Wecker - LCD-Wecker - Zahnputzuhr - BigBen-Türgong - Fahrtregler - EPROM-Programmiergerät - Temperaturmesssystem - USB-RS232 Interface - Weihnachtsstern - Kleine Projekte