Newsgroup: it.hobby.elettronica.digitale
Titolo: pwm e cos'altro *contemporaneamente* con pic16f84 ?

Devo controllare la sintonia di un ricevitore tramite un convertitore
D/A che fornisce la tensione per i varicap.
Però ho visto uno schema dove un micro controller realizzava la stessa
funzione tramite una uscita in pwm (un registro a 14 bit controllava il
duty cycle in step di 0,33 microsecondi).
Se uso un pic 16F84 a 4 MHz per farlo, pensate che ci saranno variazioni
apprezzabili  nella tensione in uscita se nel frattempo controllo una
eeprom seriale esterna con protocollo I2C o 3 wire e testo alcuni
pulsanti ?
Cioè non vorrei "perdere" momentaneamente la stazione mentre memorizzo
la sintonia sulla eeprom.
MazE
--
per rispondere togliete gli "*" dall'email - remove "*" from address to reply
"2000: Siamo finalmente nell'ultimo anno del 2°millennio"

 MazE
Ciao,
Purtroppo con il PIC molto difficilmente riesci a gestire tempistiche cosi'
veloci (nel tuo caso un segnale a circa 3MHz), oltretutto in modalita' non
esclusiva (termine che mi sono inventato per dire che vuoi fare altre cose): devi
tener conto del fatto che le istruzioni vengono eseguite ad 1/4 della frequenza
di clock e quindi nel tuo caso ad 1MHz e nel caso migliore (Fck=20MHz P.S.
nessuno ha mai tentato l'overclock?) a 5 MHz. E' quindi impossibile riuscire a
generare un tempo cosi' veloce.
Esisterebbe una soluzione usando la periferica CCP presente sui PIC 16Cxx di
"fascia alta" e dai 28 pin in su (16C73 di sicuro perche' lo ho usato). In
pratica puoi effettuare un "compare" fra un numero (a 16 bit) precedentemente
impostato ed il numero di eventi (cicli) conteggiati in ingresso al PIC; quando i
valori sono uguali viene generato un interrupt. Inoltre viene generato un
interrupt (diverso) quando il contatore degli è pari 0. Puoi quindi realizzare
così il PWM (e' molto piu' semplice realizzarlo a 16 bit): colleghi all'ingresso
degli eventi da conteggiare un segnale a circa 3MHz (o piu' per mantenere il
periodo complessivo uguale a quello da te visto), all'interrupt del contatore
uguale a zero (all'accensione del primo ciclo te ne freghi) setta l'uscita che
abilita il PWM e memorizza il valore (16 bit) da raggiungere (in pratica il
periodo per cui deve stare alto il segnale), fai le altre cose finche' non viene
generato l'interrupt dei valori uguali, a questo punto abbassa l'uscita del PWM e
(facendo ancora quello che ti pare) attendi l'interrupt di contatore di eventi a
zero (succede quando viene conteggiato l'evento successivo a 0xFFFF) per
reiniziare il ciclo.
Anche in questa metodologia c'e' pero' un errore: la latenza dell'interrupt è
indeterminata: cioè l'esecuzione della routine di interrupt viene iniziata 4 o 5
istruzioni dopo l'evento che ha generato l'IRQ :-(
Questo introduce a (20MHz) un'indeterminazione di +/- 0.10 microsec (e forse
piu') su ogni transizione (da on ad off e viceversa); secondo me questo è
mooooolto confrontabile con il tempo di step e l'errore causato potrebbe creare
continui problemi di sintonia: a te l'ardua sentenza....comunque se vuoi
continuare su questa strada, io sono qui.
Ciao Massimiliano
P.S. A me non dispiace la soluzione che ti ha dato Lino su it.hobby.elettronica
(quella dei trimmer per ogni canale, che io piloterei, invece che col commutatore
con un PIC) non è hi-tec ma è semplice e facile da realizzare

D/A che fornisce la tensione per i varicap.
Perche' non usi una specie di sample&hold? I varicap hanno un'
impedenza molto alta alla basse frequenze, percio' potresti
"memorizzare" la tensione in di un condensatore collegato al
DAC tramite uno switch tipo 4066 o simili.
In pratica:
1 - prepari il valore analogico sul DAC
2 - chiudi lo switch per il tempo sufficiente a caricare
    il condensatore (pochi mS)
3 - apri lo switch
4 - fai altre cose (penso che hai a disposizione almeno alcuni secondi
    prima che esca di sintonia)
5 - torni al punto 1
Se per qualche motivo il circuito che porta la tensione ai varicap non e'
ad alta impedenza, non fai altro che metterci in mezzo un op-amp
a basso bias come voltage follower.
Luigi

 1 - prepari il valore analogico sul DAC
Il vantaggio dell'utilizzo del PWM e` proprio che non hai piu` bisogno del DAC!
:-)
--
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

:-)
Forse non sono stato abbastanza chiaro...
E' ovvio che non puoi mandare un segnale PWM direttamente ai varicap, a meno
che
non vuoi fare un ricevitore per spread spectrum!
Devi farne la media, o integrarlo, o filtrarlo (che poi significa sempre la
stessa
cosa), per avere un segnale in tensione continua... e il PWM in questo caso
fa la
funzione di un DAC (digital to analog converter).
Luigi

funzione di un DAC (digital to analog converter).
si, si. Ho collezionato qualche schema e in effetti all'uscita
dell'amplificatore pilotato con il pwm del micro, c'è sempre un filtro
RC ad 1 o 2 celle e anche un bel condensatore finale prima di entrare
sui varicap.
Però mi sa che riprendo con il DAC, perchè devo fare altre cose con il
pic ed il pwm non risulta preciso. 


Da Antonio
gcli...@syrene.it
L'idea di usare la PWM secondo me č ottima!
ma implementarla via software penso sia uno
spreco di risorse ed una cosa inutile poiché
i Pic della famiglia 16C7x a partire dal 72
hanno tutti in HARWARE ciň che ti serve per
generare una precisa forma d'onda a duty-cycle
variabile!!!!
L'unico inconveniente rispetto all'implementazione
del PWM con l'uso del CCP č che la risoluzione č
massimo di 10 bit e la frequenza di poco inferiore
a 20KHz, ma non hai alcun carico per il MCU e
nessuna latenza di interrupt.
Se usi un PIC di fascia alta puoi anche utilizzare
la SPI per interfacciarti alla memoria in modo piů
semplice.
Qualora tu voglia comunque utilizzare il PIC16F84
ed un DAC puoi recuperare alcuni pin (il PIC16F84
ne ha un po' pochi) multiplexando il DAC ed i tasti
sugli stessi pin del micro, in tal caso devi inserire
un D-Latch per il DAC e delle resistenze tra il micro
ed i tasti organizzati in una matrice 4X4 (max 16
tasti); in questo modo puoi controllare 16 tasti e
generare piů di una tensione continua (se usi un
DAC multiplo) con 9 pin, inoltre puoi implementare
un interrupt on key stroke utilizzando l'interrupt sul
cambiamento dei pin della porta B.
Buona fortuna e facci sapere cosa riesci a fare.

Buona fortuna e facci sapere cosa riesci a fare.
Grazie, la cosa sta *lentamente* prendendo forma...
