Newsgroup: it.hobby.elettronica.digitale
Titolo: problemi clock 20MHz

salve,
ho un piccolo problema con un pic 16f876 a 20MHz, in pratica l'ho montato
su una piastra si prototipazione con un quarzo da 20MHz ma come inserisco
le capacità da 22pF il pic si blocca, perchè?
inoltre facendolo funzionare senza capacità ho l'impressione che non si
preciso?!?! è possibile? è preferibile saldare il tutto su una pastra mille
fori?!?!
GRAZIE
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 fori?!?!
Sicuramente a 20MHz sarebbe preferibile avere la parte dell'oscillatore con
collegamenti brevi e sicuri.
Comunque ho avuto modo di sperimentare anche su bread board, ti consiglio di
ridurre al minimo la lunghezza dei fili di collegamento (adesso sta
praticamente funzionando grazie alle capacità parassite dei cavi e della
basetta).
Prova anche ad aumentare le capacità a 33pF.
Le capacità sono necessarie, senza il circuito non è affidabile, ed in linea
teorica non dovrebbe funzionare.
Ciao, Robby

stai attento a che pic usi ci sono anche pic16f876 che vanno a 4
Mhz
ciao
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

utilizzo un pic 16f876 a 20MHz (certificato)...
anch'io pensavo a delle capacità parassita, per questo motivo vi chiedevo
, visto la vostra grande esperienza, se vi è capitata una cosa del genere.
Il progetto che stò costruendo è un dimmer per luci, ma nel controllo dei
tempi dell'onda non mi risultano 10ms ma 9.2ms dal timer0, ho pensato che
fosse un problema nel'int troppo laborioso, ma anche riducendo anche al
minimo il codice i tempi non variano molto... forse è il codice oppure il
ck del tmr0?!?!
cmq grazie per i vostri consigli...


 Spero proprio che non sia così ;-))
Invece anche a me succede *sempre* cosi'. Non so se e' un problema di un
tipo particolare di quarzo o chissa' cosa ma l'unico modo per ovviare al
problema e' scendere a 10pf di capacita' e *non* aumentare.
In realta' anche senza condensatori oscilla in modo quasi accettabile, e
questo grazie alle capacita' parassite che sono presenti tra i pin
dell'oscillatore e la massa. Questa configurazione costituisce pero' un
sistema inaffidabile in quanto non c'e' alcuna garanzia che queste capacita'
siano costanti o simmetriche.
Ciao
Lorenzo

 le capacità da 22pF il pic si blocca, perchè?
Nel 90% di questi casi c'e' l'oscillatore programmato sbagliato.
Controlla che sia in modo HS.
Sicuro che i condensatori siano da 22 pF? A volte le sigle ingannano.
Eventualmente prova a programmare l'oscillatore come XT
e vedi cosa succede, se il quarzo e' da 20 MHz in overtone
in realta' oscillera' a 6,7 MHz.

 ha scritto nel messaggio
news:43lEc.552530$rM4.23...@news4.tin.it...

Se ti accade sempre, significa che i collegamenti fra i pin dell'oscillatore
ed il quarzo e le capacità fanno percorsi sbagliati o lunghi.
Aumentare le capacità significa rendere + stabile il clock (come dice anche
il manuale), chiaramente hai il limite max dei 33pF, e se parti da un
circuito dove già di base hai qualche decina di pF dovuti al circuito, passi
il limite superiore.
Non ho mai avuto questi problemi, nè con circuiti filari (saldati), nè con
c.s. autocostruiti, può accadere con le bread board, ma in genere vanno bene
per testare circuiti ad alta frequenza.
E' importante anche che il filo degli 0V che connette i due condensatori sia
il + breve possibile e collegato agli 0V del micro.
Ciao, Robby

CRYSTAL OSCILLATOR
14.2.1 OSCILLATOR TYPES
The PIC16F87XA can be operated in four different
oscillator modes. The user can program two configuration
bits (FOSC1 and FOSC0) to select one of these four
modes:
• LP Low-Power Crystal
• XT Crystal/Resonator
• HS High-Speed Crystal/Resonator
• RC Resistor/Capacitor
14.2.2 CRYSTAL OSCILLATOR/CERAMIC
RESONATORS
In XT, LP or HS modes, a crystal or ceramic resonator
is connected to the OSC1/CLKI and OSC2/CLKO pins
to establish oscillation (Figure 14-1). The PIC16F87XA
oscillator design requires the use of a parallel cut crystal.
Use of a series cut crystal may give a frequency out
of the crystal manufacturer’s specifications. When in
XT, LP or HS modes, the device can have an external
clock source to drive the OSC1/CLKI pin (Figure 14-2).
Crystal
Freq.
Cap. Range
C1
Cap. Range
C2
LP 32 kHz 33 pF 33 pF
200 kHz 15 pF 15 pF
XT 200 kHz 47-68 pF 47-68 pF
1 MHz 15 pF 15 pF
4 MHz 15 pF 15 pF
HS 4 MHz 15 pF 15 pF
8 MHz 15-33 pF 15-33 pF
20 MHz 15-33 pF 15-33 pF
Note 1: Higher capacitance increases the stability
of oscillator but also increases the start-up
time.
2: Since each resonator/crystal has its own
characteristics, the user should consult
the resonator/crystal manufacturer for
appropriate values of external
components.
3: Rs may be required in HS mode, as well
as XT mode, to avoid overdriving crystals
with low drive level specification.
4: When migrating from other PICmicro®
devices, oscillator performance should be
verified.


Allora, 
errore n.1, non ho settato il pic in HS per i 20MHz e con i due
condensatori
da 33pF funziona
ho cercato di ridurre al minimo il codice per capire quanto oscilla tenendo
in considerazione il ck di rete e poi tresmettendo il valore del contatore 
via seriale rs232 al pc ma il valore che mi torna è 0x5C, cioè 92 impulsi
per per avere i 100Hz, ma ogni impulso dovrebbe avere 0.1ms su tmr0 e
prescaler settato al punto giusto... quindi il valore non torna
il problema è che non ho un oscilloscopio per verificare le frequenze, ho
solo un oscilloscopio per porta parellela con un ADC ed una risoluzione
max circa 2us (LPTSCOPE) sufficente solo per analizzare i 100Hz...
quindi vi chiedo dove stò sbagliando...


 quindi vi chiedo dove stò sbagliando...
Prima di aiutarti dovremmo capire bene che cosa vuoi ottenere, posta un
pezzo di codice.
Generi una frequenza utilizzando tmr0 ? Se generi questa frequenza in
interrupt, per calcolare il hai tenuto conto del tempo necessario alle
istruzioni di entrata/uscita dall'interrupt  ?
Ciao, Robby

su pic 16f876 ed un ck da 20MHz
con:
option_reg = 10000001b; //  prescailer = TMR0 , rate = 4:1
tmr0 = 0x83;
questo è un pezzo di codice:
void interrupt( void ) {
 
//RB0////////////////////////////////////////////////////////////
if ( ( intcon  & INTF_MASK ) != 0 ) {	//int RB0 clock esterno 100Hz 10ms
	clear_bit( intcon, INTF );
        clear_bit( intcon, T0IF );
	tmr0 = 0x83;
	cOutCount=cOut;
	cOut=0;
}
//TMR0////////////////////////////////////////////////////////////
if ( ( intcon  & T0IF_MASK ) != 0 ) {
	clear_bit( intcon, T0IF );
	tmr0 = 0x83;
	//base 100us
	cOut++;
}
 
}
in questo caso il byte cOutCount=0x5C cioè 92 impulsi mentre dovrebbero
essere 100
