^

 5PiP  der 5-Parts-PIC-Programmer 



5PiP - ein PIC "bitbanging" Programmer für die serielle Schnittstelle, bestehend aus 3 Widerständen und zwei Dioden.

5PiP auf Steckbrett Nach den ermutigen Versuchen mit dem 4-Teile-AVR-Programmer wollte ich ähnliches mit PIC-Microcontrollern probieren. Die Homepage von Lothar Stolz ließ hoffen, dass es mit ähnlich geringem Aufwand funktionieren könnte. Die Lothar-Stolz-Variante ist für Low-Volt-Programming (LVP) vorgesehen. Das kann nicht jeder PIC und wenn, wird ein Pin verbraucht, der sonst für andere Zwecke zur Verfügung stehen würde. Die Standardvariante einen PIC zu programmieren ist High-Volt-Programming (HVP). Dabei geht der PIC in den Programmiermodus, wenn eine Spannung um die 10V an den MCLR-Pin angelegt wird. Glücklicherweise stellt eine "richtige" serielle Schnittstelle Spannungen in dieser Höhe zur Verfügung (bei mir knapp 12 V). Welche Programmierspannung (Vpp) die verschiedenen Modelle genau brauchen, ist hier schön aufgelistet. Meine Erfahrung dazu: Etwas höhere Spannungen als in der Spezifikation gehen auch.

Damit ist der Nachteil auch schon genannt: Das Ganze funktioniert nicht mit Schnittstellen, die geringere Spannungen liefern (Notebooks) und nicht mit USB-seriell-Adaptern. Besitzer von aktuellen Desktop-PCs ohne serielle Schnittstelle sollten mal nachsehen, ob diese nicht doch auf dem Motherboard vorhanden ist, nur nicht nach außen geführt ist. Haben wir kein Glück, sollte auch eine PCI-Einsteckkarte funktionieren (habe ich allerdings nicht getestet). Haben wir aber einen Windows PC mit einem "echten" COM-Port, können wir mit minimalem Aufwand einen PIC programmieren (flashen).
 
5PiP kann aber noch mehr; er kann über seine Verbindungen auch Daten mit dem PC austauschen. Wir brauchen erstmal keine andere Hardware, wie z.B. LCD-Displays wenn der PIC uns etwas mitteilen möchte. Das Steckbrett-Arrangement auf dem Bild zeigt das was wir brauchen, um eine LED zum Leuchten zu bringen und Daten per UART in beiden Richtungen auszutauschen. Bei dem PIC handelt es sich um einen 16f1509. Auf dem PC werden die Daten in einem Terminal-Programm angezeigt. Wir müssen nur darauf achten, dass entweder die Programmer-Software ODER das Terminal-Programm die Schnittstelle benutzen kann. Da beides gleichzeitig keinen Sinn macht (während des Programmiervorgangs sind eh keine sinnvollen Daten zu erwarten), müssen wir nur unsere Programme sinnvoll konfigurieren. Schlau ist es, das Terminalprogramm so einzustellen, dass es die Schnittstelle freigibt, solange es den Fokus verloren hat. Die ganz unten verlinkten Programme können das.

Die fünf Bauteile sind auf einem kleinen Stück Lochraster-Platine aufgelötet und fest mit einer 9Pol SubD Buchse verbunden. Sinnvollerweise leisten wir uns noch ein serielles Verlängerungskabel (braucht der Bastler immer). Selbiges eingerechnet wird unsere Hobbykasse mit lediglich 3 Euro (ca.) belastet!

Wer über USB arbeiten möchte kann auch folgendes erwägen: Über 5PiP und einen alten PC mit besagter serieller Schnittstelle flashen wir einen Bootloader auf einen PIC unseres Interesses. Der Bootloader nimmt Programme dann asynchron (also  gerade nicht per "bitbanging") über die serielle Schnittstelle entgegen und programmiert quasi sich selbst. Das geht dann auch mittels USB-seriell-Adapter. Für manche PICs gibt es sogar Bootloader, die ohne Adapter direkt an USB angeschlossen werden können.

Schaltplan

SchaltplanDie gesamte Pegelwandlung der seriellen Schnittstelle geschieht über möglichst hochohmige Widerstände in Verbindung mit den internen Schutzdioden des PIC. Die negativen Pegel der seriellen Schnittstelle werden so auf max. -0,7 V begrenzt. Der Programmer funktioniert also grundsätzlich ohne die Schottky Dioden. Diese negativen Spannungen hat einige meiner Test-PICs (an PGD bei m 16f1509, an MCLR beim 16f1789) offenbar in den RESET-Modus gezwungen. Das hat sich so geäußert, dass sie (nach erfolgreicher Programmierung) erst gestartet sind, nachdem der 5PiP entfernt wurde. Die Schottky-Diode begrenzt die negativen Spannungen auf ca. 0,2 V, was den geschilderten Effekt verhindert.

Die Verbindung vom UART-Ausgang des PIC nach TxD des PC ist für die Programmier-Funktion nicht erforderlich. Hier kann der PIC im Betrieb Daten an den PC schicken.

Falls wir auch eine UART-Datenleitung in Gegenrichtung brauchen, ergänzen wir eine Verbindung von PGD (hier kommt ja TxD vom PC an) über einen weiteren 47kOhm Widerstand zum Rx-Eingang des PIC.

Die Stromversorgung der Schaltung muss separat erfolgen.

Platine

Unser Super-Primitiv-Programmer liefert sicherlich nicht die beste Signalqualität. Zum Glück habe ich kein Oszilloskop, um das Elend sehen zu können. Der Test der Prototypen hat ergeben, dass sich parallele Signalleitungen offenbar gegenseitig stören und manche PIC-Modelle da sehr pingelig reagieren. Das äußerte sich dann so, dass der PIC von der Programmiersoftware nicht erkannt wurde oder beim Verify Fehler auftraten. Auf Kabel jenseits der seriellen Schnittstelle verzichten wir deshalb einfach und bauen das Ganze zwischen einer Stiftleiste und einem weiblichen 9pol SubD Stecker auf.
 
Auf der Platine sollen die Signalwege möglichst kurz sein. Sie ist deshalb klein gehalten und beidseitig bestückt. Etwas "tricky" ist die Kabelführung der MCLR-Leitung. Das computerseitige Ende des 10 kOhm Widerstandes geht durch die getrennte Leiterbahn auf die Unterseite und von dort mittels des orangen Kabels auf Pin 7 der SubD Buchse.

Die Pinreihenfolge ist so gewählt, dass wir mit möglichst wenig Zusatzverdrahtung einen im Steckbrett befindlichen PIC verbinden können. Die Verbindung kann im Betrieb gesteckt bleiben.

Die Unterbrechungen sind mit einem 5mm Bohrer erzeugt und im Bild unten gelb hervorgehoben. Den Bohrer aber bitte nicht mit Maschine benutzen; einfach zwischen Daumen und Zeigefinger drehen.

Als Dioden habe ich vorhandene 1N5817 verwendet, weil ich da mal einen ganzen Haufen bei Pollin günstig ergattert habe. Die sind schwer überdimensioniert. Kleinere tun's sicher auch, es müssen aber Schottky Typen sein! Sind keine zur Hand, können wir es erstmal ohne versuchen (siehe Punkt Schaltplan).

5Pip von unten5Pip von unten

5PiP_Lochraster


Die ProgrammiersoftwarePicPgm GUI

Dazu gibt es eine klare Empfehlung: PICPgm.

Kostenlos, kann sehr viele PICs bearbeiten und ist flexibel konfigurierbar. Außerdem gibt es eine GUI- und eine Kommandozeilen-Version. Letztere eignet sich astrein, um in Programmierumgebungen eingebunden zu werden. Rechts sehen wir, wie die GUI aussieht wenn alles richtig verbunden ist.

Wenn wir PICPgm von der Originalseite laden, ist es nicht für 5PiP konfiguriert. Das können wir leicht machen, indem wir die "Programmer Selection/Configuration" anpassen, wie unten gezeigt. Alternativ können die Datei "pgmifcfg.xml" editieren.

Noch weniger Stress haben wir, wenn wir den Download vom Ende dieser Seite nehmen. Das im ZIP enthaltene PicPgm braucht nicht installiert zu werden (portable). Einfach den enthaltenen Ordner entpacken, es ist alles fertig konfiguriert. Auch im Komplettpaket für Great-Cow-Basic (Link am Ende der Seite) ist alles fertig vorbereitet.

Platine testen und PicPgm einstellen

Programmer Selection/ConfigurationErst testen, dann anschließen!

Bevor wir unser neu zusammengelötetes Werk auf einen richtigen PIC loslassen, sollten wir einige Tests durchführen. Dabei hilft uns PICPgm. Zuerst rufen wir Hardware - Hardware Selection/Configuration ...  auf. Dann sollte das folgende Fenster erscheinen. Dort müssen wir die rot gekennzeichneten Einstellungen machen und anschließend auf "Enable Test" klicken. Anschließend können wir die Leitungen einzeln HIGH oder LOW setzen. Das Ergebnis messen wir mit einem Voltmeter an den Pins unseres Programmers.

Hardware-testOhne verbundenen PIC sollten folgende Pegel /Ca.-Werte) messbar sein:
MCLR / Vpp:    EIN +12V;  AUS -0,2V (Schottky Diode!)
Clock (PGC):   EIN +12V;  AUS -12V
DataOut (PGD): EIN +3,8V; AUS -0,2V (Schottky Diode!)
Bei aktiviertem DataOut muss in DataIn automatisch
ein Häkchen erscheinen.


Mit
verbundenem und spannungsversorgtem PIC sollten wir folgendes messen:
MCLR / Vpp:    EIN +10V;  AUS -0,2V (Schottky Diode!)
Clock (PGC):   EIN +3,8V; AUS -0,4V
DataOut (PGD): EIN +3,9V; AUS -0,2V (Schottky Diode!)
Bei aktiviertem DataOut muss in DataIn wieder ein Häkchen erscheinen.

Sind alle Pegel in dem Rahmen wie angegeben schaltbar, können wir dieses Fenster schließen. Wenn wir jetzt im Hauptfenster auf das Symbol mit dem Fragezeichen klicken, muss der angeschlossene PIC unter "Device Information" erscheinen. Der 5PiP ist einsatzbereit!

 

Getestete Controller

Folgende Controller haben bei mir erfolgreich mit 5PiP zusammengearbeitet:
PIC
Besonderheiten
12F1501

12LF1501
 3 Volt Version
12F1822

12F1840

16F628AEvtl. geeignet für die IL-Compiler Demo  http://www.il-online.de/il_demo1.htm 
16F688
16F886

16F1455
Hardware-USB ohne Quarz
16F1509

16F1709

16F1786
12Bit AD Wandler
16F1824

16F1939
Viele Pins für wenig Geld
18F13k50
USB
18F14k50
Grundlage für den USBNub
18F25K20
Geeignet für den freien Amicus18 Compiler von Proton
18F4550
Grundlage für den USB4all von Sprut.


EinschränkungenEnstellung fuer MCLR

Wenn das Programmieren funktioniert, aber das Programm nur nach Abziehen des Programmers läuft, wird der PIC vermutlich durch den LOW-Pegel am MCLR-Pin im Reset-Status gehalten. Bei modernen PICs können wir das verhindern, indem wir MCLR als IO-Pin konfigurieren. Der Great-Cow-Basic Compiler macht das (wenn der PIC es hergibt) als Standard. Beim beim JAL-Compiler benötigen wir dazu folgende Programmzeile in unserem Quellcode:
pragma target MCLR   internal
Haben wir eine Hex-Datei in WinPicPgm geladen, können wir die Konfiguration kontrollieren, wie im Bild dargestellt. Die entscheidenden Stellen sind gelb markiert.

Es gibt jedoch PICs, die diese Möglichkeit nicht haben. Meist handelt es sich um ältere Modelle. Eine Möglichkeit zur komfortablen Programmierung wäre, ein Taster in der Leitung zum MCLR-Pin. Ggf. ist auch ein Pull-Up Widerstand an MCLR nötig (das ist unabhängig vom Programmer).

Geht das Programmieren gar nicht, ist vielleicht die Spannung an MCLR zu klein. Da hilft nur messen und mit dem Datenblatt vergleichen. Bei mir liegen ca. 10,5V an. Damit funktioniert es mit allen getesteten PICs. Notfalls können wir versuchen, den 10kOhm Widerstand schrittweise verkleinern. Unter 4,7 kOhm würde ich aber nicht gehen.


Links und Downloads


Alte Version

5PiP ist der verbesserte Nachfolger von 4PiP; zur alten Version geht es hier.


Zur Startseite


Haftungsausschluss    Impressum

© Frank Steinberg