T&t - PIC

 

 

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:

  1. 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.

     

  2. 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
     
  3. 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.
     
  4. 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

  1. 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
     
  2. Vss dell' ICSP è collegato alla massa comune
     
  3. 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).
     
  4. 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:

  • HVP che utilizza una tensione esterna Vpp

  • LVP che utilizza un sistema interno e non richiede la Vpp

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

 


 

  

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 13/10/11 .