Newsgroup: it.hobby.elettronica.digitale
Titolo: Sinusoide con PIC

Ciao a tutti,
mi sarebbe piaciuto creare un'onda sinusoidale di freq. x compresa tra 
500-5khz utilizzando un PIC 16F876 o inferiore.
 
Come linguaggio purtroppo conosco solo il basic e qualche elementare 
istruzione assembler.
 
Ho letto che � possibile ricreare un' onda sinusoidale utilizzando la 
tecnica DDS o PWM.
Ho gi� letto alcuni articoli su internet ma ho davvero molta confusione in 
testa sul praticare tale tecnica e soprattutto nella creazione della Sine 
Lookup Table.
Qualcuno pu� aiutarmi ?
 
Grazie fin da ora a chi mi legge.
 
Robby 
 

Per la parte hardware direi che non ci sono problemi: filtro PB, eventuale 
R-2R ecc... mi mancano i concetti di logica/programmazione.
Grazie ancora.
 
Robby
 
"Vreg"  ha scritto nel messaggio 
news:503faa4f$0$17955$4faf...@reader1.news.tin.it...


Lookup Table 
 
Ciao,
diciamo che con il pwm si possono fare molte cose ma non tutto.
Se vuoi frequenze elevate e alto numero di bit allora abbandona il pwm; con un pic @4MHz e con un pwm a 16 bit riesci a generare segnali pwm con frequenza delle decine di Hz.
 
Piuttosto, puoi generare una tabella di valori binari (anche  con excel) che rifletta la forma d'onda desiderata e il numero N di bit di risoluzione di cui necessiti; questa tabella la devi scrivere poi, preferibilmente nella parte flash del microcontrollore . Una volta che ti chei un contatore che scorra la tabella leggendone i valori hai praticamente fatto: basta che il valore letto o lo mandi ad un DAC oppure ad una rete R 2R usando N pin del micro.
Se conosci l'assembply dei pic puoi realizzare questo sintetizzatore senza troppi sforzi.
 
 

Visto che hai interessi per i PIC e conosci "solo" il BASIC, dai 
un'occhiata a questo progetto FREE:
 
pptea.altervista.org
 


Qualcuno pu� aiutarmi ?
 
Com un PWM potresti generare sinusiodi solo a frequenze molto basse,
meglio usare un DAC, anche una rete R-2R  va bene, poi dai fuori i valori
sincronizzando il tutto con un timer, naturalmente a frequenza n*step.
 
In uscita dovrai aggiungere un filtro passa-basso per togliere i residui di alta
frequenza.
 
 
 
--
ciao
  Stefano

frequenza.
 
Perfetto.
 
Grazie ancora
Robby 
 

troppi sforzi.
 
Grazie per la risposta,
purtroppo sono i dati della tabella che non mi sono molto chiari e come 
utilizzarli per ricreare la mia sinusoide, per esempio da 1 khz.
 
Grazie
 
Robby 
 


pptea.altervista.org
 
 
Grazie per il link, guardo subito
 
Robby
 


Nell'esempio da 4 bit: dividi il periodo della sinusoide in 16 segmenti e, ad esempio, all'inizio di ognuno decidi di valutare l'ampiezza della tua sinusoide. Questo valore di tensione dovrà essere rappresentato a 4 bit.
Successivamente ottieni una tabella, che in realtà è una sola colonna composta da 16 righe dove ognuna contiene la tensione campionata della sinusoide.
Decidi poi il tempo di scansione della tabella, ad esempio 12.5us per valore, e cosi' in uscita dal tuo dac avrai la tua sinusoide con periodo di 200us cioè 5KHz. Se il tempo di scansione lo metti a 125us avrai invece una sinusoide a 500Hz.
La sinusoide che otterrai sarà molto grezza, tutta squadrettata, e andrà filtrata e, visto che usi campioni che hanno una frequenza di aggiornamento 16volte superiore rispetto alla sinusoide di 5KHz puoi fare un filtro passa basso con frequenza di taglio anche a 5KHz.
Se aumentassi il numero di bit, ad esempio 8, allora avresti una serie di 256 valori che compongono la tua sinusoide. Anche in questo caso, considerando la sinusoide a 5KHz da 256 valori,rispetto al tuo filtro passa basso da 5KHz lavori a frequenza 256volte maggiore e in uscita dal filtro avrai una sinusoide sicuramente migliore, piu' simile ad una sinusoide vera, che nel caso precedente con solo 16 livelli.
Se hai intenzione di realizzare il circuito con la sola alimentazione singola per ricavarti i valori dovrai scalare la sinusoide a VCC/2(da picco a picco) e sommargli VCC/2, cosicchè la tua sinusoide sia all'interno del range 0V...VCC.
Spero di esserti stato utile.

Ho capito bene o sono ancora sulla cattiva strada ?
 
Diciamo che i dati della tabella dovrebbero corrispondere al valore di una
sinusiode ideale in quel momento., come se tu disegnassi una forma d'onda per
punti, tipo l'esempio sul sito che hai linkato.
 
Credo che il disegno sul sito che traccia segmenti curvi per unire i punti della
sinusoide sia concettualmente sbagliato, in realt� i punti andrebbero uniti da
segmenti rettilinei, e se tu fai questa operazione capisci che 16 step sono
pochi e la forma d'onda in uscita non assomoglia a una sinusiode ideale ma forse
a un dente di sega.
 
Quindi avrai si una forma sinusoidale, ma con una distorsione armonica elevata.
 
Quello che pu� trasformare il segnale cos� ottenuto in una sinusoide � solo una
pesante filtratura in uscita, cosa accettabile se lavori a frequenza fissa, ma
non a frequenza variabile di qualche decade..
 
 
--
ciao
  Stefano


Guardati questo sito ha una marea di utili esempi:
http://www.romanblack.com/
 

 ha scritto nel messaggio 
news:503faa4f$0$17955$4faf...@reader1.news.tin.it...

dovresti per� spiegare a cosa ti serve quella sinusoide,per capire quanti 
bit di risoluzione ti servono
 
 

bit di risoluzione ti servono
 
Devo creare 2 toni uno a 1200 hz e uno a 2200 hz per realizzare un modem 
packet ax.25 a 1200bps.
 
Ciao! 
 

Ciao Stefano e grazie per le tue risposte.
In pratica la tabella serve per avere l'ampiezza e quindi la durata di una 
determinata tensione che andr� a formare la mia sinusoide giusto ?
 
Alla fine devo creare 2 sinusoidi una a 1200hz e una a 2200hz per creare un 
modem packet ax.25 a 1200bps.
E' a puro scopo hobbystico.
Una volta terminato il codice per creare le sinusoidi dovr� capire come 
trasmettere a 1200 bps...vedremo :-)
 
Ciao!
 
Robby 
 

Spero di esserti stato utile.
 
Utilissimo. Grazie davvero!
 
Robby 
 

 un modem packet ax.25 a 1200bps.
 
se lo scopo e' "solo" questo allora ti conviene generare onde quadre 
alle due frequenze e filtrare con un filtro attivo, senza andarti ad 
impelagare con la generazione analogica delle sinusoidi
magari se usi due pin distinti per i due segnali puoi utilizzare due 
filtri attivi distinti ottimizzati per le due frequenze.
