Aggiungere ICSP al propio
progetto
|
E come aggiungo un ICSP al mio circuito ?
Se è chiaro che in molti casi è ben più
vantaggioso programmare il chip on-board e non separatamente, ecco che ci si
può porre il problema di come inserire la presa ICSP nel proprio
circuito.
Con il non secondario vantaggio di poter effettuare anche il debug on-circuit (ICD).
Non c'è niente di più semplice: basta
aggiungere una presa con 6 spinette a passo 2.54 e collegarle ai 5 punti del
circuito visti finora.
Se non conoscete ancora il problema, tutte le informazioni necessarie su ICSP/ICD
le trovate qui.
Si tratta solo di seguire queste regole:
- identificare i pin PGD, PGC e Vpp del chip
e collegarli ai pin dell' ICSP.
Fortunatamente Microchip utilizza le stesse posizioni dei pin per i
diversi chip, a seconda del loro package.
Questo consente di realizzare zoccoli che accettano i numerosi PIC
realizzati in un certo package, sicuri di applicare sempre i segnali di
accesso ICSP al giusto punto.
Eventuali dubbi possono essere risolti consultando i fogli dati del
componente che si sta impiegando.
- se i pin sono collegati anche ad altre
parti del circuito con basse impedenze, isolarli da questo con jumper da rimuovere durante la
programmazione oppure con resistenze in serie. Per MCLR, se viene usato un
circuito esterno, inserire un diodo o una resistenza di separazione
- Se si usano debugger come i Pickit, essi
possono alimentare il circuito collegato (un centinaio di mA massimo). Se si
usano altri debugger o il consumo del circuito è più elevato, la
programmazione richiederà l' alimentazione del circuito stesso.
- se è presente un sistema di reset
classico, con R4/C1 e magari anche il pulsante e il diodo D2, occorre separarlo dalla line
MCLR/Vpp che arriva dalla presa ICS con un piccolo diodo, meglio se
Schottky.
Ma basta anche una resistenza da 1k (e non premere il pulsante mentre
si programma...)
Ecco, ad esempio, come collegare la presa ICSP
ad un PIC comune come il PIC16F877

- l' alimentazione, se può essere data dalla
presa ICSP, va collegata alla Vdd. Altrimenti si utilizza l'alimentatore del
circuito.
Ovviamente nel primo caso non deve esserci in contemporanea l' alimentazione
dal Pickit e quella locale
- Vss dell' ICSP è collegato alla massa
comune
- PGD e PGC sono collegati ai rispettivi pin.
Se i pin comandano hardware, occorre separarli con resistenze (R1 e R2,
>=10k) o meglio
con jumper da aprire durante la programmazione (o il debug).
- Se il chip ha un pin PGM per LVP può essere utile
inserire una resistenza (R3, 1-10k) verso massa
La presa sul circuito stampato seguirà preferibilmente uno degli standard.
Le soluzioni più comuni sono:
- 6 pin maschio passo 2.54 (collegamento diretto con PICKit)
- 6 pin RJ (collegamento diretto con ICD e REAL ICE)
 |
Esistono comunque adattatori per passare dall' uno all' altro connettore
(Microchip AC244003) |
Altra via, che non richiede connettori sul circuito stampato è quella
con i cavi POGO,
fatti per collegare a pressione, con pin a molla, su pad del circuito stampato.
E' possibile in ogni
caso usare qualsiasi altro sistema di connessione: ad esempio, alcuni schemi
utilizzano connettori a spina, ma su due file (tipico degli AVR) oppure su una
fila, ma a passo 1.27. Però, a meno di avere ragioni
particolari, non è consigliabile fare scelte diverse da quelle sopra indicate,
per evitare di trovarsi in situazioni in cui si renda sempre necessario un
cavo adattatore tra tools e circuito.
Comunque i tools sopportano la connessione con le schede, se necessario,
attraverso un breve tratto di cavo che va mantenuto il più corto possibile
dato che viene attraversato da segnali TTL a frequenza piuttosto alta.
Con questi cavetti si possono anche realizzare adattatori tra le prese sui
tools e quelle sul circuito stampato;
possono essere auto costruiti a seconda della necessità, ma si trovano
facilmente in commercio già pronti e realizzati al meglio.
 |
 |
Microchip
AC164110, adattatore tra RJ e pin |
Microchip
AC162069, adattatore tra ICD e connessioni a spina su breadboard |
 |
 |
Kit di adattatori RJ-spine di vari formati da Cool
Components |
Microchip
AC164112, adattatore per RJ con riduttore di tensione al target |
I segnali in dettaglio
VPP
Durante la programmazione su
questa linea viene applicata una tensione di circa 13V ed è necessario il
diodo o la resistenza per evitare che questa tensione si riversi sull'
alimentazione del circuito attraverso le resistenze del reset. Se al reset non
è collegato altro che un pull-upo da 10 k, il diodo diventa una resistenza da
1k.
Ricordiamo che i PIC sono
programmabili in due diverse:
Qui facciamo riferimento a HVP,
dato che LVP richiede, oltre all' opportuna linea di configurazione LVP_ON,
anche di avere dedicato il pin PGM, che non può essere più usato per altre
funzioni. Per questa limitazione e dato che parte dei PIC non ha la
funzione LVP, questo metodo è solitamente riservato a sistemi del genere
bootloader su chip con molti pin..
Vdd/Vcc/+
Se si utilizza un Pickit o altro
dispositivo analogo, l' alimentazione può essere data dalla presa ICSP, e il
pin Vdd va collegato alla V+ del circuito.
Altrimenti si utilizza l'alimentatore del circuito, avendo cura di non trovarsi
con entrambe le sorgenti di tensione attive contemporaneamente (la fornitura di
alimentazione da parte dei PICkit è impostabile dal loro pannello di
controllo).
L' alimentazione del circuito è una funzione programmabile nei Settings del
Pickit, sia in modo programmer che in modo debugger.
Vss/GND
Il pin Vss di ICSP va collegato
alla massa comune
PGC e PGD (Clock e Dati)
Dal foglio dati di ogni chip è
disponibile nelle prime pagine il pinout, consultando il quale si recupera con
facilità a quali pin corrispondono clock e dati.
Le posizioni, abbiamo detto, sono standardizzate e sono state riportate in
uno schema precedente.
Se il PIC ha un elevato numero di
pin è probabile che i due pin di comunicazione possano non essere utilizzati
nello schema finale e quindi vanno collegati direttamente a ICSP (cosa molto
comoda per il debug in circuit - ICD).
Se però i pin sono necessari al progetto, cosa che certamente capita nel caso
di PIC in packages con pochi pin, occorre che il carico di questi pin non
danneggi la qualità del segnale inviato dal programmatore.
Quindi occorre separare elettricamente i pin dal resto del circuito. Un paio di
jumper da aprire durante la programmazione sono l' ideale, ma anche, se
possibile, inserire due resistenze da 10k o più fornisce una sufficiente
separazione del carico.
Questo non è possibile se , ad esempio, i pin comandano direttamente dei LED.
In tal caso saranno necessari i jumper.
Ovviamente ai pin non devono essere collegati tassativamente dei condensatori di
capacità tale da rallentare o danneggiare i segnali seriali.
PGD è bidirezionale, ovvero è
pilotato dal programmatore e dal PIC, come la linea SDA di una I2C
PGC invece è generato dal programmatore in ogni caso.
PGM (LVP)
La funzione di questo pin, se
presente, è quella di mandare il PIC in modalità LVP se è a livello alto (e
se la modalità è impostata nel config).
Tenendo il pin PGM a livello basso il modo LVP è comunque escluso.
Solitamente i PIC escono dalla fabbrica con LVP abilitato (questo per
permetterne l' immediata programazione in questo modo). Per evitare possibili
problemi con la programmazione HVP, il pin PGM è utile sia a livello basso.
Solitamente una resistenza è sufficiente a fare questo.
Una volta programmato il PIC con i parametri voluti e cancellato LVP dal config (LVP_OFF)
il problema del pin PGM non esiste più, finchè non sia ri abilitato da un
nuovo config.
Va ricordato che gran parte dei PIC non dispone del m odo LVP, sopratutto quelli
con un basso numero di pin e quindi il problema può essere evidenziato solo
verificando che sul foglio dati sia specificata la possibilità di LVP.
In merito si può leggere anche
l' application note DS33023
relativa ai mid range, ma estendibile a tutti i PIC.
Quanto detto è valido ed è valido concettualmente per la maggior parte dei
microcontroller di produttori diversi da Microchip, dato che utilizzano sistemi del tutto analoghi per la programmazione e per il debug.
Un esempio di implementazione di ICSP/ICD è visibile sulla nostra 28-40
Uniboard
|