Newsgroup: it.hobby.elettronica.digitale
Titolo: Processore per generatore di funzioni arbitrario

Devo scegliere un micro per la realizazione di un generatore arbitrario di
forme d'onda.
Il micro deve ciclicamente leggere tutte le locazioni di RAM e caricare il
contenuto nel registro di porta. In pratica,
un abbozzo di microcodice è :
< per tutte le locazioni di ram >
mov W,RAM
mov PORT,W
inc RAM
Per ottenere il massimo numero di sample in uscita( a parità di tutto il
resto) dovrei massimizzare la frequenza di istruzione, ovvero scegliere il
micro con il maggior numero di MIPS possibile.
Tra i dispositivi facilmente reperibili in commercio ho visto che gli SCENIX
vantano 50 MIPS che, a occhio mi potrebbere assicurare circa 15 M campioni
al secondo. Che ne dite ? Esiste una scelta migliore ?
Grazie a tutti per le risposte.

peppe wrote:

http://www.njqrp.org/digitalhomebrewing/wb2v_dds_vfo/wb2v_dds_vfo.html
http://members.iinet.net.au/~richardh/Direct%20Digital%20Synthesizer%20using%20the%20AD9854%20quadrature%20DDS.htm
divertiti
--
Maurizio

 al secondo. Che ne dite ?
Che per un secondo di forma d'onda ti servono 15 megabytes di dati...
...se poi lo fai con risoluzione di 16 bit diventano 30 megabytes...
Interpolare un po' invece no?

 Grazie a tutti per le risposte.
Dipende dalla complessità della forma d'onda e dalla (massima) frequenza che
vuoi generare... ad esempio una semplice sinusoide può essere ricostruita
conoscendo 2 campioni per periodo, una forma d'onda più complessa richiede
la conoscenza di più campioni. Prima di scegliere da subito il micro più
veloce, io rifletterei su queste due cose.
Ciao!
-
paperog@

Provo a spiegare un pò le mie idee.
Il microprocessore memorizza nella RAM i valori ( profondità 8 bit ) dei
campioni che devono essere mandati ad un convertitore D-A. Il micro esegue
tante volte quanti sono le locazioni di RAM il seguente codice:
mov w,locazione_attuale
mov porta,w
inc locazione_attuale
Diciamo, giusto per fissare le idee, che per portare in ingresso al D-A un
nuovo campione occorrono 3 cicli di clock ( supponendo che le istruzioni
siano tutte da 1 clock, come è per lo SCENIX ).
Supponiamo inoltre che il micro abbia circa 110 locazioni di RAM disponibili
per la memorizzazione dei campioni.
Segue che il dispositivo sarà caratterizzato da una frequenza massima del
segnale in uscita pari a :
(# MIPS) / (3 * #loc RAM), ovvero, con 50 MIPS disponibili, 151 Khz.
Quello che voglio far notare è che il numero di MIPS è direttamente
proporzionale alla frequenza del segnale in uscita, da cui la richiesta
iniziale.
Ora mi si pongono altri problemi di fronte: 1) numero limitato di locazioni
di RAM ; 2) settaggio frequenza segnale in uscita ... Ma su questo ci sto
riflettendo.
Ciao.

 wrote in message ajjbcq$9k2$1...@lacerta.tiscalinet.it...

E' molto meglio se lo fai via hardware, con un contatore e
una RAM veloce. Puoi arrivare facilmente a 100 MHz e
anche molto di più. Il micro eventualmente lo usi per caricare
i campioni nella RAM.

 riflettendo.
Il problema delle locazioni di Ram è legato strettamente al problema della
frequenza selezionabile... mi spiego meglio: il modo più semplice per poter
variare la frequenza sarebbe quello di poter variare la velocità del clock,
ma questo non è fattibile per una serie di motivi. Un secondo modo per
produrre frequenze più alte è quello di fare saltare alcuni campioni dalla
lettura... cioè:
se hai 100 campioni e leggendoli tutti produci in uscita un'onda a frequenza
1 Mhz, è ovvio che leggendo 50 campioni riuscirai a produrre in uscità
un'onda la cui frequenza è il doppio della precedente (cioè 2 Mhz).
VANTAGGI: puoi facilmente produrre frequenze elevate
SVANTAGGI: non puoi produrre frequenze minori di quella di riferimento; ogni
volta che aumenti la frequenza perdi in purezza (la forma d'onda d'uscita
non sarà altrettanto buona).
RIMEDI: aumentare a dismisura il numero dei campioni.
Ciao!
-
paperog@


Avevo pensato anche a questa soluzione. Come faresti a variare il clock del
dispositivo in
modo dinamico ?
Ciao.

 wrote in message ajohsf$scb$2...@lacerta.tiscalinet.it...

Non capisco bene cosa intendi per modo dinamico.
Comunque per fare un clock variabile ci sono molte soluzioni.
Un oscillatore libero, per esempio un VCO, che puoi controllare
con una tensione esterna.
Un PLL, che puoi controllare con un segnale digitale, oppure un
DDS.
La scelta dipende dalla precisione richiesta, dal modo in cui vuoi
controllare la frequenza, dalla velocità di variazione, dal costo e così
via.

 Ciao.
non so se avete considerato un mio precedente suggerimento che ribadisco
arricchendolo.
http://www.epanorama.net/links/measuring.html
http://www.rgmelsat.com/sw_downl/swdownl.htm
http://www.page.sannet.ne.jp/kenjia/DDS.html
http://www.njqrp.org/digitalhomebrewing/wb2v_dds_vfo/wb2v_dds_vfo.html
http://members.iinet.net.au/~richardh/Direct%20Digital%20Synthesizer%20using%20the%20AD9854%20quadrature%20DDS.htm
--
Maurizio

 prestazioni).
Probabilmente si parla sempre di un numero molto elevato di campioni anche
in caso della massima frequenza, per cui la latenza introdotta dalla parte
software non dovrebbe apportare un errore significativo (o comunque sia
l'errore così introdotto dovrebbe essere non maggiore di quello causato
utilizzando un clock variabile... poi come spesso accade, magari la scelta
deriva unicamente da un fattore economico...).
Comunque sono d'accordo con chi suggerisce di non utilizzare solamente un
microcontrollore... hai provato a dare un'occhiata a qualche generatore
d'onda magari di prezzo modico? Ci sta che qualche spunto lo riesci a
trarre...
Ciao!
-
paperog@