PICProg
by Martin Clausen (mc AT rotgradpsi DOT de)
Flash-PIC-Programmer zum Anschluß über die parallele Schnittstelle
Inhaltsverzeichnis:
- Vollständige Abschaltung der Signale und Betriebsspannung, wenn der
PC nicht auf den PIC zugreift.
- Minimaler Hardwareaufwand
- Batchmode Unterstützung
- Programm unterstützt Wiederholung des gleichen Progrmmiervorganges
- Grafische Oberfläche als Aufsatz verfügbar
- Programm ist Freeware für nicht gewerblich Nutzung.
- 5V ISP Version (English) verfügbar
8086, etwas RAM, ca. 50kb Festplattenspeicher, parallele Schnittstelle DOS oder Windows (siehe diese Notiz)
picprog [/h] [/info] [/list] [/init2] [/standby] [/read] [/continue] [/compare] [/noF84] [lpt1|lpt2] [/w:FILENAME]
Die Zeichen bedeuten folgendes:
| /h | Hilfe
|
| /log | schreibt Ausgabe in picprog.log, erzwingt /info
|
| /info | Erweiterte Anzeige der Statusmeldungen
|
| /list | Liste der unterstützten PICs
|
| /init2 | /MCLR vor Vpp Power-up Modus
|
| /standby | Wiederholte Ausführung des Programmiervorgangs
|
| /continue | Fortführung des Programmiervorgangs auch bei Fehlern
|
| /noF84 | blockiert PIC16F84 Modus
|
| /lptX | Angabe der parallelen Schnittstelle
|
| /read | Auslesen des PIC in Hex-Datei, kehrt /w: command um
|
| /compare | Vergleich von PIC und Hex-Datei, übersteuert /w: command
|
| /w: | löscht und brennt PIC mit folgender Hex-Datei, die Extension wird nicht beachtet und auf .hex gesetzt
|
Wenn man ein Programm entwickelt und WinXX benutzt, ist es sehr praktisch eine Verknüpfung zu PICProg auf den Desktop zu legen. Dort kann dann die Kommandozeile eingegeben werden und mit nur einem Klick hat man den PIC programmiert und einem weiteren das Fenster geschlossen.
Alternativ ist es auch möglich die /standby Option zu benutzen. Dann muß man nur das Fenster aktivieren und eine Taste drücken. Das ist besonders nützlich bei der Programmentwicklung oder wenn mehrere gleiche Chips zu programmieren sind.
Das Programm speichert die Hex-Datei nicht zwischen, sondern ließt sie während des Programmiervorganges ein. Daher wird bei richtiger Einstellung des Compilers immer die aktuelle Version der Datei in den Chip übertragen.
Beim Auslesen werden zur Sicherheit alle Daten zweimal abgefragt und dann verglichen. Eine Datei, die durch das Auslesen eines Chips erzeugt wurde, unterscheidet sich von der, mit der der Chip programmiert wurde, weil beim Auslesen der gesamte Speicher ausgelesen werden muß, das Original aber meist nicht dem gesamten Speicher Werte zu weist. Wird diese Hex-Datei wieder in einen PIC programmiert, so ergibt sich natürlich die gleiche Funktion wie beim ausgelesenen Chip. Jedoch wird die Hex-Datei größer und die Brennzeit dadurch länger sein.
Um den Batchmode zu unterstützen, kann der Status via Errorlevel abgefragt werden:
Error level | Nachricht
|
|---|
| 0 | Befehl ausgeführt
|
| 1 | Befehlsausführung fehlgeschlagen
|
| 2 | Fehler in der Hex-Datei
|
| 3 | Keine Programmieraufgabe, keine Datei oder Druckerschnittstelle ausgewählt
|
| 4 | Fataler Fehler
|
ID, configuration word und EEPROM data sollten in Hex-Datei enthalten sein auf :
| Adresse | Speichertyp
|
|---|
| 00000H - 01FFFH | Programmspeicher
|
| 02000H - 020FFH | ID, configuration word
|
| 02100H - | EEPROM
|
Zur Veranschaulichung hier ein Beispiel von Thorsten Klose:
Erkannt werden von dem Programm:
12F629; 12F675
16F72; 16F73; 16F74; 16F76; 16F77
16F84A; 16F84A REV2; 16LF84A; 16F87; 16F88
16F627; 16F627 REV2; 16F627A; 16F628; 16F628 REV2; 16F628A; 16F628A REV2; 16LF627; 16LF628
12F629; 16F630; 16F648A; 12F675; 16F676; 16F818; 16F819
16F870; 16F871; 16F872; 16F873; 16F873A; 16F874; 16F874A; 16F876; 16F876A; 16F877; 16F877A
Auch programmiert, aber nicht erkannt werden:
16C84; 16CL84; 16F83; 16F84
Weitere PICs bei vergleichbarem Programmierverfahren sicherlich möglich. Bei Bedarf mich bitte kontaktieren. Es wird vor dem Programmieren die ID des PIC in picdata.dat gesucht. Wird kein passender Chip gefunden, wird der Befehlssatz des PIC16F84 verwendet. Es wird nicht geprüft ob PIC und Hex-Datei zusammen passen.
Spannungsversorgung
Die Diode D3 schützt die Schaltung vor Verpolung. C14 und C7 stabilisieren und enstören die Betriebsspannung. Ein Standard Spannungsregeler vom Typ 70L05 erzeugt eine 5 Volt Spannung zur Versorgung aller Chips.
Der TL317 bildet mit dem Transistor eine zwischen 13 und 0,8 Volt umschaltbare Spannungsquelle. Die höheren Spannung wird durch den Spannungsteiler R5 und R11 nach folgender Formel bestimmt: Uout = (1 + R5/R11) * Uref . Dabei ist Uref die Referenzspannung des TL317 also 1,25 Volt. Wird die niedrigere Spannung benötigt, so schaltet der Transistor durch und es gilt die Formel Uout = Uref + Vce . Vce ist die Kollektor-Emitter-Spannung des Transistors. Diese Spannung ist mit 1,55 Volt zu hoch um von dem PIC sicher als low erkannt zu werden. Daher wird Uout durch die Diode D5 um 0,7 Volt reduziert. R10 stellt eine minimalen Strom durch die Diode sicher, sonst kann sich durch den Leckstrom der Diode bei sehr niedriger Belastung eine zu hohe Spannung aufbauen.
Drei der CMOS-Schalter des 74HC4066 erlauben es die Betriebsspannung des PIC ein- und auszuschalten. Nur durch die Verwendung aller drei Schalter eines HC Bausteines kann die minimale Versorgungsspannung des PIC garantiert werden. Ein CMOS-Schalter der 4000er Serie hätte einen zu hohen Innenwiderstand.
PC Anschluß
Die Pullup-Widerstände am Eingang des 74LS14 sorgen für definierte Pegel. Wichtig ist die Wahl des bipolaren LS-Chips. Bei einem CMOS-Chip könnten die ESD-Schutzdioden zum Latchup führen, wenn die Schaltung schon an den PC angeschlossen ist, aber nicht mit Strom versorgt wird. Außerdem hat die LS-Serie die richtigen Schaltpegel für die parallele Schnittstelle.
Der Datenpin des PIC wird während des Programmierens bidirektional benutzt, doch der parallel Port kennt in der Standardversion keinen solchen Datenaustausch. Daher muß ein CMOS-Schalter verwendet werden, um das Signal entsprechend der Datenflußrichtung umzuschalten.
- Halbleiter:
- 1 1N 4001 o. ä.
- 1 1N 4148 o. ä.
- 1 BC 547 o. ä.
- 1 74HC 4066
- 1 74LS 14
- 1 78L05
- 1 TL317 bzw. LM317L (TO-92 Gehäuse)
Kondensatoren:
- 1 100µF / 25V axial
- 1 22µF / 16V axial
- 6 100nF ker
Widerstände:
- 1 470
- 1 4,7k
- 4 10k
- 1 10k*5 / 6 Pin Array
Mechanik:
- 1 Sub-D Buchse, 25 pol., Lötkelch
- 1 Kabel, Sub-D Stecker-Stecker, 25 pol.
- 1 Gehäuse
- 1 Lochpunktrasterplatine, ca. 50 mm * 70 mm
- 1 Spule Fädeldraht
- 70 cm Schaltlitze
- 2 Bananenbuchsen
- 3 Fassungen 40 pol. präz.
- 3 Fassungen 18 pol. präz.
- 10 Schrauben, M3, 6 mm
- 2 Muttern, M3
- 4 Abstandsbolzen, M3 Innengewinde, 8 mm
Aus den drei 40 pol. Fassungen den Steg in der Mitte entfernen. Präz. Fassungen der jeweiligen Größe ineinander stecken. Beim Aufbau 18 pol. Fassung in der 40 pol. plazieren. Erst dann verlöten. Platine direkt an der 40 pol. Fassung in das Gehäuse schrauben. Sub-D-Buchse im Gehäuse verschrauben und mit der Platine durch Schaltlitze verbinden. KEIN 4066 oder 74HC 14 verwenden! Der Aufbau sollte nicht höher als 8 mm werden, da sonst die Fassungen zum Programmieren nicht mehr aus dem Gehäuse ragen. U. U. je 4 präz. Fassungen verwenden. Datenblätter stehen z. B. bei Fairchild zum Download bereit.
- Statusmeldungen und Parameter überprüfen
- Hex-Datei defekt, besonders nur CF oder LF anstelle von Beiden am Zeilenende.
- In der Hex-Datei können unimplementierte Bits gesetzt oder gelöscht sein, während das Auslesen des PIC den entgegengesetzten Wert ergibt. Dann wird PICProg einen Fehler melden, aber die implementierten Bits werden dennoch korrekt programmiert worden sein. Dies ist insbesondere für das configuration word von Hex-Dateien für C7X die in F7X programmiert werden wichtig.
- Parallele Schnittstelle u.U. auf Standard oder EPP einstellen.
- Zu langes Kabel zwischen PICProg und PC, je kürzer desto besser.
- Nicht LS durch HC oder HC durch CMOS ersetzen!
- Stabilität der Spannungsquelle prüfen.
- Entkoppelungskondensatoren (100nF ker) dicht an jedem IC plazieren. Nicht alle dieser Kondensatoren sind im Schaltplan eingezeichnet.
- 5 Volt Spannungsversorgung der Logikchips (LS14 und HC4066) prüfen. Diese Verbindungen sind nicht im Schaltplan eingezeichnet.
- Überprüfen der Spannungen während des Programmierens am 40 Pin Sockel:
- Pin 39 und 40 - Signale mit TTL Level
- Pin 1 - 13 Volt
- Pin 11 und 32 - 5 Volt
- Pin 8, 12 und 31 - 0 Volt
- Überprüfen der Spannungen nach dem Programmieren: alle weniger als 0.3 Volt, außer an Pin 1, dort weniger als 0.9 Volt
- Schwingungen auf der Taktleitung können zu sporadisch auftretenden Fehlern führen. Zur Terminierung ein 56 Ohm Serienwiderstand an den Ausgang des Inverters anschließen und ein 22pf Kondensator hinter dem Widerstand am PIC nach Masse schalten.
- Zur Verbesserung der Signalpegel können 10K Widerstände von Pin 6, 8, 10 und 12 U10 (je Pin ein Widerstand) nach 5 Volt geschaltet werden.
- picprog.zip Programm V2.3, benötigt picdata.dat
- picprogsource.zip Quellcode zum Programm (für Power Basic 3.20)
Wichtige Hinweise:
- Für PIC12F629/16F630/12F675/16F676 /init2 verwenden und beachten, daß /MCLR nahe genug an 0V heranreicht, sonst mclre_on mit diesen Chips benutzen.
- Die Benutzung der ID locations bei PIC16F818/F819 wird zu einem Programmierfehler führen.
- picprog2.gif Schaltplan V1.12, niedriger Programmierstrom, guter Schutz für falsch eingesetzte PIC, nicht für PIC16F7X
- picprog.gif Schaltplan V1.12, bei Problemen prüfen, ob /MCLR bis min. 0,8V herrunterreicht, u. U. zu D5 2. 1N4148 oder BAT42 in Serie scahlten
- picbatch.bat Batchmode Support in English only, by Zoltan Toth
- picpcb109.zip Platinenvorlage by Jhankar Nathvani in Protel, für Schaltplan V1.09, mit Bugfix für Vpp Quelle in readme.txt
- recal.zip Programm V0.10 mit Quellcode (für Power Basic 3.20), schreibt Oszillator Kalibrations Wert in 12F629; 12F675; 16F630; 16F676 Vorsichtig einsetzen!
- picprogsetup.zip Windows Programm zur Steuerung von PICProg von RyanB
- picprogsetupsource.zip Source in Delphi für das Windows Programm von RyanB
Die Bauteilebeschriftung ist wie folgt zu lesen:
Bauteiltyp + Wert in exponential Form + Gehäusebezeichnung + Unternummer der Funktionseinheit
zum Beispiel: C1040805,1 ist ein Kondensator, 100nF, Gehäuse SMD 0805, erste Funktionseinheit im Gehäuse
Sollten Probleme auftauchen, bitte immer mitsenden:
- die Ergebnisse der Untersuchung der oben genannten Fehlerquellen
- alle Statusinformationen, die während des Programmiervorgangs angezeigt werden, dazu /log Option benutzen
- den verwendeten PICProg Typ (5V-ISP oder 13V)
| Beschreibung | Autor
|
|---|
| IC-Prog serieller Universal-Programmer mit Windows Software (Englisch) | Bonny Gijzen
|
| Pony Prog serieller Universal-Programmer mit Windows Software (Englisch) |
|
Disclaimer: No warranty at all!
Copyright by Martin Clausen, Germany.
Kontakt zum Autor: mc AT rotgradpsi PUNKT de
Impressum