Newsgroup: it.hobby.elettronica.digitale
Titolo: sinusoide digitale

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?
grazie

 ha scritto nel messaggio 
news:442bd43d$0$18298$4faf...@reader1.news.tin.it...


 internet info sulla tecnica DDS (sintesi digitale diretta dei segnali).
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.

 ha
scritto:

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

>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.

 QB lo puoi scaricare qui:
GRAZIE
penso che userò questa "tattica"
appena ho sotto mano la piastra test faccio una prova e vi faccio sapere

 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. 

 generare sinusoidi di frequenza arbitraria.
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

 il processore č Z80


 mi viene in mente di usare il seno.. ma come faccio con lo Z80???? mah.....
A che serve il processore? Basta una eprom collegata direttamente al 
convertitore D/A

 ha scritto nel messaggio
news:442e72b2$0$29731$4faf...@reader2.news.tin.it...

..almeno un contatore ti serve oltre alla eprom!..

 ..almeno un contatore ti serve oltre alla eprom!..
bhe lo scopo è farla con quello che ho.. e cioè una piastra z80 didattica..

Stefano ha scritto:

Certo davo per scontato un contatore e un oscillatore :)
ciao

precaricati i valori di un intero periodo
da 80h a FFh, da FFh a 80h, da 80h a 00h e da 00h a 80
e leggendoli con un programmino da 4 righe
viene proprio una bella sinusoide..
peccato per la frequenza... 300 hz con risoluzione di 256 valori, e circa
570 hz con risoluzione 128