Newsgroup: it.hobby.elettronica.digitale
Titolo: ICSP con PIC

Secondo voi qual č il migliore schema elettrico per implementare
l'ICSP con un PIC? Supponiamo nel caso piů semplice in cui i due
pin di clock e dati (PGC e PGD) non sono usati per altro ma solo
per l'ICSP.
Ho qualche dubbio sul collegamento del pin MCLR e dell'alimentazione.
E' meglio alimentare il PIC da programmatore oppure da circuito?
Penso da programmatore... questo vuol dire che devo inserire almeno
un jumper per prendere l'alimentazione dal circuito *oppure* dal
programmatore.
Inoltre sarebbe bello avere un tasto sul pin MCLR per il reset
manuale del PIC durante il funzionamento. Perň questo metterebbe
in corto l'uscita Vpp del programmatore se questi, per errore,
fosse acceso e collegato.

 fosse acceso e collegato.
Se il MCLR è abilitato appena collegi il cavetto ICSP il pic va in reset, perchè
il programmatore porta quella linea a GND. Quando lo scolleghi riparte da capo.
In questo modo il debugging "a tentativi" diventa velocissimo!  =)
Olivier.

 fosse acceso e collegato.
Nelle mie applciazioni doce c'è icsp e anche pulsante di reset, utilizzo con 
successo lo schema seguente.
Visto il mio campo di applicazioni, ho dovuto mettere il diodo schottky per 
evitare che la tensione di programmazione influenzasse anche minimamente la 
vcc.
[FIDOCAD ]
MC 105 80 1 0 200
MC 105 70 1 0 080
MC 105 70 3 0 010
MC 105 100 1 0 080
MC 90 100 1 0 080
LI 105 95 105 100
LI 115 95 90 95
LI 90 95 90 100
LI 105 110 105 125
MC 90 110 0 0 860
MC 105 125 0 0 045
MC 90 125 0 0 045
TY 110 85 5 3 0 0 0 * schottky
TY 110 70 5 3 0 0 0 * 4k7
TY 110 100 5 3 0 0 0 * 33k
TY 75 100 5 3 0 0 0 * 100R
LI 90 95 55 95
MC 55 95 2 0 000
TY 45 85 5 3 0 0 0 * MCLR ICSP
SA 90 95
SA 105 95
RV 140 90 180 170
LI 115 95 140 95
TY 145 95 5 3 0 0 0 * MCLR

 In questo modo il debugging "a tentativi" diventa velocissimo!  =)
Anche questo procedimento non mi convince molto.
Prima di tutto, l'MCLR spesso è collegato a Vdd mediante pull-up. Quando
colleghi
il programmatore e durante la programmazione, sull'MCLR ci sarà una tensione
pari
a Vpp (14V) che andrà a finire nella Vdd tramite la resistenza di pull-up!!!
Serve almeno un diodo per evitare ciò.
Altro problema... io ho un programmatore del tipo ProPic2. Questo
programmatore
abilita le due linee Vdd e Vpp mediante un PNP. Quando Vdd e Vpp sono
inattive,
il transistor è interdetto e, a valle, non ho proprio GND ma una sorta di
alta
impedenza. Mettendo un pull-down per forzare a massa, questo andrebbe a
sommarsi
al pull-up dell'MCLR sul circuito... Nulla di fatto.
Inoltre, il tasto di reset sul circuito può essere utile anche per iniziare
nuovamente l'esecuzione del programma, senza l'ausilio del programmatore.

 impedenza.
Vero, ma funziona lo stesso!  =)
provare per credere...
Olivier.

 vcc.
E' piů o meno quello che volevo fare io. Penso che la 100Ohm serva per
evitare
che il programmatore possa rompersi (mettendo l'uscita Vpp in corto) se
viene
premuto il tasto di reset durante la programmazione.
Anche io volevo usare il diodo (tra l'altro č specificato anche nel
datasheet
dei PIC) ma non capisco perché proprio uno schottky.
L'importante č che la corrente dalla Vpp non vada verso la Vdd... penso che
basti un diodo semplice come l'1N4148.
A che serve a 33k?
Ecco cosa volevo fare io... tutte le combinazioni dovrebbero funzionare
bene:
il programmatore non si dovrebbe mai rompere (in pratica la Vpp non andrebbe
mai direttamente a massa). L'unico fastidio č dover spostare il selettore di
alimentazione del PIC dalla posizione "alimentazione del circuito" alla
posizione "alimentazione dal programmatore" ogni volta che voglio
programmare.
Si puň fare con una strip a 3 pin ed un jumper.
[FIDOCAD]
MC 85 25 0 0 880
RV 75 45 105 110
LI 90 40 90 45
LI 105 65 130 65
LI 130 65 130 35
LI 105 75 140 75
LI 140 75 140 45
TY 95 60 5 3 0 0 0 * PGD
TY 95 70 5 3 0 0 0 * PGC
TY 85 110 5 3 0 0 0 * PIC
SA 40 25
MC 40 95 3 0 200
LI 40 80 40 25
SA 40 95
MC 30 80 1 0 080
LI 30 80 30 25
LI 40 95 30 95
LI 30 95 30 90
MC 45 95 0 0 080
LI 45 95 40 95
LI 85 25 25 25
SA 30 25
MC 55 95 0 0 200
LI 70 95 75 95
LI 70 95 70 120
LI 70 120 150 120
LI 150 120 150 55
RV 165 20 175 70
MC 160 70 0 0 040
LI 165 65 160 65
LI 160 65 160 70
LI 150 55 165 55
LI 140 45 165 45
LI 130 35 165 35
LI 95 25 165 25
TY 155 20 5 3 0 0 0 * Vdd
TY 155 30 5 3 0 0 0 * PGD
TY 155 40 5 3 0 0 0 * PGC
TY 155 50 5 3 0 0 0 * Vpp
TY 155 60 5 3 0 0 0 * GND
TY 95 100 5 3 0 0 0 * GND
MC 110 110 0 0 040
LI 110 110 110 105
LI 110 105 105 105
TY 85 45 5 3 0 0 0 * Vdd
TY 75 90 5 3 0 0 0 * MCLR
SA 70 95
MC 70 125 1 0 080
MC 70 140 0 0 750
LI 70 125 70 120
LI 70 140 70 135
MC 70 155 0 0 040
SA 70 120
MC 40 115 0 0 040
MC 40 105 0 0 180
LI 40 105 40 95
TY 18 82 5 3 0 0 0 * 10k
TY 45 88 5 3 0 0 0 * 2k2
TY 44 107 5 3 0 0 0 * 1u
TY 73 127 5 3 0 0 0 * 100
TY 22 19 5 3 0 0 0 * Vdd circuito

 Si può fare con una strip a 3 pin ed un jumper.
Si può fare tutto, ma se si prendono gli accorgimenti dovuti non è 
necessario agire su jumpers con l'eventuale possibilità di sbagliarsi o 
dimenticarsi.
Questo lo dice la microchip stessa.
Per le mie applicazioni con componenti trough hole in genere programmo i pic 
prima del montaggio, nelle applicazioni in smd il pic è programmato icsp con 
il circuito che ho postato.
http://ww1.microchip.com/downloads/en/DeviceDoc/51474a.pdf
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011744


http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011744
Anche su questo si vede chiaramente come la Vdd viene portata al
programmatore:
se non venisse utilizzata, non ne varrebbe la pena. Solo che qui la
separazione
tra la Vdd del programmatore e quella del circuito è fatto con una
resistenza...
cosa che non mi piace affatto. A seconda dell'assorbimento del PIC, la Vdd
potrebbe cambiare durante il normale funzionamento poiché cambierebbe la
caduta di tensione ai capi di questa resistenza.
Scusate se insisto sulla cosa, ma mi sembra una discussione interessante.
Molto spesso si sente dire che non funziona la programmazione ICSP con un
particolare
PIC, oppure che qualche PIC è "più duro" da programmare rispetto ad un
altro.
Forse è perché utilizziamo la ICSP fuori specifiche Microchip.

 questo metodo... ma non mi convince molto!!!
La stessa Microchip con l'ICD2 fa scegliere senza restrizione di sorta 
ne' accorgimenti particolari (eccetto naturalmente la corrente 
erogabile) se alimentare il micro dalla scheda target o dal programmatore.
Marco / iw2nzm

 ha scritto nel messaggio
news:ybS1f.1010$75.3...@twister1.libero.it...

Non conosco l'ICD2... so soltanto che viene usato come debugger e
programmatore. Ma come fai a scegliere la sorgente dell'alimentazione?
Mediante software oppure altro? E puoi fare questa seleziona anche
durante la programmazione ICSP oppure solo durante il debugging?
Che tipo di interfaccia esiste tra il tuo circuito in cui risiede
il PIC e l'ICD2? Cosa devi aggiungere nel tuo circuito in modo che
possa comunicare correttamente con l'ICD2?

Comunque sembra che su altri PIC (per esempio, il PIC16F87XA) non ci sia
il vincolo di attivare la Vdd *dopo* la Vpp. Perň per il 16F628A c'č
scritto chiaramente: prima la Vpp e *dopo* la Vdd.
A questo punto non so che pensare.

 Forse è perché utilizziamo la ICSP fuori specifiche Microchip.
Può essere,  io però con lo schema postato non ho mai avuto problemi, quindi 
non posso citarti eventuali correzioni.
Facendo un conto spannometrico ad oggi ho programmato incircuit circa 8-9000 
pic.
Come programmatore incircuit utilizzo ICD2, come programmatore esterno un 
programmatore universale.

 Ma perchè ti dà tanto fastidio alimentare il pic da circuito ?
Ma figurati, altro che fastidio. Anzi, alimentando direttamente dal circuito
è più semplice. Il problema è capire se si può fare o meno,
indipendentemente
dal fatto che nella realtà funzioni in tutti i casi (potrebbe essere solo un
caso).
Come detto nel mio primo post, nelle specifiche di programmazione del
16F628A
è chiaramente specificato che bisogna far salire *prima* Vpp e *dopo* Vdd.
Questo si può ottenere solo facendo pilotare la Vdd dal programmatore e non
dal circuito.
E' anche vero che ho guardato le specifiche di programmazione di altri PIC
e non in tutti è indicata questa sequenza temporale. Boh!

 e non in tutti è indicata questa sequenza temporale. Boh!
Io il 16F628A lo programmo tranquillamente ICSP alimentato da circuito.

 possa comunicare correttamente con l'ICD2?
Nulla.
Solita resistenza tra MCLR e Vdd per permettere al programmatore di 
effettuare il reset, e la connessione diretta dei due pin di 
programmazione al connettore. Nient'altro.
Io mi sono trovato molto bene, soprattutto per la possibilità di 
debugging in system cosa che normalmente richiede costosi *emulatori* o 
non si riesce a fare. Inoltre aggiorna il firmware automaticamente per 
nuovi micro o per micro di famiglie diverse.
Per alcuni uC ci sono delle limitazioni (sul debugging solitamente).
Marco / iw2nzm