{"id":247,"date":"2018-02-03T00:42:33","date_gmt":"2018-02-02T23:42:33","guid":{"rendered":"http:\/\/www.electronic-idea.de\/wordpress\/?p=247"},"modified":"2018-03-13T21:27:21","modified_gmt":"2018-03-13T20:27:21","slug":"retro-pics-mit-fenster","status":"publish","type":"post","link":"https:\/\/www.electronic-idea.de\/wordpress\/retro-pics-mit-fenster\/","title":{"rendered":"Retro: PICs mit Fenster"},"content":{"rendered":"<p>Fr\u00fcher\u2122 waren nichtfl\u00fcchtige Speicher von Mikrocontrollern und EPROMs nicht elektronisch l\u00f6schbar. 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\u00f6schger\u00e4t gel\u00f6scht und erneut programmiert werden konnten (oder immer noch k\u00f6nnen). Mir sind ein paar der PIC16C76-JW mitsamt der notwendigen Tools in die Hand gefallen.<\/p>\n<p><!--more--><\/p>\n<h1>Hardware<\/h1>\n<p>Spezielle Controller erfordern spezielle Hardware. Zum Beispiel ein UV-L\u00f6schger\u00e4t, mit dem sich bereits programmierte Controller wieder l\u00f6schen lassen. Dabei handelt es sich um einen kleinen Kasten mit einer UV-C-R\u00f6hre und einem integrierten Timer. Da UV-C nicht gerade gesund ist und mir F\u00e4lle von &#8222;Programmierer-Sonnenbrand&#8220; bekannt sind, habe ich die bei meinem Ger\u00e4t deaktivierten Sicherheitsfunktionen wie den T\u00fcrschalter wieder in Betrieb genommen. Nun erlischt die UV-R\u00f6hre, sobald man die Abdeckung \u00f6ffnet.<\/p>\n<div id=\"attachment_263\" style=\"width: 564px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-263\" class=\" wp-image-263\" src=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/uvloeschgeraet-300x200.jpg\" alt=\"\" width=\"554\" height=\"369\" srcset=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/uvloeschgeraet-300x200.jpg 300w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/uvloeschgeraet-768x512.jpg 768w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/uvloeschgeraet.jpg 1000w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><p id=\"caption-attachment-263\" class=\"wp-caption-text\">Kleines UV-L\u00f6schger\u00e4t mit einer Handvoll PICs<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Und die alten windowed PICs lassen sich nat\u00fcrlich nicht mit dem modernen PICkit3 programmieren, also braucht es zum Beispiel das fast f\u00fcnfundzwanzig Jahre alte PICSTART Plus, ein universelles Programmierger\u00e4t mit serieller RS232-Schnittstelle und praktischem Nullkraftsockel. Erfreulicherweise funktioniert das Programmierger\u00e4t mit einem USB-RS232-Adapter auch an einem modernen Computer.<\/p>\n<div id=\"attachment_258\" style=\"width: 410px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-258\" class=\"wp-image-258\" src=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/picstartplus-234x300.jpg\" alt=\"\" width=\"400\" height=\"513\" srcset=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/picstartplus-234x300.jpg 234w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/picstartplus-768x985.jpg 768w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/picstartplus.jpg 780w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><p id=\"caption-attachment-258\" class=\"wp-caption-text\">PICSTART+: Serielles Programmierger\u00e4t f\u00fcr PICs<\/p><\/div>\n<p>Und da ein nackiger PIC zwar sch\u00f6n anzusehen, aber doch recht nutzlos ist, braucht es f\u00fcr die ersten Schritte noch eine kleine Test-Hardware. Zuf\u00e4lligerweise habe ich da noch ein minimalistisches Board, welches neben Platz f\u00fcr den Controller auch noch einen Quarz und eine LED enth\u00e4lt. Das sollte f\u00fcr ein &#8222;proof of concept&#8220; ausreichen.<\/p>\n<div id=\"attachment_267\" style=\"width: 309px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-267\" class=\" wp-image-267\" src=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/testboard-257x300.jpg\" alt=\"\" width=\"299\" height=\"349\" srcset=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/testboard-257x300.jpg 257w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/testboard-768x897.jpg 768w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/testboard-877x1024.jpg 877w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/testboard.jpg 1970w\" sizes=\"auto, (max-width: 299px) 100vw, 299px\" \/><p id=\"caption-attachment-267\" class=\"wp-caption-text\">Ein kleines Testboard f\u00fcr den PIC16C76<\/p><\/div>\n<p>Die Controller sind \u00fcbrigens doppelt gesockelt, damit beim Herausnehmen und in die Testschaltung setzen die eigenen Anschlussbeine des Controllers geschont werden. Den Sockel kann man leicht und g\u00fcnstig tauschen. Den PIC seinerzeit nicht, kostete der PIC16C76 mit Fenster doch etwa 10DM.<\/p>\n<h1>Software<\/h1>\n<p>L\u00f6schger\u00e4t: Check.<br \/>\nProgrammierger\u00e4t: Check.<br \/>\nTestschaltung: Check.<br \/>\nSoftware: Pending.<\/p>\n<p>Ein Controller ohne Software ist wie ein Fisch ohne Fahrrad. Oder so \u00e4hnlich. 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\u00fctzt den PICSTART+ Programmer nicht. Also habe ich MPLAB 8.92 installier, das ist die letzte Version vor MPLAB X, welche den Programmer unterst\u00fctzt. Leider ist bei MPLAB standardm\u00e4\u00dfig 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.<\/p>\n<div id=\"attachment_270\" style=\"width: 842px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-270\" class=\"size-full wp-image-270\" src=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/mplab.png\" alt=\"\" width=\"832\" height=\"715\" srcset=\"https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/mplab.png 832w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/mplab-300x258.png 300w, https:\/\/www.electronic-idea.de\/wordpress\/wp-content\/uploads\/2018\/02\/mplab-768x660.png 768w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><p id=\"caption-attachment-270\" class=\"wp-caption-text\">MPLAB 8.92 mit Testprogramm<\/p><\/div>\n<p>Damit blinkt eine LED mit 2Hz.<\/p>\n<p>Nat\u00fcrlich l\u00e4uft so ein Programm nicht auf Anhieb. Bei einem modernen Controller kann man schnell etwas \u00e4ndern und das neue Programm auf den Controller brennen, ohne ihn aus der Schaltung nehmen zu m\u00fcssen. Bei diesen Controllern ist das etwas anders und ich bin froh, dass ich nicht nur einen dieser PICs habe.<br \/>\nAuf dem L\u00f6schger\u00e4t liegen dauerhaft ein paar PICs. Hat man ein Programm verhauen, nimmt man einen gel\u00f6schten aus dem L\u00f6schger\u00e4t, programmiert ihn, setzt ihn in die Schaltung und legt den vorherigen Controller in das L\u00f6schger\u00e4t. Da ein L\u00f6schvorgang etwa 10 Minuten betr\u00e4gt, kann man so den Arbeitsablauf einigerma\u00dfen fl\u00fcssig halten und muss nicht auf das L\u00f6schen der Controller warten.<\/p>\n<p>War man sich sicher, dass das Programm nun fehlerfrei l\u00e4uft, konnte man das Programm f\u00fcr die Serienfertigung auf deutlich g\u00fcnstigere PICs ohne Fenster brennen und verwenden. Nur dort wurde man das Programm im Falle eines Fehler so schnell nicht mehr los. R\u00f6ntgen w\u00e4re eine M\u00f6glichkeit gewesen.<\/p>\n<p>Es war definitiv ein interessanter Ausflug in eine noch nicht so lang zur\u00fcckliegende \u00c4ra. Ich bin froh, dass Flash-Speicher und elektronisch l\u00f6schbarer Speicher g\u00fcnstig und Standard geworden sind.<\/p>\n<p>Oh. Wenn man nicht aufgepasst hat, ist \u00fcbrigens auch Tageslicht in der Lage, den Controller zu l\u00f6schen. Entweder, das Programm war nach ein paar Tagen in der Sonne weg, oder einzelne Speicherzellen haben sich ge\u00e4ndert, 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\u00e4ssigen Aufkleber verschlossen ist.<\/p>\n<h1>Quelltext<\/h1>\n<p>F\u00fcr alle Interessierten gibt es hier noch den Sourcecode:<\/p>\n<div class=\"codecolorer-container asm default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/><\/div><\/td><td><div class=\"asm codecolorer\"><span class=\"co1\">;************************************************************<\/span><br \/>\n<span class=\"co1\">; Processor: PIC16C76 at 8 MHz using external oscillator<\/span><br \/>\n<span class=\"co1\">; Function: Flash a LED connected to RB0<\/span><br \/>\n<span class=\"co1\">; Author: Sebastian Rietig<\/span><br \/>\n<span class=\"co1\">;************************************************************<\/span><br \/>\n<br \/>\nLIST P=16C76<span class=\"sy1\">,<\/span> R=<span class=\"kw1\">DEC<\/span> <span class=\"co1\">; Use the PIC16C76 and decimal system<\/span><br \/>\n<br \/>\n#include <span class=\"st0\">&quot;P16C76.INC&quot;<\/span> <span class=\"co1\">; Include header file<\/span><br \/>\n<br \/>\n__config _WDT_OFF &amp;amp<span class=\"co1\">; _PWRTE_OFF &amp;amp; _BODEN_ON &amp;amp; _XT_OSC<\/span><br \/>\n<br \/>\n<span class=\"co1\">; -----------<\/span><br \/>\n<span class=\"co1\">; INITIALIZE<\/span><br \/>\n<span class=\"co1\">; -----------<\/span><br \/>\n<br \/>\nORG <span class=\"nu0\">0x000<\/span> <span class=\"co1\">; Program starts at 0x000<\/span><br \/>\n<br \/>\nCLRF PORTA <span class=\"co1\">; Initialize port A<\/span><br \/>\nCLRF PORTB <span class=\"co1\">; Initialize port B<\/span><br \/>\n<br \/>\n<span class=\"kw1\">BSF<\/span> STATUS<span class=\"sy1\">,<\/span>RP0 <span class=\"co1\">; RAM bank 1<\/span><br \/>\n<br \/>\nCLRF TRISA <span class=\"co1\">; All pins port A output<\/span><br \/>\nCLRF TRISB <span class=\"co1\">; All pins port B output<\/span><br \/>\n<br \/>\nBCF STATUS<span class=\"sy1\">,<\/span>RP0 <span class=\"co1\">; RAM bank 0<\/span><br \/>\n<br \/>\nMOVLW <span class=\"nu0\">7<\/span><br \/>\nMOVWF ADCON1 <span class=\"co1\">; Comparators off, all pins digital I\/O<\/span><br \/>\n<br \/>\n<span class=\"co1\">; ----------<\/span><br \/>\n<span class=\"co1\">; MAIN LOOP<\/span><br \/>\n<span class=\"co1\">; ----------<\/span><br \/>\n<br \/>\nMain <span class=\"kw1\">BSF<\/span> PORTB<span class=\"sy1\">,<\/span><span class=\"nu0\">0<\/span> <span class=\"co1\">; Turn on LED connected to RB0<\/span><br \/>\n<span class=\"kw1\">CALL<\/span> Delay<br \/>\nBCF PORTB<span class=\"sy1\">,<\/span><span class=\"nu0\">0<\/span> <span class=\"co1\">; Turn off LED connected to RB0<\/span><br \/>\n<span class=\"kw1\">CALL<\/span> Delay<br \/>\nGOTO Main<br \/>\n<br \/>\n<span class=\"co1\">; Delay = 0.5 seconds<\/span><br \/>\n<span class=\"co1\">; Clock frequency = 8 MHz<\/span><br \/>\n<span class=\"co1\">; http:\/\/www.piclist.com\/techref\/piclist\/codegen\/delay.htm<\/span><br \/>\n<br \/>\nCBLOCK <span class=\"nu0\">0x20<\/span><br \/>\nd1<br \/>\nd2<br \/>\nd3<br \/>\nENDC<br \/>\n<br \/>\nDelay<br \/>\n<span class=\"co1\">;999990 cycles<\/span><br \/>\nMOVLW <span class=\"nu0\">0x07<\/span><br \/>\nMOVWF d1<br \/>\nMOVLW <span class=\"nu0\">0x2F<\/span><br \/>\nMOVWF d2<br \/>\nMOVLW <span class=\"nu0\">0x03<\/span><br \/>\nMOVWF d3<br \/>\nDelay_0<br \/>\n<span class=\"co2\">DECF<\/span>SZ d1<span class=\"sy1\">,<\/span> f<br \/>\nGOTO <span class=\"sy2\">$<\/span><span class=\"sy1\">+<\/span><span class=\"nu0\">2<\/span><br \/>\n<span class=\"co2\">DECF<\/span>SZ d2<span class=\"sy1\">,<\/span> f<br \/>\nGOTO <span class=\"sy2\">$<\/span><span class=\"sy1\">+<\/span><span class=\"nu0\">2<\/span><br \/>\n<span class=\"co2\">DECF<\/span>SZ d3<span class=\"sy1\">,<\/span> f<br \/>\nGOTO Delay_0<br \/>\n<br \/>\n<span class=\"co1\">;6 cycles<\/span><br \/>\nGOTO <span class=\"sy2\">$<\/span><span class=\"sy1\">+<\/span><span class=\"nu0\">1<\/span><br \/>\nGOTO <span class=\"sy2\">$<\/span><span class=\"sy1\">+<\/span><span class=\"nu0\">1<\/span><br \/>\nGOTO <span class=\"sy2\">$<\/span><span class=\"sy1\">+<\/span><span class=\"nu0\">1<\/span><br \/>\n<br \/>\n<span class=\"co1\">;4 cycles (including call)<\/span><br \/>\nRETURN<br \/>\n<br \/>\nEND<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Fr\u00fcher\u2122 waren nichtfl\u00fcchtige Speicher von Mikrocontrollern und EPROMs nicht elektronisch l\u00f6schbar. 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\u00f6schger\u00e4t gel\u00f6scht und erneut programmiert werden konnten (oder immer noch k\u00f6nnen). [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":255,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[16],"tags":[],"class_list":["post-247","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kramkiste"],"_links":{"self":[{"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/posts\/247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/comments?post=247"}],"version-history":[{"count":21,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/posts\/247\/revisions"}],"predecessor-version":[{"id":283,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/posts\/247\/revisions\/283"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/media\/255"}],"wp:attachment":[{"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/media?parent=247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/categories?post=247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.electronic-idea.de\/wordpress\/wp-json\/wp\/v2\/tags?post=247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}