Früher™ waren nichtflüchtige Speicher von Mikrocontrollern und EPROMs nicht elektronisch löschbar. Entweder, man hat nach einmaligem Programmieren Elektroschrott oder ein hoffentlich funktionierendes Programm auf dem Controller. Abhilfe schafften die praktischen aber auch recht teuren Mikrocontroller und Speicherbausteine mit einem kleinen Quarzglasfenster, welche mit einem UV-Löschgerät gelöscht und erneut programmiert werden konnten (oder immer noch können). Mir sind ein paar der PIC16C76-JW mitsamt der notwendigen Tools in die Hand gefallen.
Hardware
Spezielle Controller erfordern spezielle Hardware. Zum Beispiel ein UV-Löschgerät, mit dem sich bereits programmierte Controller wieder löschen lassen. Dabei handelt es sich um einen kleinen Kasten mit einer UV-C-Röhre und einem integrierten Timer. Da UV-C nicht gerade gesund ist und mir Fälle von „Programmierer-Sonnenbrand“ bekannt sind, habe ich die bei meinem Gerät deaktivierten Sicherheitsfunktionen wie den Türschalter wieder in Betrieb genommen. Nun erlischt die UV-Röhre, sobald man die Abdeckung öffnet.
Und die alten windowed PICs lassen sich natürlich nicht mit dem modernen PICkit3 programmieren, also braucht es zum Beispiel das fast fünfundzwanzig Jahre alte PICSTART Plus, ein universelles Programmiergerät mit serieller RS232-Schnittstelle und praktischem Nullkraftsockel. Erfreulicherweise funktioniert das Programmiergerät mit einem USB-RS232-Adapter auch an einem modernen Computer.
Und da ein nackiger PIC zwar schön anzusehen, aber doch recht nutzlos ist, braucht es für die ersten Schritte noch eine kleine Test-Hardware. Zufälligerweise habe ich da noch ein minimalistisches Board, welches neben Platz für den Controller auch noch einen Quarz und eine LED enthält. Das sollte für ein „proof of concept“ ausreichen.
Die Controller sind übrigens doppelt gesockelt, damit beim Herausnehmen und in die Testschaltung setzen die eigenen Anschlussbeine des Controllers geschont werden. Den Sockel kann man leicht und günstig tauschen. Den PIC seinerzeit nicht, kostete der PIC16C76 mit Fenster doch etwa 10DM.
Software
Löschgerät: Check.
Programmiergerät: Check.
Testschaltung: Check.
Software: Pending.
Ein Controller ohne Software ist wie ein Fisch ohne Fahrrad. Oder so ähnlich. Ein kleines C-Programm, welches die LED an RB0 zum Blinken bringt, sollte binnen weniger Minuten zu erstellen sein. Denkste. Das aktuelle MPLAB X von Microchip unterstützt den PICSTART+ Programmer nicht. Also habe ich MPLAB 8.92 installier, das ist die letzte Version vor MPLAB X, welche den Programmer unterstützt. Leider ist bei MPLAB standardmäßig kein C-Compiler bei und der vom X ist zu neu. Und einen alten installieren wollte ich auch nicht. Egal, ich hab ja mal PIC-Assembler in der Berufsschule gehabt. Kann ja so schwer nicht sein. Und es war auch nicht schwer.
Damit blinkt eine LED mit 2Hz.
Natürlich läuft so ein Programm nicht auf Anhieb. Bei einem modernen Controller kann man schnell etwas ändern und das neue Programm auf den Controller brennen, ohne ihn aus der Schaltung nehmen zu müssen. Bei diesen Controllern ist das etwas anders und ich bin froh, dass ich nicht nur einen dieser PICs habe.
Auf dem Löschgerät liegen dauerhaft ein paar PICs. Hat man ein Programm verhauen, nimmt man einen gelöschten aus dem Löschgerät, programmiert ihn, setzt ihn in die Schaltung und legt den vorherigen Controller in das Löschgerät. Da ein Löschvorgang etwa 10 Minuten beträgt, kann man so den Arbeitsablauf einigermaßen flüssig halten und muss nicht auf das Löschen der Controller warten.
War man sich sicher, dass das Programm nun fehlerfrei läuft, konnte man das Programm für die Serienfertigung auf deutlich günstigere PICs ohne Fenster brennen und verwenden. Nur dort wurde man das Programm im Falle eines Fehler so schnell nicht mehr los. Röntgen wäre eine Möglichkeit gewesen.
Es war definitiv ein interessanter Ausflug in eine noch nicht so lang zurückliegende Ära. Ich bin froh, dass Flash-Speicher und elektronisch löschbarer Speicher günstig und Standard geworden sind.
Oh. Wenn man nicht aufgepasst hat, ist übrigens auch Tageslicht in der Lage, den Controller zu löschen. Entweder, das Programm war nach ein paar Tagen in der Sonne weg, oder einzelne Speicherzellen haben sich geändert, wodurch das Verhalten unvorhersehbar wurde. Daher sieht man noch heute, wenn man einen Controller mit Fenster in freier Wildbahn findet, dass das Fenster mit einem lichtundurchlässigen Aufkleber verschlossen ist.
Quelltext
Für alle Interessierten gibt es hier noch den Sourcecode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | ;************************************************************ ; Processor: PIC16C76 at 8 MHz using external oscillator ; Function: Flash a LED connected to RB0 ; Author: Sebastian Rietig ;************************************************************ LIST P=16C76, R=DEC ; Use the PIC16C76 and decimal system #include "P16C76.INC" ; Include header file __config _WDT_OFF & _PWRTE_OFF & _BODEN_ON & _XT_OSC ; ----------- ; INITIALIZE ; ----------- ORG 0x000 ; Program starts at 0x000 CLRF PORTA ; Initialize port A CLRF PORTB ; Initialize port B BSF STATUS,RP0 ; RAM bank 1 CLRF TRISA ; All pins port A output CLRF TRISB ; All pins port B output BCF STATUS,RP0 ; RAM bank 0 MOVLW 7 MOVWF ADCON1 ; Comparators off, all pins digital I/O ; ---------- ; MAIN LOOP ; ---------- Main BSF PORTB,0 ; Turn on LED connected to RB0 CALL Delay BCF PORTB,0 ; Turn off LED connected to RB0 CALL Delay GOTO Main ; Delay = 0.5 seconds ; Clock frequency = 8 MHz ; http://www.piclist.com/techref/piclist/codegen/delay.htm CBLOCK 0x20 d1 d2 d3 ENDC Delay ;999990 cycles MOVLW 0x07 MOVWF d1 MOVLW 0x2F MOVWF d2 MOVLW 0x03 MOVWF d3 Delay_0 DECFSZ d1, f GOTO $+2 DECFSZ d2, f GOTO $+2 DECFSZ d3, f GOTO Delay_0 ;6 cycles GOTO $+1 GOTO $+1 GOTO $+1 ;4 cycles (including call) RETURN END |