Newsgroup: it.hobby.elettronica.digitale
Titolo: PIC16F876A e reset dovuti a MCLR improvvisivi

Utilizzo un PIC16F876A con un circuito di reset scopiazzato da qualche altra 
parte: un pull-up di 10K, un condensatore da 100nF, un diodo 1N4148 in parallelo 
al pull-up per far scaricare subito il condensatore quando l'alimentazione va 
giù, un diodo schottky in serie verso l'MCLR per evitare di far arrivare la Vpp 
al resto del circuito durante la programmazione in-circuit.
Per chi ha Fidocad, ecco il circuito:
[FIDOCAD]
MC 50 70 3 0 200
MC 60 55 1 0 080
LI 50 55 50 50
LI 50 50 60 50
LI 60 50 60 55
SA 55 50
MC 55 45 3 0 010
LI 55 50 55 45
MC 50 75 1 0 170
LI 50 75 50 70
LI 60 65 60 70
LI 60 70 50 70
SA 50 70
MC 50 85 0 0 040
MC 60 70 0 0 200
SA 60 70
LI 80 70 80 50
SA 80 70
LI 80 50 90 50
TY 90 45 5 3 0 0 0 * Programmatore
LI 75 70 90 70
SA 90 70
TY 90 65 5 3 0 0 0 * MCLR
TY 40 65 5 3 90 0 0 * 1N4148
TY 65 65 5 3 90 0 0 * 10K
TY 65 75 5 3 0 0 0 * BAT83
TY 40 85 5 3 90 0 0 * 100nF
La +5V è collegata anche ad uno zoccolo per smartcard che, ovviamente, assorbe 
della corrente quando inserita (da datasheet, non più di 10mA). Naturalmente io 
inserisco la smartcard a circuito acceso.
Succede che, ogni tanto, all'inserimento di una smartcard il micro si resetta. 
Facendo varie prove, il problema è proprio sulla +5V che, evidentemente 
(purtroppo non ho l'oscilloscopio), si siede all'inserimento della smartcard.
Abilitando il brown-out, però, noto che comunque il reset non è dovuto ad esso 
ma all'MCLR. Io uso queste istruzioni per capire la condizione di reset:
---
   if( !PCON.F1 ) {
     /* Power on reset. */
     myLcd_Custom_Out( 1, 1, "POR" );
     PCON.F1 = 1;
     PCON.F0 = 1;
   } else if( !PCON.F0 ) {
     /* Brown-out reset. */
     myLcd_Custom_Out( 1, 1, "BOR" );
     PCON.F0 = 1;
   } else {
     myLcd_Custom_Out( 1, 1, "???" );
   }
---
PCON.F1 è il bit 1 del registro PCON, PCON.F0 è il bit 0 dello stesso registro.
Alla prima accensione viene visualizzato giustamente "POR", quando il micro si 
resetta per l'inserimento della smartcard viene scritto "???". Se non è il BOR è 
sicuramente l'MCLR (non uso watchdog).
Perchè non si resetta per BOR ma per MCLR sinceramente non lo so.
Ho cambiato il circuito dell'MCLR utilizzando quello suggerito proprio sul 
datasheet del micro: solo la resistenza di pull-up (10K), un condensatore (i 
soliti 100nF), senza diodo 1N4148 e con resistenza serie (8.2K) anzichè diodo 
Schottky.
Così sembra funzionare bene e il micro non si resetta mai, però non posso usare 
la programmazione ICSP perchè altrimenti mi andrebbe la Vpp sulla +5V del 
circuito, con ovvi danni.
Cosa mi suggerite di fare?
P.S.: La +5V viene generata da un semplice 7805 con un 47uF e 100nF in parallelo 
all'uscita. Ho aumentato il 47uF a 220uF ma sembra che il micro si resetti 
ancora più facilmente!?!?!?
Poichè lo zoccolo per la smartcard è collegato tramite cablaggio di circa 
20-25cm, ho aggiunto un 100nF vicino al pin +5V dello zoccolo, ma il risultato 
non cambio. Devo provare ad aumentare questo condensatore?

Ho provato ad aumentare a 1uF il condensatore vicino al pin di alimentazione 
dello zoccolo della smartcard, dopo il cablaggio, ma niente.
Ho anche provato ad aumentare il condensatore nel circuito dell'MCLR da 100nF a 
1uF, ma niente.
Sembra proprio che il diodo Schottky nel circuito di reset dia fastidio. 
Sostituendolo con una resistenza da 8K2 si risolve tutto, ma non posso usare la 
ICSP, cosa molto fastidiosa!

 risultato non cambio. Devo provare ad aumentare questo condensatore?
io proverei a disaccoppiare le alimentazioni, anche se non mi convince molto 
che un picco di assorbimento tiri giù la 5V.
facci sapere
ciao
simone.bern
[FIDOCAD]
MC 75 50 0 0 080
MC 60 60 0 0 180
MC 95 60 0 0 180
MC 60 70 0 0 040
LI 75 50 60 50
LI 60 50 60 60
LI 85 50 95 50
LI 95 50 95 60
MC 95 70 0 0 040
LI 60 50 50 50
LI 50 50 35 50
LI 95 50 115 50
SA 60 50
SA 95 50
TY 70 40 5 3 0 0 0 * 10 - 33 ohm
TY 10 85 5 3 0 0 0 * Capacità a valle del 7805
LI 25 85 55 65
LI 55 65 50 65
LI 50 65 55 70
LI 55 70 55 65
TY 100 60 5 3 0 0 0 * 10 - 100 uF
TY 100 85 5 3 0 0 0 * capacità a a ridosso della smartcard
LI 120 85 105 70
LI 105 70 105 75
LI 105 75 110 70
LI 110 70 105 70

 usare la ICSP, cosa molto fastidiosa!
Prova a togliere il diodo 1n4148 che tanto non serve a nulla e se
si resetta ancora abbassa il valore della resistenza di pull-up da 10K.
Non č che l'alimentazione della smartcard č presa sul condensatore da 100nF?
Se cosě fosse il problema sarebbe quello, perchč l'alimentazione passerebbe
attraverso la resistenza da 10K e il livello logico SU MCLR si abbasserebbe 
troppo.
10 mA a 5V sono una resistenza da 500 Ohm, ignorando la resistenza in 
ingresso del
pin del micro, il valore di tensione passerebbe da un po' meno di 5V a circa 
0V
nel momento di maggiore assorbimento della smartcard. (il condensatore da 
100 nF
non ce la fa sempre a fornire la corrente necessaria).
Controlla comunque l'alimentazione, quanta tensione (e corrente) fornisci in 
ingresso al 7805?
Comunque le reti RC per il reset del micro sarebbe meglio evitarle ed usare 
gli integrati
ad hoc per il reset.
Ciao e in bocca al lupo...

 si resetti ancora più facilmente!?!?!?
[...]
In genere quando si parla di lettori smartcard, si tende a tenere separate 
le alimentazioni del circuito di controllo con quello della contattiera.
Sia per evitare quello che sta accadendo al tuo circuito (eventualmente 
anche se un utente crea un cortocircuito sulla contattiera), ma anche perchè 
ci sono smartcard che possono lavorare con tensioni di alimentazioni 
differenti (secondo le specifiche ISO7816 5V,3V,1.8V).
Se le tue carte sono a 5V, metti un piccolo 78L05 TO92 con relative capacità 
(10uF e 100nF sono sufficienti).
Per quanto riguarda il reset del micro:
-togli il diodo 1N4148 su mclr, che non conta + di tanto.
-sei sicuro di avere montato uno schottky e che sia in buono stato ?
-prova ad abbassare la resistenza da 10k e aumentare eventualmente la 
capacità (se utilizzi il por e bor interni al micro non è poi così 
fondamentale tenere bloccato mclr del micro fino a quando l'alimentazione è 
stabile, diverso era per i pic 'più vecchi' che non avevano la circuiteria 
bor).
Roberto P. 

 gli integrati ad hoc per il reset.
Per il costo del prodotto, non penso valga la pena aggiungere un chip di reset 
che, comunque, potrebbe solo peggiorare la situazione (se l'alimentazione va 
giù, se ne accorge meglio il chip di reset che il mio circuitino RC).
Per quanto riguarda la rete RC, quella è consigliata sul datasheet del 16F877A 
proprio dalla Microchip. Solo che lì si parla di una resistenza serie piuttosto 
che un diodo Schottky, ma non stanno prendendo in considerazione il problema ICSP.
A tal proposito, stavo pensando che, forse, il diodo Schottky potrebbe non 
servire. Se lo sostituisco con una resistenza sufficientemente grande (27K), 
durante la programmazione scorrono solo (13-5)/27K=185uA che non dovrebbero dare 
alcun problema al resto del circuito (praticamente c'è solo la smartcard, 
eventualmente inserita durante la programmazione, e il display).
In questo modo non devo neanche cambiare il PCB, ottimo!
Che ne pensate? Vale la pena provare o rischio di danneggiare qualcosa?

 che un picco di assorbimento tiri giù la 5V.
Anche io ho pensato a mettere una resistenza serie per alimentare la smartcard, 
proverò. Però è proprio strano 'sto fatto che l'uscita del 7805 va tanto giù da 
resettare il micro per un carico da 10mA! Anche perchè, in questo caso, per 
quale arcano motivo il micro non si resetta per Brown-out ma per MCLR?
Mi sto convincendo a cambiare quel diodo Schottky, magari è una ciofeca...

 avevano la circuiteria bor).
Perchè dovrebbe migliorare diminuendo la resistenza di pull-up? Sul datasheet si 
consiglia meno di 40K.

 considerazione il problema ICSP.
Guarda il POR a pagina 126
(
http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf
)
Se il tempo di salita dell'alimentazione č sufficiente (fai una prova...)
MCLR puoi collegarlo al 5V attraverso lo Schottky senza resistenza e 
condensatore,
tanto al reset iniziale ci pensa lui.
Ciao e buon lavoro 

Allora, la situazione è migliorata con lo schema che vi allego in fondo.
In pratica, 470R di resistenza di pull-up su MCLR, 1uF condensatore sempre su 
MCLR, diodo Schottky, senza 1N4148.
Rimane il 100nF vicino alla smartcard, dopo il cablaggio.
Dico che è migliorata perchè, su 100 inserimenti, 2-3 reset li continuo a 
vedere. Però ho notato anche un'altra cosa, molto strana.
Semplicemente toccando con un puntale di un multimetro, anche spento, il diodo 
Schottky (lato MCLR) oppure il pin MCLR stesso sul PIC, ho un reset!!!
Immagino che quel punto è ad alta impedenza e proprio il diodo lo faccia stare 
in quello stato. Ma è normale?
I reset che osservo all'inserimento della smartcard, quindi, non sono dovuti 
alla +5V che si siede ma forse a qualche transitorio nei segnali che si accoppia 
con la linea MCLR facendola abbassare, in pratica dei disturbi sulla linea MCLR 
che risulta ad alta impedenza.
Ecco perchè l'evento sembra casuale e il PIC si resetta per MCLR e non per BOR.
A questo punto, però, non so che pesci prendere. Quel circuito con il diodo 
Schottky è un classico. Possibile che nessuno abbia mai incontrato un problema 
simile? O forse è veramente il mio diodo Schottky rotto... ora non ne ho un 
altro, domani lo cambio.
Ho provato anche ad aggiungere una 27K verso massa sul PIN MCLR. Si abbassa 
leggermente la tensione sull'MCLR (c'è un partitore con la 470R) però rimaniamo 
sempre nei limiti e l'impedenza dovrebbe abbassarsi. Ma niente! Ancora, toccando 
soltanto con una pinzetta o un puntale di multimetro, il PIC si resetta!
Mboh!

 tanto al reset iniziale ci pensa lui.
E qui ci hai preso. Ho cortocircuitato la 470R di pull-up dell'MCLR ed ora 
neanche toccando con il puntale il pin di MCLR va in reset!
Ma cavolo... cambia così tanto da 470R a 0R? Stento a crederci...
A questo punto, forse è inutile anche il condensatore... che dici?

 A questo punto, forse è inutile anche il condensatore... che dici?
Il condensatore prova a toglierlo...
Ma comunque io lo lascerei (visto i problemi che hai avuto...) aiuta a 
mantenere un livello
+ stabile.
Insomma io collegherei MCLR direttamente all'alimentazione + condensatore + 
diodo.
Mi fa' piacere che tu sia riuscito a risolvere il problema!
Ciao 

 Mi fa' piacere che tu sia riuscito a risolvere il problema!
Anche a me... e grazie mille per la disponibilità.

dalla resistenza o dal diodo questa alta impedenza?
Se abilit BOR e POR puoi evitare il condensatore.
Nei dispositivi + datati serviva a creare una rete RC per ritardare la 
partenza del micro al powerup.
[...]
Roberto P. 

 partenza del micro al powerup.
Infatti, sono deciso a rimuovere il condensatore ma anche a sostituire lo 
Schottky con una resistenza sufficientemente alta, diciamo di 27k.

 ha scritto nel messaggio 
news:9Mn0i.2793$%k.2...@twister2.libero.it...

Ho fatto prove con schede che montano 16F876A e con altre che montano 
18F8722.
Nessuna scheda si resetta toccando il pin mclr.
Inoltre come ti dicevo sulle mie schede ha il jumper di reset posto fra mcrl 
e gnd.
Per resettare le schede devo mettere una resistenza abbastanza bassa, 
altrimenti non si resetta.
Direi che sul tuo hw deve per forza esserci qualcosa che non segue lo 
schema....
Roberto P. 

 schema....
Boh, a questo punto non so che dire...