|
5PiP - ein PIC
"bitbanging" Programmer für die serielle
Schnittstelle, bestehend aus 3 Widerständen
und zwei Dioden.
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
Die 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).
  |

|
Die
Programmiersoftware
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
Erst
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.
Ohne 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
|
|
16F628A |
Evtl.
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änkungen
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
- Download PICPgm
portable als ZIP (5PiP fertig
konfiguriert)
>03.11.2018
aktualisiert auf PICPgm 1.9.3.1<.
- PICPgm
Homepage (manuelle Konfiguration für 5PiP
erforderlich).
- Great
Cow Basic - ein freier Basic PIC-Compiler
für PICs und AVR-Controller .
- JAL
(Just Another Language) - ein freier Basic
ähnlicher PIC-Compiler mit Unterstützung von
sehr vielen PIC-Modellen.
- 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
|
Alte Version
5PiP ist der verbesserte Nachfolger von 4PiP; zur
alten Version geht es hier.
|
|