TOPIC2icsp

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 aktive low Signale).

LPT
Signal
Richtung
(zum/vom Drucker)
SPP (serial 
programming port)
Signal
Signalname 
in FPP
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)
--
--
--


Hier eine kurze Beschreibung der einzelnen Signale und ihre Verwendung beim TOPIC2:
  • Über /Select (LPT 17/ SPP 7) wird der zu programmierende PIC im Low Voltage Programming Mode (LVP Mode) darüber informiert, dass er jetzt programmiert werden soll.
  • Init (LPT 16 / SPP 1) leitet den Programmiervorgang ein. Das zeitliche Zusammenspiel steuert FPP.
  • Das Signal /Strobe (LPT 1 / SPP 5) steuert direkt RB6 des zu programmierenden PIC und ist der Takt, mit dem die Daten in den PIC bzw. aus dem PIC heraus getaktet werden.
  • Über /Auto LF (LPT 14 / SPP 4) werden Daten oder Befehle an den PIC gesendet. Die einzelnen Bits werden mit dem Takt an RB6 in den PIC hineingetaktet.
  • GND (LPT 18 / SPP 3) ist die gemeinsame Masse.
  • Mit Busy (LPT 11 / SPP 4) werden die Daten vom PIC eingelesen. Auch diese Daten werden mit dem Takt an RB6 getaktet.
  • Die beiden restlichen Datenleitungen Data5 (LPT 7) und Data2 (LPT 2) sind Hilfssignale, die weiter unten näher beschrieben werden.

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 10kOhm-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 kOhm 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 Ohm 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 kOhm im TOPIC2icsp passt, wenn der am PIC vorgeschriebene Pull-Up-Widerstand an /MCLR einen recht hohen Wert hat (47 kOhm z.B.). Ist dieser Widerstand kleiner als etwa 22 kOhm, dann muss der Serienwiderstand von TOPIC2icsp ebenfalls verkleinert werden. 220 Ohm 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 ?

  • Die Leitung zwischen Parallelport und TOPIC2icsp darf nicht zu lang sein. Meine ersten Programmierversuche habe ich an meinem normalen Bürorechner durchgeführt. Hier sind zwischen Parallelport und TOPIC2 zwei LPT-Verlängerungen von je 1,8 m Länge sowie ein Signalumschalter eingebaut. Mit diesem Setup hat das Programmieren nicht funktioniert. Erfolgreich war ich erst, als ich meine Versuche mit einem ca. 40 cm langen Flachbandkabel als Verbindung zwischen PC und TOPIC2 durchgeführt habe (was bei Tower-PC-Gehäusen durchaus dazu führen kann, dass man seine Aktivitäten unter den Schreibtisch verlegen muss ;-)
  • PICs sind ab Werk auf LVP (low voltage programming) eingestellt und können also direkt mit TOPIC2icsp programmiert werden. Wurde der PIC dagegen schon einmal mit dem ICD programmiert (im betrachteten Einsatzfall des TOPIC2icsp eher unwahrscheinlich), dann ist er auf high voltage programming umgestellt (das ist die Programmiermethode, die der ICD einsetzt) und kann erst mit TOPIC2 bearbeitet werden, wenn man in der IDE den Schalter LVP auf 1 setzt und den PIC damit einmalig programmiert (oder löscht).
  • In der Version V0.9 von FPP ist ein kleiner Bug drin.
    Wenn der PIC 16F876 selektiert wird, springt die Codelänge auf 4096 und muss von Hand auf den korrekten Wert von 8192 umgestellt werden. Weiterhin kommt es manchmal vor, dass das Datenfenster nach einem Laden des PIC nicht richtig aktualisiert wird.
  • 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:

16F83

16F870

16F84

16F871

16F85

16F872

16F86

16F873

 

16F874

16F626

16F876

16F627

16F877

    

 

 

 

 

 

Über eine Suchmaschine hier gelandet? Dann bitte mit Click Navigations Schaltflächen anzeigen

[Home] [Modelle] [Eisenbahn TT] [Was ist neu ?] [Elektronik] [Kontakt] [Links] [Tipps+Tricks]