chi mi da qualche dritta?
grazie
Buon lavoro.
"xdecax" <email...@nononono.com> ha scritto nel messaggio
news:442bd43d$0$18298$4faf...@reader1.news.tin.it...
Non so se intendevi dirgli di mettere un DDS esterno, ma se e'
una cosa didattica non [enso che gli vada bene. Se invece
volevi dirgli di fare un DDS con il micro, non e' che il DDS da
solo gli generi la sinusoide.
Da quanto ho capito io, vorrebbe generare i dati di una sinusolide
da software e mandarli al DAC per visualizzare il risultato su un
oscilloscopio.
Soluzioni:
1. Sviluppo in serie come gli hai detto tu, ma richiede parecchi
calcoli in virgola mobile, a quel punto meglio usare un linguaggio
ad alto livello e usare la funzione di libreria seno.
2. Preparare una tabella di valori precalcolati della funzione seno
e metterla in rom, quindi da software, leggere i dati e mandarli al DAC.
3. Usare l'algoritmo CORDIC che serve propio per generare funzioni
trigonometriche con numeri interi.
Di seguito il listato in QuickBasic per generare una tabella sinusoidale su di
un file.
Non mi chiedere molto perchè si tratta di un programma del 1988, se non hai il
QB lo puoi scaricare qui:
http://www.ring-apotheke.com/pkworld/download/compiler/qb71eng.zip
_______________________________
' CALCOLO SINUSOIDE IDEALE PER EPROM USANDO UNA PRECISIONE DI 8 BITS
' IL NUMERO DI GRADINI E' VARIABILE USANDO VALORI DI [Res] IN PASSI DI 8 BITS
CONST PI = 3.141592653589793#
DEFINT I
Res% = 256 ' 1024
STP# = 2 * PI / (Res% - 1)
Byt% = Res% / 256
A$ = "SIN" + LTRIM$(STR$(Res%)) + ".SRC"
CLS : PRINT
PRINT "FILE PER GENERATORE SINUSOIDALE CON RISOLUZIONE 8 BITS E NUMERO DI
STEPS"; Res%
OPEN A$ FOR OUTPUT AS #1
PRINT #1, ";HEX 8 BITS SINUSOIDE"; TAB(27); "STEP"; TAB(38); "SENO"; TAB(60);
"PIENA RISOLUZIONE"
OPEN "FILESIN.SRC" FOR OUTPUT AS #2
PRINT #2, ";FILE PER GENERATORE SINUSOIDALE CON RISOLUZIONE 8 BITS E NUMERO DI
STEPS"; Res%
FOR I = 0 TO Res% - 1
X# = STP# * I
S# = (SIN(X#))
SR# = ((S# + 1) / 2) * (Res%)
HXV$ = "0" + HEX$(INT(SR# / Byt%)) + "H"
PRINT #1, CHR$(9); "DB"; CHR$(9); HXV$; CHR$(9); HEX$(I); CHR$(9); S#;
CHR$(9); SR#
IF I MOD 10 = 0 THEN
PRINT #2, CHR$(&HD); CHR$(&HA); CHR$(9); "DB"; CHR$(9);
ELSE
PRINT #2, ",";
END IF
PRINT #2, HXV$;
NEXT I
CLOSE
_____________________________
Potresti utilizzare una tabella memorizzata in eprom in cui per ogni valore
di angolo memorizzi, con un formato che a te sta bene, il relativo valore di
seno.
A questo punto semplicemente puntando alla tabella (es con HL) con uno
spiazzamento dipendente dall'angolo ottieni ciň che ti serve...facile e
senza scomodare tanta matematica ;-)
Ciao
Max
>Il giorno Thu, 30 Mar 2006 14:52:53 +0200, "xdecax" <email...@nononono.com> ha
>scritto:
>
>>devo trovare il modo di produrre con un d/a 8 bit una bella onda
>>sinusoidale..
>>non importa la frequenza..
>>il processore è Z80
>>si tratta di una cosa didattica.. vorrei fare bella figura ma da 2 o 3
>>giorni non trovo una soluzione..
>>mi viene in mente di usare il seno.. ma come faccio con lo Z80???? mah.....
>>
>>chi mi da qualche dritta?
Una volta che hai la tabella devi darla fuori sul tuo DAC a intervalli regolari,
l'ideale sarebbe usare un timer se hai qualcosa tipo uno Z80 CTC sulla scheda.
GRAZIE
penso che userò questa "tattica"
appena ho sotto mano la piastra test faccio una prova e vi faccio sapere
Ottima soluzione, cmq prova a dare un'occhiata all'algoritmo CORDIC, č
veramente qualche cosa di meraviglioso, con questo algoritmo potresti
generare sinusoidi di frequenza arbitraria.
Ciao, Emiiano.
ho guardato ed è veramente interessante.. però è decisamente fuori dalla mia
portata.. non ho + la mente fresca come una volta :)
mi sembra eccessivo per fare bella figura in 10 minuti di lezione..
opterò per l'inserimente di 128 o addirittura 256 valori in una tabella da
richiamare prima in un senso e poi nel senso opposto.. saranno a dir tanto
20 righe di prog + la tabella...con qualche nop varierò la frequenza (che
non è importante..)
grazue ancora
"xdecax" <email...@nononono.com> ha scritto nel messaggio
news:442bd43d$0$18298$4faf...@reader1.news.tin.it...
> devo trovare il modo di produrre con un d/a 8 bit una bella onda
> sinusoidale..
> non importa la frequenza..
> il processore č Z80
A che serve il processore? Basta una eprom collegata direttamente al
convertitore D/A
bhe lo scopo è farla con quello che ho.. e cioè una piastra z80 didattica..
Certo davo per scontato un contatore e un oscillatore :)
ciao