- Messaggi: 6
- Ringraziamenti ricevuti 0
MSP430, Microcontrollori 16 bit Ultra Low Power
Generatore di forma d'onda sinusoidale
- Irene
- Autore della discussione
- Nuovo Utente
Less
Di più
10 Anni 2 Mesi fa #1
da Irene
Generatore di forma d'onda sinusoidale è stato creato da Irene
Buongiorno a tutti,
vi chiedo un supporto per favore. Mi spiego: sto facendo un firmwarino per creare un semplice generatore di forma d’onda. Uso un MSP430F5342 Texas.
La Questione:
Volevo (avrei tanto voluto insomma ) generare una sinuosoide, creando un buffer di 1000 campioni, per ora a frequenza=1 Hz.
Grazie ad un Timer a 1ms, invio con tale cadenza il campione della sinusoide al convertitore, tramite I2C. I dati che passo all’I2C sono a 16 bit unsigned, poi li trasformo a 12 bit (perdendo i 4 più significativi), perché ho un DAC a 12 bit.
Ho studiato che la funzione sin vuole double… Vi riporto un po’ di codice:
/*************************************************************************************/
Creo il buffer:
#define SAMPLING (1000)
…
uint16_t sin_buf [SAMPLING] = {0};
//uint16_t ampiezza= 38;
double frequenza = 1;
double omega;
…
void sine_wave_init (void){
omega=(2 * PI * (frequenza / SAMPLING));
for (y=0; y<SAMPLING; y++) {
sin_buf[y]= (uint16_t)(sin(omega*y));
}
}
/*************************************************************************************/
Nell’ISR del Timer a 1 ms:
// Onda sinusoidale con frequenza di 1 Hz e ampiezza di 100uV
for (y<1000){
sine_sample= ampiezza * sin_buf[y];
y++;
if (y==1000){
y=0;
}
}
TI_USCI_B1_I2C_transmit(sine_sample);
…
/*************************************************************************************/
Risulato: non visualizzo niente. Da principiante credo che ci sia un problema di tipi di variabile, forse mi perdo roba per strada. Avete qualche suggerimento da darmi per capire dove sto sbagliando??? Grazie mille,
Irene
vi chiedo un supporto per favore. Mi spiego: sto facendo un firmwarino per creare un semplice generatore di forma d’onda. Uso un MSP430F5342 Texas.
La Questione:
Volevo (avrei tanto voluto insomma ) generare una sinuosoide, creando un buffer di 1000 campioni, per ora a frequenza=1 Hz.
Grazie ad un Timer a 1ms, invio con tale cadenza il campione della sinusoide al convertitore, tramite I2C. I dati che passo all’I2C sono a 16 bit unsigned, poi li trasformo a 12 bit (perdendo i 4 più significativi), perché ho un DAC a 12 bit.
Ho studiato che la funzione sin vuole double… Vi riporto un po’ di codice:
/*************************************************************************************/
Creo il buffer:
#define SAMPLING (1000)
…
uint16_t sin_buf [SAMPLING] = {0};
//uint16_t ampiezza= 38;
double frequenza = 1;
double omega;
…
void sine_wave_init (void){
omega=(2 * PI * (frequenza / SAMPLING));
for (y=0; y<SAMPLING; y++) {
sin_buf[y]= (uint16_t)(sin(omega*y));
}
}
/*************************************************************************************/
Nell’ISR del Timer a 1 ms:
// Onda sinusoidale con frequenza di 1 Hz e ampiezza di 100uV
for (y<1000){
sine_sample= ampiezza * sin_buf[y];
y++;
if (y==1000){
y=0;
}
}
TI_USCI_B1_I2C_transmit(sine_sample);
…
/*************************************************************************************/
Risulato: non visualizzo niente. Da principiante credo che ci sia un problema di tipi di variabile, forse mi perdo roba per strada. Avete qualche suggerimento da darmi per capire dove sto sbagliando??? Grazie mille,
Irene
Si prega Accesso o Crea un account a partecipare alla conversazione.
10 Anni 2 Mesi fa #2
da bading
http:\www.d2l.it
Risposta da bading al topic Generatore di forma d'onda sinusoidale
Irene,
premesso che non ho mai utilizzato micro MSP ne DAC e ammesso che il collegamento I2C sia funzionante (l'hai testato inviando semplici valori fissi e misurando se l'uscita di tensione del DAC varia conseguentemente) credo che nella conversione devi perdere i 4 bit meno significativi e non i più significativi come hai scritto.
Ciao,
Dario
premesso che non ho mai utilizzato micro MSP ne DAC e ammesso che il collegamento I2C sia funzionante (l'hai testato inviando semplici valori fissi e misurando se l'uscita di tensione del DAC varia conseguentemente) credo che nella conversione devi perdere i 4 bit meno significativi e non i più significativi come hai scritto.
Ciao,
Dario
http:\www.d2l.it
I seguenti utenti hanno detto grazie : Irene
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Irene
- Autore della discussione
- Nuovo Utente
Less
Di più
- Messaggi: 6
- Ringraziamenti ricevuti 0
10 Anni 2 Mesi fa #3
da Irene
Risposta da Irene al topic Generatore di forma d'onda sinusoidale
Ciao Dario,
grazie per la risposta
Riguardo ai bit "sacrificati", ho scelto quella strada perché i miei numeri sono sempre piccoli, quindi la rimozione dei 4 bit significativi non incide sui risultati.
La comunicazione I2C al DAC funziona, ho problemi sull'onda sinusoidale. Però rifletterò sul tuo suggerimento, è sempre bene rivedere se mi sono persa qualche caso importante.
Grazie ancora,
Irene
grazie per la risposta
Riguardo ai bit "sacrificati", ho scelto quella strada perché i miei numeri sono sempre piccoli, quindi la rimozione dei 4 bit significativi non incide sui risultati.
La comunicazione I2C al DAC funziona, ho problemi sull'onda sinusoidale. Però rifletterò sul tuo suggerimento, è sempre bene rivedere se mi sono persa qualche caso importante.
Grazie ancora,
Irene
Si prega Accesso o Crea un account a partecipare alla conversazione.
10 Anni 2 Mesi fa #4
da bading
http:\www.d2l.it
Risposta da bading al topic Generatore di forma d'onda sinusoidale
Perché dici che i tuoi numeri sono piccoli?
Credo tu debba fare in modo di sfruttare tutta la dinamica del DAC; in pratica il massimo della sinusoide sarà 0xFFF da dare in ingresso al DAC.
Ciao,
Dario
Credo tu debba fare in modo di sfruttare tutta la dinamica del DAC; in pratica il massimo della sinusoide sarà 0xFFF da dare in ingresso al DAC.
Ciao,
Dario
http:\www.d2l.it
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Irene
- Autore della discussione
- Nuovo Utente
Less
Di più
- Messaggi: 6
- Ringraziamenti ricevuti 0
10 Anni 2 Mesi fa #5
da Irene
Risposta da Irene al topic Generatore di forma d'onda sinusoidale
Ciao Dario,
la sinusoide che vorrei generare ha ampiezza di 100 uV, la dinamica del convertitore 2,7 V.
Per questo dicevo dei segnali piccoli.
Sul codice che ho riportato avete qualche idea su possibili errori?
Grazie mille
I.
la sinusoide che vorrei generare ha ampiezza di 100 uV, la dinamica del convertitore 2,7 V.
Per questo dicevo dei segnali piccoli.
Sul codice che ho riportato avete qualche idea su possibili errori?
Grazie mille
I.
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Freedom III e compilazioni fallite
- da Black
-
- MODULO GSM SIM900A
- da FABRIZIO
-
- LTerminal - nuove funzioni
- da Mauro Laurenti
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti