XBEE e audio
10 Anni 9 Mesi fa #1
da seastar2262
XBEE e audio è stato creato da seastar2262
Ciao a tutti,
sto realizzando un comando a distanza che fa uso dei moduli Xbee della digi, serie Pro ( mi serve coprire una notevole distanza). Per quanto riguarda la loro gestione non ci sono grandi problemi, ma vorrei, senza nessuna pretesa di fedeltà, trasferire anche audio.
Ho fatto una prova, con l'ADC del 18F4550 prendo il segnale di un microfono e passo il valore acquisito direttamente al pwm, prelevandolo con un filtro passa basso e amplifcandolo. Sono rimasto sorpreso dal risultato ottenuto che, sebbene con la fedeltà non ha davvero nulla a che fare, ha riprodotto la voce in modo decisamente comprensibile.
Il mio dubbio adesso è questo:
passo direttamente il valore dell'adc alla USART o devo formattare i dati, fare un buffer ? Prima di fare qualsiasi prova, volevo sapere se qualcuno ha già fatto una cosa analoga o se ci sono consigli o idee, vorrei poi a mia volta condividere tutto il progetto.
Se non dovessi essermi spiegato bene (in questa fase non sono sceso in dettagli appositamente), posso postare il codice che in questo momento ha reso possibile l'avvio di questo pensiero
Saluti
Massimo
sto realizzando un comando a distanza che fa uso dei moduli Xbee della digi, serie Pro ( mi serve coprire una notevole distanza). Per quanto riguarda la loro gestione non ci sono grandi problemi, ma vorrei, senza nessuna pretesa di fedeltà, trasferire anche audio.
Ho fatto una prova, con l'ADC del 18F4550 prendo il segnale di un microfono e passo il valore acquisito direttamente al pwm, prelevandolo con un filtro passa basso e amplifcandolo. Sono rimasto sorpreso dal risultato ottenuto che, sebbene con la fedeltà non ha davvero nulla a che fare, ha riprodotto la voce in modo decisamente comprensibile.
Il mio dubbio adesso è questo:
passo direttamente il valore dell'adc alla USART o devo formattare i dati, fare un buffer ? Prima di fare qualsiasi prova, volevo sapere se qualcuno ha già fatto una cosa analoga o se ci sono consigli o idee, vorrei poi a mia volta condividere tutto il progetto.
Se non dovessi essermi spiegato bene (in questa fase non sono sceso in dettagli appositamente), posso postare il codice che in questo momento ha reso possibile l'avvio di questo pensiero
Saluti
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- seastar2262
- Autore della discussione
- Visitatori
10 Anni 8 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic XBEE e audio
Ciao Massimo,
personalmente non ho fatto cose simili ma qualche considerazione.
Valuta il baud rate massimo dei moduli.
Non puoi andare oltre per cui devi regolare il sampling rate dell' ADC.
Valuta di inviare solo 8 bit piuttosto che 10.
Un piccolo buffer potrebbe aiutare ma se devi avere una trasmissione real time, il buffer serve a poco.
Alcune volte e' meglio perdere qualche byte e mantenere la continuita' del tempo.
Poi dipende dalla tua applicazione.
Per avere alta qualita' potresti comprimere i dati, ma con un PIC ad 8 bit non so se il gioco vale la candela.
Saluti,
Mauro
personalmente non ho fatto cose simili ma qualche considerazione.
Valuta il baud rate massimo dei moduli.
Non puoi andare oltre per cui devi regolare il sampling rate dell' ADC.
Valuta di inviare solo 8 bit piuttosto che 10.
Un piccolo buffer potrebbe aiutare ma se devi avere una trasmissione real time, il buffer serve a poco.
Alcune volte e' meglio perdere qualche byte e mantenere la continuita' del tempo.
Poi dipende dalla tua applicazione.
Per avere alta qualita' potresti comprimere i dati, ma con un PIC ad 8 bit non so se il gioco vale la candela.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Mauro Laurenti
- Moderator
Riduci
Di più
10 Anni 8 Mesi fa #3
da seastar2262
Risposta da seastar2262 al topic XBEE e audio
Ciao Mauro,
grazie per le tue considerazioni, dovendo campionare solo voce, pensavo di campionare a 10 Khz...
questo semplice codice fa dignitosamente il suo lavoro (...la fedeltà è un'altra cosa) bisogna lavorarci su, ma non sapevo come impostare il codice per cui ho scritto semplicemente così:
while(1)
{
audioIn = ADC_Get_Sample(0);
//Delay_us(100);
PWM1_Set_Duty(audioIn);
//Delay_us(100);
}
}
poi mi sono accorto che la libreria PWM di MikroC gestisce solo PWM a 8 bit per cui la qualità non migliora sicuro. Quello che proprio non mi è chiaro è come passare la lettura dell'ADC alla USART, mi sto annegando in un bicchiere d'acqua?? Altra cosa, sebbene la mia scarsa esperienza, è bene migrare a MPLAB X ?? Forse sono io che lo vedo più complesso di quello che è veramente.
Saluti
Massimo
grazie per le tue considerazioni, dovendo campionare solo voce, pensavo di campionare a 10 Khz...
questo semplice codice fa dignitosamente il suo lavoro (...la fedeltà è un'altra cosa) bisogna lavorarci su, ma non sapevo come impostare il codice per cui ho scritto semplicemente così:
while(1)
{
audioIn = ADC_Get_Sample(0);
//Delay_us(100);
PWM1_Set_Duty(audioIn);
//Delay_us(100);
}
}
poi mi sono accorto che la libreria PWM di MikroC gestisce solo PWM a 8 bit per cui la qualità non migliora sicuro. Quello che proprio non mi è chiaro è come passare la lettura dell'ADC alla USART, mi sto annegando in un bicchiere d'acqua?? Altra cosa, sebbene la mia scarsa esperienza, è bene migrare a MPLAB X ?? Forse sono io che lo vedo più complesso di quello che è veramente.
Saluti
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- seastar2262
- Autore della discussione
- Visitatori
10 Anni 8 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic XBEE e audio
Ciao Massimo,
per inviare i dati wireless puoi inviare direttamente i dati all´UART.
Unica attenzione e´ che l´ADC ritorna un valore a 10 bit mentre la UART e´ a 8 bit.
Per cui devi scrivere:
audioIn = ADC_Get_Sample(0) << 2;
o
audioIn = ADC_Get_Sample(0)/4;
in questa maniera elimini due bit.
...conoscendo il C non avrai problemi a passare all´XC8.
Dovrai solo abituarti al nuovo ambiente di sviluppo.
Saluti,
Mauro
per inviare i dati wireless puoi inviare direttamente i dati all´UART.
Unica attenzione e´ che l´ADC ritorna un valore a 10 bit mentre la UART e´ a 8 bit.
Per cui devi scrivere:
audioIn = ADC_Get_Sample(0) << 2;
o
audioIn = ADC_Get_Sample(0)/4;
in questa maniera elimini due bit.
...conoscendo il C non avrai problemi a passare all´XC8.
Dovrai solo abituarti al nuovo ambiente di sviluppo.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.