ICSP -
Allgemeines
Wie
funktioniert
ICSP?
Low Voltage
Programming
Was ist beim
Entwurf ICSP-tauglicher Schaltungen zu beachten?
Das
ICSP-Kabel
universeller
ICSP-Adapter für PICs/dsPICs DIL-Gehäuse
ICSP-ICD-Adapter
ICSP-Adapter für PIC10F2xx-Typen
ICSP-Adapter für PIC12F/16F/18F-Typen
ICSP-Adapter
für SMD-PICs
zurück
Das Prinzip des Brennens im separaten Brenner stößt spätestens bei PICs im SMD-Gehäuse an seine Grenzen. Hier gibt es nämlich keine geeigneten Schaltkreisfassungen. (Marco wies mich darauf hin, das es sehrwohl Adapter-Fassungen gibt, dass aber schon die 8-Pin-Version 189,-€ kostet. Man kann sich allerdings mit einer Bastellösung behelfen, oder aber es auch auf die Spitze treiben, und mit viel Fleiß und Geschick einen SMD-Adapter selber basteln, wie "Lardz" bewiesen hat.) Alle meine Brenner besitzen aber eine 5-polige Buchsenleiste, die mit "ICSP" beschriftet ist. Die bietet eine Lösung: das Brennen des PIC in seiner Anwendungsschaltung - In Circuit Serial Programming (ICSP).
Außerdem lassen sich alle möglichen zusätzlichen IC-Sockel über den ICSP-Steckverbinder an den Brenner anschließen, und damit dann auch z.B. PICs im DIL-8 oder PLCC-44-Gehäuse brennen.
Auch wenn der PIC beim Brennen mit allen Pins in der Fassung des Brenners steckt, elektrisch sind mit dem Brenner nur 5 Pins verbunden. Das ist möglich, da der PIC mit Hilfe einer seriellen Datenübertragung programmiert wird - dem In Circuit Serial Programming (ICSP).
Dazu benötigt man:
|
|
Leitung des Brenners | Signalbezeichnung | Pin des PIC |
| 1 | Leitung für die +12V-Programmierspannung | Vpp | MCLR/Vpp (der Reset-Anschluß) |
| 2 | Leitung für die +5V-Betriebsspannung | Vdd | Vdd |
| 3 | Masseleitung | Vss | Vss |
| 4 | Datenleitung | Data (PGD) | meist RB7 |
| 5 | Taktleitung | Clock (PGC) | meist RB6 |
Um in den Programmiermodus zu gelangen, wird zunächst die 5V-Betriebsspannung eingeschaltet und die Pins MCLR, RB6 und RB7 mit Masse verbunden. Dann wird MCLR schnell von Masse auf die Programmierspannung von 12 V gezogen. Dabei müssen RB6 und RB7 noch auf Masse gehalten werden.
Danach kann der Brenner den PIC über die Pins RB6/RB7 auslesen und neu programmieren.
An der ICPS-Buchse stehen also alle Signale zur Verfügung, um einen PIC zum Programmieren an den Brenner anzuschließen. Ein Beispiel für die Nutzung der ICPS-Buchse sind Adapter, mit dem eine zusätzliche Schaltkreis-Fassung an einen beliebigen Brenner angeschlossen werden kann, wenn dieser über die ICPS-Buchse verfügt.
Die Hauptanwendung der ICPS-Verbindung ist aber eine andere: Das Brennen eines PIC, der bereits in seine Anwendungsschaltung eingebaut ist.
Dazu verfügt die Leiterplatte der Anwendungsschaltung des PIC auch über eine ICPS-Buchse. Brenner und Anwenderschaltung werden über ein 5-poliges Kabel miteinander verbunden, und der PIC wird "zuhause" gebrannt. Das lästige Umstecken des PIC zwischen Anwendungsschaltung und Brenner entfällt, und das komfortable Brennen von PICs im SMD-Gehäuse wird überhaupt erst möglich.
Das oben beschriebene Verfahren benötigt zum Brennen die relativ hohe Spannung von 12V. Deshalb wird es high-voltage-programming (HVP) genannt. High-voltage-programming ist das Standardverfahren.
Einige PICs unterstützen
zusätzlich
das low-voltage-programming (LVP). Dabei erzeugt der PIC die
benötigte
Programmierspannung intern selbst. Es werden keine 12V zum Brennen
benötigt.
Alle LVP-PICs beherrschen aber auch das HVP. Um dem PIC zu Begin des
Programmierens
mitzuteilen, welches Verfahren benutzt wird, ist eine zusätzliche
Leitung im Interface nötig. Diese Leitung trägt den Namen PGM
und geht in der Regel am PIC zum Pin RB3.
Wurde ein PIC im LVP-Mode gebrannt, dann
ist das PGM-Pin (z.B. RB3) vom PIC nicht mehr verwendbar, es ist dann
für
den normalen PIC-Betieb blockiert. Man erkauft sich die einfachere
Programmierung
also mit dem Verlust eines I/O-Pins. Aus diesem Grunde bevorzuge
ich HVP.
Um in den HVP-Mode zu gelangen, wird PGM auf low (0V) gehalten, und MCLR von low (0V) auf Vpp (12V) umgeschaltet.
Um in den LVP-Modus zu gelangen, wird zuerst PGM und danach MCLR auf high (5V) gelegt.
Versucht man nun mit dem oben
beschriebenen 5-Leitungs-ICSP-Anschluß (in dem PGM ja nicht
vorkommt)
den PIC in den HVP-Mode zu schalten, wärend versehentlich das
PGM-Pin
aus der Anwenderschaltung high Pegel bekommt, dann programmiert man den
PIC versehentlich im LVP-Mode. Das fällt erst auf, wenn
später
das PGM-Pin des PIC nicht als I/O-Pin funktioniert.
Aus diesem Grunde
ist es nötig, bei allen LVP-fähigen PICs das PGM-Pin
wärend
des Brennens auf low-Pegel zu halten.
Erfahrungsgemäß ist es
unproblematisch,
wenn das Pin gar nicht beschaltet ist. Das ist der Fall, wenn man den
PIC
im Brenner brennt. Aber gerade bei ICSP-Programmierung kann es leicht
vorkommen,
das in der Anwendungsschaltung PGM versehentlich high erhält.
Tip:
Wärend des Brennens kann man eine
Konfigurationsoption wählen, die LVP deaktiviert. Danach geht der
PIC immer in den HVP-Mode, unabhängig vom Pegel an PGM. Ich
empfehle,
diese Option zu nutzen. Selbst wenn man dann beim ersten Brennen
versehentlich
im LVP-Mode ist, löst dann ein zweiter Brennvorgang alle Probleme.
Bei diesem geht der PIC dann automatisch in den HVP-Mode (, wenn beim
ersten
Brennen LVP korrekt deaktiviert wurde).
![]() |
Programmierspannung MCLR/Vpp
Dieser Anschluß ist am schwierigsten. Meine Brenner ziehen dieses Pin
über
einen Widerstand auf Masse, oder auf +12V. Schwierig ist aber auch der Hochziehwiderstand. Beim Brennen trennt nur dieser Widerstand die 5-V-Versorgung der Anwendungsschaltung von den 12V des Brenners. Hier muss deshalb eine Diode vor Schäden durch Überspannung schützen. Der 5V-Hochziehwiderstand
muß deutlich
größer sein (mindestens 20 X) als der Widerstand, der im
Brenner
das MCLR-Pin mit Masse verbindet. Ansonsten kann der Brenner MCLR nicht
sauber auf Masse ziehen. Bei den alten Brennern 1&3 sollte ein 200 kOhm großer Widerstand zwischen dem Reset/MCLR-Pin und +5V eingesetzt werden. |
Sind neben dem PIC noch andere
Bauelemente
mit der 5-V-Versorgung der Anwendungsschaltung verbunden, würde
der
Brenner bei Brennen die gesamte Anwendungsschaltung in Betrieb nehmen.
Bei größeren Schaltungen könnte das den Brenner
überlasten.
Eine Entkopplung mit Shottky-Dioden oder ein Jumper in der +5V-Leitung
trennen dann besser die beiden potentiellen 5-V-Quellen.
Wird mit einer Shottky-Diode entkoppelt,
dann ist die Vdd des PICs im Normalbetrieb ca. 0,2V kleiner als Vdd der
restlichen Schaltung. Meist ist das unkritisch, aber wenn Vdd z.B. als
positive Referenzspannung des ADC verwendet wird, kann es zu
Meßwertverfälschungen
des ADC kommen. In diesem Fall ist ein Jumper der Diode vorzuziehen.
Größere PICs besitzen mehrere Vdd-Pins. Zum Programmieren sind alle diese Pins untereinander zu verbinden, was in der Anwenderschaltung in der Regel ohnehin gegeben ist.
Masseverbindung Vss
Das ist die einzige unkritische
Verbindung.
Normalerweise wird die Masse des Brenners direkt mit der Masse des PIC
und damit auch mit der Masse der Anwenderschaltung verbunden.
Größere PICs besitzen mehrere
Vss-Pins. Zum Programmieren sind alle diese Pins untereinander zu
verbinden,
was in der Anwenderschaltung in der Regel ohnehin gegeben ist.
Takt- und Datenleitung PGC (RB6) und
PGD (RB7)
Wer in der Anwendungsschaltung auf diese
beiden Pins verzichten kann, sollte sie exclusiv der ICSP-Schnittstelle
zur Verfügung stellen. Werden die beiden Pins aber benötigt,
sollten sie mit der ICSP-Buchse direkt, aber mit dem Rest der Schaltung
über Widerstände von wenigstens 1 kOhm verbunden werden. Ist
so ein 1 kOhm Widerstand für die Applikationsschaltung zu
groß,
helfen nur noch Jumper, die vor dem Brennen geöffnet werden
müssen,
um den PIC von der restlichen Schaltung zu trennen.
Natürlich gibt es auch andere
Lösungen,
um ein Übersprechen auf die CLK-Leitung zu vermeiden, z.B.
kann man die CLK-Leitung vom restlichen Kabel getrennt
verlegen,
wie es im Foto vom DIL-40-Adapter zu sehen
ist.
Man kann auf die Masseleitung zwischen Vdd und DATA
auch
verzichten, ihre Funktion erfüllt ja auch die Masse zwischen
DATA
und CLK. Wer High-endig baut, verwendet vielleicht ein
10-poliges
Flachbandkabel, in dem jede zweite Leitung auf Masse liegt .....
Da will ich keine weiteren Vorschriften
machen, hauptsache CLK ist vor Einstreuungen geschützt.
Wer diese einfache Regel mißachtet, wird feststellen, daß schon die Autodetect-Funktion meiner Brennersoftware nicht funktioniert. Vom Brennen ganz zu schweigen.
Wie lang darf ein ICSP-Kabel
eigentlich
sein?
Es sollte so lang wie nötig und so
kurz wie möglich sein. Wer nur einen zusätzlichen Sockel
adaptieren
will, kommt mit 10 cm aus. Für ICSP sollten 20 cm auch
genügen.
Wenn CLK ordentlich geschirmt ist, sollte aber auch 1/2 Meter kein
Problem
sein. Zu lange Kabel und Kabel ohne jede CLK-Schirmung führen
immer
wieder zu Brenn-Problemen.
![]() |
In diesem Adapter lassen sich
alle PICs
im DIL Gehäuse (8..40 Pins) am Brenner8
oder Brenner5
programmieren.
Dazu müssen allerdings die 5 ICSP-Steuerleitung manuell mit
Drahtbrücken
mit den richtigen Pins des 40-poligen Testsockels verbunden werden.
|
| Mein Prototyp ist auf einer
Streifenleiterplatte
aufgebaut, und hat keinen ICD-Anschluß sondern nur mein
Standard-ICSP-Kabel.
Dieses Foto zeigt den Adapter an
einem Brenner5.
In diesem Fall wird er benutzt, um einen dsPIC30F3012
mit Hilfe der Brennsoftware dsProg
zu brennen. Natürlich funktioniert das
auch am Brenner8 und Brenner9 mit der
Software US-Burn. |
![]() |
![]() |
Viele Test-Platinen von
Microchip (z.B.
der universelle
Programmieradapter)
haben eine ICD-Buchse zum Anschluß von Brenner oder
In-Circuit-Debugger.
Dabei handelt es sich im Prinzip um einen ICSP-Anschluß.
Allerdings
benutzt Microchip hier einen 6-poligen Westernstecker. Am Brenner oder Debugger (z.B. ICD2) befindet sich ebenfalls eine Westernbuchse, allerdings mit spiegelbildlicher Pinbelegung. Aus diesem Grunde müssen Brenner und Testplatine mit einem Cross-over-Kabel verbunden werden. Ein einfaches Adapterkabel, das die Pins 1..5 des Westernsteckers auf einen 5-polige Steckerleiste verbindet, stellt die Verbindung zwischen meinem Standard-ICSP-Anschluß und dem Microchip-ICD-Anschluß her. Damit kann z.B. der Brenner5 (ab Rev.7e) PICs auf Microchip-Testplatinen brennen, oder der ICD2 von Microchip kann PICs auf meinen Testplatinen brennen und debuggen. Allerdings muß die 5-polige Steckerleiste dabei in meinen Brenner genau andersherum eingesteckt werden, wie in meine Testplatinen:
|
. |
Die eigentlich 6-pinnigen PIC10F20x
werden auch in einem 8-pin-DIL-Gehäuse geliefert, bei dem 2 Pins
nicht
belegt sind. Für diese PICs passt der weiter
unten
beschriebene Adapter nicht.
Einen elektrisch passenden
DIL-8-Sockel,
um die 12-Bit-Kern- PIC10F20x im
niedlichen
DIL-8-Gehäuse zu brennen hat keiner meinen Brennern. Dieser Adapter ist NICHT mit dem unten vorgestellten Adapter für normale 8-pin-PICs identisch! |
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen Stecker und dem DIL-8-Sockel dar.
Der Sockel ist in der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
. |
Keiner meiner Brenner hat einen PLCC-44-Sockel, um PIC16F871, PIC16F84(A), PIC16F877(A), PIC16F74 oder PIC16F77 im quadratischen PLCC-44-Gehäuse zu brennen. All diese Chips lassen sich aber über einen einfachen Adapter an den 5-poligen ICSP-Steckverbinder der Brenner1/2/3/5/8 anschließen, und dann brennen. |
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen ICSP-Stecker und dem
PLCC-44-Sockel
dar. Der Sockel ist so dargestellt, daß man von unten auf die
Lötpins
schaut.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Microchip empfiehlt generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Bei mir geht es auch mit nur je einem Pin, wer aber einen Adapter neu baut, kann es ja gleich richtig machen, und der Microchip-Empfehlung folgen. |
. |
Für SMD-Gehäuse wie
SO-18 (PIC16F84(A), PIC16F62x)
gibt es keine Fassungen, die man auf eine Brennerplatine löten
könnte.
Auch ein richtiger Adapter läßt sich nicht bauen, aber man
kann
den Schaltkreis direkt an ein ICSP-Kabel löten.
All diese Chips lassen sich damit an den 5-poligen ICSP-Steckverbinder der Brenner1/2/3/5/8 anschließen, und dann brennen. Eleganter wäre es hier natürlich, den PIC in seine Schaltung einzulöten, und dort via ICSP zu brennen. Die Ausführung im nebenstehenden Foto und die einzelnen Leitungsfarben entsprechen nicht den Farben im untenstehenden Stromlaufplan. |
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen ICSP-Stecker und dem
SO-18-Gehäuse
da. Der PIC ist in der Draufsicht dargestellt.
Beim 20-poligen SSOP-Gehäuse, muß die Beschaltung entsprechend abgeändert werden. Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
Korrektur:
. |
Einen separaten DIL-8-Sockel, um
die
14-Bit- PIC12F629
und PIC12F675 im niedlichen DIL-8-Gehäuse zu brennen hat von
meinen
Brennern z.Z. nur der veraltete Brenner1. Der Brenner8 kann diese DIL8-PICs im 40-poligen Testsockel brennen. Der Brenner5
kann ab Rev. 7 DIL-8-PICs in der 18-poligen Fassung brennen. Ältere
Brenner5 lassen sich übrigens einfach modifizieren, um in der
18-poligen Fassung neben 18-poligen PICs auch 8-polige PICs brennen zu
können. An alle anderen Brenner (Brenner2/3/5) lassen sich diese Chips aber über einen einfachen Adapter an den 5-poligen ICSP-Steckverbinder anschließen, und dann brennen. |
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen Stecker und dem DIL-8-Sockel dar.
Der Sockel ist in der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
. |
Von meinen Brennern können
nur die Brenner3 , Brenner5 und Brenner8 mit einer
Fassung
für die DIL-40-Gehäuse bestückt werden um PIC16F871,
PIC16F84(A), PIC16F877(A), PIC16F74 oder
PIC16F77
im DIL-40-Gehäuse zu brennen.
Man kann die aber auch mit preiswerten DIL-28-Sockeln bestückt haben. In diesem Fall, oder wenn man einen Brenner1 oder Brenner2 benutzt, lassen sich DIL-40-PICs über einen einfachen Adapter anschließen und brennen. Das nebenstehende Foto zeigt noch eine alte Version, die nicht in allen Details mit den darunter stehendem Stromlaufplan exakt übereinstimmt. |
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen ICSP-Stecker und dem
DIL-40-Sockel
dar. Der Sockel ist in der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Bei billigen DIL-Fassungen lassen sich die einzelnen Pin-Kontakte oft mit einer Zange herausziehen. Man sollte alle nicht benötigten Kontakte aus der Fassung entfernen, um die Klemmkraft der Fassung klein zu halten. Dann läßt sich der PIC nach dem Brennen wieder leicht aus der Fassung herausziehen. Microchip empfieht generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Bei mir geht es auch mit nur je einem Pin, wer aber einen Adapter neu baut, kann es ja gleich richtig machen, und der Microchip-Empfehlung folgen. |
ICSP-Adapter
für
dsPICs
im DIL-40-Gehäuse
![]() |
Der nebenstehende Stromlaufplan
stellt
die Verbindung zwischen dem 5-poligen ICSP-Stecker und dem
DIL-40-Sockel
für eine dsPIC30F
dar.
Der Sockel ist in der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Bei billigen DIL-Fassungen lassen sich die einzelnen Pin-Kontakte oft mit einer Zange herausziehen. Man sollte alle nicht benötigten Kontakte aus der Fassung entfernen, um die Klemmkraft der Fassung klein zu halten. Dann läßt sich der PIC nach dem Brennen wieder leicht aus der Fassung herausziehen. Microchip empfieht generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Deshalb habe ich hier auch die Pins 31, 32, 39 und 40 angeschlossen. Mir wurde berichtet, das sich ein PIC nicht brennen ließ, solange Analog-Beriebsspannungs-Pins (39&40) nicht angeschlossen wurden. Leider gibt es zwei unterschiedliche Pinbelegungen für den ICSP-Anschluß an 40-Pin-dsPICs Dieser erste Adapter eignet sich für folgende (General Purpose and Sensor Family) Typen:
|