^

 4PiP  der 4-Teile-PIC-Programmer 


4PiP - ein PIC "bitbanging" Programmer für die serielle Schnittstelle, bestehend aus 3 Widerständen und einer Diode.

  4PiP hat einen Nachfolger:  Link

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

Wer über USB arbeiten möchte kann auch folgendes erwägen: Über 4PiP 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.

Die vier Bauteile passen problemlos in ein 9poliges SubD Gehäuse, ich habe sogar unnötig überdimensionierte 1-Watt Widerstände untergebracht (siehe Bild). Wir nehmen eine Buchse, dann passt es direkt an den PC oder ein serielles Verlängerungskabel. Neu am 26.10.2013: Die Lochraster Variante (siehe unten unter "Kabellos ?") ist noch einfacher aufzubauen.

4PiP 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 recht 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 18f14k50. 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.
4PiP_Komplettansicht
4PiP_Stecker
4PiP_im_Steckbrett


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. Dieser negative Pegel an der PGD-Leitung hat einige meiner Test-PICs offenbar in den RESET-Modus gezwungen. Das hat sich so geäußert, dass sie mit verbundenem 4PiP einfach nicht gestartet sind. 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 PGC (hier kommt ja TxD vom PC an) über einen weiteren 47kOhm Widerstand zum Rx-Eingang des PIC.

Die Stromversorgung der Schaltung muss separat erfolgen.

Das Kabel - ein wichtiges Thema !
4PiP_Stecker

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.

Folgende Vorbeugungsmaßnahmen sind unbedingt erforderlich:
  • Serielles Verlängerungskabel benutzen (z.B. Reichelt "AK 230" für € 1,20)
  • Kabel dahinter so kurz wie möglich halten (< 15 cm).
  • Kabel zu PGC mit  Masseleitung verdrillen
  • Kabel zu PGD mit  weiterer Masseleitung verdrillen

Der Stecker

4PiP_SteckerIch habe eine 5-polige Stiftleiste (Rastermaß 2,54mm) mit einem Stück Lochrasterplatine zum Anfassen verbunden.  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.

Kabellos ?   (Update 26.10.2013) 4PiP
                          Rasterplatine unten

Die Idee: Wenn Kabelführung so kritisch ist, verzichten wir doch auf Kabel! Stattdessen löten wir unsere vier Bauteile zwischen Steckerleiste und SubD Buchse auf eine Lochrasterplatine. Das Ganze konstruieren wir möglichst kompakt, um die Leitungslängen kurz zu halten. Herausgekommen ist eine zweiseitig (!) bestücktes Stück Streifenrasterplatine. Anschließen können wir unser Kunstwerk direkt an ein serielles Verlängerungskabel. Die Steckerleiste ist natürlich genau so belegt, wie beim 4PiP mit Kabel.
4PiP Lochraster auf
                      Steckbrett 4PiP Aufbau


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 4PiP 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 GCB@Syn downloaden. Das ist ein Komplettpaket (u.a.) mit Editor, Compiler (Great Cow Basic), Terminalprogramm und PICPgm fertig vorbereitet für 4PiP. Bei allen Programmen handelt es sich um Open Source oder Freeware. Wir brauchen nichts zu installieren, einfach entzippen und starten.

Die Programmiersoftware - Test

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 -12V
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,7V
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 4PiP ist einsatzbereit!

 

Getestete Controller

Folgende Controller haben bei mir erfolgreich mit 4PiP zusammengearbeitet:

PIC
Besonderheiten
12F1840

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

16F1509

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.


Links und Downloads

  • GCB@Syn - Download für das Komplettpaket mit fertig für den 4PiP konfiguriertem PICPgm
  • PICPgm Homepage
  • JAL (Just Another Language) - ein freier Basic ähnlicher PIC-Compiler mit Unterstützung von sehr vielen PIC-Modellen
  • Great Cow Basic - ein freier Basic PIC-Compiler für PICs und AVR-Controller (GCB@Syn nutzt diesen)
  • Sprut.de -  DIE deutschsprachige Seite zum Thema PICs
  • USBNub - ein minimalistisches USB - Entwicklungsboard auf Basis des PIC 18f14k50
  • Terminalprogramme:  Termite,   HTerm,   Terminal by Br@y


Zur Startseite


Haftungsausschluss    Impressum

© Frank Steinberg