Wir haben uns also entschlossen, David Taits TOPIC2icsp (icsp = in circuit serial programmer) zur Initialprogrammierung des PIC auf dem ICD zu verwenden. Ok, let´s go...
Hier das Schaltbild von David Taits TOPIC2icsp wie es im Original von Davids Seite herunter geladen werden kann.
Die Software für den Betrieb des TOPIC2icsp heißt FPP und kann ebenfalls von David Taits Seite geladen werden.
Zum einfacheren Nachbau habe ich ein kleines Layout mit EAGLE erstellt das hier als ZIP geladen werden kann. Ich habe darauf geachtet, dass der Programmieradapter (TOPIC2icsp) gut auf den ISP-Stecker J1 auf dem ICD passt. Für meine Tests habe ich allerdings auf die Herstellung einer Platine verzichtet und die wenigen Drähte und Bauteile auf einer Lochrasterplatine entsprechender Größe platziert.
Als Erstes ist bei der Inbetriebnahme ein Mapping zwischen Pin-Nummern des Parallelports und der entsprechenden Signalbezeichnung hilfreich (Signale mit vorangestelltem “/” sind active low Signale).
LPT |
Signal |
Richtung |
SPP (serial |
Signal |
Signalname |
17 |
/Select |
Ausgang |
7 |
RB3 |
PGM |
16 |
Init |
A |
1 |
/MCLR |
MCLR |
1 |
/Strobe |
A |
5 |
RB6 |
CLK |
14 |
/Auto LF |
A
|
4 |
RB7 |
OUT |
18 |
GND |
3 |
GND |
-- |
|
11 |
Busy |
Eingang |
4 (über Diode) |
RB7 |
IN |
7 |
Data5 |
A (Hilfssignal) |
-- |
-- |
-- |
2 |
Data2 |
A (Hilfssignal) |
-- |
-- |
-- |
Aktualisierung:
Ich habe in der Tabelle noch die Spalte “Signalname in FPP” hinzugefügt, weil man mit
der bis dahin vorhandenen Beschreibung immer noch nicht die Zuordnung von den Signalen an den Schnittstellen zu den Namen der einzelnen Signale im Setup-Dialog von FPP gefunden hat.
Mit dieser neuen Zuordnung ist jetzt klar, wie man den Setup-Dialog einzustellen hat. Der aufmerksame Leser wird nach Aufruf von FPP und Start des Setup-Dialogs sofort
erkennen, dass keine Änderungen gegenüber den Defaulteinstellungen für TOPIC2 vorzunehmen sind.
Lediglich die Signale Data5 und Data7 verdienen noch einen Satz. Beide Signale werden
von FPP automatisch richtig bedient, und müssen keinem Signal explizit zugeordnet werden, wenn TOPIC2 als Programmertyp eingestellt ist.
Da in der bei FPP beigefügten Hilfe keine Inbetriebnahmeanleitung enthalten ist, gebe ich nachfolgend ein paar Hinweise wieder, die ich von David per mail erhalten habe weil ich Anfangs mit dem TOPIC2icsp Probleme hatte.
Wie aus der obigen Aufstellung (und dem Schaltbild) hervorgeht, ist RB7 während der Programmierung ein bidirektionaler Pin. Die Daten werden von LPT 14 (/Auto LF) an RB7 gesendet, wenn RB7 gerade als Eingang arbeitet. Ist RB7 Ausgang, werden die Daten über LPT 11 (Busy) eingelesen. Man kann allerdings nicht einfach /Auto LF und Busy verbinden, das würde nicht funktionieren.
Zum Verständnis einige erklärende Worte.
Am Busy Eingang ist bei normalen Parallelports ein Pull-Up-Widerstand eingebaut, bei einigen PCs fehlt dieser Pull-Up-Widerstand. Um davon nicht abhängig zu sein, wird beim TOPIC2 der Pull-Up-Widerstand in Form des 10 kΩ-Widerstandes gleich mitgeliefert. FPP treibt Signal Data5 (LPT 7) permanent High. Über die obere Diode wird dadurch RB7 auf High gezogen. Wird jetzt /Auto LF (LPT 14) auf Low gelegt, wird über den 1 kΩ Schutzwiderstand RB7 ebenfalls nach Low gezogen. Allerdings wird der minimal erreichbare Low-Level an RB7 durch den Pull-Up-Widerstand nach Data5 (LPT 7) eingeschränkt. Um diesem Effekt entgegenzuwirken, wird gleichzeitig mit /Auto LF (LPT 14) auch Data2 (LPT 2) auf Low geschaltet. Durch die untere Diode wird damit der Effekt des Pull-Up-Widerstands nach Data5 (LPT 7) aufgehoben. Um also Daten von RB7 zu lesen, wird sowohl /Auto LF als auch Data2 auf High gelegt. RB7 kann dann BUSY (LPT 11) auf Low ziehen, wenn RB7 low ist. Ist RB7 High, hält der Pull-Up-Widerstand BUSY ebenfalls auf High.
Durch diese Maßnahmen (Hilfssignale und Dioden) konnte TOPIC2icsp vollkommen passiv aufgebaut werden (also ohne Transistoren oder ICs).
Nach dieser einleitenden Erklärung jetzt die Schritte um die Funktionsfähigkeit der Schaltung zu überprüfen.
Dazu muss die Schaltung an den Parallelport des Rechners angeschlossen sein, die Zielhardware muss allerdings abgezogen bleiben. Auf dem PC wird FPP gestartet, als Hardware muss im Setup-Dialog TOPIC2 ausgewählt werden. Den Dialog mit OK verlassen. Jetzt Setup erneut aufrufen den Define/Test-Dialog starten. Hier "Apply" clicken und die Tests durch selektieren von "Enable" aktivieren.
Jetzt werden die Spannungen an verschiedenen Punkten der Schaltung gemessen.
Pin 11 (BUSY) sollte irgendwo zwischen 3,5 und 5 Volt liegen, wenn OUT und READ (Radio-Buttons im Dialog) auf High gesetzt sind. Jetzt nacheinander die Radio -Buttons CLK, PGM und MCLR setzen und löschen und die Spannungen an den entsprechenden Pins messen. Sie sollten bei Low unter 0,5 Volt bzw. bei High über 4,5 Volt liegen.
Jetzt wird READ und OUT verändert. Wenn READ Low ist, wird RB7 dem Pegel von OUT folgen (wieder irgendwo zwischen ca. 0,5 Volt und 4,5 Volt). Ist READ dagegen High, kann OUT RB7 nicht mehr unter etwa 0,9 Volt ziehen (die Auswirkung des Pull -Up-Widerstandes an LPT 7).
Als nächstes testen wir den Eingang IN. Änderungen an IN werden nur gelesen, wenn ein Signal den Zustand wechselt. Man kann dazu z.B. CLK über die Radio-Buttons toggeln.
READ und OUT werden jetzt auf High gestellt, RB7 wird über einen 220 Ω Widerstand nach Masse gezogen. CLK toggeln, und IN sollte Low anzeigen. Nimmt man den Widerstand weg und toggelt CLK, sollte IN High anzeigen.
Wenn soweit alles geklappt hat, kann man davon ausgehen, dass die Programmierung eines PIC mit TOPIC2icsp funktionieren sollte.
Wichtig ist noch die Beschaltung des /MCLR-Eingangs des PIC. Der Serienwiderstand von 1 kΩ im TOPIC2icsp passt, wenn der am PIC vorgeschriebene Pull-Up-Widerstand an /MCLR einen recht hohen Wert hat (47 kΩ z.B.). Ist dieser Widerstand kleiner als etwa 22 kΩ, dann muss der Serienwiderstand von TOPIC2icsp ebenfalls verkleinert werden. 220 Ω wären dann einen Versuch wert.
Die oben eingerückt angegebenen Hinweise stammen von David Tait und wurden von mir lediglich sinngemäß übersetzt und teilweise erklärend kommentiert.
Sollten weitere Fragen zum TOPIC2icsp oder den anderen Schaltungen von David auftauchen, bitte David direkt unter “d.tait(at)man.ac.uk” ansprechen.
Das trifft nicht für das von mir erstellte EAGLE Layout zu. Bei Fragen dazu bitte mich kontaktieren.
Ich habe nach einigen Experimenten tatsächlich einen PIC 16F876 und einen PIC 16F872 sowohl mit einem entsprechenden Adapterkabel auf dem Demo-Board als auch direkt im ICD über den ISP-Stecker J1 programmieren können, die auf der ICD-Ideen-Seite gestellte Frage, ob der TOPIC2icsp zur Initialprogrammierung des PIC auf dem ICD verwendet werden kann, kann also mit “Ja” beantwortet werden.
Was ist zu beachten?
Nachtrag
Der kleine Bug in FPP ist mit der Version V0.942 vom 20.09.2002 behoben. Zu finden auf David Taits Seite.
Was auf keinen Fall verschwiegen werden soll:
TOPIC2icsp kann nicht nur zur Programmierung der 16F87x-PICs verwendet werden,
sondern in Zusammenhang mit FPP werden weitere PICs unterstützt. In der mir vorliegenden Version V0.9 vom 17.01.2002 werden folgende Typen unterstützt: