Beim Studieren und Reparieren von Computern, die älter als ich sind, mussten ROMs geflasht werden. Tests von RAM und Peripheriegeräten durchzuführen. Ich hatte damals keinen normalen Programmierer.
Natürlich ist es möglich, die Logik für den LPT-Port zu kompilieren, aber diese Option wurde verworfen, da für die Verwendung ein anderer alter Mann erforderlich wäre. In modernen Computern ist diese Schnittstelle immer noch vorhanden (obwohl kein vollwertiger Anschluss, sondern am Kamm), und der Kauf einer Karte in einem PCI-Steckplatz ist ebenfalls kein Problem, aber es gibt bereits Schwierigkeiten mit der Software. Es wurde vor langer Zeit geschrieben, als die Arbeit mit Eingabe- / Ausgabeports in Betriebssystemen anders ausgeführt wurde. Dementsprechend funktioniert in modernen Versionen von Windows die Software nicht.
Es ist sofort erwähnenswert, dass ich über die Existenz von TL866 Bescheid weiß. Und selbst während des Entwicklungsprozesses hat er es für sich gekauft, aber er kann keine Chips flashen, die eine hohe Programmierspannung erfordern. Maximal 18 Volt (TL866 + oder 21 für die vorherige Version).
Ein schnelles Googeln führte mich zu diesem Repository . Nachdem ich den Programmierer zusammengestellt hatte, konnte ich ein paar interessante Chips entsorgen. Aber mit der Firmware stellte sich heraus, dass alles viel komplizierter war ... Die Software weiß einfach nicht wie ... Natürlich können Sie es täuschen, indem Sie den falschen Chip freigeben, aber dies funktioniert nicht in allen Fällen und es ist eindeutig nicht unsere Methode
Ich war sehr enttäuscht von der Benutzeroberfläche, die anstelle der klassischen Version mit dem Recht, den Port für den Benutzer auszuwählen, alle verfügbaren seriellen Schnittstellen durchlief. Dementsprechend werden alle Geräte neu gestartet. Es ist wahrscheinlich besonders anstößig, wenn Sie einen 3D-Drucker haben, der 10 Stunden lang ein Teil von einem USB-Flash-Laufwerk druckt, und hier ein solches Setup ...
Die Welt von OpenSource ist insofern wunderschön, als Sie das Projekt nehmen und zu Ihrer Aufgabe hinzufügen können. In diesem Fall gibt es keine Quellcodes für die grafische Oberfläche. Zumindest habe ich sie nicht gefunden, obwohl ich dem Entwickler schreiben konnte. Es wurde interessant und es gab einen kleinen Grund, Qt zu studieren. Die Software wird also plattformübergreifend sein.
Wir nehmen das Schema aus dem vorherigen Projekt als Grundlage und modifizieren das Gerät auf die erforderliche Funktionalität. Ich habe beschlossen, die EEPROM-Unterstützung in Software zu opfern. Dies ist möglicherweise keine gute Lösung, aber elektrisch löschbare Chips benötigen keine so hohe Spannung mehr. Bei der Fertigstellung verließ er sich auf die voluminöseste Mikroschaltung (27C512 für DIP28) und beseitigte alle Unklarheiten bezüglich der Adresszweige. Die gesamte Adresse wird ausschließlich über Schieberegister (74HC595) eingestellt. Dadurch werden die zusätzlichen Beine des Mikrocontrollers selbst frei, die zur Steuerung der Programmierspannungsversorgung benötigt werden. Alle erforderlichen Signale (PRG) können erhalten werden, indem die Adresse geändert wird, bevor sie in die Register geladen wird.
Das Prinzip der Spannungsprogrammierung blieb gleich. Änderungen nur im Bereich des Schutzes von Mikrocontroller-Pins und Schieberegistern. Ich habe die Widerstände (1 KOhm) durch Dioden mit einem Pull-up zum Log ersetzt. 0. Dies ist eine weniger aggressive Option. Obwohl fairerweise und Widerstände funktionieren.
Nachdem ich die Dokumentation für alle interessierenden Chips studiert hatte, stellte ich fest, dass drei Vpp-Einspeisepunkte erforderlich sind:
- 27C16 21-Fuß-ICs (23-Fuß-DIP28-Buchse)
- 27C32 und 27C512 pro Signal #OE (Output Enable)
- 27C64, 27C128, 27C256 auf 1 Bein Mikroschaltungen
Die Mikroschaltungen 27C16 und 27C32 unterscheiden sich von den anderen im Gehäuse, sodass sie den 26. Schenkel der Steckdose mit Strom versorgen müssen. Dies ist die A13-Adresse für größere Brüder. Der Strom vom Ausgang des Schieberegisters sollte ausreichen, um zu arbeiten, aber zum Zeitpunkt des Ladens der Daten gehen seine Ausgänge in den Z-Zustand über. Ein ähnlicher Modus ist zulässig, aber die Einbeziehung einer Zelle in das Lesen oder Schreiben ist kaum die Norm. Daher ist ein zusätzlicher Transistor unter der Leistungssteuerung installiert. Für den 27C16 war ein weiterer erforderlich, der zum Zeitpunkt des Lesens 5 Volt an den Vpp-Eingang liefern muss. Sie können die Programmierspannung natürlich beim Lesen auf 5 Volt einstellen, aber das Umschalten zwischen 25 und 5 Volt ist unpraktisch.
Wenn es ADC-freie Beine gibt, warum dann nicht die Programmierspannung messen? Der Vorstand ist unter dem Arduino Nano geschieden. Es gibt zwei zusätzliche Eingänge, die außer dem ADC nicht verwendet werden können. Dies ist tatsächlich ein Merkmal vieler AVR-Mikrocontroller in einem oberflächenmontierten Gehäuse. Auf der chinesischen Arduino UNO gibt es häufig die Eingänge A6 und A7. In Anbetracht der Tatsache, dass die Spannung bis zu 30 Volt betragen kann (es scheint, dass inländische RF5, vor allem 25 Volt), berechnen wir den Teiler aus dem, was verfügbar ist. Für diese Aufgabe ist eine Genauigkeit von 0,5 Volt ausreichend. Diese Funktion ist kinderleicht und kein Voltmeter.
Es war natürlich möglich, verwirrt zu werden und als WID-Regler (Pulsweitenregelung) zu fungieren, aber es gab keine freien Beine. Daher befindet sich auf der Leiterplatte ein Sitz für den DC-DC-Aufwärtswandler auf dem MT3608-Chip, der für einen Cent bei Ali erhältlich ist.
Nach dem Schema ist das alles.

Der Algorithmus zum Arbeiten mit diesen Mikroschaltungen ist sehr einfach. Sie können es in einem kurzen Video lesen.
Schemata und Software sind im Repository auf GitHub verfügbar: https://github.com/walhi/arduino_eprom27_programmer . Während der Montage können Sie die Werte der Widerstände sicher ändern. Richtig, mit dem Teiler müssen Sie den Skizzencode leicht korrigieren.